Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/distrib/utils/sysinst Use the proper structs for ioctls to f...
details: https://anonhg.NetBSD.org/src/rev/efa2e38c8488
branches: trunk
changeset: 750760:efa2e38c8488
user: martin <martin%NetBSD.org@localhost>
date: Wed Jan 13 07:48:57 2010 +0000
description:
Use the proper structs for ioctls to fetch network configuration.
Might fix PR 42436.
diffstat:
distrib/utils/sysinst/net.c | 31 +++++++++++++++++++++++++------
1 files changed, 25 insertions(+), 6 deletions(-)
diffs (61 lines):
diff -r be3b8e0c027d -r efa2e38c8488 distrib/utils/sysinst/net.c
--- a/distrib/utils/sysinst/net.c Wed Jan 13 05:08:24 2010 +0000
+++ b/distrib/utils/sysinst/net.c Wed Jan 13 07:48:57 2010 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: net.c,v 1.123 2009/10/16 19:01:03 joerg Exp $ */
+/* $NetBSD: net.c,v 1.124 2010/01/13 07:48:57 martin Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -303,7 +303,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;
@@ -324,19 +342,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),
Home |
Main Index |
Thread Index |
Old Index