Documentation ¶
Overview ¶
access.go This file will handle the update for creating access vxlan ports. In some architectures this is a port vlan virtual port
config.go Config entry is based on thrift data structures.
hw.go
init.go
port.go
server.go
utils.go
vtepdb.go File contains db and struct which holds the vtep db. Also it contains the logic for a small FSM which will wait till Next Hop and Next Hop MAC are resolved. The VTEP Encap and Decap functions are defined The pcap listener/sender for the VTEP is also defined
vtepFSM.go File contains the FSM related to setting up a VTEP endpoint
vxlandb.go
Index ¶
- Constants
- Variables
- func CompareVNI(vni uint32, netvni [3]byte) int
- func ConnectToClients(paramsFile string)
- func ConstructPortConfigMap()
- func ConvertInt32ToBool(val int32) bool
- func CopyStruct(source interface{}, destin interface{})
- func CreatePort(ifname string, udpport uint16)
- func CreateVtepRxTx(vtep *VtepDbEntry)
- func CreateVxLAN(c *VxlanConfig)
- func DeProvisionVtep(vtep *VtepDbEntry, del bool)
- func DeRegisterClients()
- func DeletePort(ifname string, udpport uint16)
- func DeleteVtep(c *VtepConfig)
- func DeleteVxLAN(c *VxlanConfig)
- func GetClientPort(paramsFile string, c string) int
- func GetLogger() *logging.Writer
- func GetVtepDB() map[VtepDbKey]*VtepDbEntry
- func GetVxlanDB() map[uint32]*vxlanDbEntry
- func GetVxlanDBEntry(vni uint32) *vxlanDbEntry
- func NewVxlanDbEntry(c *VxlanConfig) *vxlanDbEntry
- func RegisterClients(intf VXLANClientIntf)
- func SaveVtepSrcMacSrcIp(paramspath string)
- func SetLogger(l *logging.Writer)
- func VtepConfigCheck(c *VtepConfig) error
- func VxlanConfigCheck(c *VxlanConfig) error
- func VxlanVtepFsmLogger(str string)
- func VxlanVtepMachineStrStateMapInit()
- type AsicdClient
- type BaseClientIntf
- func (b BaseClientIntf) ConnectToClients(clientFile string)
- func (b BaseClientIntf) ConstructPortConfigMap()
- func (b BaseClientIntf) CreateAccessPortVlan(vlan uint16, intfList []int)
- func (b BaseClientIntf) CreateVtep(vtep *VtepDbEntry, vteplistener chan<- MachineEvent)
- func (b BaseClientIntf) CreateVxlan(vxlan *VxlanConfig)
- func (b BaseClientIntf) CreateVxlanAccess()
- func (b BaseClientIntf) DeleteAccessPortVlan(vlan uint16, intfList []int)
- func (b BaseClientIntf) DeleteVtep(vtep *VtepDbEntry)
- func (b BaseClientIntf) DeleteVxlan(vxlan *VxlanConfig)
- func (b BaseClientIntf) DeleteVxlanAccess()
- func (b BaseClientIntf) GetAccessPorts(vlan uint16)
- func (b BaseClientIntf) GetIntfInfo(name string, intfchan chan<- MachineEvent)
- func (b BaseClientIntf) GetNextHopInfo(ip net.IP, nexthopchan chan<- MachineEvent)
- func (b BaseClientIntf) IsClientIntfType(client VXLANClientIntf, clientStr string) bool
- func (b BaseClientIntf) ResolveNextHopMac(nextHopIp net.IP, nexthopmacchan chan<- MachineEvent)
- func (b BaseClientIntf) SetServerChannels(s *VxLanConfigChannels)
- func (b BaseClientIntf) UpdateAccessPorts()
- type ClientJson
- type MachineEvent
- type PortConfig
- type ServerClients
- type SrcIfIndexEntry
- type VXLANClientBase
- type VXLANClientIntf
- type VXLANServer
- type VtepConfig
- type VtepDbEntry
- type VtepDbKey
- type VtepNextHopInfo
- type VtepUpdate
- type VtepVniSrcIpEntry
- type VxLanConfigChannels
- type VxlanAccessPortVlan
- type VxlanConfig
- type VxlanIntfInfo
- type VxlanNextHopIp
- type VxlanPort
- type VxlanUpdate
- type VxlanVtepMachine
- func (m *VxlanVtepMachine) Apply(r *fsm.Ruleset) *fsm.Machine
- func (vm *VxlanVtepMachine) BEGIN()
- func (m *VxlanVtepMachine) GetCurrStateStr() string
- func (m *VxlanVtepMachine) GetPrevStateStr() string
- func (vm *VxlanVtepMachine) ProcessPostStateProcessing(data interface{})
- func (vm *VxlanVtepMachine) Stop()
- func (vm *VxlanVtepMachine) VxlanVtepConfigHw(m fsm.Machine, data interface{}) fsm.State
- func (vm *VxlanVtepMachine) VxlanVtepDetached(m fsm.Machine, data interface{}) fsm.State
- func (vm *VxlanVtepMachine) VxlanVtepDisabled(m fsm.Machine, data interface{}) fsm.State
- func (vm *VxlanVtepMachine) VxlanVtepInit(m fsm.Machine, data interface{}) fsm.State
- func (vm *VxlanVtepMachine) VxlanVtepInterface(m fsm.Machine, data interface{}) fsm.State
- func (vm *VxlanVtepMachine) VxlanVtepNextHopInfo(m fsm.Machine, data interface{}) fsm.State
- func (vm *VxlanVtepMachine) VxlanVtepResolveNextHopInfoMac(m fsm.Machine, data interface{}) fsm.State
- func (vm *VxlanVtepMachine) VxlanVtepStartListener(m fsm.Machine, data interface{}) fsm.State
- type VxlanVtepStateEvent
- func (se *VxlanVtepStateEvent) CurrentEvent() fsm.Event
- func (se *VxlanVtepStateEvent) CurrentState() fsm.State
- func (se *VxlanVtepStateEvent) EnableLogging(ena bool)
- func (se *VxlanVtepStateEvent) IsLoggerEna() bool
- func (se *VxlanVtepStateEvent) LoggerSet(log func(string))
- func (se *VxlanVtepStateEvent) PreviousEvent() fsm.Event
- func (se *VxlanVtepStateEvent) PreviousState() fsm.State
- func (se *VxlanVtepStateEvent) SetEvent(es string, e fsm.Event)
- func (se *VxlanVtepStateEvent) SetState(s fsm.State)
- func (se *VxlanVtepStateEvent) StateStrMapSet(strMap map[fsm.State]string)
Constants ¶
const ( VXLANBaseClientStr = "BaseClient" VXLANSnapClientStr = "SnapClient" VXLANMockClientStr = "SnapMockTestClient" )
const ( VxlanCommandCreate = iota + 1 VxlanCommandDelete VxlanCommandUpdate )
const ( VtepStatusUp vtepStatus = "UP" VtepStatusDown = "DOWN" VtepStatusAdminDown = "ADMIN DOWN" VtepStatusIncomplete = "INCOMPLETE VTEP PROV" VtepStatusDetached = "ICOMPLETE VTEP VXLAN NOT PROV" VtepStatusIntfUnknown = "SRC INTF UNKNOWN" VtepStatusNextHopUnknown = "NEXT HOP UKNOWN" VtepStatusArpUnresolved = "ARP UNRESOLVED" VtepStatusConfigPending = "CONFIG PENDING" )
constants for the status of the VTEP based on FSM and provisioning
const ( VxlanVtepStateNone = iota + 1 VxlanVtepStateDisabled VxlanVtepStateInit VxlanVtepStateDetached VxlanVtepStateInterface VxlanVtepStateNextHopInfo VxlanVtepStateResolveNextHopMac VxlanVtepStateHwConfig VxlanVtepStateStart )
VxlanVtepState are the states being handled to configure a VTEP. Init - Initial configuration received Disabled - Vtep interface or port is disabled Detached - Vtep has been provisioned without a proper vxlan vni reference Interface - Src Inteface has been resolved this means that the src ip/ src mac
of the VTEP has been discovered
NextHopInfo - RIB has resolved the next hop info so that the packet can reach
the VTEP's destination IP
ResolveNextHopMac - Need to resolve the dstmac of the VTEP, this will come from
ARP
Hwconfig - Configure the VTEP information into the HW Start - Start listening for traffic on the linux vtep interface for packets that
need to have the vxlan header added by VXLAND. Similarly listen for VXLAN packets on the next hop interface.
NOTE: Order here matters, because it will allow for shorter state checking when
wanting to check if a state is less than or greater than a certain state
const ( VxlanVtepEventBegin = iota + 1 VxlanVtepEventUnconditionalFallThrough VxlanVtepEventSrcInterfaceResolved VxlanVtepEventNextHopInfoResolved VxlanVtepEventNextHopInfoMacResolved VxlanVtepEventHwConfigComplete VxlanVtepEventStartListener VxlanVtepEventDisable VxlanVtepEventDetached VxlanVtepEventEnable VxlanVtepEventRetryTimerExpired )
VxlanVtepEvent is used to transition VTEP FSM to various configuration steps
const VxlanVtepMachineModuleStr = "VTEPM"
VxlanVtepMachineModuleStr FSM name
Variables ¶
var ClientIntf []VXLANClientIntf
var NetSwitchMac net.HardwareAddr
var PortConfigMap map[int32]*PortConfig
vtep vlan membership
var SwitchMac [6]uint8
var VxlanCreatePortRxTx = CreatePort
var VxlanDelPortRxTx = DeletePort
var VxlanVtepRxTx = CreateVtepRxTx
var VxlanVtepSrcIp net.IP
var VxlanVtepSrcMac [6]uint8
var VxlanVtepSrcNetMac net.HardwareAddr
var VxlanVtepStateStrMap map[fsm.State]string
VxlanVtepStateStrMap is a map that holds the integer state number to string map
Functions ¶
func CompareVNI ¶
func ConstructPortConfigMap ¶
func ConstructPortConfigMap()
func ConvertInt32ToBool ¶
func CopyStruct ¶
func CopyStruct(source interface{}, destin interface{})
func CreatePort ¶
func CreateVtepRxTx ¶
func CreateVtepRxTx(vtep *VtepDbEntry)
func CreateVxLAN ¶
func CreateVxLAN(c *VxlanConfig)
DeleteVxLAN: Configuration interface for creating the vlxlan instance
func DeProvisionVtep ¶
func DeProvisionVtep(vtep *VtepDbEntry, del bool)
func DeRegisterClients ¶
func DeRegisterClients()
func DeletePort ¶
func DeleteVtep ¶
func DeleteVtep(c *VtepConfig)
func DeleteVxLAN ¶
func DeleteVxLAN(c *VxlanConfig)
DeleteVxLAN: Configuration interface for deleting the vlxlan instance
func GetClientPort ¶
look up the various other daemons based on c string
func GetVtepDB ¶
func GetVtepDB() map[VtepDbKey]*VtepDbEntry
func GetVxlanDBEntry ¶
func GetVxlanDBEntry(vni uint32) *vxlanDbEntry
func NewVxlanDbEntry ¶
func NewVxlanDbEntry(c *VxlanConfig) *vxlanDbEntry
NewVxlanDbEntry: Create a new vxlan db entry
func RegisterClients ¶
func RegisterClients(intf VXLANClientIntf)
SetIntf: The user may implement mulitple interfaces for uses by the server. This was created to avoid import cycle
func SaveVtepSrcMacSrcIp ¶
func SaveVtepSrcMacSrcIp(paramspath string)
func VtepConfigCheck ¶
func VtepConfigCheck(c *VtepConfig) error
VtepConfigCheck Validate the VTEP provisioning
func VxlanConfigCheck ¶
func VxlanConfigCheck(c *VxlanConfig) error
VxlanConfigCheck Validate the VXLAN provisioning
func VxlanVtepFsmLogger ¶
func VxlanVtepFsmLogger(str string)
VxlanVtepFsmLogger is a wrapper above the vxlan logger to be passed into the FSM
func VxlanVtepMachineStrStateMapInit ¶
func VxlanVtepMachineStrStateMapInit()
VxlanVtepState map converts state to string
Types ¶
type AsicdClient ¶
type AsicdClient struct { VXLANClientBase ClientHdl *asicdServices.ASICDServicesClient }
type BaseClientIntf ¶
type BaseClientIntf struct { }
func (BaseClientIntf) ConnectToClients ¶
func (b BaseClientIntf) ConnectToClients(clientFile string)
func (BaseClientIntf) ConstructPortConfigMap ¶
func (b BaseClientIntf) ConstructPortConfigMap()
func (BaseClientIntf) CreateAccessPortVlan ¶
func (b BaseClientIntf) CreateAccessPortVlan(vlan uint16, intfList []int)
func (BaseClientIntf) CreateVtep ¶
func (b BaseClientIntf) CreateVtep(vtep *VtepDbEntry, vteplistener chan<- MachineEvent)
func (BaseClientIntf) CreateVxlan ¶
func (b BaseClientIntf) CreateVxlan(vxlan *VxlanConfig)
func (BaseClientIntf) CreateVxlanAccess ¶
func (b BaseClientIntf) CreateVxlanAccess()
func (BaseClientIntf) DeleteAccessPortVlan ¶
func (b BaseClientIntf) DeleteAccessPortVlan(vlan uint16, intfList []int)
func (BaseClientIntf) DeleteVtep ¶
func (b BaseClientIntf) DeleteVtep(vtep *VtepDbEntry)
func (BaseClientIntf) DeleteVxlan ¶
func (b BaseClientIntf) DeleteVxlan(vxlan *VxlanConfig)
func (BaseClientIntf) DeleteVxlanAccess ¶
func (b BaseClientIntf) DeleteVxlanAccess()
func (BaseClientIntf) GetAccessPorts ¶
func (b BaseClientIntf) GetAccessPorts(vlan uint16)
func (BaseClientIntf) GetIntfInfo ¶
func (b BaseClientIntf) GetIntfInfo(name string, intfchan chan<- MachineEvent)
func (BaseClientIntf) GetNextHopInfo ¶
func (b BaseClientIntf) GetNextHopInfo(ip net.IP, nexthopchan chan<- MachineEvent)
func (BaseClientIntf) IsClientIntfType ¶
func (b BaseClientIntf) IsClientIntfType(client VXLANClientIntf, clientStr string) bool
func (BaseClientIntf) ResolveNextHopMac ¶
func (b BaseClientIntf) ResolveNextHopMac(nextHopIp net.IP, nexthopmacchan chan<- MachineEvent)
func (BaseClientIntf) SetServerChannels ¶
func (b BaseClientIntf) SetServerChannels(s *VxLanConfigChannels)
func (BaseClientIntf) UpdateAccessPorts ¶
func (b BaseClientIntf) UpdateAccessPorts()
type ClientJson ¶
type MachineEvent ¶
MachineEvent is a generic struct to pass data to the FSM contains the event which is being passed. Who sourced the event. The data associated with the event. And a response channel in case the caller needs to wait for completion of the event to occur
type PortConfig ¶
type SrcIfIndexEntry ¶
type SrcIfIndexEntry struct { IfIndex int32 // contains filtered or unexported fields }
type VXLANClientBase ¶
type VXLANClientBase struct { Address string Transport thrift.TTransport PtrProtocolFactory *thrift.TBinaryProtocolFactory IsConnected bool }
type VXLANClientIntf ¶
type VXLANClientIntf interface { IsClientIntfType(client VXLANClientIntf, clientStr string) bool // used to notify server of updates SetServerChannels(s *VxLanConfigChannels) ConnectToClients(clientFile string) ConstructPortConfigMap() // create/delete CreateVtep(vtep *VtepDbEntry, vteplistener chan<- MachineEvent) DeleteVtep(vtep *VtepDbEntry) CreateVxlan(vxlan *VxlanConfig) DeleteVxlan(vxlan *VxlanConfig) // access ports GetAccessPorts(vlan uint16) UpdateAccessPorts() CreateAccessPortVlan(vlan uint16, intfList []int) DeleteAccessPortVlan(vlan uint16, intfList []int) // vtep fsm GetIntfInfo(name string, intfchan chan<- MachineEvent) GetNextHopInfo(ip net.IP, nexthopchan chan<- MachineEvent) ResolveNextHopMac(nextHopIp net.IP, nexthopmacchan chan<- MachineEvent) }
interface class is used to store the communication methods for the various daemon communications
type VXLANServer ¶
type VXLANServer struct { Configchans *VxLanConfigChannels DaemonStatusCh chan sysdCommonDefs.DaemonStatus Paramspath string // location of params path // contains filtered or unexported fields }
var VxlanServer *VXLANServer
func NewVXLANServer ¶
func NewVXLANServer(l *logging.Writer, paramspath string) *VXLANServer
func (*VXLANServer) ConfigListener ¶
func (s *VXLANServer) ConfigListener()
func (*VXLANServer) HandleNextHopChange ¶
func (s *VXLANServer) HandleNextHopChange(dip net.IP, nexthopip net.IP, nexthopIfIndex int32, nexthopIfName string, reachable bool)
HandleNextHopChange: Handle notifications from RIB that the next hop reachabilty has changed
type VtepConfig ¶
type VtepConfig struct { Vni uint32 `SNAPROUTE: KEY` //VxLAN ID. VtepName string //VTEP instance name. SrcIfName string //Source interface ifIndex. UDP uint16 //vxlan udp port. Deafult is the iana default udp port TTL uint16 //TTL of the Vxlan tunnel TOS uint16 //Type of Service InnerVlanHandlingMode int32 //The inner vlan tag handling mode. Learning bool //specifies if unknown source link layer addresses and IP addresses are entered into the VXLAN device forwarding database. Rsc bool //specifies if route short circuit is turned on. L2miss bool //specifies if netlink LLADDR miss notifications are generated. L3miss bool //specifies if netlink IP ADDR miss notifications are generated. TunnelSrcIp net.IP //Source IP address for the static VxLAN tunnel TunnelDstIp net.IP //Destination IP address for the static VxLAN tunnel VlanId uint16 //Vlan Id to encapsulate with the vtep tunnel ethernet header TunnelSrcMac net.HardwareAddr //Src Mac assigned to the VTEP within this VxLAN. If an address is not assigned the the local switch address will be used. TunnelDstMac net.HardwareAddr // Optional - may be looked up based on TunnelNextHopIp TunnelNextHopIP net.IP // NextHopIP is used to find the DMAC for the tunnel within Asicd }
tunnel endpoint for the VxLAN
func ConvertVxlanVtepInstanceToVtepConfig ¶
func ConvertVxlanVtepInstanceToVtepConfig(c *vxland.VxlanVtepInstance) (*VtepConfig, error)
ConvertVxlanVtepInstanceToVtepConfig: Convert thrift struct to vxlan config
type VtepDbEntry ¶
type VtepDbEntry struct { // reference to the vxlan db, and value used in encap/decap Vni uint32 // name of this vtep interface VtepName string // interface name which vtep will get src ip/mac info from SrcIfName string // interface id which vtep will get src ip/mac info from SrcIfIndex int32 // dst UDP port UDP uint16 // TTL used in the ip header in the vxlan header TTL uint16 // Source Ip used in ip header in the vxlan header SrcIp net.IP // Destination Ip used in ip header in the vxlan header DstIp net.IP // Vlan to be used to in the ethernet header in the vxlan header VlanId uint16 // Source MAC to be used to in the ethernet header in the vxlan header SrcMac net.HardwareAddr // Destination MAC to be used to in the ethernet header in the vxlan header DstMac net.HardwareAddr // interface id for which packets vxlan packets should rx/tx for this vtep VtepIfIndex int32 // Next Hop Ip used to find the next hop MAC which will be used as the DstMac of the vxlan header NextHop VtepNextHopInfo // Enable/Disable state Enable bool // handle name used to rx/tx packets to linux if VtepHandleName string VxlanVtepMachineFsm *VxlanVtepMachine // contains filtered or unexported fields }
func CreateVtep ¶
func CreateVtep(c *VtepConfig) *VtepDbEntry
func GetVtepDBEntry ¶
func GetVtepDBEntry(key *VtepDbKey) *VtepDbEntry
func NewVtepDbEntry ¶
func NewVtepDbEntry(c *VtepConfig) *VtepDbEntry
func (*VtepDbEntry) GetRxStats ¶
func (vtep *VtepDbEntry) GetRxStats() uint64
func (*VtepDbEntry) GetTxStats ¶
func (vtep *VtepDbEntry) GetTxStats() uint64
func (*VtepDbEntry) VxlanVtepMachineMain ¶
func (vtep *VtepDbEntry) VxlanVtepMachineMain()
VxlanVtepMachineMain:
type VtepDbKey ¶
type VtepDbKey struct {
// contains filtered or unexported fields
}
VtepDbKey Holds the key for the VtepDB
type VtepUpdate ¶
type VtepUpdate struct { Oldconfig VtepConfig Newconfig VtepConfig Attr []bool }
type VtepVniSrcIpEntry ¶
type VtepVniSrcIpEntry struct {
// contains filtered or unexported fields
}
pcap handle (vtep) per source ip defined
type VxLanConfigChannels ¶
type VxLanConfigChannels struct { Vxlancreate chan VxlanConfig Vxlandelete chan VxlanConfig Vxlanupdate chan VxlanUpdate Vtepcreate chan VtepConfig Vtepdelete chan VtepConfig Vtepupdate chan VtepUpdate VxlanAccessPortVlanUpdate chan VxlanAccessPortVlan VxlanNextHopUpdate chan VxlanNextHopIp VxlanPortCreate chan PortConfig Vxlanintfinfo chan VxlanIntfInfo }
func GetConfigChannels ¶
func GetConfigChannels() *VxLanConfigChannels
type VxlanAccessPortVlan ¶
type VxlanConfig ¶
type VxlanConfig struct { VNI uint32 VlanId uint16 // used to tag inner ethernet frame when egressing Group net.IP // multicast group IP MTU uint32 // MTU size for each VTEP }
bridge for the VNI
func ConvertVxlanInstanceToVxlanConfig ¶
func ConvertVxlanInstanceToVxlanConfig(c *vxland.VxlanInstance) (*VxlanConfig, error)
ConvertVxlanInstanceToVxlanConfig: Convert thrift struct to vxlan config and check that db entry exists already
type VxlanIntfInfo ¶
type VxlanNextHopIp ¶
type VxlanPort ¶
type VxlanPort struct { IfName string // only going to listen for specific vxlan ports // IANA 4789, Linux 8472 UDP []uint16 VtepRefCnt uint32 // contains filtered or unexported fields }
func GetVxlanPortDbEntry ¶
func (*VxlanPort) GetRxStats ¶
func (*VxlanPort) GetTxStats ¶
func (*VxlanPort) GetVtepRefCnt ¶
func (*VxlanPort) IsMyVtepPkt ¶
func (p *VxlanPort) IsMyVtepPkt(packet gopacket.Packet) (*VtepDbEntry, bool)
type VxlanUpdate ¶
type VxlanUpdate struct { Oldconfig VxlanConfig Newconfig VxlanConfig Attr []bool }
type VxlanVtepMachine ¶
type VxlanVtepMachine struct { Machine *fsm.Machine // machine specific events VxlanVtepEvents chan MachineEvent // contains filtered or unexported fields }
VxlanVtepMachine holds FSM and current State and event channels for State transitions
func NewVxlanVtepFSMMachine ¶
func NewVxlanVtepFSMMachine(vtep *VtepDbEntry) *VxlanVtepMachine
NewVxlanVtepFSMMachine will create a new instance of the VxlanVtepMachine
func VxlanVtepMachineFSMBuild ¶
func VxlanVtepMachineFSMBuild(vtep *VtepDbEntry) *VxlanVtepMachine
func (*VxlanVtepMachine) Apply ¶
func (m *VxlanVtepMachine) Apply(r *fsm.Ruleset) *fsm.Machine
A helpful function that lets us apply arbitrary rulesets to this instances State machine without reallocating the machine.
func (*VxlanVtepMachine) BEGIN ¶
func (vm *VxlanVtepMachine) BEGIN()
func (*VxlanVtepMachine) GetCurrStateStr ¶
func (m *VxlanVtepMachine) GetCurrStateStr() string
func (*VxlanVtepMachine) GetPrevStateStr ¶
func (m *VxlanVtepMachine) GetPrevStateStr() string
func (*VxlanVtepMachine) ProcessPostStateProcessing ¶
func (vm *VxlanVtepMachine) ProcessPostStateProcessing(data interface{})
func (*VxlanVtepMachine) Stop ¶
func (vm *VxlanVtepMachine) Stop()
Stop should clean up all resources
func (*VxlanVtepMachine) VxlanVtepConfigHw ¶
func (vm *VxlanVtepMachine) VxlanVtepConfigHw(m fsm.Machine, data interface{}) fsm.State
VxlanVtepConfigHw is the state which all VTEP info is known and now we are ready to configure this info into the hw. Stop the running timer as well
func (*VxlanVtepMachine) VxlanVtepDetached ¶
func (vm *VxlanVtepMachine) VxlanVtepDetached(m fsm.Machine, data interface{}) fsm.State
VxlanVtepInterface is the state which the VTEP has not been attached to a proper VXLAN Vni domain
func (*VxlanVtepMachine) VxlanVtepDisabled ¶
func (vm *VxlanVtepMachine) VxlanVtepDisabled(m fsm.Machine, data interface{}) fsm.State
VxlanVtepDisabled is the state which holds says the vtep interface is disabled and should not process any packets. It will be deprovisioned in the hw as a result
func (*VxlanVtepMachine) VxlanVtepInit ¶
func (vm *VxlanVtepMachine) VxlanVtepInit(m fsm.Machine, data interface{}) fsm.State
VxlanVtepInit is the state at which we start the VTEP FSM timer Then try and resolve the Src Interface info which will be used as the Src Info of the VXLAN header (IP/MAC)
func (*VxlanVtepMachine) VxlanVtepInterface ¶
func (vm *VxlanVtepMachine) VxlanVtepInterface(m fsm.Machine, data interface{}) fsm.State
VxlanVtepInterface is the state at which the source interface has been resolved, thus we save the info found, then we try and resolve the next hop info
for the destination MAC. This info should come from RIB
func (*VxlanVtepMachine) VxlanVtepNextHopInfo ¶
func (vm *VxlanVtepMachine) VxlanVtepNextHopInfo(m fsm.Machine, data interface{}) fsm.State
VxlanVtepNextHopInfo is the state at which the next hop info is found and the data is stored on the vtep. It will then try to resolve the mac address of the next hop ip
func (*VxlanVtepMachine) VxlanVtepResolveNextHopInfoMac ¶
func (vm *VxlanVtepMachine) VxlanVtepResolveNextHopInfoMac(m fsm.Machine, data interface{}) fsm.State
VxlanVtepResolveNextHopInfoMac is the state at which the next hop ip mac address has been resolved via ARP. The info is then stored against the vtep. No action as this state will immediately tranisition to VxlanVtepStateHwConfig
func (*VxlanVtepMachine) VxlanVtepStartListener ¶
func (vm *VxlanVtepMachine) VxlanVtepStartListener(m fsm.Machine, data interface{}) fsm.State
VxlanVtepStartListener is the state which the VTEP will start to listen on the linux interfaces for VXLAN packets as well as listen for packets which are transmitted out of the vtep interface
type VxlanVtepStateEvent ¶
type VxlanVtepStateEvent struct {
// contains filtered or unexported fields
}
VxlanVtepStateEvent is the interface struct for the fsm
func (*VxlanVtepStateEvent) CurrentEvent ¶
func (se *VxlanVtepStateEvent) CurrentEvent() fsm.Event
func (*VxlanVtepStateEvent) CurrentState ¶
func (se *VxlanVtepStateEvent) CurrentState() fsm.State
func (*VxlanVtepStateEvent) EnableLogging ¶
func (se *VxlanVtepStateEvent) EnableLogging(ena bool)
func (*VxlanVtepStateEvent) IsLoggerEna ¶
func (se *VxlanVtepStateEvent) IsLoggerEna() bool
func (*VxlanVtepStateEvent) LoggerSet ¶
func (se *VxlanVtepStateEvent) LoggerSet(log func(string))
func (*VxlanVtepStateEvent) PreviousEvent ¶
func (se *VxlanVtepStateEvent) PreviousEvent() fsm.Event
func (*VxlanVtepStateEvent) PreviousState ¶
func (se *VxlanVtepStateEvent) PreviousState() fsm.State
func (*VxlanVtepStateEvent) SetEvent ¶
func (se *VxlanVtepStateEvent) SetEvent(es string, e fsm.Event)
func (*VxlanVtepStateEvent) SetState ¶
func (se *VxlanVtepStateEvent) SetState(s fsm.State)
func (*VxlanVtepStateEvent) StateStrMapSet ¶
func (se *VxlanVtepStateEvent) StateStrMapSet(strMap map[fsm.State]string)