summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fad-getad.c3
-rw-r--r--fad-gifc.c4
-rw-r--r--fad-glifc.c4
-rw-r--r--pcap-bpf.c7
-rw-r--r--pcap-dlpi.c5
-rw-r--r--pcap-int.h15
-rw-r--r--pcap-libdlpi.c4
-rw-r--r--pcap-linux.c5
-rw-r--r--pcap-nit.c5
-rw-r--r--pcap-npf.c2
-rw-r--r--pcap-null.c9
-rw-r--r--pcap-pf.c5
-rw-r--r--pcap-snit.c5
-rw-r--r--pcap-snoop.c5
-rw-r--r--pcap.c13
15 files changed, 46 insertions, 45 deletions
diff --git a/fad-getad.c b/fad-getad.c
index 4fd6938f..5236fbb9 100644
--- a/fad-getad.c
+++ b/fad-getad.c
@@ -145,7 +145,7 @@ get_sa_len(struct sockaddr *addr)
*/
int
pcap_findalldevs_interfaces(pcap_if_list_t *devlistp, char *errbuf,
- int (*check_usable)(const char *))
+ int (*check_usable)(const char *), get_if_flags_func get_flags_func)
{
struct ifaddrs *ifap, *ifa;
struct sockaddr *addr, *netmask, *broadaddr, *dstaddr;
@@ -265,6 +265,7 @@ pcap_findalldevs_interfaces(pcap_if_list_t *devlistp, char *errbuf,
* Add information for this address to the list.
*/
if (add_addr_to_if(devlistp, ifa->ifa_name, ifa->ifa_flags,
+ get_flags_func,
addr, addr_size, netmask, addr_size,
broadaddr, broadaddr_size, dstaddr, dstaddr_size,
errbuf) < 0) {
diff --git a/fad-gifc.c b/fad-gifc.c
index 1844a82a..6b161274 100644
--- a/fad-gifc.c
+++ b/fad-gifc.c
@@ -139,7 +139,7 @@ struct rtentry; /* declarations in <net/if.h> */
*/
int
pcap_findalldevs_interfaces(pcap_if_list_t *devlistp, char *errbuf,
- int (*check_usable)(const char *))
+ int (*check_usable)(const char *), get_if_flags_func get_flags_func)
{
register int fd;
register struct ifreq *ifrp, *ifend, *ifnext;
@@ -416,7 +416,7 @@ pcap_findalldevs_interfaces(pcap_if_list_t *devlistp, char *errbuf,
* Add information for this address to the list.
*/
if (add_addr_to_if(devlistp, ifrp->ifr_name,
- ifrflags.ifr_flags,
+ ifrflags.ifr_flags, get_flags_func,
&ifrp->ifr_addr, SA_LEN(&ifrp->ifr_addr),
netmask, netmask_size, broadaddr, broadaddr_size,
dstaddr, dstaddr_size, errbuf) < 0) {
diff --git a/fad-glifc.c b/fad-glifc.c
index 1dbd1c91..f22f56d7 100644
--- a/fad-glifc.c
+++ b/fad-glifc.c
@@ -76,7 +76,7 @@ struct rtentry; /* declarations in <net/if.h> */
*/
int
pcap_findalldevs_interfaces(pcap_if_list_t *devlistp, char *errbuf,
- int (*check_usable)(const char *))
+ int (*check_usable)(const char *), get_if_flags_func get_flags_func)
{
register int fd4, fd6, fd;
register struct lifreq *ifrp, *ifend;
@@ -328,7 +328,7 @@ pcap_findalldevs_interfaces(pcap_if_list_t *devlistp, char *errbuf,
* Add information for this address to the list.
*/
if (add_addr_to_if(devlistp, ifrp->lifr_name,
- ifrflags.lifr_flags,
+ ifrflags.lifr_flags, get_flags_func,
(struct sockaddr *)&ifrp->lifr_addr,
sizeof (struct sockaddr_storage),
netmask, sizeof (struct sockaddr_storage),
diff --git a/pcap-bpf.c b/pcap-bpf.c
index eb2b4a74..b8a09d60 100644
--- a/pcap-bpf.c
+++ b/pcap-bpf.c
@@ -2719,7 +2719,7 @@ finddevs_usb(pcap_if_list_t *devlistp, char *errbuf)
* Get additional flags for a device, using SIOCGIFMEDIA.
*/
#ifdef SIOCGIFMEDIA
-int
+static int
get_if_flags(const char *name, bpf_u_int32 *flags, char *errbuf)
{
int sock;
@@ -2788,7 +2788,7 @@ get_if_flags(const char *name, bpf_u_int32 *flags, char *errbuf)
return (0);
}
#else
-int
+static int
get_if_flags(const char *name _U_, bpf_u_int32 flags _U_, char *errbuf _U_)
{
/*
@@ -2804,7 +2804,8 @@ pcap_platform_finddevs(pcap_if_list_t *devlistp, char *errbuf)
/*
* Get the list of regular interfaces first.
*/
- if (pcap_findalldevs_interfaces(devlistp, errbuf, check_bpf_bindable) == -1)
+ if (pcap_findalldevs_interfaces(devlistp, errbuf, check_bpf_bindable,
+ get_if_flags) == -1)
return (-1); /* failure */
#if defined(__FreeBSD__) && defined(SIOCIFCREATE2)
diff --git a/pcap-dlpi.c b/pcap-dlpi.c
index 8c80d1f3..15bdd743 100644
--- a/pcap-dlpi.c
+++ b/pcap-dlpi.c
@@ -1049,7 +1049,7 @@ is_dlpi_interface(const char *name)
return (1);
}
-int
+static int
get_if_flags(const char *name _U_, bpf_u_int32 *flags _U_, char *errbuf _U_)
{
/*
@@ -1077,7 +1077,8 @@ pcap_platform_finddevs(pcap_if_list_t *devlistp, char *errbuf)
/*
* Get the list of regular interfaces first.
*/
- if (pcap_findalldevs_interfaces(devlistp, errbuf, is_dlpi_interface) == -1)
+ if (pcap_findalldevs_interfaces(devlistp, errbuf, is_dlpi_interface,
+ get_if_flags) == -1)
return (-1); /* failure */
#ifdef HAVE_SOLARIS
diff --git a/pcap-int.h b/pcap-int.h
index 6cd8740e..7236f955 100644
--- a/pcap-int.h
+++ b/pcap-int.h
@@ -425,6 +425,9 @@ int pcap_check_activated(pcap_t *);
*
* A pcap_if_list_t * is a reference to a list of devices.
*
+ * A get_if_flags_func is a platform-dependent function called to get
+ * additional interface flags.
+ *
* "pcap_platform_finddevs()" is the platform-dependent routine to
* find local network interfaces.
*
@@ -437,20 +440,17 @@ int pcap_check_activated(pcap_t *);
*
* "find_or_add_dev()" checks whether a device is already in a pcap_if_list_t
* and, if not, adds an entry for it.
- *
- * "get_if_flags()" is the platform-dependent routine to get additional
- * pcap flags for an interface.
*/
struct pcap_if_list;
typedef struct pcap_if_list pcap_if_list_t;
+typedef int (*get_if_flags_func)(const char *, bpf_u_int32 *, char *);
int pcap_platform_finddevs(pcap_if_list_t *, char *);
-int get_if_flags(const char *name, bpf_u_int32 *, char *);
#if !defined(_WIN32) && !defined(MSDOS)
int pcap_findalldevs_interfaces(pcap_if_list_t *, char *,
- int (*)(const char *));
+ int (*)(const char *), get_if_flags_func);
#endif
pcap_if_t *find_or_add_dev(pcap_if_list_t *, const char *, bpf_u_int32,
- const char *, char *);
+ const char *, get_if_flags_func, char *);
pcap_if_t *find_dev(pcap_if_list_t *, const char *);
pcap_if_t *add_dev(pcap_if_list_t *, const char *, bpf_u_int32, const char *,
char *);
@@ -459,8 +459,9 @@ int add_addr_to_dev(pcap_if_t *, struct sockaddr *, size_t,
struct sockaddr *dstaddr, size_t, char *errbuf);
#ifndef _WIN32
pcap_if_t *find_or_add_if(pcap_if_list_t *, const char *, bpf_u_int32,
- char *);
+ get_if_flags_func, char *);
int add_addr_to_if(pcap_if_list_t *, const char *, bpf_u_int32,
+ get_if_flags_func,
struct sockaddr *, size_t, struct sockaddr *, size_t,
struct sockaddr *, size_t, struct sockaddr *, size_t, char *);
#endif
diff --git a/pcap-libdlpi.c b/pcap-libdlpi.c
index 327cef2d..ad25e659 100644
--- a/pcap-libdlpi.c
+++ b/pcap-libdlpi.c
@@ -287,7 +287,7 @@ is_dlpi_interface(const char *name _U_)
return (1);
}
-int
+static int
get_if_flags(const char *name _U_, bpf_u_int32 *flags _U_, char *errbuf _U_)
{
/*
@@ -316,7 +316,7 @@ pcap_platform_finddevs(pcap_if_list_t *devlistp, char *errbuf)
* Get the list of regular interfaces first.
*/
if (pcap_findalldevs_interfaces(devlistp, errbuf,
- is_dlpi_interface) == -1)
+ is_dlpi_interface, get_if_flags) == -1)
return (-1); /* failure */
/* dlpi_walk() for loopback will be added here. */
diff --git a/pcap-linux.c b/pcap-linux.c
index db29bdf3..bc8a1842 100644
--- a/pcap-linux.c
+++ b/pcap-linux.c
@@ -2605,7 +2605,7 @@ can_be_bound(const char *name _U_)
/*
* Get additional flags for a device, using SIOCGIFMEDIA.
*/
-int
+static int
get_if_flags(const char *name, bpf_u_int32 *flags, char *errbuf)
{
int sock;
@@ -2770,7 +2770,8 @@ pcap_platform_finddevs(pcap_if_list_t *devlistp, char *errbuf)
/*
* Get the list of regular interfaces first.
*/
- if (pcap_findalldevs_interfaces(devlistp, errbuf, can_be_bound) == -1)
+ if (pcap_findalldevs_interfaces(devlistp, errbuf, can_be_bound,
+ get_if_flags) == -1)
return (-1); /* failure */
/*
diff --git a/pcap-nit.c b/pcap-nit.c
index be5a20e0..6a1a77c2 100644
--- a/pcap-nit.c
+++ b/pcap-nit.c
@@ -389,7 +389,7 @@ can_be_bound(const char *name _U_)
return (1);
}
-int
+static int
get_if_flags(const char *name _U_, bpf_u_int32 *flags _U_, char *errbuf _U_)
{
/*
@@ -403,7 +403,8 @@ get_if_flags(const char *name _U_, bpf_u_int32 *flags _U_, char *errbuf _U_)
int
pcap_platform_finddevs(pcap_if_list_t *devlistp, char *errbuf)
{
- return (pcap_findalldevs_interfaces(devlistp, errbuf, can_be_bound));
+ return (pcap_findalldevs_interfaces(devlistp, errbuf, can_be_bound,
+ get_if_flags));
}
/*
diff --git a/pcap-npf.c b/pcap-npf.c
index 67656250..3b9e0f4b 100644
--- a/pcap-npf.c
+++ b/pcap-npf.c
@@ -1431,7 +1431,7 @@ pcap_add_if_npf(pcap_if_list_t *devlistp, char *name, bpf_u_int32 flags,
return (res);
}
-int
+static int
get_if_flags(const char *name, bpf_u_int32 *flags, char *errbuf)
{
char *name_copy;
diff --git a/pcap-null.c b/pcap-null.c
index f7e5cfbd..92a5e2d8 100644
--- a/pcap-null.c
+++ b/pcap-null.c
@@ -37,15 +37,6 @@ pcap_create_interface(const char *device _U_, char *ebuf)
}
int
-get_if_flags(const char *name _U_, bpf_u_int32 *flags _U_, char *errbuf _U_)
-{
- /*
- * There are no interfaces, so this will never be called.
- */
- return (0);
-}
-
-int
pcap_platform_finddevs(pcap_if_list_t *devlistp, char *errbuf)
{
/*
diff --git a/pcap-pf.c b/pcap-pf.c
index 8dc37f14..59808647 100644
--- a/pcap-pf.c
+++ b/pcap-pf.c
@@ -558,7 +558,7 @@ can_be_bound(const char *name _U_)
return (1);
}
-int
+static int
get_if_flags(const char *name _U_, bpf_u_int32 *flags _U_, char *errbuf _U_)
{
/*
@@ -572,7 +572,8 @@ get_if_flags(const char *name _U_, bpf_u_int32 *flags _U_, char *errbuf _U_)
int
pcap_platform_finddevs(pcap_if_list_t *devlistp, char *errbuf)
{
- return (pcap_findalldevs_interfaces(devlistp, errbuf, can_be_bound));
+ return (pcap_findalldevs_interfaces(devlistp, errbuf, can_be_bound,
+ get_if_flags));
}
static int
diff --git a/pcap-snit.c b/pcap-snit.c
index 1122e3a2..9c6fbd48 100644
--- a/pcap-snit.c
+++ b/pcap-snit.c
@@ -478,7 +478,7 @@ can_be_bound(const char *name _U_)
return (1);
}
-int
+static int
get_if_flags(const char *name _U_, bpf_u_int32 *flags _U_, char *errbuf _U_)
{
/*
@@ -492,7 +492,8 @@ get_if_flags(const char *name _U_, bpf_u_int32 *flags _U_, char *errbuf _U_)
int
pcap_platform_finddevs(pcap_if_list_t *devlistp, char *errbuf)
{
- return (pcap_findalldevs_interfaces(devlistp, errbuf, can_be_bound));
+ return (pcap_findalldevs_interfaces(devlistp, errbuf, can_be_bound,
+ get_if_flags));
}
/*
diff --git a/pcap-snoop.c b/pcap-snoop.c
index 14c83f85..a598bae5 100644
--- a/pcap-snoop.c
+++ b/pcap-snoop.c
@@ -439,7 +439,7 @@ can_be_bound(const char *name _U_)
return (1);
}
-int
+static int
get_if_flags(const char *name _U_, bpf_u_int32 *flags _U_, char *errbuf _U_)
{
/*
@@ -453,7 +453,8 @@ get_if_flags(const char *name _U_, bpf_u_int32 *flags _U_, char *errbuf _U_)
int
pcap_platform_finddevs(pcap_if_list_t *devlistp, char *errbuf)
{
- return (pcap_findalldevs_interfaces(devlistp, errbuf, can_be_bound));
+ return (pcap_findalldevs_interfaces(devlistp, errbuf, can_be_bound,
+ get_if_flags));
}
/*
diff --git a/pcap.c b/pcap.c
index a60344e8..d7240a86 100644
--- a/pcap.c
+++ b/pcap.c
@@ -779,7 +779,7 @@ get_if_description(const char *name _U_)
*/
pcap_if_t *
find_or_add_if(pcap_if_list_t *devlistp, const char *name,
- bpf_u_int32 if_flags, char *errbuf)
+ bpf_u_int32 if_flags, get_if_flags_func get_flags_func, char *errbuf)
{
bpf_u_int32 pcap_flags;
@@ -813,7 +813,7 @@ find_or_add_if(pcap_if_list_t *devlistp, const char *name,
* attempt to add one.
*/
return (find_or_add_dev(devlistp, name, pcap_flags,
- get_if_description(name), errbuf));
+ get_if_description(name), get_flags_func, errbuf));
}
/*
@@ -836,7 +836,7 @@ find_or_add_if(pcap_if_list_t *devlistp, const char *name,
*/
int
add_addr_to_if(pcap_if_list_t *devlistp, const char *name,
- bpf_u_int32 if_flags,
+ bpf_u_int32 if_flags, get_if_flags_func get_flags_func,
struct sockaddr *addr, size_t addr_size,
struct sockaddr *netmask, size_t netmask_size,
struct sockaddr *broadaddr, size_t broadaddr_size,
@@ -848,7 +848,8 @@ add_addr_to_if(pcap_if_list_t *devlistp, const char *name,
/*
* Check whether the device exists and, if not, add it.
*/
- curdev = find_or_add_if(devlistp, name, if_flags, errbuf);
+ curdev = find_or_add_if(devlistp, name, if_flags, get_flags_func,
+ errbuf);
if (curdev == NULL) {
/*
* Error - give up.
@@ -996,7 +997,7 @@ add_addr_to_dev(pcap_if_t *curdev,
*/
pcap_if_t *
find_or_add_dev(pcap_if_list_t *devlistp, const char *name, bpf_u_int32 flags,
- const char *description, char *errbuf)
+ const char *description, get_if_flags_func get_flags_func, char *errbuf)
{
pcap_if_t *curdev;
@@ -1018,7 +1019,7 @@ find_or_add_dev(pcap_if_list_t *devlistp, const char *name, bpf_u_int32 flags,
/*
* Try to get additional flags for the device.
*/
- if (get_if_flags(name, &flags, errbuf) == -1) {
+ if ((*get_flags_func)(name, &flags, errbuf) == -1) {
/*
* Failed.
*/