diff options
author | Patrick McHardy <kaber@trash.net> | 2007-07-11 22:42:31 -0400 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2007-07-11 22:45:36 -0400 |
commit | 0e06877c6fdbc67b1132be895f995acd1ff30135 (patch) | |
tree | ddaba8cddc8a95d23ee18f812c6aba67dd9b1c6f /drivers/net/ifb.c | |
parent | 2d85cba2b272a5201a60966a65a4f8c0bcc0bb71 (diff) |
[RTNETLINK]: rtnl_link: allow specifying initial device address
Drivers need to validate the initial addresses in their netlink attribute
validation function or manually reject them if they can't support this.
Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ifb.c')
-rw-r--r-- | drivers/net/ifb.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/net/ifb.c b/drivers/net/ifb.c index c8e7c8f6ba3e..f5c3598e59af 100644 --- a/drivers/net/ifb.c +++ b/drivers/net/ifb.c | |||
@@ -221,10 +221,22 @@ static int ifb_open(struct net_device *dev) | |||
221 | return 0; | 221 | return 0; |
222 | } | 222 | } |
223 | 223 | ||
224 | static int ifb_validate(struct nlattr *tb[], struct nlattr *data[]) | ||
225 | { | ||
226 | if (tb[IFLA_ADDRESS]) { | ||
227 | if (nla_len(tb[IFLA_ADDRESS]) != ETH_ALEN) | ||
228 | return -EINVAL; | ||
229 | if (!is_valid_ether_addr(nla_data(tb[IFLA_ADDRESS]))) | ||
230 | return -EADDRNOTAVAIL; | ||
231 | } | ||
232 | return 0; | ||
233 | } | ||
234 | |||
224 | static struct rtnl_link_ops ifb_link_ops __read_mostly = { | 235 | static struct rtnl_link_ops ifb_link_ops __read_mostly = { |
225 | .kind = "ifb", | 236 | .kind = "ifb", |
226 | .priv_size = sizeof(struct ifb_private), | 237 | .priv_size = sizeof(struct ifb_private), |
227 | .setup = ifb_setup, | 238 | .setup = ifb_setup, |
239 | .validate = ifb_validate, | ||
228 | }; | 240 | }; |
229 | 241 | ||
230 | /* Number of ifb devices to be set up by this module. */ | 242 | /* Number of ifb devices to be set up by this module. */ |