* [dpdk-dev] [PATCH] net/bonding: Support configuration for LACP fast timers
@ 2020-04-21 7:53 Kiran KN
2020-11-25 12:10 ` Min Hu (Connor)
0 siblings, 1 reply; 2+ messages in thread
From: Kiran KN @ 2020-04-21 7:53 UTC (permalink / raw)
To: dev; +Cc: Chas Williams, David Marchand, Thomas Monjalon
Add a rte APIs to set/get the timeout for LACP
signed-off-by: Kiran KN <kirankn@juniper.net>
---
drivers/net/bonding/eth_bond_private.h | 8 ++++++++
drivers/net/bonding/rte_eth_bond.h | 26 ++++++++++++++++++++++++++
drivers/net/bonding/rte_eth_bond_8023ad.c | 6 ++++++
drivers/net/bonding/rte_eth_bond_8023ad.h | 9 +++++++++
drivers/net/bonding/rte_eth_bond_api.c | 27 +++++++++++++++++++++++++++
drivers/net/bonding/rte_eth_bond_args.c | 25 +++++++++++++++++++++++++
drivers/net/bonding/rte_eth_bond_pmd.c | 30 +++++++++++++++++++++++++++++-
7 files changed, 130 insertions(+), 1 deletion(-)
diff --git a/drivers/net/bonding/eth_bond_private.h b/drivers/net/bonding/eth_bond_private.h
index c9b2d0fe4..8bab10ee1 100644
--- a/drivers/net/bonding/eth_bond_private.h
+++ b/drivers/net/bonding/eth_bond_private.h
@@ -28,11 +28,14 @@
#define PMD_BOND_LSC_POLL_PERIOD_KVARG ("lsc_poll_period_ms")
#define PMD_BOND_LINK_UP_PROP_DELAY_KVARG ("up_delay")
#define PMD_BOND_LINK_DOWN_PROP_DELAY_KVARG ("down_delay")
+#define PMD_BOND_LACP_RATE_KVARG ("lacp_rate")
#define PMD_BOND_XMIT_POLICY_LAYER2_KVARG ("l2")
#define PMD_BOND_XMIT_POLICY_LAYER23_KVARG ("l23")
#define PMD_BOND_XMIT_POLICY_LAYER34_KVARG ("l34")
+#define PMD_BOND_LACP_RATE_FAST_KVARG ("fast")
+#define PMD_BOND_LACP_RATE_SLOW_KVARG ("slow")
extern int bond_logtype;
#define RTE_BOND_LOG(lvl, msg, ...) \
@@ -180,6 +183,7 @@ struct bond_dev_private {
void *vlan_filter_bmpmem; /* enabled vlan filter bitmap */
struct rte_bitmap *vlan_filter_bmp;
+ uint8_t lacp_rate;
};
extern const struct eth_dev_ops default_dev_ops;
@@ -306,6 +310,10 @@ int
bond_ethdev_parse_time_ms_kvarg(const char *key,
const char *value, void *extra_args);
+int
+bond_ethdev_parse_lacp_rate_kvarg(const char *key,
+ const char *value, void *extra_args);
+
void
bond_tlb_disable(struct bond_dev_private *internals);
diff --git a/drivers/net/bonding/rte_eth_bond.h b/drivers/net/bonding/rte_eth_bond.h
index 874aa91a5..0e90ba2cf 100644
--- a/drivers/net/bonding/rte_eth_bond.h
+++ b/drivers/net/bonding/rte_eth_bond.h
@@ -88,6 +88,10 @@ extern "C" {
#define BALANCE_XMIT_POLICY_LAYER34 (2)
/**< Layer 3+4 (IP Addresses + UDP Ports) transmit load balancing */
+/* LACP Rate */
+#define LACP_RATE_SLOW (0)
+#define LACP_RATE_FAST (1)
+
/**
* Create a bonded rte_eth_dev device
*
@@ -343,6 +347,28 @@ rte_eth_bond_link_up_prop_delay_set(uint16_t bonded_port_id,
int
rte_eth_bond_link_up_prop_delay_get(uint16_t bonded_port_id);
+/**
+ * Set the lacp rate for the slave interface
+ *
+ * @param bonded_port_id Port ID of bonded device.
+ * @param lacp_rate 0 - slow, 1 - fast
+ *
+ * @return
+ * 0 on success, negative value otherwise.
+ */
+int
+rte_eth_bond_lacp_rate_set(uint16_t bonded_port_id, uint8_t lacp_rate);
+
+/**
+ * Get the lacp rate for the slave device
+ *
+ * @param bonded_port_id Port ID of bonded device.
+ *
+ * @return
+ * lacp rate on success, negative value otherwise.
+ */
+int
+rte_eth_bond_lacp_rate_get(uint16_t bonded_port_id);
#ifdef __cplusplus
}
diff --git a/drivers/net/bonding/rte_eth_bond_8023ad.c b/drivers/net/bonding/rte_eth_bond_8023ad.c
index b77a37ddb..e3159004a 100644
--- a/drivers/net/bonding/rte_eth_bond_8023ad.c
+++ b/drivers/net/bonding/rte_eth_bond_8023ad.c
@@ -491,6 +491,12 @@ mux_machine(struct bond_dev_private *internals, uint16_t slave_id)
MODE4_DEBUG("Out of sync -> ATTACHED\n");
}
+ if (internals->lacp_rate)
+ ACTOR_STATE_SET(port, LACP_SHORT_TIMEOUT);
+ else
+ ACTOR_STATE_CLR(port, LACP_SHORT_TIMEOUT);
+
+
if (!ACTOR_STATE(port, SYNCHRONIZATION)) {
/* attach mux to aggregator */
RTE_ASSERT((port->actor_state & (STATE_COLLECTING |
diff --git a/drivers/net/bonding/rte_eth_bond_8023ad.h b/drivers/net/bonding/rte_eth_bond_8023ad.h
index 62265f449..5623e1424 100644
--- a/drivers/net/bonding/rte_eth_bond_8023ad.h
+++ b/drivers/net/bonding/rte_eth_bond_8023ad.h
@@ -331,4 +331,13 @@ rte_eth_bond_8023ad_agg_selection_get(uint16_t port_id);
int
rte_eth_bond_8023ad_agg_selection_set(uint16_t port_id,
enum rte_bond_8023ad_agg_selection agg_selection);
+
+/**
+ * Set slave to use fast lacp timeout
+ * @param port_id Bonding device id
+ * @return
+ * 0 on success, negative value otherwise
+ */
+int
+rte_eth_bond_8023ad_ext_set_fast(uint16_t port_id, uint16_t slave_id);
#endif /* RTE_ETH_BOND_8023AD_H_ */
diff --git a/drivers/net/bonding/rte_eth_bond_api.c b/drivers/net/bonding/rte_eth_bond_api.c
index f38eb3b47..9157a7295 100644
--- a/drivers/net/bonding/rte_eth_bond_api.c
+++ b/drivers/net/bonding/rte_eth_bond_api.c
@@ -1050,3 +1050,30 @@ rte_eth_bond_link_up_prop_delay_get(uint16_t bonded_port_id)
return internals->link_up_delay_ms;
}
+
+int
+rte_eth_bond_lacp_rate_set(uint16_t bonded_port_id, uint8_t lacp_rate)
+{
+ struct bond_dev_private *internals;
+
+ if (valid_bonded_port_id(bonded_port_id) != 0)
+ return -1;
+
+ internals = rte_eth_devices[bonded_port_id].data->dev_private;
+ internals->lacp_rate = lacp_rate;
+
+ return 0;
+}
+
+int
+rte_eth_bond_lacp_rate_get(uint16_t bonded_port_id)
+{
+ struct bond_dev_private *internals;
+
+ if (valid_bonded_port_id(bonded_port_id) != 0)
+ return -1;
+
+ internals = rte_eth_devices[bonded_port_id].data->dev_private;
+
+ return internals->lacp_rate;
+}
diff --git a/drivers/net/bonding/rte_eth_bond_args.c b/drivers/net/bonding/rte_eth_bond_args.c
index abdf55261..732685198 100644
--- a/drivers/net/bonding/rte_eth_bond_args.c
+++ b/drivers/net/bonding/rte_eth_bond_args.c
@@ -18,6 +18,7 @@ const char *pmd_bond_init_valid_arguments[] = {
PMD_BOND_SOCKET_ID_KVARG,
PMD_BOND_MAC_ADDR_KVARG,
PMD_BOND_AGG_MODE_KVARG,
+ PMD_BOND_LACP_RATE_KVARG,
"driver",
NULL
};
@@ -299,3 +300,27 @@ bond_ethdev_parse_time_ms_kvarg(const char *key __rte_unused,
return 0;
}
+
+int
+bond_ethdev_parse_lacp_rate_kvarg(const char *key __rte_unused,
+ const char *value, void *extra_args)
+{
+ uint8_t lacp_rate;
+
+ if (value == NULL || extra_args == NULL)
+ return -1;
+
+ if (strcmp(PMD_BOND_LACP_RATE_FAST_KVARG, value) == 0)
+ lacp_rate = LACP_RATE_FAST;
+ else if (strcmp("1", value) == 0)
+ lacp_rate = LACP_RATE_FAST;
+ else if (strcmp(PMD_BOND_LACP_RATE_SLOW_KVARG, value) == 0)
+ lacp_rate = LACP_RATE_SLOW;
+ else if (strcmp("0", value) == 0)
+ lacp_rate = LACP_RATE_SLOW;
+ else
+ return -1;
+
+ *(uint8_t *)extra_args = lacp_rate;
+ return 0;
+}
diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c
index 707a0f3cd..e1f105233 100644
--- a/drivers/net/bonding/rte_eth_bond_pmd.c
+++ b/drivers/net/bonding/rte_eth_bond_pmd.c
@@ -3727,6 +3727,33 @@ bond_ethdev_configure(struct rte_eth_dev *dev)
return -1;
}
+ /* Parse/set lacp rate */
+ arg_count = rte_kvargs_count(kvlist, PMD_BOND_LACP_RATE_KVARG);
+ if (arg_count == 1) {
+ uint8_t lacp_rate;
+
+ if (rte_kvargs_process(kvlist, PMD_BOND_LACP_RATE_KVARG,
+ &bond_ethdev_parse_lacp_rate_kvarg, &lacp_rate) !=
+ 0) {
+ RTE_LOG(INFO, EAL,
+ "Invalid lacp rate specified for bonded device %s\n",
+ name);
+ return -1;
+ }
+
+ /* Set balance mode transmit policy*/
+ if (rte_eth_bond_lacp_rate_set(port_id, lacp_rate)
+ != 0) {
+ RTE_LOG(ERR, EAL,
+ "Failed to set lacp rate on bonded device %s\n", name);
+ return -1;
+ }
+ } else if (arg_count > 1) {
+ RTE_LOG(INFO, EAL,
+ "Lacp rate can be specified only once for bonded device %s\n", name);
+ return -1;
+ }
+
return 0;
}
@@ -3748,7 +3775,8 @@ RTE_PMD_REGISTER_PARAM_STRING(net_bonding,
"mac=<mac addr> "
"lsc_poll_period_ms=<int> "
"up_delay=<int> "
- "down_delay=<int>");
+ "down_delay=<int> "
+ "lacp_rate=[fast | slow]");
int bond_logtype;
--
2.16.6
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [dpdk-dev] [PATCH] net/bonding: Support configuration for LACP fast timers
2020-04-21 7:53 [dpdk-dev] [PATCH] net/bonding: Support configuration for LACP fast timers Kiran KN
@ 2020-11-25 12:10 ` Min Hu (Connor)
0 siblings, 0 replies; 2+ messages in thread
From: Min Hu (Connor) @ 2020-11-25 12:10 UTC (permalink / raw)
To: kirankn; +Cc: chas3, david.marchand, dev, thomas
+/* LACP Rate */
+#define LACP_RATE_SLOW (0)
+#define LACP_RATE_FAST (1)
parentheses here can be deleted.
/* Set balance mode transmit policy*/
blank space shoud be added before "*/".
+ if (rte_eth_bond_lacp_rate_set(port_id, lacp_rate)
+ != 0) {
+ RTE_LOG(ERR, EAL,
+ "Failed to set lacp rate on bonded device %s\n", name);
+ return -1;
+ }
Add a rte APIs to set/get the timeout for LACP
signed-off-by: Kiran KN <kirankn@juniper.net>
By the way, I wish commit info can be more detailed for
These two APIs£¬then we can know the API functino more.
thanks.
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2020-11-25 12:10 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-21 7:53 [dpdk-dev] [PATCH] net/bonding: Support configuration for LACP fast timers Kiran KN
2020-11-25 12:10 ` Min Hu (Connor)
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).