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