diff options
author | ume <ume@FreeBSD.org> | 2001-06-11 12:39:29 +0000 |
---|---|---|
committer | ume <ume@FreeBSD.org> | 2001-06-11 12:39:29 +0000 |
commit | 832f8d224926758a9ae0b23a6b45353e44fbc87a (patch) | |
tree | a79fc7ad2b97862c4a404f352f0211ad93a7b5f1 /usr.sbin/gifconfig | |
parent | 2693854b01a52b0395a91322aa3edf926bddff38 (diff) | |
download | FreeBSD-src-832f8d224926758a9ae0b23a6b45353e44fbc87a.zip FreeBSD-src-832f8d224926758a9ae0b23a6b45353e44fbc87a.tar.gz |
Sync with recent KAME.
This work was based on kame-20010528-freebsd43-snap.tgz and some
critical problem after the snap was out were fixed.
There are many many changes since last KAME merge.
TODO:
- The definitions of SADB_* in sys/net/pfkeyv2.h are still different
from RFC2407/IANA assignment because of binary compatibility
issue. It should be fixed under 5-CURRENT.
- ip6po_m member of struct ip6_pktopts is no longer used. But, it
is still there because of binary compatibility issue. It should
be removed under 5-CURRENT.
Reviewed by: itojun
Obtained from: KAME
MFC after: 3 weeks
Diffstat (limited to 'usr.sbin/gifconfig')
-rw-r--r-- | usr.sbin/gifconfig/gifconfig.8 | 9 | ||||
-rw-r--r-- | usr.sbin/gifconfig/gifconfig.c | 60 |
2 files changed, 54 insertions, 15 deletions
diff --git a/usr.sbin/gifconfig/gifconfig.8 b/usr.sbin/gifconfig/gifconfig.8 index c851624..26b4dd6 100644 --- a/usr.sbin/gifconfig/gifconfig.8 +++ b/usr.sbin/gifconfig/gifconfig.8 @@ -1,5 +1,5 @@ .\" $FreeBSD$ -.\" $KAME: gifconfig.8,v 1.5 2000/05/13 07:48:10 itojun Exp $ +.\" $KAME: gifconfig.8,v 1.6 2000/11/22 11:10:09 itojun Exp $ .\" .\" Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. .\" All rights reserved. @@ -34,6 +34,7 @@ .Sh NAME .Nm gifconfig .Nd configure generic IP tunnel +.\" .Sh SYNOPSIS .Nm .Ar interface @@ -60,7 +61,7 @@ specifies the address family for .Ar physsrc and .Ar physdest . -.Ar Af +.Ar af can be .Li inet or @@ -81,7 +82,9 @@ If no outer addresses are specified, this usage has no effect. takes the following optional argument: .Bl -tag -width Ds .It Fl a -Display information associated all generic IP tunnel interfaces. +Display information associated with all +.Xr gif 4 +interfaces. .El .Pp Please note that it is very easy to create infinite routing loop, 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 |