diff options
author | 2020-08-04 14:33:21 -0700 | |
---|---|---|
committer | 2020-09-17 17:10:02 -0700 | |
commit | c99d1522d6a52765cb8bb664149c705e33911f7d (patch) | |
tree | 93a94c9dc9e8547ed2a9eaaa985edf672b4323bc /internal/pkg/utils/chain.go | |
parent | 178b11bcf11accdf57f0d79509d80000fafbe05c (diff) |
adding the sfc features
- including the network/iface.go file
- adding the default gw features in pod network namespaces
- fixing insync message bug
Signed-off-by: Kuralamudhan Ramakrishnan <kuralamudhan.ramakrishnan@intel.com>
Change-Id: I9b595c5cae415cc594f7682f1ffdbdf6291ea909
Diffstat (limited to 'internal/pkg/utils/chain.go')
-rw-r--r-- | internal/pkg/utils/chain.go | 49 |
1 files changed, 44 insertions, 5 deletions
diff --git a/internal/pkg/utils/chain.go b/internal/pkg/utils/chain.go index aa98aa1..8198dcb 100644 --- a/internal/pkg/utils/chain.go +++ b/internal/pkg/utils/chain.go @@ -19,6 +19,7 @@ package nfn import ( "context" "fmt" + "ovn4nfv-k8s-plugin/internal/pkg/network" "ovn4nfv-k8s-plugin/internal/pkg/ovn" k8sv1alpha1 "ovn4nfv-k8s-plugin/pkg/apis/k8s/v1alpha1" "strings" @@ -123,6 +124,13 @@ func calculateDeploymentRoutes(namespace, label string, pos int, num int, ln []k r.DynamicNetworkRoutes = append(r.DynamicNetworkRoutes, rt) } } + + //Add Default Route based on Right Network + rt := k8sv1alpha1.Route{ + GW: nextRightIP, + Dst: "0.0.0.0", + } + r.DynamicNetworkRoutes = append(r.DynamicNetworkRoutes, rt) return } @@ -145,6 +153,11 @@ func CalculateRoutes(cr *k8sv1alpha1.NetworkChaining) ([]RoutingInfo, error) { i++ } num := len(deploymentList) + log.Info("Display the num", "num", num) + log.Info("Display the ln", "ln", ln) + log.Info("Display the rn", "rn", rn) + log.Info("Display the networklist", "networkList", networkList) + log.Info("Display the deploymentlist", "deploymentList", deploymentList) for i, deployment := range deploymentList { r, err := calculateDeploymentRoutes(cr.Namespace, deployment, i, num, ln, rn, networkList, deploymentList) if err != nil { @@ -156,9 +169,14 @@ func CalculateRoutes(cr *k8sv1alpha1.NetworkChaining) ([]RoutingInfo, error) { } func ContainerAddRoute(containerPid int, route []*pb.RouteData) error { - str := fmt.Sprintf("/host/proc/%d/ns/net", containerPid) + hostNet, err := network.GetHostNetwork() + if err != nil { + log.Error(err, "Failed to get host network") + return err + } + nms, err := ns.GetNS(str) if err != nil { log.Error(err, "Failed namesapce", "containerID", containerPid) @@ -166,13 +184,34 @@ func ContainerAddRoute(containerPid int, route []*pb.RouteData) error { } defer nms.Close() err = nms.Do(func(_ ns.NetNS) error { + podGW, err := network.GetDefaultGateway() + if err != nil { + log.Error(err, "Failed to get pod default gateway") + return err + } + + stdout, stderr, err := ovn.RunIP("route", "add", hostNet, "via", podGW) + if err != nil && !strings.Contains(stderr, "RTNETLINK answers: File exists") { + log.Error(err, "Failed to ip route add", "stdout", stdout, "stderr", stderr) + return err + } + for _, r := range route { dst := r.GetDst() gw := r.GetGw() - stdout, stderr, err := ovn.RunIP("route", "add", dst, "via", gw) - if err != nil && !strings.Contains(stderr, "RTNETLINK answers: File exists") { - log.Error(err, "Failed to ip route add", "stdout", stdout, "stderr", stderr) - return err + // Replace default route + if dst == "0.0.0.0" { + stdout, stderr, err := ovn.RunIP("route", "replace", "default", "via", gw) + if err != nil { + log.Error(err, "Failed to ip route replace", "stdout", stdout, "stderr", stderr) + return err + } + } else { + stdout, stderr, err := ovn.RunIP("route", "add", dst, "via", gw) + if err != nil && !strings.Contains(stderr, "RTNETLINK answers: File exists") { + log.Error(err, "Failed to ip route add", "stdout", stdout, "stderr", stderr) + return err + } } } return nil |