/* We always hold one tunnel user reference to indicate a tunnel */ staticstruct lock_class_key xfrm_state_lock_key; staticstruct xfrm_state *ipcomp_tunnel_create(struct xfrm_state *x)
{ struct net *net = xs_net(x); struct xfrm_state *t;
t = xfrm_state_alloc(net); if (!t) goto out;
lockdep_set_class(&t->lock, &xfrm_state_lock_key);
/* * Must be protected by xfrm_cfg_mutex. State and tunnel user references are * always incremented on success.
*/ staticint ipcomp_tunnel_attach(struct xfrm_state *x)
{ struct net *net = xs_net(x); int err = 0; struct xfrm_state *t;
u32 mark = x->mark.v & x->mark.m;
t = xfrm_state_lookup(net, mark, (xfrm_address_t *)&x->id.daddr.a4,
x->props.saddr.a4, IPPROTO_IPIP, AF_INET); if (!t) {
t = ipcomp_tunnel_create(x); if (!t) {
err = -EINVAL; goto out;
}
xfrm_state_insert(t);
xfrm_state_hold(t);
}
x->tunnel = t;
atomic_inc(&t->tunnel_users);
out: return err;
}
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.0Bemerkung:
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.