Message ID | 4C483E8D.4080300@redhat.com |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
On Thu, 2010-07-22 at 14:50 +0200, Stefan Assmann wrote: > On 21.07.2010 15:54, Ben Hutchings wrote: > > On Wed, 2010-07-21 at 10:10 +0200, Stefan Assmann wrote: > >> I put Alex' idea into code for further discussion, keeping the names > >> mentioned here until we agree on the scope of this attribute. When we > >> have settled I'll post a patch with proper patch description. > > [...] > > > > Just a little nitpick: I think it would be clearer to use a more > > specific term like 'address source' or 'address assignment type' rather > > than 'address type'. > > Here's a proposal for the final patch. Looks good, but... [...] > /** > + * dev_hw_addr_random - Create random MAC and set device flag > + * @dev: pointer to net_device structure > + * @addr: Pointer to a six-byte array containing the Ethernet address > + * > + * Generate random MAC to be used by a device and set addr_assign_type > + * so the state can be read by sysfs and be used by udev. > + */ > +static inline void dev_hw_addr_random(struct net_device *dev, u8 *hwaddr) > +{ > + dev->addr_assign_type |= NET_ADDR_RANDOM; > + random_ether_addr(hwaddr); > +} [...] ...why '|=' and not '='? Ben.
On 22.07.2010 16:07, Ben Hutchings wrote: > On Thu, 2010-07-22 at 14:50 +0200, Stefan Assmann wrote: >> On 21.07.2010 15:54, Ben Hutchings wrote: >>> On Wed, 2010-07-21 at 10:10 +0200, Stefan Assmann wrote: >>>> I put Alex' idea into code for further discussion, keeping the names >>>> mentioned here until we agree on the scope of this attribute. When we >>>> have settled I'll post a patch with proper patch description. >>> [...] >>> >>> Just a little nitpick: I think it would be clearer to use a more >>> specific term like 'address source' or 'address assignment type' rather >>> than 'address type'. >> >> Here's a proposal for the final patch. > > Looks good, but... > > [...] >> /** >> + * dev_hw_addr_random - Create random MAC and set device flag >> + * @dev: pointer to net_device structure >> + * @addr: Pointer to a six-byte array containing the Ethernet address >> + * >> + * Generate random MAC to be used by a device and set addr_assign_type >> + * so the state can be read by sysfs and be used by udev. >> + */ >> +static inline void dev_hw_addr_random(struct net_device *dev, u8 *hwaddr) >> +{ >> + dev->addr_assign_type |= NET_ADDR_RANDOM; >> + random_ether_addr(hwaddr); >> +} > [...] > > ...why '|=' and not '='? The intention is to use addr_assign_type as a bit field. Okay it it might not make too much sense to 'steal' a random MAC address but in case we add more types later it might get useful. Stefan -- Stefan Assmann | Red Hat GmbH Software Engineer | Otto-Hahn-Strasse 20, 85609 Dornach | HR: Amtsgericht Muenchen HRB 153243 | GF: Brendan Lane, Charlie Peters, sassmann at redhat.com | Michael Cunningham, Charles Cachera -- 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
From: Stefan Assmann <sassmann@redhat.com> Date: Thu, 22 Jul 2010 16:47:40 +0200 > On 22.07.2010 16:07, Ben Hutchings wrote: >> On Thu, 2010-07-22 at 14:50 +0200, Stefan Assmann wrote: >>> On 21.07.2010 15:54, Ben Hutchings wrote: >>>> On Wed, 2010-07-21 at 10:10 +0200, Stefan Assmann wrote: >>>>> I put Alex' idea into code for further discussion, keeping the names >>>>> mentioned here until we agree on the scope of this attribute. When we >>>>> have settled I'll post a patch with proper patch description. >>>> [...] >>>> >>>> Just a little nitpick: I think it would be clearer to use a more >>>> specific term like 'address source' or 'address assignment type' rather >>>> than 'address type'. >>> >>> Here's a proposal for the final patch. >> >> Looks good, but... ... >> ...why '|=' and not '='? > > The intention is to use addr_assign_type as a bit field. > > Okay it it might not make too much sense to 'steal' a random MAC > address but in case we add more types later it might get useful. I think the patch is good enough to go into net-next-2.6 as-is, anything remaining is a refinement or one sort or another. So applied to net-next-2.6, thanks. -- 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 --git a/include/linux/etherdevice.h b/include/linux/etherdevice.h index 3d7a668..848480b 100644 --- a/include/linux/etherdevice.h +++ b/include/linux/etherdevice.h @@ -127,6 +127,20 @@ static inline void random_ether_addr(u8 *addr) } /** + * dev_hw_addr_random - Create random MAC and set device flag + * @dev: pointer to net_device structure + * @addr: Pointer to a six-byte array containing the Ethernet address + * + * Generate random MAC to be used by a device and set addr_assign_type + * so the state can be read by sysfs and be used by udev. + */ +static inline void dev_hw_addr_random(struct net_device *dev, u8 *hwaddr) +{ + dev->addr_assign_type |= NET_ADDR_RANDOM; + random_ether_addr(hwaddr); +} + +/** * compare_ether_addr - Compare two Ethernet addresses * @addr1: Pointer to a six-byte array containing the Ethernet address * @addr2: Pointer other six-byte array containing the Ethernet address diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index b626289..1bca617 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -66,6 +66,11 @@ struct wireless_dev; #define HAVE_FREE_NETDEV /* free_netdev() */ #define HAVE_NETDEV_PRIV /* netdev_priv() */ +/* hardware address assignment types */ +#define NET_ADDR_PERM 0 /* address is permanent (default) */ +#define NET_ADDR_RANDOM 1 /* address is generated randomly */ +#define NET_ADDR_STOLEN 2 /* address is stolen from other device */ + /* Backlog congestion levels */ #define NET_RX_SUCCESS 0 /* keep 'em coming, baby */ #define NET_RX_DROP 1 /* packet dropped */ @@ -919,6 +924,7 @@ struct net_device { /* Interface address info. */ unsigned char perm_addr[MAX_ADDR_LEN]; /* permanent hw address */ + unsigned char addr_assign_type; /* hw address assignment type */ unsigned char addr_len; /* hardware address length */ unsigned short dev_id; /* for shared network cards */ diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c index d2b5965..af4dfba 100644 --- a/net/core/net-sysfs.c +++ b/net/core/net-sysfs.c @@ -95,6 +95,7 @@ static ssize_t netdev_store(struct device *dev, struct device_attribute *attr, } NETDEVICE_SHOW(dev_id, fmt_hex); +NETDEVICE_SHOW(addr_assign_type, fmt_dec); NETDEVICE_SHOW(addr_len, fmt_dec); NETDEVICE_SHOW(iflink, fmt_dec); NETDEVICE_SHOW(ifindex, fmt_dec); @@ -295,6 +296,7 @@ static ssize_t show_ifalias(struct device *dev, } static struct device_attribute net_class_attributes[] = { + __ATTR(addr_assign_type, S_IRUGO, show_addr_assign_type, NULL), __ATTR(addr_len, S_IRUGO, show_addr_len, NULL), __ATTR(dev_id, S_IRUGO, show_dev_id, NULL), __ATTR(ifalias, S_IRUGO | S_IWUSR, show_ifalias, store_ifalias),