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:
Thomas Haller
2014-02-11 22:10:05 +01:00
parent e54a3ccaf8
commit dc54b2e3b2

View File

@@ -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;
} }
} }