Skip to content

Commit 1549f98

Browse files
committed
only add default route when skipdefaultroutes flag to false in dualnic scenario
1 parent bd7e2ae commit 1549f98

File tree

1 file changed

+33
-6
lines changed

1 file changed

+33
-6
lines changed

cni/network/multitenancy.go

Lines changed: 33 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,26 @@ func (m *Multitenancy) DetermineSnatFeatureOnHost(snatFile, nmAgentSupportedApis
159159
return snatConfig.EnableSnatForDns, snatConfig.EnableSnatOnHost, nil
160160
}
161161

162+
// addDefaultRouteToGateway appends a default route
163+
// to both epInfo and result. Returns error if gwStr is not a valid IP.
164+
func (m *Multitenancy) addDefaultRouteToGateway(gwStr string, epInfo *network.EndpointInfo, result *network.InterfaceInfo) error {
165+
gw := net.ParseIP(gwStr)
166+
if gw == nil {
167+
return fmt.Errorf("invalid gateway IP: %s", gwStr)
168+
}
169+
170+
var dst net.IPNet
171+
if gw.To4() != nil {
172+
_, defaultIPNet, _ := net.ParseCIDR("0.0.0.0/0")
173+
dst = net.IPNet{IP: net.IPv4zero, Mask: defaultIPNet.Mask}
174+
}
175+
176+
ri := network.RouteInfo{Dst: dst, Gw: gw}
177+
epInfo.Routes = append(epInfo.Routes, ri)
178+
result.Routes = append(result.Routes, ri)
179+
return nil
180+
}
181+
162182
func (m *Multitenancy) SetupRoutingForMultitenancy(
163183
nwCfg *cni.NetworkConfig,
164184
cnsNetworkConfig *cns.GetNetworkContainerResponse,
@@ -170,13 +190,20 @@ func (m *Multitenancy) SetupRoutingForMultitenancy(
170190
// if snat enabled, add 169.254.128.1 as default gateway
171191
if nwCfg.EnableSnatOnHost {
172192
logger.Info("add default route for multitenancy.snat on host enabled")
173-
addDefaultRoute(cnsNetworkConfig.LocalIPConfiguration.GatewayIPAddress, epInfo, result)
193+
m.addDefaultRouteToGateway(cnsNetworkConfig.LocalIPConfiguration.GatewayIPAddress, epInfo, result)
174194
} else {
175-
_, defaultIPNet, _ := net.ParseCIDR("0.0.0.0/0")
176-
dstIP := net.IPNet{IP: net.ParseIP("0.0.0.0"), Mask: defaultIPNet.Mask}
177-
gwIP := net.ParseIP(cnsNetworkConfig.IPConfiguration.GatewayIPAddress)
178-
epInfo.Routes = append(epInfo.Routes, network.RouteInfo{Dst: dstIP, Gw: gwIP})
179-
result.Routes = append(result.Routes, network.RouteInfo{Dst: dstIP, Gw: gwIP})
195+
// only set default route when skipDefaultRoutes is false to avoid duplicated default routes given to HNS
196+
if !epInfo.SkipDefaultRoutes {
197+
if err := m.addDefaultRouteToGateway(
198+
cnsNetworkConfig.IPConfiguration.GatewayIPAddress,
199+
epInfo, result,
200+
); err != nil {
201+
logger.Error("failed adding default route",
202+
zap.String("gateway", cnsNetworkConfig.IPConfiguration.GatewayIPAddress),
203+
zap.Error(err),
204+
)
205+
}
206+
}
180207

181208
if epInfo.EnableSnatForDns {
182209
logger.Info("add SNAT for DNS enabled")

0 commit comments

Comments
 (0)