@@ -76,6 +76,7 @@
#include <rte_eth_ctrl.h>
#include <rte_flow.h>
#include <rte_gro.h>
+#include <rte_port_representor.h>
#include <cmdline_rdline.h>
#include <cmdline_parse.h>
@@ -15535,6 +15536,91 @@ cmdline_parse_inst_t cmd_load_from_file = {
},
};
+struct cmd_add_representor_result {
+ cmdline_fixed_string_t cmd;
+ cmdline_fixed_string_t representor;
+ cmdline_fixed_string_t pf;
+ uint16_t vport;
+};
+
+cmdline_parse_token_string_t cmd_addrepresentor_add =
+TOKEN_STRING_INITIALIZER(struct cmd_add_representor_result,
+ cmd, "add");
+cmdline_parse_token_string_t cmd_addrepresentor_del =
+TOKEN_STRING_INITIALIZER(struct cmd_add_representor_result,
+ cmd, "del");
+cmdline_parse_token_string_t cmd_addrepresentor_rep =
+TOKEN_STRING_INITIALIZER(struct cmd_add_representor_result,
+ representor, "representor");
+cmdline_parse_token_string_t cmd_addrepresentor_pf =
+TOKEN_STRING_INITIALIZER(struct cmd_add_representor_result,
+ pf, NULL);
+cmdline_parse_token_num_t cmd_addrepresentor_vport =
+TOKEN_NUM_INITIALIZER(struct cmd_add_representor_result,
+ vport, UINT16);
+
+static void cmd_add_representor_callback(void *parsed_result,
+ __attribute__((unused)) struct cmdline *cl,
+ __attribute__((unused)) void *data)
+{
+ struct cmd_add_representor_result *res = parsed_result;
+ uint16_t port_id;
+ int ret;
+
+ rte_log(RTE_LOG_INFO, RTE_LOGTYPE_USER1, "%s(): addr:%s vport:%i\n",
+ __func__, res->pf, res->vport);
+
+ ret = rte_representor_port_register(res->pf, res->vport, &port_id);
+ if (ret != 0)
+ printf("Registering port representor failed\n");
+ else
+ printf("Port Representor registered with port id %i\n",
+ port_id);
+}
+
+static void cmd_del_representor_callback(void *parsed_result,
+ __attribute__((unused)) struct cmdline *cl,
+ __attribute__((unused)) void *data)
+{
+ struct cmd_add_representor_result *res = parsed_result;
+ int ret;
+
+ rte_log(RTE_LOG_INFO, RTE_LOGTYPE_USER1, "%s(): port:%i\n", __func__,
+ res->vport);
+ ret = rte_representor_port_unregister(res->pf, res->vport);
+ if (ret != 0)
+ printf("Port %i is not a valid port representor.\n",
+ res->vport);
+}
+
+cmdline_parse_inst_t cmd_add_representor = {
+ .f = cmd_add_representor_callback,
+ .help_str = "add representor <BusName_DomBDF> <vport_id> "
+ "Add a Port Representor",
+ .data = NULL,
+ .tokens = {
+ (void *)&cmd_addrepresentor_add,
+ (void *)&cmd_addrepresentor_rep,
+ (void *)&cmd_addrepresentor_pf,
+ (void *)&cmd_addrepresentor_vport,
+ NULL
+ }
+};
+
+cmdline_parse_inst_t cmd_del_representor = {
+ .f = cmd_del_representor_callback,
+ .help_str = "del representor <BusName_DomBDF> <vport_id> "
+ "Delete a Port Representor",
+ .data = NULL,
+ .tokens = {
+ (void *)&cmd_addrepresentor_del,
+ (void *)&cmd_addrepresentor_rep,
+ (void *)&cmd_addrepresentor_pf,
+ (void *)&cmd_addrepresentor_vport,
+ NULL
+ }
+};
+
/* ******************************************************************************** */
/* list of instructions */
@@ -15576,6 +15662,8 @@ cmdline_parse_ctx_t main_ctx[] = {
(cmdline_parse_inst_t *) &cmd_show_bonding_config,
(cmdline_parse_inst_t *) &cmd_set_bonding_primary,
(cmdline_parse_inst_t *) &cmd_add_bonding_slave,
+ (cmdline_parse_inst_t *) &cmd_add_representor,
+ (cmdline_parse_inst_t *) &cmd_del_representor,
(cmdline_parse_inst_t *) &cmd_remove_bonding_slave,
(cmdline_parse_inst_t *) &cmd_create_bonded_device,
(cmdline_parse_inst_t *) &cmd_set_bond_mac_addr,