#endif
}
+/**
+ * \param port_id - queried port
+ * \param socket_id - socket ID of the queried port
+ * \return positive number on success, negative on failure (errno)
+ */
+static int32_t DeviceSetSocketID(uint16_t port_id, int32_t *socket_id)
+{
+ rte_errno = 0;
+ int retval = rte_eth_dev_socket_id(port_id);
+ *socket_id = retval;
+
+#if RTE_VER_YEAR > 22 || RTE_VER_YEAR == 22 && RTE_VER_MONTH == 11 // DPDK API changed since 22.11
+ retval = -rte_errno;
+#endif
+
+ return retval;
+}
+
static void DeviceInitPortConf(const DPDKIfaceConfig *iconf,
const struct rte_eth_dev_info *dev_info, struct rte_eth_conf *port_conf)
{
SCReturnInt(retval);
}
- if (rte_eth_dev_socket_id(iconf->port_id) != rte_eth_dev_socket_id(iconf->out_port_id)) {
+ int32_t out_port_socket_id;
+ retval = DeviceSetSocketID(iconf->port_id, &out_port_socket_id);
+ if (retval < 0) {
+ SCLogError("%s: invalid socket id (err=%d)", iconf->out_iface, retval);
+ SCReturnInt(retval);
+ }
+
+ if (iconf->socket_id != out_port_socket_id) {
SCLogWarning("%s: out iface %s is not on the same NUMA node", iconf->iface,
iconf->out_iface);
}
SCReturnInt(retval);
}
- retval = rte_eth_dev_socket_id(iconf->port_id);
+ retval = DeviceSetSocketID(iconf->port_id, &iconf->socket_id);
if (retval < 0) {
SCLogError("%s: invalid socket id (err=%d)", iconf->iface, retval);
SCReturnInt(retval);
}
- iconf->socket_id = retval;
retval = rte_eth_dev_info_get(iconf->port_id, &dev_info);
if (retval != 0) {
uint64_t dropped;
uint16_t port_id;
uint16_t queue_id;
+ int32_t port_socket_id;
struct rte_mempool *pkt_mempool;
struct rte_mbuf *received_mbufs[BURST_SIZE];
} DPDKThreadVars;
ptv->threads = dpdk_config->threads;
ptv->port_id = dpdk_config->port_id;
ptv->out_port_id = dpdk_config->out_port_id;
+ ptv->port_socket_id = dpdk_config->socket_id;
// pass the pointer to the mempool and then forget about it. Mempool is freed in thread deinit.
ptv->pkt_mempool = dpdk_config->pkt_mempool;
dpdk_config->pkt_mempool = NULL;
thread_numa = GetNumaNode();
- if (thread_numa >= 0 && thread_numa != rte_eth_dev_socket_id(ptv->port_id)) {
+ if (thread_numa >= 0 && thread_numa != ptv->port_socket_id) {
SC_ATOMIC_ADD(dpdk_config->inconsitent_numa_cnt, 1);
SCLogPerf("%s: NIC is on NUMA %d, thread on NUMA %d", dpdk_config->iface,
- rte_eth_dev_socket_id(ptv->port_id), thread_numa);
+ ptv->port_socket_id, thread_numa);
}
uint16_t queue_id = SC_ATOMIC_ADD(dpdk_config->queue_id, 1);