diff mbox

[net] ethtool: set addr_assign_type to NET_ADDR_SET when addr is passed on create

Message ID 1357511921-5537-1-git-send-email-jiri@resnulli.us
State Changes Requested, archived
Headers show

Commit Message

Jiri Pirko Jan. 6, 2013, 10:38 p.m. UTC
In case user passed address via netlink during create, NET_ADDR_PERM was set.
That is not correct so fix this by setting NET_ADDR_SET.

Signed-off-by: Jiri Pirko <jiri@resnulli.us>
---
 net/core/rtnetlink.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

Comments

Ben Hutchings Jan. 7, 2013, 4:36 p.m. UTC | #1
On Sun, 2013-01-06 at 23:38 +0100, Jiri Pirko wrote:
> In case user passed address via netlink during create, NET_ADDR_PERM was set.
> That is not correct so fix this by setting NET_ADDR_SET.
> 
> Signed-off-by: Jiri Pirko <jiri@resnulli.us>

Not sure what this has to do with ethtool...

> ---
>  net/core/rtnetlink.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
> index 9969afb..9a419b0 100644
> --- a/net/core/rtnetlink.c
> +++ b/net/core/rtnetlink.c
> @@ -1667,9 +1667,11 @@ struct net_device *rtnl_create_link(struct net *net,
>  
>  	if (tb[IFLA_MTU])
>  		dev->mtu = nla_get_u32(tb[IFLA_MTU]);
> -	if (tb[IFLA_ADDRESS])
> +	if (tb[IFLA_ADDRESS]) {
>  		memcpy(dev->dev_addr, nla_data(tb[IFLA_ADDRESS]),
>  				nla_len(tb[IFLA_ADDRESS]));
> +		dev->addr_assign_type = NET_ADDR_SET;
> +	}
>  	if (tb[IFLA_BROADCAST])
>  		memcpy(dev->broadcast, nla_data(tb[IFLA_BROADCAST]),
>  				nla_len(tb[IFLA_BROADCAST]));

But if the address is not specified for this new device,
addr_assign_type remains NET_ADD_PERM, right?  That sort of makes sense
in that the 'permanent address' of a software device is all-zeroes.  I
would prefer to have a way for devices to deny having a permanent
address, but it's a bit late to change that now.

Ben.
Jiri Pirko Jan. 7, 2013, 5:52 p.m. UTC | #2
Mon, Jan 07, 2013 at 05:36:05PM CET, bhutchings@solarflare.com wrote:
>On Sun, 2013-01-06 at 23:38 +0100, Jiri Pirko wrote:
>> In case user passed address via netlink during create, NET_ADDR_PERM was set.
>> That is not correct so fix this by setting NET_ADDR_SET.
>> 
>> Signed-off-by: Jiri Pirko <jiri@resnulli.us>
>
>Not sure what this has to do with ethtool...

Should have been "netlink" ...

>
>> ---
>>  net/core/rtnetlink.c | 4 +++-
>>  1 file changed, 3 insertions(+), 1 deletion(-)
>> 
>> diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
>> index 9969afb..9a419b0 100644
>> --- a/net/core/rtnetlink.c
>> +++ b/net/core/rtnetlink.c
>> @@ -1667,9 +1667,11 @@ struct net_device *rtnl_create_link(struct net *net,
>>  
>>  	if (tb[IFLA_MTU])
>>  		dev->mtu = nla_get_u32(tb[IFLA_MTU]);
>> -	if (tb[IFLA_ADDRESS])
>> +	if (tb[IFLA_ADDRESS]) {
>>  		memcpy(dev->dev_addr, nla_data(tb[IFLA_ADDRESS]),
>>  				nla_len(tb[IFLA_ADDRESS]));
>> +		dev->addr_assign_type = NET_ADDR_SET;
>> +	}
>>  	if (tb[IFLA_BROADCAST])
>>  		memcpy(dev->broadcast, nla_data(tb[IFLA_BROADCAST]),
>>  				nla_len(tb[IFLA_BROADCAST]));
>
>But if the address is not specified for this new device,
>addr_assign_type remains NET_ADD_PERM, right?  That sort of makes sense
>in that the 'permanent address' of a software device is all-zeroes.  I
>would prefer to have a way for devices to deny having a permanent
>address, but it's a bit late to change that now.

Well if soft-dev uses eth_hw_addr_random() (like team, bridge,
macvlan, etc) it is set to NET_ADDR_RANDOM

And that is exactly the right way to deny having perm address.


>
>Ben.
>
>-- 
>Ben Hutchings, Staff Engineer, Solarflare
>Not speaking for my employer; that's the marketing department's job.
>They asked us to note that Solarflare product names are trademarked.
>
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
index 9969afb..9a419b0 100644
--- a/net/core/rtnetlink.c
+++ b/net/core/rtnetlink.c
@@ -1667,9 +1667,11 @@  struct net_device *rtnl_create_link(struct net *net,
 
 	if (tb[IFLA_MTU])
 		dev->mtu = nla_get_u32(tb[IFLA_MTU]);
-	if (tb[IFLA_ADDRESS])
+	if (tb[IFLA_ADDRESS]) {
 		memcpy(dev->dev_addr, nla_data(tb[IFLA_ADDRESS]),
 				nla_len(tb[IFLA_ADDRESS]));
+		dev->addr_assign_type = NET_ADDR_SET;
+	}
 	if (tb[IFLA_BROADCAST])
 		memcpy(dev->broadcast, nla_data(tb[IFLA_BROADCAST]),
 				nla_len(tb[IFLA_BROADCAST]));