X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Frtnl.c;h=a6ff84b0702e4a08d15df66f642b1096294a384a;hb=fb8105e36eee2dd8a0671a3fcc7cfe307acdaf7a;hp=1aaef29c10884e73e27f92b8665888ef47e7a497;hpb=ecef3b775192ced774d70a7bbb0689132d75eb0c;p=framework%2Fconnectivity%2Fconnman.git diff --git a/src/rtnl.c b/src/rtnl.c index 1aaef29..a6ff84b 100644 --- a/src/rtnl.c +++ b/src/rtnl.c @@ -90,16 +90,7 @@ static connman_bool_t ether_blacklisted(const char *name) if (name == NULL) return TRUE; - /* virtual interface from VMware */ - if (g_str_has_prefix(name, "vmnet") == TRUE) - return TRUE; - - /* virtual interface from VirtualBox */ - if (g_str_has_prefix(name, "vboxnet") == TRUE) - return TRUE; - - /* virtual interface from Virtual Machine Manager */ - if (g_str_has_prefix(name, "virbr") == TRUE) + if (__connman_device_isfiltered(name) == TRUE) return TRUE; return FALSE; @@ -1193,18 +1184,18 @@ static void rtnl_newnduseropt(struct nlmsghdr *hdr) guint32 lifetime = -1; const char **domains = NULL; struct in6_addr *servers = NULL; - int nr_servers = 0; + int i, nr_servers = 0; int msglen = msg->nduseropt_opts_len; char *interface; - DBG("family %02x index %x len %04x type %02x code %02x", - msg->nduseropt_family, msg->nduseropt_ifindex, - msg->nduseropt_opts_len, msg->nduseropt_icmp_type, - msg->nduseropt_icmp_code); + DBG("family %d index %d len %d type %d code %d", + msg->nduseropt_family, msg->nduseropt_ifindex, + msg->nduseropt_opts_len, msg->nduseropt_icmp_type, + msg->nduseropt_icmp_code); if (msg->nduseropt_family != AF_INET6 || - msg->nduseropt_icmp_type != ND_ROUTER_ADVERT || - msg->nduseropt_icmp_code != 0) + msg->nduseropt_icmp_type != ND_ROUTER_ADVERT || + msg->nduseropt_icmp_code != 0) return; interface = connman_inet_ifname(msg->nduseropt_ifindex); @@ -1212,40 +1203,37 @@ static void rtnl_newnduseropt(struct nlmsghdr *hdr) return; for (opt = (void *)&msg[1]; - msglen >= 2 && msglen >= opt->nd_opt_len && opt->nd_opt_len; - msglen -= opt->nd_opt_len, - opt = ((void *)opt) + opt->nd_opt_len*8) { - - DBG("nd opt type %d len %d\n", - opt->nd_opt_type, opt->nd_opt_len); + msglen > 0; + msglen -= opt->nd_opt_len * 8, + opt = ((void *)opt) + opt->nd_opt_len*8) { - if (opt->nd_opt_type == 25) - servers = rtnl_nd_opt_rdnss(opt, &lifetime, - &nr_servers); - else if (opt->nd_opt_type == 31) - domains = rtnl_nd_opt_dnssl(opt, &lifetime); - } + DBG("remaining %d nd opt type %d len %d\n", + msglen, opt->nd_opt_type, opt->nd_opt_len); - if (nr_servers) { - int i, j; - char buf[40]; + if (opt->nd_opt_type == 25) { /* ND_OPT_RDNSS */ + char buf[40]; - for (i = 0; i < nr_servers; i++) { - if (!inet_ntop(AF_INET6, servers + i, buf, sizeof(buf))) - continue; + servers = rtnl_nd_opt_rdnss(opt, &lifetime, + &nr_servers); + for (i = 0; i < nr_servers; i++) { + if (!inet_ntop(AF_INET6, servers + i, buf, + sizeof(buf))) + continue; - if (domains == NULL || domains[0] == NULL) { connman_resolver_append_lifetime(interface, NULL, buf, lifetime); - continue; } - for (j = 0; domains[j]; j++) + } else if (opt->nd_opt_type == 31) { /* ND_OPT_DNSSL */ + g_free(domains); + + domains = rtnl_nd_opt_dnssl(opt, &lifetime); + for (i = 0; domains != NULL && domains[i] != NULL; i++) connman_resolver_append_lifetime(interface, - domains[j], - buf, lifetime); + domains[i], NULL, lifetime); } } + g_free(domains); g_free(interface); }