dect
/
libpcap
Archived
13
0
Fork 0

Make the "is_loopback" field of a "pcap_if" structure a general "flags"

field, and make a PCAP_IF_LOOPBACK flag be the first flag bit in that
field, specifying whether the interface is a loopback interface; this
allows us to add more flags without changing the layout of the
structure.
This commit is contained in:
guy 2001-10-28 02:31:49 +00:00
parent c3736d4ff8
commit db79c69108
3 changed files with 21 additions and 10 deletions

14
inet.c
View File

@ -34,7 +34,7 @@
#ifndef lint
static const char rcsid[] =
"@(#) $Header: /tcpdump/master/libpcap/inet.c,v 1.42 2001-10-10 06:46:50 guy Exp $ (LBL)";
"@(#) $Header: /tcpdump/master/libpcap/inet.c,v 1.43 2001-10-28 02:31:49 guy Exp $ (LBL)";
#endif
#ifdef HAVE_CONFIG_H
@ -198,7 +198,9 @@ add_or_find_if(pcap_if_t **curdev_ret, pcap_if_t **alldevs, char *name,
strcpy(curdev->name, name);
curdev->description = NULL; /* not available */
curdev->addresses = NULL; /* list starts out as empty */
curdev->is_loopback = ISLOOPBACK(name, flags);
curdev->flags = 0;
if (ISLOOPBACK(name, flags))
curdev->flags |= PCAP_IF_LOOPBACK;
/*
* Add it to the list, in the appropriate location.
@ -245,7 +247,8 @@ add_or_find_if(pcap_if_t **curdev_ret, pcap_if_t **alldevs, char *name,
* Is the new interface a non-loopback interface
* and the next interface a loopback interface?
*/
if (!curdev->is_loopback && nextdev->is_loopback) {
if (!(curdev->flags & PCAP_IF_LOOPBACK) &&
(nextdev->flags & PCAP_IF_LOOPBACK)) {
/*
* Yes, we should put the new entry
* before "nextdev", i.e. after "prevdev".
@ -267,7 +270,8 @@ add_or_find_if(pcap_if_t **curdev_ret, pcap_if_t **alldevs, char *name,
* loopback interfaces.)
*/
if (this_instance < get_instance(nextdev->name) &&
(!curdev->is_loopback || nextdev->is_loopback)) {
(!(curdev->flags & PCAP_IF_LOOPBACK) ||
(nextdev->flags & PCAP_IF_LOOPBACK))) {
/*
* Yes - we should put the new entry
* before "nextdev", i.e. after "prevdev".
@ -943,7 +947,7 @@ pcap_lookupdev(errbuf)
if (pcap_findalldevs(&alldevs, errbuf) == -1)
return (NULL);
if (alldevs == NULL || alldevs->is_loopback) {
if (alldevs == NULL || (alldevs->flags & PCAP_IF_LOOPBACK)) {
/*
* There are no devices on the list, or the first device
* on the list is a loopback device, which means there

11
pcap.3
View File

@ -1,4 +1,4 @@
.\" @(#) $Header: /tcpdump/master/libpcap/Attic/pcap.3,v 1.25 2001-10-13 06:28:53 guy Exp $
.\" @(#) $Header: /tcpdump/master/libpcap/Attic/pcap.3,v 1.26 2001-10-28 02:31:50 guy Exp $
.\"
.\" Copyright (c) 1994, 1996, 1997
.\" The Regents of the University of California. All rights reserved.
@ -238,8 +238,13 @@ a pointer to a string giving a human-readable description of the device
.B addresses
a pointer to the first element of a list of addresses for the interface
.TP
.B is_loopback
non-zero if the interface is a loopback interface
.B flags
interface flags:
.RS
.TP
.B PCAP_IF_LOOPBACK
set if the interface is a loopback interface
.RE
.RE
.PP
Each element of the list of addresses is of type

6
pcap.h
View File

@ -31,7 +31,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* @(#) $Header: /tcpdump/master/libpcap/pcap.h,v 1.32 2001-10-08 01:06:22 guy Exp $ (LBL)
* @(#) $Header: /tcpdump/master/libpcap/pcap.h,v 1.33 2001-10-28 02:31:50 guy Exp $ (LBL)
*/
#ifndef lib_pcap_h
@ -139,9 +139,11 @@ struct pcap_if {
char *name; /* name to hand to "pcap_open_live()" */
char *description; /* textual description of interface, or NULL */
struct pcap_addr *addresses;
u_int is_loopback; /* non-0 if interface is loopback */
u_int flags; /* PCAP_IF_ interface flags */
};
#define PCAP_IF_LOOPBACK 0x00000001 /* interface is loopback */
/*
* Representation of an interface address.
*/