52 .path =
"packet-generator",
53 .short_help =
"Packet generator commands",
63 if (stream_index == ~0)
68 pg_stream_enable_disable (pg, s, is_enable);
119 u32 stream_index = ~0;
143 .path =
"packet-generator enable-stream",
144 .short_help =
"Enable packet generator streams",
152 .path =
"packet-generator disable-stream",
153 .short_help =
"Disable packet generator streams",
174 while (*junk_after_name && *junk_after_name !=
' ')
176 *junk_after_name = 0;
177 s =
format (s,
"edit-function %s, ", function_name);
188 int verbose = va_arg (*va,
int);
191 return format (s,
"%-16s%=12s%=16s%s",
192 "Name",
"Enabled",
"Count",
"Parameters");
194 s =
format (s,
"%-16v%=12s%=16Ld",
203 s =
format (s,
"size %d%c%d, ",
249 vlib_cli_output (vm,
"%U", format_pg_stream, s, verbose);
259 .path =
"show packet-generator ",
260 .short_help =
"show packet-generator [verbose]",
295 if (
unformat (input,
"limit %f", &x))
298 else if (
unformat (input,
"rate %f", &x))
342 u32 maxframe, hw_if_index;
344 int sub_input_given = 0;
348 char *pcap_file_name;
360 if (
unformat (input,
"name %v", &tmp))
367 else if (
unformat (input,
"node %U",
379 else if (
unformat (input,
"buffer-flags %U",
383 else if (
unformat (input,
"node %U",
386 else if (
unformat (input,
"maxframe %u", &maxframe))
391 else if (
unformat (input,
"interface %U",
395 else if (
unformat (input,
"tx-interface %U",
400 else if (
unformat (input,
"pcap %s", &pcap_file_name))
403 else if (!sub_input_given
418 if (!sub_input_given && !pcap_file_name)
426 if (pcap_file_name != 0)
450 if (pcap_file_name != 0)
465 (
"failed to parse packet data from `%U'",
486 .path =
"packet-generator new",
488 .short_help =
"Create packet generator stream",
490 "Create packet generator stream\n" 494 "name STRING sets stream name\n" 495 "interface STRING interface for stream output \n" 496 "node NODE-NAME node for stream output\n" 497 "data STRING specifies packet data\n" 498 "pcap FILENAME read packet data from pcap file\n" 499 "rate PPS rate to transfer packet data\n" 500 "maxframe NPKTS maximum number of packets per frame\n",
522 .path =
"packet-generator delete",
524 .short_help =
"Delete stream with given name",
534 u32 stream_index = ~0;
569 .path =
"packet-generator configure",
570 .short_help =
"Change packet generator stream parameters",
583 u8 *pcap_file_name = 0;
599 else if (
unformat (line_input,
"pcap %s", &pcap_file_name))
601 else if (
unformat (line_input,
"count %u", &count))
603 else if (
unformat (line_input,
"disable"))
627 if (!pcap_file_name && is_disable == 0)
652 .path =
"packet-generator capture",
653 .short_help =
"packet-generator capture <interface name> pcap <filename> [count <n>]",
664 u32 if_id, gso_enabled = 0, gso_size = 0, coalesce_enabled = 0;
672 if (
unformat (line_input,
"interface pg%u", &if_id))
674 else if (
unformat (line_input,
"gso-enabled"))
677 if (
unformat (line_input,
"gso-size %u", &gso_size))
684 if (
unformat (line_input,
"coalesce-enabled"))
685 coalesce_enabled = 1;
706 .path =
"create packet-generator",
707 .short_help =
"create packet-generator interface <interface name>" 708 " [gso-enabled gso-size <size> [coalesce-enabled]]",
unformat_function_t unformat_vnet_hw_interface
static int pg_stream_is_enabled(pg_stream_t *s)
void pg_stream_add(pg_main_t *pg, pg_stream_t *s_init)
u32 pg_interface_add_or_get(pg_main_t *pg, uword stream_index, u8 gso_enabled, u32 gso_size, u8 coalesce_enabled)
char * file_name
File name of pcap output.
static clib_error_t * show_streams(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
static clib_error_t * del_stream(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
int file_descriptor
File descriptor for reading/writing.
u32 n_packets_to_capture
Number of packets to capture.
vnet_main_t * vnet_get_main(void)
pg_edit_group_t * edit_groups
PCAP utility definitions.
clib_memset(h->entries, 0, sizeof(h->entries[0]) *entries)
void(* edit_function)(struct pg_main_t *pg, struct pg_stream_t *s, struct pg_edit_group_t *g, u32 *buffers, u32 n_buffers)
uword * stream_index_by_name
static vnet_hw_interface_t * vnet_get_hw_interface(vnet_main_t *vnm, u32 hw_if_index)
unformat_function_t unformat_vnet_sw_interface
pg_edit_type_t packet_size_edit_type
void pg_stream_del(pg_main_t *pg, uword index)
PCAP main state data structure.
#define pool_foreach(VAR, POOL, BODY)
Iterate through pool.
#define VLIB_INIT_FUNCTION(x)
uword unformat_pg_payload(unformat_input_t *input, va_list *args)
static clib_error_t * pg_pcap_read(pg_stream_t *s, char *file_name)
#define clib_error_return(e, args...)
static u8 * format_pg_stream(u8 *s, va_list *va)
#define clib_error_create(args...)
clib_error_t * pcap_close(pcap_main_t *pm)
Close PCAP file.
#define pool_elt_at_index(p, i)
Returns pointer to element at given index.
vlib_node_t * vlib_get_node_by_name(vlib_main_t *vm, u8 *name)
unformat_function_t unformat_vnet_buffer_flags
static void pg_stream_free(pg_stream_t *s)
clib_error_t * pg_capture(pg_capture_args_t *a)
unformat_function_t unformat_hash_vec_string
clib_error_t * pcap_read(pcap_main_t *pm)
Read PCAP file.
static clib_error_t * create_pg_if_cmd_fn(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
static_always_inline u32 vlib_buffer_get_default_data_size(vlib_main_t *vm)
static clib_error_t * enable_disable_stream(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
u64 * replay_packet_timestamps
sll srl srl sll sra u16x4 i
#define vec_free(V)
Free vector's memory (no header).
static uword pg_edit_group_n_bytes(pg_stream_t *s, u32 group_index)
void pg_stream_change(pg_main_t *pg, pg_stream_t *s)
unformat_function_t * unformat_edit
static uword unformat_pg_stream_parameter(unformat_input_t *input, va_list *args)
u8 ** replay_packet_templates
#define VLIB_CLI_COMMAND(x,...)
static clib_error_t * pg_capture_cmd_fn(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
#define PCAP_MAIN_INIT_DONE
void vlib_cli_output(vlib_main_t *vm, char *fmt,...)
static clib_error_t * validate_stream(pg_stream_t *s)
void pg_stream_enable_disable(pg_main_t *pg, pg_stream_t *s, int is_enable)
static clib_error_t * new_stream(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
unsigned char function_name[]
u32 min_packet_bytes
Min/Max Packet bytes.
u64 * timestamps
Timestamps.
pcap_packet_type_t packet_type
Packet type.
u32 sw_if_index[VLIB_N_RX_TX]
#define vec_len(v)
Number of elements in vector (rvalue-only, NULL tolerant)
static clib_error_t * change_stream_parameters(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
unformat_function_t unformat_vlib_node
format_function_t format_clib_elf_symbol_with_address
f64 rate_packets_per_second
static clib_error_t * pg_cli_init(vlib_main_t *vm)
static u32 vlib_num_workers()
#define vec_foreach(var, vec)
Vector iterator.
u8 ** packets_read
Packets read from file.
vnet_device_class_t pg_dev_class
static u8 * format_pg_edit_group(u8 *s, va_list *va)
void pg_enable_disable(u32 stream_index, int is_enable)
pg_interface_t * interfaces
static uword pool_elts(void *v)
Number of active elements in a pool.