summaryrefslogtreecommitdiffhomepage
path: root/pkg/tcpip/sample/wg_tunnel/gobgp/main.go
diff options
context:
space:
mode:
authorMikael Magnusson <mikma@users.sourceforge.net>2021-02-16 00:41:11 +0100
committerMikael Magnusson <mikma@users.sourceforge.net>2021-09-21 20:07:55 +0200
commit2709c3027cc2d21fa43e285a60fa3aa0b74f9e50 (patch)
treee1593d1c8bc743e6f7ab23da8c68745485318ae9 /pkg/tcpip/sample/wg_tunnel/gobgp/main.go
parent9ed2c54502009fb4b1c7179214a031c12518dfed (diff)
WIP gre testgre-master
and wg_tunnel sample
Diffstat (limited to 'pkg/tcpip/sample/wg_tunnel/gobgp/main.go')
-rw-r--r--pkg/tcpip/sample/wg_tunnel/gobgp/main.go119
1 files changed, 119 insertions, 0 deletions
diff --git a/pkg/tcpip/sample/wg_tunnel/gobgp/main.go b/pkg/tcpip/sample/wg_tunnel/gobgp/main.go
new file mode 100644
index 000000000..3f51adc69
--- /dev/null
+++ b/pkg/tcpip/sample/wg_tunnel/gobgp/main.go
@@ -0,0 +1,119 @@
+package main
+
+import (
+ "context"
+ "time"
+
+ "github.com/golang/protobuf/ptypes"
+ "github.com/golang/protobuf/ptypes/any"
+ 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()
+
+ // global configuration
+ if err := s.StartBgp(context.Background(), &api.StartBgpRequest{
+ Global: &api.Global{
+ As: 65003,
+ RouterId: "10.0.255.254",
+ ListenPort: -1, // gobgp won't listen on tcp:179
+ },
+ }); err != nil {
+ log.Fatal(err)
+ }
+
+ // monitor the change of the peer state
+ 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,
+ },
+ }
+
+ if err := s.AddPeer(context.Background(), &api.AddPeerRequest{
+ Peer: n,
+ }); err != nil {
+ log.Fatal(err)
+ }
+
+ // add routes
+ nlri, _ := ptypes.MarshalAny(&api.IPAddressPrefix{
+ Prefix: "10.0.0.0",
+ PrefixLen: 24,
+ })
+
+ a1, _ := ptypes.MarshalAny(&api.OriginAttribute{
+ Origin: 0,
+ })
+ a2, _ := ptypes.MarshalAny(&api.NextHopAttribute{
+ NextHop: "10.0.0.1",
+ })
+ a3, _ := ptypes.MarshalAny(&api.AsPathAttribute{
+ Segments: []*api.AsSegment{
+ {
+ Type: 2,
+ Numbers: []uint32{6762, 39919, 65000, 35753, 65000},
+ },
+ },
+ })
+ attrs := []*any.Any{a1, a2, a3}
+
+ _, err := s.AddPath(context.Background(), &api.AddPathRequest{
+ Path: &api.Path{
+ Family: &api.Family{Afi: api.Family_AFI_IP, Safi: api.Family_SAFI_UNICAST},
+ Nlri: nlri,
+ Pattrs: attrs,
+ },
+ })
+ if err != nil {
+ log.Fatal(err)
+ }
+
+ v6Family := &api.Family{
+ Afi: api.Family_AFI_IP6,
+ Safi: api.Family_SAFI_UNICAST,
+ }
+
+ // add v6 route
+ nlri, _ = ptypes.MarshalAny(&api.IPAddressPrefix{
+ PrefixLen: 64,
+ Prefix: "2001:db8:1::",
+ })
+ v6Attrs, _ := ptypes.MarshalAny(&api.MpReachNLRIAttribute{
+ Family: v6Family,
+ NextHops: []string{"2001:db8::1"},
+ Nlris: []*any.Any{nlri},
+ })
+
+ c, _ := ptypes.MarshalAny(&api.CommunitiesAttribute{
+ Communities: []uint32{100, 200},
+ })
+
+ _, err = s.AddPath(context.Background(), &api.AddPathRequest{
+ Path: &api.Path{
+ Family: v6Family,
+ Nlri: nlri,
+ Pattrs: []*any.Any{a1, v6Attrs, c},
+ },
+ })
+ if err != nil {
+ log.Fatal(err)
+ }
+
+ s.ListPath(context.Background(), &api.ListPathRequest{Family: v6Family}, func(p *api.Destination) {
+ log.Info(p)
+ })
+
+ // do something useful here instead of exiting
+ time.Sleep(time.Minute * 3)
+}