func StaticNetworkConfFrom()

in cni/vmconf/vmconf.go [153:200]


func StaticNetworkConfFrom(result types.Result, containerID string) (*StaticNetworkConf, error) {
	currentResult, err := current.NewResultFromResult(result)
	if err != nil {
		return nil, errors.Wrap(err, "failed to parse cni result")
	}

	// As specified in the vmconf package docstring, we are looking for an interface who's
	// sandbox ID is the "containerID" (really "vmID" in this case) that CNI was invoked
	// with. That interface holds the configuration that should be applied to the VM's
	// internal network device.
	vmIfaceSandbox := containerID

	vmIface, tapIface, err := internal.VMTapPair(currentResult, vmIfaceSandbox)
	if err != nil {
		return nil, err
	}

	// find the IP associated with the VM iface
	vmIPs := internal.InterfaceIPs(currentResult, vmIface.Name, vmIface.Sandbox)
	if len(vmIPs) != 1 {
		return nil, errors.Errorf("expected to find 1 IP for vm interface %q, but instead found %+v",
			vmIface.Name, vmIPs)
	}
	vmIP := vmIPs[0]

	netNS, err := ns.GetNS(tapIface.Sandbox)
	if err != nil {
		return nil, errors.Wrapf(err, "failed to find netns at path %q", tapIface.Sandbox)
	}

	tapMTU, err := mtuOf(tapIface.Name, netNS, internal.DefaultNetlinkOps())
	if err != nil {
		return nil, err
	}

	return &StaticNetworkConf{
		TapName:           tapIface.Name,
		NetNSPath:         tapIface.Sandbox,
		VMMacAddr:         vmIface.Mac,
		VMMTU:             tapMTU,
		VMIPConfig:        vmIP,
		VMRoutes:          currentResult.Routes,
		VMNameservers:     currentResult.DNS.Nameservers,
		VMDomain:          currentResult.DNS.Domain,
		VMSearchDomains:   currentResult.DNS.Search,
		VMResolverOptions: currentResult.DNS.Options,
	}, nil
}