aboutsummaryrefslogtreecommitdiff
path: root/contrib/libpcap/pcap-snf.c
diff options
context:
space:
mode:
authorXin LI <delphij@FreeBSD.org>2013-05-30 08:02:00 +0000
committerXin LI <delphij@FreeBSD.org>2013-05-30 08:02:00 +0000
commitedc89b24f34e5335ee722d9b477c1f984acd2b7f (patch)
tree5ab08c0c24a5cec0f64a701f8ba689a47b1d5fec /contrib/libpcap/pcap-snf.c
parent2493d5e6cba8f97bf3536531d483452c30429949 (diff)
parent59ed76438047aa730b3a617abd873b84457fc4fd (diff)
downloadsrc-edc89b24f34e5335ee722d9b477c1f984acd2b7f.tar.gz
src-edc89b24f34e5335ee722d9b477c1f984acd2b7f.zip
MFV: libpcap 1.4.0.
MFC after: 4 weeks
Notes
Notes: svn path=/head/; revision=251129
Diffstat (limited to 'contrib/libpcap/pcap-snf.c')
-rw-r--r--contrib/libpcap/pcap-snf.c27
1 files changed, 17 insertions, 10 deletions
diff --git a/contrib/libpcap/pcap-snf.c b/contrib/libpcap/pcap-snf.c
index 96781bd713ba..396f3e5b0587 100644
--- a/contrib/libpcap/pcap-snf.c
+++ b/contrib/libpcap/pcap-snf.c
@@ -18,11 +18,6 @@
#include "snf.h"
#include "pcap-int.h"
-#ifdef SNF_ONLY
-#define snf_create pcap_create
-#define snf_platform_finddevs pcap_platform_finddevs
-#endif
-
static int
snf_set_datalink(pcap_t *p, int dlt)
{
@@ -249,7 +244,7 @@ snf_activate(pcap_t* p)
}
int
-snf_platform_finddevs(pcap_if_t **devlistp, char *errbuf)
+snf_findalldevs(pcap_if_t **devlistp, char *errbuf)
{
/*
* There are no platform-specific devices since each device
@@ -259,22 +254,28 @@ snf_platform_finddevs(pcap_if_t **devlistp, char *errbuf)
}
pcap_t *
-snf_create(const char *device, char *ebuf)
+snf_create(const char *device, char *ebuf, int *is_ours)
{
pcap_t *p;
int boardnum = -1;
struct snf_ifaddrs *ifaddrs, *ifa;
size_t devlen;
- if (snf_init(SNF_VERSION_API))
+ if (snf_init(SNF_VERSION_API)) {
+ /* Can't initialize the API, so no SNF devices */
+ *is_ours = 0;
return NULL;
+ }
/*
* Match a given interface name to our list of interface names, from
* which we can obtain the intended board number
*/
- if (snf_getifaddrs(&ifaddrs) || ifaddrs == NULL)
+ if (snf_getifaddrs(&ifaddrs) || ifaddrs == NULL) {
+ /* Can't get SNF addresses */
+ *is_ours = 0;
return NULL;
+ }
devlen = strlen(device) + 1;
ifa = ifaddrs;
while (ifa) {
@@ -292,10 +293,16 @@ snf_create(const char *device, char *ebuf)
* and "snf10gX" where X is the board number.
*/
if (sscanf(device, "snf10g%d", &boardnum) != 1 &&
- sscanf(device, "snf%d", &boardnum) != 1)
+ sscanf(device, "snf%d", &boardnum) != 1) {
+ /* Nope, not a supported name */
+ *is_ours = 0;
return NULL;
+ }
}
+ /* OK, it's probably ours. */
+ *is_ours = 1;
+
p = pcap_create_common(device, ebuf);
if (p == NULL)
return NULL;