Lines Matching defs:vxlan

10 #include <net/vxlan.h>
17 int vxlan_igmp_join(struct vxlan_dev *vxlan, union vxlan_addr *rip,
20 union vxlan_addr *ip = (rip ? : &vxlan->default_dst.remote_ip);
21 int ifindex = (rifindex ? : vxlan->default_dst.remote_ifindex);
26 struct vxlan_sock *sock4 = rtnl_dereference(vxlan->vn4_sock);
38 struct vxlan_sock *sock6 = rtnl_dereference(vxlan->vn6_sock);
51 int vxlan_igmp_leave(struct vxlan_dev *vxlan, union vxlan_addr *rip,
54 union vxlan_addr *ip = (rip ? : &vxlan->default_dst.remote_ip);
55 int ifindex = (rifindex ? : vxlan->default_dst.remote_ifindex);
60 struct vxlan_sock *sock4 = rtnl_dereference(vxlan->vn4_sock);
72 struct vxlan_sock *sock6 = rtnl_dereference(vxlan->vn6_sock);
100 static bool vxlan_group_used_by_vnifilter(struct vxlan_dev *vxlan,
103 struct vxlan_vni_group *vg = rtnl_dereference(vxlan->vnigrp);
107 &vxlan->default_dst.remote_ip,
108 vxlan->default_dst.remote_ifindex))
117 vxlan->default_dst.remote_ifindex))
130 struct vxlan_dev *vxlan;
140 * no effect on other vxlan devices.
151 list_for_each_entry(vxlan, &vn->vxlan_list, next) {
152 if (!netif_running(vxlan->dev) || vxlan == dev)
156 rtnl_dereference(vxlan->vn4_sock) != sock4)
160 rtnl_dereference(vxlan->vn6_sock) != sock6)
163 if (vxlan->cfg.flags & VXLAN_F_VNIFILTER) {
164 if (!vxlan_group_used_by_vnifilter(vxlan, ip, ifindex))
168 &vxlan->default_dst.remote_ip,
169 vxlan->default_dst.remote_ifindex))
179 static int vxlan_multicast_join_vnigrp(struct vxlan_dev *vxlan)
181 struct vxlan_vni_group *vg = rtnl_dereference(vxlan->vnigrp);
190 &vxlan->default_dst.remote_ip))
192 ret = vxlan_igmp_join(vxlan, &v->remote_ip, 0);
205 &vxlan->default_dst.remote_ip))
207 vxlan_igmp_leave(vxlan, &v->remote_ip, 0);
216 static int vxlan_multicast_leave_vnigrp(struct vxlan_dev *vxlan)
218 struct vxlan_net *vn = net_generic(vxlan->net, vxlan_net_id);
219 struct vxlan_vni_group *vg = rtnl_dereference(vxlan->vnigrp);
225 !vxlan_group_used(vn, vxlan, v->vni, &v->remote_ip,
227 ret = vxlan_igmp_leave(vxlan, &v->remote_ip, 0);
236 int vxlan_multicast_join(struct vxlan_dev *vxlan)
240 if (vxlan_addr_multicast(&vxlan->default_dst.remote_ip)) {
241 ret = vxlan_igmp_join(vxlan, &vxlan->default_dst.remote_ip,
242 vxlan->default_dst.remote_ifindex);
249 if (vxlan->cfg.flags & VXLAN_F_VNIFILTER)
250 return vxlan_multicast_join_vnigrp(vxlan);
255 int vxlan_multicast_leave(struct vxlan_dev *vxlan)
257 struct vxlan_net *vn = net_generic(vxlan->net, vxlan_net_id);
260 if (vxlan_addr_multicast(&vxlan->default_dst.remote_ip) &&
261 !vxlan_group_used(vn, vxlan, 0, NULL, 0)) {
262 ret = vxlan_igmp_leave(vxlan, &vxlan->default_dst.remote_ip,
263 vxlan->default_dst.remote_ifindex);
268 if (vxlan->cfg.flags & VXLAN_F_VNIFILTER)
269 return vxlan_multicast_leave_vnigrp(vxlan);