Lines Matching refs: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()
248 struct xfrm_if *xi = netdev_priv(dev); in xfrmi_create() local
258 if (xi->p.collect_md) in xfrmi_create()
259 rcu_assign_pointer(xfrmn->collect_md_xfrmi, xi); in xfrmi_create()
261 xfrmi_link(xfrmn, xi); in xfrmi_create()
272 struct xfrm_if *xi; in xfrmi_locate() local
276 (xi = rtnl_dereference(*xip)) != NULL; in xfrmi_locate()
277 xip = &xi->next) in xfrmi_locate()
278 if (xi->p.if_id == p->if_id) in xfrmi_locate()
279 return xi; in xfrmi_locate()
286 struct xfrm_if *xi = netdev_priv(dev); in xfrmi_dev_uninit() local
287 struct xfrmi_net *xfrmn = net_generic(xi->net, xfrmi_net_id); in xfrmi_dev_uninit()
289 if (xi->p.collect_md) in xfrmi_dev_uninit()
292 xfrmi_unlink(xfrmn, xi); in xfrmi_dev_uninit()
365 struct xfrm_if *xi; in xfrmi_rcv_cb() local
374 xi = xfrmi_lookup(xs_net(x), x); in xfrmi_rcv_cb()
375 if (!xi) in xfrmi_rcv_cb()
379 dev = xi->dev; in xfrmi_rcv_cb()
389 xnet = !net_eq(xi->net, dev_net(skb->dev)); in xfrmi_rcv_cb()
409 if (xi->p.collect_md) { in xfrmi_rcv_cb()
428 struct xfrm_if *xi = netdev_priv(dev); in xfrmi_xmit2() local
437 if (xi->p.collect_md) { in xfrmi_xmit2()
454 if_id = xi->p.if_id; in xfrmi_xmit2()
458 dst = xfrm_lookup_with_ifid(xi->net, dst, fl, NULL, 0, if_id); in xfrmi_xmit2()
506 xfrmi_scrub_packet(skb, !net_eq(xi->net, dev_net(dev))); in xfrmi_xmit2()
510 err = dst_output(xi->net, skb->sk, skb); in xfrmi_xmit2()
529 struct xfrm_if *xi = netdev_priv(dev); in xfrmi_xmit() local
572 fl.flowi_oif = xi->p.link; in xfrmi_xmit()
596 struct xfrm_if *xi; in xfrmi4_err() local
632 xi = xfrmi_lookup(net, x); in xfrmi4_err()
633 if (!xi) { in xfrmi4_err()
657 struct xfrm_if *xi; in xfrmi6_err() local
686 xi = xfrmi_lookup(net, x); in xfrmi6_err()
687 if (!xi) { in xfrmi6_err()
702 static int xfrmi_change(struct xfrm_if *xi, const struct xfrm_if_parms *p) in xfrmi_change() argument
704 if (xi->p.link != p->link) in xfrmi_change()
707 xi->p.if_id = p->if_id; in xfrmi_change()
712 static int xfrmi_update(struct xfrm_if *xi, struct xfrm_if_parms *p) in xfrmi_update() argument
714 struct net *net = xi->net; in xfrmi_update()
718 xfrmi_unlink(xfrmn, xi); in xfrmi_update()
720 err = xfrmi_change(xi, p); in xfrmi_update()
721 xfrmi_link(xfrmn, xi); in xfrmi_update()
722 netdev_state_change(xi->dev); in xfrmi_update()
728 struct xfrm_if *xi = netdev_priv(dev); in xfrmi_get_iflink() local
730 return xi->p.link; in xfrmi_get_iflink()
764 struct xfrm_if *xi = netdev_priv(dev); in xfrmi_dev_init() local
765 struct net_device *phydev = __dev_get_by_index(xi->net, xi->p.link); in xfrmi_dev_init()
772 err = gro_cells_init(&xi->gro_cells, dev); in xfrmi_dev_init()
829 struct xfrm_if *xi; in xfrmi_newlink() local
850 xi = xfrmi_locate(net, &p); in xfrmi_newlink()
851 if (xi) in xfrmi_newlink()
855 xi = netdev_priv(dev); in xfrmi_newlink()
856 xi->p = p; in xfrmi_newlink()
857 xi->net = net; in xfrmi_newlink()
858 xi->dev = dev; in xfrmi_newlink()
873 struct xfrm_if *xi = netdev_priv(dev); in xfrmi_changelink() local
874 struct net *net = xi->net; in xfrmi_changelink()
888 xi = xfrmi_locate(net, &p); in xfrmi_changelink()
889 if (!xi) { in xfrmi_changelink()
890 xi = netdev_priv(dev); in xfrmi_changelink()
892 if (xi->dev != dev) in xfrmi_changelink()
894 if (xi->p.collect_md) { in xfrmi_changelink()
901 return xfrmi_update(xi, &p); in xfrmi_changelink()
918 struct xfrm_if *xi = netdev_priv(dev); in xfrmi_fill_info() local
919 struct xfrm_if_parms *parm = &xi->p; in xfrmi_fill_info()
923 (xi->p.collect_md && nla_put_flag(skb, IFLA_XFRM_COLLECT_METADATA))) in xfrmi_fill_info()
933 struct xfrm_if *xi = netdev_priv(dev); in xfrmi_get_link_net() local
935 return xi->net; in xfrmi_get_link_net()
969 struct xfrm_if *xi; in xfrmi_exit_batch_net() local
974 (xi = rtnl_dereference(*xip)) != NULL; in xfrmi_exit_batch_net()
975 xip = &xi->next) in xfrmi_exit_batch_net()
976 unregister_netdevice_queue(xi->dev, &list); in xfrmi_exit_batch_net()
978 xi = rtnl_dereference(xfrmn->collect_md_xfrmi); in xfrmi_exit_batch_net()
979 if (xi) in xfrmi_exit_batch_net()
980 unregister_netdevice_queue(xi->dev, &list); in xfrmi_exit_batch_net()