X-Git-Url: https://git.decadent.org.uk/gitweb/?p=odhcp6c.git;a=blobdiff_plain;f=src%2Fra.h;h=af28d228c50b24e04e923699ee08ba3f9ccaeb78;hp=d4d93763af6827d3376081ce15891002cb027392;hb=9c8875f568caade53069b10790f02364ffc007a6;hpb=de89d2888d38d1ca6676070584ea6ff9c7dd6f23 diff --git a/src/ra.h b/src/ra.h index d4d9376..af28d22 100644 --- a/src/ra.h +++ b/src/ra.h @@ -22,32 +22,16 @@ struct icmpv6_opt { uint8_t type; uint8_t len; -}; - -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]; + uint8_t data[6]; }; #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 < (void *)end) && \ - (void *)((uint8_t *)opt + (opt->len << 3)) <= (void *)(end); \ - opt = (struct icmpv6_opt *)((uint8_t *)opt + (opt->len << 3))) + (void*)(opt + 1) <= (void*)(end) && opt->len > 0 &&\ + (void*)(opt + opt->len) <= (void*)(end); opt += opt->len) int ra_init(const char *ifname, const struct in6_addr *ifid);