diff --git a/network/network_linux.go b/network/network_linux.go index 73dd394ad4..62d9734d5e 100644 --- a/network/network_linux.go +++ b/network/network_linux.go @@ -93,6 +93,11 @@ func (nm *networkManager) newNetworkImpl(nwInfo *NetworkInfo, extIf *externalInt case opModeTransparentVlan: logger.Info("Transparent vlan mode") ifName = extIf.Name + nu := networkutils.NewNetworkUtils(nm.netlink, nm.plClient) + if err := nu.EnableIPV4Forwarding(); err != nil { + return nil, fmt.Errorf("Ipv4 forwarding failed: %w", err) + } + logger.Info("Ipv4 forwarding enabled") default: return nil, errNetworkModeInvalid } diff --git a/network/network_test.go b/network/network_test.go index 7bd353577c..37fdcd8605 100644 --- a/network/network_test.go +++ b/network/network_test.go @@ -181,6 +181,26 @@ var _ = Describe("Test Network", func() { Expect(nw.Id).To(Equal(nwInfo.Id)) }) }) + + Context("When we cannot enable ipv4 forwarding", func() { + It("Should error when ipv4 forwarding failed", func() { + nm := &networkManager{ + ExternalInterfaces: map[string]*externalInterface{}, + plClient: platform.NewMockExecClient(true), + } + nm.ExternalInterfaces["eth0"] = &externalInterface{ + Networks: map[string]*network{}, + } + nwInfo := &NetworkInfo{ + Id: "nw", + MasterIfName: "eth0", + Mode: opModeTransparentVlan, + } + nw, err := nm.newNetwork(nwInfo) + Expect(err).To(MatchError(platform.ErrMockExec)) + Expect(nw).To(BeNil()) + }) + }) }) Describe("Test deleteNetwork", func() { diff --git a/network/networkutils/networkutils_linux.go b/network/networkutils/networkutils_linux.go index 1555687ba2..c6b94ddb2e 100644 --- a/network/networkutils/networkutils_linux.go +++ b/network/networkutils/networkutils_linux.go @@ -34,6 +34,7 @@ const ( enableIPForwardCmd = "sysctl -w net.ipv4.ip_forward=1" toggleIPV6Cmd = "sysctl -w net.ipv6.conf.all.disable_ipv6=%d" enableIPV6ForwardCmd = "sysctl -w net.ipv6.conf.all.forwarding=1" + enableIPV4ForwardCmd = "sysctl -w net.ipv4.conf.all.forwarding=1" disableRACmd = "sysctl -w net.ipv6.conf.%s.accept_ra=0" acceptRAV6File = "/proc/sys/net/ipv6/conf/%s/accept_ra" ) @@ -220,6 +221,16 @@ func (nu NetworkUtils) EnableIPForwarding(ifName string) error { return nil } +func (nu NetworkUtils) EnableIPV4Forwarding() error { + _, err := nu.plClient.ExecuteCommand(enableIPV4ForwardCmd) + if err != nil { + logger.Error("Enable ipv4 forwarding failed with", zap.Error(err)) + return errors.Wrap(err, "enable ipv4 forwarding failed") + } + + return nil +} + func (nu NetworkUtils) EnableIPV6Forwarding() error { cmd := fmt.Sprint(enableIPV6ForwardCmd) _, err := nu.plClient.ExecuteCommand(cmd)