nat: nat44-ei hairpinning code cleanup
[vpp.git] / src / plugins / nat / nat44-ei / nat44_ei.h
index 0134c78..f353f48 100644 (file)
@@ -63,8 +63,9 @@ typedef enum
 #define NAT44_EI_SESSION_FLAG_UNKNOWN_PROTO  (1 << 1)
 
 /* Static mapping flags */
-#define NAT44_EI_SM_FLAG_ADDR_ONLY    (1 << 0)
-#define NAT44_EI_SM_FLAG_IDENTITY_NAT (1 << 1)
+#define NAT44_EI_SM_FLAG_ADDR_ONLY     (1 << 0)
+#define NAT44_EI_SM_FLAG_IDENTITY_NAT  (1 << 1)
+#define NAT44_EI_SM_FLAG_SWITCH_ADDRESS (1 << 2)
 
 typedef struct
 {
@@ -469,12 +470,14 @@ typedef struct nat44_ei_main_s
   /* nat44 plugin enabled */
   u8 enabled;
 
+  /* hairpinning registration counter */
+  u32 hairpin_reg;
+
   nat44_ei_config_t rconfig;
 
   u32 in2out_hairpinning_finish_ip4_lookup_node_fq_index;
   u32 in2out_hairpinning_finish_interface_output_node_fq_index;
   u32 hairpinning_fq_index;
-  u32 hairpin_dst_fq_index;
 
   vnet_main_t *vnet_main;
 } nat44_ei_main_t;
@@ -484,9 +487,10 @@ extern nat44_ei_main_t nat44_ei_main;
 int nat44_ei_plugin_enable (nat44_ei_config_t c);
 int nat44_ei_plugin_disable ();
 
-int nat44_ei_add_del_interface (u32 sw_if_index, u8 is_inside, int is_del);
-int nat44_ei_add_del_output_interface (u32 sw_if_index, int is_del);
-
+int nat44_ei_add_interface (u32 sw_if_index, u8 is_inside);
+int nat44_ei_del_interface (u32 sw_if_index, u8 is_inside);
+int nat44_ei_add_output_interface (u32 sw_if_index);
+int nat44_ei_del_output_interface (u32 sw_if_index);
 int nat44_ei_add_address (ip4_address_t *addr, u32 vrf_id);
 int nat44_ei_del_address (ip4_address_t addr, u8 delete_sm);
 int nat44_ei_add_interface_address (u32 sw_if_index);
@@ -624,21 +628,6 @@ void nat44_ei_delete_session (nat44_ei_main_t *nm, nat44_ei_session_t *ses,
 int nat44_i2o_is_idle_session_cb (clib_bihash_kv_8_8_t *kv, void *arg);
 int nat44_o2i_is_idle_session_cb (clib_bihash_kv_8_8_t *kv, void *arg);
 
-int nat44_ei_hairpinning (vlib_main_t *vm, vlib_node_runtime_t *node,
-                         nat44_ei_main_t *nm, u32 thread_index,
-                         vlib_buffer_t *b0, ip4_header_t *ip0,
-                         udp_header_t *udp0, tcp_header_t *tcp0, u32 proto0,
-                         int do_trace, u32 *required_thread_index);
-
-void nat44_ei_hairpinning_sm_unknown_proto (nat44_ei_main_t *nm,
-                                           vlib_buffer_t *b,
-                                           ip4_header_t *ip);
-
-u32 nat44_ei_icmp_hairpinning (nat44_ei_main_t *nm, vlib_buffer_t *b0,
-                              u32 thread_index, ip4_header_t *ip0,
-                              icmp46_header_t *icmp0,
-                              u32 *required_thread_index);
-
 int nat44_ei_set_frame_queue_nelts (u32 frame_queue_nelts);
 
 always_inline bool
@@ -677,6 +666,12 @@ is_sm_identity_nat (u32 f)
   return (f & NAT44_EI_SM_FLAG_IDENTITY_NAT);
 }
 
+always_inline bool
+is_sm_switch_address (u32 f)
+{
+  return (f & NAT44_EI_SM_FLAG_SWITCH_ADDRESS);
+}
+
 /* logging */
 #define nat44_ei_log_err(...)                                                 \
   vlib_log (VLIB_LOG_LEVEL_ERR, nat44_ei_main.log_class, __VA_ARGS__)