mpls-linux can be downloaded from http://mpls-linux.sf.net/ When applied to recent kernels, it will generate a lot of rejects, but they can be easily fixed. The version on the official site breaks RTNETLINK API because it inserts one new field in the structure. The following patch should be applied to correct this : --- ./include/net/ip_fib.h.orig Sat Mar 20 10:37:43 2004 +++ ./include/net/ip_fib.h Sat Mar 20 10:38:02 2004 @@ -25,7 +25,6 @@ int *rta_iif; int *rta_oif; void *rta_gw; - u32 *rta_lsp; u32 *rta_priority; void *rta_prefsrc; struct rtattr *rta_mx; @@ -33,6 +32,7 @@ unsigned char *rta_protoinfo; unsigned char *rta_flow; struct rta_cacheinfo *rta_ci; + u32 *rta_lsp; }; struct fib_nh --- ./include/linux/rtnetlink.h.orig Sat Mar 20 17:21:07 2004 +++ ./include/linux/rtnetlink.h Sat Mar 20 17:22:00 2004 @@ -194,17 +194,17 @@ RTA_IIF, RTA_OIF, RTA_GATEWAY, - RTA_LSP, RTA_PRIORITY, RTA_PREFSRC, RTA_METRICS, RTA_MULTIPATH, RTA_PROTOINFO, RTA_FLOW, - RTA_CACHEINFO + RTA_CACHEINFO, + RTA_LSP, }; -#define RTA_MAX RTA_CACHEINFO +#define RTA_MAX RTA_LSP #define RTM_RTA(r) ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct rtmsg)))) #define RTM_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct rtmsg))