X-Git-Url: https://git.decadent.org.uk/gitweb/?p=odhcp6c.git;a=blobdiff_plain;f=src%2Fra.h;h=d4d93763af6827d3376081ce15891002cb027392;hp=af28d228c50b24e04e923699ee08ba3f9ccaeb78;hb=de89d2888d38d1ca6676070584ea6ff9c7dd6f23;hpb=26c5d8724355b29694af684ee29b47e52129a33c diff --git a/src/ra.h b/src/ra.h index af28d22..d4d9376 100644 --- a/src/ra.h +++ b/src/ra.h @@ -22,16 +22,32 @@ struct icmpv6_opt { uint8_t type; uint8_t len; - uint8_t data[6]; }; -#define ND_OPT_ROUTE_INFORMATION 24 +struct nd_opt_recursive_dns { + uint8_t type; + uint8_t len; + uint8_t pad; + uint8_t pad2; + uint32_t lifetime; + struct in6_addr servers[1]; +}; +#define ND_OPT_ROUTE_INFORMATION 24 +struct nd_opt_route_info { + uint8_t nd_opt_ri_type; + uint8_t nd_opt_ri_len; + uint8_t nd_opt_ri_prefix_len; + uint8_t nd_opt_ri_prf; + uint32_t nd_opt_ri_route_lifetime; + uint8_t nd_opt_ri_prefix[1]; +}; #define icmpv6_for_each_option(opt, start, end)\ for (opt = (struct icmpv6_opt*)(start);\ - (void*)(opt + 1) <= (void*)(end) && opt->len > 0 &&\ - (void*)(opt + opt->len) <= (void*)(end); opt += opt->len) + ((void *)opt < (void *)end) && \ + (void *)((uint8_t *)opt + (opt->len << 3)) <= (void *)(end); \ + opt = (struct icmpv6_opt *)((uint8_t *)opt + (opt->len << 3))) int ra_init(const char *ifname, const struct in6_addr *ifid);