Files
fgbgp/README.md
2018-03-23 18:59:10 +01:00

82 lines
1.8 KiB
Markdown

# FGBGP
This is a BGP library in Go.
## Features
* Decode/encode BGP messages
* Maintain a connexion with peers
* RIB data structure (add/remove IPv4/IPv6)
* Event-based API
* Encode/decode MRT format
## Why use this library?
It was developped to have a flexible BGP server running on a cluster with
load-balanced IPs and ready for scale.
A full-table will use around 300MB of RAM.
This is not a fully integrated BGP daemon: it does not filter routes or
automatically send BGP updates on the routes learned.
The behavior has to be implemented using the event-based API:
* Peer status change
* Update received
This library can also be used for standalone BGP Messages decoding,
reading MRT files or storing updates into a RIB and perform lookups.
### Supported BGP features
* Add-path (decode/encode only, not storing into the RIB)
* Route-refresh
* Basic BGP attributes (Origin, MED...)
* Aggregator
### Supported MRT features
* TABLEDUMPV2
* MRT update
* Status
## Example
```
import (
"fmt"
server "fgbgp/server"
)
type Collector struct {
}
func (col *Collector) Notification(msg *messages.BGPMessageNotification, n *server.Neighbor) (bool) {
return true
}
func (col *Collector) ProcessReceived(v interface{}, n *server.Neighbor) (bool, error) {
return true, nil
}
func (col *Collector) ProcessSend(v interface{}, n *server.Neighbor) (bool, error) {
return true, nil
}
func (col *Collector) ProcessUpdateEvent(e *messages.BGPMessageUpdate, n *server.Neighbor) (add bool) {
}
func main() {
m := server.NewManager(65001, net.ParseIP("10.0.0.1"), false, false)
m.UseDefaultUpdateHandler(10)
col := &Collector{}
m.SetEventHandler(&col)
m.SetUpdateEventHandler(&col)
err := m.NewServer(*BgpAddr)
if err != nil {
log.Fatal(err)
}
}
```