u16 ethertype = clib_net_to_host_u16 (eh->type);
u16 l2hdr_sz = sizeof (ethernet_header_t);
+ if (ethernet_frame_is_tagged (ethertype))
+ {
+ ethernet_vlan_header_t *vlan = (ethernet_vlan_header_t *) (eh + 1);
+
+ ethertype = clib_net_to_host_u16 (vlan->type);
+ l2hdr_sz += sizeof (*vlan);
+ if (ethertype == ETHERNET_TYPE_VLAN)
+ {
+ vlan++;
+ ethertype = clib_net_to_host_u16 (vlan->type);
+ l2hdr_sz += sizeof (*vlan);
+ }
+ }
+
vnet_buffer (b0)->l2_hdr_offset = 0;
vnet_buffer (b0)->l3_hdr_offset = l2hdr_sz;
if (PREDICT_TRUE (ethertype == ETHERNET_TYPE_IP4))
n_packets = s->n_packets_limit - s->n_packets_generated;
/* Generate up to one frame's worth of packets. */
- if (n_packets > VLIB_FRAME_SIZE)
- n_packets = VLIB_FRAME_SIZE;
+ if (n_packets > s->n_max_frame)
+ n_packets = s->n_max_frame;
if (n_packets > 0)
n_packets = pg_generate_packets (node, pg, s, n_packets);
/* *INDENT-OFF* */
VLIB_REGISTER_NODE (pg_input_node) = {
.function = pg_input,
+ .flags = VLIB_NODE_FLAG_TRACE_SUPPORTED,
.name = "pg-input",
.sibling_of = "device-input",
.type = VLIB_NODE_TYPE_INPUT,