# BGP This crate provides the `bgp` binary, which runs the Border Gateway Protocol daemon together with its read-only HTTP status interface. ``` cargo run -- path/to/config.textpb ``` The configuration format is defined in `crates/server/proto/config.proto`; `testdata/server.textpb` is a worked example. The daemon is configured entirely through that file: peers, and the routes it originates (`originate { prefix: ... }`). There is no way to change either at runtime. When `http_endpoint` is set the binary also serves: | Path | Purpose | |---|---| | `GET /statusz` | Status page: configuration, peers and session state, originated and received routes, live event log | | `GET /api/status` | Router ID, ASN, uptime and table sizes | | `GET /api/config` | The configuration file as read at startup | | `GET /api/peers` | Configured peers and established sessions | | `GET /api/routes/local` | Originated routes | | `GET /api/routes/received` | Adj-RIB-In contents | | `GET /api/events` | Server-sent events for session and route changes | | `GET /metricz` | Prometheus metrics | Everything under it is read-only and unauthenticated. Bind it to loopback or put it behind a reverse proxy. ## What it does today It establishes sessions (both dialling configured peers and accepting connections, with RFC 4271 collision detection), announces its originated routes to every peer with itself as next hop, and records what peers send in an Adj-RIB-In. It does not select best paths, re-advertise received routes or program a forwarding table, and it has no import or export policy. ## Who may connect Connections are taken only from the addresses of configured peers, and from each of those only a few at a time. Anything else is closed unread and counted in `bgp_connections_refused_total`. `accept_unconfigured_peers: true` lets any host open a session as any AS; it exists for tests on a closed network. ## Trying it without a router `fake_peer` is a minimal BGP speaker that connects to the daemon, announces a prefix, prints every UPDATE it receives and, with `--echo`, re-announces each received prefix back with its own ASN prepended (dropping NO_EXPORT routes). That makes originated prefixes show up in the received table as if they had travelled through a neighbouring AS: ``` cargo run -- testdata/server.textpb cargo run -p bgp-integration-tests --example fake_peer -- \ --server 127.0.0.1:179 --asn 65001 --announce 203.0.113.0/24 --echo ``` Please refer to the other implementation crates in this repository where most of the actual implementation lives. Warning: This is still very much a work in progress and is not yet ready for production use.