fi
echo "LIBUDEV_LIBS= $LIBUDEV_LIBS" >>$CONFIG_MK
- printf "Checking udev_monitor_filter_add_match_subsystem_devtype ..."
+ printf "Checking udev_monitor_filter_add_match_subsystem_devtype ... "
cat <<EOF >_udev.c
-#define LIBUDEV_I_KNOW_THE_API_IS_SUBJECT_TO_CHANGE
#include <libudev.h>
#include <stdlib.h>
int main(void) {
EOF
if $XCC $LIBUDEV_CFLAGS _udev.c -o _udev $LIBUDEV_LIBS 2>/dev/null
then
- echo "LIBUDEV_CPPFLAGS+= -DLIBUDEV_FILTER" >>$CONFIG_MK
- echo " yes"
+ echo "yes"
else
- echo " no"
+ echo "LIBUDEV_CPPFLAGS+= -DLIBUDEV_NOFILTER" >>$CONFIG_MK
+ echo "no"
fi
rm -f _udev.c _udev
elif [ "$DEV" != no -a "$UDEV" != no ]; then
static void *handle;
int
-dev_settled(const char *ifname)
+dev_initialized(const char *ifname)
{
if (dev == NULL)
return 1;
- return dev->settled(ifname);
+ return dev->initialized(ifname);
}
int
// dev plugin setup
struct dev {
const char *name;
- int (*settled)(const char *);
+ int (*initialized)(const char *);
int (*listening)(void);
int (*start)(void);
void (*stop)(void);
// hooks for dhcpcd
#ifdef PLUGIN_DEV
-int dev_settled(const char *);
+int dev_initialized(const char *);
int dev_listening(void);
int dev_start(const char *);
void dev_stop(void);
#else
-#define dev_settled(a) 1
+#define dev_initialized(a) 1
#define dev_listening() 0
#define dev_start(a)
#define dev_stop()
* SUCH DAMAGE.
*/
-#define LIBUDEV_I_KNOW_THE_API_IS_SUBJECT_TO_CHANGE
+#ifdef LIBUDEV_NOFILTER
+# define LIBUDEV_I_KNOW_THE_API_IS_SUBJECT_TO_CHANGE
+# warning This version of udev is too old does not support
+# warning monitor filtering or per device initialization
+# warning checks.
+# warning As such, dhcpcd will need to depend on the
+# warning udev-settle service or similar if starting
+# warning in master mode.
+#endif
#include <libudev.h>
#include <string.h>
static int monitor_fd = -1;
static int
-udev_settled(const char *ifname)
+udev_initialized(const char *ifname)
{
struct udev_device *device;
int r;
device = udev_device_new_from_subsystem_sysname(udev, "net", ifname);
if (device) {
+#ifndef LIBUDEV_NOFILTER
r = udev_device_get_is_initialized(device);
+#else
+ r = 1;
+#endif
udev_device_unref(device);
} else
r = 0;
syslog(LOG_ERR, "udev_monitor_new_from_netlink: %m");
goto bad;
}
-#ifdef LIBUDEV_FILTER
+#ifndef LIBUDEV_NOFILTER
if (udev_monitor_filter_add_match_subsystem_devtype(monitor,
"net", NULL) != 0)
{
{
dev->name = udev_name;
- dev->settled = udev_settled;
+ dev->initialized = udev_initialized;
dev->listening = udev_listening;
dev->start = udev_start;
dev->stop = udev_stop;
}
/* Ensure that the interface name has settled */
- if (!dev_settled(ifa->ifa_name))
+ if (!dev_initialized(ifa->ifa_name))
continue;
/* It's possible for an interface to have >1 AF_LINK.