51 .path =
"packet-generator",
52 .short_help =
"Packet generator commands",
60 if (stream_index == ~0) {
63 pg_stream_enable_disable (pg, s, is_enable);
108 u32 stream_index = ~0;
125 .path =
"packet-generator enable-stream",
126 .short_help =
"Enable packet generator streams",
132 .path =
"packet-generator disable-stream",
133 .short_help =
"Disable packet generator streams",
144 return format (s,
"%=16s%=12s%=16s%s",
145 "Name",
"Enabled",
"Count",
"Parameters");
147 s =
format (s,
"%-16v%=12s%16Ld",
158 v =
format (v,
"size %d%c%d, ",
190 vlib_cli_output (vm,
"%U", format_pg_stream, s);
198 .path =
"show packet-generator",
199 .short_help =
"Show packet generator streams",
211 memset (&pm, 0,
sizeof (pm));
234 if (
unformat (input,
"limit %f", &x))
237 else if (
unformat (input,
"rate %f", &x))
282 int sub_input_given = 0;
286 char * pcap_file_name;
296 if (
unformat (input,
"name %v", &tmp))
303 else if (
unformat (input,
"node %U",
315 else if (
unformat (input,
"node %U",
319 else if (
unformat (input,
"interface %U",
323 else if (
unformat (input,
"pcap %s", &pcap_file_name))
326 else if (! sub_input_given
333 else if (
unformat (input,
"no-recycle"))
348 if (! sub_input_given && ! pcap_file_name)
356 if (pcap_file_name != 0)
376 if (pcap_file_name != 0)
391 (
"failed to parse packet data from `%U'",
407 .path =
"packet-generator new",
409 .short_help =
"Create packet generator stream",
411 "Create packet generator stream\n" 415 "name STRING sets stream name\n" 416 "interface STRING interface for stream output \n" 417 "node NODE-NAME node for stream output\n" 418 "data STRING specifies packet data\n" 419 "pcap FILENAME read packet data from pcap file\n",
440 .path =
"packet-generator delete",
442 .short_help =
"Delete stream with given name",
452 u32 stream_index = ~0;
483 .path =
"packet-generator configure",
484 .short_help =
"Change packet generator stream parameters",
497 u8 * pcap_file_name = 0;
513 else if (
unformat (line_input,
"pcap %s", &pcap_file_name))
515 else if (
unformat (line_input,
"count %u", &count))
517 else if (
unformat (line_input,
"disable"))
534 if (!pcap_file_name && is_disable == 0)
552 .path =
"packet-generator capture",
553 .short_help =
"packet-generator capture <interface name> pcap <filename> [count <n>]",
571 if (
unformat (line_input,
"interface pg%u", &if_id))
586 .path =
"create packet-generator",
587 .short_help =
"create packet-generator interface <interface name>",
unformat_function_t unformat_vnet_hw_interface
static int pg_stream_is_enabled(pg_stream_t *s)
void pg_enable_disable(u32 stream_index, int is_enable)
void pg_stream_add(pg_main_t *pg, pg_stream_t *s_init)
char * file_name
File name of pcap output.
sll srl srl sll sra u16x4 i
u32 n_packets_to_capture
Number of packets to capture.
static clib_error_t * show_streams(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
static u8 * format_pg_stream(u8 *s, va_list *va)
static uword unformat_pg_stream_parameter(unformat_input_t *input, va_list *args)
PCAP utility definitions.
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)
vnet_main_t * vnet_get_main(void)
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 * del_stream(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
#define pool_elt_at_index(p, i)
Returns pointer to element at given index.
#define VLIB_BUFFER_DEFAULT_FREE_LIST_BYTES
static void pg_stream_free(pg_stream_t *s)
#define clib_error_create(args...)
u32 pg_interface_add_or_get(pg_main_t *pg, uword stream_index)
#define PG_STREAM_FLAGS_DISABLE_BUFFER_RECYCLE
unformat_function_t unformat_hash_vec_string
void vlib_cli_output(vlib_main_t *vm, char *fmt,...)
static clib_error_t * validate_stream(pg_stream_t *s)
clib_error_t * pcap_read(pcap_main_t *pm)
Read PCAP file.
static clib_error_t * new_stream(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
static clib_error_t * pg_pcap_read(pg_stream_t *s, char *file_name)
#define vec_free(V)
Free vector's memory (no header).
unformat_function_t * unformat_edit
u8 ** replay_packet_templates
static clib_error_t * pg_capture_cmd_fn(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
clib_error_t * pg_capture(pg_capture_args_t *a)
void pg_stream_enable_disable(pg_main_t *pg, pg_stream_t *s, int is_enable)
u32 min_packet_bytes
Min/Max Packet bytes.
static clib_error_t * enable_disable_stream(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
static clib_error_t * change_stream_parameters(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
pcap_packet_type_t packet_type
Packet type.
vlib_node_t * vlib_get_node_by_name(vlib_main_t *vm, u8 *name)
u32 sw_if_index[VLIB_N_RX_TX]
VLIB_CLI_COMMAND(set_interface_ip_source_and_port_range_check_command, static)
static clib_error_t * create_pg_if_cmd_fn(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
#define vec_len(v)
Number of elements in vector (rvalue-only, NULL tolerant)
unformat_function_t unformat_vlib_node
f64 rate_packets_per_second
static clib_error_t * pg_cli_init(vlib_main_t *vm)
u8 ** packets_read
Packets read from file.
#define clib_error_return(e, args...)
vnet_device_class_t pg_dev_class
pg_interface_t * interfaces
static uword pool_elts(void *v)
Number of active elements in a pool.