summaryrefslogtreecommitdiff
path: root/ifdata.c
diff options
context:
space:
mode:
authorjoeyh <joeyh>2006-03-18 19:17:43 +0000
committerjoeyh <joeyh>2006-03-18 19:17:43 +0000
commit824b3e16d5f3962f7bdba0ff3159363afad3cc68 (patch)
treee81bfad11ca345ef69c99f11f8d3abbfcca9ae53 /ifdata.c
parentfa7787ccb87cc8c47f118c65d5bbada602323a68 (diff)
downloadmoreutils-824b3e16d5f3962f7bdba0ff3159363afad3cc68.tar.gz
* ifdata: Patch from KELEMEN Peter to add support for printing hardware0.7
interface. Closes: #357646
Diffstat (limited to 'ifdata.c')
-rw-r--r--ifdata.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/ifdata.c b/ifdata.c
index c65ef16..1f1eb2a 100644
--- a/ifdata.c
+++ b/ifdata.c
@@ -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 @@ void if_flags(char *iface) {
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 @@ void usage(char *name) {
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 @@ void please_do(int ndo, int *todo, char *ifname) {
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 @@ int main(int argc, char *argv[]) {
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")) {