F-Stack / f-stack

F-Stack is an user space network development kit with high performance based on DPDK, FreeBSD TCP/IP stack and coroutine API.
http://www.f-stack.org
Other
3.86k stars 896 forks source link

Error in ff_veth_set_gateway #299

Open iyerravi opened 6 years ago

iyerravi commented 6 years ago

hi, I am running a fstack process with 4 ports. and when i try to assign ip and gateway from config.ini the process throws error in the function ff_veth_set_gateway.

Because of this, my ping to the ip on only 1 port works. the rest 3 doesnt work.

pasting config.ini

dpdk

Hexadecimal bitmask of cores to run on.

lcore_mask=2 channel=4 promiscuous=1 numa_on=1

TCP segment offload, default: disabled.

tso=0

HW vlan strip, default: enabled.

vlan_strip=1

enabled port list

#

EBNF grammar:

#

exp ::= num_list {"," num_list}

num_list ::= |

range ::= "-"

num ::= '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'

#

examples

0-3 ports 0, 1,2,3 are enabled

1-3,4,7 ports 1,2,3,4,7 are enabled

port_list=0-3

Port config section

Correspond to dpdk.port_list's index: port0, port1...

port0 addr=10.10.10.1 netmask=255.255.255.0 broadcast=10.10.10.255 gateway=10.10.10.2 tcp_port=80,443,9001 port1 addr=11.11.11.1 netmask=255.255.255.0 broadcast=11.11.11.255 gateway=11.11.11.2 tcp_port=80,443,9001 port2 addr=12.12.12.1 netmask=255.255.255.0 broadcast=12.12.12.255 gateway=12.12.12.2 tcp_port=80,443,9001 port3 addr=13.13.13.1 netmask=255.255.255.0 broadcast=13.13.13.255 gateway=13.13.13.2 tcp_port=80,443,9001

lcore list used to handle this port

the format is same as port_list

lcore_list= 0

Packet capture path, this will hurt performance

pcap=./a.pcap

Kni config: if enabled and method=reject,

all packets that do not belong to the following tcp_port and udp_port

will transmit to kernel; if method=accept, all packets that belong to

the following tcp_port and udp_port will transmit to kernel.

[kni]

enable=1 method=reject

The format is same as port_list

tcp_port=80,443,9001

udp_port=53

FreeBSD network performance tuning configurations.

Most native FreeBSD configurations are supported.

freebsd.boot hz=100

Block out a range of descriptors to avoid overlap

with the kernel's descriptor space.

You can increase this value according to your app.

fd_reserve=1024

kern.ipc.maxsockets=262144

net.inet.tcp.syncache.hashsize=4096 net.inet.tcp.syncache.bucketlimit=100

net.inet.tcp.tcbhashsize=65536

kern.ncallout=262144

freebsd.sysctl kern.ipc.somaxconn=32768 kern.ipc.maxsockbuf=16777216

net.link.ether.inet.maxhold=5

net.inet.tcp.fast_finwait2_recycle=1 net.inet.tcp.sendspace=32765 net.inet.tcp.recvspace=32765 net.inet.tcp.nolocaltimewait=1 net.inet.tcp.cc.algorithm=cubic net.inet.tcp.sendbuf_max=16777216 net.inet.tcp.recvbuf_max=16777216 net.inet.tcp.sendbuf_auto=1 net.inet.tcp.recvbuf_auto=1 net.inet.tcp.sendbuf_inc=16384 net.inet.tcp.recvbuf_inc=524288 net.inet.tcp.sack.enable=1 net.inet.tcp.blackhole=1 net.inet.tcp.msl=2000 net.inet.tcp.delayed_ack=0

net.inet.udp.blackhole=1 net.inet.ip.redirect=0

console logs of process:

invalid proc_id:-1, use default 0

EAL: Detected 80 lcore(s) EAL: Auto-detected process type: PRIMARY EAL: No free hugepages reported in hugepages-1048576kB EAL: Probing VFIO support... EAL: PCI device 0000:01:00.0 on NUMA socket 0 EAL: probe driver: 8086:1521 net_e1000_igb EAL: PCI device 0000:01:00.1 on NUMA socket 0 EAL: probe driver: 8086:1521 net_e1000_igb EAL: PCI device 0000:06:00.0 on NUMA socket 0 EAL: probe driver: 8086:1521 net_e1000_igb EAL: PCI device 0000:06:00.1 on NUMA socket 0 EAL: probe driver: 8086:1521 net_e1000_igb EAL: PCI device 0000:06:00.2 on NUMA socket 0 EAL: probe driver: 8086:1521 net_e1000_igb EAL: PCI device 0000:06:00.3 on NUMA socket 0 EAL: probe driver: 8086:1521 net_e1000_igb EAL: PCI device 0000:81:00.0 on NUMA socket 1 EAL: probe driver: 8086:10fb net_ixgbe EAL: PCI device 0000:81:00.1 on NUMA socket 1 EAL: probe driver: 8086:10fb net_ixgbe lcore: 1, port: 0, queue: 0 lcore: 1, port: 1, queue: 0 lcore: 1, port: 2, queue: 0 lcore: 1, port: 3, queue: 0 create mbuf pool on socket 0 create ring:dispatch_ring_p0_q0 success, 2047 ring entries are now free! create ring:dispatch_ring_p1_q0 success, 2047 ring entries are now free! create ring:dispatch_ring_p2_q0 success, 2047 ring entries are now free! create ring:dispatch_ring_p3_q0 success, 2047 ring entries are now free Port 0 MAC: b4 96 91 28 c4 fc RX checksum offload supported TX ip checksum offload supported TX TCP&UDP checksum offload supported TSO is disabled port[0]: rss table size: 128 set port 0 to promiscuous mode ok Port 1 MAC: b4 96 91 28 c4 fd RX checksum offload supported TX ip checksum offload supported TX TCP&UDP checksum offload supported TSO is disabled port[1]: rss table size: 128 set port 1 to promiscuous mode ok Port 2 MAC: b4 96 91 28 c4 fe RX checksum offload supported TX ip checksum offload supported TX TCP&UDP checksum offload supported TSO is disabled port[2]: rss table size: 128 set port 2 to promiscuous mode ok Port 3 MAC: b4 96 91 28 c4 ff RX checksum offload supported TX ip checksum offload supported TX TCP&UDP checksum offload supported TSO is disabled port[3]: rss table size: 128 set port 3 to promiscuous mode ok

Checking link status........................................done Port 0 Link Up - speed 1000 Mbps - full-duplex Port 1 Link Up - speed 1000 Mbps - full-duplex Port 2 Link Up - speed 1000 Mbps - full-duplex Port 3 Link Up - speed 1000 Mbps - full-duplex link_elf_lookup_symbol: missing symbol hash table link_elf_lookup_symbol: missing symbol hash table Timecounters tick every 10.000 msec Timecounter "ff_clock" frequency 100 Hz quality 1 f-stack-0: Ethernet address: b4:96:91:28:c4:fc f-stack-1: Ethernet address: b4:96:91:28:c4:fd ff_veth_set_gateway failed f-stack-2: Ethernet address: b4:96:91:28:c4:fe ff_veth_set_gateway failed f-stack-3: Ethernet address: b4:96:91:28:c4:ff ff_veth_set_gateway failed sockfd:1024

whl739 commented 6 years ago

This is a known issue. ff_veth_set_gateway will only create a default route, so when port 0 has created the default route, the other ports won't success. You can just use tools/route to configure other ports' routing table.