Lines Matching refs:xi

146 #define for_each_xfrmi_rcu(start, xi) \
147 for (xi = rcu_dereference(start); xi; xi = rcu_dereference(xi->next))
157 struct xfrm_if *xi;
159 for_each_xfrmi_rcu(xfrmn->xfrmi[xfrmi_hash(x->if_id)], xi) {
160 if (x->if_id == xi->p.if_id &&
161 (xi->dev->flags & IFF_UP))
162 return xi;
165 xi = rcu_dereference(xfrmn->collect_md_xfrmi);
166 if (xi && (xi->dev->flags & IFF_UP))
167 return xi;
177 struct xfrm_if *xi;
205 xi = netdev_priv(dev);
206 res->net = xi->net;
208 if (xi->p.collect_md)
211 res->if_id = xi->p.if_id;
215 static void xfrmi_link(struct xfrmi_net *xfrmn, struct xfrm_if *xi)
217 struct xfrm_if __rcu **xip = &xfrmn->xfrmi[xfrmi_hash(xi->p.if_id)];
219 rcu_assign_pointer(xi->next , rtnl_dereference(*xip));
220 rcu_assign_pointer(*xip, xi);
223 static void xfrmi_unlink(struct xfrmi_net *xfrmn, struct xfrm_if *xi)
228 for (xip = &xfrmn->xfrmi[xfrmi_hash(xi->p.if_id)];
231 if (xi == iter) {
232 rcu_assign_pointer(*xip, xi->next);
240 struct xfrm_if *xi = netdev_priv(dev);
242 gro_cells_destroy(&xi->gro_cells);
247 struct xfrm_if *xi = netdev_priv(dev);
257 if (xi->p.collect_md)
258 rcu_assign_pointer(xfrmn->collect_md_xfrmi, xi);
260 xfrmi_link(xfrmn, xi);
271 struct xfrm_if *xi;
275 (xi = rtnl_dereference(*xip)) != NULL;
276 xip = &xi->next)
277 if (xi->p.if_id == p->if_id)
278 return xi;
285 struct xfrm_if *xi = netdev_priv(dev);
286 struct xfrmi_net *xfrmn = net_generic(xi->net, xfrmi_net_id);
288 if (xi->p.collect_md)
291 xfrmi_unlink(xfrmn, xi);
364 struct xfrm_if *xi;
373 xi = xfrmi_lookup(xs_net(x), x);
374 if (!xi)
378 dev = xi->dev;
388 xnet = !net_eq(xi->net, dev_net(skb->dev));
408 if (xi->p.collect_md) {
427 struct xfrm_if *xi = netdev_priv(dev);
436 if (xi->p.collect_md) {
453 if_id = xi->p.if_id;
457 dst = xfrm_lookup_with_ifid(xi->net, dst, fl, NULL, 0, if_id);
505 xfrmi_scrub_packet(skb, !net_eq(xi->net, dev_net(dev)));
509 err = dst_output(xi->net, skb->sk, skb);
528 struct xfrm_if *xi = netdev_priv(dev);
571 fl.flowi_oif = xi->p.link;
595 struct xfrm_if *xi;
631 xi = xfrmi_lookup(net, x);
632 if (!xi) {
656 struct xfrm_if *xi;
685 xi = xfrmi_lookup(net, x);
686 if (!xi) {
701 static int xfrmi_change(struct xfrm_if *xi, const struct xfrm_if_parms *p)
703 if (xi->p.link != p->link)
706 xi->p.if_id = p->if_id;
711 static int xfrmi_update(struct xfrm_if *xi, struct xfrm_if_parms *p)
713 struct net *net = xi->net;
717 xfrmi_unlink(xfrmn, xi);
719 err = xfrmi_change(xi, p);
720 xfrmi_link(xfrmn, xi);
721 netdev_state_change(xi->dev);
727 struct xfrm_if *xi = netdev_priv(dev);
729 return READ_ONCE(xi->p.link);
764 struct xfrm_if *xi = netdev_priv(dev);
765 struct net_device *phydev = __dev_get_by_index(xi->net, xi->p.link);
768 err = gro_cells_init(&xi->gro_cells, dev);
823 struct xfrm_if *xi;
844 xi = xfrmi_locate(net, &p);
845 if (xi)
849 xi = netdev_priv(dev);
850 xi->p = p;
851 xi->net = net;
852 xi->dev = dev;
867 struct xfrm_if *xi = netdev_priv(dev);
868 struct net *net = xi->net;
882 xi = xfrmi_locate(net, &p);
883 if (!xi) {
884 xi = netdev_priv(dev);
886 if (xi->dev != dev)
888 if (xi->p.collect_md) {
895 return xfrmi_update(xi, &p);
912 struct xfrm_if *xi = netdev_priv(dev);
913 struct xfrm_if_parms *parm = &xi->p;
917 (xi->p.collect_md && nla_put_flag(skb, IFLA_XFRM_COLLECT_METADATA)))
927 struct xfrm_if *xi = netdev_priv(dev);
929 return xi->net;
963 struct xfrm_if *xi;
968 (xi = rtnl_dereference(*xip)) != NULL;
969 xip = &xi->next)
970 unregister_netdevice_queue(xi->dev, dev_to_kill);
972 xi = rtnl_dereference(xfrmn->collect_md_xfrmi);
973 if (xi)
974 unregister_netdevice_queue(xi->dev, dev_to_kill);