platinasystems / go

Other
9 stars 68 forks source link

goes missed a namespace creation in Linux #114

Open fszyang opened 6 years ago

fszyang commented 6 years ago

goes can potentially miss a namespace creation event in Linux. The following bash script can expose this issue. Usually in less than 50 run, the script will fail.

while true; do
   echo "========loop $loop=========="
   echo "restart goes"
   ip netns del net1
   goes restart
   sleep 5

echo "bring up interfaces in default namespace"
for i in $(seq 1 2 31); do
    for j in $(seq 1 2 3); do
        ip link set dev eth-$i-$j up
        ip addr add 10.1.$i.${j}0/31 brd + dev eth-$i-$j
    done
done

echo "create net1  namespace"
ip netns add net1

echo "bring up interfaces in net1 namespace"
for i in $(seq 2 2 32); do
    for j in $(seq 1 2 3); do
        ip link set eth-$i-$j netns net1
    done
done

sleep 3

for i in $(seq 2 2 32); do
    for j in $(seq 1 2 3); do
        ip netns exec net1 ip link set dev eth-$i-$j up
        ip netns exec net1 ip addr add 10.1.$(($i-1)).${j}1/31 brd + dev eth-$i-$j
    done
done

sleep 2

goes vnet show ip fib | grep net1
if [ $? == 0 ]; then
    echo "namespace passed"
else
    echo "namespace failed"
    exit 1
fi
fszyang commented 6 years ago

This is in tuntap mode

jignesh045 commented 6 years ago

Issue verification status: Open (still exists)

Issue verified in the following SRIOV build:

root@invader42:~# goes version
github.com/platinasystems/go: v0.41-244-g49d9e6da
github.com/platinasystems/fe1: v0.2-520-g85494c1
github.com/platinasystems/firmware-fe1a: v0.2
root@invader42:~#
root@invader42:~# goes hget platina-mk1 packages | grep version:
    version: 49d9e6dae2471c7d8f20f88997cd3b4578dee36a
    version: 85494c17b94de997f1d2dac7a0cf21a4e76343f0
    version: 60f39141fbbf78ddb2260dba74c68f2789374f18
root@invader42:~#
root@invader42:~# dpkg --list | grep kernel
ii  kmod                           18-3                             amd64        tools for managing Linux kernel modules
ii  libdrm2:amd64                  2.4.58-2                         amd64        Userspace interface to kernel DRM services -- runtime
ii  linux-image-4.13.0-platina-mk1 4.13-117-g00814e4e1a1e           amd64        Linux kernel, version 4.13.0-platina-mk1
ii  rsyslog                        8.4.2-1+deb8u2                   amd64        reliable system and kernel logging daemon
root@invader42:~#

Steps:

  1. Executed below script two times. Output of the command is attached herewith.
    
    #!/bin/bash
    loop=1

while true; do echo "========loop $loop==========" echo "restart goes" ip netns del net1 goes restart sleep 5

echo "bring up interfaces in default namespace" for i in $(seq 1 2 31); do for j in $(seq 1 2 3); do ip link add eth-$i-$j type platina-mk1 ip link set dev eth-$i-$j up ethtool -s eth-$i-$j speed 25000 autoneg off ip addr add 10.1.$i.${j}0/31 brd + dev eth-$i-$j done done

echo "create net1 namespace" ip netns add net1

echo "bring up interfaces in net1 namespace" for i in $(seq 2 2 32); do for j in $(seq 1 2 3); do ip link set eth-$i-$j netns net1 done done

sleep 3

for i in $(seq 2 2 32); do for j in $(seq 1 2 3); do ip netns exec net1 ip link set dev eth-$i-$j up ip netns exec net1 ip addr add 10.1.$(($i-1)).${j}1/31 brd + dev eth-$i-$j done done

sleep 2

echo "Executing command: goes vnet show ip fib | grep net1"

goes vnet show ip fib | grep net1 if [ $? == 0 ]; then echo "namespace passed" else echo "namespace failed" exit 1 fi ((loop++)) sleep 2

done exit 0


Attachment: 
[issue114.txt](https://github.com/platinasystems/go/files/2223257/issue114.txt)