diff --git a/examples/isis/main.go b/examples/isis/main.go new file mode 100644 index 0000000000000000000000000000000000000000..bc5c82658c5eacdb0297ca046d0c822e33afbe4f --- /dev/null +++ b/examples/isis/main.go @@ -0,0 +1,83 @@ +package main + +import ( + "fmt" + "os" + "time" + + "github.com/bio-routing/bio-rd/config" + "github.com/bio-routing/bio-rd/protocols/device" + "github.com/bio-routing/bio-rd/protocols/isis/server" + "github.com/bio-routing/bio-rd/protocols/isis/types" + log "github.com/sirupsen/logrus" +) + +func main() { + cfg := &config.ISISConfig{ + NETs: []config.NET{ + { + AFI: 0x49, + AreaID: types.AreaID{0, 0x01, 0, 0x10}, + SystemID: types.SystemID{10, 20, 30, 40, 50, 60}, + SEL: 0x00, + }, + }, + Interfaces: []config.ISISInterfaceConfig{ + { + Name: "virbr2", + Passive: false, + P2P: true, + ISISLevel2Config: &config.ISISLevelConfig{ + HelloInterval: 9, + HoldTime: 27, + Metric: 10, + Priority: 0, + }, + }, + { + Name: "lo", + Passive: true, + P2P: true, + ISISLevel2Config: &config.ISISLevelConfig{}, + }, + }, + TrafficEngineeringRouterID: [4]byte{10, 20, 30, 40}, + } + + ds, err := device.New() + if err != nil { + log.Errorf("Unable to get device server: %v", err) + os.Exit(1) + } + + err = ds.Start() + if err != nil { + log.Errorf("Unable to start device server: %v", err) + os.Exit(1) + } + + s := server.New(cfg, ds, log.New()) + s.AddInterface(&config.ISISInterfaceConfig{ + Name: "virbr2", + Passive: false, + P2P: true, + ISISLevel2Config: &config.ISISLevelConfig{ + HelloInterval: 9, + HoldTime: 27, + Metric: 10, + Priority: 0, + }, + }) + + go func() { + t := time.NewTicker(time.Second * 10) + for { + <-t.C + for _, lsp := range s.GetDatabase() { + fmt.Printf("LSP: %v\n", lsp) + } + } + }() + + select {} +}