diff options
author | Guy Harris <guy@alum.mit.edu> | 2018-04-30 11:19:21 -0700 |
---|---|---|
committer | Guy Harris <guy@alum.mit.edu> | 2018-04-30 11:19:21 -0700 |
commit | 7be747499ef4ce5760fd6acf84c987466072f376 (patch) | |
tree | 8b309ab50f6bbd001a92aba9b9738a14f02d09fc | |
parent | 0662fb409ad7eaf528861cad55708f6fb227aabc (diff) | |
download | libpcap-7be747499ef4ce5760fd6acf84c987466072f376.tar.gz |
Pass the "get additional flags" function to the findalldevs helpers.
This lets us make it a static function - or eliminate it entirely for
pcap-null.c.
-rw-r--r-- | fad-getad.c | 3 | ||||
-rw-r--r-- | fad-gifc.c | 4 | ||||
-rw-r--r-- | fad-glifc.c | 4 | ||||
-rw-r--r-- | pcap-bpf.c | 7 | ||||
-rw-r--r-- | pcap-dlpi.c | 5 | ||||
-rw-r--r-- | pcap-int.h | 15 | ||||
-rw-r--r-- | pcap-libdlpi.c | 4 | ||||
-rw-r--r-- | pcap-linux.c | 5 | ||||
-rw-r--r-- | pcap-nit.c | 5 | ||||
-rw-r--r-- | pcap-npf.c | 2 | ||||
-rw-r--r-- | pcap-null.c | 9 | ||||
-rw-r--r-- | pcap-pf.c | 5 | ||||
-rw-r--r-- | pcap-snit.c | 5 | ||||
-rw-r--r-- | pcap-snoop.c | 5 | ||||
-rw-r--r-- | pcap.c | 13 |
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) { @@ -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), @@ -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 @@ -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 */ /* @@ -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)); } /* @@ -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) { /* @@ -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)); } /* @@ -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. */ |