udp_main_t udp_main;
#define foreach_udp_local_next \
- _ (PUNT, "error-punt") \
- _ (DROP, "error-drop") \
+ _ (PUNT4, "ip4-punt") \
+ _ (PUNT6, "ip6-punt") \
+ _ (DROP4, "ip4-drop") \
+ _ (DROP6, "ip6-drop") \
_ (ICMP4_ERROR, "ip4-icmp-error") \
_ (ICMP6_ERROR, "ip6-icmp-error")
UDP_LOCAL_N_NEXT,
} udp_local_next_t;
+#define udp_local_next_drop(is_ip4) ((is_ip4) ? UDP_LOCAL_NEXT_DROP4 : UDP_LOCAL_NEXT_DROP6)
+#define udp_local_next_punt(is_ip4) ((is_ip4) ? UDP_LOCAL_NEXT_PUNT4 : UDP_LOCAL_NEXT_PUNT6)
+
typedef struct
{
u16 src_port;
if (PREDICT_FALSE (b0->current_length < advance0 + sizeof (*h0)))
{
error0 = UDP_ERROR_LENGTH_ERROR;
- next0 = UDP_LOCAL_NEXT_DROP;
+ next0 = udp_local_next_drop (is_ip4);
}
else
{
vlib_buffer_length_in_chain (vm, b0)))
{
error0 = UDP_ERROR_LENGTH_ERROR;
- next0 = UDP_LOCAL_NEXT_DROP;
+ next0 = udp_local_next_drop (is_ip4);
}
}
if (PREDICT_FALSE (b1->current_length < advance1 + sizeof (*h1)))
{
error1 = UDP_ERROR_LENGTH_ERROR;
- next1 = UDP_LOCAL_NEXT_DROP;
+ next1 = udp_local_next_drop (is_ip4);
}
else
{
vlib_buffer_length_in_chain (vm, b1)))
{
error1 = UDP_ERROR_LENGTH_ERROR;
- next1 = UDP_LOCAL_NEXT_DROP;
+ next1 = udp_local_next_drop (is_ip4);
}
}
if (PREDICT_FALSE (punt_unknown))
{
b0->error = node->errors[UDP_ERROR_PUNT];
- next0 = UDP_LOCAL_NEXT_PUNT;
+ next0 = udp_local_next_punt (is_ip4);
}
else if (is_ip4)
{
if (PREDICT_FALSE (punt_unknown))
{
b1->error = node->errors[UDP_ERROR_PUNT];
- next1 = UDP_LOCAL_NEXT_PUNT;
+ next1 = udp_local_next_punt (is_ip4);
}
else if (is_ip4)
{
if (PREDICT_FALSE (b0->current_length < advance0 + sizeof (*h0)))
{
b0->error = node->errors[UDP_ERROR_LENGTH_ERROR];
- next0 = UDP_LOCAL_NEXT_DROP;
+ next0 = udp_local_next_drop (is_ip4);
goto trace_x1;
}
if (PREDICT_FALSE (punt_unknown))
{
b0->error = node->errors[UDP_ERROR_PUNT];
- next0 = UDP_LOCAL_NEXT_PUNT;
+ next0 = udp_local_next_punt (is_ip4);
}
else if (is_ip4)
{
else
{
b0->error = node->errors[UDP_ERROR_LENGTH_ERROR];
- next0 = UDP_LOCAL_NEXT_DROP;
+ next0 = udp_local_next_drop (is_ip4);
}
trace_x1:
udp = p;
}
- memset (udp, 0, sizeof (udp[0]));
+ clib_memset (udp, 0, sizeof (udp[0]));
if (unformat (input, "src-port %d dst-port %d", &src_port, &dst_port))
{
udp->src_port = clib_host_to_net_u16 (src_port);