On 01/28/18 21:24, bijan wrote:
Hi,

Added -l argument to ifconfig to only print names of interfaces.
(Maybe a lame excuse from me for being too lazy but FreeBSD
supports it too)
Missed the usage string, Update!

>From 2d00dbc563db1f2581342cbf02a83cbb3a6a5966 Mon Sep 17 00:00:00 2001
From: Bijan Ebrahimi <bijanebrah...@riseup.net>
Date: Fri, 19 Jan 2018 18:18:24 +0330
Subject: [PATCH] added printing list names

---
 sbin/ifconfig/ifconfig.8 |  7 ++++++-
 sbin/ifconfig/ifconfig.c | 37 ++++++++++++++++++++++++++++++++++++-
 2 files changed, 42 insertions(+), 2 deletions(-)

diff --git sbin/ifconfig/ifconfig.8 sbin/ifconfig/ifconfig.8
index ef9592cf3..6055fa4aa 100644
--- sbin/ifconfig/ifconfig.8
+++ sbin/ifconfig/ifconfig.8
@@ -39,7 +39,7 @@
 .Nd configure network interface parameters
 .Sh SYNOPSIS
 .Nm ifconfig
-.Op Fl AaC
+.Op Fl AaCl
 .Op Ar interface
 .Op Ar address_family
 .Oo
@@ -88,6 +88,11 @@ This is the default, if no parameters are given to
 Print the names of all network pseudo-devices that
 can be created dynamically at runtime using
 .Nm Cm create .
+.It Fl l
+Causes
+.Nm
+to print names of all existing interfaces.
+.Nm .
 .It Ar interface
 The
 .Ar interface
diff --git sbin/ifconfig/ifconfig.c sbin/ifconfig/ifconfig.c
index 4a0f4d632..3505287c4 100644
--- sbin/ifconfig/ifconfig.c
+++ sbin/ifconfig/ifconfig.c
@@ -232,6 +232,7 @@ void	unsettrunkport(const char *, int);
 void	settrunkproto(const char *, int);
 void	trunk_status(void);
 void	list_cloners(void);
+void	list_names(void);
 
 #ifndef SMALL
 void	carp_status(void);
@@ -632,6 +633,7 @@ main(int argc, char *argv[])
 	const struct afswtch *rafp = NULL;
 	int create = 0;
 	int Cflag = 0;
+	int lflag = 0;
 	int gflag = 0;
 	int i;
 
@@ -659,6 +661,10 @@ main(int argc, char *argv[])
 			case 'g':
 				gflag = 1;
 				break;
+			case 'l':
+				lflag = 1;
+				nomore = 1;
+				break;
 			case 'C':
 				Cflag = 1;
 				nomore = 1;
@@ -695,6 +701,10 @@ main(int argc, char *argv[])
 		list_cloners();
 		return (0);
 	}
+	if (lflag) {
+		list_names();
+		return (0);
+	}
 	if (gflag) {
 		if (argc == 0)
 			printgroupattribs(name);
@@ -1147,6 +1157,31 @@ list_cloners(void)
 	free(buf);
 }
 
+void
+list_names(void)
+{
+	int count = 0;
+	struct ifaddrs *ifap, *ifa;
+	const char *if_name = NULL;
+
+	if (getifaddrs(&ifap) != 0)
+		err(1, "getifaddrs");
+
+	for (ifa = ifap; ifa; ifa = ifa->ifa_next) {
+		if (if_name == ifa->ifa_name)
+			continue;
+		if_name = ifa->ifa_name;
+		if (count++ > 0)
+			printf(" ");
+		printf ("%s", ifa->ifa_name);
+	}
+
+	if (if_name != NULL)
+		printf("\n");
+
+	freeifaddrs(ifap);
+}
+
 #define RIDADDR 0
 #define ADDR	1
 #define MASK	2
@@ -5453,7 +5488,7 @@ __dead void
 usage(void)
 {
 	fprintf(stderr,
-	    "usage: ifconfig [-AaC] [interface] [address_family] "
+	    "usage: ifconfig [-AaCl] [interface] [address_family] "
 	    "[address [dest_address]]\n"
 	    "\t\t[parameters]\n");
 	exit(1);
-- 
2.14.2

Reply via email to