Lines Matching refs:xi

56 #define for_each_xfrmi_rcu(start, xi) \  argument
57 for (xi = rcu_dereference(start); xi; xi = rcu_dereference(xi->next))
62 struct xfrm_if *xi; in xfrmi_lookup() local
64 for_each_xfrmi_rcu(xfrmn->xfrmi[0], xi) { in xfrmi_lookup()
65 if (x->if_id == xi->p.if_id && in xfrmi_lookup()
66 (xi->dev->flags & IFF_UP)) in xfrmi_lookup()
67 return xi; in xfrmi_lookup()
77 struct xfrm_if *xi; in xfrmi_decode_session() local
96 for_each_xfrmi_rcu(xfrmn->xfrmi[0], xi) { in xfrmi_decode_session()
97 if (ifindex == xi->dev->ifindex && in xfrmi_decode_session()
98 (xi->dev->flags & IFF_UP)) in xfrmi_decode_session()
99 return xi; in xfrmi_decode_session()
105 static void xfrmi_link(struct xfrmi_net *xfrmn, struct xfrm_if *xi) in xfrmi_link() argument
109 rcu_assign_pointer(xi->next , rtnl_dereference(*xip)); in xfrmi_link()
110 rcu_assign_pointer(*xip, xi); in xfrmi_link()
113 static void xfrmi_unlink(struct xfrmi_net *xfrmn, struct xfrm_if *xi) in xfrmi_unlink() argument
121 if (xi == iter) { in xfrmi_unlink()
122 rcu_assign_pointer(*xip, xi->next); in xfrmi_unlink()
130 struct xfrm_if *xi = netdev_priv(dev); in xfrmi_dev_free() local
132 gro_cells_destroy(&xi->gro_cells); in xfrmi_dev_free()
138 struct xfrm_if *xi = netdev_priv(dev); in xfrmi_create() local
149 xfrmi_link(xfrmn, xi); in xfrmi_create()
160 struct xfrm_if *xi; in xfrmi_locate() local
164 (xi = rtnl_dereference(*xip)) != NULL; in xfrmi_locate()
165 xip = &xi->next) in xfrmi_locate()
166 if (xi->p.if_id == p->if_id) in xfrmi_locate()
167 return xi; in xfrmi_locate()
174 struct xfrm_if *xi = netdev_priv(dev); in xfrmi_dev_uninit() local
175 struct xfrmi_net *xfrmn = net_generic(xi->net, xfrmi_net_id); in xfrmi_dev_uninit()
177 xfrmi_unlink(xfrmn, xi); in xfrmi_dev_uninit()
206 struct xfrm_if *xi; in xfrmi_rcv_cb() local
214 xi = xfrmi_lookup(xs_net(x), x); in xfrmi_rcv_cb()
215 if (!xi) in xfrmi_rcv_cb()
218 dev = xi->dev; in xfrmi_rcv_cb()
228 xnet = !net_eq(xi->net, dev_net(skb->dev)); in xfrmi_rcv_cb()
262 struct xfrm_if *xi = netdev_priv(dev); in xfrmi_xmit2() local
263 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()
364 fl.flowi_oif = xi->p.link; in xfrmi_xmit()
388 struct xfrm_if *xi; in xfrmi4_err() local
423 xi = xfrmi_lookup(net, x); in xfrmi4_err()
424 if (!xi) { in xfrmi4_err()
448 struct xfrm_if *xi; in xfrmi6_err() local
477 xi = xfrmi_lookup(net, x); in xfrmi6_err()
478 if (!xi) { in xfrmi6_err()
493 static int xfrmi_change(struct xfrm_if *xi, const struct xfrm_if_parms *p) in xfrmi_change() argument
495 if (xi->p.link != p->link) in xfrmi_change()
498 xi->p.if_id = p->if_id; in xfrmi_change()
503 static int xfrmi_update(struct xfrm_if *xi, struct xfrm_if_parms *p) in xfrmi_update() argument
505 struct net *net = xi->net; in xfrmi_update()
509 xfrmi_unlink(xfrmn, xi); in xfrmi_update()
511 err = xfrmi_change(xi, p); in xfrmi_update()
512 xfrmi_link(xfrmn, xi); in xfrmi_update()
513 netdev_state_change(xi->dev); in xfrmi_update()
548 struct xfrm_if *xi = netdev_priv(dev); in xfrmi_get_iflink() local
550 return xi->p.link; in xfrmi_get_iflink()
582 struct xfrm_if *xi = netdev_priv(dev); in xfrmi_dev_init() local
583 struct net_device *phydev = __dev_get_by_index(xi->net, xi->p.link); in xfrmi_dev_init()
590 err = gro_cells_init(&xi->gro_cells, dev); in xfrmi_dev_init()
642 struct xfrm_if *xi; in xfrmi_newlink() local
646 xi = xfrmi_locate(net, &p); in xfrmi_newlink()
647 if (xi) in xfrmi_newlink()
650 xi = netdev_priv(dev); in xfrmi_newlink()
651 xi->p = p; in xfrmi_newlink()
652 xi->net = net; in xfrmi_newlink()
653 xi->dev = dev; in xfrmi_newlink()
668 struct xfrm_if *xi = netdev_priv(dev); in xfrmi_changelink() local
669 struct net *net = xi->net; in xfrmi_changelink()
673 xi = xfrmi_locate(net, &p); in xfrmi_changelink()
674 if (!xi) { in xfrmi_changelink()
675 xi = netdev_priv(dev); in xfrmi_changelink()
677 if (xi->dev != dev) in xfrmi_changelink()
681 return xfrmi_update(xi, &p); in xfrmi_changelink()
696 struct xfrm_if *xi = netdev_priv(dev); in xfrmi_fill_info() local
697 struct xfrm_if_parms *parm = &xi->p; in xfrmi_fill_info()
710 struct xfrm_if *xi = netdev_priv(dev); in xfrmi_get_link_net() local
712 return xi->net; in xfrmi_get_link_net()
737 struct xfrm_if *xi; in xfrmi_destroy_interfaces() local
740 xi = rtnl_dereference(xfrmn->xfrmi[0]); in xfrmi_destroy_interfaces()
741 if (!xi) in xfrmi_destroy_interfaces()
744 unregister_netdevice_queue(xi->dev, &list); in xfrmi_destroy_interfaces()