server

package
v0.0.0-...-ac9ef1f Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 5, 2017 License: Apache-2.0 Imports: 30 Imported by: 0

Documentation

Index

Constants

View Source
const (
	DEFAULT_BFD_VERSION                   = 1
	DEFAULT_DETECT_MULTI                  = 3
	DEFAULT_DESIRED_MIN_TX_INTERVAL       = 250000
	DEFAULT_REQUIRED_MIN_RX_INTERVAL      = 250000
	DEFAULT_REQUIRED_MIN_ECHO_RX_INTERVAL = 0
	DEFAULT_CONTROL_PACKET_LEN            = 24
	DEST_PORT                             = 3784
	SRC_PORT                              = 49152
	DEST_PORT_LAG                         = 6784
	SRC_PORT_LAG                          = 49153
	STARTUP_TX_INTERVAL                   = 2000000
	STARTUP_RX_INTERVAL                   = 2000000
	TX_JITTER                             = 10 //Timer will be running at 0 to 10% less than TX_INTERVAL
)

Constants

View Source
const (
	BFD_MP             = 0x01 // Multipoint
	BFD_DEMAND         = 0x02 // Demand mode
	BFD_AUTH_PRESENT   = 0x04 // Authentication present
	BFD_CP_INDEPENDENT = 0x08 // Control plane independent
	BFD_FINAL          = 0x10 // Final message, response to Poll
	BFD_POLL           = 0x20 // Poll message
)

Flags in BFD Control packet

View Source
const (
	PACKET_QUEUE_SIZE = 128
	MAX_NUM_SESSIONS  = 1024
)

Variables

This section is empty.

Functions

This section is empty.

Types

type AsicdClient

type AsicdClient struct {
	ipcutils.IPCClientBase
	ClientHdl *asicdServices.ASICDServicesClient
}

type AuthenticationType

type AuthenticationType uint8
const (
	BFD_AUTH_TYPE_RESERVED        AuthenticationType = 0 // Reserved
	BFD_AUTH_TYPE_SIMPLE          AuthenticationType = 1 // Simple Password
	BFD_AUTH_TYPE_KEYED_MD5       AuthenticationType = 2 // Keyed MD5
	BFD_AUTH_TYPE_METICULOUS_MD5  AuthenticationType = 3 // Meticulous Keyed MD5
	BFD_AUTH_TYPE_KEYED_SHA1      AuthenticationType = 4 // Keyed SHA1
	BFD_AUTH_TYPE_METICULOUS_SHA1 AuthenticationType = 5 // Meticulous Keyed SHA1
)

type BFDServer

type BFDServer struct {
	ServerStartedCh chan bool

	GlobalConfigCh chan GlobalConfig

	CreateSessionCh    chan BfdSessionMgmt
	DeleteSessionCh    chan BfdSessionMgmt
	AdminUpSessionCh   chan BfdSessionMgmt
	AdminDownSessionCh chan BfdSessionMgmt
	ResetSessionCh     chan int32
	SessionConfigCh    chan SessionConfig
	CreatedSessionCh   chan int32

	FailedSessionClientCh chan int32
	BfdPacketRecvCh       chan RecvedBfdPacket
	SessionParamConfigCh  chan SessionParamConfig
	SessionParamDeleteCh  chan string
	// contains filtered or unexported fields
}

func NewBFDServer

func NewBFDServer(logger *logging.Writer) *BFDServer

func (*BFDServer) AdminDownBfdSession

func (server *BFDServer) AdminDownBfdSession(sessionMgmt BfdSessionMgmt) error

AdminDownBfdSession ceases the session.

func (*BFDServer) AdminDownPerLinkBfdSessions

func (server *BFDServer) AdminDownPerLinkBfdSessions(DestIp string) error

func (*BFDServer) AdminUpBfdSession

func (server *BFDServer) AdminUpBfdSession(sessionMgmt BfdSessionMgmt) error

AdminUpBfdSession ceases the session.

func (*BFDServer) AdminUpPerLinkBfdSessions

func (server *BFDServer) AdminUpPerLinkBfdSessions(DestIp string) error

func (*BFDServer) BuildLagPropertyMap

func (server *BFDServer) BuildLagPropertyMap() error

func (*BFDServer) BuildPortPropertyMap

func (server *BFDServer) BuildPortPropertyMap() error

func (*BFDServer) ConnectToServers

func (server *BFDServer) ConnectToServers(paramsFile string)

func (*BFDServer) ConvertBfdAuthTypeStrToVal

func (server *BFDServer) ConvertBfdAuthTypeStrToVal(authType string) AuthenticationType

func (*BFDServer) ConvertBfdAuthTypeValToStr

func (server *BFDServer) ConvertBfdAuthTypeValToStr(authType AuthenticationType) string

func (*BFDServer) ConvertBfdSessionDiagValToStr

func (server *BFDServer) ConvertBfdSessionDiagValToStr(diag BfdDiagnostic) string

func (*BFDServer) ConvertBfdSessionStateValToStr

func (server *BFDServer) ConvertBfdSessionStateValToStr(state BfdSessionState) string

func (*BFDServer) CreateASICdSubscriber

func (server *BFDServer) CreateASICdSubscriber()

func (*BFDServer) CreateBfdSession

func (server *BFDServer) CreateBfdSession(sessionMgmt BfdSessionMgmt) (*BfdSession, error)

CreateBfdSession initializes a session and starts cpntrol packets exchange. This function is called when a protocol registers with BFD to monitor a destination IP.

func (*BFDServer) CreateRIBdSubscriber

func (server *BFDServer) CreateRIBdSubscriber()

func (*BFDServer) DeleteBfdSession

func (server *BFDServer) DeleteBfdSession(sessionMgmt BfdSessionMgmt) error

DeleteBfdSession ceases the session. A session down control packet is sent to BFD neighbor before deleting the session. This function is called when a protocol decides to stop monitoring the destination IP.

func (*BFDServer) DeletePerLinkSessions

func (server *BFDServer) DeletePerLinkSessions(DestIp string, Protocol bfddCommonDefs.BfdSessionOwner, ForceDel bool) error

func (*BFDServer) DispatchReceivedBfdPacket

func (server *BFDServer) DispatchReceivedBfdPacket(ipAddr string, bfdPacket *BfdControlPacket) error

func (*BFDServer) FindBfdSession

func (server *BFDServer) FindBfdSession(DestIp string) (sessionId int32, found bool)

func (*BFDServer) FindBfdSessionContainingAddr

func (server *BFDServer) FindBfdSessionContainingAddr(DestIp string) (sessionId int32, found bool)

func (*BFDServer) GetBfdGlobalState

func (server *BFDServer) GetBfdGlobalState() *GlobalState

func (*BFDServer) GetBfdSessionParamState

func (server *BFDServer) GetBfdSessionParamState(paramName string) (*SessionParamState, bool)

func (*BFDServer) GetBfdSessionState

func (server *BFDServer) GetBfdSessionState(ipAddr string) (*SessionState, bool)

func (*BFDServer) GetBulkBfdSessionParamStates

func (server *BFDServer) GetBulkBfdSessionParamStates(idx int, cnt int) (int, int, []SessionParamState)

func (*BFDServer) GetBulkBfdSessionStates

func (server *BFDServer) GetBulkBfdSessionStates(idx int, cnt int) (int, int, []SessionState)

func (*BFDServer) GetIfIndexFromDestIp

func (server *BFDServer) GetIfIndexFromDestIp(DestIp string) (int32, string, error)

func (*BFDServer) GetNewSessionId

func (server *BFDServer) GetNewSessionId() int32

func (*BFDServer) GetTxJitter

func (server *BFDServer) GetTxJitter() int32

func (*BFDServer) HandleNextHopChange

func (server *BFDServer) HandleNextHopChange(DestIp string, IfIndex int32, Reachable bool) error

This function handles NextHop change from RIB. A Poll control packet will be sent to BFD neighbor and expect a Final control packet.

func (*BFDServer) InitPublisher

func (server *BFDServer) InitPublisher(pub_str string) (pub *nanomsg.PubSocket)

func (*BFDServer) InitServer

func (server *BFDServer) InitServer(paramFile string)

func (*BFDServer) NewBfdSession

func (server *BFDServer) NewBfdSession(DestIp string, ParamName string, Interface string, Protocol bfddCommonDefs.BfdSessionOwner, PerLink bool) *BfdSession

func (*BFDServer) NewNormalBfdSession

func (server *BFDServer) NewNormalBfdSession(Interface string, LocalIp string, DestIp string, ParamName string, PerLink bool, Protocol bfddCommonDefs.BfdSessionOwner) *BfdSession

func (*BFDServer) NewPerLinkBfdSessions

func (server *BFDServer) NewPerLinkBfdSessions(IfIndex int32, LocalIp string, DestIp string, ParamName string, Protocol bfddCommonDefs.BfdSessionOwner) error

func (*BFDServer) PublishSessionNotifications

func (server *BFDServer) PublishSessionNotifications()

func (*BFDServer) ResetBfdSession

func (server *BFDServer) ResetBfdSession(sessionId int32) error

func (*BFDServer) SendAdminDownToAllNeighbors

func (server *BFDServer) SendAdminDownToAllNeighbors() error

func (*BFDServer) SendAdminUpToAllNeighbors

func (server *BFDServer) SendAdminUpToAllNeighbors() error

func (*BFDServer) SendDeleteToAllSessions

func (server *BFDServer) SendDeleteToAllSessions() error

func (*BFDServer) SessionDeleteHandler

func (server *BFDServer) SessionDeleteHandler(session *BfdSession, Protocol bfddCommonDefs.BfdSessionOwner, ForceDel bool) error

func (*BFDServer) SigHandler

func (server *BFDServer) SigHandler(dbHdl *dbutils.DBUtil)

func (*BFDServer) StartBfdSesionServer

func (server *BFDServer) StartBfdSesionServer() error

func (*BFDServer) StartBfdSessionRxTx

func (server *BFDServer) StartBfdSessionRxTx() error

func (*BFDServer) StartServer

func (server *BFDServer) StartServer(paramFile string, dbHdl *dbutils.DBUtil)

func (*BFDServer) StartSessionHandler

func (server *BFDServer) StartSessionHandler() error

func (*BFDServer) StartSessionRetryHandler

func (server *BFDServer) StartSessionRetryHandler() error

func (*BFDServer) UpdateBfdSessionsUsingParam

func (server *BFDServer) UpdateBfdSessionsUsingParam(paramName string) error

type BfdAuthHeader

type BfdAuthHeader struct {
	Type           AuthenticationType
	AuthKeyID      uint8
	SequenceNumber uint32
	AuthData       []byte
}

type BfdControlPacket

type BfdControlPacket struct {
	Version                   uint8
	Diagnostic                BfdDiagnostic
	State                     BfdSessionState
	Poll                      bool
	Final                     bool
	ControlPlaneIndependent   bool
	AuthPresent               bool
	Demand                    bool
	Multipoint                bool // Must always be false
	DetectMult                uint8
	MyDiscriminator           uint32
	YourDiscriminator         uint32
	DesiredMinTxInterval      time.Duration
	RequiredMinRxInterval     time.Duration
	RequiredMinEchoRxInterval time.Duration
	AuthHeader                *BfdAuthHeader
}

func DecodeBfdControlPacket

func DecodeBfdControlPacket(data []byte) (*BfdControlPacket, error)

* Decode the control packet

func NewBfdControlPacketDefault

func NewBfdControlPacketDefault() *BfdControlPacket

func (*BfdControlPacket) CreateBfdControlPacket

func (p *BfdControlPacket) CreateBfdControlPacket() ([]byte, error)

* Create a control packet

type BfdDiagnostic

type BfdDiagnostic int
const (
	DIAG_NONE                 BfdDiagnostic = 0 // No Diagnostic
	DIAG_TIME_EXPIRED         BfdDiagnostic = 1 // Control Detection Time Expired
	DIAG_ECHO_FAILED          BfdDiagnostic = 2 // Echo Function Failed
	DIAG_NEIGHBOR_SIGNAL_DOWN BfdDiagnostic = 3 // Neighbor Signaled Session Down
	DIAG_FORWARD_PLANE_RESET  BfdDiagnostic = 4 // Forwarding Plane Reset
	DIAG_PATH_DOWN            BfdDiagnostic = 5 // Path Down
	DIAG_CONCAT_PATH_DOWN     BfdDiagnostic = 6 // Concatenated Path Down
	DIAG_ADMIN_DOWN           BfdDiagnostic = 7 // Administratively Down
	DIAG_REV_CONCAT_PATH_DOWN BfdDiagnostic = 8 // Reverse Concatenated Path Down
)

type BfdGlobal

type BfdGlobal struct {
	Vrf                     string
	Enabled                 bool
	NumSessions             uint32
	Sessions                map[int32]*BfdSession
	SessionsIdSlice         []int32
	SessionsByIp            map[string]*BfdSession
	InactiveSessionsIdSlice []int32
	NumSessionParams        uint32
	SessionParams           map[string]*BfdSessionParam
	NumUpSessions           uint32
	NumDownSessions         uint32
	NumAdminDownSessions    uint32
}

type BfdSession

type BfdSession struct {
	TxTimeoutCh chan int32

	SessionTimeoutCh chan int32

	ReceivedPacketCh    chan *BfdControlPacket
	SessionStopClientCh chan bool
	SessionStopServerCh chan bool
	// contains filtered or unexported fields
}

func (*BfdSession) ApplyTxJitter

func (session *BfdSession) ApplyTxJitter() int32

func (*BfdSession) AuthenticateReceivedControlPacket

func (session *BfdSession) AuthenticateReceivedControlPacket(bfdPacket *BfdControlPacket) bool

func (*BfdSession) CanProcessBfdControlPacket

func (session *BfdSession) CanProcessBfdControlPacket(bfdPacket *BfdControlPacket) bool

func (*BfdSession) CheckAnyRemoteParamChanged

func (session *BfdSession) CheckAnyRemoteParamChanged(bfdPacket *BfdControlPacket) error

func (*BfdSession) CheckIfAnyProtocolRegistered

func (session *BfdSession) CheckIfAnyProtocolRegistered() bool

func (*BfdSession) EventHandler

func (session *BfdSession) EventHandler(event BfdSessionEvent) error
State Machine
                            +--+
                            |  | UP, TIMER
                            |  V
                    DOWN  +------+  INIT
             +------------|      |------------+
             |            | DOWN |            |
             |  +-------->|      |<--------+  |
             |  |         +------+         |  |
             |  |                          |  |
             |  |                          |  |
             |  |                     DOWN,|  |
             |  |TIMER                TIMER|  |
             V  |                          |  V
           +------+                      +------+
      +----|      |                      |      |----+
  DOWN|    | INIT |--------------------->|  UP  |    |INIT, UP
      +--->|      | INIT, UP             |      |<---+
           +------+                      +------+

EventHandler is called after receiving a BFD packet from remote.

func (*BfdSession) GetBfdSessionNotification

func (session *BfdSession) GetBfdSessionNotification() bool

func (*BfdSession) HandleSessionTimeout

func (session *BfdSession) HandleSessionTimeout()

func (*BfdSession) InitiatePollSequence

func (session *BfdSession) InitiatePollSequence() error

func (*BfdSession) IsSessionActive

func (session *BfdSession) IsSessionActive() bool

func (*BfdSession) LocalAdminDown

func (session *BfdSession) LocalAdminDown() error

func (*BfdSession) MoveToDownState

func (session *BfdSession) MoveToDownState() error

func (*BfdSession) MoveToInitState

func (session *BfdSession) MoveToInitState() error

func (*BfdSession) MoveToUpState

func (session *BfdSession) MoveToUpState() error

func (*BfdSession) NeedBfdPacketUpdate

func (session *BfdSession) NeedBfdPacketUpdate() bool

func (*BfdSession) ProcessBfdPacket

func (session *BfdSession) ProcessBfdPacket(bfdPacket *BfdControlPacket) error

func (*BfdSession) ProcessPollSequence

func (session *BfdSession) ProcessPollSequence(bfdPacket *BfdControlPacket) error

func (*BfdSession) RemoteAdminDown

func (session *BfdSession) RemoteAdminDown() error

func (*BfdSession) RemoteChangedDemandMode

func (session *BfdSession) RemoteChangedDemandMode(bfdPacket *BfdControlPacket) error

func (*BfdSession) ResetLocalSessionParams

func (session *BfdSession) ResetLocalSessionParams() error

func (*BfdSession) ResetRemoteSessionParams

func (session *BfdSession) ResetRemoteSessionParams() error

func (*BfdSession) SendBfdNotification

func (session *BfdSession) SendBfdNotification() error

func (*BfdSession) SendPeriodicControlPackets

func (session *BfdSession) SendPeriodicControlPackets()

func (*BfdSession) StartBfdSession

func (session *BfdSession) StartBfdSession() error

Restart session that was stopped earlier due to global Bfd disable.

func (*BfdSession) StartPerLinkSessionClient

func (session *BfdSession) StartPerLinkSessionClient(bfdServer *BFDServer) error

func (*BfdSession) StartPerLinkSessionServer

func (session *BfdSession) StartPerLinkSessionServer(bfdServer *BFDServer) error

func (*BfdSession) StartSessionClient

func (session *BfdSession) StartSessionClient(server *BFDServer) error

func (*BfdSession) StartSessionServer

func (session *BfdSession) StartSessionServer() error

func (*BfdSession) StopBfdSession

func (session *BfdSession) StopBfdSession() error

Stop session as Bfd is disabled globally. Do not delete

func (*BfdSession) UpdateBfdSessionControlPacket

func (session *BfdSession) UpdateBfdSessionControlPacket() error

type BfdSessionEvent

type BfdSessionEvent int
const (
	REMOTE_DOWN       BfdSessionEvent = 1
	REMOTE_INIT       BfdSessionEvent = 2
	REMOTE_UP         BfdSessionEvent = 3
	TIMEOUT           BfdSessionEvent = 4
	ADMIN_DOWN        BfdSessionEvent = 5
	ADMIN_UP          BfdSessionEvent = 6
	REMOTE_ADMIN_DOWN BfdSessionEvent = 7
)

type BfdSessionMgmt

type BfdSessionMgmt struct {
	DestIp    string
	ParamName string
	Interface string
	Protocol  bfddCommonDefs.BfdSessionOwner
	PerLink   bool
	ForceDel  bool
}

type BfdSessionParam

type BfdSessionParam struct {
	// contains filtered or unexported fields
}

type BfdSessionState

type BfdSessionState int
const (
	STATE_ADMIN_DOWN BfdSessionState = 0
	STATE_DOWN       BfdSessionState = 1
	STATE_INIT       BfdSessionState = 2
	STATE_UP         BfdSessionState = 3
)

type ClientJson

type ClientJson struct {
	Name string `json:Name`
	Port int    `json:Port`
}

type GlobalConfig

type GlobalConfig struct {
	Vrf    string
	Enable bool
}

type GlobalState

type GlobalState struct {
	Vrf                  string
	Enable               bool
	NumSessions          uint32
	NumUpSessions        uint32
	NumDownSessions      uint32
	NumAdminDownSessions uint32
}

type LagProperty

type LagProperty struct {
	Links []int32
}

type PortProperty

type PortProperty struct {
	Name     string
	VlanName string
	VlanId   uint16
	IpAddr   string
}

type RecvedBfdPacket

type RecvedBfdPacket struct {
	IpAddr    string
	Len       int32
	PacketBuf []byte
}

type RibdClient

type RibdClient struct {
	ipcutils.IPCClientBase
	ClientHdl *ribd.RIBDServicesClient
}

type SessionConfig

type SessionConfig struct {
	DestIp    string
	ParamName string
	Interface string
	PerLink   bool
	Protocol  bfddCommonDefs.BfdSessionOwner
	Operation bfddCommonDefs.BfdSessionOperation
}

type SessionParamConfig

type SessionParamConfig struct {
	Name                      string
	LocalMultiplier           int32
	DesiredMinTxInterval      int32
	RequiredMinRxInterval     int32
	RequiredMinEchoRxInterval int32
	DemandEnabled             bool
	AuthenticationEnabled     bool
	AuthenticationType        AuthenticationType
	AuthenticationKeyId       int32
	AuthenticationData        string
}

type SessionParamState

type SessionParamState struct {
	Name                      string
	NumSessions               int32
	LocalMultiplier           int32
	DesiredMinTxInterval      int32
	RequiredMinRxInterval     int32
	RequiredMinEchoRxInterval int32
	DemandEnabled             bool
	AuthenticationEnabled     bool
	AuthenticationType        AuthenticationType
	AuthenticationKeyId       int32
	AuthenticationData        string
}

type SessionState

type SessionState struct {
	IpAddr                    string
	LocalAddr                 string
	SessionId                 int32
	ParamName                 string
	Interface                 string
	InterfaceSpecific         bool
	PerLinkSession            bool
	LocalMacAddr              net.HardwareAddr
	RemoteMacAddr             net.HardwareAddr
	RegisteredProtocols       []bool
	SessionState              BfdSessionState
	RemoteSessionState        BfdSessionState
	LocalDiscriminator        uint32
	RemoteDiscriminator       uint32
	LocalDiagType             BfdDiagnostic
	DesiredMinTxInterval      int32
	RequiredMinRxInterval     int32
	RemoteMinRxInterval       int32
	DetectionMultiplier       int32
	RemoteDetectionMultiplier int32
	DemandMode                bool
	RemoteDemandMode          bool
	AuthType                  AuthenticationType
	AuthSeqKnown              bool
	ReceivedAuthSeq           uint32
	SentAuthSeq               uint32
	NumTxPackets              uint32
	NumRxPackets              uint32
	ToDownCount               uint32
	ToUpCount                 uint32
	UpTime                    time.Time
}

type VlanProperty

type VlanProperty struct {
	Name       string
	UntagPorts []int32
	IpAddr     string
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL