Skip to content
Snippets Groups Projects
router.go 984 B
Newer Older
Oliver Herms's avatar
Oliver Herms committed
package rismirror

import (
	"net"

Oliver Herms's avatar
Oliver Herms committed
	"github.com/bio-routing/bio-rd/cmd/ris-mirror/rtmirror"
Oliver Herms's avatar
Oliver Herms committed
	"github.com/bio-routing/bio-rd/routingtable/vrf"
)

// Router represents a router
type Router struct {
	name        string
	address     net.IP
	vrfRegistry *vrf.VRFRegistry
Oliver Herms's avatar
Oliver Herms committed

	// rtMirrors contains RTMirrors organized by VRF route distinguisher
	rtMirrors map[uint64]*rtmirror.RTMirror
Oliver Herms's avatar
Oliver Herms committed
}

func newRouter(name string, address net.IP) *Router {
	return &Router{
		name:        name,
		address:     address,
		vrfRegistry: vrf.NewVRFRegistry(),
Oliver Herms's avatar
Oliver Herms committed
		rtMirrors:   make(map[uint64]*rtmirror.RTMirror),
Oliver Herms's avatar
Oliver Herms committed
	}
}

// Name gets the routers name
func (r *Router) Name() string {
	return r.name
}

// Address gets a routers address
func (r *Router) Address() net.IP {
	return r.address
}

// GetVRF gets a VRF by its ID
func (r *Router) GetVRF(vrfID uint64) *vrf.VRF {
	return r.vrfRegistry.GetVRFByRD(vrfID)
}

// GetVRFs gets all VRFs
func (r *Router) GetVRFs() []*vrf.VRF {
	return r.vrfRegistry.List()
}