From owner-p4-projects@FreeBSD.ORG Tue Apr 15 21:46:04 2008 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id EB8941065674; Tue, 15 Apr 2008 21:46:03 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id ADE351065670 for ; Tue, 15 Apr 2008 21:46:03 +0000 (UTC) (envelope-from thompsa@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 9BD9B8FC1E for ; Tue, 15 Apr 2008 21:46:03 +0000 (UTC) (envelope-from thompsa@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.1/8.14.1) with ESMTP id m3FLk3Ue030261 for ; Tue, 15 Apr 2008 21:46:03 GMT (envelope-from thompsa@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.1/8.14.1/Submit) id m3FLk3Mn030259 for perforce@freebsd.org; Tue, 15 Apr 2008 21:46:03 GMT (envelope-from thompsa@freebsd.org) Date: Tue, 15 Apr 2008 21:46:03 GMT Message-Id: <200804152146.m3FLk3Mn030259@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to thompsa@freebsd.org using -f From: Andrew Thompson To: Perforce Change Reviews Cc: Subject: PERFORCE change 140088 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 15 Apr 2008 21:46:04 -0000 http://perforce.freebsd.org/chv.cgi?CH=140088 Change 140088 by thompsa@thompsa_burger on 2008/04/15 21:45:19 Add enough goo to get NDIS working, tested with WPA. Affected files ... .. //depot/projects/vap/sys/dev/if_ndis/if_ndis.c#12 edit .. //depot/projects/vap/sys/dev/if_ndis/if_ndisvar.h#9 edit .. //depot/projects/vap/sys/net80211/ieee80211_ioctl.c#54 edit .. //depot/projects/vap/usr.sbin/wpa/wpa_supplicant/Packet32.c#3 edit Differences ... ==== //depot/projects/vap/sys/dev/if_ndis/if_ndis.c#12 (text+ko) ==== @@ -140,6 +140,8 @@ static void ndis_vap_delete (struct ieee80211vap *); static void ndis_tick (void *); static void ndis_ticktask (device_object *, void *); +static int ndis_raw_xmit (struct ieee80211_node *, struct mbuf *, + const struct ieee80211_bpf_params *); static void ndis_start (struct ifnet *); static void ndis_starttask (device_object *, void *); static void ndis_resettask (device_object *, void *); @@ -713,6 +715,7 @@ TASK_INIT(&sc->ndis_scantask, 0, ndis_scan, sc); ic->ic_ifp = ifp; + ic->ic_opmode = IEEE80211_M_STA; ic->ic_phytype = IEEE80211_T_DS; ic->ic_caps = IEEE80211_C_IBSS; setbit(ic->ic_modecaps, IEEE80211_MODE_AUTO); @@ -895,6 +898,7 @@ ic->ic_caps |= IEEE80211_C_PMGT; bcopy(eaddr, &ic->ic_myaddr, sizeof(eaddr)); ieee80211_ifattach(ic); + ic->ic_raw_xmit = ndis_raw_xmit; ic->ic_scan_start = ndis_scan_start; ic->ic_scan_end = ndis_scan_end; ic->ic_set_channel = ndis_set_channel; @@ -1728,6 +1732,16 @@ return; } +static int +ndis_raw_xmit(struct ieee80211_node *ni, struct mbuf *m, + const struct ieee80211_bpf_params *params) +{ + /* no support; just discard */ + m_freem(m); + ieee80211_free_node(ni); + return 0; +} + static void ndis_starttask(d, arg) device_object *d; @@ -1842,7 +1856,8 @@ * to him. */ - BPF_MTAP(ifp, m); + if (!sc->ndis_80211) /* XXX handle 80211 */ + BPF_MTAP(ifp, m); /* * The array that p0 points to must appear contiguous, ==== //depot/projects/vap/sys/dev/if_ndis/if_ndisvar.h#9 (text+ko) ==== ==== //depot/projects/vap/sys/net80211/ieee80211_ioctl.c#54 (text+ko) ==== @@ -3232,6 +3232,14 @@ break; } break; + /* Pass NDIS ioctls up to the driver */ + case SIOCGDRVSPEC: + case SIOCSDRVSPEC: + case SIOCGPRIVATE_0: { + struct ifnet *parent = vap->iv_ic->ic_ifp; + error = parent->if_ioctl(parent, cmd, data); + break; + } default: error = ether_ioctl(ifp, cmd, data); break; ==== //depot/projects/vap/usr.sbin/wpa/wpa_supplicant/Packet32.c#3 (text+ko) ==== @@ -286,7 +286,7 @@ ifm = (struct if_msghdr *)next; if (ifm->ifm_type == RTM_IFINFO) { sdl = (struct sockaddr_dl *)(ifm + 1); - if (strnstr(sdl->sdl_data, "ndis", sdl->sdl_nlen)) { + if (strnstr(sdl->sdl_data, "wlan", sdl->sdl_nlen)) { if ((spc + sdl->sdl_nlen) > *len) { free(buf); return(FALSE); @@ -319,7 +319,7 @@ ifm = (struct if_msghdr *)next; if (ifm->ifm_type == RTM_IFINFO) { sdl = (struct sockaddr_dl *)(ifm + 1); - if (strnstr(sdl->sdl_data, "ndis", sdl->sdl_nlen)) { + if (strnstr(sdl->sdl_data, "wlan", sdl->sdl_nlen)) { if ((spc + sdl->sdl_nlen) > *len) { free(buf); return(FALSE);