X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fodhcpd.git;a=blobdiff_plain;f=src%2Frouter.c;h=fffdc4c24ba3401c41e877a968efb7c092927373;hp=86726be6f1033f8da784e25f34858065baa824f3;hb=58128dfdc336658477c248243af8c74a17d6e468;hpb=5df476f99b3254bfc26721452b17a5fc23e7142c diff --git a/src/router.c b/src/router.c index 86726be..fffdc4c 100644 --- a/src/router.c +++ b/src/router.c @@ -265,7 +265,7 @@ static void send_router_advert(struct uloop_timeout *event) struct { struct nd_router_advert h; - struct nd_opt_slla lladdr; + struct icmpv6_opt lladdr; struct nd_opt_mtu mtu; struct nd_opt_prefix_info prefix[RELAYD_MAX_PREFIXES]; } adv = { @@ -284,7 +284,7 @@ static void send_router_advert(struct uloop_timeout *event) adv.h.nd_ra_flags_reserved |= ND_RA_PREF_LOW; else if (iface->route_preference > 0) adv.h.nd_ra_flags_reserved |= ND_RA_PREF_HIGH; - odhcpd_get_mac(iface, adv.lladdr.addr); + odhcpd_get_mac(iface, adv.lladdr.data); // If not currently shutting down struct odhcpd_ipaddr addrs[RELAYD_MAX_PREFIXES]; @@ -376,7 +376,14 @@ static void send_router_advert(struct uloop_timeout *event) if (!dns_addr) dns_cnt = 0; - struct nd_opt_recursive_dns dns = {ND_OPT_RECURSIVE_DNS, (1 + (2 * dns_cnt)), 0, 0, htonl(dns_time)}; + struct { + uint8_t type; + uint8_t len; + uint8_t pad; + uint8_t pad2; + uint32_t lifetime; + } dns = {ND_OPT_RECURSIVE_DNS, (1 + (2 * dns_cnt)), 0, 0, htonl(dns_time)}; + // DNS Search options @@ -505,12 +512,11 @@ static void forward_router_advertisement(uint8_t *data, size_t len) icmpv6_for_each_option(opt, &adv[1], end) { if (opt->type == ND_OPT_SOURCE_LINKADDR) { // Store address of source MAC-address - mac_ptr = ((struct nd_opt_slla *)opt)->addr; + mac_ptr = opt->data; } else if (opt->type == ND_OPT_RECURSIVE_DNS && opt->len > 1) { - struct nd_opt_recursive_dns *dns = (struct nd_opt_recursive_dns *)opt; // Check if we have to rewrite DNS - dns_ptr = (struct in6_addr *)&dns[1]; - dns_count = (dns->len - 1) / 2; + dns_ptr = (struct in6_addr*)&opt->data[6]; + dns_count = (opt->len - 1) / 2; } }