Skip to content

Commit

Permalink
app/testpmd: add command to flush multicast MAC addresses
Browse files Browse the repository at this point in the history
Add command to flush all multicast MAC address
Usage:
    mcast_addr flush <port_id> :
    flush all multicast MAC address on port_id

Signed-off-by: Dengdui Huang <[email protected]>
Acked-by: Chengwen Feng <[email protected]>
Acked-by: Ferruh Yigit <[email protected]>
  • Loading branch information
huangdengdui1 authored and ferruhy committed Oct 9, 2023
1 parent 42661fb commit ef8bd7d
Show file tree
Hide file tree
Showing 4 changed files with 69 additions and 0 deletions.
43 changes: 43 additions & 0 deletions app/test-pmd/cmdline.c
Original file line number Diff line number Diff line change
Expand Up @@ -506,6 +506,9 @@ static void cmd_help_long_parsed(void *parsed_result,
"mcast_addr remove (port_id) (mcast_addr)\n"
" Remove a multicast MAC address from port_id.\n\n"

"mcast_addr flush (port_id)\n"
" Flush all multicast MAC addresses on port_id.\n\n"

"set vf mac addr (port_id) (vf_id) (XX:XX:XX:XX:XX:XX)\n"
" Set the MAC address for a VF from the PF.\n\n"

Expand Down Expand Up @@ -8567,6 +8570,45 @@ static cmdline_parse_inst_t cmd_mcast_addr = {
},
};

/* *** FLUSH MULTICAST MAC ADDRESS ON PORT *** */
struct cmd_mcast_addr_flush_result {
cmdline_fixed_string_t mcast_addr_cmd;
cmdline_fixed_string_t what;
uint16_t port_num;
};

static void cmd_mcast_addr_flush_parsed(void *parsed_result,
__rte_unused struct cmdline *cl,
__rte_unused void *data)
{
struct cmd_mcast_addr_flush_result *res = parsed_result;

mcast_addr_flush(res->port_num);
}

static cmdline_parse_token_string_t cmd_mcast_addr_flush_cmd =
TOKEN_STRING_INITIALIZER(struct cmd_mcast_addr_result,
mcast_addr_cmd, "mcast_addr");
static cmdline_parse_token_string_t cmd_mcast_addr_flush_what =
TOKEN_STRING_INITIALIZER(struct cmd_mcast_addr_result, what,
"flush");
static cmdline_parse_token_num_t cmd_mcast_addr_flush_portnum =
TOKEN_NUM_INITIALIZER(struct cmd_mcast_addr_result, port_num,
RTE_UINT16);

static cmdline_parse_inst_t cmd_mcast_addr_flush = {
.f = cmd_mcast_addr_flush_parsed,
.data = (void *)0,
.help_str = "mcast_addr flush <port_id> : "
"flush all multicast MAC addresses on port_id",
.tokens = {
(void *)&cmd_mcast_addr_flush_cmd,
(void *)&cmd_mcast_addr_flush_what,
(void *)&cmd_mcast_addr_flush_portnum,
NULL,
},
};

/* vf vlan anti spoof configuration */

/* Common result structure for vf vlan anti spoof */
Expand Down Expand Up @@ -12935,6 +12977,7 @@ static cmdline_parse_ctx_t builtin_ctx[] = {
(cmdline_parse_inst_t *)&cmd_set_port_meter_stats_mask,
(cmdline_parse_inst_t *)&cmd_show_port_meter_stats,
(cmdline_parse_inst_t *)&cmd_mcast_addr,
(cmdline_parse_inst_t *)&cmd_mcast_addr_flush,
(cmdline_parse_inst_t *)&cmd_set_vf_vlan_anti_spoof,
(cmdline_parse_inst_t *)&cmd_set_vf_mac_anti_spoof,
(cmdline_parse_inst_t *)&cmd_set_vf_vlan_stripq,
Expand Down
18 changes: 18 additions & 0 deletions app/test-pmd/config.c
Original file line number Diff line number Diff line change
Expand Up @@ -6829,6 +6829,24 @@ mcast_addr_remove(portid_t port_id, struct rte_ether_addr *mc_addr)
mcast_addr_pool_append(port, mc_addr);
}

void
mcast_addr_flush(portid_t port_id)
{
int ret;

if (port_id_is_invalid(port_id, ENABLED_WARN))
return;

ret = rte_eth_dev_set_mc_addr_list(port_id, NULL, 0);
if (ret != 0) {
fprintf(stderr,
"Failed to flush all multicast MAC addresses on port_id %u\n",
port_id);
return;
}
mcast_addr_pool_destroy(port_id);
}

void
port_dcb_info_display(portid_t port_id)
{
Expand Down
1 change: 1 addition & 0 deletions app/test-pmd/testpmd.h
Original file line number Diff line number Diff line change
Expand Up @@ -1181,6 +1181,7 @@ void show_mcast_macs(portid_t port_id);
/* Functions to manage the set of filtered Multicast MAC addresses */
void mcast_addr_add(portid_t port_id, struct rte_ether_addr *mc_addr);
void mcast_addr_remove(portid_t port_id, struct rte_ether_addr *mc_addr);
void mcast_addr_flush(portid_t port_id);
void port_dcb_info_display(portid_t port_id);

uint8_t *open_file(const char *file_path, uint32_t *size);
Expand Down
7 changes: 7 additions & 0 deletions doc/guides/testpmd_app_ug/testpmd_funcs.rst
Original file line number Diff line number Diff line change
Expand Up @@ -1323,6 +1323,13 @@ filtered by port::

testpmd> mcast_addr remove (port_id) (mcast_addr)

mcast_addr flush
~~~~~~~~~~~~~~~~

Flush all multicast MAC addresses on port_id::

testpmd> mcast_addr flush (port_id)

mac_addr add (for VF)
~~~~~~~~~~~~~~~~~~~~~

Expand Down

0 comments on commit ef8bd7d

Please sign in to comment.