@@ -248,9 +248,8 @@ func getEndpointDNSSettings(nwCfg *cni.NetworkConfig, result *cniTypesCurr.Resul
248248}
249249
250250// getPoliciesFromRuntimeCfg returns network policies from network config.
251- func getPoliciesFromRuntimeCfg (nwCfg * cni.NetworkConfig , isIPv6Enabled bool ) []policy.Policy {
252- logger .Info ("Runtime Info" ,
253- zap .Any ("config" , nwCfg .RuntimeConfig ))
251+ func getPoliciesFromRuntimeCfg (nwCfg * cni.NetworkConfig , isIPv6Enabled bool ) ([]policy.Policy , error ) {
252+ logger .Info ("Runtime Info" , zap .Any ("config" , nwCfg .RuntimeConfig ))
254253 var policies []policy.Policy
255254 var protocol uint32
256255
@@ -266,57 +265,57 @@ func getPoliciesFromRuntimeCfg(nwCfg *cni.NetworkConfig, isIPv6Enabled bool) []p
266265
267266 // To support hostport policy mapping
268267 // uint32 NatFlagsLocalRoutedVip = 1
269- rawPolicy , _ := json .Marshal (& hnsv2.PortMappingPolicySetting {
268+ // To support hostport policy mapping for ipv6 in dualstack overlay mode
269+ // uint32 NatFlagsIPv6 = 2
270+
271+ flag := hnsv2 .NatFlagsLocalRoutedVip
272+ if mapping .HostIp != "" {
273+ hostIP , err := netip .ParseAddr (mapping .HostIp )
274+ if err != nil {
275+ return nil , errors .Wrapf (err , "failed to parse hostIP %v" , hostIP )
276+ }
277+
278+ if hostIP .Is6 () && isIPv6Enabled {
279+ flag = hnsv2 .NatFlagsIPv6
280+ }
281+
282+ if hostIP .Is6 () && ! isIPv6Enabled {
283+ logger .Info ("Do not use ipv6 hostIP to create windows pod on ipv4 cluster" )
284+ }
285+ }
286+
287+ rawPolicy , err := json .Marshal (& hnsv2.PortMappingPolicySetting {
270288 ExternalPort : uint16 (mapping .HostPort ),
271289 InternalPort : uint16 (mapping .ContainerPort ),
272290 VIP : mapping .HostIp ,
273291 Protocol : protocol ,
274- Flags : hnsv2 . NatFlagsLocalRoutedVip ,
292+ Flags : flag ,
275293 })
276294
277- hnsv2Policy , _ := json .Marshal (& hnsv2.EndpointPolicy {
295+ if err != nil {
296+ return nil , errors .Wrap (err , "failed to marshal HNS portMappingPolicySetting" )
297+ }
298+
299+ hnsv2Policy , err := json .Marshal (& hnsv2.EndpointPolicy {
278300 Type : hnsv2 .PortMapping ,
279301 Settings : rawPolicy ,
280302 })
281303
282- policyv4 := policy.Policy {
304+ if err != nil {
305+ return nil , errors .Wrap (err , "failed to marshal HNS endpointPolicy" )
306+ }
307+
308+ hnsPolicy := policy.Policy {
283309 Type : policy .EndpointPolicy ,
284310 Data : hnsv2Policy ,
285311 }
286312
287- logger .Info ("Creating port mapping policyv4" ,
288- zap .Any ("policy" , policyv4 ))
289- policies = append (policies , policyv4 )
290-
291- // add port mapping policy for v6 if we have IPV6 enabled
292- if isIPv6Enabled {
293- // To support hostport policy mapping for ipv6 in dualstack overlay mode
294- // uint32 NatFlagsIPv6 = 2
295- rawPolicyv6 , _ := json .Marshal (& hnsv2.PortMappingPolicySetting { // nolint
296- ExternalPort : uint16 (mapping .HostPort ),
297- InternalPort : uint16 (mapping .ContainerPort ),
298- VIP : mapping .HostIp ,
299- Protocol : protocol ,
300- Flags : hnsv2 .NatFlagsIPv6 ,
301- })
302-
303- hnsv2Policyv6 , _ := json .Marshal (& hnsv2.EndpointPolicy { // nolint
304- Type : hnsv2 .PortMapping ,
305- Settings : rawPolicyv6 ,
306- })
307-
308- policyv6 := policy.Policy {
309- Type : policy .EndpointPolicy ,
310- Data : hnsv2Policyv6 ,
311- }
313+ logger .Info ("Creating port mapping policy" , zap .Any ("policy" , hnsPolicy ))
312314
313- logger .Info ("Creating port mapping policyv6" ,
314- zap .Any ("policy" , policyv6 ))
315- policies = append (policies , policyv6 )
316- }
315+ policies = append (policies , hnsPolicy )
317316 }
318317
319- return policies
318+ return policies , nil
320319}
321320
322321func getEndpointPolicies (args PolicyArgs ) ([]policy.Policy , error ) {
0 commit comments