我通过rte_eth_bond_create在用户态创建了一个bond设备:
100 retval = rte_eth_bond_create(bondname, bondmode,
101 0 /*SOCKET_ID_ANY*/);
102 if (retval < 0)
103 rte_exit(EXIT_FAILURE,
104 "Faled to create bond port\n");
105
106 BOND_PORT = (uint8_t)retval;
现在希望同时在内核建立KNI映射,目前我的做法是:
59 snprintf(conf.name, RTE_KNI_NAMESIZE,"%s", bondname);
60 //conf.group_id = (uint16_t)port_id;
61 conf.group_id = rte_eth_bond_primary_get(port_id);
62 conf.mbuf_size = MAX_PACKET_SZ;
63 printf("conf setup\n");
64
65 //rte_eth_dev_info_get(port_id, &dev_info);
66 rte_eth_dev_info_get(conf.group_id, &dev_info);
67 if(dev_info.pci_dev){
68 ┊ conf.addr = dev_info.pci_dev->addr;
69 ┊ conf.id = dev_info.pci_dev->id;
70 }
71 printf("dev_info setup\n");
先获取Primary Slave的port id,然后将其传入rte_eth_dev_info_get中获取dev_info.pci_dev
否则,如果传入的时bond设备的ID则会导致dev_info.pci_dev为空值,这样会导致段错误
这样我的确可以在内核建立其bond设备,但是这个bond设备却无法up起来,将其up起来时,会报错:
RTNETLINK answers: Timer expired
请问应该怎么为bond网口在内核建立KNI映射呢??
或者怎么样才能使Bond口可以通过ip命令或ifconfig来管理呢????