The FRRouting Protocol Suite
Find a file
Louis Scalbert ef1fc25431 bgpd: add 'mpls bgp l3vpn-multi-domain-switching' command
When acting as intermediate device for BGP signaling, and
as transit device for data traffic, the device is not able
to modify the label value from incoming MPLS VPN updates:

- as BGP device, modifying the label value is necessary
when redistributing VPN prefixes with its own next-hop.
- as transit device that connects two ethernet segments
on separate interfaces, the return MPLS traffic must be
handled: the modified label value must be swapped with
the original label value and sent back to the original
next-hop.

The border router use case can be taken as example, when
it acts both as transit and as BGP device:
- When receiving updates from a border router peer, and where
interior traffic is expected to transit through the local
border router.
- When receiving updates from interior devices, and where
exterior traffic will transit through the local border router.

In those two situations, a new label is bound to the received
entry, and the entry is advertised to a new peer with the new
label. In the same time, an MPLS entry is created to handle
return traffic with the new mpls label: the traffic would be
swapped to the original MPLS label and the original next-hop.

This is the first commit of a series of patches, that address
the above mentioned issue.
The first commit introduces a new per-interface command:

> interface eth0
>  [no] mpls bgp l3vpn-multi-domain-switching
> exit

This command will authorise mpls vpn updates to have a new
label value bound to the mpls vpn routes received over that
interface.

Link: https://www.rfc-editor.org/rfc/rfc3107.html#section-3

> When a BGP speaker redistributes a route, the label(s) assigned to
> that route must not be changed (except by omission), unless the
> speaker changes the value of the Next Hop attribute of the route.

Link: https://www.rfc-editor.org/rfc/rfc3031.html#section-4.6
Link: https://www.rfc-editor.org/rfc/rfc4364.html#section-10
sub-chapter b.

Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2023-06-16 10:54:58 +02:00
.github github: Add rebase label on PR if it's > 50 commits behind 2023-05-09 09:37:23 +03:00
alpine docker: Enable Lua (scripting) for Alpine images 2023-04-08 21:04:07 +03:00
babeld Merge pull request #13354 from zmw12306/parse_request_subtlv 2023-05-02 10:28:20 -04:00
bfdd Merge pull request #13675 from zmw12306/bfd_version_check 2023-06-11 14:16:50 +03:00
bgpd bgpd: add 'mpls bgp l3vpn-multi-domain-switching' command 2023-06-16 10:54:58 +02:00
debian debian, redhat: updating changelog for new release 2023-06-06 15:21:30 -05:00
doc Merge pull request #13793 from LabNConsulting/aceelindem/coverity-doc-update 2023-06-14 06:57:57 -04:00
docker docker: ubuntu-ci 18.04 -> 22.04, topotest parallel run examples 2023-06-09 03:19:20 -04:00
eigrpd eigrpd: dest_addr does not need to be set to NULL 2023-06-01 08:58:16 -04:00
fpm *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
gdb *: Rename thread.[ch] to event.[ch] 2023-03-24 08:32:16 -04:00
grpc *: manual SPDX License ID conversions 2023-02-09 14:09:07 +01:00
include Merge pull request #12780 from opensourcerouting/spdx-license-id 2023-02-17 09:43:05 -05:00
isisd isisd: fix wrongly disabled flex-algo 2023-06-01 14:26:39 +02:00
ldpd ldpd: changes for code maintainability 2023-06-14 16:42:26 +05:30
lib Merge pull request #13766 from LabNConsulting/chopps/mgmtd-cleanup 2023-06-13 22:50:39 +03:00
m4 build: fix sed regex in Lua macro 2022-12-08 12:39:17 +01:00
mgmtd Merge pull request #13766 from LabNConsulting/chopps/mgmtd-cleanup 2023-06-13 22:50:39 +03:00
mlag build: fix AM_LDFLAGS usage (and gcov) 2021-07-21 17:10:08 +02:00
nhrpd nhrpd: Fix nhrpd memory leak 2023-04-24 11:18:39 +04:00
ospf6d ospf6d: Prevent redundant LSA generation before interface goes down 2023-05-31 16:44:44 -04:00
ospfclient *: Convert event.h to frrevent.h 2023-03-24 08:32:17 -04:00
ospfd Merge pull request #13612 from chiragshah6/fdev1 2023-06-13 09:55:07 -04:00
pathd Merge pull request #12933 from Orange-OpenSource/link_state 2023-04-20 18:33:21 +02:00
pbrd pbrd, zebra: fix zapi and netlink rule encoding 2023-06-12 16:39:26 -04:00
pceplib *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pimd pimd,pim6d: Correct the socket to send reg-stop msg 2023-06-12 22:51:44 -07:00
pkgsrc mgmtd: Bringup MGMTD daemon and datastore module support 2023-03-21 22:08:32 -04:00
python mgmtd: fully implement debug flags for mgmtd and clients 2023-05-01 13:47:12 -04:00
qpb mgmtd: Bringup MGMTD daemon and datastore module support 2023-03-21 22:08:32 -04:00
redhat debian, redhat: updating changelog for new release 2023-06-06 15:21:30 -05:00
ripd ripd: embed BFD YANG models 2023-05-25 13:47:54 +02:00
ripngd ripngd: Make sure we do not overuse higher values for ECMP count 2023-05-23 09:29:02 +03:00
sharpd Merge pull request #12933 from Orange-OpenSource/link_state 2023-04-20 18:33:21 +02:00
snapcraft snapcraft: Add pim6 daemon for PIM IPv6 to snap package 2022-11-19 12:52:36 +01:00
staticd staticd: staticd no longer loads config files 2023-06-12 02:02:18 -04:00
tests Merge pull request #13767 from opensourcerouting/fix/convert_rip_topo1_to_polling 2023-06-13 04:20:49 -04:00
tools tools: fix list value remove in frr-reload 2023-06-05 22:22:27 -07:00
vrrpd lib: Remove getopt.c and getopt1.c 2023-03-28 10:07:38 -04:00
vtysh vtysh: stop reading config file if user exits from root level. 2023-06-12 02:32:29 -04:00
watchfrr *: Convert event.h to frrevent.h 2023-03-24 08:32:17 -04:00
yang ripng: Implement allow-ecmp X command 2023-05-23 09:29:01 +03:00
zebra Merge pull request #13755 from LabNConsulting/ziemba/zebra-dplane-priority 2023-06-13 10:36:57 -04:00
.clang-format Revert "tools: config clang-format to allow aligned macros" 2023-05-15 15:32:48 +03:00
.dockerignore docker: Make docker image on CentOS 7 2019-11-26 19:29:30 +00:00
.flake8 style: add format checker config that matches FRR style standards 2023-04-18 05:18:26 -04:00
.git-blame-ignore-revs tools: Ignore mass renaming of topotests for git blame 2021-05-11 14:14:26 +03:00
.gitignore doc: configure: add configure option to generate .ccls file 2023-05-18 09:32:32 -04:00
.isort.cfg style: add format checker config that matches FRR style standards 2023-04-18 05:18:26 -04:00
.pylintrc style: add format checker config that matches FRR style standards 2023-04-18 05:18:26 -04:00
.travis.yml lib: libyang2 add missed conversion 2021-05-17 22:13:59 -04:00
bootstrap.sh build: turn on automake warnings (& symlinks) 2021-04-21 15:42:37 +02:00
buildtest.sh *: manual SPDX License ID conversions 2023-02-09 14:09:07 +01:00
config.version.in build: carry --with-pkg-extra-version into tarballs 2018-10-24 15:11:50 +02:00
configure.ac build: FRR 9.1 development version 2023-06-06 14:03:19 -05:00
COPYING *: sort out & explain licenses used in FRR 2023-02-09 12:46:13 +01:00
Makefile.am build: clean up mgmtd lib protobuf make syntax 2023-03-27 16:44:27 -04:00
README.md doc: Fix the link that points to Slack invitation in README 2022-03-24 13:13:37 +02:00
stamp-h.in Initial revision 2002-12-13 20:15:29 +00:00
version.h build: make builddir include path consistent 2021-04-21 15:42:33 +02:00

Icon

FRRouting

FRR is free software that implements and manages various IPv4 and IPv6 routing protocols. It runs on nearly all distributions of Linux and BSD and supports all modern CPU architectures.

FRR currently supports the following protocols:

  • BGP
  • OSPFv2
  • OSPFv3
  • RIPv1
  • RIPv2
  • RIPng
  • IS-IS
  • PIM-SM/MSDP
  • LDP
  • BFD
  • Babel
  • PBR
  • OpenFabric
  • VRRP
  • EIGRP (alpha)
  • NHRP (alpha)

Installation & Use

For source tarballs, see the releases page.

For Debian and its derivatives, use the APT repository at https://deb.frrouting.org/.

Instructions on building and installing from source for supported platforms may be found in the developer docs.

Once installed, please refer to the user guide for instructions on use.

Community

The FRRouting email list server is located here and offers the following public lists:

Topic List
Development dev@lists.frrouting.org
Users & Operators frog@lists.frrouting.org
Announcements announce@lists.frrouting.org

For chat, we currently use Slack. You can join by clicking the "Slack" link under the Participate section of our website.

Contributing

FRR maintains developer's documentation which contains the project workflow and expectations for contributors. Some technical documentation on project internals is also available.

We welcome and appreciate all contributions, no matter how small!

Security

To report security issues, please use our security mailing list:

security [at] lists.frrouting.org