diff -Naru ethtool-6/ethtool.c ethtool-6-new/ethtool.c --- ethtool-6/ethtool.c 2009-08-15 19:16:21.419431487 +0530 +++ ethtool-6-new/ethtool.c 2009-10-09 22:30:59.218832199 +0530 @@ -40,6 +40,7 @@ #include #include +#include #include "ethtool-util.h" @@ -224,6 +225,7 @@ } static char *devname = NULL; +static char kernelname[IFNAMSIZ]; static int goffload_changed = 0; static int off_csum_rx_wanted = -1; @@ -767,7 +769,11 @@ if (devname == NULL) show_usage(1); - if (strlen(devname) >= IFNAMSIZ) + /*Pass the device name to netdev_pathname_to_name to get the ethN name if the device name is of the form /dev/net/ethN */ + if ((netdev_pathname_to_name(devname, kernelname)) < 0) { + show_pathname_usage(); + } + if (strlen(kernelname) >= IFNAMSIZ) show_usage(1); } @@ -1454,7 +1460,7 @@ /* Setup our control structures. */ memset(&ifr, 0, sizeof(ifr)); - strcpy(ifr.ifr_name, devname); + strcpy(ifr.ifr_name, kernelname); /* Open control socket. */ fd = socket(AF_INET, SOCK_DGRAM, 0); @@ -1528,7 +1534,7 @@ { int err; - fprintf(stdout, "Pause parameters for %s:\n", devname); + fprintf(stdout, "Pause parameters for %s:\n", kernelname); epause.cmd = ETHTOOL_GPAUSEPARAM; ifr->ifr_data = (caddr_t)&epause; @@ -1638,7 +1644,7 @@ { int err; - fprintf(stdout, "Ring parameters for %s:\n", devname); + fprintf(stdout, "Ring parameters for %s:\n", kernelname); ering.cmd = ETHTOOL_GRINGPARAM; ifr->ifr_data = (caddr_t)&ering; @@ -1659,7 +1665,7 @@ { int err; - fprintf(stdout, "Coalesce parameters for %s:\n", devname); + fprintf(stdout, "Coalesce parameters for %s:\n", kernelname); ecoal.cmd = ETHTOOL_GCOALESCE; ifr->ifr_data = (caddr_t)&ecoal; @@ -1713,7 +1719,7 @@ int err, allfail = 1, rx = 0, tx = 0, sg = 0; int tso = 0, ufo = 0, gso = 0, gro = 0, lro = 0; - fprintf(stdout, "Offload parameters for %s:\n", devname); + fprintf(stdout, "Offload parameters for %s:\n", kernelname); eval.cmd = ETHTOOL_GRXCSUM; ifr->ifr_data = (caddr_t)&eval; @@ -1927,7 +1933,7 @@ struct ethtool_value edata; int allfail = 1; - fprintf(stdout, "Settings for %s:\n", devname); + fprintf(stdout, "Settings for %s:\n", kernelname); ecmd.cmd = ETHTOOL_GSET; ifr->ifr_data = (caddr_t)&ecmd;