12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- // Package overlayutils provides utility functions for overlay networks
- package overlayutils
- import (
- "fmt"
- "strconv"
- "strings"
- "sync"
- )
- var (
- mutex sync.RWMutex
- vxlanUDPPort = defaultVXLANUDPPort
- )
- const defaultVXLANUDPPort uint32 = 4789
- // ConfigVXLANUDPPort configures the VXLAN UDP port (data path port) number.
- // If no port is set, the default (4789) is returned. Valid port numbers are
- // between 1024 and 49151.
- func ConfigVXLANUDPPort(vxlanPort uint32) error {
- if vxlanPort == 0 {
- vxlanPort = defaultVXLANUDPPort
- }
- // IANA procedures for each range in detail
- // The Well Known Ports, aka the System Ports, from 0-1023
- // The Registered Ports, aka the User Ports, from 1024-49151
- // The Dynamic Ports, aka the Private Ports, from 49152-65535
- // So we can allow range between 1024 to 49151
- if vxlanPort < 1024 || vxlanPort > 49151 {
- return fmt.Errorf("VXLAN UDP port number is not in valid range (1024-49151): %d", vxlanPort)
- }
- mutex.Lock()
- vxlanUDPPort = vxlanPort
- mutex.Unlock()
- return nil
- }
- // VXLANUDPPort returns Vxlan UDP port number
- func VXLANUDPPort() uint32 {
- mutex.RLock()
- defer mutex.RUnlock()
- return vxlanUDPPort
- }
- // AppendVNIList appends the VNI values encoded as a CSV string to slice.
- func AppendVNIList(vnis []uint32, csv string) ([]uint32, error) {
- for {
- var (
- vniStr string
- found bool
- )
- vniStr, csv, found = strings.Cut(csv, ",")
- vni, err := strconv.Atoi(vniStr)
- if err != nil {
- return vnis, fmt.Errorf("invalid vxlan id value %q passed", vniStr)
- }
- vnis = append(vnis, uint32(vni))
- if !found {
- return vnis, nil
- }
- }
- }
|