mirror of
https://passt.top/passt
synced 2025-06-07 00:15:34 +02:00
flow, tcp: Generalise TCP hash table to general flow hash table
Move the data structures and helper functions for the TCP hash table to flow.c, making it a general hash table indexing sides of flows. This is largely code motion and straightforward renames. There are two semantic changes: * flow_lookup_af() now needs to verify that the entry has a matching protocol and interface as well as matching addresses and ports. * We double the size of the hash table, because it's now at least theoretically possible for both sides of each flow to be hashed. Signed-off-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
This commit is contained in:
parent
163a339214
commit
acca4235c4
5 changed files with 172 additions and 145 deletions
11
flow.h
11
flow.h
|
@ -164,10 +164,6 @@ static inline bool flowside_eq(const struct flowside *left,
|
|||
left->fport == right->fport;
|
||||
}
|
||||
|
||||
void flowside_from_af(struct flowside *side, sa_family_t af,
|
||||
const void *eaddr, in_port_t eport,
|
||||
const void *faddr, in_port_t fport);
|
||||
|
||||
/**
|
||||
* struct flow_common - Common fields for packet flows
|
||||
* @state: State of the flow table entry
|
||||
|
@ -233,6 +229,13 @@ static inline bool flow_sidx_eq(flow_sidx_t a, flow_sidx_t b)
|
|||
return (a.flowi == b.flowi) && (a.sidei == b.sidei);
|
||||
}
|
||||
|
||||
void flow_hash_insert(const struct ctx *c, flow_sidx_t sidx);
|
||||
void flow_hash_remove(const struct ctx *c, flow_sidx_t sidx);
|
||||
flow_sidx_t flow_lookup_af(const struct ctx *c,
|
||||
uint8_t proto, uint8_t pif, sa_family_t af,
|
||||
const void *eaddr, const void *faddr,
|
||||
in_port_t eport, in_port_t fport);
|
||||
|
||||
union flow;
|
||||
|
||||
void flow_init(void);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue