Author: adrian
Date: Mon Aug 26 09:52:05 2013
New Revision: 254900
URL: http://svnweb.freebsd.org/changeset/base/254900

Log:
  Migrate the ff_encap1() routine out into the normal output code.
  
  This will eventually be used by the A-MSDU encapsulation code that
  I'm writing - the sub-frame encapsulation requirement is the same.

Modified:
  head/sys/net80211/ieee80211_output.c
  head/sys/net80211/ieee80211_proto.h
  head/sys/net80211/ieee80211_superg.c

Modified: head/sys/net80211/ieee80211_output.c
==============================================================================
--- head/sys/net80211/ieee80211_output.c        Mon Aug 26 09:17:21 2013        
(r254899)
+++ head/sys/net80211/ieee80211_output.c        Mon Aug 26 09:52:05 2013        
(r254900)
@@ -3316,3 +3316,40 @@ ieee80211_beacon_update(struct ieee80211
 
        return len_changed;
 }
+
+/*
+ * Do Ethernet-LLC encapsulation for each payload in a fast frame
+ * tunnel encapsulation.  The frame is assumed to have an Ethernet
+ * header at the front that must be stripped before prepending the
+ * LLC followed by the Ethernet header passed in (with an Ethernet
+ * type that specifies the payload size).
+ */
+struct mbuf *
+ieee80211_ff_encap1(struct ieee80211vap *vap, struct mbuf *m,
+       const struct ether_header *eh)
+{
+       struct llc *llc;
+       uint16_t payload;
+
+       /* XXX optimize by combining m_adj+M_PREPEND */
+       m_adj(m, sizeof(struct ether_header) - sizeof(struct llc));
+       llc = mtod(m, struct llc *);
+       llc->llc_dsap = llc->llc_ssap = LLC_SNAP_LSAP;
+       llc->llc_control = LLC_UI;
+       llc->llc_snap.org_code[0] = 0;
+       llc->llc_snap.org_code[1] = 0;
+       llc->llc_snap.org_code[2] = 0;
+       llc->llc_snap.ether_type = eh->ether_type;
+       payload = m->m_pkthdr.len;              /* NB: w/o Ethernet header */
+
+       M_PREPEND(m, sizeof(struct ether_header), M_NOWAIT);
+       if (m == NULL) {                /* XXX cannot happen */
+               IEEE80211_DPRINTF(vap, IEEE80211_MSG_SUPERG,
+                       "%s: no space for ether_header\n", __func__);
+               vap->iv_stats.is_tx_nobuf++;
+               return NULL;
+       }
+       ETHER_HEADER_COPY(mtod(m, void *), eh);
+       mtod(m, struct ether_header *)->ether_type = htons(payload);
+       return m;
+}

Modified: head/sys/net80211/ieee80211_proto.h
==============================================================================
--- head/sys/net80211/ieee80211_proto.h Mon Aug 26 09:17:21 2013        
(r254899)
+++ head/sys/net80211/ieee80211_proto.h Mon Aug 26 09:52:05 2013        
(r254900)
@@ -125,6 +125,9 @@ int ieee80211_send_probereq(struct ieee8
                const uint8_t da[IEEE80211_ADDR_LEN],
                const uint8_t bssid[IEEE80211_ADDR_LEN],
                const uint8_t *ssid, size_t ssidlen);
+struct mbuf *  ieee80211_ff_encap1(struct ieee80211vap *, struct mbuf *,
+               const struct ether_header *);
+
 /*
  * The formation of ProbeResponse frames requires guidance to
  * deal with legacy clients.  When the client is identified as

Modified: head/sys/net80211/ieee80211_superg.c
==============================================================================
--- head/sys/net80211/ieee80211_superg.c        Mon Aug 26 09:17:21 2013        
(r254899)
+++ head/sys/net80211/ieee80211_superg.c        Mon Aug 26 09:52:05 2013        
(r254900)
@@ -330,43 +330,6 @@ ieee80211_ff_decap(struct ieee80211_node
 }
 
 /*
- * Do Ethernet-LLC encapsulation for each payload in a fast frame
- * tunnel encapsulation.  The frame is assumed to have an Ethernet
- * header at the front that must be stripped before prepending the
- * LLC followed by the Ethernet header passed in (with an Ethernet
- * type that specifies the payload size).
- */
-static struct mbuf *
-ff_encap1(struct ieee80211vap *vap, struct mbuf *m,
-       const struct ether_header *eh)
-{
-       struct llc *llc;
-       uint16_t payload;
-
-       /* XXX optimize by combining m_adj+M_PREPEND */
-       m_adj(m, sizeof(struct ether_header) - sizeof(struct llc));
-       llc = mtod(m, struct llc *);
-       llc->llc_dsap = llc->llc_ssap = LLC_SNAP_LSAP;
-       llc->llc_control = LLC_UI;
-       llc->llc_snap.org_code[0] = 0;
-       llc->llc_snap.org_code[1] = 0;
-       llc->llc_snap.org_code[2] = 0;
-       llc->llc_snap.ether_type = eh->ether_type;
-       payload = m->m_pkthdr.len;              /* NB: w/o Ethernet header */
-
-       M_PREPEND(m, sizeof(struct ether_header), M_NOWAIT);
-       if (m == NULL) {                /* XXX cannot happen */
-               IEEE80211_DPRINTF(vap, IEEE80211_MSG_SUPERG,
-                       "%s: no space for ether_header\n", __func__);
-               vap->iv_stats.is_tx_nobuf++;
-               return NULL;
-       }
-       ETHER_HEADER_COPY(mtod(m, void *), eh);
-       mtod(m, struct ether_header *)->ether_type = htons(payload);
-       return m;
-}
-
-/*
  * Fast frame encapsulation.  There must be two packets
  * chained with m_nextpkt.  We do header adjustment for
  * each, add the tunnel encapsulation, and then concatenate
@@ -424,10 +387,10 @@ ieee80211_ff_encap(struct ieee80211vap *
         * Now do tunnel encapsulation.  First, each
         * frame gets a standard encapsulation.
         */
-       m1 = ff_encap1(vap, m1, &eh1);
+       m1 = ieee80211_ff_encap1(vap, m1, &eh1);
        if (m1 == NULL)
                goto bad;
-       m2 = ff_encap1(vap, m2, &eh2);
+       m2 = ieee80211_ff_encap1(vap, m2, &eh2);
        if (m2 == NULL)
                goto bad;
 
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to