Lines Matching defs: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);
256 if (xi->p.collect_md)
257 rcu_assign_pointer(xfrmn->collect_md_xfrmi, xi);
259 xfrmi_link(xfrmn, xi);
270 struct xfrm_if *xi;
274 (xi = rtnl_dereference(*xip)) != NULL;
275 xip = &xi->next)
276 if (xi->p.if_id == p->if_id)
277 return xi;
284 struct xfrm_if *xi = netdev_priv(dev);
285 struct xfrmi_net *xfrmn = net_generic(xi->net, xfrmi_net_id);
287 if (xi->p.collect_md)
290 xfrmi_unlink(xfrmn, xi);
363 struct xfrm_if *xi;
372 xi = xfrmi_lookup(xs_net(x), x);
373 if (!xi)
377 dev = xi->dev;
387 xnet = !net_eq(xi->net, dev_net(skb->dev));
407 if (xi->p.collect_md) {
426 struct xfrm_if *xi = netdev_priv(dev);
435 if (xi->p.collect_md) {
452 if_id = xi->p.if_id;
456 dst = xfrm_lookup_with_ifid(xi->net, dst, fl, NULL, 0, if_id);
504 xfrmi_scrub_packet(skb, !net_eq(xi->net, dev_net(dev)));
508 err = dst_output(xi->net, skb_to_full_sk(skb), skb);
527 struct xfrm_if *xi = netdev_priv(dev);
570 fl.flowi_oif = xi->p.link;
594 struct xfrm_if *xi;
630 xi = xfrmi_lookup(net, x);
631 if (!xi) {
655 struct xfrm_if *xi;
684 xi = xfrmi_lookup(net, x);
685 if (!xi) {
700 static int xfrmi_change(struct xfrm_if *xi, const struct xfrm_if_parms *p)
702 if (xi->p.link != p->link)
705 xi->p.if_id = p->if_id;
710 static int xfrmi_update(struct xfrm_if *xi, struct xfrm_if_parms *p)
712 struct net *net = xi->net;
716 xfrmi_unlink(xfrmn, xi);
718 err = xfrmi_change(xi, p);
719 xfrmi_link(xfrmn, xi);
720 netdev_state_change(xi->dev);
726 struct xfrm_if *xi = netdev_priv(dev);
728 return READ_ONCE(xi->p.link);
763 struct xfrm_if *xi = netdev_priv(dev);
764 struct net_device *phydev = __dev_get_by_index(xi->net, xi->p.link);
767 err = gro_cells_init(&xi->gro_cells, dev);
822 struct xfrm_if *xi;
845 xi = xfrmi_locate(net, &p);
846 if (xi)
850 xi = netdev_priv(dev);
851 xi->p = p;
852 xi->net = net;
853 xi->dev = dev;
868 struct xfrm_if *xi = netdev_priv(dev);
869 struct net *net = xi->net;
883 xi = xfrmi_locate(net, &p);
884 if (!xi) {
885 xi = netdev_priv(dev);
887 if (xi->dev != dev)
889 if (xi->p.collect_md) {
896 return xfrmi_update(xi, &p);
913 struct xfrm_if *xi = netdev_priv(dev);
914 struct xfrm_if_parms *parm = &xi->p;
918 (xi->p.collect_md && nla_put_flag(skb, IFLA_XFRM_COLLECT_METADATA)))
928 struct xfrm_if *xi = netdev_priv(dev);
930 return READ_ONCE(xi->net);
960 struct xfrm_if *xi;
965 (xi = rtnl_net_dereference(net, *xip)) != NULL;
966 xip = &xi->next)
967 unregister_netdevice_queue(xi->dev, dev_to_kill);
970 xi = rtnl_net_dereference(net, xfrmn->collect_md_xfrmi);
971 if (xi)
972 unregister_netdevice_queue(xi->dev, dev_to_kill);