[RFC net-next 0/3] IP imposition of per-nh MPLS encap

Robert Shearman
2015-06-01T16:48:22Z

In order to be able to function as a Label Edge Router in an MPLS
network, it is necessary to be able to take IP packets and impose an
MPLS encap and forward them out. The traditional approach of setting
up an interface for each "tunnel" endpoint doesn't scale for the
common MPLS use-cases where each IP route tends to be assigned a
different label as encap.

The solution suggested here for further discussion is to provide the
facility to define encap data on a per-nexthop basis using a new
netlink attribue, RTA_ENCAP, which would be opaque to the IPv4/IPv6
forwarding code, but interpreted by the virtual interface assigned to
the nexthop.

A new ipmpls interface type is defined to show the use of this
facility to allow IP packets to be imposed with an MPLS
encap. However, the facility is designed to be general enough to be
used by any encapsulation/tunneling mechanism that has similar
requirements of high-scale, high-variation-of-encap.

RFC because:
- IPv6 side not implemented
- struct rtable shouldn't be bloated by pointer+uint
- Hasn't been thoroughly tested yet

Robert Shearman (3):
net: infra for per-nexthop encap data
ipv4: storing and retrieval of per-nexthop encap
mpls: new ipmpls device for encapsulating IP packets as mpls

include/linux/rtnetlink.h | 7 +
include/net/dst.h | 11 ++
include/net/dst_ops.h | 2 +
include/net/ip_fib.h | 2 +
include/net/route.h | 3 +
include/net/rtnetlink.h | 11 ++
include/uapi/linux/if_arp.h | 1 +
include/uapi/linux/rtnetlink.h | 1 +
net/core/rtnetlink.c | 36 ++++++
net/ipv4/fib_frontend.c | 3 +
net/ipv4/fib_lookup.h | 2 +
net/ipv4/fib_semantics.c | 179 +++++++++++++++++++++++++-
net/ipv4/route.c | 24 ++++
net/mpls/Kconfig | 5 +
net/mpls/Makefile | 1 +
net/mpls/af_mpls.c | 2 +
net/mpls/ipmpls.c | 284 +++++++++++++++++++++++++++++++++++++++++
17 files changed, 572 insertions(+), 2 deletions(-)
create mode 100644 net/mpls/ipmpls.c

--
2.1.4