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:
		| @@ -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...) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user