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),