BGP Implemented in Go
github.com
github.com
It's still in a proof of concept stage and nowhere as complete as GoBGP though.
Also, they have a Rust version: https://github.com/osrg/rustybgp
https://elegantnetwork.github.io/posts/comparing-open-source...
This outdated model has caused countless route leaks over the years. Any new or updated BGP implementations should require an explicit allow policy for any route advertisement to take place (at least to eBGP neighbors). IOS-XR and JunOS require explicit policies.
This is covered in RFC8212: https://datatracker.ietf.org/doc/html/rfc8212
Quagga is usually easier to find examples for since it's modeled after Cisco switch syntax for configuration (same basic syntax of arista switches).
Both of these really suck to learn as a programmer since you're usually coming into these without much of a network engineering background. I remember struggling a lot with both of these config syntaxes until a network engineer took me under his wing and taught me basics, principles, the engineering challenges of packet switching at scale, etc.
https://www.six-group.com/en/newsroom/media-releases/2021/20...
(Actually, the original creator of SCION teaches my CompNet course, which is pretty cool. His rants on BGP are quite legendary.)
I'm assuming the context of these is lectures? Are they online anywhere? If not could you share what specifically about the protocol they feel so strongly about?
The tl;dw is that today's internet has comparatively poor availability, packet paths can be hijacked and there's little transparency in routing. SCION sets out to solve these problems, and has a few nice things in store, such as guaranteed bandwith between two hosts making DDoS attacks much less effective (COLIBRI QoS), or an incredibly high throughput packet filter (LightningFilter).
A previous company I worked with chose to build in C++ instead of Go because of that, as the performance requirements were very, very high. I would imagine a serious BGP usage would have very high requirements?
A one-second GC pause won't hurt you but managing the necessary data structures in memory can be challenging.
Anecdotally, gobgp is quite a bit slower than hand-optimized C implementations like frr (not that it matters for most gobgp use cases).
How so? It's a very common pattern in garbage collected languages to preallocate an array or structures and read/write into it, then "release" the array on finishing the function.
Nope. I am running 15 sessions with full transit tables, multiple exchanges, and private peers on a four core ARM CPU with 4 GB of RAM.
https://github.com/Exa-Networks/exabgp is written in python
Microsecond, perhaps. Likely millisecond. Nanosecond is faster than a single CPU instruction.
I get it’s written in go, but I have no idea what BGP is. Big green pages, binary grepping pipes, boisterous gambling pachyderms?
Jokes aside, y’all might want to give a brief about what this is for us uninitiated.
I opened a PR to fix that. https://github.com/osrg/gobgp/pull/2535
If you DDG, the top ten hits explain it without even clicking. Try that.
Cloudflare has already a good explanation on how it works, so I'll just point everyone out to this article: https://www.cloudflare.com/learning/security/glossary/what-i...
Also, about that undefined BGP. I'm not sure if this will help explain why BGP wasn't explained, but this is from NTT OSRG (Open-source Research Group), so probably they thought that everyone knew what BGP is (since that you probably won't encounter this otherwise).
Also, they have a Rust version: https://github.com/osrg/rustybgp
Also, if you don’t know what BGP is, you aren’t going to be interested in a project implementing BGP.
Take one of your repositories as an example: https://github.com/timraymond/pricegrabber
> A gem for interacting with the Pricegrabber API
Should you have to add "Application Programming Interface (API)" the first time you use "API" anywhere? Realistically no, because the audience can be assumed to understand what it means. If they don't, it's only a search away.
Same goes for networking and DNS/BGP/CNAME and more. If you're using a library/server for BGP, you either know what those terms are, or know how to find out more.
But not all resources are meant for beginning who don't know the basic terms in a field, and that's OK, because otherwise everything would be extremely verbose when it doesn't have to.
[1] An example: http://boston.conman.org/2022/02/16.1
If something isn’t clear on HN, try searching for it. If you don’t find it immediately, then you can ask without losing face.
It’s also, I assume by the authors, submitted to hackernews which is a pretty diverse place. “Basics” is relative.
I am not saying there should be a dissertation about how the thing works, but it’s generally bad form to use abbreviations without using the long form at least once - for people who would indeed like to search for more information.
Like the Internet... way to understate it.
Many enterprises use it for their connectivity. If you are multihomed it's basically essential.
Even if you are not multihomed BGP is the most robust way to handle failover between two uplinks to the same ISP. If you are not using full routes and just taking default from each ISP the requirements/load on your router(s) are almost nothing.
Another popular use case is inside private networks, especially over GRE tunnel meshes where the filtering features of BGP allow better/easier control over topology than OSPF.
I've even seen individual servers use BGP for anycasting (usually DNS servers) or http load balancing (with DSR and L4 hashing on the upstream router).
I have been a professional software developer for 22 years with a 4 year CS degree from a good school, and I only ever heard of BGP for the first time last year. Most developers never need to know about BGP. People learn new stuff every day.
The point stands. Define your acronyms unless they're really really basic, like HTTP or JSON.
"GoBGP is an open source Border Gateway Protocol (BGP) implementation..."
Writers should never assume that knowledge of an acronym is universal.
That is my point. If I have a repo for a BGP implementation, the only people who are going to use my code are going to know what BGP is. No one is going to stumble upon the repo, read about what BGP is, and then decide to use the code. Really, they wouldn’t even be ABLE to use the code… they aren’t going to have access to a router that supports BGP… if you have access to a router with BGP, you already know what BGP is.
Use DDG if the HN thread doesn’t immediately give you a hint.
In theory BGP can be used within a single network, though it is not well-suited to such an application except in very large networks. Facebook is known to use BGP internally [2]. Usually an "interior gateway protocol" like OSPF or IS-IS is better for internal routes, with BGP then distributing those routes to the external networks from the gateway routers (i.e. those routers that interconnect the networks). BGP can also be used for other, more niche applications within a single network, like setting up VPNs (VPLS, VPNv4, etc.).
[1] https://blog.benjojo.co.uk/post/bgp-stuck-routes-tcp-zero-wi...
[2] https://research.facebook.com/publications/running-bgp-in-da...