Documentation
¶
Overview ¶
Example (IpRangesOverlap) ¶
rangePairs := [][2]string{ {"10.1.1.1-10.1.1.2", "10.1.1.3-10.1.1.4"}, {"10.1.1.1-10.1.2.1", "10.1.1.254-10.1.1.255"}, {"10.1.1.1-10.1.1.6", "10.1.1.5-10.1.1.9"}, {"10.1.1.5-10.1.1.9", "10.1.1.1-10.1.1.6"}, {"::1-::2", "::3-::4"}, {"::1-::6", "::5-::9"}, {"::5-::9", "::1-::6"}, } for _, pair := range rangePairs { r0, _ := parseIPRange(pair[0]) r1, _ := parseIPRange(pair[1]) result := IPRangesOverlap(r0, r1) fmt.Printf("Range1: %v, Range2: %v, overlapped: %t\n", r0, r1, result) } // also do a couple of tests with ranges that have no end singleIPRange := &shared.IPRange{ Start: net.ParseIP("10.1.1.4"), } otherRange, _ := parseIPRange("10.1.1.1-10.1.1.6") fmt.Printf("Range1: %v, Range2: %v, overlapped: %t\n", singleIPRange, otherRange, IPRangesOverlap(singleIPRange, otherRange)) fmt.Printf("Range1: %v, Range2: %v, overlapped: %t\n", otherRange, singleIPRange, IPRangesOverlap(otherRange, singleIPRange)) fmt.Printf("Range1: %v, Range2: %v, overlapped: %t\n", singleIPRange, singleIPRange, IPRangesOverlap(singleIPRange, singleIPRange)) otherRange, _ = parseIPRange("10.1.1.8-10.1.1.9") fmt.Printf("Range1: %v, Range2: %v, overlapped: %t\n", singleIPRange, otherRange, IPRangesOverlap(singleIPRange, otherRange)) fmt.Printf("Range1: %v, Range2: %v, overlapped: %t\n", otherRange, singleIPRange, IPRangesOverlap(otherRange, singleIPRange))
Output: Range1: 10.1.1.1-10.1.1.2, Range2: 10.1.1.3-10.1.1.4, overlapped: false Range1: 10.1.1.1-10.1.2.1, Range2: 10.1.1.254-10.1.1.255, overlapped: true Range1: 10.1.1.1-10.1.1.6, Range2: 10.1.1.5-10.1.1.9, overlapped: true Range1: 10.1.1.5-10.1.1.9, Range2: 10.1.1.1-10.1.1.6, overlapped: true Range1: ::1-::2, Range2: ::3-::4, overlapped: false Range1: ::1-::6, Range2: ::5-::9, overlapped: true Range1: ::5-::9, Range2: ::1-::6, overlapped: true Range1: 10.1.1.4, Range2: 10.1.1.1-10.1.1.6, overlapped: true Range1: 10.1.1.1-10.1.1.6, Range2: 10.1.1.4, overlapped: true Range1: 10.1.1.4, Range2: 10.1.1.4, overlapped: true Range1: 10.1.1.4, Range2: 10.1.1.8-10.1.1.9, overlapped: false Range1: 10.1.1.8-10.1.1.9, Range2: 10.1.1.4, overlapped: false
Example (ParseIPRange) ¶
_, allowedv4NetworkA, _ := net.ParseCIDR("192.168.1.0/24") _, allowedv4NetworkB, _ := net.ParseCIDR("192.168.0.0/16") _, allowedv6NetworkA, _ := net.ParseCIDR("fd22:c952:653e:3df6::/64") _, allowedv6NetworkB, _ := net.ParseCIDR("fd22:c952:653e::/48") ipRanges := []string{ // Ranges within allowedv4NetworkA. "192.168.1.1-192.168.1.255", "0.0.0.1-192.168.1.255", "0.0.0.1-0.0.0.255", // Ranges outsde of allowedv4NetworkA but within allowedv4NetworkB. "192.168.0.1-192.168.0.255", "192.168.0.0-192.168.0.0", "0.0.2.0-0.0.2.255", // Invalid IP ranges. "0.0.0.0.1-192.168.1.255", "192.0.0.1-192.0.0.255", "0.0.0.1-1.0.0.255", "0.0.2.1-0.0.0.255", // Ranges within allowedv6NetworkA. "fd22:c952:653e:3df6::1-fd22:c952:653e:3df6::FFFF", "::1-::FFFF", // Ranges outsde of allowedv6NetworkA but within allowedv6NetworkB. "fd22:c952:653e:FFFF::1-fd22:c952:653e:FFFF::FFFF", "::AAAA:FFFF:FFFF:FFFF:1-::AAAA:FFFF:FFFF:FFFF:FFFF", } fmt.Println("With allowed networks") for _, ipRange := range ipRanges { parsedRange, err := parseIPRange(ipRange, allowedv4NetworkA, allowedv4NetworkB, allowedv6NetworkA, allowedv6NetworkB) if err != nil { fmt.Printf("Err: %v\n", err) continue } fmt.Printf("Start: %s, End: %s\n", parsedRange.Start.String(), parsedRange.End.String()) } fmt.Println("Without allowed networks") for _, ipRange := range ipRanges { parsedRange, err := parseIPRange(ipRange) if err != nil { fmt.Printf("Err: %v\n", err) continue } fmt.Printf("Start: %s, End: %s\n", parsedRange.Start.String(), parsedRange.End.String()) }
Output: With allowed networks Start: 192.168.1.1, End: 192.168.1.255 Start: 192.168.1.1, End: 192.168.1.255 Start: 192.168.1.1, End: 192.168.1.255 Start: 192.168.0.1, End: 192.168.0.255 Start: 192.168.0.0, End: 192.168.0.0 Start: 192.168.2.0, End: 192.168.2.255 Err: Start IP "0.0.0.0.1" is invalid Err: IP range "192.0.0.1-192.0.0.255" does not fall within any of the allowed networks [192.168.1.0/24 192.168.0.0/16 fd22:c952:653e:3df6::/64 fd22:c952:653e::/48] Err: IP range "0.0.0.1-1.0.0.255" does not fall within any of the allowed networks [192.168.1.0/24 192.168.0.0/16 fd22:c952:653e:3df6::/64 fd22:c952:653e::/48] Err: Start IP "0.0.2.1" must be less than End IP "0.0.0.255" Start: fd22:c952:653e:3df6::1, End: fd22:c952:653e:3df6::ffff Start: fd22:c952:653e:3df6::1, End: fd22:c952:653e:3df6::ffff Start: fd22:c952:653e:ffff::1, End: fd22:c952:653e:ffff::ffff Start: fd22:c952:653e:aaaa:ffff:ffff:ffff:1, End: fd22:c952:653e:aaaa:ffff:ffff:ffff:ffff Without allowed networks Start: 192.168.1.1, End: 192.168.1.255 Start: 0.0.0.1, End: 192.168.1.255 Start: 0.0.0.1, End: 0.0.0.255 Start: 192.168.0.1, End: 192.168.0.255 Start: 192.168.0.0, End: 192.168.0.0 Start: 0.0.2.0, End: 0.0.2.255 Err: Start IP "0.0.0.0.1" is invalid Start: 192.0.0.1, End: 192.0.0.255 Start: 0.0.0.1, End: 1.0.0.255 Err: Start IP "0.0.2.1" must be less than End IP "0.0.0.255" Start: fd22:c952:653e:3df6::1, End: fd22:c952:653e:3df6::ffff Start: ::1, End: ::ffff Start: fd22:c952:653e:ffff::1, End: fd22:c952:653e:ffff::ffff Start: ::aaaa:ffff:ffff:ffff:1, End: ::aaaa:ffff:ffff:ffff:ffff
Index ¶
- Constants
- Variables
- func AttachInterface(bridgeName string, devName string) error
- func BridgeVLANDefaultPVID(interfaceName string) (string, error)
- func BridgeVLANFilterSetStatus(interfaceName string, status string) error
- func BridgeVLANFilteringStatus(interfaceName string) (string, error)
- func BridgeVLANSetDefaultPVID(interfaceName string, vlanID string) error
- func DefaultGatewaySubnetV4() (*net.IPNet, string, error)
- func DetachInterface(bridgeName string, devName string) error
- func ForkdnsServersList(networkName string) ([]string, error)
- func GetDevMTU(devName string) (uint32, error)
- func GetHostDevice(parent string, vlan string) string
- func GetLeaseAddresses(networkName string, hwaddr string) ([]net.IP, error)
- func GetMACSlice(hwaddr string) []string
- func IPRangesOverlap(r1, r2 *shared.IPRange) bool
- func InterfaceBindWait(ifName string) error
- func InterfaceExists(nic string) bool
- func InterfaceRemove(nic string) error
- func InterfaceStatus(nicName string) ([]net.IP, bool, error)
- func IsNativeBridge(bridgeName string) bool
- func RandomDevName(prefix string) string
- func SRIOVFindFreeVirtualFunction(s *state.State, parentDev string) (string, int, error)
- func SRIOVGetHostDevicesInUse(s *state.State) (map[string]struct{}, error)
- func SRIOVGetVFDevicePCISlot(parentDev string, vfID string) (pci.Device, error)
- func SubnetContains(outerSubnet *net.IPNet, innerSubnet *net.IPNet) bool
- func SubnetIterate(subnet *net.IPNet, ipFunc func(ip net.IP) error) error
- func SubnetParseAppend(subnets []*net.IPNet, parseSubnet ...string) ([]*net.IPNet, error)
- func UpdateDNSMasqStatic(s *state.State, networkName string) error
- func UsedBy(s *state.State, networkProjectName string, networkName string, firstOnly bool) ([]string, error)
- func VLANInterfaceCreate(parent string, vlanDevice string, vlanID string, gvrp bool) (bool, error)
- type Info
- type NeighbourIP
- type NeighbourIPState
- type Network
- type OVNInstanceNICSetupOpts
- type OVNInstanceNICStopOpts
- type Type
Examples ¶
Constants ¶
const ForkdnsServersListFile = "servers.conf"
ForkdnsServersListFile file that contains the server candidates list.
const ForkdnsServersListPath = "forkdns.servers"
ForkdnsServersListPath defines the path that contains the forkdns server candidate file.
const NeighbourIPStateDelay = "DELAY"
NeighbourIPStateDelay neighbor entry validation is currently delayed.
const NeighbourIPStateFailed = "FAILED"
NeighbourIPStateFailed max number of probes exceeded without success, neighbor validation has ultimately failed.
const NeighbourIPStateIncomplete = "INCOMPLETE"
NeighbourIPStateIncomplete the neighbour entry has not (yet) been validated/resolved.
const NeighbourIPStateNoARP = "NOARP"
NeighbourIPStateNoARP the neighbour entry is valid. No attempts to validate this entry will be made but it can be removed when its lifetime expires.
const NeighbourIPStateNone = "NONE"
NeighbourIPStateNone this is a pseudo state used when initially creating a neighbour entry or after trying to remove it before it becomes free to do so.
const NeighbourIPStatePermanent = "PERMANENT"
NeighbourIPStatePermanent the neighbour entry is valid forever and can be only be removed administratively.
const NeighbourIPStateProbe = "PROBE"
NeighbourIPStateProbe neighbor is being probed.
const NeighbourIPStateReachable = "REACHABLE"
NeighbourIPStateReachable the neighbour entry is valid until the reachability timeout expires.
const NeighbourIPStateStale = "STALE"
NeighbourIPStateStale the neighbour entry is valid but suspicious.
Variables ¶
var ErrUnknownDriver = fmt.Errorf("Unknown driver")
ErrUnknownDriver is the "Unknown driver" error
Functions ¶
func AttachInterface ¶
AttachInterface attaches an interface to a bridge.
func BridgeVLANDefaultPVID ¶
BridgeVLANDefaultPVID returns the VLAN default port VLAN ID (PVID).
func BridgeVLANFilterSetStatus ¶
BridgeVLANFilterSetStatus sets the status of VLAN filtering on a bridge interface.
func BridgeVLANFilteringStatus ¶
BridgeVLANFilteringStatus returns whether VLAN filtering is enabled on a bridge interface.
func BridgeVLANSetDefaultPVID ¶
BridgeVLANSetDefaultPVID sets the VLAN default port VLAN ID (PVID).
func DefaultGatewaySubnetV4 ¶
DefaultGatewaySubnetV4 returns subnet of default gateway interface.
func DetachInterface ¶
DetachInterface detaches an interface from a bridge.
func ForkdnsServersList ¶
ForkdnsServersList reads the server list file and returns the list as a slice.
func GetHostDevice ¶
GetHostDevice returns the interface name to use for a combination of parent device name and VLAN ID. If no vlan ID supplied, parent name is returned unmodified. If non-empty VLAN ID is supplied then it will look for an existing VLAN device and return that, otherwise it will return the default "parent.vlan" format as name.
func GetLeaseAddresses ¶
GetLeaseAddresses returns the lease addresses for a network and hwaddr.
func IPRangesOverlap ¶
IPRangesOverlap checks whether two ip ranges have ip addresses in common
func InterfaceBindWait ¶
InterfaceBindWait waits for network interface to appear after being bound to a driver.
func InterfaceExists ¶
InterfaceExists returns true if network interface exists.
func InterfaceRemove ¶
InterfaceRemove removes a network interface by name.
func InterfaceStatus ¶
InterfaceStatus returns the global unicast IP addresses configured on an interface and whether it is up or not.
func IsNativeBridge ¶
IsNativeBridge returns whether the bridge name specified is a Linux native bridge.
func RandomDevName ¶
RandomDevName returns a random device name with prefix. If the random string combined with the prefix exceeds 13 characters then empty string is returned. This is to ensure we support buggy dhclient applications: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=858580
func SRIOVFindFreeVirtualFunction ¶
SRIOVFindFreeVirtualFunction looks on the specified parent device for an unused virtual function. Returns the name of the interface and virtual function index ID if found, error if not.
func SRIOVGetHostDevicesInUse ¶
SRIOVGetHostDevicesInUse returns a map of host device names that have been used by devices in other instances and networks on the local node. Used when selecting physical and SR-IOV VF devices to avoid conflicts.
func SRIOVGetVFDevicePCISlot ¶
SRIOVGetVFDevicePCISlot returns the PCI slot name for a network virtual function device.
func SubnetContains ¶
SubnetContains returns true if outerSubnet contains innerSubnet.
func SubnetIterate ¶
SubnetIterate iterates through each IP in a subnet calling a function for each IP. If the ipFunc returns a non-nil error then the iteration stops and the error is returned.
func SubnetParseAppend ¶
SubnetParseAppend parses one or more string CIDR subnets. Appends to the supplied slice. Returns subnets slice.
func UpdateDNSMasqStatic ¶
UpdateDNSMasqStatic rebuilds the DNSMasq static allocations.
func UsedBy ¶
func UsedBy(s *state.State, networkProjectName string, networkName string, firstOnly bool) ([]string, error)
UsedBy returns list of API resources using network. Accepts firstOnly argument to indicate that only the first resource using network should be returned. This can help to quickly check if the network is in use.
Types ¶
type Info ¶
type Info struct { Projects bool // Indicates if driver can be used in network enabled projects. NodeSpecificConfig bool // Whether driver has cluster node specific config as a prerequisite for creation. }
Info represents information about a network driver.
type NeighbourIP ¶
type NeighbourIP struct { IP net.IP State NeighbourIPState }
NeighbourIP represents an IP neighbour entry.
func GetNeighbourIPs ¶
func GetNeighbourIPs(interfaceName string, hwaddr string) ([]NeighbourIP, error)
GetNeighbourIPs returns the IP addresses in the neighbour cache for a particular interface and MAC.
type NeighbourIPState ¶
type NeighbourIPState string
NeighbourIPState can be { PERMANENT | NOARP | REACHABLE | STALE | NONE | INCOMPLETE | DELAY | PROBE | FAILED }.
type Network ¶
type Network interface { Type // Config. Validate(config map[string]string) error ID() int64 Name() string Project() string Description() string Status() string LocalStatus() string Config() map[string]string IsUsed() (bool, error) IsManaged() bool DHCPv4Subnet() *net.IPNet DHCPv6Subnet() *net.IPNet DHCPv4Ranges() []shared.IPRange DHCPv6Ranges() []shared.IPRange // Actions. Create(clientType request.ClientType) error Start() error Stop() error Rename(name string) error Update(newNetwork api.NetworkPut, targetNode string, clientType request.ClientType) error HandleHeartbeat(heartbeatData *cluster.APIHeartbeat) error Delete(clientType request.ClientType) error // contains filtered or unexported methods }
Network represents an instantiated LXD network.
type OVNInstanceNICSetupOpts ¶
type OVNInstanceNICSetupOpts struct { InstanceUUID string DeviceName string DeviceConfig deviceConfig.Device UplinkConfig map[string]string DNSName string }
OVNInstanceNICSetupOpts options for starting an OVN Instance NIC.
type OVNInstanceNICStopOpts ¶
type OVNInstanceNICStopOpts struct { InstanceUUID string DeviceName string DeviceConfig deviceConfig.Device }
OVNInstanceNICStopOpts options for stopping an OVN Instance NIC.