core: fix ifindex value checks
authorDan Williams <dcbw@redhat.com>
Tue, 15 May 2012 14:44:49 +0000 (09:44 -0500)
committerDan Williams <dcbw@redhat.com>
Thu, 17 May 2012 18:23:39 +0000 (13:23 -0500)
Kernel ifindexes are always greater than zero (see dev_new_index()
in net/core/dev.c).  Also don't bother warning about ifindex
lookup failures for devices we know aren't kernel network interfaces.

src/modem-manager/nm-modem.c
src/nm-device.c
src/nm-manager.c
src/nm-netlink-utils.c
src/nm-system.c

index 91c0b06..b271133 100644 (file)
@@ -591,7 +591,7 @@ real_deactivate (NMModem *self, NMDevice *device)
        case MM_MODEM_IP_METHOD_STATIC:
        case MM_MODEM_IP_METHOD_DHCP:
                ifindex = nm_device_get_ip_ifindex (device);
-               if (ifindex >= 0) {
+               if (ifindex > 0) {
                        /* FIXME: use AF_UNSPEC here when we have IPv6 support */
                        nm_system_iface_flush_routes (ifindex, AF_INET);
                        nm_system_iface_flush_addresses (ifindex, AF_UNSPEC);
index 2f69be6..394a121 100644 (file)
@@ -506,7 +506,8 @@ nm_device_set_ip_iface (NMDevice *self, const char *iface)
        priv->ip_iface = g_strdup (iface);
        if (priv->ip_iface) {
                priv->ip_ifindex = nm_netlink_iface_to_index (priv->ip_iface);
-               if (priv->ip_ifindex < 0) {
+               if (priv->ip_ifindex <= 0) {
+                       /* Device IP interface must always be a kernel network interface */
                        nm_log_warn (LOGD_HW, "(%s): failed to look up interface index", iface);
                }
        }
@@ -3119,7 +3120,7 @@ nm_device_deactivate (NMDevice *self, NMDeviceStateReason reason)
        /* Take out any entries in the routing table and any IP address the device had. */
        ifindex = nm_device_get_ip_ifindex (self);
        family = tried_ipv6 ? AF_UNSPEC : AF_INET;
-       if (ifindex >= 0) {
+       if (ifindex > 0) {
                nm_system_iface_flush_routes (ifindex, family);
                nm_system_iface_flush_addresses (ifindex, family);
        }
@@ -3738,11 +3739,15 @@ set_property (GObject *object, guint prop_id,
                g_free (priv->iface);
                priv->ifindex = 0;
                priv->iface = g_value_dup_string (value);
-               if (priv->iface) {
+
+               /* Only look up the ifindex if it appears to be an actual kernel
+                * interface name.  eg Bluetooth devices won't have one until we know
+                * the IP interface.
+                */
+               if (priv->iface && !strchr (priv->iface, ':')) {
                        priv->ifindex = nm_netlink_iface_to_index (priv->iface);
-                       if (priv->ifindex <= 0) {
+                       if (priv->ifindex <= 0)
                                nm_log_warn (LOGD_HW, "(%s): failed to look up interface index", priv->iface);
-                       }
                }
                break;
        case PROP_IP_IFACE:
index e887e57..748885e 100644 (file)
@@ -2176,7 +2176,7 @@ udev_device_added_cb (NMUdevManager *udev_mgr,
        g_return_if_fail (iface != NULL);
        g_return_if_fail (sysfs_path != NULL);
        g_return_if_fail (driver != NULL);
-       g_return_if_fail (ifindex >= 0);
+       g_return_if_fail (ifindex > 0);
 
        device = find_device_by_ifindex (self, ifindex);
        if (device) {
index 99aebcb..be8c17e 100644 (file)
@@ -136,7 +136,7 @@ nm_netlink_route_new (int ifindex,
        route = rtnl_route_alloc ();
        g_return_val_if_fail (route != NULL, NULL);
 
-       if (ifindex >= 0)
+       if (ifindex > 0)
                rtnl_route_set_oif (route, ifindex);
        if (family != AF_UNSPEC)
                rtnl_route_set_family (route, family);
@@ -385,7 +385,7 @@ foreach_route_cb (struct nl_object *object, void *user_data)
        if (nm_logging_level_enabled (LOGL_DEBUG))
                dump_route (route);
 
-       if (   info->ifindex >= 0
+       if (   info->ifindex > 0
            && rtnl_route_get_oif (route) != info->ifindex)
                return;
 
index 5156eee..6a35997 100644 (file)
@@ -479,7 +479,7 @@ nm_system_set_ip6_route (int ifindex,
        struct rtnl_route *route;
        int err = 0;
 
-       g_return_val_if_fail (ifindex >= 0, -1);
+       g_return_val_if_fail (ifindex > 0, -1);
 
        nlh = nm_netlink_get_default_handle ();
        g_return_val_if_fail (nlh != NULL, -1);
@@ -1472,9 +1472,9 @@ nm_system_iface_enslave (gint master_ifindex,
        struct nl_sock *sock;
        int err;
 
-       g_return_val_if_fail (master_ifindex >= 0, FALSE);
+       g_return_val_if_fail (master_ifindex > 0, FALSE);
        g_return_val_if_fail (master_iface != NULL, FALSE);
-       g_return_val_if_fail (slave_ifindex >= 0, FALSE);
+       g_return_val_if_fail (slave_ifindex > 0, FALSE);
        g_return_val_if_fail (slave_iface != NULL, FALSE);
 
        sock = nm_netlink_get_default_handle ();
@@ -1557,9 +1557,9 @@ nm_system_iface_release (gint master_ifindex,
        struct nl_sock *sock;
        int err;
 
-       g_return_val_if_fail (master_ifindex >= 0, FALSE);
+       g_return_val_if_fail (master_ifindex > 0, FALSE);
        g_return_val_if_fail (master_iface != NULL, FALSE);
-       g_return_val_if_fail (slave_ifindex >= 0, FALSE);
+       g_return_val_if_fail (slave_ifindex > 0, FALSE);
        g_return_val_if_fail (slave_iface != NULL, FALSE);
 
        sock = nm_netlink_get_default_handle ();
@@ -1598,7 +1598,7 @@ nm_system_get_iface_type (int ifindex, const char *name)
        char *type;
        int res = NM_IFACE_TYPE_UNSPEC;
 
-       g_return_val_if_fail (ifindex >= 0 || name, NM_IFACE_TYPE_UNSPEC);
+       g_return_val_if_fail (ifindex > 0 || name, NM_IFACE_TYPE_UNSPEC);
 
        nlh = nm_netlink_get_default_handle ();
        if (!nlh)
@@ -1905,7 +1905,7 @@ nm_system_add_vlan_iface (NMConnection *connection,
        guint32 vlan_flags = 0;
        guint32 num, i, from, to;
 
-       g_return_val_if_fail (parent_ifindex >= 0, FALSE);
+       g_return_val_if_fail (parent_ifindex > 0, FALSE);
 
        nlh = nm_netlink_get_default_handle ();
        g_return_val_if_fail (nlh != NULL, FALSE);