diff options
-rw-r--r-- | src/vnet/pg/output.c | 8 | ||||
-rw-r--r-- | src/vnet/pg/pg.h | 9 |
2 files changed, 16 insertions, 1 deletions
diff --git a/src/vnet/pg/output.c b/src/vnet/pg/output.c index 042591a7709..fa1a14cc4af 100644 --- a/src/vnet/pg/output.c +++ b/src/vnet/pg/output.c @@ -88,7 +88,13 @@ pg_output (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame) pcap_add_buffer (&pif->pcap_main, vm, bi0, ETHERNET_MAX_PACKET_BYTES); } if (pif->pcap_file_name != 0) - pcap_write (&pif->pcap_main); + { + pcap_packet_type_t pm_pt = pif->pcap_main.packet_type; + pif->pcap_main.packet_type = + pg_intf_mode_to_pcap_packet_type (pif->mode); + pcap_write (&pif->pcap_main); + pif->pcap_main.packet_type = pm_pt; + } if ((pif->pcap_main.flags & PCAP_MAIN_INIT_DONE) && pif->pcap_main.n_packets_captured >= pif->pcap_main.n_packets_to_capture) diff --git a/src/vnet/pg/pg.h b/src/vnet/pg/pg.h index 6d5b25ba25a..bede747428c 100644 --- a/src/vnet/pg/pg.h +++ b/src/vnet/pg/pg.h @@ -306,6 +306,15 @@ typedef enum pg_interface_mode_t_ PG_MODE_IP6, } pg_interface_mode_t; +always_inline pcap_packet_type_t +pg_intf_mode_to_pcap_packet_type (pg_interface_mode_t mode) +{ + if ((mode == PG_MODE_IP4) || (mode == PG_MODE_IP6)) + return PCAP_PACKET_TYPE_ip; + else + return PCAP_PACKET_TYPE_ethernet; +} + typedef struct { /* TX lock */ |