Skip to content

Commit 428edb9

Browse files
authored
fix: enable ip forward on transparent vlan network create (#2335)
* Enable ipv4 forwarding on network creation * Add multitenancy transparent vlan conflist to dropgz * Test if applying fix each time works * Address linter issues * Revert "Test if applying fix each time works" This reverts commit 8989ded. * Remove overlap in adding dropgz conflist * Add unit test if forwarding fails * Make error handling consistent with ipv6 forwarding * Address linter issue
1 parent 8a80c8e commit 428edb9

File tree

3 files changed

+36
-0
lines changed

3 files changed

+36
-0
lines changed

network/network_linux.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,11 @@ func (nm *networkManager) newNetworkImpl(nwInfo *NetworkInfo, extIf *externalInt
9393
case opModeTransparentVlan:
9494
logger.Info("Transparent vlan mode")
9595
ifName = extIf.Name
96+
nu := networkutils.NewNetworkUtils(nm.netlink, nm.plClient)
97+
if err := nu.EnableIPV4Forwarding(); err != nil {
98+
return nil, fmt.Errorf("Ipv4 forwarding failed: %w", err)
99+
}
100+
logger.Info("Ipv4 forwarding enabled")
96101
default:
97102
return nil, errNetworkModeInvalid
98103
}

network/network_test.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,26 @@ var _ = Describe("Test Network", func() {
181181
Expect(nw.Id).To(Equal(nwInfo.Id))
182182
})
183183
})
184+
185+
Context("When we cannot enable ipv4 forwarding", func() {
186+
It("Should error when ipv4 forwarding failed", func() {
187+
nm := &networkManager{
188+
ExternalInterfaces: map[string]*externalInterface{},
189+
plClient: platform.NewMockExecClient(true),
190+
}
191+
nm.ExternalInterfaces["eth0"] = &externalInterface{
192+
Networks: map[string]*network{},
193+
}
194+
nwInfo := &NetworkInfo{
195+
Id: "nw",
196+
MasterIfName: "eth0",
197+
Mode: opModeTransparentVlan,
198+
}
199+
nw, err := nm.newNetwork(nwInfo)
200+
Expect(err).To(MatchError(platform.ErrMockExec))
201+
Expect(nw).To(BeNil())
202+
})
203+
})
184204
})
185205

186206
Describe("Test deleteNetwork", func() {

network/networkutils/networkutils_linux.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ const (
3434
enableIPForwardCmd = "sysctl -w net.ipv4.ip_forward=1"
3535
toggleIPV6Cmd = "sysctl -w net.ipv6.conf.all.disable_ipv6=%d"
3636
enableIPV6ForwardCmd = "sysctl -w net.ipv6.conf.all.forwarding=1"
37+
enableIPV4ForwardCmd = "sysctl -w net.ipv4.conf.all.forwarding=1"
3738
disableRACmd = "sysctl -w net.ipv6.conf.%s.accept_ra=0"
3839
acceptRAV6File = "/proc/sys/net/ipv6/conf/%s/accept_ra"
3940
)
@@ -220,6 +221,16 @@ func (nu NetworkUtils) EnableIPForwarding(ifName string) error {
220221
return nil
221222
}
222223

224+
func (nu NetworkUtils) EnableIPV4Forwarding() error {
225+
_, err := nu.plClient.ExecuteCommand(enableIPV4ForwardCmd)
226+
if err != nil {
227+
logger.Error("Enable ipv4 forwarding failed with", zap.Error(err))
228+
return errors.Wrap(err, "enable ipv4 forwarding failed")
229+
}
230+
231+
return nil
232+
}
233+
223234
func (nu NetworkUtils) EnableIPV6Forwarding() error {
224235
cmd := fmt.Sprint(enableIPV6ForwardCmd)
225236
_, err := nu.plClient.ExecuteCommand(cmd)

0 commit comments

Comments
 (0)