]> git.ipfire.org Git - thirdparty/bird.git/commit - nest/proto.c
MPLS subsystem
authorOndrej Zajicek <santiago@crfreenet.org>
Wed, 14 Sep 2022 23:38:18 +0000 (01:38 +0200)
committerOndrej Zajicek <santiago@crfreenet.org>
Wed, 4 Oct 2023 11:01:21 +0000 (13:01 +0200)
commit333ddd4f981b90d5d3dff166b6abf9bf40bede9f
treecfe873631d254b9198d7040a7f922f65d158f15d
parente55696a4f88b63c622bb3a0360f9114d01253e53
MPLS subsystem

The MPLS subsystem manages MPLS labels and handles their allocation to
MPLS-aware routing protocols. These labels are then attached to IP or VPN
routes representing label switched paths -- LSPs.

There was already a preliminary MPLS support consisting of MPLS label
net_addr, MPLS routing tables with static MPLS routes, remote labels in
next hops, and kernel protocol support.

This patch adds the MPLS domain as a basic structure representing local
label space with dynamic label allocator and configurable label ranges.
To represent LSPs, allocated local labels can be attached as route
attributes to IP or VPN routes with local labels as attributes.

There are several steps for handling LSP routes in routing protocols --
deciding to which forwarding equivalence class (FEC) the LSP route
belongs, allocating labels for new FECs, announcing MPLS routes for new
FECs, attaching labels to LSP routes. The FEC map structure implements
basic code for managing FECs in routing protocols, therefore existing
protocols can be made MPLS-aware by adding FEC map and delegating
most work related to local label management to it.
21 files changed:
conf/cf-lex.l
conf/conf.c
conf/conf.h
conf/confbase.Y
filter/data.h
lib/ip.h
nest/Doc
nest/Makefile
nest/config.Y
nest/mpls.Y [new file with mode: 0644]
nest/mpls.c [new file with mode: 0644]
nest/mpls.h [new file with mode: 0644]
nest/proto.c
nest/protocol.h
nest/route.h
nest/rt-attr.c
nest/rt-show.c
nest/rt-table.c
sysdep/unix/krt.Y
sysdep/unix/main.c
test/bt-utils.c