xfrm_policy_afinfo
int xfrm_policy_register_afinfo(const struct xfrm_policy_afinfo *afinfo, int family);
void xfrm_policy_unregister_afinfo(const struct xfrm_policy_afinfo *afinfo);
static const struct xfrm_policy_afinfo xfrm4_policy_afinfo = {
static const struct xfrm_policy_afinfo xfrm6_policy_afinfo = {
static struct xfrm_policy_afinfo const __rcu *xfrm_policy_afinfo[AF_INET6 + 1]
const struct xfrm_policy_afinfo *afinfo = xfrm_policy_get_afinfo(family);
static const struct xfrm_policy_afinfo *xfrm_policy_get_afinfo(unsigned short family)
const struct xfrm_policy_afinfo *afinfo;
const struct xfrm_policy_afinfo *afinfo = xfrm_policy_get_afinfo(family);
if (unlikely(family >= ARRAY_SIZE(xfrm_policy_afinfo)))
afinfo = rcu_dereference(xfrm_policy_afinfo[family]);
const struct xfrm_policy_afinfo *afinfo =
const struct xfrm_policy_afinfo *afinfo;
const struct xfrm_policy_afinfo *afinfo = xfrm_policy_get_afinfo(family);
int xfrm_policy_register_afinfo(const struct xfrm_policy_afinfo *afinfo, int family)
if (WARN_ON(family >= ARRAY_SIZE(xfrm_policy_afinfo)))
if (unlikely(xfrm_policy_afinfo[family] != NULL))
rcu_assign_pointer(xfrm_policy_afinfo[family], afinfo);
void xfrm_policy_unregister_afinfo(const struct xfrm_policy_afinfo *afinfo)
for (i = 0; i < ARRAY_SIZE(xfrm_policy_afinfo); i++) {
if (rcu_access_pointer(xfrm_policy_afinfo[i]) != afinfo)
RCU_INIT_POINTER(xfrm_policy_afinfo[i], NULL);