Skip to content
Snippets Groups Projects
main.go 1.92 KiB
Newer Older
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/filter"
Oliver Herms's avatar
Oliver Herms committed
	"github.com/bio-routing/bio-rd/routingtable/locRIB"
Oliver Herms's avatar
Oliver Herms committed
)

func main() {
Christoph Petrausch's avatar
Christoph Petrausch committed
	logrus.Printf("This is a BGP speaker\n")
Oliver Herms's avatar
Oliver Herms committed

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,
		LocalAddressList: []net.IP{
			net.IPv4(169, 254, 100, 1),
			net.IPv4(169, 254, 200, 0),
		},
Oliver Herms's avatar
Oliver Herms committed
	})
	if err != nil {
		logrus.Fatalf("Unable to start BGP server: %v", err)
	}

	b.AddPeer(config.Peer{
Oliver Herms's avatar
Oliver Herms committed
		AdminEnabled:      true,
		LocalAS:           65200,
		PeerAS:            65300,
		PeerAddress:       net.IP([]byte{169, 254, 200, 1}),
		LocalAddress:      net.IP([]byte{169, 254, 200, 0}),
		ReconnectInterval: time.Second * 15,
Oliver Herms's avatar
Oliver Herms committed
		HoldTime:          time.Second * 90,
Oliver Herms's avatar
Oliver Herms committed
		KeepAlive:         time.Second * 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
		ExportFilter: filter.NewAcceptAllFilter(),
		ImportFilter: filter.NewDrainFilter(),
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{
Oliver Herms's avatar
Oliver Herms committed
		AdminEnabled:      true,
		LocalAS:           65200,
		PeerAS:            65100,
		PeerAddress:       net.IP([]byte{169, 254, 100, 0}),
		LocalAddress:      net.IP([]byte{169, 254, 100, 1}),
		ReconnectInterval: time.Second * 15,
Oliver Herms's avatar
Oliver Herms committed
		HoldTime:          time.Second * 90,
Oliver Herms's avatar
Oliver Herms committed
		KeepAlive:         time.Second * 30,
		Passive:           true,
		RouterID:          b.RouterID(),
		AddPathSend: routingtable.ClientOptions{
			MaxPaths: 10,
		},
Oliver Herms's avatar
Oliver Herms committed
		AddPathRecv:  true,
		ImportFilter: filter.NewDrainFilter(),
		ExportFilter: filter.NewAcceptAllFilter(),
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()
}