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