From 2a57d6c163e25da1545463261f8575cbb75e36db Mon Sep 17 00:00:00 2001 From: Kartik Raval Date: Mon, 6 Feb 2023 11:47:39 +0000 Subject: [PATCH] Adding FoU encapsulation over IPIP tunnel : added checks for restart and multi-node cases --- .../routing/network_routes_controller.go | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/pkg/controllers/routing/network_routes_controller.go b/pkg/controllers/routing/network_routes_controller.go index abee78bd..a3d2ce11 100644 --- a/pkg/controllers/routing/network_routes_controller.go +++ b/pkg/controllers/routing/network_routes_controller.go @@ -767,11 +767,16 @@ func (nrc *NetworkRoutingController) setupOverlayTunnel(tunnelName string, nextH } else if nrc.overlayEncap == "fou" { - cmdArgs = append(cmdArgs, "fou", "add", "port", strconv.FormatInt(int64(nrc.overlayEncapPort), 10), "ipproto", "4") + cmdArgs = append(cmdArgs, "fou", "show") out, err := exec.Command("ip", cmdArgs...).CombinedOutput() - if err != nil { - return nil, fmt.Errorf("route not injected for the route advertised by the node %s "+ - "Failed to set FoU tunnel port - error: %s, output: %s", tunnelName, err, string(out)) + if err != nil || !strings.Contains(string(out), strconv.FormatInt(int64(nrc.overlayEncapPort), 10)) { + cmdArgs = ipBase + cmdArgs = append(cmdArgs, "fou", "add", "port", strconv.FormatInt(int64(nrc.overlayEncapPort), 10), "ipproto", "4") + out, err := exec.Command("ip", cmdArgs...).CombinedOutput() + if err != nil { + return nil, fmt.Errorf("route not injected for the route advertised by the node %s "+ + "Failed to set FoU tunnel port - error: %s, output: %s", tunnelName, err, string(out)) + } } cmdArgs = ipBase cmdArgs = append(cmdArgs,