Lines Matching refs:xi
61 #define for_each_xfrmi_rcu(start, xi) \ argument
62 for (xi = rcu_dereference(start); xi; xi = rcu_dereference(xi->next))
72 struct xfrm_if *xi; in xfrmi_lookup() local
74 for_each_xfrmi_rcu(xfrmn->xfrmi[xfrmi_hash(x->if_id)], xi) { in xfrmi_lookup()
75 if (x->if_id == xi->p.if_id && in xfrmi_lookup()
76 (xi->dev->flags & IFF_UP)) in xfrmi_lookup()
77 return xi; in xfrmi_lookup()
117 static void xfrmi_link(struct xfrmi_net *xfrmn, struct xfrm_if *xi) in xfrmi_link() argument
119 struct xfrm_if __rcu **xip = &xfrmn->xfrmi[xfrmi_hash(xi->p.if_id)]; in xfrmi_link()
121 rcu_assign_pointer(xi->next , rtnl_dereference(*xip)); in xfrmi_link()
122 rcu_assign_pointer(*xip, xi); in xfrmi_link()
125 static void xfrmi_unlink(struct xfrmi_net *xfrmn, struct xfrm_if *xi) in xfrmi_unlink() argument
130 for (xip = &xfrmn->xfrmi[xfrmi_hash(xi->p.if_id)]; in xfrmi_unlink()
133 if (xi == iter) { in xfrmi_unlink()
134 rcu_assign_pointer(*xip, xi->next); in xfrmi_unlink()
142 struct xfrm_if *xi = netdev_priv(dev); in xfrmi_dev_free() local
144 gro_cells_destroy(&xi->gro_cells); in xfrmi_dev_free()
150 struct xfrm_if *xi = netdev_priv(dev); in xfrmi_create() local
160 xfrmi_link(xfrmn, xi); in xfrmi_create()
171 struct xfrm_if *xi; in xfrmi_locate() local
175 (xi = rtnl_dereference(*xip)) != NULL; in xfrmi_locate()
176 xip = &xi->next) in xfrmi_locate()
177 if (xi->p.if_id == p->if_id) in xfrmi_locate()
178 return xi; in xfrmi_locate()
185 struct xfrm_if *xi = netdev_priv(dev); in xfrmi_dev_uninit() local
186 struct xfrmi_net *xfrmn = net_generic(xi->net, xfrmi_net_id); in xfrmi_dev_uninit()
188 xfrmi_unlink(xfrmn, xi); in xfrmi_dev_uninit()
215 struct xfrm_if *xi; in xfrmi_rcv_cb() local
223 xi = xfrmi_lookup(xs_net(x), x); in xfrmi_rcv_cb()
224 if (!xi) in xfrmi_rcv_cb()
227 dev = xi->dev; in xfrmi_rcv_cb()
237 xnet = !net_eq(xi->net, dev_net(skb->dev)); in xfrmi_rcv_cb()
265 struct xfrm_if *xi = netdev_priv(dev); in xfrmi_xmit2() local
266 struct net_device_stats *stats = &xi->dev->stats; in xfrmi_xmit2()
275 dst = xfrm_lookup_with_ifid(xi->net, dst, fl, NULL, 0, xi->p.if_id); in xfrmi_xmit2()
286 if (x->if_id != xi->p.if_id) in xfrmi_xmit2()
316 xfrmi_scrub_packet(skb, !net_eq(xi->net, dev_net(dev))); in xfrmi_xmit2()
320 err = dst_output(xi->net, skb->sk, skb); in xfrmi_xmit2()
344 struct xfrm_if *xi = netdev_priv(dev); in xfrmi_xmit() local
345 struct net_device_stats *stats = &xi->dev->stats; in xfrmi_xmit()
388 fl.flowi_oif = xi->p.link; in xfrmi_xmit()
412 struct xfrm_if *xi; in xfrmi4_err() local
447 xi = xfrmi_lookup(net, x); in xfrmi4_err()
448 if (!xi) { in xfrmi4_err()
472 struct xfrm_if *xi; in xfrmi6_err() local
501 xi = xfrmi_lookup(net, x); in xfrmi6_err()
502 if (!xi) { in xfrmi6_err()
517 static int xfrmi_change(struct xfrm_if *xi, const struct xfrm_if_parms *p) in xfrmi_change() argument
519 if (xi->p.link != p->link) in xfrmi_change()
522 xi->p.if_id = p->if_id; in xfrmi_change()
527 static int xfrmi_update(struct xfrm_if *xi, struct xfrm_if_parms *p) in xfrmi_update() argument
529 struct net *net = xi->net; in xfrmi_update()
533 xfrmi_unlink(xfrmn, xi); in xfrmi_update()
535 err = xfrmi_change(xi, p); in xfrmi_update()
536 xfrmi_link(xfrmn, xi); in xfrmi_update()
537 netdev_state_change(xi->dev); in xfrmi_update()
552 struct xfrm_if *xi = netdev_priv(dev); in xfrmi_get_iflink() local
554 return xi->p.link; in xfrmi_get_iflink()
584 struct xfrm_if *xi = netdev_priv(dev); in xfrmi_dev_init() local
585 struct net_device *phydev = __dev_get_by_index(xi->net, xi->p.link); in xfrmi_dev_init()
592 err = gro_cells_init(&xi->gro_cells, dev); in xfrmi_dev_init()
644 struct xfrm_if *xi; in xfrmi_newlink() local
648 xi = xfrmi_locate(net, &p); in xfrmi_newlink()
649 if (xi) in xfrmi_newlink()
652 xi = netdev_priv(dev); in xfrmi_newlink()
653 xi->p = p; in xfrmi_newlink()
654 xi->net = net; in xfrmi_newlink()
655 xi->dev = dev; in xfrmi_newlink()
670 struct xfrm_if *xi = netdev_priv(dev); in xfrmi_changelink() local
671 struct net *net = xi->net; in xfrmi_changelink()
675 xi = xfrmi_locate(net, &p); in xfrmi_changelink()
676 if (!xi) { in xfrmi_changelink()
677 xi = netdev_priv(dev); in xfrmi_changelink()
679 if (xi->dev != dev) in xfrmi_changelink()
683 return xfrmi_update(xi, &p); in xfrmi_changelink()
698 struct xfrm_if *xi = netdev_priv(dev); in xfrmi_fill_info() local
699 struct xfrm_if_parms *parm = &xi->p; in xfrmi_fill_info()
712 struct xfrm_if *xi = netdev_priv(dev); in xfrmi_get_link_net() local
714 return xi->net; in xfrmi_get_link_net()
746 struct xfrm_if *xi; in xfrmi_exit_batch_net() local
751 (xi = rtnl_dereference(*xip)) != NULL; in xfrmi_exit_batch_net()
752 xip = &xi->next) in xfrmi_exit_batch_net()
753 unregister_netdevice_queue(xi->dev, &list); in xfrmi_exit_batch_net()