
CoreBGP – Plugging in to BGP - jordanwhited
https://www.jordanwhited.com/posts/corebgp-plugging-in-to-bgp/
======
AdamJacobMuller
I love this.

I tried using GoBGP to write a simple golang-based alternative to ExaBGP
(which is great and missing from this article) and was discouraged because
GoBGP simply did too much, which I didn't need (routing tables) and making it
not do those things was extremely time-consuming, so much so that I started
writing my own BGP implementation in Go, but, pretty quickly realized it was a
larger project than I wanted to take on at that moment, so it got shelved.
Exabgp was "good enough".

~~~
jordanwhited
Thanks Adam :)

I'm happy to hear someone else will find this useful. Let me know if you have
any feedback.

------
mypalmike
It's fun implementing a BGP speaker from scratch. I implemented one about 15
years ago in Java which was designed much like this library. It was
proprietary code which we used to advertise programmatically-determined routes
to our edge routers. Connecting to a router, walking through the state machine
changes, and debugging unexpected behavior (from both misunderstanding the RFC
and from finding bugs in vendor implementations) was a great learning
experience.

------
gonzo
Interesting, reminds me a tiny bit of the BGP listener in Java that was
written back at Smallworks [https://github.com/pjz/java-
bgp](https://github.com/pjz/java-bgp)

------
adieu
I'm using rpc calls to GoBGP to get routes for my evpn project. Using CoreBGP
as a library and talk directly to other peers might be a better idea.

~~~
kortilla
Consider embedding gobgp directly if the issue is performance of grpc.

CoreBGP isn’t for you if you want something to do the work of evpn parsing for
you. This framework gives you hooks to the very low level bgp state machine.
There is a lot on top to do yourself to support the exotic address families.

~~~
adieu
Actually I'm quite satisfied with the performance.

The main reason I'm considering using CoreBGP directly is that in order to use
the evpn project I'm building, the user has to setup a GoBGP instance which
might cause problems.

Embedding GoBGP just like kube-router[0] did might be a good idea too. Thank
you for the advice.

[0]: [https://github.com/cloudnativelabs/kube-
router](https://github.com/cloudnativelabs/kube-router)

------
detaro
Quite interesting, both the project and the ideas behind it and in the
referenced paper. I really need to dust off that BGP lab setup...

