--- src/sys/netinet/ip_output.c 2008/06/17 20:50:11 1.45 +++ src/sys/netinet/ip_output.c 2008/07/07 22:02:10 1.46 @@ -39,6 +39,7 @@ #include "opt_ipfilter.h" #include "opt_ipsec.h" #include "opt_mbuf_stress_test.h" +#include "opt_mpls.h" #include #include @@ -65,6 +66,8 @@ #include #include +#include + static MALLOC_DEFINE(M_IPMOPTS, "ip_moptions", "internet multicast options"); #ifdef IPSEC @@ -1021,6 +1024,13 @@ pass: m->m_pkthdr.len = tmp; } #endif + +#ifdef MPLS + struct rtentry *send_route = ro->ro_rt; /* copy-in/copy-out parameter */ + + if (!mpls_output_process(ifp, m, &dst, send_route)) + goto done; +#endif error = ifp->if_output(ifp, m, (struct sockaddr *)dst, ro->ro_rt); goto done; @@ -1064,6 +1074,12 @@ pass: ia->ia_ifa.if_opackets++; ia->ia_ifa.if_obytes += m->m_pkthdr.len; } +#ifdef MPLS + struct rtentry *send_route = ro->ro_rt; /* copy-in/copy-out parameter */ + + if (!mpls_output_process(ifp, m, &dst, send_route)) + goto done; +#endif error = ifp->if_output(ifp, m, (struct sockaddr *)dst, ro->ro_rt); } else {