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