linux/drivers/staging/wlan-ng/p80211conv.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: (GPL-2.0 OR MPL-1.1) */
   2/* p80211conv.h
   3 *
   4 * Ether/802.11 conversions and packet buffer routines
   5 *
   6 * Copyright (C) 1999 AbsoluteValue Systems, Inc.  All Rights Reserved.
   7 * --------------------------------------------------------------------
   8 *
   9 * linux-wlan
  10 *
  11 *   The contents of this file are subject to the Mozilla Public
  12 *   License Version 1.1 (the "License"); you may not use this file
  13 *   except in compliance with the License. You may obtain a copy of
  14 *   the License at http://www.mozilla.org/MPL/
  15 *
  16 *   Software distributed under the License is distributed on an "AS
  17 *   IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  18 *   implied. See the License for the specific language governing
  19 *   rights and limitations under the License.
  20 *
  21 *   Alternatively, the contents of this file may be used under the
  22 *   terms of the GNU Public License version 2 (the "GPL"), in which
  23 *   case the provisions of the GPL are applicable instead of the
  24 *   above.  If you wish to allow the use of your version of this file
  25 *   only under the terms of the GPL and not to allow others to use
  26 *   your version of this file under the MPL, indicate your decision
  27 *   by deleting the provisions above and replace them with the notice
  28 *   and other provisions required by the GPL.  If you do not delete
  29 *   the provisions above, a recipient may use your version of this
  30 *   file under either the MPL or the GPL.
  31 *
  32 * --------------------------------------------------------------------
  33 *
  34 * Inquiries regarding the linux-wlan Open Source project can be
  35 * made directly to:
  36 *
  37 * AbsoluteValue Systems Inc.
  38 * info@linux-wlan.com
  39 * http://www.linux-wlan.com
  40 *
  41 * --------------------------------------------------------------------
  42 *
  43 * Portions of the development of this software were funded by
  44 * Intersil Corporation as part of PRISM(R) chipset product development.
  45 *
  46 * --------------------------------------------------------------------
  47 *
  48 * This file declares the functions, types and macros that perform
  49 * Ethernet to/from 802.11 frame conversions.
  50 *
  51 * --------------------------------------------------------------------
  52 */
  53
  54#ifndef _LINUX_P80211CONV_H
  55#define _LINUX_P80211CONV_H
  56
  57#define WLAN_IEEE_OUI_LEN       3
  58
  59#define WLAN_ETHCONV_ENCAP      1
  60#define WLAN_ETHCONV_8021h      3
  61
  62#define P80211CAPTURE_VERSION   0x80211001
  63
  64#define P80211_FRMMETA_MAGIC    0x802110
  65
  66struct p80211_rxmeta {
  67        struct wlandevice *wlandev;
  68
  69        u64 mactime;            /* Hi-rez MAC-supplied time value */
  70        u64 hosttime;           /* Best-rez host supplied time value */
  71
  72        unsigned int rxrate;    /* Receive data rate in 100kbps */
  73        unsigned int priority;  /* 0-15, 0=contention, 6=CF */
  74        int signal;             /* An SSI, see p80211netdev.h */
  75        int noise;              /* An SSI, see p80211netdev.h */
  76        unsigned int channel;   /* Receive channel (mostly for snifs) */
  77        unsigned int preamble;  /* P80211ENUM_preambletype_* */
  78        unsigned int encoding;  /* P80211ENUM_encoding_* */
  79
  80};
  81
  82struct p80211_frmmeta {
  83        unsigned int magic;
  84        struct p80211_rxmeta *rx;
  85};
  86
  87void p80211skb_free(struct wlandevice *wlandev, struct sk_buff *skb);
  88int p80211skb_rxmeta_attach(struct wlandevice *wlandev, struct sk_buff *skb);
  89void p80211skb_rxmeta_detach(struct sk_buff *skb);
  90
  91static inline struct p80211_frmmeta *p80211skb_frmmeta(struct sk_buff *skb)
  92{
  93        struct p80211_frmmeta *frmmeta = (struct p80211_frmmeta *)skb->cb;
  94
  95        return frmmeta->magic == P80211_FRMMETA_MAGIC ? frmmeta : NULL;
  96}
  97
  98static inline struct p80211_rxmeta *p80211skb_rxmeta(struct sk_buff *skb)
  99{
 100        struct p80211_frmmeta *frmmeta = p80211skb_frmmeta(skb);
 101
 102        return frmmeta ? frmmeta->rx : NULL;
 103}
 104
 105/*
 106 * Frame capture header.  (See doc/capturefrm.txt)
 107 */
 108struct p80211_caphdr {
 109        __be32 version;
 110        __be32 length;
 111        __be64 mactime;
 112        __be64 hosttime;
 113        __be32 phytype;
 114        __be32 channel;
 115        __be32 datarate;
 116        __be32 antenna;
 117        __be32 priority;
 118        __be32 ssi_type;
 119        __be32 ssi_signal;
 120        __be32 ssi_noise;
 121        __be32 preamble;
 122        __be32 encoding;
 123};
 124
 125/* buffer free method pointer type */
 126typedef void (*freebuf_method_t) (void *buf, int size);
 127
 128struct p80211_metawep {
 129        void *data;
 130        u8 iv[4];
 131        u8 icv[4];
 132};
 133
 134/* local ether header type */
 135struct wlan_ethhdr {
 136        u8 daddr[ETH_ALEN];
 137        u8 saddr[ETH_ALEN];
 138        __be16 type;
 139} __packed;
 140
 141/* local llc header type */
 142struct wlan_llc {
 143        u8 dsap;
 144        u8 ssap;
 145        u8 ctl;
 146} __packed;
 147
 148/* local snap header type */
 149struct wlan_snap {
 150        u8 oui[WLAN_IEEE_OUI_LEN];
 151        __be16 type;
 152} __packed;
 153
 154/* Circular include trick */
 155struct wlandevice;
 156
 157int skb_p80211_to_ether(struct wlandevice *wlandev, u32 ethconv,
 158                        struct sk_buff *skb);
 159int skb_ether_to_p80211(struct wlandevice *wlandev, u32 ethconv,
 160                        struct sk_buff *skb, union p80211_hdr *p80211_hdr,
 161                        struct p80211_metawep *p80211_wep);
 162
 163int p80211_stt_findproto(u16 proto);
 164
 165#endif
 166