Skip to content

Commit 5593e97

Browse files
Removing addition of default routes before HNS network creation (#2059)
removing addition of default routes before hns network creation
1 parent 33890dd commit 5593e97

File tree

2 files changed

+0
-155
lines changed

2 files changed

+0
-155
lines changed

network/network_windows.go

Lines changed: 0 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import (
77
"encoding/json"
88
"errors"
99
"fmt"
10-
"net"
1110
"strconv"
1211
"strings"
1312
"time"
@@ -189,76 +188,6 @@ func (nm *networkManager) newNetworkImplHnsV1(nwInfo *NetworkInfo, extIf *extern
189188
return nw, nil
190189
}
191190

192-
// add ipv4 and ipv6 routes in dualstack overlay mode to windows Node
193-
// in dualstack overlay mode, pods are created from different subnets on different nodes, gateway has to be node ip if pods want to communicate with each other
194-
// add routes to make node understand pod IPs come from different subnets and VFP will take decisions based on these routes to forward traffic and avoid Natting
195-
func (nm *networkManager) addNewNetRules(nwInfo *NetworkInfo) error {
196-
var (
197-
err error
198-
out string
199-
)
200-
201-
// get interface name of the VM adapter
202-
ifName := nwInfo.MasterIfName
203-
if !strings.Contains(nwInfo.MasterIfName, ifNamePrefix) {
204-
ifName = fmt.Sprintf("%s (%s)", ifNamePrefix, nwInfo.MasterIfName)
205-
}
206-
207-
// check if external interface name is empty
208-
if ifName == "" {
209-
return fmt.Errorf("[net] external interface name is empty") // nolint
210-
}
211-
212-
// check whether nwInfo subnets exist
213-
if nwInfo.Subnets == nil {
214-
return fmt.Errorf("[net] nwInfo subnets are not found") // nolint
215-
}
216-
217-
// iterate subnet and add ipv4 and ipv6 default route and gateway only if it is not existing
218-
for _, subnet := range nwInfo.Subnets {
219-
prefix := subnet.Prefix.String()
220-
221-
ip, _, errParseCIDR := net.ParseCIDR(prefix)
222-
if errParseCIDR != nil {
223-
return fmt.Errorf("[net] failed to parse prefix %s due to %+v", prefix, errParseCIDR) // nolint
224-
}
225-
226-
if subnet.Gateway == nil {
227-
return fmt.Errorf("[net] failed to get subnet gateway") // nolint
228-
}
229-
230-
log.Printf("[net] Adding ipv4 and ipv6 net rules to windows node")
231-
232-
// delete existing net rules before adding new rules to windows node in case:
233-
// if hnsNetwork is not existing and new pod is creating, existing rules will be applied twice that will cause the pod creation failure
234-
if ip.To4() != nil {
235-
deleteNetshV4DefaultRoute := fmt.Sprintf(netRouteCmd, "ipv4", "delete", prefix, ifName, ipv4DefaultHop)
236-
if _, delErr := nm.plClient.ExecuteCommand(deleteNetshV4DefaultRoute); delErr != nil {
237-
log.Printf("[net] Deleting ipv4 default route failed: %v", err)
238-
}
239-
240-
// netsh interface ipv4 add route $subnetV4 $hostInterfaceAlias "0.0.0.0"
241-
addNetshV4DefaultRoute := fmt.Sprintf(netRouteCmd, "ipv4", "add", prefix, ifName, ipv4DefaultHop)
242-
if out, err = nm.plClient.ExecuteCommand(addNetshV4DefaultRoute); err != nil {
243-
log.Printf("[net] Adding ipv4 default route failed: %v:%v", out, err)
244-
}
245-
} else {
246-
deleteNetshV6DefaultRoute := fmt.Sprintf(netRouteCmd, "ipv6", "delete", prefix, ifName, ipv6DefaultHop)
247-
if _, delErr := nm.plClient.ExecuteCommand(deleteNetshV6DefaultRoute); delErr != nil {
248-
log.Printf("[net] Deleting ipv6 default route failed: %v", delErr)
249-
}
250-
251-
// netsh interface ipv6 add route $subnetV6 $hostInterfaceAlias "::"
252-
addNetshV6DefaultRoute := fmt.Sprintf(netRouteCmd, "ipv6", "add", prefix, ifName, ipv6DefaultHop)
253-
if out, err = nm.plClient.ExecuteCommand(addNetshV6DefaultRoute); err != nil {
254-
log.Printf("[net] Adding ipv6 default route failed: %v:%v", out, err)
255-
}
256-
}
257-
}
258-
259-
return err // nolint
260-
}
261-
262191
func (nm *networkManager) appIPV6RouteEntry(nwInfo *NetworkInfo) error {
263192
var (
264193
err error
@@ -403,16 +332,8 @@ func (nm *networkManager) newNetworkImplHnsV2(nwInfo *NetworkInfo, extIf *extern
403332
if err != nil {
404333
// if network not found, create the HNS network.
405334
if errors.As(err, &hcn.NetworkNotFoundError{}) {
406-
// add net routes to windows node if we have IPv6 enabled
407-
if nwInfo.IsIPv6Enabled {
408-
if err := nm.addNewNetRules(nwInfo); err != nil { // nolint
409-
log.Printf("[net] Failed to add net rules due to %+v", err)
410-
return nil, err
411-
}
412-
}
413335
log.Printf("[net] Creating hcn network: %+v", hcnNetwork)
414336
hnsResponse, err = Hnsv2.CreateNetwork(hcnNetwork)
415-
416337
if err != nil {
417338
return nil, fmt.Errorf("Failed to create hcn network: %s due to error: %v", hcnNetwork.Name, err)
418339
}

network/network_windows_test.go

Lines changed: 0 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,11 @@ package network
88

99
import (
1010
"fmt"
11-
"net"
1211
"testing"
1312
"time"
1413

1514
"github.com/Azure/azure-container-networking/network/hnswrapper"
16-
"github.com/Azure/azure-container-networking/platform"
1715
"github.com/Microsoft/hcsshim/hcn"
18-
"github.com/stretchr/testify/assert"
1916
)
2017

2118
func TestNewAndDeleteNetworkImplHnsV2(t *testing.T) {
@@ -230,76 +227,3 @@ func TestDeleteNetworkImplHnsV1WithTimeout(t *testing.T) {
230227
t.Fatal("Failed to timeout HNS calls for deleting network")
231228
}
232229
}
233-
234-
// test addNewNetRules to add net rules from NetworkInfo
235-
func TestAddNewNetRules(t *testing.T) {
236-
cnt := 0
237-
plc := platform.NewMockExecClient(false)
238-
nm := &networkManager{
239-
ExternalInterfaces: map[string]*externalInterface{},
240-
plClient: plc,
241-
}
242-
243-
nwInfo := &NetworkInfo{
244-
Id: "d3e97a83-ba4c-45d5-ba88-dc56757ece28",
245-
MasterIfName: "eth0",
246-
Mode: "bridge",
247-
Subnets: []SubnetInfo{
248-
{
249-
Prefix: net.IPNet{
250-
IP: net.IPv4(10, 0, 0, 1),
251-
Mask: net.IPv4Mask(255, 255, 0, 0),
252-
},
253-
Gateway: net.ParseIP("0.0.0.0"),
254-
},
255-
{
256-
Prefix: net.IPNet{
257-
IP: net.ParseIP("ff02::fb"),
258-
Mask: net.CIDRMask(128, 128),
259-
},
260-
Gateway: net.ParseIP("::"),
261-
},
262-
},
263-
}
264-
265-
// get each delete and add new rule entry
266-
ifName := "vEthernet (eth0)"
267-
var ipType, defaultHop string
268-
expectedCmds := make([]string, 0)
269-
expectedNumRules := 8
270-
for _, subnet := range nwInfo.Subnets {
271-
prefix := subnet.Prefix.String()
272-
ip, _, _ := net.ParseCIDR(prefix)
273-
if ip.To4() != nil {
274-
ipType = "ipv4"
275-
defaultHop = ipv4DefaultHop
276-
} else {
277-
ipType = "ipv6"
278-
defaultHop = ipv6DefaultHop
279-
}
280-
gateway := subnet.Gateway.String()
281-
netRouteCmd1 := fmt.Sprintf(netRouteCmd, ipType, "delete", prefix, ifName, defaultHop)
282-
expectedCmds = append(expectedCmds, netRouteCmd1)
283-
netRouteCmd2 := fmt.Sprintf(netRouteCmd, ipType, "add", prefix, ifName, defaultHop)
284-
expectedCmds = append(expectedCmds, netRouteCmd2)
285-
netRouteCmd3 := fmt.Sprintf(netRouteCmd, ipType, "delete", prefix, ifName, gateway)
286-
expectedCmds = append(expectedCmds, netRouteCmd3)
287-
netRouteCmd4 := fmt.Sprintf(netRouteCmd, ipType, "add", prefix, ifName, gateway)
288-
expectedCmds = append(expectedCmds, netRouteCmd4)
289-
}
290-
291-
plc.SetExecCommand(func(cmd string) (string, error) {
292-
assert.Equal(t, expectedCmds[cnt], cmd)
293-
cnt++
294-
return "", nil
295-
})
296-
297-
err := nm.addNewNetRules(nwInfo)
298-
if err != nil {
299-
t.Fatal("Failed to add/delete a new network rule")
300-
}
301-
302-
if cnt != expectedNumRules {
303-
t.Fatalf("Failed to add/delete expected number %d of new network rules", expectedNumRules)
304-
}
305-
}

0 commit comments

Comments
 (0)