platform: cleanup object_type_from_nl_object()
- change object_type_from_nl_object() to accept unknown object types. - replace g_assert_not_reached() with g_return_if_fail(). Signed-off-by: Thomas Haller <thaller@redhat.com>
This commit is contained in:
@@ -141,12 +141,13 @@ nm_rtnl_addr_set_prefixlen (struct rtnl_addr *rtnladdr, int plen)
|
|||||||
#define rtnl_addr_set_prefixlen nm_rtnl_addr_set_prefixlen
|
#define rtnl_addr_set_prefixlen nm_rtnl_addr_set_prefixlen
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
UNKNOWN_OBJECT_TYPE,
|
||||||
LINK,
|
LINK,
|
||||||
IP4_ADDRESS,
|
IP4_ADDRESS,
|
||||||
IP6_ADDRESS,
|
IP6_ADDRESS,
|
||||||
IP4_ROUTE,
|
IP4_ROUTE,
|
||||||
IP6_ROUTE,
|
IP6_ROUTE,
|
||||||
N_TYPES
|
N_TYPES,
|
||||||
} ObjectType;
|
} ObjectType;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
@@ -159,9 +160,10 @@ typedef enum {
|
|||||||
static ObjectType
|
static ObjectType
|
||||||
object_type_from_nl_object (const struct nl_object *object)
|
object_type_from_nl_object (const struct nl_object *object)
|
||||||
{
|
{
|
||||||
const char *type_str = nl_object_get_type (object);
|
const char *type_str;
|
||||||
|
|
||||||
g_assert (object);
|
if (!object || !(type_str = nl_object_get_type (object)))
|
||||||
|
return UNKNOWN_OBJECT_TYPE;
|
||||||
|
|
||||||
if (!strcmp (type_str, "route/link"))
|
if (!strcmp (type_str, "route/link"))
|
||||||
return LINK;
|
return LINK;
|
||||||
@@ -172,7 +174,7 @@ object_type_from_nl_object (const struct nl_object *object)
|
|||||||
case AF_INET6:
|
case AF_INET6:
|
||||||
return IP6_ADDRESS;
|
return IP6_ADDRESS;
|
||||||
default:
|
default:
|
||||||
g_assert_not_reached ();
|
return UNKNOWN_OBJECT_TYPE;
|
||||||
}
|
}
|
||||||
} else if (!strcmp (type_str, "route/route")) {
|
} else if (!strcmp (type_str, "route/route")) {
|
||||||
switch (rtnl_route_get_family ((struct rtnl_route *) object)) {
|
switch (rtnl_route_get_family ((struct rtnl_route *) object)) {
|
||||||
@@ -181,10 +183,10 @@ object_type_from_nl_object (const struct nl_object *object)
|
|||||||
case AF_INET6:
|
case AF_INET6:
|
||||||
return IP6_ROUTE;
|
return IP6_ROUTE;
|
||||||
default:
|
default:
|
||||||
g_assert_not_reached ();
|
return UNKNOWN_OBJECT_TYPE;
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
g_assert_not_reached ();
|
return UNKNOWN_OBJECT_TYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* libnl inclues LINK_ATTR_FAMILY in oo_id_attrs of link_obj_ops and thus
|
/* libnl inclues LINK_ATTR_FAMILY in oo_id_attrs of link_obj_ops and thus
|
||||||
@@ -231,7 +233,10 @@ get_kernel_object (struct nl_sock *sock, struct nl_object *needle)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
default:
|
case IP4_ADDRESS:
|
||||||
|
case IP6_ADDRESS:
|
||||||
|
case IP4_ROUTE:
|
||||||
|
case IP6_ROUTE:
|
||||||
/* Fallback to a one-time cache allocation. */
|
/* Fallback to a one-time cache allocation. */
|
||||||
{
|
{
|
||||||
struct nl_cache *cache;
|
struct nl_cache *cache;
|
||||||
@@ -247,6 +252,9 @@ get_kernel_object (struct nl_sock *sock, struct nl_object *needle)
|
|||||||
nl_cache_free (cache);
|
nl_cache_free (cache);
|
||||||
return object;
|
return object;
|
||||||
}
|
}
|
||||||
|
default:
|
||||||
|
g_return_val_if_reached (NULL);
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -264,7 +272,8 @@ add_kernel_object (struct nl_sock *sock, struct nl_object *object)
|
|||||||
case IP6_ROUTE:
|
case IP6_ROUTE:
|
||||||
return rtnl_route_add (sock, (struct rtnl_route *) object, NLM_F_CREATE | NLM_F_REPLACE);
|
return rtnl_route_add (sock, (struct rtnl_route *) object, NLM_F_CREATE | NLM_F_REPLACE);
|
||||||
default:
|
default:
|
||||||
g_assert_not_reached ();
|
g_return_val_if_reached (-NLE_INVAL);
|
||||||
|
return -NLE_INVAL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -282,7 +291,8 @@ delete_kernel_object (struct nl_sock *sock, struct nl_object *object)
|
|||||||
case IP6_ROUTE:
|
case IP6_ROUTE:
|
||||||
return rtnl_route_delete (sock, (struct rtnl_route *) object, 0);
|
return rtnl_route_delete (sock, (struct rtnl_route *) object, 0);
|
||||||
default:
|
default:
|
||||||
g_assert_not_reached ();
|
g_return_val_if_reached (-NLE_INVAL);
|
||||||
|
return -NLE_INVAL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -931,11 +941,11 @@ init_ip6_route (NMPlatformIP6Route *route, struct rtnl_route *rtnlroute)
|
|||||||
/* Object and cache manipulation */
|
/* Object and cache manipulation */
|
||||||
|
|
||||||
static const char *signal_by_type_and_status[N_TYPES][N_STATUSES] = {
|
static const char *signal_by_type_and_status[N_TYPES][N_STATUSES] = {
|
||||||
{ NM_PLATFORM_LINK_ADDED, NM_PLATFORM_LINK_CHANGED, NM_PLATFORM_LINK_REMOVED },
|
[LINK] = { NM_PLATFORM_LINK_ADDED, NM_PLATFORM_LINK_CHANGED, NM_PLATFORM_LINK_REMOVED },
|
||||||
{ NM_PLATFORM_IP4_ADDRESS_ADDED, NM_PLATFORM_IP4_ADDRESS_CHANGED, NM_PLATFORM_IP4_ADDRESS_REMOVED },
|
[IP4_ADDRESS] = { NM_PLATFORM_IP4_ADDRESS_ADDED, NM_PLATFORM_IP4_ADDRESS_CHANGED, NM_PLATFORM_IP4_ADDRESS_REMOVED },
|
||||||
{ NM_PLATFORM_IP6_ADDRESS_ADDED, NM_PLATFORM_IP6_ADDRESS_CHANGED, NM_PLATFORM_IP6_ADDRESS_REMOVED },
|
[IP6_ADDRESS] = { NM_PLATFORM_IP6_ADDRESS_ADDED, NM_PLATFORM_IP6_ADDRESS_CHANGED, NM_PLATFORM_IP6_ADDRESS_REMOVED },
|
||||||
{ NM_PLATFORM_IP4_ROUTE_ADDED, NM_PLATFORM_IP4_ROUTE_CHANGED, NM_PLATFORM_IP4_ROUTE_REMOVED },
|
[IP4_ROUTE] = { NM_PLATFORM_IP4_ROUTE_ADDED, NM_PLATFORM_IP4_ROUTE_CHANGED, NM_PLATFORM_IP4_ROUTE_REMOVED },
|
||||||
{ NM_PLATFORM_IP6_ROUTE_ADDED, NM_PLATFORM_IP6_ROUTE_CHANGED, NM_PLATFORM_IP6_ROUTE_REMOVED }
|
[IP6_ROUTE] = { NM_PLATFORM_IP6_ROUTE_ADDED, NM_PLATFORM_IP6_ROUTE_CHANGED, NM_PLATFORM_IP6_ROUTE_REMOVED }
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct nl_cache *
|
static struct nl_cache *
|
||||||
@@ -953,7 +963,8 @@ choose_cache (NMPlatform *platform, struct nl_object *object)
|
|||||||
case IP6_ROUTE:
|
case IP6_ROUTE:
|
||||||
return priv->route_cache;
|
return priv->route_cache;
|
||||||
default:
|
default:
|
||||||
g_assert_not_reached ();
|
g_return_val_if_reached (NULL);
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1095,7 +1106,7 @@ announce_object (NMPlatform *platform, const struct nl_object *object, ObjectSta
|
|||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
default:
|
default:
|
||||||
error ("Announcing object: object type unknown: %d", object_type);
|
g_return_if_reached ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1951,7 +1962,8 @@ master_category (NMPlatform *platform, int master)
|
|||||||
case NM_LINK_TYPE_BOND:
|
case NM_LINK_TYPE_BOND:
|
||||||
return "bonding";
|
return "bonding";
|
||||||
default:
|
default:
|
||||||
g_assert_not_reached ();
|
g_return_val_if_reached (NULL);
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1969,7 +1981,8 @@ slave_category (NMPlatform *platform, int slave)
|
|||||||
case NM_LINK_TYPE_BRIDGE:
|
case NM_LINK_TYPE_BRIDGE:
|
||||||
return "brport";
|
return "brport";
|
||||||
default:
|
default:
|
||||||
g_assert_not_reached ();
|
g_return_val_if_reached (NULL);
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user