cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

p80211conv.h (4667B)


      1/* SPDX-License-Identifier: (GPL-2.0 OR MPL-1.1) */
      2/*
      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
    125struct p80211_metawep {
    126	void *data;
    127	u8 iv[4];
    128	u8 icv[4];
    129};
    130
    131/* local ether header type */
    132struct wlan_ethhdr {
    133	u8 daddr[ETH_ALEN];
    134	u8 saddr[ETH_ALEN];
    135	__be16 type;
    136} __packed;
    137
    138/* local llc header type */
    139struct wlan_llc {
    140	u8 dsap;
    141	u8 ssap;
    142	u8 ctl;
    143} __packed;
    144
    145/* local snap header type */
    146struct wlan_snap {
    147	u8 oui[WLAN_IEEE_OUI_LEN];
    148	__be16 type;
    149} __packed;
    150
    151/* Circular include trick */
    152struct wlandevice;
    153
    154int skb_p80211_to_ether(struct wlandevice *wlandev, u32 ethconv,
    155			struct sk_buff *skb);
    156int skb_ether_to_p80211(struct wlandevice *wlandev, u32 ethconv,
    157			struct sk_buff *skb, struct p80211_hdr *p80211_hdr,
    158			struct p80211_metawep *p80211_wep);
    159
    160int p80211_stt_findproto(u16 proto);
    161
    162#endif