#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
};
} 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
{
f64 last_heard;
u32 frags_per_reass_list_head_index;
u8 frag_n;
+ u8 flags;
+ u8 classify_next;
}) nat_reass_ip4_t;
/* *INDENT-ON* */
f64 last_heard;
u32 frags_per_reass_list_head_index;
u8 frag_n;
+ u8 flags;
}) nat_reass_ip6_t;
/* *INDENT-ON* */
*
* @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.
*
* @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.