Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a5e7c10a authored by Mike Rapoport's avatar Mike Rapoport Committed by Stephen Hemminger
Browse files

vxlan: introduce vxlan_fdb_find_rdst



which will be reused by vxlan_fdb_delete

Signed-off-by: default avatarMike Rapoport <mike.rapoport@ravellosystems.com>
Signed-off-by: default avatarStephen Hemminger <stephen@networkplumber.org>
parent afbd8bae
Loading
Loading
Loading
Loading
+18 −5
Original line number Diff line number Diff line
@@ -388,21 +388,34 @@ static struct vxlan_fdb *vxlan_find_mac(struct vxlan_dev *vxlan,
	return f;
}

/* Add/update destinations for multicast */
static int vxlan_fdb_append(struct vxlan_fdb *f,
			    __be32 ip, __be16 port, __u32 vni, __u32 ifindex)
/* caller should hold vxlan->hash_lock */
static struct vxlan_rdst *vxlan_fdb_find_rdst(struct vxlan_fdb *f,
					      __be32 ip, __be16 port,
					      __u32 vni, __u32 ifindex)
{
	struct vxlan_rdst *rd;

	/* protected by vxlan->hash_lock */
	list_for_each_entry(rd, &f->remotes, list) {
		if (rd->remote_ip == ip &&
		    rd->remote_port == port &&
		    rd->remote_vni == vni &&
		    rd->remote_ifindex == ifindex)
			return 0;
			return rd;
	}

	return NULL;
}

/* Add/update destinations for multicast */
static int vxlan_fdb_append(struct vxlan_fdb *f,
			    __be32 ip, __be16 port, __u32 vni, __u32 ifindex)
{
	struct vxlan_rdst *rd;

	rd = vxlan_fdb_find_rdst(f, ip, port, vni, ifindex);
	if (rd)
		return 0;

	rd = kmalloc(sizeof(*rd), GFP_ATOMIC);
	if (rd == NULL)
		return -ENOBUFS;