0c1a28a9b6
We now manage routing table actions using dedicated functions run on either registry or services in the registry. Routing table now uses Route.Hash() instead of maintaining its own hash struct filed which previously performed these operations. Various names of variables have been changed to make them more concise.
110 lines
2.3 KiB
Go
110 lines
2.3 KiB
Go
// Package router provides a network routing control plane
|
|
package router
|
|
|
|
import "time"
|
|
|
|
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
|
|
Init(...Option) error
|
|
// Options returns the router options
|
|
Options() Options
|
|
// ID returns the ID of the router
|
|
ID() string
|
|
// Table returns the routing table
|
|
Table() Table
|
|
// Address returns the router adddress
|
|
Address() string
|
|
// Network returns the network address of the router
|
|
Network() string
|
|
// Advertise advertises routes to the network
|
|
Advertise() (<-chan *Advert, error)
|
|
// Update updates the routing table
|
|
Update(*Advert) error
|
|
// Status returns router status
|
|
Status() Status
|
|
// Stop stops the router
|
|
Stop() error
|
|
// String returns debug info
|
|
String() string
|
|
}
|
|
|
|
// Option used by the router
|
|
type Option func(*Options)
|
|
|
|
// UpdateType is route advertisement update type
|
|
type UpdateType int
|
|
|
|
const (
|
|
// Announce is advertised when the router announces itself
|
|
Announce UpdateType = iota
|
|
// Update advertises route updates
|
|
Update
|
|
)
|
|
|
|
// String returns string representation of update event
|
|
func (ut UpdateType) String() string {
|
|
switch ut {
|
|
case Announce:
|
|
return "ANNOUNCE"
|
|
case Update:
|
|
return "UPDATE"
|
|
default:
|
|
return "UNKNOWN"
|
|
}
|
|
}
|
|
|
|
// Advert contains a list of events advertised by the router to the network
|
|
type Advert struct {
|
|
// ID is the router ID
|
|
ID string
|
|
// Timestamp marks the time when the update is sent
|
|
Timestamp time.Time
|
|
// Events is a list of events to advertise
|
|
Events []*Event
|
|
}
|
|
|
|
// StatusCode defines router status
|
|
type StatusCode int
|
|
|
|
// Status is router status
|
|
type Status struct {
|
|
// Error is router error
|
|
Error error
|
|
// Code defines router status
|
|
Code StatusCode
|
|
}
|
|
|
|
const (
|
|
// Running means the router is up and running
|
|
Running StatusCode = iota
|
|
// Stopped means the router has been stopped
|
|
Stopped
|
|
// Error means the router has encountered error
|
|
Error
|
|
)
|
|
|
|
// String returns human readable status code
|
|
func (sc StatusCode) String() string {
|
|
switch sc {
|
|
case Running:
|
|
return "RUNNING"
|
|
case Stopped:
|
|
return "STOPPED"
|
|
case Error:
|
|
return "ERROR"
|
|
default:
|
|
return "UNKNOWN"
|
|
}
|
|
}
|
|
|
|
// NewRouter creates new Router and returns it
|
|
func NewRouter(opts ...Option) Router {
|
|
return newRouter(opts...)
|
|
}
|