Static configuration test
parent
0463aad5ec
commit
98d02d2405
|
@ -142,11 +142,11 @@ static const struct net_device_ops netdev_ops = {
|
||||||
.ndo_open = netdev_open,
|
.ndo_open = netdev_open,
|
||||||
.ndo_stop = netdev_open,
|
.ndo_stop = netdev_open,
|
||||||
.ndo_start_xmit = netdev_xmit,
|
.ndo_start_xmit = netdev_xmit,
|
||||||
.ndo_set_rx_mode = netdev_no_ret,
|
.ndo_set_rx_mode = (void*)netdev_no_ret,
|
||||||
.ndo_validate_addr = netdev_open,
|
.ndo_validate_addr = netdev_open,
|
||||||
.ndo_set_mac_address = NULL,
|
.ndo_set_mac_address = NULL,
|
||||||
.ndo_change_mtu = NULL,
|
.ndo_change_mtu = NULL,
|
||||||
.ndo_tx_timeout = netdev_no_ret,
|
.ndo_tx_timeout = (void*)netdev_no_ret,
|
||||||
.ndo_vlan_rx_add_vid = NULL,
|
.ndo_vlan_rx_add_vid = NULL,
|
||||||
.ndo_vlan_rx_kill_vid = NULL,
|
.ndo_vlan_rx_kill_vid = NULL,
|
||||||
.ndo_do_ioctl = NULL,
|
.ndo_do_ioctl = NULL,
|
||||||
|
@ -162,7 +162,7 @@ static const struct net_device_ops netdev_ops = {
|
||||||
.ndo_get_stats = netdev_stats,
|
.ndo_get_stats = netdev_stats,
|
||||||
.ndo_setup_tc = NULL,
|
.ndo_setup_tc = NULL,
|
||||||
#ifdef CONFIG_NET_POLL_CONTROLLER
|
#ifdef CONFIG_NET_POLL_CONTROLLER
|
||||||
.ndo_poll_controller = netdev_no_ret,
|
.ndo_poll_controller = (void*)netdev_no_ret,
|
||||||
.ndo_netpoll_setup = NULL,
|
.ndo_netpoll_setup = NULL,
|
||||||
.ndo_netpoll_cleanup = NULL,
|
.ndo_netpoll_cleanup = NULL,
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -41,7 +41,7 @@ endif
|
||||||
# DBGCERR = Enable macro to print error statements
|
# DBGCERR = Enable macro to print error statements
|
||||||
#
|
#
|
||||||
|
|
||||||
GCC_OPT += -Wall -fPIC -fgnu89-inline -Werror
|
GCC_OPT += -Wall -fPIC -fgnu89-inline -Werror -Wno-error=stringop-truncation -Wno-error=address-of-packed-member
|
||||||
#DBG_OPT = -DDBGMSG -DDBGFUNC -DSTREAM -DSTATE -DTSTAT -DAPP -DEPOLL
|
#DBG_OPT = -DDBGMSG -DDBGFUNC -DSTREAM -DSTATE -DTSTAT -DAPP -DEPOLL
|
||||||
#DBG_OPT = -DDBGMSG -DDBGFUNC -DSTREAM -DSTATE
|
#DBG_OPT = -DDBGMSG -DDBGFUNC -DSTREAM -DSTATE
|
||||||
#DBG_OPT += -DPKTDUMP
|
#DBG_OPT += -DPKTDUMP
|
||||||
|
|
|
@ -74,7 +74,7 @@ mystrtol(const char *nptr, int base)
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
if (endptr == nptr) {
|
if (endptr == nptr) {
|
||||||
TRACE_CONFIG("Parsing strtol error!\n");
|
TRACE_CONFIG("Parsing strtol error! %s\n", nptr);
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -632,6 +632,8 @@ ParseConfiguration(char *line)
|
||||||
SaveInterfaceInfo(q);
|
SaveInterfaceInfo(q);
|
||||||
else
|
else
|
||||||
SaveInterfaceInfo(line + strlen(p) + 1);
|
SaveInterfaceInfo(line + strlen(p) + 1);
|
||||||
|
} else if (strncmp(p, "local_ip", 8) == 0) {
|
||||||
|
|
||||||
} else if (strcmp(p, "io") == 0) {
|
} else if (strcmp(p, "io") == 0) {
|
||||||
AssignIOModule(q);
|
AssignIOModule(q);
|
||||||
if (CheckIOModuleAccessPermissions() == -1) {
|
if (CheckIOModuleAccessPermissions() == -1) {
|
||||||
|
|
|
@ -691,8 +691,8 @@ dpdk_load_module(void)
|
||||||
MEMPOOL_F_SC_GET);
|
MEMPOOL_F_SC_GET);
|
||||||
|
|
||||||
if (pktmbuf_pool[rxlcore_id] == NULL)
|
if (pktmbuf_pool[rxlcore_id] == NULL)
|
||||||
rte_exit(EXIT_FAILURE, "Cannot init mbuf pool, errno: %d\n",
|
rte_exit(EXIT_FAILURE, "Cannot init mbuf pool, errno: %d, error: %s\n",
|
||||||
rte_errno);
|
rte_errno, rte_strerror(rte_errno));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Initialise each port */
|
/* Initialise each port */
|
||||||
|
|
|
@ -98,74 +98,12 @@ GetNumQueues()
|
||||||
}
|
}
|
||||||
#endif /* !PSIO */
|
#endif /* !PSIO */
|
||||||
/*----------------------------------------------------------------------------*/
|
/*----------------------------------------------------------------------------*/
|
||||||
#ifndef DISABLE_DPDK
|
|
||||||
/**
|
|
||||||
* returns max numa ID while probing for rte devices
|
|
||||||
*/
|
|
||||||
static int
|
|
||||||
probe_all_rte_devices(char **argv, int *argc, char *dev_name_list)
|
|
||||||
{
|
|
||||||
PciDevice pd;
|
|
||||||
int fd, numa_id = -1;
|
|
||||||
static char end[] = "";
|
|
||||||
static const char delim[] = " \t";
|
|
||||||
static char *dev_tokenizer;
|
|
||||||
char *dev_token, *saveptr;
|
|
||||||
|
|
||||||
dev_tokenizer = strdup(dev_name_list);
|
|
||||||
if (dev_tokenizer == NULL) {
|
|
||||||
TRACE_ERROR("Can't allocate memory for dev_tokenizer!\n");
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
fd = open(DEV_PATH, O_RDONLY);
|
|
||||||
if (fd != -1) {
|
|
||||||
dev_token = strtok_r(dev_tokenizer, delim, &saveptr);
|
|
||||||
while (dev_token != NULL) {
|
|
||||||
strcpy(pd.ifname, dev_token);
|
|
||||||
if (ioctl(fd, FETCH_PCI_ADDRESS, &pd) == -1) {
|
|
||||||
TRACE_DBG("Could not find pci info on dpdk "
|
|
||||||
"device: %s. Is it a dpdk-attached "
|
|
||||||
"interface?\n", dev_token);
|
|
||||||
goto loop_over;
|
|
||||||
}
|
|
||||||
argv[*argc] = strdup("-w");
|
|
||||||
argv[*argc + 1] = calloc(PCI_LENGTH, 1);
|
|
||||||
if (argv[*argc] == NULL ||
|
|
||||||
argv[*argc + 1] == NULL) {
|
|
||||||
TRACE_ERROR("Memory allocation error!\n");
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
sprintf(argv[*argc + 1], PCI_DOM":"PCI_BUS":"
|
|
||||||
PCI_DEVICE"."PCI_FUNC,
|
|
||||||
pd.pa.domain, pd.pa.bus, pd.pa.device,
|
|
||||||
pd.pa.function);
|
|
||||||
*argc += 2;
|
|
||||||
if (pd.numa_socket > numa_id) numa_id = pd.numa_socket;
|
|
||||||
loop_over:
|
|
||||||
dev_token = strtok_r(NULL, delim, &saveptr);
|
|
||||||
}
|
|
||||||
close(fd);
|
|
||||||
free(dev_tokenizer);
|
|
||||||
} else {
|
|
||||||
TRACE_ERROR("Error opening dpdk-face!\n");
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* add the terminating "" sequence */
|
|
||||||
argv[*argc] = end;
|
|
||||||
|
|
||||||
return numa_id;
|
|
||||||
}
|
|
||||||
#endif /* !DISABLE_DPDK */
|
|
||||||
/*----------------------------------------------------------------------------*/
|
|
||||||
int
|
int
|
||||||
SetNetEnv(char *dev_name_list, char *port_stat_list)
|
SetNetEnv(char *dev_name_list, char *port_stat_list)
|
||||||
{
|
{
|
||||||
int eidx = 0;
|
int eidx = 0;
|
||||||
int i, j;
|
int i, j;
|
||||||
|
|
||||||
int set_all_inf = (strncmp(dev_name_list, ALL_STRING, sizeof(ALL_STRING))==0);
|
|
||||||
|
|
||||||
TRACE_CONFIG("Loading interface setting\n");
|
TRACE_CONFIG("Loading interface setting\n");
|
||||||
|
|
||||||
CONFIG.eths = (struct eth_table *)
|
CONFIG.eths = (struct eth_table *)
|
||||||
|
@ -177,6 +115,7 @@ SetNetEnv(char *dev_name_list, char *port_stat_list)
|
||||||
|
|
||||||
if (current_iomodule_func == &ps_module_func) {
|
if (current_iomodule_func == &ps_module_func) {
|
||||||
#ifndef DISABLE_PSIO
|
#ifndef DISABLE_PSIO
|
||||||
|
int set_all_inf = (strncmp(dev_name_list, ALL_STRING, sizeof(ALL_STRING))==0);
|
||||||
struct ifreq ifr;
|
struct ifreq ifr;
|
||||||
/* calculate num_devices now! */
|
/* calculate num_devices now! */
|
||||||
num_devices = ps_list_devices(devices);
|
num_devices = ps_list_devices(devices);
|
||||||
|
@ -260,11 +199,6 @@ SetNetEnv(char *dev_name_list, char *port_stat_list)
|
||||||
char socket_mem_str[32] = "";
|
char socket_mem_str[32] = "";
|
||||||
// int i;
|
// int i;
|
||||||
int ret, socket_mem;
|
int ret, socket_mem;
|
||||||
#if RTE_VERSION < RTE_VERSION_NUM(19, 8, 0, 0)
|
|
||||||
static struct ether_addr ports_eth_addr[RTE_MAX_ETHPORTS];
|
|
||||||
#else
|
|
||||||
static struct rte_ether_addr ports_eth_addr[RTE_MAX_ETHPORTS];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* STEP 1: first determine CPU mask */
|
/* STEP 1: first determine CPU mask */
|
||||||
mpz_init(_cpumask);
|
mpz_init(_cpumask);
|
||||||
|
@ -315,7 +249,6 @@ SetNetEnv(char *dev_name_list, char *port_stat_list)
|
||||||
#endif
|
#endif
|
||||||
"--proc-type=auto"
|
"--proc-type=auto"
|
||||||
};
|
};
|
||||||
ret = probe_all_rte_devices(argv, &argc, dev_name_list);
|
|
||||||
|
|
||||||
|
|
||||||
/* STEP 4: build up socket mem parameter */
|
/* STEP 4: build up socket mem parameter */
|
||||||
|
@ -350,6 +283,7 @@ SetNetEnv(char *dev_name_list, char *port_stat_list)
|
||||||
TRACE_ERROR("Invalid EAL args!\n");
|
TRACE_ERROR("Invalid EAL args!\n");
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* give me the count of 'detected' ethernet ports */
|
/* give me the count of 'detected' ethernet ports */
|
||||||
#if RTE_VERSION < RTE_VERSION_NUM(18, 5, 0, 0)
|
#if RTE_VERSION < RTE_VERSION_NUM(18, 5, 0, 0)
|
||||||
num_devices = rte_eth_dev_count();
|
num_devices = rte_eth_dev_count();
|
||||||
|
@ -361,67 +295,24 @@ SetNetEnv(char *dev_name_list, char *port_stat_list)
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* get mac addr entries of 'detected' dpdk ports */
|
|
||||||
for (ret = 0; ret < num_devices; ret++)
|
|
||||||
rte_eth_macaddr_get(ret, &ports_eth_addr[ret]);
|
|
||||||
|
|
||||||
num_queues = MIN(CONFIG.num_cores, MAX_CPUS);
|
num_queues = MIN(CONFIG.num_cores, MAX_CPUS);
|
||||||
|
|
||||||
struct ifaddrs *ifap;
|
uint16_t port_id = 0;
|
||||||
struct ifaddrs *iter_if;
|
const char *port_name = "0000:05:00.1";
|
||||||
char *seek;
|
if (rte_eth_dev_get_port_by_name(port_name, &port_id) == 0) {
|
||||||
|
|
||||||
if (getifaddrs(&ifap) != 0) {
|
|
||||||
perror("getifaddrs: ");
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
|
|
||||||
iter_if = ifap;
|
|
||||||
do {
|
|
||||||
if (iter_if->ifa_addr && iter_if->ifa_addr->sa_family == AF_INET &&
|
|
||||||
!set_all_inf &&
|
|
||||||
(seek=strstr(dev_name_list, iter_if->ifa_name)) != NULL &&
|
|
||||||
/* check if the interface was not aliased */
|
|
||||||
*(seek + strlen(iter_if->ifa_name)) != ':') {
|
|
||||||
struct ifreq ifr;
|
|
||||||
|
|
||||||
/* Setting informations */
|
|
||||||
eidx = CONFIG.eths_num++;
|
eidx = CONFIG.eths_num++;
|
||||||
strcpy(CONFIG.eths[eidx].dev_name, iter_if->ifa_name);
|
strcpy(CONFIG.eths[eidx].dev_name, port_name);
|
||||||
strcpy(ifr.ifr_name, iter_if->ifa_name);
|
CONFIG.eths[eidx].ifindex = port_id;
|
||||||
|
inet_aton("192.168.7.2", (struct in_addr*)&CONFIG.eths[eidx].ip_addr);
|
||||||
/* Create socket */
|
inet_aton("255.255.255.0", (struct in_addr*)&CONFIG.eths[eidx].netmask);
|
||||||
int sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);
|
#if RTE_VERSION < RTE_VERSION_NUM(19, 8, 0, 0)
|
||||||
if (sock == -1) {
|
static struct ether_addr port_haddr;
|
||||||
perror("socket");
|
#else
|
||||||
exit(EXIT_FAILURE);
|
static struct rte_ether_addr port_haddr;
|
||||||
}
|
#endif
|
||||||
|
assert(sizeof(port_haddr.addr_bytes) == ETH_ALEN);
|
||||||
/* getting address */
|
rte_eth_macaddr_get(CONFIG.eths[eidx].ifindex, &port_haddr);
|
||||||
if (ioctl(sock, SIOCGIFADDR, &ifr) == 0 ) {
|
memcpy(CONFIG.eths[eidx].haddr, port_haddr.addr_bytes, ETH_ALEN);
|
||||||
struct in_addr sin = ((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr;
|
|
||||||
CONFIG.eths[eidx].ip_addr = *(uint32_t *)&sin;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ioctl(sock, SIOCGIFHWADDR, &ifr) == 0 ) {
|
|
||||||
for (j = 0; j < ETH_ALEN; j ++) {
|
|
||||||
CONFIG.eths[eidx].haddr[j] = ifr.ifr_addr.sa_data[j];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Net MASK */
|
|
||||||
if (ioctl(sock, SIOCGIFNETMASK, &ifr) == 0) {
|
|
||||||
struct in_addr sin = ((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr;
|
|
||||||
CONFIG.eths[eidx].netmask = *(uint32_t *)&sin;
|
|
||||||
}
|
|
||||||
close(sock);
|
|
||||||
|
|
||||||
for (j = 0; j < num_devices; j++) {
|
|
||||||
if (!memcmp(&CONFIG.eths[eidx].haddr[0], &ports_eth_addr[j],
|
|
||||||
ETH_ALEN))
|
|
||||||
CONFIG.eths[eidx].ifindex = j;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* add to attached devices */
|
/* add to attached devices */
|
||||||
for (j = 0; j < num_devices_attached; j++) {
|
for (j = 0; j < num_devices_attached; j++) {
|
||||||
if (devices_attached[j] == CONFIG.eths[eidx].ifindex) {
|
if (devices_attached[j] == CONFIG.eths[eidx].ifindex) {
|
||||||
|
@ -430,15 +321,12 @@ SetNetEnv(char *dev_name_list, char *port_stat_list)
|
||||||
}
|
}
|
||||||
devices_attached[num_devices_attached] = CONFIG.eths[eidx].ifindex;
|
devices_attached[num_devices_attached] = CONFIG.eths[eidx].ifindex;
|
||||||
num_devices_attached++;
|
num_devices_attached++;
|
||||||
fprintf(stderr, "Total number of attached devices: %d\n",
|
fprintf(stderr, "Total number of attached devices: %d\n", num_devices_attached);
|
||||||
num_devices_attached);
|
fprintf(stderr, "Interface name: %s\n", port_name);
|
||||||
fprintf(stderr, "Interface name: %s\n",
|
} else {
|
||||||
iter_if->ifa_name);
|
fprintf(stderr, "Interface %s not found\n", port_name);
|
||||||
}
|
}
|
||||||
iter_if = iter_if->ifa_next;
|
|
||||||
} while (iter_if != NULL);
|
|
||||||
|
|
||||||
freeifaddrs(ifap);
|
|
||||||
#if 0
|
#if 0
|
||||||
/*
|
/*
|
||||||
* XXX: It seems that there is a bug in the RTE SDK.
|
* XXX: It seems that there is a bug in the RTE SDK.
|
||||||
|
@ -464,6 +352,7 @@ SetNetEnv(char *dev_name_list, char *port_stat_list)
|
||||||
#endif /* !DISABLE_DPDK */
|
#endif /* !DISABLE_DPDK */
|
||||||
} else if (current_iomodule_func == &netmap_module_func) {
|
} else if (current_iomodule_func == &netmap_module_func) {
|
||||||
#ifndef DISABLE_NETMAP
|
#ifndef DISABLE_NETMAP
|
||||||
|
int set_all_inf = (strncmp(dev_name_list, ALL_STRING, sizeof(ALL_STRING))==0);
|
||||||
struct ifaddrs *ifap;
|
struct ifaddrs *ifap;
|
||||||
struct ifaddrs *iter_if;
|
struct ifaddrs *iter_if;
|
||||||
char *seek;
|
char *seek;
|
||||||
|
|
|
@ -251,7 +251,7 @@ mystrtol(const char *nptr, int base)
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
if (endptr == nptr) {
|
if (endptr == nptr) {
|
||||||
fprintf(stderr, "Parsing strtol error!\n");
|
fprintf(stderr, "Parsing strtol error! %s\n", nptr);
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue