Package: moreutils
Version: 0.6
Severity: wishlist
Tags: patch

It would be nice if ifdata(1) could print the hardware address of the
interface.

Peter

-- System Information:
Debian Release: testing/unstable
  APT prefers unstable
  APT policy: (500, 'unstable'), (500, 'stable'), (1, 'experimental')
Architecture: i386 (i686)
Shell:  /bin/sh linked to /bin/dash
Kernel: Linux 2.6.15-vm2g-inara.1
Locale: LANG=C, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)

Versions of packages moreutils depends on:
ii  libc6                         2.3.6-3    GNU C Library: Shared libraries an
ii  perl                          5.8.8-3    Larry Wall's Practical Extraction 

moreutils recommends no packages.

-- no debconf information
--- ifdata.c.orig	2006-03-18 19:12:00.000000000 +0100
+++ ifdata.c	2006-03-18 19:43:21.000000000 +0100
@@ -41,6 +41,7 @@
 #define DO_SOUTCARRIER 25
 #define DO_SOUTMULTICAST 26
 #define DO_PNETWORK 27
+#define DO_PHWADDRESS 28
 
 struct if_stat {
 	unsigned long long int in_packets;
@@ -138,6 +139,20 @@
 	PRINT_IF(0xffff0000,"Unknown-flags");
 }
 
+void if_hwaddr(char *iface) {
+	unsigned char *hwaddr;
+
+	PREPARE_SOCK(iface);
+	CALL_IOCTL(SIOCGIFHWADDR);
+	if (res < 0) {
+		CALL_ERROR();
+	}
+	hwaddr = (unsigned char *)req.ifr_hwaddr.sa_data;
+	printf("%02X:%02X:%02X:%02X:%02X:%02X",
+		hwaddr[0], hwaddr[1], hwaddr[2], hwaddr[3], hwaddr[4], hwaddr[5]);
+	END_SOCK;
+}
+
 struct sockaddr *if_addr(char *iface) {
 	PREPARE_SOCK(iface);
 	CALL_IOCTL(SIOCGIFADDR);
@@ -324,6 +339,7 @@
 	fprintf(stderr,"    -e   Says if iface exists or not\n"
 		       "    -p   Print out the whole config of iface\n"
 		       "    -pe  Print out yes or no according to existence\n"
+		       "    -ph  Print out the hardware address\n"
 		       "    -pa  Print out the address\n"
 		       "    -pn  Print netmask\n"
 		       "    -pN  Print network address\n"
@@ -379,6 +395,9 @@
 					printf("no");
 				}
 				break;
+			case DO_PHWADDRESS:
+				if_hwaddr(ifname);
+				break;
 			case DO_PADDRESS:
 				sadr=if_addr(ifname);
 				PRINT_OR_ERR(sadr);
@@ -531,6 +550,8 @@
 			add_do(&ndo,&todo,DO_EXISTS);
 		} else if (!strcmp(argv[narg],"-p")) {
 			add_do(&ndo,&todo,DO_PALL);
+		} else if (!strcmp(argv[narg],"-ph")) {
+			add_do(&ndo,&todo,DO_PHWADDRESS);
 		} else if (!strcmp(argv[narg],"-pa")) {
 			add_do(&ndo,&todo,DO_PADDRESS);
 		} else if (!strcmp(argv[narg],"-pn")) {
--- ifdata.docbook.orig	2006-03-18 19:32:24.000000000 +0100
+++ ifdata.docbook	2006-03-18 19:33:00.000000000 +0100
@@ -105,6 +105,14 @@
 		</varlistentry>
 	
 		<varlistentry>
+			<term><option>-ph</option></term>
+			<listitem>
+				<para>Prints the hardware address of the
+					interface.</para>
+			</listitem>
+		</varlistentry>
+
+		<varlistentry>
 			<term><option>-pa</option></term>
 			<listitem>
 				<para>Prints the IPv4 address of the

Reply via email to