Module Name: src Committed By: martin Date: Wed Jan 13 07:48:58 UTC 2010
Modified Files: src/distrib/utils/sysinst: net.c Log Message: 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.123 -r1.124 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.123 src/distrib/utils/sysinst/net.c:1.124 --- src/distrib/utils/sysinst/net.c:1.123 Fri Oct 16 19:01:03 2009 +++ src/distrib/utils/sysinst/net.c Wed Jan 13 07:48:57 2010 @@ -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),