Redefined and polished some interfaces and data structures.

This commit is contained in:
Milos Gajdos
2019-06-07 13:29:09 +01:00
parent ee8b6b3114
commit e4311c3a10
4 changed files with 75 additions and 31 deletions

View File

@@ -3,12 +3,34 @@ package router
import "errors"
var (
// ErrRouteNotFound is returned when no rout was found
// DefaultRouter returns default micro router
DefaultTable = NewTable()
// ErrRouteNotFound is returned when no route was found
ErrRouteNotFound = errors.New("route not found")
// ErrDuplicateRoute is return when route already exists
ErrDuplicateRoute = errors.New("duplicate route")
)
// Table is routing table
type Table interface {
// Add adds new route to the table
Add(*Entry) error
// Remove removes route from the table
Remove(*Entry) error
// Update updates route in the table
Update(*Entry) error
// Lookup looks up routes in the table
Lookup(Query) ([]*Entry, error)
// Size returns the size of the table
Size() int
// String prints the routing table
String() string
}
// Entry is micro network routing table entry
type Entry struct {
// DestAddr is destination address
DestAddr string
// NetID is micro network ID
NetID string
// Hop is the next route hop
@@ -17,42 +39,46 @@ type Entry struct {
Metric int
}
// Table is routing table
// table is routing table
// It maps service name to routes
type Table struct {
type table struct {
// m stores routing table map
m map[string][]Entry
}
// NewTable creates new routing table and returns it
func NewTable() *Table {
return &Table{
func NewTable() Table {
return &table{
m: make(map[string][]Entry),
}
}
// TODO: Define lookup query interface
// Lookup looks up entry in the routing table
func (t *Table) Lookup() (*Entry, error) {
return nil, nil
// Add adds new routing entry
func (t *table) Add(e *Entry) error {
return nil
}
// Remove removes entry from the routing table
func (t *Table) Remove(e *Entry) error {
func (t *table) Remove(e *Entry) error {
return nil
}
// Update updates routin entry
func (t *Table) Update(e *Entry) error {
func (t *table) Update(e *Entry) error {
return nil
}
// Lookup looks up entry in the routing table
func (t *table) Lookup(q Query) ([]*Entry, error) {
return nil, nil
}
// Size returns the size of the routing table
func (t *Table) Size() int {
return 0
func (t *table) Size() int {
return len(t.m)
}
// String returns text representation of routing table
func (t *Table) String() string {
func (t *table) String() string {
return ""
}