]> The Tcpdump Group git mirrors - libpcap/commitdiff
Pass the "get additional flags" function to the findalldevs helpers.
authorGuy Harris <[email protected]>
Mon, 30 Apr 2018 18:19:21 +0000 (11:19 -0700)
committerGuy Harris <[email protected]>
Mon, 30 Apr 2018 18:19:21 +0000 (11:19 -0700)
This lets us make it a static function - or eliminate it entirely for
pcap-null.c.

15 files changed:
fad-getad.c
fad-gifc.c
fad-glifc.c
pcap-bpf.c
pcap-dlpi.c
pcap-int.h
pcap-libdlpi.c
pcap-linux.c
pcap-nit.c
pcap-npf.c
pcap-null.c
pcap-pf.c
pcap-snit.c
pcap-snoop.c
pcap.c

index 4fd6938f6dcc83c2578185962af1057ac9561977..5236fbb94cda9e29b1945d2af924ff89eba7fc33 100644 (file)
@@ -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) {
index 1844a82afdcf7602a870db855f8b6f4fb57bcc32..6b1612747582e4da87c86d32ef967fb7bf1bbe18 100644 (file)
@@ -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) {
index 1dbd1c918b77483771974a9c8aac1862bc64db0a..f22f56d73eb7cee5dccadf57ed4eef94aa2297c3 100644 (file)
@@ -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),
index eb2b4a747e301903775d5bd97f29a4c80e1937bb..b8a09d60d9b9e31108428c4a38a339b670bcd769 100644 (file)
@@ -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)
index 8c80d1f3f37626c55a774dd247e7868db95b2d0a..15bdd743f0e5e98cccbc35223f4823725fe09f66 100644 (file)
@@ -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
index 6cd8740ee95353bdd6b9a5a449328343c600ea7a..7236f95564cf6b474bc51db08a7035b370b0964b 100644 (file)
@@ -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
index 327cef2d540a6db565d8b1b4c198b6e1df4e817d..ad25e6592245316b1e0569c67838c4d796e9f103 100644 (file)
@@ -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. */
index db29bdf30c94bffe0117ae9d246666c43154a983..bc8a18423c0b80430d9668651091e96719933dd3 100644 (file)
@@ -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 */
 
        /*
index be5a20e0a2ce71e00ed5d1b38a9f82a487227bc9..6a1a77c24c681585c3d54472839000cc3527a40f 100644 (file)
@@ -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));
 }
 
 /*
index 67656250e600c91e36768bb183fca9b52a45d61b..3b9e0f4bbd30e4593aa691b937a1cc934a03a3a4 100644 (file)
@@ -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;
index f7e5cfbda5d93931c6cb037e8f842bcfa54a7222..92a5e2d8649b657bfbd8ce8eeb12b8eb4e9b2ec8 100644 (file)
@@ -36,15 +36,6 @@ pcap_create_interface(const char *device _U_, char *ebuf)
        return (NULL);
 }
 
-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)
 {
index 8dc37f1449164c6fb0552ea7e640cdf1636724e4..59808647940ef496f0d09b0ba63dc6d1cfb87e78 100644 (file)
--- 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
index 1122e3a236746c57b9fac8e2c48d7faf2c446361..9c6fbd48e7b83f62b2f7ff009537ec4ddf398dd9 100644 (file)
@@ -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));
 }
 
 /*
index 14c83f85ad06739f714f4f0435ad5d31acb62f13..a598bae5fe1f0d567ab10741430011c368c5971f 100644 (file)
@@ -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 a60344e853f89abbf8aa904ccc259615b5c05a72..d7240a866afeef58553b8a0f4bf7b01cf420069a 100644 (file)
--- 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.
                 */