X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fplugins%2Fnat%2Fnat_reass.h;h=11f9db5a252065b5f67639348099d539b20911f2;hb=efd7bc2b1c8db160933ed3e9ab3cde0d07aaf863;hp=4a9137e325590fa748dc49ca2b7ff56fa5014359;hpb=51e759fd0655b6089360e1ccf2f5341704549fd4;p=vpp.git diff --git a/src/plugins/nat/nat_reass.h b/src/plugins/nat/nat_reass.h index 4a9137e3255..11f9db5a252 100644 --- a/src/plugins/nat/nat_reass.h +++ b/src/plugins/nat/nat_reass.h @@ -30,6 +30,10 @@ #define NAT_MAX_FRAG_DEFAULT 5 #define NAT_REASS_HT_LOAD_FACTOR (0.75) +#define NAT_REASS_FLAG_MAX_FRAG_DROP 1 +#define NAT_REASS_FLAG_CLASSIFY_ED_CONTINUE 2 +#define NAT_REASS_FLAG_ED_DONT_TRANSLATE 4 + typedef struct { union @@ -47,6 +51,13 @@ typedef struct }; } nat_reass_ip4_key_t; +enum +{ + NAT_REASS_IP4_CLASSIFY_NONE, + NAT_REASS_IP4_CLASSIFY_NEXT_IN2OUT, + NAT_REASS_IP4_CLASSIFY_NEXT_OUT2IN +}; + /* *INDENT-OFF* */ typedef CLIB_PACKED(struct { @@ -57,6 +68,8 @@ typedef CLIB_PACKED(struct f64 last_heard; u32 frags_per_reass_list_head_index; u8 frag_n; + u8 flags; + u8 classify_next; }) nat_reass_ip4_t; /* *INDENT-ON* */ @@ -86,6 +99,7 @@ typedef CLIB_PACKED(struct f64 last_heard; u32 frags_per_reass_list_head_index; u8 frag_n; + u8 flags; }) nat_reass_ip6_t; /* *INDENT-ON* */ @@ -199,6 +213,19 @@ nat_reass_ip4_t *nat_ip4_reass_find (ip4_address_t src, ip4_address_t dst, u16 frag_id, u8 proto); +/** + * @brief Create reassembly. + * + * @param src Source IPv4 address. + * @param dst Destination IPv4 address. + * @param frag_id Fragment ID. + * @param proto L4 protocol. + * + * @returns Reassembly data or 0 on failure. + */ +nat_reass_ip4_t *nat_ip4_reass_create (ip4_address_t src, ip4_address_t dst, + u16 frag_id, u8 proto); + /** * @brief Find or create reassembly. * @@ -222,10 +249,12 @@ nat_reass_ip4_t *nat_ip4_reass_find_or_create (ip4_address_t src, * * @param reass Reassembly data. * @param bi Buffer index. + * @param bi_to_drop Fragments to drop. * * @returns 0 on success, non-zero value otherwise. */ -int nat_ip4_reass_add_fragment (nat_reass_ip4_t * reass, u32 bi); +int nat_ip4_reass_add_fragment (u32 thread_index, nat_reass_ip4_t * reass, + u32 bi, u32 ** bi_to_drop); /** * @brief Get cached fragments. @@ -271,10 +300,12 @@ nat_reass_ip6_t *nat_ip6_reass_find_or_create (ip6_address_t src, * * @param reass Reassembly data. * @param bi Buffer index. + * @param bi_to_drop Fragments to drop. * * @returns 0 on success, non-zero value otherwise. */ -int nat_ip6_reass_add_fragment (nat_reass_ip6_t * reass, u32 bi); +int nat_ip6_reass_add_fragment (u32 thread_index, nat_reass_ip6_t * reass, + u32 bi, u32 ** bi_to_drop); /** * @brief Get cached fragments.