Skip to content

Commit 09d176c

Browse files
Merge pull request #151 from dj-nlx/main
gh-28 Initial support for NAT64/46
2 parents d243dab + 3253c76 commit 09d176c

33 files changed

+358
-197
lines changed
+64
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
name: Adv-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: 'Advanced LB Sanity'
17+
18+
jobs:
19+
build:
20+
name: advanced-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.17.0'
30+
- run: sudo apt-get update
31+
- run: sudo apt -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
32+
- run: |
33+
git clone https://github.com/loxilb-io/iproute2 iproute2-main
34+
cd iproute2-main/libbpf/src/
35+
sudo make install
36+
mkdir build
37+
DESTDIR=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: id=`docker ps -f name=loxilb | cut -d " " -f 1 | grep -iv "CONTAINER"` && docker commit $id ghcr.io/loxilb-io/loxilb:latest
48+
- run: docker stop loxilb && docker rm loxilb
49+
- run: |
50+
cd cicd/onearml2/
51+
./config.sh
52+
./validation.sh
53+
./rmconfig.sh
54+
cd -
55+
cd cicd/lbtimeout/
56+
./config.sh
57+
./validation.sh
58+
./rmconfig.sh
59+
cd -
60+
cd cicd/sctpfullnat/
61+
./config.sh
62+
./validation.sh
63+
./rmconfig.sh
64+
cd -

.github/workflows/advanced-sanity.yml

-15
Original file line numberDiff line numberDiff line change
@@ -87,18 +87,3 @@ jobs:
8787
./validation.sh
8888
./rmconfig.sh
8989
cd -
90-
cd cicd/scenario11/
91-
./config.sh
92-
./validation.sh
93-
./rmconfig.sh
94-
cd -
95-
cd cicd/scenario12/
96-
./config.sh
97-
./validation.sh
98-
./rmconfig.sh
99-
cd -
100-
cd cicd/sctp-fullnat/
101-
./config.sh
102-
./validation.sh
103-
./rmconfig.sh
104-
cd -

api/loxinlp/nlp.go

+17-15
Original file line numberDiff line numberDiff line change
@@ -785,7 +785,7 @@ func AddAddr(addr nlp.Addr, link nlp.Link) int {
785785
name := attrs.Name
786786
ipStr := (addr.IPNet).String()
787787

788-
ret, err := hooks.NetIpv4AddrAdd(&cmn.Ipv4AddrMod{Dev: name, IP: ipStr})
788+
ret, err := hooks.NetAddrAdd(&cmn.IpAddrMod{Dev: name, IP: ipStr})
789789
if err != nil {
790790
tk.LogIt(tk.LogError, "[NLP] IPv4 Address %v Port %v failed %v\n", ipStr, name, err)
791791
ret = -1
@@ -861,8 +861,9 @@ func AddNeigh(neigh nlp.Neigh, link nlp.Link) int {
861861
}
862862
copy(mac[:], neigh.HardwareAddr[:6])
863863

864-
if neigh.Family == unix.AF_INET {
865-
ret, err = hooks.NetNeighv4Add(&cmn.Neighv4Mod{IP: neigh.IP, LinkIndex: neigh.LinkIndex,
864+
if neigh.Family == unix.AF_INET ||
865+
neigh.Family == unix.AF_INET6 {
866+
ret, err = hooks.NetNeighAdd(&cmn.NeighMod{IP: neigh.IP, LinkIndex: neigh.LinkIndex,
866867
State: neigh.State,
867868
HardwareAddr: neigh.HardwareAddr})
868869
if err != nil {
@@ -944,9 +945,10 @@ func DelNeigh(neigh nlp.Neigh, link nlp.Link) int {
944945
attrs := link.Attrs()
945946
name := attrs.Name
946947

947-
if neigh.Family == unix.AF_INET {
948+
if neigh.Family == unix.AF_INET ||
949+
neigh.Family == unix.AF_INET6 {
948950

949-
ret, err = hooks.NetNeighv4Del(&cmn.Neighv4Mod{IP: neigh.IP})
951+
ret, err = hooks.NetNeighDel(&cmn.NeighMod{IP: neigh.IP})
950952
if err != nil {
951953
tk.LogIt(tk.LogError, "[NLP] NH %v %v del failed\n", neigh.IP.String(), name)
952954
ret = -1
@@ -1023,7 +1025,7 @@ func AddRoute(route nlp.Route) int {
10231025
} else {
10241026
ipNet = *route.Dst
10251027
}
1026-
ret, err := hooks.NetRoutev4Add(&cmn.Routev4Mod{Protocol: int(route.Protocol), Flags: route.Flags,
1028+
ret, err := hooks.NetRouteAdd(&cmn.RouteMod{Protocol: int(route.Protocol), Flags: route.Flags,
10271029
Gw: route.Gw, LinkIndex: route.LinkIndex, Dst: ipNet})
10281030
if err != nil {
10291031
if route.Gw != nil {
@@ -1087,7 +1089,7 @@ func DelRoute(route nlp.Route) int {
10871089
} else {
10881090
ipNet = *route.Dst
10891091
}
1090-
ret, err := hooks.NetRoutev4Del(&cmn.Routev4Mod{Dst: ipNet})
1092+
ret, err := hooks.NetRouteDel(&cmn.RouteMod{Dst: ipNet})
10911093
if err != nil {
10921094
if route.Gw != nil {
10931095
tk.LogIt(tk.LogError, "[NLP] RT %s via %s delete failed-%s\n", ipNet.String(),
@@ -1123,21 +1125,21 @@ func AUWorkSingle(m nlp.AddrUpdate) int {
11231125
attrs := link.Attrs()
11241126
name := attrs.Name
11251127
if m.NewAddr {
1126-
_, err := hooks.NetIpv4AddrAdd(&cmn.Ipv4AddrMod{Dev: name, IP: m.LinkAddress.String()})
1128+
_, err := hooks.NetAddrAdd(&cmn.IpAddrMod{Dev: name, IP: m.LinkAddress.String()})
11271129
if err != nil {
1128-
tk.LogIt(tk.LogInfo, "[NLP] IPv4 Address %v Port %v add failed\n", m.LinkAddress.String(), name)
1130+
tk.LogIt(tk.LogInfo, "[NLP] Address %v Port %v add failed\n", m.LinkAddress.String(), name)
11291131
fmt.Println(err)
11301132
} else {
1131-
tk.LogIt(tk.LogInfo, "[NLP] IPv4 Address %v Port %v added\n", m.LinkAddress.String(), name)
1133+
tk.LogIt(tk.LogInfo, "[NLP] Address %v Port %v added\n", m.LinkAddress.String(), name)
11321134
}
11331135

11341136
} else {
1135-
_, err := hooks.NetIpv4AddrDel(&cmn.Ipv4AddrMod{Dev: name, IP: m.LinkAddress.String()})
1137+
_, err := hooks.NetAddrDel(&cmn.IpAddrMod{Dev: name, IP: m.LinkAddress.String()})
11361138
if err != nil {
1137-
tk.LogIt(tk.LogInfo, "[NLP] IPv4 Address %v Port %v delete failed\n", m.LinkAddress.String(), name)
1139+
tk.LogIt(tk.LogInfo, "[NLP] Address %v Port %v delete failed\n", m.LinkAddress.String(), name)
11381140
fmt.Println(err)
11391141
} else {
1140-
tk.LogIt(tk.LogInfo, "[NLP] IPv4 Address %v Port %v deleted\n", m.LinkAddress.String(), name)
1142+
tk.LogIt(tk.LogInfo, "[NLP] Address %v Port %v deleted\n", m.LinkAddress.String(), name)
11411143
}
11421144
}
11431145

@@ -1287,7 +1289,7 @@ func NlpGet(ch chan bool) int {
12871289
}
12881290
}
12891291

1290-
addrs, err := nlp.AddrList(link, nlp.FAMILY_V4)
1292+
addrs, err := nlp.AddrList(link, nlp.FAMILY_ALL)
12911293
if err != nil {
12921294
tk.LogIt(tk.LogError, "[NLP] Error getting address list %v for intf %s\n",
12931295
err, link.Attrs().Name)
@@ -1316,7 +1318,7 @@ func NlpGet(ch chan bool) int {
13161318
}
13171319

13181320
/* Get Routes */
1319-
routes, err := nlp.RouteList(link, nlp.FAMILY_V4)
1321+
routes, err := nlp.RouteList(link, nlp.FAMILY_ALL)
13201322
if err != nil {
13211323
tk.LogIt(tk.LogError, "[NLP] Error getting route list %v\n", err)
13221324
}

api/restapi/handler/ipv4address.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ func ConfigDeleteIPv4Address(params operations.DeleteConfigIpv4addressIPAddressM
4646

4747
func ConfigGetIPv4Address(params operations.GetConfigIpv4addressAllParams) middleware.Responder {
4848
tk.LogIt(tk.LogDebug, "[API] IPv4 address %s API called. url : %s\n", params.HTTPRequest.Method, params.HTTPRequest.URL)
49-
res, _ := ApiHooks.NetIpv4AddrGet()
49+
res, _ := ApiHooks.NetAddrGet()
5050
var result []*models.IPV4AddressGetEntry
5151
result = make([]*models.IPV4AddressGetEntry, 0)
5252
for _, ipaddrs := range res {

api/restapi/handler/neighbor.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ func ConfigDeleteNeighbor(params operations.DeleteConfigNeighborIPAddressDevIfNa
4444

4545
func ConfigGetNeighbor(params operations.GetConfigNeighborAllParams) middleware.Responder {
4646
tk.LogIt(tk.LogDebug, "[API] IPv4 Neighbor %s API called. url : %s\n", params.HTTPRequest.Method, params.HTTPRequest.URL)
47-
res, _ := ApiHooks.NetNeighv4Get()
47+
res, _ := ApiHooks.NetNeighGet()
4848
var result []*models.NeighborEntry
4949
result = make([]*models.NeighborEntry, 0)
5050
for _, neighbor := range res {

api/restapi/handler/route.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ func ConfigDeleteRoute(params operations.DeleteConfigRouteDestinationIPNetIPAddr
4949

5050
func ConfigGetRoute(params operations.GetConfigRouteAllParams) middleware.Responder {
5151
tk.LogIt(tk.LogDebug, "[API] Route %s API called. url : %s\n", params.HTTPRequest.Method, params.HTTPRequest.URL)
52-
res, _ := ApiHooks.NetRoutev4Get()
52+
res, _ := ApiHooks.NetRouteGet()
5353
var result []*models.RouteGetEntry
5454
result = make([]*models.RouteGetEntry, 0)
5555
for _, route := range res {

cicd/README

-4
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,3 @@ Scenario8 - TCP Load Balancing after VxLAN Decap
1717
Scenario9 - 3GPP GTP-ULCL SCTP LB Scenario
1818

1919
Scenario10 - SCTP Load Balancing after VxLAN Decap
20-
21-
Scenario11 - One-ARM Mode TCP Load Balancing
22-
23-
Scenario12 - Test reset establised TCP LB connection after inactivity
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

cicd/scenario12/validation.sh renamed to cicd/lbtimeout/validation.sh

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/bin/bash
22
source ../common.sh
3-
echo SCENARIO-12
3+
echo LB-TIMEOUT
44
$hexec l3ep1 node ./server1.js &
55
$hexec l3ep2 node ./server2.js &
66
$hexec l3ep3 node ./server3.js &
@@ -25,7 +25,7 @@ do
2525
if [[ $waitCount == 10 ]];
2626
then
2727
echo "All Servers are not UP"
28-
echo SCENARIO-12[FAILED]
28+
echo LB-TIMEOUT[FAILED]
2929
exit 1
3030
fi
3131
fi
@@ -56,10 +56,10 @@ sleep 100
5656
code=0
5757
if pgrep -x "$SERVICE" >/dev/null
5858
then
59-
echo SCENARIO-12 [FAILED]
59+
echo LB-TIMEOUT [FAILED]
6060
code=1
6161
else
62-
echo SCENARIO-12 [OK]
62+
echo LB-TIMEOUT [OK]
6363
code=0
6464
fi
6565
sudo killall -9 iperf >> /dev/null 2>&1
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

cicd/scenario11/validation.sh renamed to cicd/onearml2/validation.sh

+5-6
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/bin/bash
22
source ../common.sh
3-
echo SCENARIO-11
3+
echo ONEARM-L2
44
$hexec l2ep1 node ./server1.js &
55
$hexec l2ep2 node ./server2.js &
66
$hexec l2ep3 node ./server3.js &
@@ -25,7 +25,7 @@ do
2525
if [[ $waitCount == 10 ]];
2626
then
2727
echo "All Servers are not UP"
28-
echo SCENARIO-11 [FAILED]
28+
echo ONEARM-L2 [FAILED]
2929
exit 1
3030
fi
3131
fi
@@ -47,11 +47,10 @@ done
4747
done
4848
if [[ $code == 0 ]]
4949
then
50+
echo ONEARM-L2 [OK]
51+
else
5052
$dexec llb1 loxicmd get ct
5153
$dexec llb1 loxicmd get port
52-
echo SCENARIO-11 [OK]
53-
else
54-
echo SCENARIO-11 [FAILED]
54+
echo ONEARM-L2 [FAILED]
5555
fi
5656
exit $code
57-
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

common/common.go

+19-19
Original file line numberDiff line numberDiff line change
@@ -278,16 +278,16 @@ type FdbMod struct {
278278
Type int
279279
}
280280

281-
// Ipv4AddrMod - Info about an ip address
282-
type Ipv4AddrMod struct {
281+
// IpAddrMod - Info about an ip address
282+
type IpAddrMod struct {
283283
// Dev - name of the related device
284284
Dev string
285285
// IP - Actual IP address
286286
IP string
287287
}
288288

289-
// Neighv4Mod - Info about an neighbor
290-
type Neighv4Mod struct {
289+
// NeighMod - Info about an neighbor
290+
type NeighMod struct {
291291
// IP - The IP address
292292
IP net.IP
293293
// LinkIndex - OS allocated index
@@ -298,8 +298,8 @@ type Neighv4Mod struct {
298298
HardwareAddr net.HardwareAddr
299299
}
300300

301-
// Ipv4AddrGet - Info about an ip addresses
302-
type Ipv4AddrGet struct {
301+
// IpAddrGet - Info about an ip addresses
302+
type IpAddrGet struct {
303303
// Dev - name of the related device
304304
Dev string
305305
// IP - Actual IP address
@@ -316,8 +316,8 @@ type RouteGetEntryStatistic struct {
316316
Packets int
317317
}
318318

319-
// Routev4Get - Info about an route
320-
type Routev4Get struct {
319+
// RouteGet - Info about an route
320+
type RouteGet struct {
321321
// Protocol - Protocol type
322322
Protocol int
323323
// Flags - flag type
@@ -336,8 +336,8 @@ type Routev4Get struct {
336336
Sync DpStatusT
337337
}
338338

339-
// Routev4Mod - Info about a route
340-
type Routev4Mod struct {
339+
// RouteMod - Info about a route
340+
type RouteMod struct {
341341
// Protocol - Protocol type
342342
Protocol int
343343
// Flags - flag type
@@ -687,15 +687,15 @@ type NetHookInterface interface {
687687
NetVlanPortDel(*VlanPortMod) (int, error)
688688
NetFdbAdd(*FdbMod) (int, error)
689689
NetFdbDel(*FdbMod) (int, error)
690-
NetIpv4AddrGet() ([]Ipv4AddrGet, error)
691-
NetIpv4AddrAdd(*Ipv4AddrMod) (int, error)
692-
NetIpv4AddrDel(*Ipv4AddrMod) (int, error)
693-
NetNeighv4Get() ([]Neighv4Mod, error)
694-
NetNeighv4Add(*Neighv4Mod) (int, error)
695-
NetNeighv4Del(*Neighv4Mod) (int, error)
696-
NetRoutev4Get() ([]Routev4Get, error)
697-
NetRoutev4Add(*Routev4Mod) (int, error)
698-
NetRoutev4Del(*Routev4Mod) (int, error)
690+
NetAddrGet() ([]IpAddrGet, error)
691+
NetAddrAdd(*IpAddrMod) (int, error)
692+
NetAddrDel(*IpAddrMod) (int, error)
693+
NetNeighGet() ([]NeighMod, error)
694+
NetNeighAdd(*NeighMod) (int, error)
695+
NetNeighDel(*NeighMod) (int, error)
696+
NetRouteGet() ([]RouteGet, error)
697+
NetRouteAdd(*RouteMod) (int, error)
698+
NetRouteDel(*RouteMod) (int, error)
699699
NetLbRuleAdd(*LbRuleMod) (int, error)
700700
NetLbRuleDel(*LbRuleMod) (int, error)
701701
NetLbRuleGet() ([]LbRuleMod, error)

0 commit comments

Comments
 (0)