summaryrefslogtreecommitdiffhomepage
path: root/docs
diff options
context:
space:
mode:
authorArtur Makutunowicz <arma@linkedin.com>2019-01-31 12:21:16 -0800
committerArtur Makutunowicz <arma@linkedin.com>2019-01-31 12:21:16 -0800
commit48508c7f3d92395a625026f3a43ad7736da14e19 (patch)
tree50d7df40734d2b8eb545529ca045f29a606bbd19 /docs
parent887e8a4952ae3ed4fe0eefd35889fdc5b4be156b (diff)
Add BGP-LS usage example
Diffstat (limited to 'docs')
-rw-r--r--docs/sources/lib-ls.md98
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 {}
+}
+
+```