ndisc: add static asserts to _route_preference_coerce()
Our internal NMIcmpv6RouterPref defines must be numerically identical to the values in the protocol. Add a static assertion for that.
This commit is contained in:
@@ -85,14 +85,26 @@ send_rs(NMNDisc *ndisc, GError **error)
|
||||
static NMIcmpv6RouterPref
|
||||
_route_preference_coerce(enum ndp_route_preference pref)
|
||||
{
|
||||
#define _ASSERT_ENUM(v1, v2) \
|
||||
G_STMT_START \
|
||||
{ \
|
||||
G_STATIC_ASSERT((NMIcmpv6RouterPref)(v1) == (v2)); \
|
||||
G_STATIC_ASSERT((enum ndp_route_preference)(v2) == (v1)); \
|
||||
G_STATIC_ASSERT((gint64)(v1) == (v2)); \
|
||||
G_STATIC_ASSERT((gint64)(v2) == (v1)); \
|
||||
} \
|
||||
G_STMT_END
|
||||
|
||||
switch (pref) {
|
||||
case NDP_ROUTE_PREF_LOW:
|
||||
return NM_ICMPV6_ROUTER_PREF_LOW;
|
||||
case NDP_ROUTE_PREF_MEDIUM:
|
||||
return NM_ICMPV6_ROUTER_PREF_MEDIUM;
|
||||
case NDP_ROUTE_PREF_HIGH:
|
||||
return NM_ICMPV6_ROUTER_PREF_HIGH;
|
||||
_ASSERT_ENUM(NDP_ROUTE_PREF_LOW, NM_ICMPV6_ROUTER_PREF_LOW);
|
||||
_ASSERT_ENUM(NDP_ROUTE_PREF_MEDIUM, NM_ICMPV6_ROUTER_PREF_MEDIUM);
|
||||
_ASSERT_ENUM(NDP_ROUTE_PREF_HIGH, NM_ICMPV6_ROUTER_PREF_HIGH);
|
||||
return (NMIcmpv6RouterPref) pref;
|
||||
}
|
||||
|
||||
/* unexpected value must be treated as MEDIUM (RFC 4191). */
|
||||
return NM_ICMPV6_ROUTER_PREF_MEDIUM;
|
||||
}
|
||||
|
Reference in New Issue
Block a user