gso: packet coalesce library
[vpp.git] / src / vnet / pg / pg.h
index c73634f..06e6126 100644 (file)
@@ -45,6 +45,7 @@
 #include <vppinfra/fifo.h>     /* for buffer_fifo */
 #include <vppinfra/pcap.h>
 #include <vnet/interface.h>
+#include <vnet/gso/gro.h>
 
 extern vnet_device_class_t pg_dev_class;
 
@@ -123,6 +124,9 @@ typedef struct pg_stream_t
      for max_packet_bytes. */
   u32 buffer_bytes;
 
+  /* Buffer flags to set in each packet e.g. checksum offload flags */
+  u32 buffer_flags;
+
   /* Last packet length if packet size edit type is increment. */
   u32 last_increment_packet_size;
 
@@ -302,10 +306,12 @@ typedef struct
   /* Identifies stream for this interface. */
   u32 id;
 
+  u8 coalesce_enabled;
+  gro_flow_table_t *flow_table;
   u8 gso_enabled;
   u32 gso_size;
   pcap_main_t pcap_main;
-  u8 *pcap_file_name;
+  char *pcap_file_name;
 } pg_interface_t;
 
 /* Per VLIB node data. */
@@ -355,9 +361,14 @@ void pg_stream_change (pg_main_t * pg, pg_stream_t * s);
 void pg_stream_enable_disable (pg_main_t * pg, pg_stream_t * s,
                               int is_enable);
 
+/* Enable/disable packet coalesce on given interface */
+void pg_interface_enable_disable_coalesce (pg_interface_t * pi, u8 enable,
+                                          u32 tx_node_index);
+
 /* Find/create free packet-generator interface index. */
 u32 pg_interface_add_or_get (pg_main_t * pg, uword stream_index,
-                            u8 gso_enabled, u32 gso_size);
+                            u8 gso_enabled, u32 gso_size,
+                            u8 coalesce_enabled);
 
 always_inline pg_node_t *
 pg_get_node (uword node_index)
@@ -379,7 +390,7 @@ typedef struct
   u32 hw_if_index;
   u32 dev_instance;
   u8 is_enabled;
-  u8 *pcap_file_name;
+  char *pcap_file_name;
   u32 count;
 } pg_capture_args_t;