52 .path =
"packet-generator",
53 .short_help =
"Packet generator commands",
63 if (stream_index == ~0)
68 pg_stream_enable_disable (pg, s, is_enable);
114 u32 stream_index = ~0;
132 .path =
"packet-generator enable-stream",
133 .short_help =
"Enable packet generator streams",
141 .path =
"packet-generator disable-stream",
142 .short_help =
"Disable packet generator streams",
155 return format (s,
"%=16s%=12s%=16s%s",
156 "Name",
"Enabled",
"Count",
"Parameters");
158 s =
format (s,
"%-16v%=12s%16Ld",
169 v =
format (v,
"size %d%c%d, ",
203 vlib_cli_output (vm,
"%U", format_pg_stream, s);
213 .path =
"show packet-generator",
214 .short_help =
"Show packet generator streams",
227 memset (&pm, 0,
sizeof (pm));
250 if (
unformat (input,
"limit %f", &x))
253 else if (
unformat (input,
"rate %f", &x))
298 int sub_input_given = 0;
302 char *pcap_file_name;
312 if (
unformat (input,
"name %v", &tmp))
319 else if (
unformat (input,
"node %U",
331 else if (
unformat (input,
"node %U",
338 else if (
unformat (input,
"interface %U",
343 else if (
unformat (input,
"pcap %s", &pcap_file_name))
346 else if (!sub_input_given
353 else if (
unformat (input,
"no-recycle"))
368 if (!sub_input_given && !pcap_file_name)
376 if (pcap_file_name != 0)
400 if (pcap_file_name != 0)
415 (
"failed to parse packet data from `%U'",
432 .path =
"packet-generator new",
434 .short_help =
"Create packet generator stream",
436 "Create packet generator stream\n" 440 "name STRING sets stream name\n" 441 "interface STRING interface for stream output \n" 442 "node NODE-NAME node for stream output\n" 443 "data STRING specifies packet data\n" 444 "pcap FILENAME read packet data from pcap file\n",
466 .path =
"packet-generator delete",
468 .short_help =
"Delete stream with given name",
478 u32 stream_index = ~0;
510 .path =
"packet-generator configure",
511 .short_help =
"Change packet generator stream parameters",
524 u8 *pcap_file_name = 0;
540 else if (
unformat (line_input,
"pcap %s", &pcap_file_name))
542 else if (
unformat (line_input,
"count %u", &count))
544 else if (
unformat (line_input,
"disable"))
561 if (!pcap_file_name && is_disable == 0)
580 .path =
"packet-generator capture",
581 .short_help =
"packet-generator capture <interface name> pcap <filename> [count <n>]",
599 if (
unformat (line_input,
"interface pg%u", &if_id))
615 .path =
"create packet-generator",
616 .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
#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)
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]
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)
static u32 vlib_num_workers()
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.