Module Name:    src
Committed By:   bouyer
Date:           Sat Jan 16 17:43:34 UTC 2010

Modified Files:
        src/distrib/utils/sysinst [netbsd-5]: net.c

Log Message:
Pull up following revision(s) (requested by martin in ticket #1242):
        distrib/utils/sysinst/net.c: revision 1.124
Use the proper structs for ioctls to fetch network configuration.
Might fix PR 42436.


To generate a diff of this commit:
cvs rdiff -u -r1.117.8.2 -r1.117.8.3 src/distrib/utils/sysinst/net.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/distrib/utils/sysinst/net.c
diff -u src/distrib/utils/sysinst/net.c:1.117.8.2 src/distrib/utils/sysinst/net.c:1.117.8.3
--- src/distrib/utils/sysinst/net.c:1.117.8.2	Thu Jan 22 22:18:26 2009
+++ src/distrib/utils/sysinst/net.c	Sat Jan 16 17:43:34 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: net.c,v 1.117.8.2 2009/01/22 22:18:26 snj Exp $	*/
+/*	$NetBSD: net.c,v 1.117.8.3 2010/01/16 17:43:34 bouyer Exp $	*/
 
 /*
  * Copyright 1997 Piermont Information Systems Inc.
@@ -301,7 +301,25 @@
 }
 
 static int
-do_ifreq(struct ifmediareq *ifmr, unsigned long cmd)
+do_ifreq(struct ifreq *ifr, unsigned long cmd)
+{
+	int sock;
+	int rval;
+
+	sock = socket(PF_INET, SOCK_DGRAM, 0);
+	if (sock == -1)
+		return -1;
+
+	memset(ifr, 0, sizeof *ifr);
+	strncpy(ifr->ifr_name, net_dev, sizeof ifr->ifr_name);
+	rval = ioctl(sock, cmd, ifr);
+	close(sock);
+
+	return rval;
+}
+
+static int
+do_ifmreq(struct ifmediareq *ifmr, unsigned long cmd)
 {
 	int sock;
 	int rval;
@@ -322,19 +340,20 @@
 static void
 get_ifinterface_info(void)
 {
+	struct ifreq ifr;
 	struct ifmediareq ifmr;
-	struct sockaddr_in *sa_in = (void *)&((struct ifreq *)&ifmr)->ifr_addr;
+	struct sockaddr_in *sa_in = (void*)&ifr.ifr_addr;
 	int modew;
 	const char *media_opt;
 	const char *sep;
 
-	if (do_ifreq(&ifmr, SIOCGIFADDR) == 0 && sa_in->sin_addr.s_addr != 0)
+	if (do_ifreq(&ifr, SIOCGIFADDR) == 0 && sa_in->sin_addr.s_addr != 0)
 		strlcpy(net_ip, inet_ntoa(sa_in->sin_addr), sizeof net_ip);
 
-	if (do_ifreq(&ifmr, SIOCGIFNETMASK) == 0 && sa_in->sin_addr.s_addr != 0)
+	if (do_ifreq(&ifr, SIOCGIFNETMASK) == 0 && sa_in->sin_addr.s_addr != 0)
 		strlcpy(net_mask, inet_ntoa(sa_in->sin_addr), sizeof net_mask);
 
-	if (do_ifreq(&ifmr, SIOCGIFMEDIA) == 0) {
+	if (do_ifmreq(&ifmr, SIOCGIFMEDIA) == 0) {
 		/* Get the name of the media word */
 		modew = ifmr.ifm_current;
 		strlcpy(net_media, get_media_subtype_string(modew),

Reply via email to