I am running an OpenBSD 5.9 box as a firewall/router on a Comcast cable
connection.  My box has 2 interfaces: em0 on external network (cable modem)
and em1 on internal network.  I have applied all available patches for 5.9.

For ipv6 I'm running wide-dhcpv6 package to get a non-temporary address on
em0 and prefix delegation (/64) on em1.

I'm using slaac on em0 to get the default inet6 route from Comcast - I have
"rtsol" line in hostname.em0.

Finally I'm running rtadvd on em1 to advertise inet6 route and prefix to
internal clients.  I'm using default rtadvd config (no config file).

This all works great, but one issue I'm noticing is netstat -rn output
seems to keep growing, particularly for ff02::1:ff routes on the internal
interface (em1).  After 2 days of uptime I have this:

$ netstat -rn | grep -c 'ff02::1:ff'
124

These routes look like this - notice c flag so these are cloned routes:

$ netstat -rn | grep  'ff02::1:ff'
ff02::1:ff02:e530%em1              link#3                         UHLc
  0        3     -     4 em1
ff02::1:ff04:8e23%em1              link#3                         UHLc
  0       71     -     4 em1
ff02::1:ff04:ee06%em1              link#3                         UHLc
  0        2     -     4 em1

Wikipedia says these are solicited node multicast addresses:
https://en.wikipedia.org/wiki/Solicited-node_multicast_address

Looking at the kernel code - I think these are all cloned child routes of a
route set up by this code in sys/netinet6/in6.c (interesting comment):

 807                         bzero(&info, sizeof(info));
 808                         info.rti_info[RTAX_DST] = sin6tosa(&mltaddr);
 809                         info.rti_info[RTAX_GATEWAY] =
sin6tosa(&ia6->ia_addr);
 810                         info.rti_info[RTAX_NETMASK] =
sin6tosa(&mltmask);
 811                         info.rti_info[RTAX_IFA] =
sin6tosa(&ia6->ia_addr);
 812                         /* XXX: we need RTF_CLONING to fake
nd6_rtrequest */
 813                         info.rti_flags = RTF_CLONING;
 814                         error = rtrequest(RTM_ADD, &info,
RTP_CONNECTED, NULL,
 815                             ifp->if_rdomain);

mltaddr is set to in6addr_linklocal_allnodes, which
is IN6ADDR_LINKLOCAL_ALLNODES_INIT, which is ff02::1:ff


Questions - Are these child routes really leaking?  Is there a max number
of cloned child routes or a timeout for these?  I cannot find any evidence
of this.

If they are leaking - I worry my poor router will eventually try to add all
possible 2^24 solicited node multicast entires to the routing table and die
of memory exhaustion.

Reply via email to