37 int32_t BondingIsBond(uint16_t pid)
39 struct rte_eth_dev_info di;
40 int32_t ret = rte_eth_dev_info_get(pid, &di);
42 SCLogError(
"%s: unable to get device info (err: %s)", DPDKGetPortNameByPortID(pid),
47 return strcmp(di.driver_name,
"net_bonding") == 0 ? 0 : 1;
50 uint16_t BondingMemberDevicesGet(
51 uint16_t bond_pid, uint16_t bonded_devs[], uint16_t bonded_devs_length)
54 #if RTE_VERSION >= RTE_VERSION_NUM(23, 11, 0, 0)
56 #if RTE_VERSION < RTE_VERSION_NUM(24, 11, 0, 0) // DPDK 23.11 - 24.07
57 #pragma GCC diagnostic push
58 #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
61 int32_t
len = rte_eth_bond_members_get(bond_pid, bonded_devs, bonded_devs_length);
63 #if RTE_VERSION < RTE_VERSION_NUM(24, 11, 0, 0)
64 #pragma GCC diagnostic pop
68 int32_t
len = rte_eth_bond_slaves_get(bond_pid, bonded_devs, bonded_devs_length);
72 FatalError(
"%s: no bonded devices found", DPDKGetPortNameByPortID(bond_pid));
74 FatalError(
"%s: unable to get bonded devices (err: %s)", DPDKGetPortNameByPortID(bond_pid),
80 "%s: bond port not supported in DPDK installation", DPDKGetPortNameByPortID(bond_pid));
84 int32_t BondingAllDevicesSameDriver(uint16_t bond_pid)
86 uint16_t bonded_devs[RTE_MAX_ETHPORTS] = { 0 };
87 uint16_t
len = BondingMemberDevicesGet(bond_pid, bonded_devs, RTE_MAX_ETHPORTS);
89 const char *driver_name = NULL, *first_driver_name = NULL;
90 struct rte_eth_dev_info di = { 0 };
92 for (uint16_t i = 0; i <
len; i++) {
93 int32_t ret = rte_eth_dev_info_get(bonded_devs[i], &di);
95 FatalError(
"%s: unable to get device info (err: %s)",
96 DPDKGetPortNameByPortID(bonded_devs[i]), rte_strerror(-ret));
99 first_driver_name = di.driver_name;
101 driver_name = di.driver_name;
102 if (strncmp(first_driver_name, driver_name,
103 MIN(strlen(first_driver_name), strlen(driver_name))) != 0) {
117 const char *BondingDeviceDriverGet(uint16_t bond_pid)
119 uint16_t bonded_devs[RTE_MAX_ETHPORTS] = { 0 };
120 BondingMemberDevicesGet(bond_pid, bonded_devs, RTE_MAX_ETHPORTS);
122 struct rte_eth_dev_info di = { 0 };
123 int32_t ret = rte_eth_dev_info_get(bonded_devs[0], &di);
125 FatalError(
"%s: unable to get device info (err: %s)",
126 DPDKGetPortNameByPortID(bonded_devs[0]), rte_strerror(-ret));
128 return di.driver_name;