Lines Matching refs:vxlan

14 #include <net/vxlan.h>
64 struct vxlan_dev *vxlan;
89 static void vxlan_br_mdb_entry_fill(const struct vxlan_dev *vxlan,
97 e->ifindex = vxlan->dev->ifindex;
154 static int vxlan_mdb_entry_info_fill(const struct vxlan_dev *vxlan,
167 vxlan_br_mdb_entry_fill(vxlan, mdb_entry, remote, &e);
183 if (rd->remote_port && rd->remote_port != vxlan->cfg.dst_port &&
188 if (rd->remote_vni != vxlan->default_dst.remote_vni &&
196 if ((vxlan->cfg.flags & VXLAN_F_COLLECT_METADATA) &&
210 static int vxlan_mdb_entry_fill(const struct vxlan_dev *vxlan,
228 err = vxlan_mdb_entry_info_fill(vxlan, skb, mdb_entry, remote);
240 static int vxlan_mdb_fill(const struct vxlan_dev *vxlan, struct sk_buff *skb,
252 hlist_for_each_entry(mdb_entry, &vxlan->mdb_list, mdb_node) {
256 err = vxlan_mdb_entry_fill(vxlan, skb, ctx, mdb_entry);
272 struct vxlan_dev *vxlan = netdev_priv(dev);
292 err = vxlan_mdb_fill(vxlan, skb, ctx);
296 cb->seq = vxlan->mdb_seq;
576 if (!__dev_get_by_index(cfg->vxlan->net, cfg->remote_ifindex)) {
600 struct vxlan_dev *vxlan = netdev_priv(dev);
603 cfg->vxlan = vxlan;
604 cfg->group.vni = vxlan->default_dst.remote_vni;
609 cfg->remote_vni = vxlan->default_dst.remote_vni;
610 cfg->remote_port = vxlan->cfg.dst_port;
657 vxlan_mdb_entry_lookup(struct vxlan_dev *vxlan,
660 return rhashtable_lookup_fast(&vxlan->mdb_tbl, group,
737 static void vxlan_mdb_remote_fini(struct vxlan_dev *vxlan,
789 sg_cfg.vxlan = cfg->vxlan;
808 vxlan_mdb_remote_src_fwd_del(struct vxlan_dev *vxlan,
817 sg_cfg.vxlan = vxlan;
862 static void vxlan_mdb_remote_src_del(struct vxlan_dev *vxlan,
867 vxlan_mdb_remote_src_fwd_del(vxlan, group, remote, &ent->addr);
890 vxlan_mdb_remote_src_del(cfg->vxlan, &cfg->group, remote, ent);
894 static void vxlan_mdb_remote_srcs_del(struct vxlan_dev *vxlan,
902 vxlan_mdb_remote_src_del(vxlan, group, remote, ent);
930 static size_t vxlan_mdb_nlmsg_size(const struct vxlan_dev *vxlan,
959 if (rd->remote_port && rd->remote_port != vxlan->cfg.dst_port)
962 if (rd->remote_vni != vxlan->default_dst.remote_vni)
968 if ((vxlan->cfg.flags & VXLAN_F_COLLECT_METADATA) && group->vni)
974 static int vxlan_mdb_nlmsg_fill(const struct vxlan_dev *vxlan,
991 bpm->ifindex = vxlan->dev->ifindex;
1000 if (vxlan_mdb_entry_info_fill(vxlan, skb, mdb_entry, remote))
1014 static void vxlan_mdb_remote_notify(const struct vxlan_dev *vxlan,
1019 struct net *net = dev_net(vxlan->dev);
1023 skb = nlmsg_new(vxlan_mdb_nlmsg_size(vxlan, mdb_entry, remote),
1028 err = vxlan_mdb_nlmsg_fill(vxlan, skb, mdb_entry, remote, type);
1046 struct vxlan_dev *vxlan = cfg->vxlan;
1060 vxlan_mdb_remote_src_del(vxlan, &mdb_entry->key, remote,
1078 struct vxlan_dev *vxlan = cfg->vxlan;
1093 vxlan_mdb_remote_notify(vxlan, mdb_entry, remote, RTM_NEWMDB);
1141 vxlan_mdb_remote_notify(cfg->vxlan, mdb_entry, remote, RTM_NEWMDB);
1146 vxlan_mdb_remote_fini(cfg->vxlan, remote);
1152 static void vxlan_mdb_remote_del(struct vxlan_dev *vxlan,
1156 vxlan_mdb_remote_notify(vxlan, mdb_entry, remote, RTM_DELMDB);
1158 vxlan_mdb_remote_srcs_del(vxlan, &mdb_entry->key, remote);
1159 vxlan_mdb_remote_fini(vxlan, remote);
1164 vxlan_mdb_entry_get(struct vxlan_dev *vxlan,
1170 mdb_entry = vxlan_mdb_entry_lookup(vxlan, group);
1180 hlist_add_head(&mdb_entry->mdb_node, &vxlan->mdb_list);
1182 err = rhashtable_lookup_insert_fast(&vxlan->mdb_tbl,
1188 if (hlist_is_singular_node(&mdb_entry->mdb_node, &vxlan->mdb_list))
1189 vxlan->cfg.flags |= VXLAN_F_MDB;
1199 static void vxlan_mdb_entry_put(struct vxlan_dev *vxlan,
1205 if (hlist_is_singular_node(&mdb_entry->mdb_node, &vxlan->mdb_list))
1206 vxlan->cfg.flags &= ~VXLAN_F_MDB;
1208 rhashtable_remove_fast(&vxlan->mdb_tbl, &mdb_entry->rhnode,
1217 struct vxlan_dev *vxlan = cfg->vxlan;
1221 mdb_entry = vxlan_mdb_entry_get(vxlan, &cfg->group);
1229 vxlan->mdb_seq++;
1234 vxlan_mdb_entry_put(vxlan, mdb_entry);
1241 struct vxlan_dev *vxlan = cfg->vxlan;
1245 mdb_entry = vxlan_mdb_entry_lookup(vxlan, &cfg->group);
1257 vxlan_mdb_remote_del(vxlan, mdb_entry, remote);
1258 vxlan_mdb_entry_put(vxlan, mdb_entry);
1260 vxlan->mdb_seq++;
1301 struct vxlan_mdb_entry *vxlan_mdb_entry_skb_get(struct vxlan_dev *vxlan,
1315 if (!(vxlan->cfg.flags & VXLAN_F_COLLECT_METADATA))
1316 src_vni = vxlan->default_dst.remote_vni;
1344 mdb_entry = vxlan_mdb_entry_lookup(vxlan, &group);
1349 mdb_entry = vxlan_mdb_entry_lookup(vxlan, &group);
1377 return vxlan_mdb_entry_lookup(vxlan, &group);
1380 netdev_tx_t vxlan_mdb_xmit(struct vxlan_dev *vxlan,
1402 vxlan_xmit_one(skb1, vxlan->dev, src_vni,
1407 vxlan_xmit_one(skb, vxlan->dev, src_vni,
1420 static void vxlan_mdb_remotes_flush(struct vxlan_dev *vxlan,
1426 vxlan_mdb_remote_del(vxlan, mdb_entry, remote);
1429 static void vxlan_mdb_entries_flush(struct vxlan_dev *vxlan)
1437 hlist_for_each_entry_safe(mdb_entry, tmp, &vxlan->mdb_list, mdb_node) {
1438 vxlan_mdb_remotes_flush(vxlan, mdb_entry);
1439 vxlan_mdb_entry_put(vxlan, mdb_entry);
1443 int vxlan_mdb_init(struct vxlan_dev *vxlan)
1447 err = rhashtable_init(&vxlan->mdb_tbl, &vxlan_mdb_rht_params);
1451 INIT_HLIST_HEAD(&vxlan->mdb_list);
1456 void vxlan_mdb_fini(struct vxlan_dev *vxlan)
1458 vxlan_mdb_entries_flush(vxlan);
1459 WARN_ON_ONCE(vxlan->cfg.flags & VXLAN_F_MDB);
1460 rhashtable_free_and_destroy(&vxlan->mdb_tbl, vxlan_mdb_check_empty,