diff options
author | Artur Makutunowicz <arma@linkedin.com> | 2019-01-31 12:21:16 -0800 |
---|---|---|
committer | Artur Makutunowicz <arma@linkedin.com> | 2019-01-31 12:21:16 -0800 |
commit | 48508c7f3d92395a625026f3a43ad7736da14e19 (patch) | |
tree | 50d7df40734d2b8eb545529ca045f29a606bbd19 /docs | |
parent | 887e8a4952ae3ed4fe0eefd35889fdc5b4be156b (diff) |
Add BGP-LS usage example
Diffstat (limited to 'docs')
-rw-r--r-- | docs/sources/lib-ls.md | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/docs/sources/lib-ls.md b/docs/sources/lib-ls.md new file mode 100644 index 00000000..adc6fe79 --- /dev/null +++ b/docs/sources/lib-ls.md @@ -0,0 +1,98 @@ +# Using BGP-LS in GoBGP library mode + +This page explains how to use GoBGP for getting BGP-LS prefixes. + +## Contents + +- [Basic BGP-LS Example](#basic-bgp-ls-example) + +## Basic BGP-LS Example + +```go +package main + +import ( + "context" + "os" + + "github.com/golang/protobuf/jsonpb" + api "github.com/osrg/gobgp/api" + gobgp "github.com/osrg/gobgp/pkg/server" + log "github.com/sirupsen/logrus" +) + +func main() { + log.SetLevel(log.DebugLevel) + s := gobgp.NewBgpServer() + go s.Serve() + + if err := s.StartBgp(context.Background(), &api.StartBgpRequest{ + Global: &api.Global{ + As: 64512, + RouterId: "10.0.255.254", + ListenPort: -1, // gobgp won't listen on tcp:179 + }, + }); err != nil { + log.Fatal(err) + } + + if err := s.MonitorPeer(context.Background(), &api.MonitorPeerRequest{}, func(p *api.Peer) { log.Info(p) }); err != nil { + log.Fatal(err) + } + + // neighbor configuration + n := &api.Peer{ + Conf: &api.PeerConf{ + NeighborAddress: "172.17.0.2", + PeerAs: 65002, + }, + ApplyPolicy: &api.ApplyPolicy{ + ImportPolicy: &api.PolicyAssignment{ + DefaultAction: api.RouteAction_ACCEPT, + }, + ExportPolicy: &api.PolicyAssignment{ + DefaultAction: api.RouteAction_REJECT, + }, + }, + AfiSafis: []*api.AfiSafi{ + { + Config: &api.AfiSafiConfig{ + Family: &api.Family{ + Afi: api.Family_AFI_LS, + Safi: api.Family_SAFI_LS, + }, + Enabled: true, + }, + }, + }, + } + + if err := s.AddPeer(context.Background(), &api.AddPeerRequest{ + Peer: n, + }); err != nil { + log.Fatal(err) + } + + marshaller := jsonpb.Marshaler{ + Indent: " ", + OrigName: true, + } + + // Display incoming Prefixes in JSON format. + if err := s.MonitorTable(context.Background(), &api.MonitorTableRequest{ + TableType: api.TableType_GLOBAL, + Family: &api.Family{ + Afi: api.Family_AFI_LS, + Safi: api.Family_SAFI_LS, + }, + }, func(p *api.Path) { + // Your application should do something useful with the BGP-LS path here. + marshaller.Marshal(os.Stdout, p) + }); err != nil { + log.Fatal(err) + } + + select {} +} + +``` |