65af6addd8110f0b1c19d9c31c0c95e915cb6f69
Updating Semgrep.yml file - Semgrep is a tool that will be used to scan Cloudflare's public repos for Supply chain, code and secrets. This work is part of Application & Product Security team's initiative to onboard Semgrep onto all of Cloudflare's public repos. In case of any questions, please reach out to "Hrushikesh Deshpande" on cf internal chat.
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)
}
}
Description
Languages
Go
100%