PERFORCE change 140088 for review
Andrew Thompson
thompsa at FreeBSD.org
Tue Apr 15 21:46:04 UTC 2008
http://perforce.freebsd.org/chv.cgi?CH=140088
Change 140088 by thompsa at 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);
More information about the p4-projects
mailing list