diff options
author | sam <sam@FreeBSD.org> | 2007-02-24 23:55:46 +0000 |
---|---|---|
committer | sam <sam@FreeBSD.org> | 2007-02-24 23:55:46 +0000 |
commit | cd822ec72803ef63ba2d56e1fcdc837cd656a1b5 (patch) | |
tree | c3dc617e94bd4dffc5a8ead0c6679f2de41ca65d /sbin/ifconfig/af_inet.c | |
parent | a95c51b9e7cc53e67b4c98f5bbf806aa8df2e32c (diff) | |
download | FreeBSD-src-cd822ec72803ef63ba2d56e1fcdc837cd656a1b5.zip FreeBSD-src-cd822ec72803ef63ba2d56e1fcdc837cd656a1b5.tar.gz |
use getifaddrs from libc instead of private code
Reviewed by: bms
MFC after: 1 month
Diffstat (limited to 'sbin/ifconfig/af_inet.c')
-rw-r--r-- | sbin/ifconfig/af_inet.c | 24 |
1 files changed, 11 insertions, 13 deletions
diff --git a/sbin/ifconfig/af_inet.c b/sbin/ifconfig/af_inet.c index 7678daa..1720b19 100644 --- a/sbin/ifconfig/af_inet.c +++ b/sbin/ifconfig/af_inet.c @@ -36,13 +36,13 @@ static const char rcsid[] = #include <sys/ioctl.h> #include <sys/socket.h> #include <net/if.h> -#include <net/route.h> /* for RTX_IFA */ #include <err.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> +#include <ifaddrs.h> #include <netinet/in.h> #include <net/if_var.h> /* for struct ifaddr */ @@ -56,35 +56,33 @@ static struct ifaliasreq in_addreq; static struct ifreq in_ridreq; static void -in_status(int s __unused, const struct rt_addrinfo * info) +in_status(int s __unused, const struct ifaddrs *ifa) { struct sockaddr_in *sin, null_sin; memset(&null_sin, 0, sizeof(null_sin)); - sin = (struct sockaddr_in *)info->rti_info[RTAX_IFA]; + sin = (struct sockaddr_in *)ifa->ifa_addr; if (sin == NULL) return; printf("\tinet %s ", inet_ntoa(sin->sin_addr)); - if (flags & IFF_POINTOPOINT) { - /* note RTAX_BRD overlap with IFF_BROADCAST */ - sin = (struct sockaddr_in *)info->rti_info[RTAX_BRD]; - if (!sin) + if (ifa->ifa_flags & IFF_POINTOPOINT) { + sin = (struct sockaddr_in *)ifa->ifa_dstaddr; + if (sin == NULL) sin = &null_sin; printf("--> %s ", inet_ntoa(sin->sin_addr)); } - sin = (struct sockaddr_in *)info->rti_info[RTAX_NETMASK]; - if (!sin) + sin = (struct sockaddr_in *)ifa->ifa_netmask; + if (sin == NULL) sin = &null_sin; printf("netmask 0x%lx ", (unsigned long)ntohl(sin->sin_addr.s_addr)); - if (flags & IFF_BROADCAST) { - /* note RTAX_BRD overlap with IFF_POINTOPOINT */ - sin = (struct sockaddr_in *)info->rti_info[RTAX_BRD]; - if (sin && sin->sin_addr.s_addr != 0) + if (ifa->ifa_flags & IFF_BROADCAST) { + sin = (struct sockaddr_in *)ifa->ifa_broadaddr; + if (sin != NULL && sin->sin_addr.s_addr != 0) printf("broadcast %s", inet_ntoa(sin->sin_addr)); } putchar('\n'); |