Git Product home page Git Product logo

gobgp_demo's Introduction

About this repository

GoBGP demo using Docker Compose:

Requirements to run this repository

  • Install Docker
  • Install Docker Compose
docker --version
Docker version 20.10.1, build 831ebea
docker-compose --version
docker-compose version 1.27.4, build 40524192

Instructions to use this repository

  • Clone this repository
git clone https://gitlab.aristanetworks.com/emea-se-team/gobgp_demo.git
  • Move to the local directory
cd gobgp_demo
  • Run this command to:
    • Create the network
    • Build the docker image
    • Create the containers
    • Start the containers
docker-compose -f docker-compose.yml up -d
Creating network "gobgp_demo_test_net" with driver "bridge"
Creating gobgp_2 ... done
Creating gobgp_1 ... done
  • Run these commands to verify:
docker images
REPOSITORY         TAG           IMAGE ID       CREATED          SIZE
ksator/gobgp       1.0           f8cbe28b2372   56 minutes ago   1.05GB
golang             latest        b09f7387a719   12 days ago      862MB

docker ps
CONTAINER ID   IMAGE              COMMAND                  CREATED          STATUS          PORTS     NAMES
af448f6bd9fd   ksator/gobgp:1.0   "gobgpd -t yaml -f /…"   30 seconds ago   Up 27 seconds   179/tcp   gobgp_1
597af3ed77f6   ksator/gobgp:1.0   "gobgpd -t yaml -f /…"   30 seconds ago   Up 28 seconds   179/tcp   gobgp_2

docker network ls | grep gobgp
48e93609db19   gobgp_demo_test_net   bridge    local

docker-compose ps
 Name                Command               State    Ports
----------------------------------------------------------
gobgp_1   gobgpd -t yaml -f /etc/gob ...   Up      179/tcp
gobgp_2   gobgpd -t yaml -f /etc/gob ...   Up      179/tcp
  • Run these commands to verify BGP sessions state
docker exec -it gobgp_1 gobgp neighbor
Peer          AS  Up/Down State       |#Received  Accepted
10.0.0.200 65002 00:01:11 Establ      |        0         0
docker exec -it gobgp_2 bash

root@597af3ed77f6:/go# gobgp neighbor
Peer          AS  Up/Down State       |#Received  Accepted
10.0.0.100 65001 00:01:34 Establ      |        0         0

root@597af3ed77f6:/go# gobgp neighbor 10.0.0.100
BGP neighbor is 10.0.0.100, remote AS 65001
  BGP version 4, remote router ID 192.168.255.1
  BGP state = ESTABLISHED, up for 00:02:49
  BGP OutQ = 0, Flops = 0
  Hold time is 90, keepalive interval is 30 seconds
  Configured hold time is 90, keepalive interval is 30 seconds

  Neighbor capabilities:
    multiprotocol:
        ipv4-unicast:   advertised and received
    route-refresh:      advertised and received
    extended-nexthop:   advertised and received
        Local:  nlri: ipv4-unicast, nexthop: ipv6
        Remote: nlri: ipv4-unicast, nexthop: ipv6
    4-octet-as: advertised and received
    fqdn:       advertised and received
      Local:
         name: 597af3ed77f6, domain:
      Remote:
         name: af448f6bd9fd, domain:
  Message statistics:
                         Sent       Rcvd
    Opens:                  1          1
    Notifications:          0          0
    Updates:                0          0
    Keepalives:             6          6
    Route Refresh:          0          0
    Discarded:              0          0
    Total:                  7          7
  Route statistics:
    Advertised:             0
    Received:               0
    Accepted:               0

root@597af3ed77f6:/go#  exit
exit

Run these commands if you want to add a route (IPv4 address family):

docker exec -it gobgp_2 bash

root@597af3ed77f6:/go# gobgp global
AS:        65002
Router-ID: 192.168.255.0
Listening Port: 179, Addresses: 0.0.0.0, ::

root@597af3ed77f6:/go# gobgp global rib summary
Table afi:AFI_IP safi:SAFI_UNICAST
Destination: 0, Path: 0

root@597af3ed77f6:/go# gobgp global rib add 10.33.0.0/16 -a ipv4

root@597af3ed77f6:/go# gobgp global rib summary
Table afi:AFI_IP safi:SAFI_UNICAST
Destination: 1, Path: 1

root@597af3ed77f6:/go# gobgp neighbor 10.0.0.100  adj-out -a ipv4
   ID  Network              Next Hop             AS_PATH              Attrs
   1   10.33.0.0/16         10.0.0.200           65002                [{Origin: ?}]

root@597af3ed77f6:/go# gobgp neighbor 10.0.0.100
BGP neighbor is 10.0.0.100, remote AS 65001
  BGP version 4, remote router ID 192.168.255.1
  BGP state = ESTABLISHED, up for 00:12:01
  BGP OutQ = 0, Flops = 0
  Hold time is 90, keepalive interval is 30 seconds
  Configured hold time is 90, keepalive interval is 30 seconds

  Neighbor capabilities:
    multiprotocol:
        ipv4-unicast:   advertised and received
    route-refresh:      advertised and received
    extended-nexthop:   advertised and received
        Local:  nlri: ipv4-unicast, nexthop: ipv6
        Remote: nlri: ipv4-unicast, nexthop: ipv6
    4-octet-as: advertised and received
    fqdn:       advertised and received
      Local:
         name: 597af3ed77f6, domain:
      Remote:
         name: af448f6bd9fd, domain:
  Message statistics:
                         Sent       Rcvd
    Opens:                  1          1
    Notifications:          0          0
    Updates:                1          0
    Keepalives:            25         25
    Route Refresh:          0          0
    Discarded:              0          0
    Total:                 27         26
  Route statistics:
    Advertised:             1
    Received:               0
    Accepted:               0

root@597af3ed77f6:/go# exit
exit
docker exec -it gobgp_1 gobgp neighbor
Peer          AS  Up/Down State       |#Received  Accepted
10.0.0.200 65002 00:04:36 Establ      |        1         1

docker exec -it gobgp_1  gobgp neighbor 10.0.0.200 adj-in -a ipv4
   ID  Network              Next Hop             AS_PATH              Age        Attrs
   0   10.33.0.0/16         10.0.0.200           65002                00:00:43   [{Origin: ?}]

docker exec -it gobgp_1  gobgp neighbor 10.0.0.200
BGP neighbor is 10.0.0.200, remote AS 65002
  BGP version 4, remote router ID 192.168.255.0
  BGP state = ESTABLISHED, up for 00:13:20
  BGP OutQ = 0, Flops = 0
  Hold time is 90, keepalive interval is 30 seconds
  Configured hold time is 90, keepalive interval is 30 seconds

  Neighbor capabilities:
    multiprotocol:
        ipv4-unicast:   advertised and received
    route-refresh:      advertised and received
    extended-nexthop:   advertised and received
        Local:  nlri: ipv4-unicast, nexthop: ipv6
        Remote: nlri: ipv4-unicast, nexthop: ipv6
    4-octet-as: advertised and received
    fqdn:       advertised and received
      Local:
         name: af448f6bd9fd, domain:
      Remote:
         name: 597af3ed77f6, domain:
  Message statistics:
                         Sent       Rcvd
    Opens:                  1          1
    Notifications:          0          0
    Updates:                0          1
    Keepalives:            27         27
    Route Refresh:          0          0
    Discarded:              0          0
    Total:                 28         29
  Route statistics:
    Advertised:             0
    Received:               1
    Accepted:               1
  • Run this command to:
    • Stop the containers
    • Remove the containers
    • Remove the networks
docker-compose down
Stopping gobgp_1 ... done
Stopping gobgp_2 ... done
Removing gobgp_1 ... done
Removing gobgp_2 ... done
Removing network gobgp_demo_test_net

Credit

Credit goes to Pierre Dezitter for his works on this topic.

gobgp_demo's People

Contributors

ksator avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.