func (mn *MockIPNet) GetNodeIP() (net.IP, *net.IPNet) {
	mn.Lock()
	defer mn.Unlock()
	if mn.nodeIP == nil {
		return net.IP{}, nil
	}
	return mn.nodeIP.IP, &net.IPNet{
		IP:   mn.nodeIP.IP.Mask(mn.nodeIP.Mask),
		Mask: mn.nodeIP.Mask,
	}
}
GetNodeIP returns the IP+network address of this node.
package ipnet
import (
	"fmt"
	"net"
	"sync"
	podmodel "github.com/contiv/vpp/plugins/ksr/model/pod"
)
const (
	podLinuxLoopLogicalNamePrefix = "linux-loop"
)
type MockIPNet struct {
	sync.Mutex
	podIf                      map[podmodel.ID]string
	networkToVRFID             map[string]uint32
	podInterfaceToNetwork      map[string]string
	externalInterfaceToNetwork map[string]string
	hostIPs                    []net.IP
	nodeIP                     *net.IPNet
	hostInterconnect           string
	vxlanBVIIfName             string
	vniID                      uint32
}
func NewMockIPNet() *MockIPNet {
	return &MockIPNet{
		podIf:                      make(map[podmodel.ID]string),
		networkToVRFID:             make(map[string]uint32),
		podInterfaceToNetwork:      make(map[string]string),
		externalInterfaceToNetwork: make(map[string]string),
	}
}
func (mn *MockIPNet) SetPodIfName(pod podmodel.ID, ifName string) {
	mn.podIf[pod] = ifName
}
func (mn *MockIPNet) SetNodeIP(nodeIP *net.IPNet) {
	mn.Lock()
	defer mn.Unlock()
	mn.nodeIP = nodeIP
}
func (mn *MockIPNet) SetHostInterconnectIfName(ifName string) {
	mn.hostInterconnect = ifName
}
func (mn *MockIPNet) SetVxlanBVIIfName(ifName string) {
	mn.vxlanBVIIfName = ifName
}
func (mn *MockIPNet) SetHostIPs(ips []net.IP) {
	mn.hostIPs = ips
}
func (mn *MockIPNet) SetGetPodCustomIfNetworkName(podID podmodel.ID, ifName string, networkName string) {
	mn.podInterfaceToNetwork[fmt.Sprintf("%s/%s", podID.String(), ifName)] = networkName
}
func (mn *MockIPNet) SetGetExternalIfNetworkName(ifName string, networkName string) {
	mn.externalInterfaceToNetwork[ifName] = networkName
}
func (mn *MockIPNet) SetNetworkVrfID(networkName string, vrfID uint32) {
	mn.networkToVRFID[networkName] = vrfID
}
func (mn *MockIPNet) GetPodIfNames(podNamespace string, podName string) (vppIfName, linuxIfName,
	loopIfName string, exists bool) {
	vppIfName, exists = mn.podIf[podmodel.ID{Name: podName, Namespace: podNamespace}]
	return vppIfName, "", mn.GetPodLoopIfName(podNamespace, podName), exists
}
func (mn *MockIPNet) GetPodCustomIfNames(podNamespace, podName, customIfName string) (ifName string,
	linuxIfName string, exists bool) {
	return customIfName, customIfName, true
}
func (mn *MockIPNet) GetExternalIfName(extIfName string, vlan uint32) (ifName string) {
	if vlan == 0 {
		return extIfName
	}
	return fmt.Sprintf("%s.%d", extIfName, vlan)
}
func (mn *MockIPNet) GetPodLoopIfName(podNamespace string, podName string) string {
	return podLinuxLoopLogicalNamePrefix + "-" + podName + "-" + podNamespace
}
func (mn *MockIPNet) GetPodByIf(ifname string) (podNamespace string, podName string, exists bool) {
	for podID, name := range mn.podIf {
		if name == ifname {
			return podID.Namespace, podID.Name, true
		}
	}
	return "", "", false
}