Lines Matching full:xi

146 #define for_each_xfrmi_rcu(start, xi) \  argument
147 for (xi = rcu_dereference(start); xi; xi = rcu_dereference(xi->next))
157 struct xfrm_if *xi; in xfrmi_lookup() local
159 for_each_xfrmi_rcu(xfrmn->xfrmi[xfrmi_hash(x->if_id)], xi) { in xfrmi_lookup()
160 if (x->if_id == xi->p.if_id && in xfrmi_lookup()
161 (xi->dev->flags & IFF_UP)) in xfrmi_lookup()
162 return xi; in xfrmi_lookup()
165 xi = rcu_dereference(xfrmn->collect_md_xfrmi); in xfrmi_lookup()
166 if (xi && (xi->dev->flags & IFF_UP)) in xfrmi_lookup()
167 return xi; in xfrmi_lookup()
177 struct xfrm_if *xi; in xfrmi_decode_session() local
205 xi = netdev_priv(dev); in xfrmi_decode_session()
206 res->net = xi->net; in xfrmi_decode_session()
208 if (xi->p.collect_md) in xfrmi_decode_session()
211 res->if_id = xi->p.if_id; in xfrmi_decode_session()
215 static void xfrmi_link(struct xfrmi_net *xfrmn, struct xfrm_if *xi) in xfrmi_link() argument
217 struct xfrm_if __rcu **xip = &xfrmn->xfrmi[xfrmi_hash(xi->p.if_id)]; in xfrmi_link()
219 rcu_assign_pointer(xi->next , rtnl_dereference(*xip)); in xfrmi_link()
220 rcu_assign_pointer(*xip, xi); in xfrmi_link()
223 static void xfrmi_unlink(struct xfrmi_net *xfrmn, struct xfrm_if *xi) in xfrmi_unlink() argument
228 for (xip = &xfrmn->xfrmi[xfrmi_hash(xi->p.if_id)]; in xfrmi_unlink()
231 if (xi == iter) { in xfrmi_unlink()
232 rcu_assign_pointer(*xip, xi->next); in xfrmi_unlink()
240 struct xfrm_if *xi = netdev_priv(dev); in xfrmi_dev_free() local
242 gro_cells_destroy(&xi->gro_cells); in xfrmi_dev_free()
247 struct xfrm_if *xi = netdev_priv(dev); in xfrmi_create() local
256 if (xi->p.collect_md) in xfrmi_create()
257 rcu_assign_pointer(xfrmn->collect_md_xfrmi, xi); in xfrmi_create()
259 xfrmi_link(xfrmn, xi); in xfrmi_create()
270 struct xfrm_if *xi; in xfrmi_locate() local
274 (xi = rtnl_dereference(*xip)) != NULL; in xfrmi_locate()
275 xip = &xi->next) in xfrmi_locate()
276 if (xi->p.if_id == p->if_id) in xfrmi_locate()
277 return xi; in xfrmi_locate()
284 struct xfrm_if *xi = netdev_priv(dev); in xfrmi_dev_uninit() local
285 struct xfrmi_net *xfrmn = net_generic(xi->net, xfrmi_net_id); in xfrmi_dev_uninit()
287 if (xi->p.collect_md) in xfrmi_dev_uninit()
290 xfrmi_unlink(xfrmn, xi); in xfrmi_dev_uninit()
363 struct xfrm_if *xi; in xfrmi_rcv_cb() local
372 xi = xfrmi_lookup(xs_net(x), x); in xfrmi_rcv_cb()
373 if (!xi) in xfrmi_rcv_cb()
377 dev = xi->dev; in xfrmi_rcv_cb()
387 xnet = !net_eq(xi->net, dev_net(skb->dev)); in xfrmi_rcv_cb()
407 if (xi->p.collect_md) { in xfrmi_rcv_cb()
426 struct xfrm_if *xi = netdev_priv(dev); in xfrmi_xmit2() local
435 if (xi->p.collect_md) { in xfrmi_xmit2()
452 if_id = xi->p.if_id; in xfrmi_xmit2()
456 dst = xfrm_lookup_with_ifid(xi->net, dst, fl, NULL, 0, if_id); in xfrmi_xmit2()
504 xfrmi_scrub_packet(skb, !net_eq(xi->net, dev_net(dev))); in xfrmi_xmit2()
508 err = dst_output(xi->net, skb_to_full_sk(skb), skb); in xfrmi_xmit2()
527 struct xfrm_if *xi = netdev_priv(dev); in xfrmi_xmit() local
570 fl.flowi_oif = xi->p.link; in xfrmi_xmit()
594 struct xfrm_if *xi; in xfrmi4_err() local
630 xi = xfrmi_lookup(net, x); in xfrmi4_err()
631 if (!xi) { in xfrmi4_err()
655 struct xfrm_if *xi; in xfrmi6_err() local
684 xi = xfrmi_lookup(net, x); in xfrmi6_err()
685 if (!xi) { in xfrmi6_err()
700 static int xfrmi_change(struct xfrm_if *xi, const struct xfrm_if_parms *p) in xfrmi_change() argument
702 if (xi->p.link != p->link) in xfrmi_change()
705 xi->p.if_id = p->if_id; in xfrmi_change()
710 static int xfrmi_update(struct xfrm_if *xi, struct xfrm_if_parms *p) in xfrmi_update() argument
712 struct net *net = xi->net; in xfrmi_update()
716 xfrmi_unlink(xfrmn, xi); in xfrmi_update()
718 err = xfrmi_change(xi, p); in xfrmi_update()
719 xfrmi_link(xfrmn, xi); in xfrmi_update()
720 netdev_state_change(xi->dev); in xfrmi_update()
726 struct xfrm_if *xi = netdev_priv(dev); in xfrmi_get_iflink() local
728 return READ_ONCE(xi->p.link); in xfrmi_get_iflink()
763 struct xfrm_if *xi = netdev_priv(dev); in xfrmi_dev_init() local
764 struct net_device *phydev = __dev_get_by_index(xi->net, xi->p.link); in xfrmi_dev_init()
767 err = gro_cells_init(&xi->gro_cells, dev); in xfrmi_dev_init()
822 struct xfrm_if *xi; in xfrmi_newlink() local
845 xi = xfrmi_locate(net, &p); in xfrmi_newlink()
846 if (xi) in xfrmi_newlink()
850 xi = netdev_priv(dev); in xfrmi_newlink()
851 xi->p = p; in xfrmi_newlink()
852 xi->net = net; in xfrmi_newlink()
853 xi->dev = dev; in xfrmi_newlink()
868 struct xfrm_if *xi = netdev_priv(dev); in xfrmi_changelink() local
869 struct net *net = xi->net; in xfrmi_changelink()
878 if (p.collect_md || xi->p.collect_md) { in xfrmi_changelink()
883 xi = xfrmi_locate(net, &p); in xfrmi_changelink()
884 if (!xi) { in xfrmi_changelink()
885 xi = netdev_priv(dev); in xfrmi_changelink()
887 if (xi->dev != dev) in xfrmi_changelink()
891 return xfrmi_update(xi, &p); in xfrmi_changelink()
908 struct xfrm_if *xi = netdev_priv(dev); in xfrmi_fill_info() local
909 struct xfrm_if_parms *parm = &xi->p; in xfrmi_fill_info()
913 (xi->p.collect_md && nla_put_flag(skb, IFLA_XFRM_COLLECT_METADATA))) in xfrmi_fill_info()
923 struct xfrm_if *xi = netdev_priv(dev); in xfrmi_get_link_net() local
925 return READ_ONCE(xi->net); in xfrmi_get_link_net()
955 struct xfrm_if *xi; in xfrmi_exit_rtnl() local
960 (xi = rtnl_net_dereference(net, *xip)) != NULL; in xfrmi_exit_rtnl()
961 xip = &xi->next) in xfrmi_exit_rtnl()
962 unregister_netdevice_queue(xi->dev, dev_to_kill); in xfrmi_exit_rtnl()
965 xi = rtnl_net_dereference(net, xfrmn->collect_md_xfrmi); in xfrmi_exit_rtnl()
966 if (xi) in xfrmi_exit_rtnl()
967 unregister_netdevice_queue(xi->dev, dev_to_kill); in xfrmi_exit_rtnl()