Lines Matching defs:vxlan

16 #include <net/vxlan.h>
39 static void vxlan_vs_add_del_vninode(struct vxlan_dev *vxlan,
43 struct vxlan_net *vn = net_generic(vxlan->net, vxlan_net_id);
59 vs = rtnl_dereference(vxlan->vn6_sock);
65 vs = rtnl_dereference(vxlan->vn4_sock);
74 void vxlan_vs_add_vnigrp(struct vxlan_dev *vxlan,
78 struct vxlan_net *vn = net_generic(vxlan->net, vxlan_net_id);
79 struct vxlan_vni_group *vg = rtnl_dereference(vxlan->vnigrp);
94 node->vxlan = vxlan;
100 void vxlan_vs_del_vnigrp(struct vxlan_dev *vxlan)
102 struct vxlan_vni_group *vg = rtnl_dereference(vxlan->vnigrp);
103 struct vxlan_net *vn = net_generic(vxlan->net, vxlan_net_id);
178 void vxlan_vnifilter_count(struct vxlan_dev *vxlan, __be32 vni,
184 if (!(vxlan->cfg.flags & VXLAN_F_VNIFILTER))
190 vnode = vxlan_vnifilter_lookup(vxlan, vni);
300 static void vxlan_vnifilter_notify(const struct vxlan_dev *vxlan,
306 struct net *net = dev_net(vxlan->dev);
320 tmsg->ifindex = vxlan->dev->ifindex;
341 struct vxlan_dev *vxlan = netdev_priv(dev);
349 if (!(vxlan->cfg.flags & VXLAN_F_VNIFILTER))
353 vg = rcu_dereference(vxlan->vnigrp);
430 "The device is not a vxlan device");
475 static int vxlan_update_default_fdb_entry(struct vxlan_dev *vxlan, __be32 vni,
480 struct vxlan_rdst *dst = &vxlan->default_dst;
484 hash_index = fdb_head_index(vxlan, all_zeros_mac, vni);
485 spin_lock_bh(&vxlan->hash_lock[hash_index]);
487 err = vxlan_fdb_update(vxlan, all_zeros_mac,
491 vxlan->cfg.dst_port,
497 spin_unlock_bh(&vxlan->hash_lock[hash_index]);
503 __vxlan_fdb_delete(vxlan, all_zeros_mac,
505 vxlan->cfg.dst_port,
510 spin_unlock_bh(&vxlan->hash_lock[hash_index]);
515 static int vxlan_vni_update_group(struct vxlan_dev *vxlan,
521 struct vxlan_net *vn = net_generic(vxlan->net, vxlan_net_id);
522 struct vxlan_rdst *dst = &vxlan->default_dst;
529 /* if per vni remote ip is not present use vxlan dev
551 ret = vxlan_update_default_fdb_entry(vxlan, vninode->vni,
560 if (vxlan->dev->flags & IFF_UP) {
562 !vxlan_group_used(vn, vxlan, vninode->vni,
564 vxlan->default_dst.remote_ifindex)) {
565 ret = vxlan_igmp_leave(vxlan, &old_remote_ip,
572 ret = vxlan_igmp_join(vxlan, &vninode->remote_ip, 0);
587 int vxlan_vnilist_update_group(struct vxlan_dev *vxlan,
597 vg = rtnl_dereference(vxlan->vnigrp);
603 ret = vxlan_update_default_fdb_entry(vxlan, vent->vni,
615 static void vxlan_vni_delete_group(struct vxlan_dev *vxlan,
618 struct vxlan_net *vn = net_generic(vxlan->net, vxlan_net_id);
619 struct vxlan_rdst *dst = &vxlan->default_dst;
626 __vxlan_fdb_delete(vxlan, all_zeros_mac,
629 vxlan->cfg.dst_port,
634 if (vxlan->dev->flags & IFF_UP) {
636 !vxlan_group_used(vn, vxlan, vninode->vni,
639 vxlan_igmp_leave(vxlan, &vninode->remote_ip, 0);
644 static int vxlan_vni_update(struct vxlan_dev *vxlan,
658 ret = vxlan_vni_update_group(vxlan, vninode, group, false, changed,
664 vxlan_vnifilter_notify(vxlan, vninode, RTM_NEWTUNNEL);
694 static struct vxlan_vni_node *vxlan_vni_alloc(struct vxlan_dev *vxlan,
708 vninode->hlist4.vxlan = vxlan;
710 vninode->hlist6.vxlan = vxlan;
722 static int vxlan_vni_add(struct vxlan_dev *vxlan,
732 if (vxlan_vnifilter_lookup(vxlan, v))
733 return vxlan_vni_update(vxlan, vg, v, group, &changed, extack);
735 err = vxlan_vni_in_use(vxlan->net, vxlan, &vxlan->cfg, v);
741 vninode = vxlan_vni_alloc(vxlan, v);
755 if (vxlan->dev->flags & IFF_UP)
756 vxlan_vs_add_del_vninode(vxlan, vninode, false);
758 err = vxlan_vni_update_group(vxlan, vninode, group, true, &changed,
762 vxlan_vnifilter_notify(vxlan, vninode, RTM_NEWTUNNEL);
775 static int vxlan_vni_del(struct vxlan_dev *vxlan,
783 vg = rtnl_dereference(vxlan->vnigrp);
792 vxlan_vni_delete_group(vxlan, vninode);
802 vxlan_vnifilter_notify(vxlan, vninode, RTM_DELTUNNEL);
804 if (vxlan->dev->flags & IFF_UP)
805 vxlan_vs_add_del_vninode(vxlan, vninode, true);
814 static int vxlan_vni_add_del(struct vxlan_dev *vxlan, __u32 start_vni,
821 vg = rtnl_dereference(vxlan->vnigrp);
826 err = vxlan_vni_add(vxlan, vg, v, group, extack);
829 err = vxlan_vni_del(vxlan, vg, v, extack);
844 static int vxlan_process_vni_filter(struct vxlan_dev *vxlan,
886 if (vxlan_addr_multicast(&group) && !vxlan->default_dst.remote_ifindex) {
893 err = vxlan_vni_add_del(vxlan, vni_start, vni_end, &group, cmd,
901 void vxlan_vnigroup_uninit(struct vxlan_dev *vxlan)
906 vg = rtnl_dereference(vxlan->vnigrp);
915 vxlan_vnifilter_notify(vxlan, v, RTM_DELTUNNEL);
922 int vxlan_vnigroup_init(struct vxlan_dev *vxlan)
936 rcu_assign_pointer(vxlan->vnigrp, vg);
946 struct vxlan_dev *vxlan;
964 NL_SET_ERR_MSG_MOD(extack, "The device is not a vxlan device");
968 vxlan = netdev_priv(dev);
970 if (!(vxlan->cfg.flags & VXLAN_F_VNIFILTER))
976 err = vxlan_process_vni_filter(vxlan, attr,