summaryrefslogtreecommitdiff
path: root/pppd/sys-solaris.c
diff options
context:
space:
mode:
authorpali <7141871+pali@users.noreply.github.com>2021-01-02 04:27:13 +0100
committerGitHub <noreply@github.com>2021-01-02 14:27:13 +1100
commit952cfa5acc41ad4ceee160420a188a388bb340cf (patch)
treedba7225dd7b4d2e185375c07926f6f1cb53801da /pppd/sys-solaris.c
parent18ad641f94c72e1dcdd8189b991c339e5bdde966 (diff)
downloadppp-952cfa5acc41ad4ceee160420a188a388bb340cf.tar.gz
pppd: Combine get_first_ethernet() and get_if_hwaddr() into one function (#207)
On all places is just needed hardware address for the first ethernet-style interface. So provide it by new get_first_ether_hwaddr() function. Signed-off-by: Pali Rohár <pali@kernel.org>
Diffstat (limited to 'pppd/sys-solaris.c')
-rw-r--r--pppd/sys-solaris.c67
1 files changed, 32 insertions, 35 deletions
diff --git a/pppd/sys-solaris.c b/pppd/sys-solaris.c
index 24c3776..e0cd0be 100644
--- a/pppd/sys-solaris.c
+++ b/pppd/sys-solaris.c
@@ -218,10 +218,7 @@ static int if6_is_up = 0; /* IPv6 interface has been marked up */
#endif /* defined(INET6) && defined(SOL2) */
-#if defined(INET6) && defined(SOL2)
-static char first_ether_name[LIFNAMSIZ]; /* Solaris 8 and above */
-#else
-static char first_ether_name[IFNAMSIZ]; /* Before Solaris 8 */
+#if !defined(INET6) || !defined(SOL2)
#define MAXIFS 256 /* Max # of interfaces */
#endif /* defined(INET6) && defined(SOL2) */
@@ -294,13 +291,13 @@ sifppa(fd, ppa)
#if defined(SOL2) && defined(INET6)
/*
- * get_first_ethernet - returns the first Ethernet interface name found in
- * the system, or NULL if none is found
+ * get_first_ether_hwaddr - get the hardware address for the first
+ * ethernet-style interface on this system.
*
* NOTE: This is the lifreq version (Solaris 8 and above)
*/
-char *
-get_first_ethernet(void)
+int
+get_first_ether_hwaddr(u_char *addr)
{
struct lifnum lifn;
struct lifconf lifc;
@@ -312,7 +309,7 @@ get_first_ethernet(void)
fd = socket(AF_INET, SOCK_DGRAM, 0);
if (fd < 0) {
- return 0;
+ return -1;
}
/*
@@ -323,7 +320,7 @@ get_first_ethernet(void)
if (ioctl(fd, SIOCGLIFNUM, &lifn) < 0) {
close(fd);
error("could not determine number of interfaces: %m");
- return 0;
+ return -1;
}
num_ifs = lifn.lifn_count;
@@ -332,7 +329,7 @@ get_first_ethernet(void)
if (req == NULL) {
close(fd);
error("out of memory");
- return 0;
+ return -1;
}
/*
@@ -346,7 +343,7 @@ get_first_ethernet(void)
close(fd);
free(req);
error("SIOCGLIFCONF: %m");
- return 0;
+ return -1;
}
/*
@@ -363,10 +360,8 @@ get_first_ethernet(void)
memset(&lifr, 0, sizeof(lifr));
strncpy(lifr.lifr_name, plifreq->lifr_name, sizeof(lifr.lifr_name));
if (ioctl(fd, SIOCGLIFFLAGS, &lifr) < 0) {
- close(fd);
- free(req);
error("SIOCGLIFFLAGS: %m");
- return 0;
+ break;
}
fl = lifr.lifr_flags;
@@ -374,27 +369,29 @@ get_first_ethernet(void)
!= (IFF_UP | IFF_BROADCAST))
continue;
+ if (get_if_hwaddr(addr, lifr.lifr_name) < 0)
+ continue;
+
found = 1;
break;
}
free(req);
close(fd);
- if (found) {
- strncpy(first_ether_name, lifr.lifr_name, sizeof(first_ether_name));
- return (char *)first_ether_name;
- } else
- return NULL;
+ if (found)
+ return 0;
+ else
+ return -1;
}
#else
/*
- * get_first_ethernet - returns the first Ethernet interface name found in
- * the system, or NULL if none is found
+ * get_first_ether_hwaddr - get the hardware address for the first
+ * ethernet-style interface on this system.
*
* NOTE: This is the ifreq version (before Solaris 8).
*/
-char *
-get_first_ethernet(void)
+int
+get_first_ether_hwaddr(u_char *addr)
{
struct ifconf ifc;
struct ifreq *pifreq;
@@ -405,7 +402,7 @@ get_first_ethernet(void)
fd = socket(AF_INET, SOCK_DGRAM, 0);
if (fd < 0) {
- return 0;
+ return -1;
}
/*
@@ -420,7 +417,7 @@ get_first_ethernet(void)
if (req == NULL) {
close(fd);
error("out of memory");
- return 0;
+ return -1;
}
/*
@@ -432,7 +429,7 @@ get_first_ethernet(void)
close(fd);
free(req);
error("SIOCGIFCONF: %m");
- return 0;
+ return -1;
}
/*
@@ -449,10 +446,8 @@ get_first_ethernet(void)
memset(&ifr, 0, sizeof(ifr));
strncpy(ifr.ifr_name, pifreq->ifr_name, sizeof(ifr.ifr_name));
if (ioctl(fd, SIOCGIFFLAGS, &ifr) < 0) {
- close(fd);
- free(req);
error("SIOCGIFFLAGS: %m");
- return 0;
+ break;
}
fl = ifr.ifr_flags;
@@ -460,17 +455,19 @@ get_first_ethernet(void)
!= (IFF_UP | IFF_BROADCAST))
continue;
+ if (get_if_hwaddr(addr, ifr.ifr_name) < 0)
+ continue;
+
found = 1;
break;
}
free(req);
close(fd);
- if (found) {
- strncpy(first_ether_name, ifr.ifr_name, sizeof(first_ether_name));
- return (char *)first_ether_name;
- } else
- return NULL;
+ if (found)
+ return 0;
+ else
+ return -1;
}
#endif /* defined(SOL2) && defined(INET6) */