X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fodhcpd.git;a=blobdiff_plain;f=src%2Fodhcpd.c;h=cb8451308a7f4cbe14ac49868775a727b690cffa;hp=6070bfb7904c592ccbda36de8e7944ebdeb32c7e;hb=3f417e55d5208df5b91aa9b101657bbc7a461614;hpb=8b19de666e02f24280728938dd985ecb3673b83e diff --git a/src/odhcpd.c b/src/odhcpd.c index 6070bfb..cb84513 100644 --- a/src/odhcpd.c +++ b/src/odhcpd.c @@ -83,9 +83,6 @@ int main() if (init_dhcpv4()) return 4; - if (init_ubus()) - return 4; - odhcpd_run(); return 0; } @@ -131,6 +128,7 @@ int odhcpd_get_interface_mtu(const char *ifname) int odhcpd_get_mac(const struct interface *iface, uint8_t mac[6]) { struct ifreq ifr; + memset(&ifr, 0, sizeof(ifr)); strncpy(ifr.ifr_name, iface->ifname, sizeof(ifr.ifr_name)); if (ioctl(ioctl_sock, SIOCGIFHWADDR, &ifr) < 0) return -1; @@ -242,6 +240,14 @@ ssize_t odhcpd_get_interface_addresses(int ifindex, if (ifa->ifa_flags & IFA_F_DEPRECATED) addrs[ret].preferred = 0; + addrs[ret].has_class = false; + addrs[ret].class = 0; +#ifdef WITH_UBUS + struct interface *iface = odhcpd_get_interface_by_index(ifindex); + if (iface) + addrs[ret].has_class = ubus_get_class(iface->ifname, + &addrs[ret].addr, &addrs[ret].class); +#endif ++ret; } @@ -314,8 +320,7 @@ static void odhcpd_receive_packets(struct uloop_fd *u, _unused unsigned int even int *hlim = NULL; struct in6_pktinfo *pktinfo; struct in_pktinfo *pkt4info; - for (struct cmsghdr *ch = CMSG_FIRSTHDR(&msg); ch != NULL && - destiface == 0; ch = CMSG_NXTHDR(&msg, ch)) { + for (struct cmsghdr *ch = CMSG_FIRSTHDR(&msg); ch != NULL; ch = CMSG_NXTHDR(&msg, ch)) { if (ch->cmsg_level == IPPROTO_IPV6 && ch->cmsg_type == IPV6_PKTINFO) { pktinfo = (struct in6_pktinfo*)CMSG_DATA(ch);