Lines Matching defs:vxlan

14 #include <net/vxlan.h>
64 struct vxlan_dev *vxlan;
97 static void vxlan_br_mdb_entry_fill(const struct vxlan_dev *vxlan,
105 e->ifindex = vxlan->dev->ifindex;
162 static int vxlan_mdb_entry_info_fill(const struct vxlan_dev *vxlan,
175 vxlan_br_mdb_entry_fill(vxlan, mdb_entry, remote, &e);
191 if (rd->remote_port && rd->remote_port != vxlan->cfg.dst_port &&
196 if (rd->remote_vni != vxlan->default_dst.remote_vni &&
204 if ((vxlan->cfg.flags & VXLAN_F_COLLECT_METADATA) &&
218 static int vxlan_mdb_entry_fill(const struct vxlan_dev *vxlan,
236 err = vxlan_mdb_entry_info_fill(vxlan, skb, mdb_entry, remote);
248 static int vxlan_mdb_fill(const struct vxlan_dev *vxlan, struct sk_buff *skb,
260 hlist_for_each_entry(mdb_entry, &vxlan->mdb_list, mdb_node) {
264 err = vxlan_mdb_entry_fill(vxlan, skb, ctx, mdb_entry);
280 struct vxlan_dev *vxlan = netdev_priv(dev);
300 err = vxlan_mdb_fill(vxlan, skb, ctx);
304 cb->seq = vxlan->mdb_seq;
582 if (!__dev_get_by_index(cfg->vxlan->net, cfg->remote_ifindex)) {
606 struct vxlan_dev *vxlan = netdev_priv(dev);
609 cfg->vxlan = vxlan;
610 cfg->group.vni = vxlan->default_dst.remote_vni;
615 cfg->remote_vni = vxlan->default_dst.remote_vni;
616 cfg->remote_port = vxlan->cfg.dst_port;
663 vxlan_mdb_entry_lookup(struct vxlan_dev *vxlan,
666 return rhashtable_lookup_fast(&vxlan->mdb_tbl, group,
743 static void vxlan_mdb_remote_fini(struct vxlan_dev *vxlan,
795 sg_cfg.vxlan = cfg->vxlan;
814 vxlan_mdb_remote_src_fwd_del(struct vxlan_dev *vxlan,
823 sg_cfg.vxlan = vxlan;
868 static void vxlan_mdb_remote_src_del(struct vxlan_dev *vxlan,
873 vxlan_mdb_remote_src_fwd_del(vxlan, group, remote, &ent->addr);
896 vxlan_mdb_remote_src_del(cfg->vxlan, &cfg->group, remote, ent);
900 static void vxlan_mdb_remote_srcs_del(struct vxlan_dev *vxlan,
908 vxlan_mdb_remote_src_del(vxlan, group, remote, ent);
937 vxlan_mdb_nlmsg_remote_size(const struct vxlan_dev *vxlan,
962 if (rd->remote_port && rd->remote_port != vxlan->cfg.dst_port)
965 if (rd->remote_vni != vxlan->default_dst.remote_vni)
971 if ((vxlan->cfg.flags & VXLAN_F_COLLECT_METADATA) && group->vni)
977 static size_t vxlan_mdb_nlmsg_size(const struct vxlan_dev *vxlan,
987 vxlan_mdb_nlmsg_remote_size(vxlan, mdb_entry, remote);
990 static int vxlan_mdb_nlmsg_fill(const struct vxlan_dev *vxlan,
1007 bpm->ifindex = vxlan->dev->ifindex;
1016 if (vxlan_mdb_entry_info_fill(vxlan, skb, mdb_entry, remote))
1030 static void vxlan_mdb_remote_notify(const struct vxlan_dev *vxlan,
1035 struct net *net = dev_net(vxlan->dev);
1039 skb = nlmsg_new(vxlan_mdb_nlmsg_size(vxlan, mdb_entry, remote),
1044 err = vxlan_mdb_nlmsg_fill(vxlan, skb, mdb_entry, remote, type);
1062 struct vxlan_dev *vxlan = cfg->vxlan;
1076 vxlan_mdb_remote_src_del(vxlan, &mdb_entry->key, remote,
1094 struct vxlan_dev *vxlan = cfg->vxlan;
1109 vxlan_mdb_remote_notify(vxlan, mdb_entry, remote, RTM_NEWMDB);
1157 vxlan_mdb_remote_notify(cfg->vxlan, mdb_entry, remote, RTM_NEWMDB);
1162 vxlan_mdb_remote_fini(cfg->vxlan, remote);
1168 static void vxlan_mdb_remote_del(struct vxlan_dev *vxlan,
1172 vxlan_mdb_remote_notify(vxlan, mdb_entry, remote, RTM_DELMDB);
1174 vxlan_mdb_remote_srcs_del(vxlan, &mdb_entry->key, remote);
1175 vxlan_mdb_remote_fini(vxlan, remote);
1180 vxlan_mdb_entry_get(struct vxlan_dev *vxlan,
1186 mdb_entry = vxlan_mdb_entry_lookup(vxlan, group);
1196 hlist_add_head(&mdb_entry->mdb_node, &vxlan->mdb_list);
1198 err = rhashtable_lookup_insert_fast(&vxlan->mdb_tbl,
1204 if (hlist_is_singular_node(&mdb_entry->mdb_node, &vxlan->mdb_list))
1205 vxlan->cfg.flags |= VXLAN_F_MDB;
1215 static void vxlan_mdb_entry_put(struct vxlan_dev *vxlan,
1221 if (hlist_is_singular_node(&mdb_entry->mdb_node, &vxlan->mdb_list))
1222 vxlan->cfg.flags &= ~VXLAN_F_MDB;
1224 rhashtable_remove_fast(&vxlan->mdb_tbl, &mdb_entry->rhnode,
1233 struct vxlan_dev *vxlan = cfg->vxlan;
1237 mdb_entry = vxlan_mdb_entry_get(vxlan, &cfg->group);
1245 vxlan->mdb_seq++;
1250 vxlan_mdb_entry_put(vxlan, mdb_entry);
1257 struct vxlan_dev *vxlan = cfg->vxlan;
1261 mdb_entry = vxlan_mdb_entry_lookup(vxlan, &cfg->group);
1273 vxlan_mdb_remote_del(vxlan, mdb_entry, remote);
1274 vxlan_mdb_entry_put(vxlan, mdb_entry);
1276 vxlan->mdb_seq++;
1329 static int vxlan_mdb_flush_desc_init(struct vxlan_dev *vxlan,
1338 if (entry->ifindex && entry->ifindex != vxlan->dev->ifindex) {
1387 static void vxlan_mdb_remotes_flush(struct vxlan_dev *vxlan,
1415 vxlan_mdb_remote_del(vxlan, mdb_entry, remote);
1419 static void vxlan_mdb_flush(struct vxlan_dev *vxlan,
1428 hlist_for_each_entry_safe(mdb_entry, tmp, &vxlan->mdb_list, mdb_node) {
1432 vxlan_mdb_remotes_flush(vxlan, mdb_entry, desc);
1434 vxlan_mdb_entry_put(vxlan, mdb_entry);
1441 struct vxlan_dev *vxlan = netdev_priv(dev);
1447 err = vxlan_mdb_flush_desc_init(vxlan, &desc, tb, extack);
1451 vxlan_mdb_flush(vxlan, &desc);
1469 struct vxlan_dev *vxlan = netdev_priv(dev);
1473 group->vni = vxlan->default_dst.remote_vni;
1501 vxlan_mdb_get_reply_alloc(const struct vxlan_dev *vxlan,
1514 nlmsg_size += vxlan_mdb_nlmsg_remote_size(vxlan, mdb_entry,
1521 vxlan_mdb_get_reply_fill(const struct vxlan_dev *vxlan,
1539 bpm->ifindex = vxlan->dev->ifindex;
1552 err = vxlan_mdb_entry_info_fill(vxlan, skb, mdb_entry, remote);
1571 struct vxlan_dev *vxlan = netdev_priv(dev);
1583 mdb_entry = vxlan_mdb_entry_lookup(vxlan, &group);
1589 skb = vxlan_mdb_get_reply_alloc(vxlan, mdb_entry);
1593 err = vxlan_mdb_get_reply_fill(vxlan, skb, mdb_entry, portid, seq);
1606 struct vxlan_mdb_entry *vxlan_mdb_entry_skb_get(struct vxlan_dev *vxlan,
1620 if (!(vxlan->cfg.flags & VXLAN_F_COLLECT_METADATA))
1621 src_vni = vxlan->default_dst.remote_vni;
1649 mdb_entry = vxlan_mdb_entry_lookup(vxlan, &group);
1654 mdb_entry = vxlan_mdb_entry_lookup(vxlan, &group);
1682 return vxlan_mdb_entry_lookup(vxlan, &group);
1685 netdev_tx_t vxlan_mdb_xmit(struct vxlan_dev *vxlan,
1707 vxlan_xmit_one(skb1, vxlan->dev, src_vni,
1712 vxlan_xmit_one(skb, vxlan->dev, src_vni,
1725 int vxlan_mdb_init(struct vxlan_dev *vxlan)
1729 err = rhashtable_init(&vxlan->mdb_tbl, &vxlan_mdb_rht_params);
1733 INIT_HLIST_HEAD(&vxlan->mdb_list);
1738 void vxlan_mdb_fini(struct vxlan_dev *vxlan)
1742 vxlan_mdb_flush(vxlan, &desc);
1743 WARN_ON_ONCE(vxlan->cfg.flags & VXLAN_F_MDB);
1744 rhashtable_free_and_destroy(&vxlan->mdb_tbl, vxlan_mdb_check_empty,