Skip to content
Snippets Groups Projects
netlink.go 1.03 KiB
Newer Older
  • Learn to ignore specific revisions
  • cedi's avatar
    cedi committed
    package protocolnetlink
    
    cedi's avatar
    cedi committed
    
    import (
    	"github.com/bio-routing/bio-rd/config"
    	"github.com/bio-routing/bio-rd/routingtable"
    	"github.com/bio-routing/bio-rd/routingtable/locRIB"
    )
    
    
    cedi's avatar
    cedi committed
    // Netlink is the netlink module which handles the entire NetlinkCommunication
    type Netlink struct {
    
    cedi's avatar
    cedi committed
    	locRib *locRIB.LocRIB
    
    	writer *NetlinkWriter
    	reader *NetlinkReader
    }
    
    
    cedi's avatar
    cedi committed
    // NewNetlink creates a new Netlink object and returns the pointer to it
    func NewNetlink(options *config.Netlink, locRib *locRIB.LocRIB) *Netlink {
    
    cedi's avatar
    cedi committed
    
    
    cedi's avatar
    cedi committed
    	n := &Netlink{
    
    cedi's avatar
    cedi committed
    		locRib: locRib,
    		writer: NewNetlinkWriter(options),
    		reader: NewNetlinkReader(options),
    	}
    	return n
    }
    
    
    cedi's avatar
    cedi committed
    // Start the Netlink module
    func (n *Netlink) Start() {
    
    cedi's avatar
    cedi committed
    	// connect all RIBs
    	options := routingtable.ClientOptions{
    		BestOnly: false,
    		EcmpOnly: false,
    		MaxPaths: ^uint(0), // max int
    	}
    
    	// 1. from locRib to Kernel
    	n.locRib.ClientManager.RegisterWithOptions(n.writer, options)
    
    	// 2. vom Kernel to locRib
    	n.reader.ClientManager.RegisterWithOptions(n.locRib, options)
    
    	// Listn for new routes from kernel
    	go n.reader.Read()
    }