X-Git-Url: https://git.decadent.org.uk/gitweb/?p=odhcp6c.git;a=blobdiff_plain;f=src%2Fra.h;h=d4d93763af6827d3376081ce15891002cb027392;hp=a31e7f69cfeba44b5757ccfc9f5e4491887b64a2;hb=de89d2888d38d1ca6676070584ea6ff9c7dd6f23;hpb=dfc86766bf0b3d28f55adf5deb340b1d40176808 diff --git a/src/ra.h b/src/ra.h index a31e7f6..d4d9376 100644 --- a/src/ra.h +++ b/src/ra.h @@ -22,17 +22,34 @@ 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); +bool ra_link_up(void); bool ra_process(void);