Lines Matching full:remote
91 const struct vxlan_mdb_remote *remote, in vxlan_br_mdb_entry_fill() argument
100 if (remote->flags & VXLAN_MDB_REMOTE_F_BLOCKED) in vxlan_br_mdb_entry_fill()
118 const struct vxlan_mdb_remote *remote) in vxlan_mdb_entry_info_fill_srcs() argument
123 if (hlist_empty(&remote->src_list)) in vxlan_mdb_entry_info_fill_srcs()
130 hlist_for_each_entry(ent, &remote->src_list, node) { in vxlan_mdb_entry_info_fill_srcs()
157 const struct vxlan_mdb_remote *remote) in vxlan_mdb_entry_info_fill() argument
159 struct vxlan_rdst *rd = rtnl_dereference(remote->rd); in vxlan_mdb_entry_info_fill()
167 vxlan_br_mdb_entry_fill(vxlan, mdb_entry, remote, &e); in vxlan_mdb_entry_info_fill()
177 if (nla_put_u8(skb, MDBA_MDB_EATTR_RTPROT, remote->rt_protocol) || in vxlan_mdb_entry_info_fill()
178 nla_put_u8(skb, MDBA_MDB_EATTR_GROUP_MODE, remote->filter_mode) || in vxlan_mdb_entry_info_fill()
179 vxlan_mdb_entry_info_fill_srcs(skb, remote) || in vxlan_mdb_entry_info_fill()
216 struct vxlan_mdb_remote *remote; in vxlan_mdb_entry_fill() local
224 list_for_each_entry(remote, &mdb_entry->remotes, list) { in vxlan_mdb_entry_fill()
228 err = vxlan_mdb_entry_info_fill(vxlan, skb, mdb_entry, remote); in vxlan_mdb_entry_fill()
497 NL_SET_ERR_MSG_MOD(extack, "Missing remote destination IP address"); in vxlan_mdb_config_attrs_init()
561 NL_SET_ERR_MSG_MOD(extack, "Invalid remote destination address"); in vxlan_mdb_config_attrs_init()
668 struct vxlan_mdb_remote *remote; in vxlan_mdb_remote_lookup() local
670 list_for_each_entry(remote, &mdb_entry->remotes, list) { in vxlan_mdb_remote_lookup()
671 struct vxlan_rdst *rd = rtnl_dereference(remote->rd); in vxlan_mdb_remote_lookup()
674 return remote; in vxlan_mdb_remote_lookup()
689 struct vxlan_mdb_remote *remote) in vxlan_mdb_remote_rdst_init() argument
706 rcu_assign_pointer(remote->rd, rd); in vxlan_mdb_remote_rdst_init()
721 struct vxlan_mdb_remote *remote) in vxlan_mdb_remote_init() argument
725 err = vxlan_mdb_remote_rdst_init(cfg, remote); in vxlan_mdb_remote_init()
729 remote->flags = cfg->flags; in vxlan_mdb_remote_init()
730 remote->filter_mode = cfg->filter_mode; in vxlan_mdb_remote_init()
731 remote->rt_protocol = cfg->rt_protocol; in vxlan_mdb_remote_init()
732 INIT_HLIST_HEAD(&remote->src_list); in vxlan_mdb_remote_init()
738 struct vxlan_mdb_remote *remote) in vxlan_mdb_remote_fini() argument
740 WARN_ON_ONCE(!hlist_empty(&remote->src_list)); in vxlan_mdb_remote_fini()
741 vxlan_mdb_remote_rdst_fini(rtnl_dereference(remote->rd)); in vxlan_mdb_remote_fini()
745 vxlan_mdb_remote_src_entry_lookup(const struct vxlan_mdb_remote *remote, in vxlan_mdb_remote_src_entry_lookup() argument
750 hlist_for_each_entry(ent, &remote->src_list, node) { in vxlan_mdb_remote_src_entry_lookup()
759 vxlan_mdb_remote_src_entry_add(struct vxlan_mdb_remote *remote, in vxlan_mdb_remote_src_entry_add() argument
769 hlist_add_head(&ent->node, &remote->src_list); in vxlan_mdb_remote_src_entry_add()
810 const struct vxlan_mdb_remote *remote, in vxlan_mdb_remote_src_fwd_del() argument
813 struct vxlan_rdst *rd = rtnl_dereference(remote->rd); in vxlan_mdb_remote_src_fwd_del()
829 struct vxlan_mdb_remote *remote, in vxlan_mdb_remote_src_add() argument
836 ent = vxlan_mdb_remote_src_entry_lookup(remote, &src->addr); in vxlan_mdb_remote_src_add()
838 ent = vxlan_mdb_remote_src_entry_add(remote, &src->addr); in vxlan_mdb_remote_src_add()
864 const struct vxlan_mdb_remote *remote, 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()
872 struct vxlan_mdb_remote *remote, in vxlan_mdb_remote_srcs_add() argument
881 err = vxlan_mdb_remote_src_add(cfg, remote, src, extack); in vxlan_mdb_remote_srcs_add()
889 hlist_for_each_entry_safe(ent, tmp, &remote->src_list, node) in vxlan_mdb_remote_srcs_add()
890 vxlan_mdb_remote_src_del(cfg->vxlan, &cfg->group, remote, ent); in vxlan_mdb_remote_srcs_add()
896 struct vxlan_mdb_remote *remote) in vxlan_mdb_remote_srcs_del() argument
901 hlist_for_each_entry_safe(ent, tmp, &remote->src_list, node) in vxlan_mdb_remote_srcs_del()
902 vxlan_mdb_remote_src_del(vxlan, group, remote, ent); in vxlan_mdb_remote_srcs_del()
907 const struct vxlan_mdb_remote *remote) in vxlan_mdb_nlmsg_src_list_size() argument
912 if (hlist_empty(&remote->src_list)) in vxlan_mdb_nlmsg_src_list_size()
918 hlist_for_each_entry(ent, &remote->src_list, node) { in vxlan_mdb_nlmsg_src_list_size()
932 const struct vxlan_mdb_remote *remote) in vxlan_mdb_nlmsg_size() argument
935 struct vxlan_rdst *rd = rtnl_dereference(remote->rd); in vxlan_mdb_nlmsg_size()
953 nlmsg_size += vxlan_mdb_nlmsg_src_list_size(group, remote); in vxlan_mdb_nlmsg_size()
977 const struct vxlan_mdb_remote *remote, in vxlan_mdb_nlmsg_fill() argument
1000 if (vxlan_mdb_entry_info_fill(vxlan, skb, mdb_entry, remote)) in vxlan_mdb_nlmsg_fill()
1016 const struct vxlan_mdb_remote *remote, in vxlan_mdb_remote_notify() argument
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()
1043 struct vxlan_mdb_remote *remote, in vxlan_mdb_remote_srcs_replace() argument
1051 hlist_for_each_entry(ent, &remote->src_list, node) in vxlan_mdb_remote_srcs_replace()
1054 err = vxlan_mdb_remote_srcs_add(cfg, remote, extack); in vxlan_mdb_remote_srcs_replace()
1058 hlist_for_each_entry_safe(ent, tmp, &remote->src_list, node) { in vxlan_mdb_remote_srcs_replace()
1060 vxlan_mdb_remote_src_del(vxlan, &mdb_entry->key, remote, in vxlan_mdb_remote_srcs_replace()
1067 hlist_for_each_entry(ent, &remote->src_list, node) in vxlan_mdb_remote_srcs_replace()
1074 struct vxlan_mdb_remote *remote, in vxlan_mdb_remote_replace() argument
1077 struct vxlan_rdst *new_rd, *old_rd = rtnl_dereference(remote->rd); in vxlan_mdb_remote_replace()
1081 err = vxlan_mdb_remote_rdst_init(cfg, remote); in vxlan_mdb_remote_replace()
1084 new_rd = rtnl_dereference(remote->rd); in vxlan_mdb_remote_replace()
1086 err = vxlan_mdb_remote_srcs_replace(cfg, mdb_entry, remote, extack); in vxlan_mdb_remote_replace()
1090 WRITE_ONCE(remote->flags, cfg->flags); in vxlan_mdb_remote_replace()
1091 WRITE_ONCE(remote->filter_mode, cfg->filter_mode); in vxlan_mdb_remote_replace()
1092 remote->rt_protocol = cfg->rt_protocol; in vxlan_mdb_remote_replace()
1093 vxlan_mdb_remote_notify(vxlan, mdb_entry, remote, RTM_NEWMDB); in vxlan_mdb_remote_replace()
1100 rcu_assign_pointer(remote->rd, old_rd); in vxlan_mdb_remote_replace()
1109 struct vxlan_mdb_remote *remote; in vxlan_mdb_remote_add() local
1112 remote = vxlan_mdb_remote_lookup(mdb_entry, &cfg->remote_ip); in vxlan_mdb_remote_add()
1113 if (remote) { in vxlan_mdb_remote_add()
1115 NL_SET_ERR_MSG_MOD(extack, "Replace not specified and MDB remote entry already exists"); in vxlan_mdb_remote_add()
1118 return vxlan_mdb_remote_replace(cfg, mdb_entry, remote, extack); in vxlan_mdb_remote_add()
1126 remote = kzalloc(sizeof(*remote), GFP_KERNEL); in vxlan_mdb_remote_add()
1127 if (!remote) in vxlan_mdb_remote_add()
1130 err = vxlan_mdb_remote_init(cfg, remote); in vxlan_mdb_remote_add()
1132 NL_SET_ERR_MSG_MOD(extack, "Failed to initialize remote MDB entry"); in vxlan_mdb_remote_add()
1136 err = vxlan_mdb_remote_srcs_add(cfg, remote, extack); in vxlan_mdb_remote_add()
1140 list_add_rcu(&remote->list, &mdb_entry->remotes); in vxlan_mdb_remote_add()
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()
1148 kfree(remote); in vxlan_mdb_remote_add()
1154 struct vxlan_mdb_remote *remote) in vxlan_mdb_remote_del() argument
1156 vxlan_mdb_remote_notify(vxlan, mdb_entry, remote, RTM_DELMDB); in vxlan_mdb_remote_del()
1157 list_del_rcu(&remote->list); 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()
1160 kfree_rcu(remote, rcu); in vxlan_mdb_remote_del()
1243 struct vxlan_mdb_remote *remote; in __vxlan_mdb_del() local
1251 remote = vxlan_mdb_remote_lookup(mdb_entry, &cfg->remote_ip); in __vxlan_mdb_del()
1252 if (!remote) { in __vxlan_mdb_del()
1253 NL_SET_ERR_MSG_MOD(extack, "Did not find MDB remote entry"); in __vxlan_mdb_del()
1257 vxlan_mdb_remote_del(vxlan, mdb_entry, remote); in __vxlan_mdb_del()
1384 struct vxlan_mdb_remote *remote, *fremote = NULL; in vxlan_mdb_xmit() local
1387 list_for_each_entry_rcu(remote, &mdb_entry->remotes, list) { in vxlan_mdb_xmit()
1391 READ_ONCE(remote->filter_mode) == MCAST_INCLUDE) || in vxlan_mdb_xmit()
1392 (READ_ONCE(remote->flags) & VXLAN_MDB_REMOTE_F_BLOCKED)) in vxlan_mdb_xmit()
1396 fremote = remote; in vxlan_mdb_xmit()
1403 rcu_dereference(remote->rd), false); in vxlan_mdb_xmit()
1423 struct vxlan_mdb_remote *remote, *tmp; in vxlan_mdb_remotes_flush() local
1425 list_for_each_entry_safe(remote, tmp, &mdb_entry->remotes, list) in vxlan_mdb_remotes_flush()
1426 vxlan_mdb_remote_del(vxlan, mdb_entry, remote); in vxlan_mdb_remotes_flush()