@@ -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+
162182func (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