? ldpd ? ldpd-impnull.patch ? ldpd.cat8 ? ldpd.conf.cat5 ? parse.c Index: kroute.c =================================================================== RCS file: /cvs/src/usr.sbin/ldpd/kroute.c,v retrieving revision 1.7 diff -u -r1.7 kroute.c --- kroute.c 3 Mar 2010 10:17:05 -0000 1.7 +++ kroute.c 10 Apr 2010 15:55:56 -0000 @@ -1091,10 +1091,17 @@ iov[iovcnt].iov_base = &label_out; iov[iovcnt++].iov_len = sizeof(label_out); - if (family == AF_MPLS) - hdr.rtm_mpls = MPLS_OP_SWAP; - else - hdr.rtm_mpls = MPLS_OP_PUSH; + if (ntohl(kroute->remote_label) >> MPLS_LABEL_OFFSET == MPLS_LABEL_IMPLNULL) { + if (family == AF_MPLS) + hdr.rtm_mpls = MPLS_OP_POP; + else + return 0; + } else { + if (family == AF_MPLS) + hdr.rtm_mpls = MPLS_OP_SWAP; + else + hdr.rtm_mpls = MPLS_OP_PUSH; + } } Index: lde_lib.c =================================================================== RCS file: /cvs/src/usr.sbin/ldpd/lde_lib.c,v retrieving revision 1.14 diff -u -r1.14 lde_lib.c --- lde_lib.c 3 Mar 2010 10:17:05 -0000 1.14 +++ lde_lib.c 10 Apr 2010 15:55:57 -0000 @@ -118,7 +118,7 @@ rtctl.local_label = r->local_label; rtctl.remote_label = r->remote_label; - if (!r->present || r->remote_label == NO_LABEL) + if (!r->present) rtctl.in_use = 0; else rtctl.in_use = 1;