aboutsummaryrefslogtreecommitdiffstats
path: root/net/ethernet/eth.c
diff options
context:
space:
mode:
authorMichael Chan <mchan@broadcom.com>2007-12-25 00:28:09 -0500
committerDavid S. Miller <davem@davemloft.net>2008-01-28 18:00:05 -0500
commit7ffc49a6ee92b7138c2ee28073a8e10e58335d62 (patch)
tree6421d389980f3a71b1b53ed6e1548eb08dbf1226 /net/ethernet/eth.c
parent21371f768bf7127ee45bfaadd17899df6a439e8f (diff)
[ETH]: Combine format_addr() with print_mac().
print_mac() used many most net drivers and format_addr() used by net-sysfs.c are very similar and they can be intergrated. format_addr() is also identically redefined in the qla4xxx iscsi driver. Export a new function sysfs_format_mac() to be used by net-sysfs, qla4xxx and others in the future. Both print_mac() and sysfs_format_mac() call _format_mac_addr() to do the formatting. Changed print_mac() to use unsigned char * to be consistent with net_device struct's dev_addr. Added buffer length overrun checking as suggested by Joe Perches. Signed-off-by: Michael Chan <mchan@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ethernet/eth.c')
-rw-r--r--net/ethernet/eth.c30
1 files changed, 27 insertions, 3 deletions
diff --git a/net/ethernet/eth.c b/net/ethernet/eth.c
index 6b2e454ae313..a7b417523e9b 100644
--- a/net/ethernet/eth.c
+++ b/net/ethernet/eth.c
@@ -359,10 +359,34 @@ struct net_device *alloc_etherdev_mq(int sizeof_priv, unsigned int queue_count)
359} 359}
360EXPORT_SYMBOL(alloc_etherdev_mq); 360EXPORT_SYMBOL(alloc_etherdev_mq);
361 361
362char *print_mac(char *buf, const u8 *addr) 362static size_t _format_mac_addr(char *buf, int buflen,
363 const unsigned char *addr, int len)
363{ 364{
364 sprintf(buf, MAC_FMT, 365 int i;
365 addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]); 366 char *cp = buf;
367
368 for (i = 0; i < len; i++) {
369 cp += scnprintf(cp, buflen - (cp - buf), "%02x", addr[i]);
370 if (i == len - 1)
371 break;
372 cp += strlcpy(cp, ":", buflen - (cp - buf));
373 }
374 return cp - buf;
375}
376
377ssize_t sysfs_format_mac(char *buf, const unsigned char *addr, int len)
378{
379 size_t l;
380
381 l = _format_mac_addr(buf, PAGE_SIZE, addr, len);
382 l += strlcpy(buf + l, "\n", PAGE_SIZE - l);
383 return ((ssize_t) l);
384}
385EXPORT_SYMBOL(sysfs_format_mac);
386
387char *print_mac(char *buf, const unsigned char *addr)
388{
389 _format_mac_addr(buf, MAC_BUF_SIZE, addr, ETH_ALEN);
366 return buf; 390 return buf;
367} 391}
368EXPORT_SYMBOL(print_mac); 392EXPORT_SYMBOL(print_mac);