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
}