Patchwork SIS900 show warning if bogus MAC address

login
register
mail settings
Submitter Daniele Venzano
Date Jan. 11, 2009, 8:45 a.m.
Message ID <20090111084504.GB12226@brownhat.org>
Download mbox | patch
Permalink /patch/17788/
State Changes Requested
Headers show

Comments

Daniele Venzano - Jan. 11, 2009, 8:45 a.m.
The attached patch modifies the sis900 driver to show a warning at boot
or module load time to show a message when a null MAC address
(00:00:00:00:00:00) is read from the the hardware.
This seems to happen with newer usage of the sis900 chipset, since this
never came up before.

Signed-off-by: Daniele Venzano <venza@brownhat.org>

--
Daniele Venzano
http://www.brownhat.org
David Miller - Jan. 11, 2009, 12:04 p.m.
From: Daniele Venzano <venza@brownhat.org>
Date: Sun, 11 Jan 2009 09:45:04 +0100

> The attached patch modifies the sis900 driver to show a warning at boot
> or module load time to show a message when a null MAC address
> (00:00:00:00:00:00) is read from the the hardware.
> This seems to happen with newer usage of the sis900 chipset, since this
> never came up before.
> 
> Signed-off-by: Daniele Venzano <venza@brownhat.org>

Choose a random mac address, as other drivers do in this
situation, so that the user ends up with a usable interface.
--
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
stephen hemminger - Jan. 12, 2009, 4:23 p.m.
On Sun, 11 Jan 2009 09:45:04 +0100
Daniele Venzano <venza@brownhat.org> wrote:

> The attached patch modifies the sis900 driver to show a warning at boot
> or module load time to show a message when a null MAC address
> (00:00:00:00:00:00) is read from the the hardware.
> This seems to happen with newer usage of the sis900 chipset, since this
> never came up before.
> 
> Signed-off-by: Daniele Venzano <venza@brownhat.org>
> 
> --
> Daniele Venzano
> http://www.brownhat.org
> 
 /**
+ *      sis900_check_mac_addr - Check the MAc adress for validity
+ *	@net_dev: the net device that has the address to check
+ *
+ * 	Return false (0) if the mac address read from the hardware is
+ * 	composed of all zeros.
+ */
+
+static int __devinit sis900_check_mac_addr(struct net_device *net_dev)
+{
+	int i;
+
+	for (i = 0; i < 6; i++)
+		if (net_dev->dev_addr[i] != 0)
+			return 1;
+
+	return 0;
+}
+

This is a reimplementation of:
        return !is_zero_ether_addr(net_dev->dev_addr);

You probably want to use is_valid_ether_addr() instead.
--
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

Patch

--- a/drivers/net/sis900.c	2008-12-31 09:15:17.000000000 +0100
+++ b/drivers/net/sis900.c	2008-12-31 09:24:47.000000000 +0100
@@ -382,6 +382,25 @@  static int __devinit sis96x_get_mac_addr
 }
 
 /**
+ *      sis900_check_mac_addr - Check the MAc adress for validity
+ *	@net_dev: the net device that has the address to check
+ *
+ * 	Return false (0) if the mac address read from the hardware is
+ * 	composed of all zeros.
+ */
+
+static int __devinit sis900_check_mac_addr(struct net_device *net_dev)
+{
+	int i;
+
+	for (i = 0; i < 6; i++)
+		if (net_dev->dev_addr[i] != 0)
+			return 1;
+
+	return 0;
+}
+
+/**
  *	sis900_probe - Probe for sis900 device
  *	@pci_dev: the sis900 pci device
  *	@pci_id: the pci device ID
@@ -504,6 +523,9 @@  static int __devinit sis900_probe(struct
 	else
 		ret = sis900_get_mac_addr(pci_dev, net_dev);
 
+	if (sis900_check_mac_addr(net_dev) == 0)
+		printk(KERN_WARNING "%s: Read an invalid MAC address, remember to set one manually\n", dev_name);
+
 	if (ret == 0) {
 		printk(KERN_WARNING "%s: Cannot read MAC address.\n", dev_name);
 		ret = -ENODEV;