Skip to content
Snippets Groups Projects
main.go 1.39 KiB
Newer Older
  • Learn to ignore specific revisions
  • Oliver Herms's avatar
    Oliver Herms committed
    package main
    
    import (
    	"fmt"
    	"net"
    	"sync"
    
    Oliver Herms's avatar
    Oliver Herms committed
    	"time"
    
    Oliver Herms's avatar
    Oliver Herms committed
    
    	"github.com/sirupsen/logrus"
    
    
    Oliver Herms's avatar
    Oliver Herms committed
    	"github.com/bio-routing/bio-rd/config"
    	"github.com/bio-routing/bio-rd/protocols/bgp/server"
    
    	"github.com/bio-routing/bio-rd/routingtable"
    
    Oliver Herms's avatar
    Oliver Herms committed
    	"github.com/bio-routing/bio-rd/routingtable/locRIB"
    
    Oliver Herms's avatar
    Oliver Herms committed
    )
    
    func main() {
    	fmt.Printf("This is a BGP speaker\n")
    
    
    Oliver Herms's avatar
    Oliver Herms committed
    	rib := locRIB.New()
    
    Oliver Herms's avatar
    Oliver Herms committed
    	b := server.NewBgpServer()
    
    	err := b.Start(&config.Global{
    		Listen: true,
    	})
    	if err != nil {
    		logrus.Fatalf("Unable to start BGP server: %v", err)
    	}
    
    	b.AddPeer(config.Peer{
    		AdminEnabled: true,
    		LocalAS:      65200,
    
    Oliver Herms's avatar
    Oliver Herms committed
    		PeerAS:       65300,
    		PeerAddress:  net.IP([]byte{169, 254, 200, 1}),
    		LocalAddress: net.IP([]byte{169, 254, 200, 0}),
    
    Oliver Herms's avatar
    Oliver Herms committed
    		HoldTimer:    90,
    		KeepAlive:    30,
    		Passive:      true,
    		RouterID:     b.RouterID(),
    
    Oliver Herms's avatar
    Oliver Herms committed
    		AddPathSend: routingtable.ClientOptions{
    			MaxPaths: 10,
    		},
    
    Oliver Herms's avatar
    Oliver Herms committed
    	}, rib)
    
    
    Oliver Herms's avatar
    Oliver Herms committed
    	time.Sleep(time.Second * 15)
    
    Oliver Herms's avatar
    Oliver Herms committed
    
    	b.AddPeer(config.Peer{
    		AdminEnabled: true,
    		LocalAS:      65200,
    
    Oliver Herms's avatar
    Oliver Herms committed
    		PeerAS:       65100,
    		PeerAddress:  net.IP([]byte{169, 254, 100, 0}),
    		LocalAddress: net.IP([]byte{169, 254, 100, 1}),
    
    Oliver Herms's avatar
    Oliver Herms committed
    		HoldTimer:    90,
    		KeepAlive:    30,
    		Passive:      true,
    		RouterID:     b.RouterID(),
    
    		AddPathSend: routingtable.ClientOptions{
    			MaxPaths: 10,
    		},
    
    Oliver Herms's avatar
    Oliver Herms committed
    		AddPathRecv: true,
    
    Oliver Herms's avatar
    Oliver Herms committed
    	}, rib)
    
    	go func() {
    		for {
    			fmt.Print(rib.Print())
    			time.Sleep(time.Second * 10)
    		}
    	}()
    
    Oliver Herms's avatar
    Oliver Herms committed
    
    	var wg sync.WaitGroup
    	wg.Add(1)
    	wg.Wait()
    }