Add support for MPLS on Linux
Closes #135 Signed-off-by: Maximilian Wilhelm <max@sdn.clinic>
This commit is contained in:
parent
5b7f5b712b
commit
667943f46c
6 changed files with 102 additions and 0 deletions
1
Makefile
1
Makefile
|
@ -108,6 +108,7 @@ EXECUTOR_SCRIPTS_OPT ?= \
|
|||
bridge \
|
||||
ethtool \
|
||||
gre \
|
||||
mpls \
|
||||
tunnel \
|
||||
vrf \
|
||||
vxlan \
|
||||
|
|
40
doc/interfaces-mpls.scd
Normal file
40
doc/interfaces-mpls.scd
Normal file
|
@ -0,0 +1,40 @@
|
|||
interfaces-mpls(5)
|
||||
|
||||
# NAME
|
||||
|
||||
*interfaces-mpls* - MPLS vocabulary for the interfaces(5) file format
|
||||
|
||||
# DESCRIPTION
|
||||
|
||||
Linux allows has support for MultiProtocol Label Switching (MPLS) for a while
|
||||
now. The following options allow for this configuration.
|
||||
|
||||
# MPLS-RELATED OPTIONS
|
||||
|
||||
The MPLS executor will only modify the sysctl configuration if these options
|
||||
are provided, otherwise other mechanisms such as /etc/sysctl.conf may be used.
|
||||
If MPLS is enabled on (at least) one interface the executor will load the
|
||||
_mpls_iptunnel_ kernel module.
|
||||
|
||||
Be aware that you have to set the _platform_labels_ sysctl to make MPLS work.
|
||||
See https://www.kernel.org/doc/Documentation/networking/mpls-sysctl.rst for
|
||||
more details on the MPLS related knobs in the Linux kernel.
|
||||
|
||||
|
||||
*mpls-enable* _yes|no_
|
||||
Control whether packets can be input on this interface. If disabled,
|
||||
packets carrying an MPLS label will be discarded without further
|
||||
processing.
|
||||
|
||||
# EXAMPLES
|
||||
|
||||
```
|
||||
iface eth0
|
||||
address 2001:db8:08:15::42/64
|
||||
#
|
||||
mpls-enable yes
|
||||
```
|
||||
|
||||
# AUTHORS
|
||||
|
||||
Maximilian Wilhelm <max@sdn.clinic>
|
|
@ -240,6 +240,7 @@ iface eth0
|
|||
*interfaces-bond*(5)
|
||||
*interfaces-bridge*(5)
|
||||
*interfaces-forward*(5)
|
||||
*interfaces-mpls*(5)
|
||||
*interfaces-ppp*(5)
|
||||
*interfaces-vrf*(5)
|
||||
*interfaces-vxlan*(5)
|
||||
|
|
36
executor-scripts/linux/mpls
Executable file
36
executor-scripts/linux/mpls
Executable file
|
@ -0,0 +1,36 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# Maximilian Wilhelm <max@sdn.clinic>
|
||||
# -- Thu, 17 Dec 2020 03:02:10 +0100
|
||||
#
|
||||
# This executor is responsible for setting up MPLS decapsulation on a given interface.
|
||||
#
|
||||
# See interfaces-mpls(5) for a list of supported options.
|
||||
#
|
||||
|
||||
yesno() {
|
||||
case "$1" in
|
||||
yes|1) echo 1 ;;
|
||||
*) echo 0 ;;
|
||||
esac
|
||||
}
|
||||
|
||||
[ -z "$VERBOSE" ] || set -x
|
||||
|
||||
# We only operate in pre-up phase
|
||||
[ "$PHASE" != "pre-up" ] && exit 0
|
||||
|
||||
|
||||
if [ "$IF_MPLS_ENABLE" ]; then
|
||||
value=$(yesno $IF_MPLS_ENABLE)
|
||||
|
||||
# Load mpls module if we should enable MPLS decap on (at least) one interface
|
||||
if [ "${value}" = 1 ]; then
|
||||
${MOCK} modprobe mpls_iptunnel
|
||||
fi
|
||||
|
||||
# If MPLS support isn't loaded and we are not MOCKing, carry on
|
||||
if [ -f "/proc/sys/net/mpls/conf/$IFACE/input" -o "${MOCK}" ]; then
|
||||
${MOCK} /bin/sh -c "echo ${value} > /proc/sys/net/mpls/conf/$IFACE/input"
|
||||
fi
|
||||
fi
|
|
@ -9,6 +9,7 @@ atf_test_program{name='forward_test'}
|
|||
atf_test_program{name='gre_test'}
|
||||
atf_test_program{name='ipv6-ra_test'}
|
||||
atf_test_program{name='link_test'}
|
||||
atf_test_program{name='mpls_test'}
|
||||
atf_test_program{name='ppp_test'}
|
||||
atf_test_program{name='static_test'}
|
||||
atf_test_program{name='tunnel_test'}
|
||||
|
|
23
tests/linux/mpls_test
Executable file
23
tests/linux/mpls_test
Executable file
|
@ -0,0 +1,23 @@
|
|||
#!/usr/bin/env atf-sh
|
||||
|
||||
. $(atf_get_srcdir)/../test_env.sh
|
||||
EXECUTOR="$(atf_get_srcdir)/../../executor-scripts/linux/mpls"
|
||||
|
||||
tests_init \
|
||||
mpls_enable \
|
||||
mpls_disable
|
||||
|
||||
mpls_enable_body() {
|
||||
export MOCK=echo IFACE=vlan2342 PHASE=pre-up IF_MPLS_ENABLE=yes
|
||||
atf_check -s exit:0 \
|
||||
-o match:"modprobe mpls_iptunnel" \
|
||||
-o match:"echo 1 > /proc/sys/net/mpls/conf/vlan2342/input" \
|
||||
${EXECUTOR}
|
||||
}
|
||||
|
||||
mpls_disable_body() {
|
||||
export MOCK=echo IFACE=vlan2342 PHASE=pre-up IF_MPLS_ENABLE=no
|
||||
atf_check -s exit:0 \
|
||||
-o match:"echo 0 > /proc/sys/net/mpls/conf/vlan2342/input" \
|
||||
${EXECUTOR}
|
||||
}
|
Loading…
Reference in a new issue