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()
322 xfrmi_scrub_packet(skb, !net_eq(xi->net, dev_net(dev))); in xfrmi_xmit2()
326 err = dst_output(xi->net, skb->sk, skb); in xfrmi_xmit2()
350 struct xfrm_if *xi = netdev_priv(dev); in xfrmi_xmit() local
351 struct net_device_stats *stats = &xi->dev->stats; in xfrmi_xmit()
394 fl.flowi_oif = xi->p.link; in xfrmi_xmit()
418 struct xfrm_if *xi; in xfrmi4_err() local
453 xi = xfrmi_lookup(net, x); in xfrmi4_err()
454 if (!xi) { in xfrmi4_err()
478 struct xfrm_if *xi; in xfrmi6_err() local
507 xi = xfrmi_lookup(net, x); in xfrmi6_err()
508 if (!xi) { in xfrmi6_err()
523 static int xfrmi_change(struct xfrm_if *xi, const struct xfrm_if_parms *p) in xfrmi_change() argument
525 if (xi->p.link != p->link) in xfrmi_change()
528 xi->p.if_id = p->if_id; in xfrmi_change()
533 static int xfrmi_update(struct xfrm_if *xi, struct xfrm_if_parms *p) in xfrmi_update() argument
535 struct net *net = xi->net; in xfrmi_update()
539 xfrmi_unlink(xfrmn, xi); in xfrmi_update()
541 err = xfrmi_change(xi, p); in xfrmi_update()
542 xfrmi_link(xfrmn, xi); in xfrmi_update()
543 netdev_state_change(xi->dev); in xfrmi_update()
558 struct xfrm_if *xi = netdev_priv(dev); in xfrmi_get_iflink() local
560 return xi->p.link; in xfrmi_get_iflink()
590 struct xfrm_if *xi = netdev_priv(dev); in xfrmi_dev_init() local
591 struct net_device *phydev = __dev_get_by_index(xi->net, xi->p.link); in xfrmi_dev_init()
598 err = gro_cells_init(&xi->gro_cells, dev); in xfrmi_dev_init()
650 struct xfrm_if *xi; in xfrmi_newlink() local
659 xi = xfrmi_locate(net, &p); in xfrmi_newlink()
660 if (xi) in xfrmi_newlink()
663 xi = netdev_priv(dev); in xfrmi_newlink()
664 xi->p = p; in xfrmi_newlink()
665 xi->net = net; in xfrmi_newlink()
666 xi->dev = dev; in xfrmi_newlink()
681 struct xfrm_if *xi = netdev_priv(dev); in xfrmi_changelink() local
682 struct net *net = xi->net; in xfrmi_changelink()
691 xi = xfrmi_locate(net, &p); in xfrmi_changelink()
692 if (!xi) { in xfrmi_changelink()
693 xi = netdev_priv(dev); in xfrmi_changelink()
695 if (xi->dev != dev) in xfrmi_changelink()
699 return xfrmi_update(xi, &p); in xfrmi_changelink()
714 struct xfrm_if *xi = netdev_priv(dev); in xfrmi_fill_info() local
715 struct xfrm_if_parms *parm = &xi->p; in xfrmi_fill_info()
728 struct xfrm_if *xi = netdev_priv(dev); in xfrmi_get_link_net() local
730 return xi->net; in xfrmi_get_link_net()
762 struct xfrm_if *xi; in xfrmi_exit_batch_net() local
767 (xi = rtnl_dereference(*xip)) != NULL; in xfrmi_exit_batch_net()
768 xip = &xi->next) in xfrmi_exit_batch_net()
769 unregister_netdevice_queue(xi->dev, &list); in xfrmi_exit_batch_net()