Code Review
/
vpp.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
review
|
tree
raw
|
inline
| side by side
tcp: postpone cleanup on connect failures
[vpp.git]
/
src
/
vnet
/
pg
/
pg.h
diff --git
a/src/vnet/pg/pg.h
b/src/vnet/pg/pg.h
index
111df91
..
e69ee64
100644
(file)
--- a/
src/vnet/pg/pg.h
+++ b/
src/vnet/pg/pg.h
@@
-43,8
+43,10
@@
#include <vlib/vlib.h> /* for VLIB_N_RX_TX */
#include <vnet/pg/edit.h>
#include <vppinfra/fifo.h> /* for buffer_fifo */
#include <vlib/vlib.h> /* for VLIB_N_RX_TX */
#include <vnet/pg/edit.h>
#include <vppinfra/fifo.h> /* for buffer_fifo */
-#include <v
net/unix
/pcap.h>
+#include <v
ppinfra
/pcap.h>
#include <vnet/interface.h>
#include <vnet/interface.h>
+#include <vnet/ethernet/mac_address.h>
+#include <vnet/gso/gro.h>
extern vnet_device_class_t pg_dev_class;
extern vnet_device_class_t pg_dev_class;
@@
-89,8
+91,6
@@
typedef struct
/* Buffers pre-initialized with fixed buffer data for this stream. */
u32 *buffer_fifo;
/* Buffers pre-initialized with fixed buffer data for this stream. */
u32 *buffer_fifo;
- /* Buffer free list for this buffer index in stream. */
- u32 free_list_index;
} pg_buffer_index_t;
typedef struct pg_stream_t
} pg_buffer_index_t;
typedef struct pg_stream_t
@@
-102,7
+102,6
@@
typedef struct pg_stream_t
/* Stream is currently enabled. */
#define PG_STREAM_FLAGS_IS_ENABLED (1 << 0)
/* Stream is currently enabled. */
#define PG_STREAM_FLAGS_IS_ENABLED (1 << 0)
-#define PG_STREAM_FLAGS_DISABLE_BUFFER_RECYCLE (1 << 1)
/* Edit groups are created by each protocol level (e.g. ethernet,
ip4, tcp, ...). */
/* Edit groups are created by each protocol level (e.g. ethernet,
ip4, tcp, ...). */
@@
-126,6
+125,12
@@
typedef struct pg_stream_t
for max_packet_bytes. */
u32 buffer_bytes;
for max_packet_bytes. */
u32 buffer_bytes;
+ /* Buffer flags to set in each packet e.g. l2 valid flags */
+ u32 buffer_flags;
+
+ /* Buffer offload flags to set in each packet e.g. checksum offload flags */
+ u32 buffer_oflags;
+
/* Last packet length if packet size edit type is increment. */
u32 last_increment_packet_size;
/* Last packet length if packet size edit type is increment. */
u32 last_increment_packet_size;
@@
-158,6
+163,9
@@
typedef struct pg_stream_t
Zero means no packet limit. */
u64 n_packets_limit;
Zero means no packet limit. */
u64 n_packets_limit;
+ /* Only generate up to n_max_frame per frame. */
+ u32 n_max_frame;
+
/* Rate for this stream in packets/second.
Zero means unlimited rate. */
f64 rate_packets_per_second;
/* Rate for this stream in packets/second.
Zero means unlimited rate. */
f64 rate_packets_per_second;
@@
-169,6
+177,7
@@
typedef struct pg_stream_t
pg_buffer_index_t *buffer_indices;
u8 **replay_packet_templates;
pg_buffer_index_t *buffer_indices;
u8 **replay_packet_templates;
+ u64 *replay_packet_timestamps;
u32 current_replay_packet_index;
} pg_stream_t;
u32 current_replay_packet_index;
} pg_stream_t;
@@
-192,6
+201,7
@@
pg_edit_group_free (pg_edit_group_t * g)
always_inline void
pg_stream_free (pg_stream_t * s)
{
always_inline void
pg_stream_free (pg_stream_t * s)
{
+ int i;
pg_edit_group_t *g;
pg_edit_t *e;
vec_foreach (e, s->non_fixed_edits) pg_edit_free (e);
pg_edit_group_t *g;
pg_edit_t *e;
vec_foreach (e, s->non_fixed_edits) pg_edit_free (e);
@@
-201,6
+211,10
@@
pg_stream_free (pg_stream_t * s)
vec_free (s->fixed_packet_data);
vec_free (s->fixed_packet_data_mask);
vec_free (s->name);
vec_free (s->fixed_packet_data);
vec_free (s->fixed_packet_data_mask);
vec_free (s->name);
+ for (i = 0; i < vec_len (s->replay_packet_templates); i++)
+ vec_free (s->replay_packet_templates[i]);
+ vec_free (s->replay_packet_templates);
+ vec_free (s->replay_packet_timestamps);
{
pg_buffer_index_t *bi;
{
pg_buffer_index_t *bi;
@@
-281,10
+295,17
@@
pg_free_edit_group (pg_stream_t * s)
pg_edit_group_t *g = pg_stream_get_group (s, i);
pg_edit_group_free (g);
pg_edit_group_t *g = pg_stream_get_group (s, i);
pg_edit_group_free (g);
- memset (g, 0, sizeof (g[0]));
-
_vec_len (s->edit_groups) = i
;
+
clib_
memset (g, 0, sizeof (g[0]));
+
vec_set_len (s->edit_groups, i)
;
}
}
+typedef enum pg_interface_mode_t_
+{
+ PG_MODE_ETHERNET,
+ PG_MODE_IP4,
+ PG_MODE_IP6,
+} pg_interface_mode_t;
+
typedef struct
{
/* TX lock */
typedef struct
{
/* TX lock */
@@
-296,8
+317,15
@@
typedef struct
/* Identifies stream for this interface. */
u32 id;
/* 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;
pcap_main_t pcap_main;
- u8 *pcap_file_name;
+ char *pcap_file_name;
+ pg_interface_mode_t mode;
+
+ mac_address_t *allowed_mcast_macs;
} pg_interface_t;
/* Per VLIB node data. */
} pg_interface_t;
/* Per VLIB node data. */
@@
-321,9
+349,15
@@
typedef struct pg_main_t
/* Pool of interfaces. */
pg_interface_t *interfaces;
uword *if_index_by_if_id;
/* Pool of interfaces. */
pg_interface_t *interfaces;
uword *if_index_by_if_id;
+ uword *if_id_by_sw_if_index;
+
+ /* Vector of buffer indices for use in pg_stream_fill_replay, per thread */
+ u32 **replay_buffers_by_thread;
/* Per VLIB node information. */
pg_node_t *nodes;
/* Per VLIB node information. */
pg_node_t *nodes;
+
+ u16 msg_id_base;
} pg_main_t;
/* Global main structure. */
} pg_main_t;
/* Global main structure. */
@@
-338,13
+372,20
@@
vlib_node_function_t pg_input, pg_output;
/* Stream add/delete. */
void pg_stream_del (pg_main_t * pg, uword index);
void pg_stream_add (pg_main_t * pg, pg_stream_t * s_init);
/* Stream add/delete. */
void pg_stream_del (pg_main_t * pg, uword index);
void pg_stream_add (pg_main_t * pg, pg_stream_t * s_init);
+void pg_stream_change (pg_main_t * pg, pg_stream_t * s);
/* Enable/disable stream. */
void pg_stream_enable_disable (pg_main_t * pg, pg_stream_t * s,
int is_enable);
/* Enable/disable stream. */
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. */
/* Find/create free packet-generator interface index. */
-u32 pg_interface_add_or_get (pg_main_t * pg, uword stream_index);
+u32 pg_interface_add_or_get (pg_main_t *pg, uword stream_index, u8 gso_enabled,
+ u32 gso_size, u8 coalesce_enabled,
+ pg_interface_mode_t mode);
always_inline pg_node_t *
pg_get_node (uword node_index)
always_inline pg_node_t *
pg_get_node (uword node_index)
@@
-366,7
+407,7
@@
typedef struct
u32 hw_if_index;
u32 dev_instance;
u8 is_enabled;
u32 hw_if_index;
u32 dev_instance;
u8 is_enabled;
-
u8
*pcap_file_name;
+
char
*pcap_file_name;
u32 count;
} pg_capture_args_t;
u32 count;
} pg_capture_args_t;
@@
-374,8
+415,8
@@
clib_error_t *pg_capture (pg_capture_args_t * a);
typedef struct
{
typedef struct
{
- vlib_buffer_t buffer;
u32 buffer_index;
u32 buffer_index;
+ vlib_buffer_t buffer;
}
pg_output_trace_t;
}
pg_output_trace_t;