99 lines
3.6 KiB
Protocol Buffer
99 lines
3.6 KiB
Protocol Buffer
syntax = "proto3";
|
|
|
|
package bgp.server;
|
|
|
|
// Top level BGP Server configuration.
|
|
message BgpConfig {
|
|
// The router ID, written as a dotted-quad IPv4 address (e.g. "192.0.2.1").
|
|
// Required even on IPv6-only routers per RFC 4271.
|
|
string router_id = 1;
|
|
|
|
// The local 4-byte AS number (RFC 6793).
|
|
uint32 local_asn = 2;
|
|
|
|
// Endpoints to accept incoming BGP connections on.
|
|
// Defaults to 0.0.0.0:179 and [::]:179 when empty.
|
|
repeated TcpEndpoint listen_endpoints = 3;
|
|
|
|
// Peers configured on this server.
|
|
repeated Peer peers = 4;
|
|
|
|
// Limits on routes originated locally (e.g. via the demo UI).
|
|
LocalRoutePolicy local_route_policy = 5;
|
|
|
|
// Where to serve the HTTP API, status page and metrics. The port is
|
|
// required. Unset disables the HTTP server.
|
|
TcpEndpoint http_endpoint = 6;
|
|
|
|
// Initial delay between attempts to connect to a configured peer, in
|
|
// seconds. Doubles after each failure up to two minutes. Defaults to 5.
|
|
uint32 connect_retry_seconds = 7;
|
|
|
|
// Connection collisions (RFC 4271 §6.8) against a session that is already
|
|
// Established are, by default, resolved by closing the new connection.
|
|
// When true they are resolved like any other collision: the connection
|
|
// initiated by the higher BGP Identifier survives, and a second connection
|
|
// opened by the same side replaces the first. This lets a peer that
|
|
// restarted take over from a session we have not yet noticed is dead,
|
|
// instead of being refused until the hold timer expires.
|
|
bool collision_detect_established_state = 8;
|
|
|
|
// Watch for pings (ICMPv6 echo requests) sent to the lab prefixes and show
|
|
// them on the status page. Unset disables it.
|
|
PingMonitor ping_monitor = 9;
|
|
}
|
|
|
|
// Shows who is pinging addresses that this host answers for.
|
|
//
|
|
// The host must already own the addresses, e.g. through an AnyIP route
|
|
// ("ip -6 route add local 2001:db8::/40 dev lo"); the kernel keeps answering
|
|
// the pings and we only receive a copy. Opening the raw ICMPv6 socket this
|
|
// needs takes CAP_NET_RAW on Linux. IPv6 only.
|
|
message PingMonitor {
|
|
// Only pings to destinations inside these prefixes are shown. Defaults to
|
|
// the IPv6 prefixes in local_route_policy.allowed_prefixes.
|
|
repeated string prefixes = 1;
|
|
}
|
|
|
|
// Limits on locally originated routes.
|
|
message LocalRoutePolicy {
|
|
// A locally originated route is accepted only if it is covered by one of
|
|
// these prefixes, written in CIDR notation (e.g. "10.100.0.0/16").
|
|
// Empty means any prefix may be announced.
|
|
repeated string allowed_prefixes = 1;
|
|
|
|
// Maximum number of routes a single owner may announce. 0 means unlimited.
|
|
uint32 max_routes_per_owner = 2;
|
|
}
|
|
|
|
// An IP address and port pair.
|
|
message TcpEndpoint {
|
|
// IP address (V4 or V6).
|
|
string address = 1;
|
|
// TCP port. Defaults to 179 for BGP when unset.
|
|
uint32 port = 2;
|
|
}
|
|
|
|
// Configuration of a BGP peer.
|
|
message Peer {
|
|
// Human-readable name for logging and diagnostics.
|
|
string name = 1;
|
|
|
|
// Address and port to connect to for this peer.
|
|
TcpEndpoint endpoint = 2;
|
|
|
|
// The peer's 4-byte AS number (RFC 6793).
|
|
uint32 remote_asn = 3;
|
|
|
|
// Hold time to advertise in the OPEN message, in seconds (RFC 4271 §4.2).
|
|
// Must be 0 or >= 3. Defaults to 90 when unset.
|
|
uint32 hold_time_seconds = 4;
|
|
|
|
// Source IP address for connections we open to this peer. It is also the
|
|
// next hop of the routes we send it. Required when the peer identifies us
|
|
// by address and the host has several, e.g. when both speakers run on the
|
|
// same machine. Must be the same address family as the endpoint. Unset
|
|
// lets the operating system choose.
|
|
string local_address = 5;
|
|
}
|