diff options
author | Matus Fabian <matfabia@cisco.com> | 2017-08-15 06:59:19 -0700 |
---|---|---|
committer | Ole Trøan <otroan@employees.org> | 2017-11-07 21:58:31 +0000 |
commit | efcd1e9e1d7dda4e4ea3db5750925cd8f6894f4d (patch) | |
tree | 63c07cf6a94820a5fb2c3935082b6a02f6d210d3 /src/plugins/nat/nat.h | |
parent | 20ab0a4943f7509f6e07d6c614eee90c80c8b963 (diff) |
SNAT: IP fragmentation (VPP-890)
Translation of fragmented packets.
Change-Id: I9b1f2e9433ce273638080f32c2d3bff39c49899d
Signed-off-by: Matus Fabian <matfabia@cisco.com>
Diffstat (limited to 'src/plugins/nat/nat.h')
-rw-r--r-- | src/plugins/nat/nat.h | 32 |
1 files changed, 29 insertions, 3 deletions
diff --git a/src/plugins/nat/nat.h b/src/plugins/nat/nat.h index b72e075df35..5bd0a119f38 100644 --- a/src/plugins/nat/nat.h +++ b/src/plugins/nat/nat.h @@ -154,9 +154,9 @@ typedef CLIB_PACKED(struct { /* Outside address */ u32 outside_address_index; /* 64-67 */ - /* External host address */ + /* External host address and port */ ip4_address_t ext_host_addr; /* 68-71 */ - + u16 ext_host_port; /* 72-73 */ }) snat_session_t; @@ -563,4 +563,30 @@ maximum_sessions_exceeded (snat_main_t *sm, u32 thread_index) return 0; } -#endif /* __included_nat_h__ */ +static_always_inline void +nat_send_all_to_node(vlib_main_t *vm, u32 *bi_vector, + vlib_node_runtime_t *node, vlib_error_t *error, u32 next) +{ + u32 n_left_from, *from, next_index, *to_next, n_left_to_next; + + from = bi_vector; + n_left_from = vec_len(bi_vector); + next_index = node->cached_next_index; + while (n_left_from > 0) { + vlib_get_next_frame(vm, node, next_index, to_next, n_left_to_next); + while (n_left_from > 0 && n_left_to_next > 0) { + u32 bi0 = to_next[0] = from[0]; + from += 1; + n_left_from -= 1; + to_next += 1; + n_left_to_next -= 1; + vlib_buffer_t *p0 = vlib_get_buffer(vm, bi0); + p0->error = *error; + vlib_validate_buffer_enqueue_x1(vm, node, next_index, to_next, + n_left_to_next, bi0, next); + } + vlib_put_next_frame(vm, node, next_index, n_left_to_next); + } +} + +#endif /* __included_snat_h__ */ |