summaryrefslogtreecommitdiffstats
path: root/usr.sbin/gifconfig/gifconfig.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr.sbin/gifconfig/gifconfig.c')
-rw-r--r--usr.sbin/gifconfig/gifconfig.c60
1 files changed, 48 insertions, 12 deletions
diff --git a/usr.sbin/gifconfig/gifconfig.c b/usr.sbin/gifconfig/gifconfig.c
index d93d741..ac876dc 100644
--- a/usr.sbin/gifconfig/gifconfig.c
+++ b/usr.sbin/gifconfig/gifconfig.c
@@ -1,5 +1,5 @@
/* $FreeBSD$ */
-/* $KAME: gifconfig.c,v 1.12 2000/05/22 05:50:43 itojun Exp $ */
+/* $KAME: gifconfig.c,v 1.14 2001/01/01 04:04:56 jinmei Exp $ */
/*
* Copyright (c) 1983, 1993
@@ -111,7 +111,7 @@ void delifaddrs __P((char *, int));
#define NEXTARG 0xffffff
-struct cmd {
+static struct cmd {
char *c_name;
int c_parameter; /* NEXTARG means next argv */
void (*c_func) __P((char *, int));
@@ -565,10 +565,11 @@ phys_status(force)
char psrcaddr[256];
char pdstaddr[256];
char hostname[NI_MAXHOST];
- u_long srccmd, dstcmd;
int flags = NI_NUMERICHOST;
+ char *af;
+#ifndef SIOCGLIFPHYADDR
+ u_long srccmd, dstcmd;
struct ifreq *ifrp;
- char *ver = "";
#ifdef INET6
int s6;
#endif
@@ -596,20 +597,55 @@ phys_status(force)
#endif /* INET6 */
if (0 <= ioctl(s, srccmd, (caddr_t)ifrp)) {
- getnameinfo(&ifrp->ifr_addr, ifrp->ifr_addr.sa_len,
- hostname, sizeof(hostname), 0, 0, flags);
#ifdef INET6
if (ifrp->ifr_addr.sa_family == AF_INET6)
- ver = "6";
+ af = "inet6";
+ else
+ af = "inet";
+#else
+ af = "inet";
#endif /* INET6 */
- sprintf(psrcaddr, "inet%s %s", ver, hostname);
+ if (getnameinfo(&ifrp->ifr_addr, ifrp->ifr_addr.sa_len,
+ psrcaddr, sizeof(psrcaddr), 0, 0, flags) != 0)
+ psrcaddr[0] = '\0';
}
if (0 <= ioctl(s, dstcmd, (caddr_t)ifrp)) {
- getnameinfo(&ifrp->ifr_addr, ifrp->ifr_addr.sa_len,
- hostname, sizeof(hostname), 0, 0, flags);
- sprintf(pdstaddr, "%s", hostname);
+ if (getnameinfo(&ifrp->ifr_addr, ifrp->ifr_addr.sa_len,
+ pdstaddr, sizeof(pdstaddr), 0, 0, flags) != 0)
+ pdstaddr[0] = '\0';
+ }
+ printf("\tphysical address %s %s --> %s\n", af, psrcaddr, pdstaddr);
+#else
+ struct if_laddrreq iflr;
+
+ force = 0; /*fool gcc*/
+
+ psrcaddr[0] = pdstaddr[0] = '\0';
+
+ memset(&iflr, 0, sizeof(iflr));
+ memcpy(iflr.iflr_name, ifr.ifr_name, sizeof(iflr.iflr_name));
+
+ if (0 <= ioctl(s, SIOCGLIFPHYADDR, (caddr_t)&iflr)) {
+ switch (iflr.addr.ss_family) {
+ case AF_INET:
+ af = "inet";
+ break;
+#ifdef INET6
+ case AF_INET6:
+ af = "inet6";
+ break;
+#endif /* INET6 */
+ }
+ if (getnameinfo((struct sockaddr *)&iflr.addr, iflr.addr.ss_len,
+ psrcaddr, sizeof(psrcaddr), 0, 0, flags) != 0)
+ psrcaddr[0] = '\0';
+ if (getnameinfo((struct sockaddr *)&iflr.dstaddr,
+ iflr.dstaddr.ss_len, pdstaddr, sizeof(pdstaddr), 0, 0,
+ flags) != 0)
+ pdstaddr[0] = '\0';
}
- printf("\tphysical address %s --> %s\n", psrcaddr, pdstaddr);
+ printf("\tphysical address %s %s --> %s\n", af, psrcaddr, pdstaddr);
+#endif
}
void
OpenPOWER on IntegriCloud