# ======================================
# Alice-LG configuration example
# ======================================

[server]
# configures the built-in webserver and provides global application settings
listen_http = 127.0.0.1:7340
# enable the prefix-lookup endpoint / the global search feature
enable_prefix_lookup = true
# Try to refresh the neighbor status on every request to /neighbors
enable_neighbors_status_refresh = false
asn = 9033
# this ASN is used as a fallback value in the RPKI feature and for route
# filtering evaluation with large BGP communities

# how many route servers will be refreshed at the same time
# if set to 0 (or for the matter of fact 1), refresh will be
# sequential. 
# Default: 1
routes_store_refresh_parallelism = 5
neighbors_store_refresh_parallelism = 10000

# how much time should pass between refreshes (in minutes)
# Default: 5
routes_store_refresh_interval = 5
neighbors_store_refresh_interval = 5

store_backend = postgres

[postgres]
url = "postgres://postgres:postgres@localhost:5432/alice"
min_connections = 10

[housekeeping]
# Interval for the housekeeping routine in minutes
interval = 5
# Try to release memory via a forced GC/SCVG run on every housekeeping run
force_release_memory = true

[theme]
path = /path/to/my/alice/theme/files
# Optional:
url_base = /theme

[pagination]
# Routes tables can be paginated, which comes in handy with
# peers announcing a lot of routes. Set to 0 to disable
# pagination.
routes_filtered_page_size = 250
routes_accepted_page_size = 250
routes_not_exported_page_size = 250

[rejection_reasons]
# a pair of a large BGP community value and a string to signal the processing
# results of route filtering
9033:65666:1 = An IP Bogon was detected
9033:65666:2 = Prefix is longer than 64
9033:65666:3 = Prefix is longer than 24
9033:65666:4 = AS path contains a bogon AS
9033:65666:5 = AS path length is longer than 64
9033:65666:6 = First AS in path is not the same as the Peer AS
9033:65666:7 = ECIX prefix hijack
9033:65666:8 = Origin AS not found in IRRDB for Peer AS-SET
9033:65666:9 = Prefix not found in IRRDB for Origin AS
9033:65666:10 = Advertised nexthop address is not the same as the peer

23:42:1 = Some made up reason

#
# Optional: Define communities which might be filtered
#           in the future.
[rejection_candidates]
communities = 6695:1102:14, 6695:1102:15, 23:42:46

[noexport]
load_on_demand = true # Default: false

[noexport_reasons]
# a pair of a large BGP community value and a string to signal the processing
# results of route distribution and the distribution policy applied to a route
9033:65667:1 = The target peer policy is Fairly-open and the sender ASN is an exception
9033:65667:2 = The target peer policy is Selective and the sender ASN is no exception
9033:65667:3 = The target peer policy is set to restrictive
9033:65667:4 = The sender has specifically refused export to the target peer, either through sending 65000:AS, or through the portal
9033:65667:5 = The sender has refused export to all peers and the target is no exception, either through sending 65000:0, or through the portal
9033:65667:6 = The Sender has set (peerRTTHigherDeny:ms) and the targets RTT ms >= then the ms in the community
9033:65667:7 = The Sender has set (peerRTTLowerDeny:ms) and the targets RTT ms <= then the ms in the community

23:46:1 = Some other made up reason


[rpki]
# shows rpki validation status in the client, based on the presence of a large
# BGP community on the route
enabled = true

# Optional, falling back to defaults as defined in:
#     https://www.euro-ix.net/en/forixps/large-bgp-communities/
valid       = 23042:1000:1
unknown     = 23042:1000:2
# not_checked = 23042:1000:3
invalid     = 23042:1000:4-*


# Define other known bgp communities
[bgp_communities]
1:23 = some tag
9033:65666:1 = ip bogon detected
# Wildcards are supported aswell:
0:* = do not redistribute to AS$1

#
# Define columns for neighbours and routes table,
# with <key> = <Table Header>
#
# and <key> := <object.path> Implicitly referencing the object,
#                            e.g. route.bgp.as_path -> bgp.as_path)
#           |= <Widget>      A widget with special rendering features,
#                            to which the object is applied. E.g.
#                            Uptime, which will be rendered as
#                            Uptime(neighbour).
#
# As per convention: Widgets are in Uppercase, object properties are
# in lowercase.
#
# Available Widgets for Neighbours:
#
# Uptime        Displays the relative uptime of this neighbour
# Description   The neighbour's description with link to routes page
#

[neighbours_columns]
address = Neighbour
asn = ASN
state = State
Uptime = Uptime
Description = Description
routes_received = Routes Received
routes_filtered = Filtered


[routes_columns]
network = Network
gateway = Gateway
interface = Interface
metric = Metric
bgp.as_path = AS Path


[lookup_columns]
network = Network
gateway = Gateway
neighbour.asn = ASN
neighbour.description = Description
bgp.as_path = AS Path
routeserver.name = RS


# Routeservers
# Birdwatcher Example
[source.rs0-example-v4]
name = rs1.example.com (IPv4)
# Optional: a group for the routeservers list
group = FRA
blackholes = 10.23.6.666, 10.23.6.665

[source.rs0-example-v4.birdwatcher]
api = http://rs1.example.com:29184/
# single_table / multi_table
type = multi_table
peer_table_prefix = T
pipe_protocol_prefix = M
# Timeout in seconds to wait for the status data (only required if enable_neighbors_status_refresh is true)
neighbors_refresh_timeout = 2

# Optional:
show_last_reboot = true

[source.rs1-example-v6]
name = rs1.example.com (IPv6)
[source.rs1-example-v6.birdwatcher]
timezone = Europe/Brussels
api = http://rs1.example.com:29186/
# single_table / multi_table
type = multi_table
peer_table_prefix = T
pipe_protocol_prefix = M

alt_pipe_protocol_suffix = "_lg"
alt_pipe_protocol_prefix = "C"

# Timeout in seconds to wait for the status data (only required if enable_neighbors_status_refresh is true)
neighbors_refresh_timeout = 2

# Optional: Examples for time format
# Please see https://golang.org/pkg/time/#pkg-constants for an
# explanation on how time parsing in go works.
servertime = 2006-01-02T15:04:05Z07:00
servertime_short = 02.01.2006
servertime_ext = Mon, 02 Jan 2006 15:04:05 -0700


# Routeservers
# GoBGP Example
[source.rs2-example]
name = rs2.example.com
group = AMS

[source.rs2-example.gobgp]
# host is the IP (or DNS name) and port for the remote GoBGP daemon
host = rs2.example.com:50051
# processing_timeout is a timeout in seconds configured per gRPC call to a given GoBGP daemon
processing_timeout = 300
type = multi_table
peer_table_prefix = T
pipe_protocol_prefix = M
neighbors_refresh_timeout = 2

[source.rs3-example.openbgpd-state-server]
 name = rs-example.openbgpd-state-server
 [source.rs3-example.openbgpd-state-server]
 api = http://165.22.27.105:29111/api

 # Cache results from openbgpd for n seconds, 0 disables the cache.
 cache_ttl = 30
 routes_cache_size = 1024 # Neighbors

[source.rs4-example-bgplgd]
name = rs-example.bgplgd
 [source.rs4-example-bgplgd.openbgpd-bgplgd]
 api = http://165.22.27.105:29111/api
 cache_ttl = 30
 routes_cache_size = 1024 # Neighbors

