{
udp_main_t *um = &udp_main;
__attribute__ ((unused)) u32 n_left_from, next_index, *from, *to_next;
- word n_no_listener = 0;
u8 punt_unknown = is_ip4 ? um->punt_unknown4 : um->punt_unknown6;
u16 *next_by_dst_port = (is_ip4 ?
um->next_by_dst_port4 : um->next_by_dst_port6);
/* ip4/6_local hands us the ip header, not the udp header */
if (is_ip4)
{
- advance0 = sizeof (ip4_header_t);
- advance1 = sizeof (ip4_header_t);
+ advance0 = ip4_header_bytes (vlib_buffer_get_current (b0));
+ advance1 = ip4_header_bytes (vlib_buffer_get_current (b1));
}
else
{
ICMP4_destination_unreachable,
ICMP4_destination_unreachable_port_unreachable,
0);
+ b0->error = node->errors[UDP_ERROR_NO_LISTENER];
next0 = UDP_LOCAL_NEXT_ICMP;
- n_no_listener++;
}
else
{
ICMP6_destination_unreachable,
ICMP6_destination_unreachable_port_unreachable,
0);
+ b0->error = node->errors[UDP_ERROR_NO_LISTENER];
next0 = UDP_LOCAL_NEXT_ICMP;
- n_no_listener++;
}
}
else
ICMP4_destination_unreachable,
ICMP4_destination_unreachable_port_unreachable,
0);
+ b1->error = node->errors[UDP_ERROR_NO_LISTENER];
next1 = UDP_LOCAL_NEXT_ICMP;
- n_no_listener++;
}
else
{
ICMP6_destination_unreachable,
ICMP6_destination_unreachable_port_unreachable,
0);
+ b1->error = node->errors[UDP_ERROR_NO_LISTENER];
next1 = UDP_LOCAL_NEXT_ICMP;
- n_no_listener++;
}
}
else
/* ip4/6_local hands us the ip header, not the udp header */
if (is_ip4)
- advance0 = sizeof (ip4_header_t);
+ advance0 = ip4_header_bytes (vlib_buffer_get_current (b0));
else
advance0 = sizeof (ip6_header_t);
ICMP4_destination_unreachable,
ICMP4_destination_unreachable_port_unreachable,
0);
+ b0->error = node->errors[UDP_ERROR_NO_LISTENER];
next0 = UDP_LOCAL_NEXT_ICMP;
- n_no_listener++;
}
else
{
ICMP6_destination_unreachable,
ICMP6_destination_unreachable_port_unreachable,
0);
+ b0->error = node->errors[UDP_ERROR_NO_LISTENER];
next0 = UDP_LOCAL_NEXT_ICMP;
- n_no_listener++;
}
}
else
vlib_put_next_frame (vm, node, next_index, n_left_to_next);
}
- vlib_error_count (vm, node->node_index, UDP_ERROR_NO_LISTENER,
- n_no_listener);
return from_frame->n_vectors;
}