Redirecting this to tech@

Consus has confirmed this fixed his "issue".  I plan to commit it this
week-end if I hear no objection.

[email protected] (Jérémie Courrèges-Anglas) writes:

> Thanks for the detailed report.
>
> This diff makes rtadvd aware of route info messages on the listening
> side, no functional change except that the error message goes away.
> We just ignore the message since in that case there's no good reason to
> try to validate the more specifics advertized by other routers.
>
> ok?

Index: rtadvd.c
===================================================================
RCS file: /cvs/src/usr.sbin/rtadvd/rtadvd.c,v
retrieving revision 1.45
diff -u -p -r1.45 rtadvd.c
--- rtadvd.c    5 May 2013 14:25:52 -0000       1.45
+++ rtadvd.c    6 May 2014 14:21:42 -0000
@@ -121,6 +121,7 @@ union nd_opts {
 #define NDOPT_FLAG_MTU         (1 << 4)
 #define NDOPT_FLAG_RDNSS       (1 << 5)
 #define NDOPT_FLAG_DNSSL       (1 << 6)
+#define NDOPT_FLAG_ROUTE_INFO  (1 << 7)
 
 u_int32_t ndopt_flags[] = {
        [ND_OPT_SOURCE_LINKADDR]        = NDOPT_FLAG_SRCLINKADDR,
@@ -128,6 +129,7 @@ u_int32_t ndopt_flags[] = {
        [ND_OPT_PREFIX_INFORMATION]     = NDOPT_FLAG_PREFIXINFO,
        [ND_OPT_REDIRECTED_HEADER]      = NDOPT_FLAG_RDHDR,
        [ND_OPT_MTU]                    = NDOPT_FLAG_MTU,
+       [ND_OPT_ROUTE_INFO]             = NDOPT_FLAG_ROUTE_INFO,
        [ND_OPT_RDNSS]                  = NDOPT_FLAG_RDNSS,
        [ND_OPT_DNSSL]                  = NDOPT_FLAG_DNSSL,
 };
@@ -809,7 +811,8 @@ ra_input(int len, struct nd_router_adver
        if (nd6_options((struct nd_opt_hdr *)(ra + 1),
                        len - sizeof(struct nd_router_advert),
                        &ndopts, NDOPT_FLAG_SRCLINKADDR | NDOPT_FLAG_PREFIXINFO
-                       | NDOPT_FLAG_MTU | NDOPT_FLAG_RDNSS | 
NDOPT_FLAG_DNSSL)) {
+                       | NDOPT_FLAG_MTU | NDOPT_FLAG_ROUTE_INFO
+                       | NDOPT_FLAG_RDNSS | NDOPT_FLAG_DNSSL)) {
                log_warnx("ND option check failed for an RA from %s on %s",
                    inet_ntop(AF_INET6, &from->sin6_addr,
                        ntopbuf, INET6_ADDRSTRLEN),
@@ -1109,6 +1112,7 @@ nd6_options(struct nd_opt_hdr *hdr, int 
                }
 
                if (hdr->nd_opt_type > ND_OPT_MTU &&
+                   hdr->nd_opt_type != ND_OPT_ROUTE_INFO &&
                    hdr->nd_opt_type != ND_OPT_RDNSS &&
                    hdr->nd_opt_type != ND_OPT_DNSSL)
                {
@@ -1142,6 +1146,7 @@ nd6_options(struct nd_opt_hdr *hdr, int 
                case ND_OPT_SOURCE_LINKADDR:
                case ND_OPT_TARGET_LINKADDR:
                case ND_OPT_REDIRECTED_HEADER:
+               case ND_OPT_ROUTE_INFO:
                case ND_OPT_RDNSS:
                case ND_OPT_DNSSL:
                        break;  /* we don't care about these options */

-- 
jca | PGP : 0x1524E7EE / 5135 92C1 AD36 5293 2BDF  DDCC 0DFA 74AE 1524 E7EE

Reply via email to