diff --git a/api/loxinlp/nlp.go b/api/loxinlp/nlp.go index fef0f07c..40294741 100644 --- a/api/loxinlp/nlp.go +++ b/api/loxinlp/nlp.go @@ -1363,7 +1363,8 @@ func RUWorker(ch chan nlp.RouteUpdate, f chan struct{}) { } } -func NLWorker(nNl *NlH, bgpPeerMode bool) { +func NLWorker(nNl *NlH, bgpPeerMode bool, ch chan bool) { + ch <- true if bgpPeerMode { for { /* Single thread for reading route NL msgs in below order */ RUWorker(nNl.FromRUCh, nNl.FromRUDone) @@ -1549,6 +1550,7 @@ func NlpInit(bgpPeerMode bool, blackList string, ipvsCompat bool) *NlH { nNl.BlackList = blackList nNl.BLRgx = regexp.MustCompile(blackList) + checkInit := make(chan bool) if bgpPeerMode { nNl.FromRUCh = make(chan nlp.RouteUpdate, cmn.RuWorkQLen) @@ -1559,7 +1561,8 @@ func NlpInit(bgpPeerMode bool, blackList string, ipvsCompat bool) *NlH { tk.LogIt(tk.LogInfo, "[NLP] Route msgs subscribed\n") } - go NLWorker(nNl, bgpPeerMode) + go NLWorker(nNl, bgpPeerMode, checkInit) + <-checkInit return nNl } @@ -1573,7 +1576,8 @@ func NlpInit(bgpPeerMode bool, blackList string, ipvsCompat bool) *NlH { nNl.FromRUCh = make(chan nlp.RouteUpdate, cmn.RuWorkQLen) nNl.IMap = make(map[string]Intf) - checkInit := make(chan bool) + go NLWorker(nNl, bgpPeerMode, checkInit) + <-checkInit err := nlp.LinkSubscribe(nNl.FromLUCh, nNl.FromLUDone) if err != nil { @@ -1600,7 +1604,6 @@ func NlpInit(bgpPeerMode bool, blackList string, ipvsCompat bool) *NlH { tk.LogIt(tk.LogInfo, "[NLP] Route msgs subscribed\n") } - go NLWorker(nNl, bgpPeerMode) tk.LogIt(tk.LogInfo, "[NLP] NLP Subscription done\n") go NlpGet(checkInit) diff --git a/cicd/common.sh b/cicd/common.sh index 97868c3d..9978c11f 100644 --- a/cicd/common.sh +++ b/cicd/common.sh @@ -481,10 +481,10 @@ create_docker_host_vxlan() { #echo "$h1:$link1->$h2:$link2" if [[ "$uifType" == "phy" ]]; then - sudo ip -n $h1 link add vxlan$vxid type vxlan id $vxid local $lip dev $link1 dstport 4789 + sudo ip -n $h1 link add vxlan$vxid type vxlan id $vxid local $lip dev $link1 dstport 0 sudo ip -n $h1 link set vxlan$vxid up elif [[ "$uifType" == "vlan" ]]; then - sudo ip -n $h1 link add vxlan$vxid type vxlan id $vxid local $lip dev vlan$vid dstport 4789 + sudo ip -n $h1 link add vxlan$vxid type vxlan id $vxid local $lip dev vlan$vid dstport 0 sudo ip -n $h1 link set vxlan$vxid up fi diff --git a/loxilb-ebpf b/loxilb-ebpf index 8f42f04a..6e5c7658 160000 --- a/loxilb-ebpf +++ b/loxilb-ebpf @@ -1 +1 @@ -Subproject commit 8f42f04ab9e038dd64443f7e22f1b23c2a4154a8 +Subproject commit 6e5c76583ec61a29a43e48e461f8a31ce7492de9 diff --git a/loxinet/rules.go b/loxinet/rules.go index ac8e02f1..53882887 100644 --- a/loxinet/rules.go +++ b/loxinet/rules.go @@ -1431,10 +1431,12 @@ func (R *RuleH) AddNatLbRule(serv cmn.LbServiceArg, servSecIPs []cmn.LbSecIPArg, if r.ruleNum < RtMaximumLbs { R.tables[RtLB].rArr[r.ruleNum] = r } - R.vipMap[sNetAddr.IP.String()]++ + if !strings.Contains(r.name, "ipvs") { + R.vipMap[sNetAddr.IP.String()]++ - if R.vipMap[sNetAddr.IP.String()] == 1 && !strings.Contains(r.name, "ipvs") { - R.AdvRuleVIPIfL2(sNetAddr.IP) + if R.vipMap[sNetAddr.IP.String()] == 1 { + R.AdvRuleVIPIfL2(sNetAddr.IP) + } } r.DP(DpCreate) @@ -1496,13 +1498,15 @@ func (R *RuleH) DeleteNatLbRule(serv cmn.LbServiceArg) (int, error) { R.tables[RtLB].rArr[rule.ruleNum] = nil } - R.vipMap[sNetAddr.IP.String()]-- + if !strings.Contains(rule.name, "ipvs") { + R.vipMap[sNetAddr.IP.String()]-- - if R.vipMap[sNetAddr.IP.String()] == 0 { - if IsIPHostAddr(sNetAddr.IP.String()) && !strings.Contains(rule.name, "ipvs") { - loxinlp.DelAddrNoHook(sNetAddr.IP.String()+"/32", "lo") + if R.vipMap[sNetAddr.IP.String()] == 0 { + if IsIPHostAddr(sNetAddr.IP.String()) { + loxinlp.DelAddrNoHook(sNetAddr.IP.String()+"/32", "lo") + } + delete(R.vipMap, sNetAddr.IP.String()) } - delete(R.vipMap, sNetAddr.IP.String()) } tk.LogIt(tk.LogDebug, "nat lb-rule deleted %s-%s\n", rule.tuples.String(), rule.act.String())