Re: [PATCH net-next v4 2/2] vxlan: allow specifying multiple default destinations
From: Cong Wang <hidden>
Date: 2013-06-24 06:49:05
On Sun, 23 Jun 2013 at 16:22 GMT, Mike Rapoport [off-list ref] wrote:
quoted hunk ↗ jump to hunk
static int vxlan_validate(struct nlattr *tb[], struct nlattr *data[]) { + int err; + if (tb[IFLA_ADDRESS]) { if (nla_len(tb[IFLA_ADDRESS]) != ETH_ALEN) { pr_debug("invalid link address (not ethernet)\n");@@ -1460,6 +1599,10 @@ static int vxlan_validate(struct nlattr *tb[], struct nlattr *data[]) } } + err = vxlan_validate_remotes(data[IFLA_VXLAN_REMOTES]); + if (err) + return err; + return 0; }
Seems you can simply return vxlan_validate_remotes(...); here.
+static int vxlan_fill_remotes_info(struct sk_buff *skb,
+ const struct vxlan_dev *vxlan)
+{
+ struct vxlan_rdst *rd;
+ struct nlattr *nest, *rdst_nest;
+ __be32 ip;
+ int i = 1;
+
+ if (!vxlan->remotes_cnt)
+ return 0;
+
+ nest = nla_nest_start(skb, IFLA_VXLAN_REMOTES);
+ if (nest == NULL)
+ goto nla_put_failure;
+
+ list_for_each_entry_rcu(rd, &vxlan->remotes, list) {Need RCU read lock here?
+ ip = rd->remote_ip; + + if (ip == vxlan->default_dst.remote_ip) + continue; + + rdst_nest = nla_nest_start(skb, i); + if (rdst_nest == NULL) + goto nla_put_failure; + + if (nla_put_be32(skb, IFLA_VXLAN_REMOTE_ADDR, ip)) + goto nla_put_failure; + + nla_nest_end(skb, rdst_nest); + i++; + } + + nla_nest_end(skb, nest); + + return 0; + +nla_put_failure: + return -EMSGSIZE; +} +
Thanks!