nat: nat44-ei hairpinning code cleanup
[vpp.git] / src / plugins / nat / nat44-ei / nat44_ei_out2in.c
index 7858811..5d91cb0 100644 (file)
@@ -56,18 +56,6 @@ format_nat44_ei_out2in_trace (u8 *s, va_list *args)
   return s;
 }
 
-static u8 *
-format_nat44_ei_out2in_fast_trace (u8 *s, va_list *args)
-{
-  CLIB_UNUSED (vlib_main_t * vm) = va_arg (*args, vlib_main_t *);
-  CLIB_UNUSED (vlib_node_t * node) = va_arg (*args, vlib_node_t *);
-  nat44_ei_out2in_trace_t *t = va_arg (*args, nat44_ei_out2in_trace_t *);
-
-  s = format (s, "NAT44_OUT2IN_FAST: sw_if_index %d, next index %d",
-             t->sw_if_index, t->next_index);
-  return s;
-}
-
 #define foreach_nat44_ei_out2in_error                                         \
   _ (UNSUPPORTED_PROTOCOL, "unsupported protocol")                            \
   _ (OUT_OF_PORTS, "out of ports")                                            \
@@ -1336,7 +1324,6 @@ VLIB_NODE_FN (nat44_ei_out2in_node)
   return frame->n_vectors;
 }
 
-/* *INDENT-OFF* */
 VLIB_REGISTER_NODE (nat44_ei_out2in_node) = {
   .name = "nat44-ei-out2in",
   .vector_size = sizeof (u32),
@@ -1357,190 +1344,6 @@ VLIB_REGISTER_NODE (nat44_ei_out2in_node) = {
     [NAT44_EI_OUT2IN_NEXT_ICMP_ERROR] = "ip4-icmp-error",
   },
 };
-/* *INDENT-ON* */
-
-VLIB_NODE_FN (nat44_ei_out2in_fast_node)
-(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
-{
-  u32 n_left_from, *from;
-  nat44_ei_main_t *nm = &nat44_ei_main;
-
-  from = vlib_frame_vector_args (frame);
-  n_left_from = frame->n_vectors;
-
-  vlib_buffer_t *bufs[VLIB_FRAME_SIZE], **b = bufs;
-  u16 nexts[VLIB_FRAME_SIZE], *next = nexts;
-  vlib_get_buffers (vm, from, b, n_left_from);
-  while (n_left_from > 0)
-    {
-      vlib_buffer_t *b0;
-      u32 next0 = NAT44_EI_OUT2IN_NEXT_DROP;
-      u32 sw_if_index0;
-      ip4_header_t *ip0;
-      ip_csum_t sum0;
-      u32 new_addr0, old_addr0;
-      u16 new_port0, old_port0;
-      udp_header_t *udp0;
-      tcp_header_t *tcp0;
-      icmp46_header_t *icmp0;
-      u32 proto0;
-      u32 rx_fib_index0;
-      ip4_address_t sm_addr0;
-      u16 sm_port0;
-      u32 sm_fib_index0;
-
-      b0 = *b;
-      b++;
-
-      ip0 = vlib_buffer_get_current (b0);
-      udp0 = ip4_next_header (ip0);
-      tcp0 = (tcp_header_t *) udp0;
-      icmp0 = (icmp46_header_t *) udp0;
-
-      sw_if_index0 = vnet_buffer (b0)->sw_if_index[VLIB_RX];
-      rx_fib_index0 = ip4_fib_table_get_index_for_sw_if_index (sw_if_index0);
-
-      vnet_feature_next (&next0, b0);
-
-      if (PREDICT_FALSE (ip0->ttl == 1))
-       {
-         vnet_buffer (b0)->sw_if_index[VLIB_TX] = (u32) ~ 0;
-         icmp4_error_set_vnet_buffer (b0, ICMP4_time_exceeded,
-                                      ICMP4_time_exceeded_ttl_exceeded_in_transit,
-                                      0);
-         next0 = NAT44_EI_OUT2IN_NEXT_ICMP_ERROR;
-         goto trace00;
-       }
-
-      proto0 = ip_proto_to_nat_proto (ip0->protocol);
-
-      if (PREDICT_FALSE (proto0 == NAT_PROTOCOL_OTHER))
-       goto trace00;
-
-      if (PREDICT_FALSE (proto0 == NAT_PROTOCOL_ICMP))
-       {
-         next0 = nat44_ei_icmp_out2in (b0, ip0, icmp0, sw_if_index0,
-                                       rx_fib_index0, node, next0, ~0, 0);
-         goto trace00;
-       }
-
-      if (nat44_ei_static_mapping_match (ip0->dst_address, udp0->dst_port,
-                                        rx_fib_index0, proto0, &sm_addr0,
-                                        &sm_port0, &sm_fib_index0, 1, 0, 0))
-       {
-         b0->error = node->errors[NAT44_EI_OUT2IN_ERROR_NO_TRANSLATION];
-         goto trace00;
-       }
-
-      new_addr0 = sm_addr0.as_u32;
-      new_port0 = sm_port0;
-      vnet_buffer (b0)->sw_if_index[VLIB_TX] = sm_fib_index0;
-      old_addr0 = ip0->dst_address.as_u32;
-      ip0->dst_address.as_u32 = new_addr0;
-
-      sum0 = ip0->checksum;
-      sum0 = ip_csum_update (sum0, old_addr0, new_addr0,
-                            ip4_header_t, dst_address /* changed member */ );
-      ip0->checksum = ip_csum_fold (sum0);
-
-      if (PREDICT_FALSE (new_port0 != udp0->dst_port))
-       {
-         old_port0 = udp0->dst_port;
-         udp0->dst_port = new_port0;
-
-         if (PREDICT_TRUE (proto0 == NAT_PROTOCOL_TCP))
-           {
-             sum0 = tcp0->checksum;
-             sum0 = ip_csum_update (sum0, old_addr0, new_addr0,
-                                    ip4_header_t,
-                                    dst_address /* changed member */ );
-             sum0 = ip_csum_update (sum0, old_port0, new_port0,
-                                    ip4_header_t /* cheat */ ,
-                                    length /* changed member */ );
-             tcp0->checksum = ip_csum_fold (sum0);
-           }
-         else if (udp0->checksum)
-           {
-             sum0 = udp0->checksum;
-             sum0 = ip_csum_update (sum0, old_addr0, new_addr0,
-                                    ip4_header_t,
-                                    dst_address /* changed member */ );
-             sum0 = ip_csum_update (sum0, old_port0, new_port0,
-                                    ip4_header_t /* cheat */ ,
-                                    length /* changed member */ );
-             udp0->checksum = ip_csum_fold (sum0);
-           }
-       }
-      else
-       {
-         if (PREDICT_TRUE (proto0 == NAT_PROTOCOL_TCP))
-           {
-             sum0 = tcp0->checksum;
-             sum0 = ip_csum_update (sum0, old_addr0, new_addr0,
-                                    ip4_header_t,
-                                    dst_address /* changed member */ );
-             tcp0->checksum = ip_csum_fold (sum0);
-           }
-         else if (udp0->checksum)
-           {
-             sum0 = udp0->checksum;
-             sum0 = ip_csum_update (sum0, old_addr0, new_addr0,
-                                    ip4_header_t,
-                                    dst_address /* changed member */ );
-             udp0->checksum = ip_csum_fold (sum0);
-           }
-       }
-
-    trace00:
-
-      if (PREDICT_FALSE ((node->flags & VLIB_NODE_FLAG_TRACE)
-                        && (b0->flags & VLIB_BUFFER_IS_TRACED)))
-       {
-         nat44_ei_out2in_trace_t *t =
-           vlib_add_trace (vm, node, b0, sizeof (*t));
-         t->sw_if_index = sw_if_index0;
-         t->next_index = next0;
-       }
-
-      if (next0 == NAT44_EI_OUT2IN_NEXT_DROP)
-       {
-         vlib_increment_simple_counter (&nm->counters.fastpath.out2in.drops,
-                                        vm->thread_index, sw_if_index0, 1);
-       }
-
-      n_left_from--;
-      next[0] = next0;
-      next++;
-    }
-
-  vlib_buffer_enqueue_to_next (vm, node, from, (u16 *) nexts,
-                              frame->n_vectors);
-
-  return frame->n_vectors;
-}
-
-/* *INDENT-OFF* */
-VLIB_REGISTER_NODE (nat44_ei_out2in_fast_node) = {
-  .name = "nat44-ei-out2in-fast",
-  .vector_size = sizeof (u32),
-  .format_trace = format_nat44_ei_out2in_fast_trace,
-  .type = VLIB_NODE_TYPE_INTERNAL,
-
-  .n_errors = ARRAY_LEN(nat44_ei_out2in_error_strings),
-  .error_strings = nat44_ei_out2in_error_strings,
-
-  .runtime_data_bytes = sizeof (nat44_ei_runtime_t),
-
-  .n_next_nodes = NAT44_EI_OUT2IN_N_NEXT,
-
-  /* edit / add dispositions here */
-  .next_nodes = {
-    [NAT44_EI_OUT2IN_NEXT_LOOKUP] = "ip4-lookup",
-    [NAT44_EI_OUT2IN_NEXT_DROP] = "error-drop",
-    [NAT44_EI_OUT2IN_NEXT_ICMP_ERROR] = "ip4-icmp-error",
-  },
-};
-/* *INDENT-ON* */
 
 /*
  * fd.io coding-style-patch-verification: ON