diff options
author | Klement Sekera <ksekera@cisco.com> | 2020-12-15 18:47:05 +0100 |
---|---|---|
committer | Ole Tr�an <otroan@employees.org> | 2021-01-18 08:36:26 +0000 |
commit | 4881cb4c6f0d9c6276eb7a45ed355f9fc3d729b3 (patch) | |
tree | 07959eb6fc99b88b30e6f81f4620d8d6c70110e2 /src/vnet | |
parent | 4a58e49cfe03150034a65e147a2ffe8d24391b86 (diff) |
nat: deal with flows instead of sessions
This change introduces flow concept to endpoint-dependent NAT. Instead
of having a session and a plethora of special cases in code for e.g.
hairpinning, twice-nat and others, figure all this out and store it in
flow logic. Every flow has a match and a rewrite part. This unifies all
the NAT packet processing cases into one - match a flow and rewrite the
packet based on that flow. It also provides a cure for hairpinning
dilemma where one part of the flow is on one worker and another on
a different one. These cases are also sped up by not requiring
destination adress lookup every single time to be able to rewrite source
nat as this is now part of flow rewrite logic.
Type: improvement
Change-Id: Ib60c992e16792ea4d4129bc10202ebb99a73b5be
Signed-off-by: Klement Sekera <ksekera@cisco.com>
Diffstat (limited to 'src/vnet')
-rw-r--r-- | src/vnet/buffer.h | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/src/vnet/buffer.h b/src/vnet/buffer.h index 9e997b81c52..aae999620ac 100644 --- a/src/vnet/buffer.h +++ b/src/vnet/buffer.h @@ -452,12 +452,14 @@ typedef struct /* size of L4 prototol header */ u16 gso_l4_hdr_sz; + /* The union below has a u64 alignment, so this space is unused */ + u32 __unused2[1]; + struct { - u16 unused; - u16 thread_next; u32 arc_next; - u32 ed_out2in_nat_session_index; + /* cached session index from previous node */ + u32 cached_session_index; } nat; union |