What is the purpose of BURN_BRIDGES?

Sebastian Huber sebastian.huber at embedded-brains.de
Thu Mar 28 12:46:02 UTC 2019


Hello,

I turned on BURN_BRIDGES in my global kernel configuration and now I get 
undefined references, e.g.

/build/rtems/5/lib/gcc/powerpc-rtems5/7.4.0/../../../../powerpc-rtems5/bin/ld: 
./libbsd.a(ip6_output.c.18.o): in function `_bsd_ip6_output':
/scratch/git-rtems-libbsd/build/powerpc-rtems5-qoriq_e6500_64-default/../../freebsd/sys/netinet6/ip6_output.c:548: 
undefined reference to `_bsd_in6_selectroute_fib'
/build/rtems/5/lib/gcc/powerpc-rtems5/7.4.0/../../../../powerpc-rtems5/bin/ld: 
./libbsd.a(nd6.c.18.o): in function `nd6_llinfo_timer':
/scratch/git-rtems-libbsd/build/powerpc-rtems5-qoriq_e6500_64-default/../../freebsd/sys/netinet6/nd6.c:881: 
undefined reference to `_bsd_nd6_ns_output'
/build/rtems/5/lib/gcc/powerpc-rtems5/7.4.0/../../../../powerpc-rtems5/bin/ld: 
./libbsd.a(nd6.c.18.o): in function `nd6_resolve_slow':
/scratch/git-rtems-libbsd/build/powerpc-rtems5-qoriq_e6500_64-default/../../freebsd/sys/netinet6/nd6.c:2461: 
undefined reference to `_bsd_nd6_ns_output'
/build/rtems/5/lib/gcc/powerpc-rtems5/7.4.0/../../../../powerpc-rtems5/bin/ld: 
./libbsd.a(nd6_nbr.c.18.o): in function `nd6_dad_ns_output':
/scratch/git-rtems-libbsd/build/powerpc-rtems5-qoriq_e6500_64-default/../../freebsd/sys/netinet6/nd6_nbr.c:1513: 
undefined reference to `_bsd_nd6_ns_output'

This is because of (in6_src.c):

#ifndef BURN_BRIDGES
int
in6_selectroute_fib(struct sockaddr_in6 *dstsock, struct ip6_pktopts *opts,
     struct ip6_moptions *mopts, struct route_in6 *ro,
     struct ifnet **retifp, struct rtentry **retrt, u_int fibnum)
{

     return (selectroute(dstsock, opts, mopts, ro, retifp,
         retrt, 0, fibnum));
}
#endif

And (ip6_output.c):

int
ip6_output(struct mbuf *m0, struct ip6_pktopts *opt,
     struct route_in6 *ro, int flags, struct ip6_moptions *im6o,
     struct ifnet **ifpp, struct inpcb *inp)
{
...
         if (ro->ro_lle)
             LLE_FREE(ro->ro_lle);    /* zeros ro_lle */
         ro->ro_lle = NULL;
         if (fwd_tag == NULL) {
             bzero(&dst_sa, sizeof(dst_sa));
             dst_sa.sin6_family = AF_INET6;
             dst_sa.sin6_len = sizeof(dst_sa);
             dst_sa.sin6_addr = ip6->ip6_dst;
         }
         error = in6_selectroute_fib(&dst_sa, opt, im6o, ro, &ifp,
             &rt, fibnum);
         if (error != 0) {
             if (ifp != NULL)
                 in6_ifstat_inc(ifp, ifs6_out_discard);
             goto bad;
         }

No BURN_BRIDGES conditional compilation. Is this option supposed to 
work? What is its purpose? I enabled it to get rid of some legacy stuff 
in bpf.c.

-- 
Sebastian Huber, embedded brains GmbH

Address : Dornierstr. 4, D-82178 Puchheim, Germany
Phone   : +49 89 189 47 41-16
Fax     : +49 89 189 47 41-09
E-Mail  : sebastian.huber at embedded-brains.de
PGP     : Public key available on request.

Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.



More information about the freebsd-hackers mailing list