xfrm_input_afinfo
int xfrm_input_register_afinfo(const struct xfrm_input_afinfo *afinfo);
int xfrm_input_unregister_afinfo(const struct xfrm_input_afinfo *afinfo);
static const struct xfrm_input_afinfo tunnel4_input_afinfo = {
static const struct xfrm_input_afinfo xfrm4_input_afinfo = {
static const struct xfrm_input_afinfo tunnel6_input_afinfo = {
static const struct xfrm_input_afinfo xfrm6_input_afinfo = {
afinfo = rcu_dereference(xfrm_input_afinfo[is_ipip][family]);
const struct xfrm_input_afinfo *afinfo;
static struct xfrm_input_afinfo const __rcu *xfrm_input_afinfo[2][AF_INET6 + 1];
int xfrm_input_register_afinfo(const struct xfrm_input_afinfo *afinfo)
if (unlikely(xfrm_input_afinfo[afinfo->is_ipip][afinfo->family]))
rcu_assign_pointer(xfrm_input_afinfo[afinfo->is_ipip][afinfo->family], afinfo);
int xfrm_input_unregister_afinfo(const struct xfrm_input_afinfo *afinfo)
if (likely(xfrm_input_afinfo[afinfo->is_ipip][afinfo->family])) {
const struct xfrm_input_afinfo *cur;
cur = rcu_access_pointer(xfrm_input_afinfo[afinfo->is_ipip][afinfo->family]);
RCU_INIT_POINTER(xfrm_input_afinfo[afinfo->is_ipip][afinfo->family], NULL);
static const struct xfrm_input_afinfo *xfrm_input_get_afinfo(u8 family, bool is_ipip)
const struct xfrm_input_afinfo *afinfo;