This page describes status of on-going work with MPLS implementation on FreeBSD.

SVN repository is available at svn://freebsd.mpls.in/freebsd_mpls
It is also possile to browse Web interface
BIRD DEVELOPMENT BRANCH (WEB): bird_mpls GIT REPO: bird.git
Last bird snapshot: 2013-02-22 (Available as FreeBSD port: net/bird-devel) browse directory
Project blog and documentation
Contacts: feel free to write to freebsd at mpls.in or jabber: melifaro at <default freebsd firewall>.ru

Current status:

MANDATORY REQUIREMENTS

Interface fibs We need fib (VRF, really) to be applied to any interface. This simplifies CE-PE implementation (ipfw setfib is not needed) and enables AToM. ether_input(), vlan_ether_input() and all other related L2 input routines (e.g. tun/tap/gif/gre/ng_iface/etc..) will be affected. Kernel interface and interface flag is also needed. This will probably be done with ifconfig wiki 100%
In-kernel label storage (lfib) We need the possibility to get/set MPLS lfib information (add/remove/assign label) wiki 80%
Simple hash for AF_MPLS instead of RADIX Hash table and very simple hash function should improve label switching performace wiki 10%
MPLS unicast input/output We need PE router implementation (e.g. pass packets to/from MPLS cloud) plus simple MPLS forwarding wiki 30%
Routing socket kern/134931 and ABI keeping are showstoppers. We need FIB and MPLS info in routing messages wiki 60%
Reasonable amount of fibs At the moment, only 16 fibs can be used x 10%
MPLS traceroute Normal network diagnosting tools will not work (as expected) in MPLS domain. We should implement
RFC 4379 (Detecting Multi-Protocol Label Switched (MPLS) Data Plane Failures) and?
RFC 4950 (ICMP Extensions for Multiprotocol Label Switching)
x 0%
Netgraph: ng_mpls Pass AF_MPLS mbufs to netgraph nodes based on local label wiki 55%
Netgraph: ng_setfib Just for testing and binding wiki 95%
bird: LDP Implement LDP RFC 5036 protocol in BIRD routing software wiki 80%
bird: multiprotocol core Implement general support for abstact address tables (MPLS, VPNvX) wiki 100%

Layer 3 VPNS

Kernel: L3VPNs Permit L3 VPN label popping without routing lookup wiki 30%
Netgraph: ng_netflow VRF-aware traffic accounting wiki 99%
bird: BGP L3 VPNS (VPNv4) Implement VPN extensions described in RFC 4364 x 80%
bird: BGP L3 VPNS (VPNv6) Implement VPN extensions described in RFC 4364 x 10%
bird: L3VPN protocol Implement l3vpn protocol for VPNvX routes convertation x 80%
bird: protocols interaction Implement protocols interaction (request LDP labels for prefixes) x 99%

AToM / VPLS

Netgraph: ng_eompls Node popping/pushing tunnel label and EoMPLS header wiki 10%

MPLS QoS

Netgraph: ng_car Implement packet color marking via mbuf tags wiki 10%
Netgraph: ng_qc Qos classifier (IP ToS, IP DSCP, MPLS TC -> DSCP mbuf) wiki 10%
Netgraph: ng_qa Apply Traffic class policy found in mbuf_tag wiki 10%

Traffic Engineering

Netgraph: ng_te Netgraph-base TE interfaces wiki 0%

OTHER

MPLS multicast input/output We have to implement it some day.. x 0%
IPv6 fib support We definitely needs this x 99%
External links:
Ayame MPLS stack
Ryan French GSOC 2008 MPLS
Linux MPLS project
valid html FreeBSD powered Vim powered IPv6 powered