func()

in cni/cni.go [198:264]


func (config *NetworkConfig) GetNetworkInfo(podNamespace string) (ninfo *network.NetworkInfo, err error) {
	if config.OptionalFlags.LoopbackDSR {
		if err := hcn.DSRSupported(); err != nil {
			logrus.Errorf("[cni-net] Failed to enable loopbackDSR on unsupported HCN version, err:%v.", err)
			return nil, err
		}
	}
	var subnets []network.SubnetInfo
	// Note the code below is looking inside the ipam specific configuration.
	if config.Ipam.Subnet != "" {
		ip, s, _ := net.ParseCIDR(config.Ipam.Subnet)
		gatewayIP := ip.To4()
		gatewayIP[3]++
		if config.Ipam.Routes != nil && len(config.Ipam.Routes) > 0 && config.Ipam.Routes[0].GW != nil {
			gatewayIP = config.Ipam.Routes[0].GW
		}
		subnet := network.SubnetInfo{
			AddressPrefix:  *s,
			GatewayAddress: gatewayIP,
			Policies:       []network.Policy{},
		}
		subnets = append(subnets, subnet)
	}

	if len(config.DNS.Search) > 0 {
		if podNamespace != "" {
			config.DNS.Search[0] = podNamespace + "." + config.DNS.Search[0]
		}
	}
	dnsSettings := network.DNSInfo{
		Nameservers: config.DNS.Nameservers,
		Search:      config.DNS.Search,
		Domain:      config.DNS.Domain,
		Options:     config.DNS.Options,
	}
	if len(config.RuntimeConfig.DNS.Servers) > 0 {
		logrus.Debugf("Substituting RuntimeConfig DNS Nameservers: %+v", config.RuntimeConfig.DNS.Servers)
		dnsSettings.Nameservers = config.RuntimeConfig.DNS.Servers
	}
	if len(config.RuntimeConfig.DNS.Searches) > 0 {
		logrus.Debugf("Substituting RuntimeConfig DNS Search: %+v", config.RuntimeConfig.DNS.Searches)
		dnsSettings.Search = config.RuntimeConfig.DNS.Searches
	}
	if len(config.RuntimeConfig.DNS.Options) > 0 {
		logrus.Debugf("Substituting RuntimeConfig DNS Options: %+v", config.RuntimeConfig.DNS.Options)
		dnsSettings.Options = config.RuntimeConfig.DNS.Options
	}

	ninfo = &network.NetworkInfo{
		ID:            config.Name,
		Name:          config.Name,
		Type:          network.NetworkType(config.Name),
		Subnets:       subnets,
		InterfaceName: "",
		DNS:           dnsSettings,
	}
	if config.AdditionalArgs != nil {
		for _, kvp := range config.AdditionalArgs {
			if strings.Contains(kvp.Name, "Policy") {
				npolicy := network.Policy{Type: network.CNIPolicyType(kvp.Name), Data: kvp.Value}
				ninfo.Policies = append(ninfo.Policies, npolicy)
			}
		}
	}

	return ninfo, err
}