From nobody@FreeBSD.org  Thu Dec 31 15:25:16 2009
Return-Path: <nobody@FreeBSD.org>
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 8AE41106566B
	for <freebsd-gnats-submit@FreeBSD.org>; Thu, 31 Dec 2009 15:25:16 +0000 (UTC)
	(envelope-from nobody@FreeBSD.org)
Received: from www.freebsd.org (www.freebsd.org [IPv6:2001:4f8:fff6::21])
	by mx1.freebsd.org (Postfix) with ESMTP id 61AED8FC18
	for <freebsd-gnats-submit@FreeBSD.org>; Thu, 31 Dec 2009 15:25:16 +0000 (UTC)
Received: from www.freebsd.org (localhost [127.0.0.1])
	by www.freebsd.org (8.14.3/8.14.3) with ESMTP id nBVFPGVn044090
	for <freebsd-gnats-submit@FreeBSD.org>; Thu, 31 Dec 2009 15:25:16 GMT
	(envelope-from nobody@www.freebsd.org)
Received: (from nobody@localhost)
	by www.freebsd.org (8.14.3/8.14.3/Submit) id nBVFPG6E044089;
	Thu, 31 Dec 2009 15:25:16 GMT
	(envelope-from nobody)
Message-Id: <200912311525.nBVFPG6E044089@www.freebsd.org>
Date: Thu, 31 Dec 2009 15:25:16 GMT
From: Paul <onemda@gmail.com>
To: freebsd-gnats-submit@FreeBSD.org
Subject: ndis is missing media status reporting
X-Send-Pr-Version: www-3.1
X-GNATS-Notify:

>Number:         142197
>Category:       kern
>Synopsis:       [ndis] [patch] ndis is missing media status reporting
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Thu Dec 31 15:30:02 UTC 2009
>Closed-Date:    Sun Jun 12 08:11:20 UTC 2011
>Last-Modified:  Sun Jun 12 08:11:20 UTC 2011
>Originator:     Paul
>Release:        CURRENT
>Organization:
>Environment:
FreeBSD dhcppc0 9.0-CURRENT FreeBSD 9.0-CURRENT #4 r201338M: Thu Dec 31 13:28:26 UTC 2009     root@dhcppc0:/usr/obj/usr/src/sys/kernel  i386
>Description:

>How-To-Repeat:

>Fix:


Patch attached with submission follows:

--- /sys/dev/if_ndis/if_ndis.c	2009-12-31 12:03:10.000000000 +0000
+++ if_ndis.c	2009-12-31 15:05:30.000000000 +0000
@@ -189,6 +189,7 @@
 static void ndis_getstate_80211	(struct ndis_softc *);
 static void ndis_setstate_80211	(struct ndis_softc *);
 static void ndis_auth_and_assoc	(struct ndis_softc *, struct ieee80211vap *);
+static void ndis_media_status	(struct ifnet *, struct ifmediareq *);
 static int ndis_set_cipher	(struct ndis_softc *, int);
 static int ndis_set_wpa		(struct ndis_softc *, void *, int);
 static int ndis_add_key		(struct ieee80211vap *,
@@ -993,7 +994,7 @@
 	vap->iv_newstate = ndis_newstate;
 
 	/* complete setup */
-	ieee80211_vap_attach(vap, ieee80211_media_change, ieee80211_media_status);
+	ieee80211_vap_attach(vap, ieee80211_media_change, ndis_media_status);
 	ic->ic_opmode = opmode;
 	/* install key handing routines */
 	vap->iv_key_set = ndis_add_key;
@@ -2237,6 +2238,23 @@
 }
 
 static void
+ndis_media_status(struct ifnet *ifp, struct ifmediareq *imr)
+{
+	struct ieee80211vap *vap = ifp->if_softc;
+	struct ndis_softc *sc = vap->iv_ic->ic_ifp->if_softc;
+	uint32_t txrate;
+	size_t len;
+
+	if (!NDIS_INITIALIZED(sc))
+		return;
+
+	len = sizeof(txrate);
+	if (ndis_get_info(sc, OID_GEN_LINK_SPEED, &txrate, &len) == 0)
+		vap->iv_bss->ni_txrate = txrate / 5000;
+	ieee80211_media_status(ifp, imr);
+}
+
+static void
 ndis_setstate_80211(sc)
 	struct ndis_softc	*sc;
 {
@@ -2696,13 +2714,6 @@
 	    bs->nwbx_ssid.ns_ssidlen);
 	ni->ni_esslen = bs->nwbx_ssid.ns_ssidlen;
 
-	len = sizeof(arg);
-	rval = ndis_get_info(sc, OID_GEN_LINK_SPEED, &arg, &len);
-	if (rval)
-		device_printf(sc->ndis_dev, "get link speed failed: %d\n",
-		    rval);
-	ni->ni_txrate = arg / 5000;
-
 	if (ic->ic_caps & IEEE80211_C_PMGT) {
 		len = sizeof(arg);
 		rval = ndis_get_info(sc, OID_802_11_POWER_MODE, &arg, &len);


>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: freebsd-bugs->freebsd-net 
Responsible-Changed-By: linimon 
Responsible-Changed-When: Thu Dec 31 16:49:09 UTC 2009 
Responsible-Changed-Why:  
Over to maintainer(s). 

http://www.freebsd.org/cgi/query-pr.cgi?pr=142197 

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: kern/142197: commit references a PR
Date: Tue,  5 Jan 2010 23:00:20 +0000 (UTC)

 Author: rpaulo
 Date: Tue Jan  5 22:59:59 2010
 New Revision: 201620
 URL: http://svn.freebsd.org/changeset/base/201620
 
 Log:
   Add net80211 media status reporting.
   
   PR:		142197
   Submitted by:	Paul <onemda at gmail.com>
 
 Modified:
   head/sys/dev/if_ndis/if_ndis.c
 
 Modified: head/sys/dev/if_ndis/if_ndis.c
 ==============================================================================
 --- head/sys/dev/if_ndis/if_ndis.c	Tue Jan  5 22:53:20 2010	(r201619)
 +++ head/sys/dev/if_ndis/if_ndis.c	Tue Jan  5 22:59:59 2010	(r201620)
 @@ -189,6 +189,7 @@ static int ndis_set_offload	(struct ndis
  static void ndis_getstate_80211	(struct ndis_softc *);
  static void ndis_setstate_80211	(struct ndis_softc *);
  static void ndis_auth_and_assoc	(struct ndis_softc *, struct ieee80211vap *);
 +static void ndis_media_status	(struct ifnet *, struct ifmediareq *);
  static int ndis_set_cipher	(struct ndis_softc *, int);
  static int ndis_set_wpa		(struct ndis_softc *, void *, int);
  static int ndis_add_key		(struct ieee80211vap *,
 @@ -993,7 +994,7 @@ ndis_vap_create(struct ieee80211com *ic,
  	vap->iv_newstate = ndis_newstate;
  
  	/* complete setup */
 -	ieee80211_vap_attach(vap, ieee80211_media_change, ieee80211_media_status);
 +	ieee80211_vap_attach(vap, ieee80211_media_change, ndis_media_status);
  	ic->ic_opmode = opmode;
  	/* install key handing routines */
  	vap->iv_key_set = ndis_add_key;
 @@ -2237,6 +2238,23 @@ ndis_set_wpa(sc, ie, ielen)
  }
  
  static void
 +ndis_media_status(struct ifnet *ifp, struct ifmediareq *imr)
 +{
 +	struct ieee80211vap *vap = ifp->if_softc;
 +	struct ndis_softc *sc = vap->iv_ic->ic_ifp->if_softc;
 +	uint32_t txrate;
 +	size_t len;
 +
 +	if (!NDIS_INITIALIZED(sc))
 +		return;
 +
 +	len = sizeof(txrate);
 +	if (ndis_get_info(sc, OID_GEN_LINK_SPEED, &txrate, &len) == 0)
 +		vap->iv_bss->ni_txrate = txrate / 5000;
 +	ieee80211_media_status(ifp, imr);
 +}
 +
 +static void
  ndis_setstate_80211(sc)
  	struct ndis_softc	*sc;
  {
 @@ -2696,13 +2714,6 @@ ndis_getstate_80211(sc)
  	    bs->nwbx_ssid.ns_ssidlen);
  	ni->ni_esslen = bs->nwbx_ssid.ns_ssidlen;
  
 -	len = sizeof(arg);
 -	rval = ndis_get_info(sc, OID_GEN_LINK_SPEED, &arg, &len);
 -	if (rval)
 -		device_printf(sc->ndis_dev, "get link speed failed: %d\n",
 -		    rval);
 -	ni->ni_txrate = arg / 5000;
 -
  	if (ic->ic_caps & IEEE80211_C_PMGT) {
  		len = sizeof(arg);
  		rval = ndis_get_info(sc, OID_802_11_POWER_MODE, &arg, &len);
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 

From: Roman Bogorodskiy <novel@FreeBSD.org>
To: bug-followup@FreeBSD.org, onemda@gmail.com, rpaulo@FreeBSD.org
Cc:  
Subject: Re: kern/142197: [ndis] [patch] ndis is missing media status
 reporting
Date: Wed, 6 Jan 2010 12:32:42 +0300

 --uAKRQypu60I7Lcqm
 Content-Type: text/plain; charset=us-ascii
 Content-Disposition: inline
 Content-Transfer-Encoding: quoted-printable
 
 Hello,
 
 Seems like there's a minor problem with that:
 
 cc1: warnings being treated as errors
 /usr/src/sys/modules/if_ndis/../../dev/if_ndis/if_ndis.c: In function 'ndis=
 _media_status':
 /usr/src/sys/modules/if_ndis/../../dev/if_ndis/if_ndis.c:2252: warning: pas=
 sing argument 4 of 'ndis_get_info' from incompatible pointer type
 *** Error code 1
 
 As ndis_get_info accepts 'int', not 'size_t', so after applying this:
 
 --- if_ndis.c.orig	2010-01-06 12:15:17.000000000 +0300
 +++ if_ndis.c	2010-01-06 12:17:03.000000000 +0300
 @@ -2243,7 +2243,7 @@
  	struct ieee80211vap *vap =3D ifp->if_softc;
  	struct ndis_softc *sc =3D vap->iv_ic->ic_ifp->if_softc;
  	uint32_t txrate;
 -	size_t len;
 +	int len;
 =20
  	if (!NDIS_INITIALIZED(sc))
  		return;
 
 it compiles fine.
 
 Roman Bogorodskiy
 
 --uAKRQypu60I7Lcqm
 Content-Type: application/pgp-signature
 Content-Disposition: inline
 
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1.4.10 (FreeBSD)
 
 iJwEAQECAAYFAktEWLAACgkQgHRbOB2qykYkkQP9HBbpfcBkyEl7eLyZz1Egga8i
 MkkjIWtZLDYzfP4I40n1msmydvWPiiFMpXl7M7I4F9qx4dygWhFeYhTSpyRdpxQx
 aWk9c0exeYae5y+hjfciHZ4yEdJtV8A7yOkAXs4Sgi9hYaomWebkK4svUwbVyQsR
 nlb7YXKsPMnLUxkPtmo=
 =W1Zn
 -----END PGP SIGNATURE-----
 
 --uAKRQypu60I7Lcqm--

From: Paul B Mahol <onemda@gmail.com>
To: Roman Bogorodskiy <novel@freebsd.org>
Cc: bug-followup@freebsd.org, rpaulo@freebsd.org
Subject: Re: kern/142197: [ndis] [patch] ndis is missing media status 
	reporting
Date: Wed, 6 Jan 2010 11:54:48 +0100

 On 1/6/10, Roman Bogorodskiy <novel@freebsd.org> wrote:
 > Hello,
 >
 > Seems like there's a minor problem with that:
 >
 > cc1: warnings being treated as errors
 > /usr/src/sys/modules/if_ndis/../../dev/if_ndis/if_ndis.c: In function
 > 'ndis_media_status':
 > /usr/src/sys/modules/if_ndis/../../dev/if_ndis/if_ndis.c:2252: warning:
 > passing argument 4 of 'ndis_get_info' from incompatible pointer type
 > *** Error code 1
 >
 > As ndis_get_info accepts 'int', not 'size_t', so after applying this:
 >
 > --- if_ndis.c.orig	2010-01-06 12:15:17.000000000 +0300
 > +++ if_ndis.c	2010-01-06 12:17:03.000000000 +0300
 > @@ -2243,7 +2243,7 @@
 >  	struct ieee80211vap *vap = ifp->if_softc;
 >  	struct ndis_softc *sc = vap->iv_ic->ic_ifp->if_softc;
 >  	uint32_t txrate;
 > -	size_t len;
 > +	int len;
 >
 >  	if (!NDIS_INITIALIZED(sc))
 >  		return;
 >
 > it compiles fine.
 >
 > Roman Bogorodskiy
 >
 
 Right, I generated patch from my git repo which is less broken then
 code in CURRENT.
 
 ndis_get_info should really use size_t and not int for *buflen
 
 -- 
 Paul B Mahol
State-Changed-From-To: open->patched 
State-Changed-By: gavin 
State-Changed-When: Wed Jan 6 12:02:52 UTC 2010 
State-Changed-Why:  
Committed to HEAD in r201620 


Responsible-Changed-From-To: freebsd-net->rpaulo 
Responsible-Changed-By: gavin 
Responsible-Changed-When: Wed Jan 6 12:02:52 UTC 2010 
Responsible-Changed-Why:  
Over to rpaulo as MFC reminder 

http://www.freebsd.org/cgi/query-pr.cgi?pr=142197 
Responsible-Changed-From-To: rpaulo->freebsd-bugs 
Responsible-Changed-By: linimon 
Responsible-Changed-When: Sat Dec 4 16:18:13 UTC 2010 
Responsible-Changed-Why:  
rpaulo has return his commit bit for safekeeing. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=142197 
State-Changed-From-To: patched->closed 
State-Changed-By: pluknet 
State-Changed-When: Sun Jun 12 08:09:28 UTC 2011 
State-Changed-Why:  
Merged to 8-STABLE in svn 215829 by bschmidt. 
Close this PR per submitter request. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=142197 
>Unformatted:
