aboutsummaryrefslogtreecommitdiffstats
path: root/src/vnet/pg
diff options
context:
space:
mode:
Diffstat (limited to 'src/vnet/pg')
-rw-r--r--src/vnet/pg/input.c4
-rw-r--r--src/vnet/pg/output.c8
-rw-r--r--src/vnet/pg/pg.h9
3 files changed, 18 insertions, 3 deletions
diff --git a/src/vnet/pg/input.c b/src/vnet/pg/input.c
index f81485de65f..321472c4d85 100644
--- a/src/vnet/pg/input.c
+++ b/src/vnet/pg/input.c
@@ -1578,7 +1578,7 @@ fill_buffer_offload_flags (vlib_main_t *vm, u32 *buffers, u32 n_buffers,
(VNET_BUFFER_F_IS_IP4 | VNET_BUFFER_F_L2_HDR_OFFSET_VALID |
VNET_BUFFER_F_L3_HDR_OFFSET_VALID |
VNET_BUFFER_F_L4_HDR_OFFSET_VALID);
- if (buffer_oflags & VNET_BUFFER_OFFLOAD_F_IP_CKSUM)
+ if (buffer_oflags & VNET_BUFFER_OFFLOAD_F_IP_CKSUM || gso_enabled)
oflags |= VNET_BUFFER_OFFLOAD_F_IP_CKSUM;
}
else if (PREDICT_TRUE (ethertype == ETHERNET_TYPE_IP6))
@@ -1596,7 +1596,7 @@ fill_buffer_offload_flags (vlib_main_t *vm, u32 *buffers, u32 n_buffers,
if (l4_proto == IP_PROTOCOL_TCP)
{
- if (buffer_oflags & VNET_BUFFER_OFFLOAD_F_TCP_CKSUM)
+ if (buffer_oflags & VNET_BUFFER_OFFLOAD_F_TCP_CKSUM || gso_enabled)
oflags |= VNET_BUFFER_OFFLOAD_F_TCP_CKSUM;
/* only set GSO flag for chained buffers */
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 */