diff options
author | guy <guy> | 2005-01-29 10:34:04 +0000 |
---|---|---|
committer | guy <guy> | 2005-01-29 10:34:04 +0000 |
commit | 547b1dec365851d6bebcf3e445b310d2145ee978 (patch) | |
tree | 1925a630fc77b83a8964300bea771e84b82926ee /fad-glifc.c | |
parent | 2c2964501569c0a1480f45c3b3906648ada72531 (diff) |
Don't ignore Solaris logical interface entries, as they could give
additional IP addresses for the underlying interface; instead, strip off
the logical interface number, and add them so that the additional
addresses are added.
Diffstat (limited to 'fad-glifc.c')
-rw-r--r-- | fad-glifc.c | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/fad-glifc.c b/fad-glifc.c index 212643b5..17313aa3 100644 --- a/fad-glifc.c +++ b/fad-glifc.c @@ -34,7 +34,7 @@ #ifndef lint static const char rcsid[] _U_ = - "@(#) $Header: /tcpdump/master/libpcap/fad-glifc.c,v 1.4 2005-01-28 20:33:51 guy Exp $ (LBL)"; + "@(#) $Header: /tcpdump/master/libpcap/fad-glifc.c,v 1.5 2005-01-29 10:34:04 guy Exp $ (LBL)"; #endif #ifdef HAVE_CONFIG_H @@ -90,7 +90,7 @@ pcap_findalldevs(pcap_if_t **alldevsp, char *errbuf) char *buf = NULL; unsigned buf_size; #ifdef HAVE_SOLARIS - char *p; + char *p, *q; #endif struct lifreq ifrflags, ifrnetmask, ifrbroadaddr, ifrdstaddr; struct sockaddr *netmask, *broadaddr, *dstaddr; @@ -317,6 +317,34 @@ pcap_findalldevs(pcap_if_t **alldevsp, char *errbuf) } else dstaddr = NULL; +#ifdef HAVE_SOLARIS + /* + * If this entry has a colon followed by a number at + * the end, it's a logical interface. Those are just + * the way you assign multiple IP addresses to a real + * interface, so an entry for a logical interface should + * be treated like the entry for the real interface; + * we do that by stripping off the ":" and the number. + */ + p = strchr(ifrp->ifr_name, ':'); + if (p != NULL) { + /* + * We have a ":"; is it followed by a number? + */ + q = p + 1; + while (isdigit((unsigned char)*q)) + q++; + if (*q == '\0') { + /* + * All digits after the ":" until the end. + * Strip off the ":" and everything after + * it. + */ + *p = '\0'; + } + } +#endif + /* * Add information for this address to the list. */ |