diff options
Diffstat (limited to 'usr/src')
-rw-r--r-- | usr/src/uts/common/brand/lx/io/lx_netlink.c | 56 |
1 files changed, 30 insertions, 26 deletions
diff --git a/usr/src/uts/common/brand/lx/io/lx_netlink.c b/usr/src/uts/common/brand/lx/io/lx_netlink.c index f5c0e9336f..6fec9ef4cb 100644 --- a/usr/src/uts/common/brand/lx/io/lx_netlink.c +++ b/usr/src/uts/common/brand/lx/io/lx_netlink.c @@ -1179,43 +1179,47 @@ lx_netlink_getaddr_lifreq(lx_netlink_reply_t *reply, struct lifreq *lifr) if (lx_netlink_reply_ioctl(reply, SIOCGLIFFLAGS, lifr) != 0) return; - if (!(lifr->lifr_flags & IFF_NOLOCAL)) { - if (lx_netlink_reply_ioctl(reply, SIOCGLIFSUBNET, lifr) != 0) - return; + /* + * Don't report on-link subnets + */ + if ((lifr->lifr_flags & IFF_NOLOCAL) != 0) + return; - ifa.lxnl_ifa_prefixlen = lifr->lifr_addrlen; + if (lx_netlink_reply_ioctl(reply, SIOCGLIFSUBNET, lifr) != 0) + return; - if (lx_netlink_reply_ioctl(reply, SIOCGLIFADDR, lifr) != 0) - return; + ifa.lxnl_ifa_prefixlen = lifr->lifr_addrlen; - if (lifr->lifr_addr.ss_family == AF_INET) { - struct sockaddr_in *sin; + if (lx_netlink_reply_ioctl(reply, SIOCGLIFADDR, lifr) != 0) + return; - ifa.lxnl_ifa_family = LX_AF_INET; + if (lifr->lifr_addr.ss_family == AF_INET) { + struct sockaddr_in *sin; - sin = (struct sockaddr_in *)&lifr->lifr_addr; - ifa.lxnl_ifa_scope = lx_ipv4_rtscope( - sin->sin_addr.s_addr); + ifa.lxnl_ifa_family = LX_AF_INET; - lx_netlink_reply_msg(reply, &ifa, - sizeof (lx_netlink_ifaddrmsg_t)); + sin = (struct sockaddr_in *)&lifr->lifr_addr; + ifa.lxnl_ifa_scope = lx_ipv4_rtscope( + sin->sin_addr.s_addr); - lx_netlink_reply_attr_int32(reply, - LX_NETLINK_IFA_ADDRESS, sin->sin_addr.s_addr); - } else { - struct sockaddr_in6 *sin; + lx_netlink_reply_msg(reply, &ifa, + sizeof (lx_netlink_ifaddrmsg_t)); + + lx_netlink_reply_attr_int32(reply, + LX_NETLINK_IFA_ADDRESS, sin->sin_addr.s_addr); + } else { + struct sockaddr_in6 *sin; - ifa.lxnl_ifa_family = LX_AF_INET6; + ifa.lxnl_ifa_family = LX_AF_INET6; - sin = (struct sockaddr_in6 *)&lifr->lifr_addr; - ifa.lxnl_ifa_scope = lx_ipv6_rtscope(&sin->sin6_addr); + sin = (struct sockaddr_in6 *)&lifr->lifr_addr; + ifa.lxnl_ifa_scope = lx_ipv6_rtscope(&sin->sin6_addr); - lx_netlink_reply_msg(reply, &ifa, - sizeof (lx_netlink_ifaddrmsg_t)); + lx_netlink_reply_msg(reply, &ifa, + sizeof (lx_netlink_ifaddrmsg_t)); - lx_netlink_reply_attr(reply, LX_NETLINK_IFA_ADDRESS, - &sin->sin6_addr, sizeof (sin->sin6_addr)); - } + lx_netlink_reply_attr(reply, LX_NETLINK_IFA_ADDRESS, + &sin->sin6_addr, sizeof (sin->sin6_addr)); } lx_netlink_reply_send(reply); |