Skip to content

Commit eadc7c9

Browse files
Merge pull request #649 from nik-netlox/main
SCTP MH CICD
2 parents d4a9c38 + bf13a57 commit eadc7c9

File tree

9 files changed

+350
-23
lines changed

9 files changed

+350
-23
lines changed

.github/workflows/sctpmh-sanity.yml

+55
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
name: SCTP-MH-LB-Sanity-CI
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
pull_request:
8+
branches: [ "main" ]
9+
workflow_dispatch:
10+
inputs:
11+
logLevel:
12+
description: 'Log level'
13+
required: true
14+
default: 'warning'
15+
tags:
16+
description: 'SCTP MH LB Sanity'
17+
18+
jobs:
19+
build:
20+
name: sctpmh-lb-sanity
21+
runs-on: ubuntu-20.04
22+
steps:
23+
- uses: actions/checkout@v2
24+
with:
25+
submodules: recursive
26+
- uses: actions/setup-python@v2
27+
- uses: actions/setup-go@v3
28+
with:
29+
go-version: '>=1.18.0'
30+
- run: sudo apt-get update
31+
- run: sudo apt-get -y install clang-10 llvm libelf-dev gcc-multilib libpcap-dev linux-tools-$(uname -r) elfutils dwarves git libbsd-dev bridge-utils unzip build-essential bison flex iperf iproute2 nodejs socat ethtool curl
32+
- run: |
33+
git clone --recurse-submodules https://github.com/loxilb-io/iproute2 iproute2-main
34+
cd iproute2-main/libbpf/src/
35+
sudo make install
36+
mkdir build
37+
DESTDIR=build OBJDIR=build make install
38+
cd -
39+
cd iproute2-main/
40+
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:`pwd`/libbpf/src/ && LIBBPF_FORCE=on LIBBPF_DIR=`pwd`/libbpf/src/build ./configure && make && sudo cp -f tc/tc /usr/local/sbin/ntc && cd -
41+
- run: loxilb-ebpf/utils/mkllb_bpffs.sh
42+
- run: sudo -E env "PATH=$PATH" make
43+
- run: sudo -E env "PATH=$PATH" make test
44+
- run: docker pull ghcr.io/loxilb-io/loxilb:latest
45+
- run: docker run -u root --cap-add SYS_ADMIN --restart unless-stopped --privileged -dit -v /dev/log:/dev/log --name loxilb ghcr.io/loxilb-io/loxilb:latest
46+
- run: pwd && ls && sudo -E env "PATH=$PATH" make docker-cp
47+
- run: docker exec -dit loxilb mkllb_bpffs
48+
- run: id=`docker ps -f name=loxilb | cut -d " " -f 1 | grep -iv "CONTAINER"` && docker commit $id ghcr.io/loxilb-io/loxilb:latest
49+
- run: docker stop loxilb && docker rm loxilb
50+
- run: |
51+
cd cicd/sctpmh/
52+
./config.sh
53+
./validation.sh
54+
./rmconfig.sh
55+
cd -

cicd/sctpmh/check_ha.sh

+65
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
#!/bin/bash
2+
3+
master="llb1"
4+
backup="llb2"
5+
6+
function check_ha() {
7+
while : ; do
8+
status1=$($hexec llb1 curl -sX 'GET' 'http://0.0.0.0:11111/netlox/v1/config/cistate/all' -H 'accept: application/json' | jq -r '.Attr[0].state')
9+
status2=$($hexec llb2 curl -sX 'GET' 'http://0.0.0.0:11111/netlox/v1/config/cistate/all' -H 'accept: application/json' | jq -r '.Attr[0].state')
10+
count=0
11+
if [[ $status1 == "MASTER" && $status2 == "BACKUP" ]];
12+
then
13+
master="llb1"
14+
backup="llb2"
15+
break
16+
elif [[ $status2 == "MASTER" && $status1 == "BACKUP" ]];
17+
then
18+
master="llb2"
19+
backup="llb1"
20+
break
21+
else
22+
count=$(( $count + 1 ))
23+
if [[ $count -ge 20 ]]; then
24+
echo "KA llb1-$status1, llb2-$status2 [NOK]" >&2
25+
exit 1;
26+
fi
27+
sleep 5
28+
fi
29+
done
30+
}
31+
32+
function checkSync() {
33+
count=1
34+
sync=0
35+
while [[ $count -le 5 ]] ; do
36+
echo -e "\nStatus at MASTER:$master\n" >&2
37+
$dexec $master loxicmd get ct | grep est >&2
38+
39+
echo -e "\nStatus at BACKUP:$backup\n" >&2
40+
$dexec $backup loxicmd get ct | grep est >&2
41+
42+
nres1=$($hexec $master curl -sX 'GET' 'http://0.0.0.0:11111/netlox/v1/config/conntrack/all' -H 'accept: application/json' | grep -ow "\"conntrackState\":\"est\"" | wc -l)
43+
nres2=$($hexec $backup curl -sX 'GET' 'http://0.0.0.0:11111/netlox/v1/config/conntrack/all' -H 'accept: application/json' | grep -ow "\"conntrackState\":\"est\"" | wc -l)
44+
45+
if [[ $nres1 == 0 ]]; then
46+
echo -e "No active connections in Master:$master. Exiting!" >&2
47+
return 0
48+
fi
49+
50+
if [[ $nres1 == $nres2 && $nres1 != 0 ]]; then
51+
echo -e "\nConnections sync successful!!!\n" >&2
52+
sync=1
53+
break;
54+
fi
55+
echo -e "\nConnections sync pending.. Let's wait a little more..\n" >&2
56+
count=$(( $count + 1 ))
57+
sleep 2
58+
done
59+
60+
if [[ $sync == 0 ]]; then
61+
echo -e "\nConnection Sync failed\n" >&2
62+
return 0
63+
fi
64+
echo "$sync"
65+
}

cicd/sctpmh/config.sh

+33-7
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ echo "#########################################"
66
echo "Spawning all hosts"
77
echo "#########################################"
88

9-
spawn_docker_host --dock-type loxilb --dock-name llb1
9+
spawn_docker_host --dock-type loxilb --dock-name llb1 --with-ka in
10+
spawn_docker_host --dock-type loxilb --dock-name llb2 --with-ka in
1011
spawn_docker_host --dock-type host --dock-name ep1
1112
spawn_docker_host --dock-type host --dock-name r1
1213
spawn_docker_host --dock-type host --dock-name r2
@@ -25,17 +26,21 @@ connect_docker_hosts user r2
2526
connect_docker_hosts r1 sw1
2627
connect_docker_hosts r2 sw1
2728
connect_docker_hosts sw1 llb1
29+
connect_docker_hosts sw1 llb2
2830
connect_docker_hosts llb1 sw2
31+
connect_docker_hosts llb2 sw2
2932
connect_docker_hosts sw2 r3
3033
connect_docker_hosts sw2 r4
3134
connect_docker_hosts r3 ep1
3235
connect_docker_hosts r4 ep1
3336

3437
create_docker_host_cnbridge --host1 sw1 --host2 llb1
38+
create_docker_host_cnbridge --host1 sw1 --host2 llb2
3539
create_docker_host_cnbridge --host1 sw1 --host2 r1
3640
create_docker_host_cnbridge --host1 sw1 --host2 r2
3741

3842
create_docker_host_cnbridge --host1 sw2 --host2 llb1
43+
create_docker_host_cnbridge --host1 sw2 --host2 llb2
3944
create_docker_host_cnbridge --host1 sw2 --host2 r3
4045
create_docker_host_cnbridge --host1 sw2 --host2 r4
4146

@@ -46,19 +51,23 @@ config_docker_host --host1 r1 --host2 user --ptype phy --addr 1.1.1.254/24
4651
config_docker_host --host1 r2 --host2 user --ptype phy --addr 2.2.2.254/24
4752

4853
create_docker_host_vlan --host1 llb1 --host2 sw1 --id 11 --ptype untagged
54+
create_docker_host_vlan --host1 llb2 --host2 sw1 --id 11 --ptype untagged
4955
create_docker_host_vlan --host1 r1 --host2 sw1 --id 11 --ptype untagged
5056
create_docker_host_vlan --host1 r2 --host2 sw1 --id 11 --ptype untagged
51-
config_docker_host --host1 r1 --host2 sw1 --ptype vlan --id 11 --addr 11.11.11.253/24 --gw 11.11.11.1
52-
config_docker_host --host1 r2 --host2 sw1 --ptype vlan --id 11 --addr 11.11.11.254/24 --gw 11.11.11.1
57+
config_docker_host --host1 r1 --host2 sw1 --ptype vlan --id 11 --addr 11.11.11.253/24 --gw 11.11.11.11
58+
config_docker_host --host1 r2 --host2 sw1 --ptype vlan --id 11 --addr 11.11.11.254/24 --gw 11.11.11.11
5359
config_docker_host --host1 llb1 --host2 sw1 --ptype vlan --id 11 --addr 11.11.11.1/24
60+
config_docker_host --host1 llb2 --host2 sw1 --ptype vlan --id 11 --addr 11.11.11.2/24
5461

5562
create_docker_host_vlan --host1 llb1 --host2 sw2 --id 10 --ptype untagged
63+
create_docker_host_vlan --host1 llb2 --host2 sw2 --id 10 --ptype untagged
5664
create_docker_host_vlan --host1 r3 --host2 sw2 --id 10 --ptype untagged
5765
create_docker_host_vlan --host1 r4 --host2 sw2 --id 10 --ptype untagged
5866

67+
config_docker_host --host1 r3 --host2 sw2 --ptype vlan --id 10 --addr 10.10.10.253/24 --gw 10.10.10.10
68+
config_docker_host --host1 r4 --host2 sw2 --ptype vlan --id 10 --addr 10.10.10.254/24 --gw 10.10.10.10
5969
config_docker_host --host1 llb1 --host2 sw2 --ptype vlan --id 10 --addr 10.10.10.1/24
60-
config_docker_host --host1 r3 --host2 sw2 --ptype vlan --id 10 --addr 10.10.10.253/24 --gw 10.10.10.1
61-
config_docker_host --host1 r4 --host2 sw2 --ptype vlan --id 10 --addr 10.10.10.254/24 --gw 10.10.10.1
70+
config_docker_host --host1 llb2 --host2 sw2 --ptype vlan --id 10 --addr 10.10.10.2/24
6271

6372
config_docker_host --host1 ep1 --host2 r3 --ptype phy --addr 31.31.31.1/24 --gw 31.31.31.254
6473
config_docker_host --host1 ep1 --host2 r4 --ptype phy --addr 32.32.32.1/24
@@ -81,16 +90,33 @@ $hexec ep1 ip route add 135.135.135.1/32 via 32.32.32.254
8190

8291
$hexec llb1 ip route add 1.1.1.0/24 via 11.11.11.253
8392
$hexec llb1 ip route add 2.2.2.0/24 via 11.11.11.254
93+
$hexec llb2 ip route add 1.1.1.0/24 via 11.11.11.253
94+
$hexec llb2 ip route add 2.2.2.0/24 via 11.11.11.254
8495

8596
$hexec llb1 ip route add 31.31.31.0/24 via 10.10.10.253
8697
$hexec llb1 ip route add 32.32.32.0/24 via 10.10.10.254
98+
$hexec llb2 ip route add 31.31.31.0/24 via 10.10.10.253
99+
$hexec llb2 ip route add 32.32.32.0/24 via 10.10.10.254
87100

88101
sleep 20
89102
##Create LB rule user->ep1
90-
create_lb_rule llb1 123.123.123.1 --secips=124.124.124.1,125.125.125.1 --sctp=2020:9999 --endpoints=31.31.31.1:1 --mode=fullnat
103+
create_lb_rule llb1 123.123.123.1 --name=sctpmh1 --secips=124.124.124.1,125.125.125.1 --sctp=2020:9999 --endpoints=31.31.31.1:1 --mode=fullnat
104+
create_lb_rule llb2 123.123.123.1 --name=sctpmh1 --secips=124.124.124.1,125.125.125.1 --sctp=2020:9999 --endpoints=31.31.31.1:1 --mode=fullnat
91105

92106
##Create LB rule ep1->user
93-
create_lb_rule llb1 133.133.133.1 --secips=134.134.134.1,135.135.135.1 --sctp=2020:9999 --endpoints=1.1.1.1:1 --mode=fullnat
107+
create_lb_rule llb1 133.133.133.1 --name=sctpmh2 --secips=134.134.134.1,135.135.135.1 --sctp=2020:9999 --endpoints=1.1.1.1:1 --mode=fullnat
108+
create_lb_rule llb2 133.133.133.1 --name=sctpmh2 --secips=134.134.134.1,135.135.135.1 --sctp=2020:9999 --endpoints=1.1.1.1:1 --mode=fullnat
94109

95110
$dexec llb1 loxicmd create ep 1.1.1.1 --name=1.1.1.1_sctp_9999 --probetype=none
96111
$dexec llb1 loxicmd create ep 31.31.31.1 --name=31.31.31.1_sctp_9999 --probetype=none
112+
$dexec llb2 loxicmd create ep 1.1.1.1 --name=1.1.1.1_sctp_9999 --probetype=none
113+
$dexec llb2 loxicmd create ep 31.31.31.1 --name=31.31.31.1_sctp_9999 --probetype=none
114+
115+
116+
create_lb_rule llb1 11.11.11.11 --tcp=80:8080 --endpoints=31.31.31.1:1
117+
create_lb_rule llb2 11.11.11.11 --tcp=80:8080 --endpoints=31.31.31.1:1
118+
create_lb_rule llb1 10.10.10.10 --tcp=80:8080 --endpoints=31.31.31.1:1
119+
create_lb_rule llb2 10.10.10.10 --tcp=80:8080 --endpoints=31.31.31.1:1
120+
121+
$dexec llb1 loxicmd save --all
122+
$dexec llb2 loxicmd save --all

cicd/sctpmh/rmconfig.sh

+3
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,16 @@ disconnect_docker_hosts user r2
1111
disconnect_docker_hosts r1 sw1
1212
disconnect_docker_hosts r2 sw1
1313
disconnect_docker_hosts sw1 llb1
14+
disconnect_docker_hosts sw1 llb2
1415
disconnect_docker_hosts llb1 sw2
16+
disconnect_docker_hosts llb2 sw2
1517
disconnect_docker_hosts sw2 r3
1618
disconnect_docker_hosts sw2 r4
1719
disconnect_docker_hosts r3 ep1
1820
disconnect_docker_hosts r4 ep1
1921

2022
delete_docker_host llb1
23+
delete_docker_host llb2
2124
delete_docker_host user
2225
delete_docker_host r1
2326
delete_docker_host r2

cicd/sctpmh/validation.sh

+3
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,7 @@ echo -e "***********************************************************************
1111
echo -e "\n\n\nSCTP Multihoming - Test case #4"
1212
echo -e "*********************************************************************************"
1313
./validation4.sh
14+
echo -e "\n\n\nSCTP Multihoming - Test case #5"
15+
echo -e "*********************************************************************************"
16+
./validation5.sh
1417
echo -e "\n\n\n*********************************************************************************"

cicd/sctpmh/validation2.sh

+16-5
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
11
#!/bin/bash
22
source ../common.sh
3-
3+
source check_ha.sh
44
echo -e "sctpmh: SCTP Multihoming - Multipath Test, Client and LB Multihomed, EP is uni-homed\n"
55
extIP="123.123.123.1"
66
port=2020
77

8+
check_ha
9+
810
echo "SCTP Multihoming service sctp-lb(Multipath traffic) -> $extIP:$port"
911
echo -e "------------------------------------------------------------------------------------\n"
1012

13+
echo -e "\nHA state Master:$master BACKUP-$backup\n"
14+
1115
$hexec ep1 sctp_test -H 0.0.0.0 -P 9999 -l > ep1.out &
1216
sleep 2
1317

@@ -28,11 +32,11 @@ for((i=0;i<100;i++)) do
2832
echo "sctp_test done."
2933
break;
3034
fi
31-
$dexec llb1 loxicmd get ct
35+
$dexec $master loxicmd get ct --servName=sctpmh1
3236
echo -e "\n"
33-
p1c_new=$(sudo docker exec -i llb1 loxicmd get ct | grep "123.123.123.1 | 1.1.1.1" | xargs | cut -d '|' -f 10)
34-
p2c_new=$(sudo docker exec -i llb1 loxicmd get ct | grep "124.124.124.1 | 2.2.2.1" | xargs | cut -d '|' -f 10)
35-
p3c_new=$(sudo docker exec -i llb1 loxicmd get ct | grep "125.125.125.1 | 1.1.1.1" | xargs | cut -d '|' -f 10)
37+
p1c_new=$(sudo docker exec -i $master loxicmd get ct --servName=sctpmh1 | grep "123.123.123.1 | 1.1.1.1" | xargs | cut -d '|' -f 10)
38+
p2c_new=$(sudo docker exec -i $master loxicmd get ct --servName=sctpmh1 | grep "124.124.124.1 | 2.2.2.1" | xargs | cut -d '|' -f 10)
39+
p3c_new=$(sudo docker exec -i $master loxicmd get ct --servName=sctpmh1 | grep "125.125.125.1 | 1.1.1.1" | xargs | cut -d '|' -f 10)
3640

3741
echo "Counters: $p1c_new $p2c_new $p3c_new"
3842

@@ -78,6 +82,8 @@ else
7882
sudo ip netns exec r2 ip route
7983
echo -e "\nllb1"
8084
sudo ip netns exec llb1 ip route
85+
echo -e "\nllb2"
86+
sudo ip netns exec llb2 ip route
8187
echo -e "\nr3"
8288
sudo ip netns exec r3 ip route
8389
echo -e "\nr4"
@@ -88,6 +94,11 @@ else
8894
$dexec llb1 loxicmd get lb
8995
echo "llb1 ep-info"
9096
$dexec llb1 loxicmd get ep
97+
echo "-----------------------------"
98+
echo -e "\nllb2 lb-info"
99+
$dexec llb2 loxicmd get lb
100+
echo "llb2 ep-info"
101+
$dexec llb2 loxicmd get ep
91102
exit 1
92103
fi
93104
echo -e "------------------------------------------------------------------------------------\n\n\n"

cicd/sctpmh/validation3.sh

+17-5
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
11
#!/bin/bash
22
source ../common.sh
3+
source check_ha.sh
34

45
echo -e "sctpmh: SCTP Multihoming - Multipath Failover Test. Client and LB Multihomed, EP is uni-homed\n"
56
extIP="123.123.123.1"
67
port=2020
78

9+
check_ha
10+
811
echo "SCTP Multihoming service sctp-lb(Multipath traffic) -> $extIP:$port"
912
echo -e "------------------------------------------------------------------------------------\n"
1013

14+
echo -e "\nHA state Master:$master BACKUP-$backup\n"
15+
1116
echo -e "\nTraffic Flow: User -> LB -> EP "
1217

1318
$hexec ep1 sctp_test -H 0.0.0.0 -P 9999 -l > ep1.out &
@@ -31,11 +36,11 @@ for((i=0;i<200;i++)) do
3136
echo "sctp_test done."
3237
break;
3338
fi
34-
$dexec llb1 loxicmd get ct
39+
$dexec $master loxicmd get ct --servName=sctpmh1
3540
echo -e "\n"
36-
p1c_new=$(sudo docker exec -i llb1 loxicmd get ct | grep "123.123.123.1 | 1.1.1.1" | xargs | cut -d '|' -f 10)
37-
p2c_new=$(sudo docker exec -i llb1 loxicmd get ct | grep "124.124.124.1 | 2.2.2.1" | xargs | cut -d '|' -f 10)
38-
p3c_new=$(sudo docker exec -i llb1 loxicmd get ct | grep "125.125.125.1 | 1.1.1.1" | xargs | cut -d '|' -f 10)
41+
p1c_new=$(sudo docker exec -i $master loxicmd get ct --servName=sctpmh1 | grep "123.123.123.1 | 1.1.1.1" | xargs | cut -d '|' -f 10)
42+
p2c_new=$(sudo docker exec -i $master loxicmd get ct --servName=sctpmh1 | grep "124.124.124.1 | 2.2.2.1" | xargs | cut -d '|' -f 10)
43+
p3c_new=$(sudo docker exec -i $master loxicmd get ct --servName=sctpmh1 | grep "125.125.125.1 | 1.1.1.1" | xargs | cut -d '|' -f 10)
3944

4045
echo "Counters: $p1c_new $p2c_new $p3c_new"
4146

@@ -49,7 +54,7 @@ for((i=0;i<200;i++)) do
4954
echo "Turning off this path from User->LB"
5055
$hexec user ip link set euserr1 down;
5156
down=1
52-
p1c_new=$(sudo docker exec -i llb1 loxicmd get ct | grep "123.123.123.1 | 1.1.1.1" | xargs | cut -d '|' -f 10)
57+
p1c_new=$(sudo docker exec -i $master loxicmd get ct --servName=sctpmh1 | grep "123.123.123.1 | 1.1.1.1" | xargs | cut -d '|' -f 10)
5358
else
5459
if [[ $down == 1 ]]; then
5560
p1dok=1
@@ -98,6 +103,8 @@ else
98103
sudo ip netns exec r2 ip route
99104
echo -e "\nllb1"
100105
sudo ip netns exec llb1 ip route
106+
echo -e "\nllb2"
107+
sudo ip netns exec llb2 ip route
101108
echo -e "\nr3"
102109
sudo ip netns exec r3 ip route
103110
echo -e "\nr4"
@@ -108,6 +115,11 @@ else
108115
$dexec llb1 loxicmd get lb
109116
echo "llb1 ep-info"
110117
$dexec llb1 loxicmd get ep
118+
echo -e "\nllb2 lb-info"
119+
$dexec llb2 loxicmd get lb
120+
echo "llb2 ep-info"
121+
$dexec llb2 loxicmd get ep
122+
echo "-----------------------------"
111123
exit 1
112124
fi
113125
echo -e "------------------------------------------------------------------------------------\n\n\n"

0 commit comments

Comments
 (0)