Skip to content
Snippets Groups Projects
Commit ba7c623e authored by Christoph Petrausch's avatar Christoph Petrausch
Browse files

Only activate the fsm at configurable reconnectInterval

parent 1337ccc9
No related branches found
No related tags found
No related merge requests found
......@@ -3,19 +3,22 @@ package config
import (
"net"
"time"
"github.com/bio-routing/bio-rd/routingtable"
)
type Peer struct {
AdminEnabled bool
KeepAlive uint16
HoldTimer uint16
LocalAddress net.IP
PeerAddress net.IP
LocalAS uint32
PeerAS uint32
Passive bool
RouterID uint32
AddPathSend routingtable.ClientOptions
AddPathRecv bool
AdminEnabled bool
KeepAlive uint16
HoldTimer uint16
LocalAddress net.IP
PeerAddress net.IP
LocalAS uint32
PeerAS uint32
Passive bool
RouterID uint32
AddPathSend routingtable.ClientOptions
AddPathRecv bool
ReconnectInterval time.Duration
}
......@@ -7,28 +7,34 @@ import (
"github.com/bio-routing/bio-rd/routingtable"
"github.com/bio-routing/bio-rd/routingtable/locRIB"
"time"
"github.com/bio-routing/bio-rd/config"
)
type Peer struct {
addr net.IP
asn uint32
fsm *FSM
rib *locRIB.LocRIB
routerID uint32
addPathSend routingtable.ClientOptions
addPathRecv bool
optOpenParams []packet.OptParam
addr net.IP
asn uint32
fsm *FSM
rib *locRIB.LocRIB
routerID uint32
addPathSend routingtable.ClientOptions
addPathRecv bool
optOpenParams []packet.OptParam
reconnectInterval time.Duration
}
// NewPeer creates a new peer with the given config. If an connection is established, the adjRIBIN of the peer is connected
// to the given rib. To actually connect the peer, call Start() on the returned peer.
func NewPeer(c config.Peer, rib *locRIB.LocRIB) (*Peer, error) {
p := &Peer{
addr: c.PeerAddress,
asn: c.PeerAS,
rib: rib,
addPathSend: c.AddPathSend,
addPathRecv: c.AddPathRecv,
optOpenParams: make([]packet.OptParam, 0),
addr: c.PeerAddress,
asn: c.PeerAS,
rib: rib,
addPathSend: c.AddPathSend,
addPathRecv: c.AddPathRecv,
optOpenParams: make([]packet.OptParam, 0),
reconnectInterval: c.ReconnectInterval,
}
p.fsm = NewFSM(p, c, rib)
......@@ -63,19 +69,29 @@ func NewPeer(c config.Peer, rib *locRIB.LocRIB) (*Peer, error) {
return p, nil
}
// GetAddr returns the IP address of the peer
func (p *Peer) GetAddr() net.IP {
return p.addr
}
// GetASN returns the configured AS number of the peer
func (p *Peer) GetASN() uint32 {
return p.asn
}
// Start the peers fsm. It starts from the Idle state and will get an ManualStart event. To trigger
// reconnects if the fsm falls back into the Idle state, every reconnectInterval a ManualStart event is send.
// The default value for reconnectInterval is 30 seconds.
func (p *Peer) Start() {
p.fsm.start()
if p.reconnectInterval == 0 {
p.reconnectInterval = 30 * time.Second
}
t := time.Tick(p.reconnectInterval)
go func() {
for {
<-t
p.fsm.activate()
}
}()
}()
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment