Changed router interface. Added table watcher. Advertise routes

* Changed router interface to return Advertisement channel
* Added default gateway route to the routing table if supplied
* Watch table for updates and advertise to the network
* We hash the routes on 3-tuple (Destination, Gateway, Network)
This commit is contained in:
Milos Gajdos
2019-06-27 22:52:51 +01:00
parent 0971deb9cc
commit 9d7420658d
6 changed files with 172 additions and 42 deletions

View File

@@ -1,6 +1,11 @@
// Package router provides a network routing control plane
package router
var (
// DefaultRouter is default network router
DefaultRouter = NewRouter()
)
// Router is an interface for a routing control plane
type Router interface {
// Init initializes the router with options
@@ -15,21 +20,27 @@ type Router interface {
Address() string
// Network returns the network address of the router
Network() string
// Advertise starts advertising the routes to the network
Advertise() error
// Advertise starts advertising routes to the network
Advertise() (<-chan *Advertisement, error)
// Update updates the routing table
Update(*Advertisement) error
// Stop stops the router
Stop() error
// String returns debug info
String() string
}
// Advertisement is sent by the router to the network
type Advertisement struct {
// ID is the source router ID
ID string
// Event defines advertisement even
Event *Event
}
// Option used by the router
type Option func(*Options)
var (
DefaultRouter = NewRouter()
)
// NewRouter creates new Router and returns it
func NewRouter(opts ...Option) Router {
return newRouter(opts...)