Live data from Hacker News

GoBGP: BGP Implemented in Go

github.com

11–20 of 130 posts

Re: GoBGP: BGP Implemented in Go

#11
This is the sort of thing Go really shines on: network and infrastructure services that would ordinarily be provided by big ugly C programs, where the latency requirements are significant but not as bad as raw packet forwarding. If your current best alternative is a C program, I'm not sure why you wouldn't seriously consider replacing any of the following with Go (or Rust) programs:

* Authority DNS

* DNS caches

* ntp

* SMTP

* SSH

* IMAP (added later)

* SNMP

* PBX/Telephony

Fortunately, as time goes on, fewer and fewer people need to run these services at all.

Re: GoBGP: BGP Implemented in Go

#12

So at the moment I see no reason why Go written BGP would be better than standard Quagga/Zebra. There aren't really concurrency or resource issues with large scale Quagga in my experience.

Nicer to integrate with other stuff maybe. E.g. for simple "just announce these routes" or a looking glass, where I'd right now might use the (python-based) ExaBGP

Re: GoBGP: BGP Implemented in Go

#13
post #7

So at the moment I see no reason why Go written BGP would be better than standard Quagga/Zebra. There aren't really concurrency or resource issues with large scale Quagga in my experience.

Quagga/Zebra is a giant C project. The industry is moving away, as much as it can, from serving critical infrastructure on giant C programs.

I'm not aware of any trend in the area of routing/switching for linux away from C projects. nftables and open vswitch are both new-ish and written C.

Re: GoBGP: BGP Implemented in Go

#14
post #13
post #7

Earlier quoted context omitted.

Quagga/Zebra is a giant C project. The industry is moving away, as much as it can, from serving critical infrastructure on giant C programs.

I'm not aware of any trend in the area of routing/switching for linux away from C projects. nftables and open vswitch are both new-ish and written C.

"As much as it can". nftables and openvwitch both forward packets, and thus need to be written in C (or, perhaps, in the long term, Rust).

Really, you're playing on a semantic ambiguity in the word "router". A BGP implementation doesn't forward packets; it maintains a database of forwarding paths that the packet forwarding layer consults. In a large Cisco router, the SOC that runs BGP and maintains the RIB isn't the same electronic component that forwards packets.

Re: GoBGP: BGP Implemented in Go

#16

I assume BGP == Border Gateway Protocol https://en.wikipedia.org/wiki/Border_Gateway_Protocol Suggestion: include a quick abstract what what BGP is with a link for more information.

It's the routing protocol that computes paths between ISPs and their largest customers, and that associates ranges of IP addresses with those networks.

Even if you're not a huge ISP, it's handy to have a BGP implementation available because you can use it to do network analytics and traffic management.

Re: GoBGP: BGP Implemented in Go

#18
post #11

This is the sort of thing Go really shines on: network and infrastructure services that would ordinarily be provided by big ugly C programs, where the latency requirements are significant but not as bad as raw packet forwarding. If your current best alternative is a C program, I'm not sure why you wouldn't seriously consider replacing any of the following with Go (or Rust) programs: * Authority DNS * DNS caches * ntp…

Cloudflare mentions they are heavy users of a golang DNS lib https://blog.cloudflare.com/dns-parser-meet-go-fuzzer/

ntppool.org uses golang for DNS https://news.ntppool.org/2012/10/new-dns-server/

Re: GoBGP: BGP Implemented in Go

#19
post #12

So at the moment I see no reason why Go written BGP would be better than standard Quagga/Zebra. There aren't really concurrency or resource issues with large scale Quagga in my experience.

Nicer to integrate with other stuff maybe. E.g. for simple "just announce these routes" or a looking glass, where I'd right now might use the (python-based) ExaBGP

Indeed, this is great for things where you want to do programmatic manipulation of routing. Something which ExaBGP is good at, but is very slow and Quagga/BIRD are really poor at, but are quite fast at.

Re: GoBGP: BGP Implemented in Go

#20

I assume BGP == Border Gateway Protocol https://en.wikipedia.org/wiki/Border_Gateway_Protocol Suggestion: include a quick abstract what what BGP is with a link for more information.

Is that necessary? I'm not sure how many people are unaware of what BGP is.

This is just classic karma mongering by running Google for other people and posting the result. So no prob. not necessary.

But it can be helpful for topics with ambiguous acronyms or tech. names (Apple) Swift vs. (OpenStack) Swift, for example.

Post reply on HN