ifaces[nip].li_cpt = cpt;
ifaces[nip].li_iff_master = !!(flags & IFF_MASTER);
- ifaces[nip].li_ipv6 = false;
+ ifaces[nip].li_size = sizeof(ifa->ifa_local);
ifaces[nip].li_index = dev->ifindex;
- ifaces[nip].li_ipaddr = ntohl(ifa->ifa_local);
+ ifaces[nip].li_ipaddr = ifa->ifa_local;
ifaces[nip].li_netmask = ntohl(ifa->ifa_mask);
strlcpy(ifaces[nip].li_name, ifa->ifa_label,
sizeof(ifaces[nip].li_name));
ifaces[nip].li_cpt = cpt;
ifaces[nip].li_iff_master = !!(flags & IFF_MASTER);
- ifaces[nip].li_ipv6 = true;
+ ifaces[nip].li_size = sizeof(struct in6_addr);
ifaces[nip].li_index = dev->ifindex;
memcpy(ifaces[nip].li_ipv6addr,
&ifa6->addr, sizeof(struct in6_addr));
/* IP unspecified, use IP of first matching interface */
break;
- if (ifaces[if_idx].li_ipv6 &&
- nid_is_ipv6(&ni->ni_nid)) {
- if (memcmp(ni->ni_nid.nid_addr,
- ifaces[if_idx].li_ipv6addr,
- sizeof(struct in6_addr)) == 0)
- break;
- } else if (!ifaces[if_idx].li_ipv6 &&
- nid_is_ipv4(&ni->ni_nid)) {
- if (ni->ni_nid.nid_addr[0] ==
- htonl(ifaces[if_idx].li_ipaddr))
+ if (ifaces[if_idx].li_size == NID_ADDR_BYTES(&ni->ni_nid)) {
+ char *addr = (char *)&ifaces[if_idx].li_ipaddr;
+
+ if (ifaces[if_idx].li_size != 4)
+ addr = (char *)ifaces[if_idx].li_ipv6addr;
+
+ if (memcmp(ni->ni_nid.nid_addr, addr,
+ ifaces[if_idx].li_size) == 0)
break;
}
}
return if_idx;
if (ni->ni_interface)
- CERROR("ksocklnd: failed to find interface %s%s%s\n",
+ CERROR("%s: failed to find interface %s%s%s\n",
+ libcfs_lnd2modname(ni->ni_nid.nid_type),
ni->ni_interface, addr_set ? "@" : "",
addr_set ? libcfs_nidstr(&ni->ni_nid) : "");
else
- CERROR("ksocklnd: failed to find IP address %s\n",
+ CERROR("%s: failed to find IP address %s\n",
+ libcfs_lnd2modname(ni->ni_nid.nid_type),
libcfs_nidstr(&ni->ni_nid));
return -EINVAL;
}
for (i = 0; i < nip; i++)
- ipaddrs[i] = ifaces[i].li_ipaddr;
+ ipaddrs[i] = ntohl(ifaces[i].li_ipaddr);
rc = lnet_match_networks(networksp, ip2nets, ipaddrs, nip);
if (rc < 0) {