cvs commit: src/sbin/dhclient dispatch.c
Jung-uk Kim
jkim at FreeBSD.org
Mon Dec 10 10:43:28 PST 2007
On Monday 10 December 2007 12:49 pm, Jung-uk Kim wrote:
> jkim 2007-12-10 17:49:16 UTC
>
> FreeBSD src repository
>
> Modified files: (Branch: RELENG_7)
> sbin/dhclient dispatch.c
> Log:
> MFC: 1.3
>
> Teach dhclient(8) about net80211 link (association) status.
>
> Especially it helps ndis(4) where it is used with
> wpa_supplicant(8) since 0.5.8 is imported. Previously
> ndis_events(8) was used to notify link status to wpa_supplicant but
> it is defuct now, i. e., external event notification mechanism is
> removed by the vendor and there is no substitute for ndisulator
> yet.
>
> Reviewed by: brooks
> OK'd by: sam
> Approved by: re (kensmith)
>
> Revision Changes Path
> 1.2.2.1 +4 -1 src/sbin/dhclient/dispatch.c
FYI, see:
http://hostap.epitest.fi/cgi-bin/viewcvs.cgi/hostap/wpa_supplicant/driver_ndis_.c?r1=1.9&r2=1.10&makepatch=1&diff_format=u
Vendor commit log:
Removed ndis_events.cpp and possibility of using external
ndis_events.exe; C version (ndis_events.c) is fully functional and
there is no desire to maintain two separate versions of this
implementation.
Then driver_ndis_.c was moved to Attic in our version:
http://docs.freebsd.org/cgi/mid.cgi?200707111558.l6BFwqhl036966
Since we don't have ndis_events.c equivalent for ndis(4), its
functionality is effectively lost. Therefore, I'd like to disconnect
ndis_events(8) from build (patch attached).
Any objection?
Jung-uk Kim
-------------- next part --------------
--- src/UPDATING 28 Nov 2007 13:04:11 -0000 1.513
+++ src/UPDATING 10 Dec 2007 18:12:14 -0000
@@ -21,6 +21,11 @@
developers choose to disable these features on build machines
to maximize performance.
+20071210:
+ ndis_events(8) has been retired. Unfortunately its functionality
+ is lost because wpa_supplicant(8) does not listen to external
+ events any more and there is no substitute for ndis(4) since 0.5.x.
+
20071128:
The ADAPTIVE_GIANT kernel option has been retired because its
functionality is the default now.
--- src/usr.sbin/wpa/Makefile 17 Nov 2006 19:38:51 -0000 1.4
+++ src/usr.sbin/wpa/Makefile 10 Dec 2007 18:06:49 -0000
@@ -2,6 +2,5 @@
SUBDIR= wpa_supplicant wpa_cli wpa_passphrase
SUBDIR+= hostapd hostapd_cli
-SUBDIR+= ndis_events
.include <bsd.subdir.mk>
--- src/usr.sbin/wpa/ndis_events/Makefile 10 Oct 2005 17:51:12 -0000 1.1
+++ src/usr.sbin/wpa/ndis_events/Makefile 1 Jan 1970 00:00:00 -0000
@@ -1,8 +0,0 @@
-# $FreeBSD: src/usr.sbin/wpa/ndis_events/Makefile,v 1.1 2005/10/10 17:51:12 wpaul Exp $
-
-PROG= ndis_events
-SRCS+= ndis_events.c
-
-MAN= ndis_events.8
-
-.include <bsd.prog.mk>
--- src/usr.sbin/wpa/ndis_events/ndis_events.8 7 Sep 2007 22:19:29 -0000 1.7
+++ src/usr.sbin/wpa/ndis_events/ndis_events.8 1 Jan 1970 00:00:00 -0000
@@ -1,135 +0,0 @@
-.\" Copyright (c) 2005
-.\" Bill Paul <wpaul at windriver.com> All rights reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\" notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\" notice, this list of conditions and the following disclaimer in the
-.\" documentation and/or other materials provided with the distribution.
-.\" 3. All advertising materials mentioning features or use of this software
-.\" must display the following acknowledgement:
-.\" This product includes software developed by Bill Paul.
-.\" 4. Neither the name of the author nor the names of any co-contributors
-.\" may be used to endorse or promote products derived from this software
-.\" without specific prior written permission.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY Bill Paul AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED. IN NO EVENT SHALL Bill Paul OR THE VOICES IN HIS HEAD
-.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-.\" THE POSSIBILITY OF SUCH DAMAGE.
-.\"
-.\" $FreeBSD: src/usr.sbin/wpa/ndis_events/ndis_events.8,v 1.7 2007/09/07 22:19:29 brueffer Exp $
-.\"
-.Dd August 30, 2007
-.Dt NDIS_EVENTS 8
-.Os
-.Sh NAME
-.Nm ndis_events
-.Nd relay events from
-.Xr ndis 4
-drivers to
-.Xr wpa_supplicant 8
-.Sh SYNOPSIS
-.Nm
-.Op Fl a
-.Op Fl d
-.Op Fl v
-.Sh DESCRIPTION
-The
-.Nm
-utility listens for events generated by an
-.Xr ndis 4
-wireless network driver and relays them to
-.Xr wpa_supplicant 8
-for possible processing.
-The three event types that can occur
-are media connect and disconnect events, such as when a wireless
-interface joins or leaves a network, and media-specific events.
-In particular,
-.Xr ndis 4
-drivers that support WPA2 will generate media-specific events
-containing PMKID candidate information which
-.Xr wpa_supplicant 8
-needs in order to properly associate with WPA2-capable access points.
-.Pp
-The
-.Nm
-daemon works by listening for interface information events via
-a routing socket.
-When it detects an event that was generated by an
-.Xr ndis 4
-interface, it transmits it via UDP packet on the loopback interface,
-where
-.Xr wpa_supplicant 8
-is presumeably listening.
-The standard
-.Xr wpa_supplicant 8
-distribution includes its own version of this utility for use with
-.Tn Windows\[rg] .
-The
-.Fx
-version performs the same functions as the
-.Tn Windows\[rg]
-one, except that it uses an
-.Xr ioctl 4
-and routing socket interface instead of WMI.
-.Pp
-Note that a single instance of
-.Nm
-is sufficient to scan for events for any number of
-.Xr ndis 4
-interfaces in a system.
-.Sh OPTIONS
-The
-.Nm
-daemon supports the following options:
-.Bl -tag -width indent
-.It Fl a
-Process all events.
-By default,
-.Nm
-will only process and forward media-specific events, which contain
-PMKID candidate information, and not bother forwarding connect and
-disconnect events, since
-.Xr wpa_supplicant 8
-normally can determine the current link state on its own.
-In some
-cases, the additional connect and disconnect events only confuse it
-and make the association and authentication process take longer.
-.It Fl d
-Run in debug mode.
-This causes
-.Nm
-to run in the foreground and generate any output to the standard
-error instead of using the
-.Xr syslog 3
-facility.
-.It Fl v
-Run in verbose mode.
-This causes
-.Nm
-to emit notifications when it receives events.
-.El
-.Sh SEE ALSO
-.Xr ndis 4 ,
-.Xr wpa_supplicant 8
-.Sh HISTORY
-The
-.Nm
-utility first appeared in
-.Fx 6.0 .
-.Sh AUTHORS
-The
-.Nm
-utility was written by
-.An Bill Paul Aq wpaul at windriver.com .
--- src/usr.sbin/wpa/ndis_events/ndis_events.c 21 Oct 2005 16:57:57 -0000 1.4
+++ src/usr.sbin/wpa/ndis_events/ndis_events.c 1 Jan 1970 00:00:00 -0000
@@ -1,355 +0,0 @@
-/*-
- * Copyright (c) 2005
- * Bill Paul <wpaul at windriver.com>. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by Bill Paul.
- * 4. Neither the name of the author nor the names of any co-contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY Bill Paul AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL Bill Paul OR THE VOICES IN HIS HEAD
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/usr.sbin/wpa/ndis_events/ndis_events.c,v 1.4 2005/10/21 16:57:57 wpaul Exp $");
-
-/*
- * This program simulates the behavior of the ndis_events utility
- * supplied with wpa_supplicant for Windows. The original utility
- * is designed to translate Windows WMI events. We don't have WMI,
- * but we need to supply certain event info to wpa_supplicant in
- * order to make WPA2 work correctly, so we fake up the interface.
- */
-
-#include <sys/types.h>
-#include <sys/cdefs.h>
-#include <sys/param.h>
-#include <sys/socket.h>
-#include <sys/ioctl.h>
-#include <sys/socket.h>
-#include <sys/errno.h>
-#include <sys/sysctl.h>
-#include <net/if.h>
-#include <net/if_dl.h>
-#include <net/if_var.h>
-
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <netdb.h>
-#include <net/route.h>
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <err.h>
-#include <syslog.h>
-#include <stdarg.h>
-
-static int verbose = 0;
-static int debug = 0;
-static int all_events = 0;
-
-#define PROGNAME "ndis_events"
-
-#define WPA_SUPPLICANT_PORT 9876
-#define NDIS_INDICATION_LEN 2048
-
-#define EVENT_CONNECT 0
-#define EVENT_DISCONNECT 1
-#define EVENT_MEDIA_SPECIFIC 2
-
-#define NDIS_STATUS_MEDIA_CONNECT 0x4001000B
-#define NDIS_STATUS_MEDIA_DISCONNECT 0x4001000C
-#define NDIS_STATUS_MEDIA_SPECIFIC_INDICATION 0x40010012
-
-struct ndis_evt {
- uint32_t ne_sts;
- uint32_t ne_len;
-#ifdef notdef
- char ne_buf[1];
-#endif
-};
-
-static int find_ifname(int, char *);
-static int announce_event(char *, int, struct sockaddr_in *);
-static void usage(char *);
-
-static void
-dbgmsg(const char *fmt, ...)
-{
- va_list ap;
-
- va_start(ap, fmt);
- if (debug)
- vwarnx(fmt, ap);
- else
- vsyslog(LOG_ERR, fmt, ap);
- va_end(ap);
-
- return;
-}
-
-static int
-find_ifname(idx, name)
- int idx;
- char *name;
-{
- int mib[6];
- size_t needed;
- struct if_msghdr *ifm;
- struct sockaddr_dl *sdl;
- char *buf, *lim, *next;
-
- needed = 0;
- mib[0] = CTL_NET;
- mib[1] = PF_ROUTE;
- mib[2] = 0; /* protocol */
- mib[3] = 0; /* wildcard address family */
- mib[4] = NET_RT_IFLIST;
- mib[5] = 0; /* no flags */
-
- if (sysctl (mib, 6, NULL, &needed, NULL, 0) < 0)
- return(EIO);
-
- buf = malloc (needed);
- if (buf == NULL)
- return(ENOMEM);
-
- if (sysctl (mib, 6, buf, &needed, NULL, 0) < 0) {
- free(buf);
- return(EIO);
- }
-
- lim = buf + needed;
-
- next = buf;
- while (next < lim) {
- ifm = (struct if_msghdr *)next;
- if (ifm->ifm_type == RTM_IFINFO) {
- sdl = (struct sockaddr_dl *)(ifm + 1);
- if (ifm->ifm_index == idx) {
- strncpy(name, sdl->sdl_data, sdl->sdl_nlen);
- name[sdl->sdl_nlen] = '\0';
- free (buf);
- return (0);
- }
- }
- next += ifm->ifm_msglen;
- }
-
- free (buf);
-
- return(ENOENT);
-}
-
-static int
-announce_event(ifname, sock, dst)
- char *ifname;
- int sock;
- struct sockaddr_in *dst;
-{
- int s;
- char indication[NDIS_INDICATION_LEN];
- struct ifreq ifr;
- struct ndis_evt *e;
- char buf[512], *pos, *end;
- int len, type, _type;
-
- s = socket(PF_INET, SOCK_DGRAM, 0);
-
- if (s < 0) {
- dbgmsg("socket creation failed");
- return(EINVAL);
- }
-
- bzero((char *)&ifr, sizeof(ifr));
- e = (struct ndis_evt *)indication;
- e->ne_len = NDIS_INDICATION_LEN - sizeof(struct ndis_evt);
-
- strlcpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
- ifr.ifr_data = indication;
-
- if (ioctl(s, SIOCGPRIVATE_0, &ifr) < 0) {
- close(s);
- if (verbose) {
- if (errno == ENOENT)
- dbgmsg("drained all events from %s",
- ifname, errno);
- else
- dbgmsg("failed to read event info from %s: %d",
- ifname, errno);
- }
- return(ENOENT);
- }
-
- if (e->ne_sts == NDIS_STATUS_MEDIA_CONNECT) {
- type = EVENT_CONNECT;
- if (verbose)
- dbgmsg("Received a connect event for %s", ifname);
- if (!all_events) {
- close(s);
- return(0);
- }
- }
- if (e->ne_sts == NDIS_STATUS_MEDIA_DISCONNECT) {
- type = EVENT_DISCONNECT;
- if (verbose)
- dbgmsg("Received a disconnect event for %s", ifname);
- if (!all_events) {
- close(s);
- return(0);
- }
- }
- if (e->ne_sts == NDIS_STATUS_MEDIA_SPECIFIC_INDICATION) {
- type = EVENT_MEDIA_SPECIFIC;
- if (verbose)
- dbgmsg("Received a media-specific event for %s",
- ifname);
- }
-
- end = buf + sizeof(buf);
- _type = (int) type;
- memcpy(buf, &_type, sizeof(_type));
- pos = buf + sizeof(_type);
-
- len = snprintf(pos + 1, end - pos - 1, "%s", ifname);
- if (len < 0) {
- close(s);
- return(ENOSPC);
- }
- if (len > 255)
- len = 255;
- *pos = (unsigned char) len;
- pos += 1 + len;
- if (e->ne_len) {
- if (e->ne_len > 255 || 1 + e->ne_len > end - pos) {
- dbgmsg("Not enough room for send_event data (%d)\n",
- e->ne_len);
- close(s);
- return(ENOSPC);
- }
- *pos++ = (unsigned char) e->ne_len;
- memcpy(pos, (indication) + sizeof(struct ndis_evt), e->ne_len);
- pos += e->ne_len;
- }
-
- len = sendto(sock, buf, pos - buf, 0, (struct sockaddr *) dst,
- sizeof(struct sockaddr_in));
-
- close(s);
- return(0);
-}
-
-static void
-usage(progname)
- char *progname;
-{
- fprintf(stderr, "Usage: ndis_events [-a] [-d] [-v]\n", progname);
- exit(1);
-}
-
-int
-main(argc, argv)
- int argc;
- char *argv[];
-{
- int s, r, n;
- struct sockaddr_in sin;
- char msg[NDIS_INDICATION_LEN];
- struct rt_msghdr *rtm;
- struct if_msghdr *ifm;
- char ifname[IFNAMSIZ];
- int ch;
-
- while ((ch = getopt(argc, argv, "dva")) != -1) {
- switch(ch) {
- case 'd':
- debug++;
- break;
- case 'v':
- verbose++;
- break;
- case 'a':
- all_events++;
- break;
- default:
- usage(PROGNAME);
- break;
- }
- }
-
- if (!debug && daemon(0, 0))
- err(1, "failed to daemonize ourselves");
-
- if (!debug)
- openlog(PROGNAME, LOG_PID | LOG_CONS, LOG_DAEMON);
-
- bzero((char *)&sin, sizeof(sin));
-
- /* Create a datagram socket. */
-
- s = socket(PF_INET, SOCK_DGRAM, 0);
- if (s < 0) {
- dbgmsg("socket creation failed");
- exit(1);
- }
-
- sin.sin_family = AF_INET;
- sin.sin_addr.s_addr = inet_addr("127.0.0.1");
- sin.sin_port = htons(WPA_SUPPLICANT_PORT);
-
- /* Create a routing socket. */
-
- r = socket (PF_ROUTE, SOCK_RAW, 0);
- if (r < 0) {
- dbgmsg("routing socket creation failed");
- exit(1);
- }
-
- /* Now sit and spin, waiting for events. */
-
- if (verbose)
- dbgmsg("Listening for events");
-
- while (1) {
- n = read(r, msg, NDIS_INDICATION_LEN);
- rtm = (struct rt_msghdr *)msg;
- if (rtm->rtm_type != RTM_IFINFO)
- continue;
- ifm = (struct if_msghdr *)msg;
- if (find_ifname(ifm->ifm_index, ifname))
- continue;
- if (strstr(ifname, "ndis")) {
- while(announce_event(ifname, s, &sin) == 0)
- ;
- } else {
- if (verbose)
- dbgmsg("Skipping ifinfo message from %s",
- ifname);
- }
- }
-
- /* NOTREACHED */
- exit(0);
-}
More information about the cvs-src
mailing list