52 .path =
"packet-generator",
53 .short_help =
"Packet generator commands",
63 if (stream_index == ~0)
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, ",
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",
382 else if (
unformat (input,
"buffer-offload-flags %U",
385 else if (
unformat (input,
"node %U",
388 else if (
unformat (input,
"maxframe %u", &maxframe))
393 else if (
unformat (input,
"interface %U",
397 else if (
unformat (input,
"tx-interface %U",
402 else if (
unformat (input,
"pcap %s", &pcap_file_name))
405 else if (!sub_input_given
420 if (!sub_input_given && !pcap_file_name)
428 if (pcap_file_name != 0)
452 if (pcap_file_name != 0)
467 (
"failed to parse packet data from `%U'",
488 .path =
"packet-generator new",
490 .short_help =
"Create packet generator stream",
492 "Create packet generator stream\n" 496 "name STRING sets stream name\n" 497 "interface STRING interface for stream output \n" 498 "node NODE-NAME node for stream output\n" 499 "data STRING specifies packet data\n" 500 "pcap FILENAME read packet data from pcap file\n" 501 "rate PPS rate to transfer packet data\n" 502 "maxframe NPKTS maximum number of packets per frame\n",
524 .path =
"packet-generator delete",
526 .short_help =
"Delete stream with given name",
536 u32 stream_index = ~0;
571 .path =
"packet-generator configure",
572 .short_help =
"Change packet generator stream parameters",
585 u8 *pcap_file_name = 0;
601 else if (
unformat (line_input,
"pcap %s", &pcap_file_name))
603 else if (
unformat (line_input,
"count %u", &count))
605 else if (
unformat (line_input,
"disable"))
629 if (!pcap_file_name && is_disable == 0)
654 .path =
"packet-generator capture",
655 .short_help =
"packet-generator capture <interface name> pcap <filename> [count <n>]",
666 u32 if_id, gso_enabled = 0, gso_size = 0, coalesce_enabled = 0;
674 if (
unformat (line_input,
"interface pg%u", &if_id))
676 else if (
unformat (line_input,
"coalesce-enabled"))
677 coalesce_enabled = 1;
678 else if (
unformat (line_input,
"gso-enabled"))
681 if (
unformat (line_input,
"gso-size %u", &gso_size))
708 .path =
"create packet-generator",
709 .short_help =
"create packet-generator interface <interface name>" 710 " [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.
#define pool_foreach(VAR, POOL)
Iterate through pool.
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
unformat_function_t unformat_vnet_buffer_offload_flags
pg_edit_type_t packet_size_edit_type
void pg_stream_del(pg_main_t *pg, uword index)
PCAP main state data structure.
#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)
description fragment has unexpected format
#define clib_error_return(e, args...)
static u8 * format_pg_stream(u8 *s, va_list *va)
vnet_main_t * vnet_get_main(void)
__clib_export clib_error_t * pcap_read(pcap_main_t *pm)
Read PCAP file.
#define clib_error_create(args...)
__clib_export 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)
vlib_main_t * vm
X-connect all packets from the HOST to the PHY.
unformat_function_t unformat_hash_vec_string
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.