From owner-svn-src-all@FreeBSD.ORG Mon Apr 27 17:39:41 2009 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 997CE1065687; Mon, 27 Apr 2009 17:39:41 +0000 (UTC) (envelope-from sam@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 6C44A8FC1F; Mon, 27 Apr 2009 17:39:41 +0000 (UTC) (envelope-from sam@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n3RHdflr021452; Mon, 27 Apr 2009 17:39:41 GMT (envelope-from sam@svn.freebsd.org) Received: (from sam@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n3RHdfl0021450; Mon, 27 Apr 2009 17:39:41 GMT (envelope-from sam@svn.freebsd.org) Message-Id: <200904271739.n3RHdfl0021450@svn.freebsd.org> From: Sam Leffler Date: Mon, 27 Apr 2009 17:39:41 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r191571 - head/sys/net80211 X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 27 Apr 2009 17:39:42 -0000 Author: sam Date: Mon Apr 27 17:39:41 2009 New Revision: 191571 URL: http://svn.freebsd.org/changeset/base/191571 Log: Store the tx seq# of an 802.11 frame in the mbuf pkthdr; this will be used for s/w retransmit schemes that want to access this information w/o the overhead of decoding the raw frame. Note this also allows drivers to record this information w/o writing the frame when the seq# is obtained through an out-of-band mechanism (e.g. when a h/w assigned seq# is reported in a descriptor on tx done notification). Reviewed by: sephe, avatar Modified: head/sys/net80211/ieee80211_freebsd.h head/sys/net80211/ieee80211_output.c Modified: head/sys/net80211/ieee80211_freebsd.h ============================================================================== --- head/sys/net80211/ieee80211_freebsd.h Mon Apr 27 17:37:36 2009 (r191570) +++ head/sys/net80211/ieee80211_freebsd.h Mon Apr 27 17:39:41 2009 (r191571) @@ -248,6 +248,13 @@ struct mbuf *ieee80211_getmgtframe(uint8 #define M_AGE_GET(m) (m->m_pkthdr.csum_data) #define M_AGE_SUB(m,adj) (m->m_pkthdr.csum_data -= adj) +/* + * Store the sequence number. + */ +#define M_SEQNO_SET(m, seqno) \ + ((m)->m_pkthdr.tso_segsz = (seqno)) +#define M_SEQNO_GET(m) ((m)->m_pkthdr.tso_segsz) + #define MTAG_ABI_NET80211 1132948340 /* net80211 ABI */ struct ieee80211_cb { Modified: head/sys/net80211/ieee80211_output.c ============================================================================== --- head/sys/net80211/ieee80211_output.c Mon Apr 27 17:37:36 2009 (r191570) +++ head/sys/net80211/ieee80211_output.c Mon Apr 27 17:39:41 2009 (r191571) @@ -512,6 +512,7 @@ ieee80211_send_setup( seqno = ni->ni_txseqs[tid]++; *(uint16_t *)&wh->i_seq[0] = htole16(seqno << IEEE80211_SEQ_SEQ_SHIFT); + M_SEQNO_SET(m, seqno); if (IEEE80211_IS_MULTICAST(wh->i_addr1)) m->m_flags |= M_MCAST; @@ -1097,12 +1098,15 @@ ieee80211_encap(struct ieee80211vap *vap seqno = ni->ni_txseqs[tid]++; *(uint16_t *)wh->i_seq = htole16(seqno << IEEE80211_SEQ_SEQ_SHIFT); + M_SEQNO_SET(m, seqno); } } else { seqno = ni->ni_txseqs[IEEE80211_NONQOS_TID]++; *(uint16_t *)wh->i_seq = htole16(seqno << IEEE80211_SEQ_SEQ_SHIFT); + M_SEQNO_SET(m, seqno); } + /* check if xmit fragmentation is required */ txfrag = (m->m_pkthdr.len > vap->iv_fragthreshold && !IEEE80211_IS_MULTICAST(wh->i_addr1) &&