svn commit: r189493 - projects/mesh11s/sys/net80211
Rui Paulo
rpaulo at FreeBSD.org
Sat Mar 7 10:57:04 PST 2009
Author: rpaulo
Date: Sat Mar 7 18:57:03 2009
New Revision: 189493
URL: http://svn.freebsd.org/changeset/base/189493
Log:
Add code to support IE processing.
Modified:
projects/mesh11s/sys/net80211/ieee80211.h
Modified: projects/mesh11s/sys/net80211/ieee80211.h
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211.h Sat Mar 7 18:20:21 2009 (r189492)
+++ projects/mesh11s/sys/net80211/ieee80211.h Sat Mar 7 18:57:03 2009 (r189493)
@@ -696,6 +696,36 @@ enum {
IEEE80211_ELEMID_TPC = 150,
IEEE80211_ELEMID_CCKM = 156,
IEEE80211_ELEMID_VENDOR = 221, /* vendor private */
+
+ /*
+ * XXXRP: new IEs for 11s. Keep them compatible with Linux until
+ * ANA defines new ones.
+ */
+ IEEE80211_ELEMID_MESHCONF = 33,
+ IEEE80211_ELEMID_MESHID = 34,
+ IEEE80211_ELEMID_MESHLINK = 35,
+ IEEE80211_ELEMID_MESHCNGST = 36,
+ IEEE80211_ELEMID_MESHPEER = 37,
+ IEEE80211_ELEMID_MESHCSA = 38,
+ IEEE80211_ELEMID_MESHTIM = 39,
+ IEEE80211_ELEMID_MESHAWAKEW = 40,
+ IEEE80211_ELEMID_MESHBEACONT = 41,
+ IEEE80211_ELEMID_MESHTIMINGINFO = 42,
+ IEEE80211_ELEMID_MESHSYNCPROTO = 43,
+ IEEE80211_ELEMID_MESHDAOPSREQ = 44, /* MDAOP Setup Request */
+ IEEE80211_ELEMID_MESHDAOPSREPLY = 45, /* MDAOP Setup Request */
+ IEEE80211_ELEMID_MESHDAOPADV = 46, /* MDAOP Advertisements */
+ IEEE80211_ELEMID_MESHDAOPST = 47, /* MDAOP Set Teardown */
+ IEEE80211_ELEMID_MESHPANN = 48,
+ IEEE80211_ELEMID_MESHRANN = 49,
+ IEEE80211_ELEMID_MESHPREQ = 50,
+ IEEE80211_ELEMID_MESHPREP = 51,
+ IEEE80211_ELEMID_MESHPERR = 52,
+ IEEE80211_ELEMID_MESHPU = 53,
+ IEEE80211_ELEMID_MESHPUC = 54,
+ IEEE80211_ELEMID_MESHSC = 55,
+ IEEE80211_ELEMID_MESHSA = 56,
+ IEEE80211_ELEMID_MESHACT = 57, /* Anti-Clogging Token */
};
struct ieee80211_tim_ie {
@@ -734,6 +764,253 @@ struct ieee80211_csa_ie {
} __packed;
/*
+ * 802.11s Information Elements.
+ */
+/* Mesh Configuration */
+struct ieee80211_meshconf_ie {
+ uint8_t conf_ie; /* IEEE80211_ELEMID_MESHCONF */
+ uint8_t conf_len;
+ uint8_t conf_ver;
+ uint32_t conf_apspi; /* Active Path Sel. Proto. ID */
+ uint32_t conf_apsmi; /* APS Metric Identifier */
+ uint32_t conf_ccmi; /* Congestion Control Mode ID */
+ uint8_t conf_meshinfo;
+ uint8_t conf_meshcap;
+} __packed;
+
+/* Mesh Identifier */
+struct ieee80211_meshid_ie {
+ uint8_t id_ie; /* IEEE80211_ELEMID_MESHID */
+ uint8_t id_len;
+} __packed;
+
+#define IEEE80211_MESHID_MAX_SIZE \
+ (sizeof(struct ieee80211_meshid_ie) + 32)
+
+/* Link Metric Report */
+struct ieee80211_meshlink_ie {
+ uint8_t link_ie; /* IEEE80211_ELEMID_MESHLINK */
+ uint8_t link_len;
+ /* XXXRP: missing variable metric */
+} __packed;
+
+/* Congestion Notification */
+struct ieee80211_meshcngst_ie {
+ uint8_t cngst_ie; /* IEEE80211_ELEMID_MESHCNGST */
+ uint8_t cngst_len;
+ uint16_t cngst_timer[4]; /* Expiration Timers: AC_BK,
+ AC_BE, AC_VI, AC_VO */
+} __packed;
+
+/* Peer Link Management */
+struct ieee80211_meshpeer_ie {
+ uint8_t peer_ie; /* IEEE80211_ELEMID_MESHPEER */
+ uint8_t peer_len;
+ uint8_t peer_subtype;
+ uint16_t peer_llinkid; /* Local Link ID */
+ uint16_t peer_linkid; /* Peer Link ID */
+ uint16_t peer_rcode;
+} __packed;
+
+enum {
+ IEEE80211_MESH_PEER_LINK_OPEN = 0,
+ IEEE80211_MESH_PEER_LINK_CONFIRM = 1,
+ IEEE80211_MESH_PEER_LINK_CLOSE = 2,
+ /* values 3-255 are reserved */
+};
+
+/* Mesh Channel Switch Annoucement */
+struct ieee80211_meshcsa_ie {
+ uint8_t csa_ie; /* IEEE80211_ELEMID_MESHCSA */
+ uint8_t csa_len;
+ uint8_t csa_mode;
+ uint8_t csa_newclass; /* New Regulatory Class */
+ uint8_t csa_newchan;
+ uint8_t csa_precvalue; /* Precedence Value */
+ uint8_t csa_count;
+} __packed;
+
+/* XXXRP: this is equal to the non mesh version. Should we simplify ? */
+/* Mesh TIM */
+struct ieee80211_meshtim_ie {
+ uint8_t tim_ie; /* IEEE80211_ELEMID_MESHTIM */
+ uint8_t tim_len;
+ uint8_t tim_count; /* DTIM count */
+ uint8_t tim_period; /* DTIM period */
+ uint8_t tim_bitctl; /* bitmap control */
+ uint8_t tim_bitmap[1]; /* variable-length bitmap */
+} __packed;
+
+/* Mesh Awake Window */
+struct ieee80211_meshawakew_ie {
+ uint8_t awakew_ie; /* IEEE80211_ELEMID_MESHAWAKEW */
+ uint8_t awakew_len;
+ uint8_t awakew_windowlen; /* in TUs */
+} __packed;
+
+/* Mesh Beacon Timing */
+struct ieee80211_meshbeacont_ie {
+ uint8_t beacont_ie; /* IEEE80211_ELEMID_MESHBEACONT */
+ uint8_t beacont_len;
+ struct {
+ uint8_t mp_aid; /* Least Octet of AID */
+ uint16_t mp_btime; /* Beacon Time */
+ uint16_t mp_bint; /* Beacon Interval */
+ } mp[1] __packed; /* NB: variable size */
+} __packed;
+
+/* Mesh Timing Info */
+struct ieee80211_meshtinfo_ie {
+ uint8_t tinfo_ie; /* IEEE80211_ELEMID_MESHTIMINGINFO */
+ uint8_t tinfo_len;
+ uint8_t tinfo_field;
+} __packed;
+
+#define IEEE80211_MESH_TINFO_BEACON_PARAMS_CHANGED (1 << 8)
+#define IEEE80211_MESH_TINFO_MDA_ENABLED (1 << 7)
+
+/* Synchronization Protocol */
+struct ieee80211_meshsyncproto_ie {
+ uint8_t syncproto_ie; /* IEEE80211_ELEMID_MESHSYNCPROTO */
+ uint8_t syncproto_len;
+ uint32_t syncproto_id; /* Sync Protocol ID OUI */
+} __packed;
+
+/* Neighbour Offset Protocol */
+#define IEEE80211_MESH_SYNCPROTO_NEIGHOFFSET_OUI 0x000fac
+#define IEEE80211_MESH_SYNCPROTO_NEIGHOFFSET_VALUE 0
+
+/* MDAOP Setup Request */
+struct ieee80211_meshdaopsreq_ie {
+ uint8_t daopsreq_ie; /* IEEE80211_ELEMID_MESHDAOPSREQ */
+ uint8_t daopsreq_len;
+ uint8_t daopsreq_setid;
+ uint32_t daposreq_reserv; /* MDAOP Reservation */
+} __packed;
+
+/* MDAOP Setup Reply */
+struct ieee80211_meshdaopsrep_ie {
+ uint8_t daopsrep_ie; /* IEEE80211_ELEMID_MESHDAOPSREPLY */
+ uint8_t daopsrep_len;
+ uint8_t daopsrep_setid;
+ uint8_t daopsrep_code; /* Reply Code */
+ uint8_t daopsrep_reserv; /* MDAOP Reservation */
+} __packed;
+
+enum {
+ IEEE80211_MESH_DAOP_REPLY_ACCEPT = 0,
+ IEEE80211_MESH_DAOP_REPLY_RESERV_CONFLICT = 1,
+ IEEE80211_MESH_DAOP_REPLY_MAF_LIMIT = 2,
+ /* everything else is reserved */
+};
+
+/* MDAOP Advertisements */
+/* TBD */
+
+
+/* MDAOP Set Teardown */
+struct ieee80211_meshdaopst_ie {
+ uint8_t daopsrep_ie; /* IEEE80211_ELEMID_MESHDAOPSREP */
+ uint8_t daopsrep_len;
+ uint8_t daopsrep_setid;
+ uint8_t daopsrep_setowner[IEEE80211_ADDR_LEN];
+} __packed;
+
+/* Portal (MP) Annoucement */
+struct ieee80211_meshpann_ie {
+ uint8_t pann_ie; /* IEEE80211_ELEMID_MESHPANN */
+ uint8_t pann_len;
+ uint8_t pann_flags;
+ uint8_t pann_hopcount;
+ uint8_t pann_ttl;
+ uint8_t pann_addr[IEEE80211_ADDR_LEN];
+ uint8_t pann_seq; /* PANN Sequence Number */
+} __packed;
+
+/* Root (MP) Annoucement */
+struct ieee80211_meshrann_ie {
+ uint8_t rann_ie; /* IEEE80211_ELEMID_MESHRANN */
+ uint8_t rann_len;
+ uint8_t rann_flags;
+ uint8_t rann_hopcount;
+ uint8_t rann_ttl;
+ uint8_t rann_addr[IEEE80211_ADDR_LEN];
+ uint32_t rann_seq; /* HWMP Sequence Number */
+ uint32_t rann_metric;
+} __packed;
+
+/* Mesh Path Request */
+struct ieee80211_meshpreq_ie {
+ uint8_t preq_ie; /* IEEE80211_ELEMID_MESHPREQ */
+ uint8_t preq_len;
+ /* XXXRP: TBD */
+} __packed;
+
+/* Mesh Path Reply */
+struct ieee80211_meshprep_ie {
+ uint8_t prep_ie; /* IEEE80211_ELEMID_MESHPREP */
+ uint8_t prep_len;
+ /* XXXRP: TBD */
+} __packed;
+
+/* Mesh Path Error */
+struct ieee80211_meshperr_ie {
+ uint8_t perr_ie; /* IEEE80211_ELEMID_MESHPERR */
+ uint8_t perr_len;
+ uint8_t perr_mode;
+ uint8_t perr_ndests; /* Number of Destinations */
+ struct {
+ uint8_t dest_addr[IEEE80211_ADDR_LEN];
+ uint32_t dest_seq;
+ } dests[1] __packed; /* NB: variable size */
+} __packed;
+
+/* Mesh Proxy Update */
+struct ieee80211_meshpu_ie {
+ uint8_t pu_ie; /* IEEE80211_ELEMID_MESHPU */
+ uint8_t pu_len;
+ /* XXXRP: TBD */
+} __packed;
+
+/* Mesh Proxy Update Confirmation */
+struct ieee80211_meshpuc_ie {
+ uint8_t puc_ie; /* IEEE80211_ELEMID_MESHPUC */
+ uint8_t puc_len;
+ uint8_t puc_flags;
+ uint8_t puc_seq; /* PU Sequence Number */
+ uint8_t puc_daddr[IEEE80211_ADDR_LEN];
+} __packed;
+
+/* Mesh Security Capability */
+struct ieee80211_meshsc_ie {
+ uint8_t sc_ie; /* IEEE80211_ELEMID_MESHSC */
+ uint8_t sc_len;
+ uint8_t sc_mkdid[IEEE80211_ADDR_LEN]; /* MKD Domain ID */
+ uint8_t sc_sconfig; /* Security Configuration */
+} __packed;
+
+/* Mesh Security Authentication */
+struct ieee80211_meshsa_ie {
+ uint8_t sa_ie; /* IEEE80211_ELEMID_MESHSA */
+ uint8_t sa_len;
+ uint8_t sa_handshake;
+ uint8_t sa_maid[IEEE80211_ADDR_LEN]; /* MA-ID */
+ uint8_t sa_lmpid[IEEE80211_ADDR_LEN];
+ uint32_t sa_akm; /* Selected AKM Suite */
+ uint32_t sa_pcs; /* Selected Pairwise Cipher Suite */
+ uint8_t sa_pmk[16];
+ uint8_t sa_lnonce[32];
+ uint8_t sa_pnonce[32];
+ /* XXX more parameters */
+} __packed;
+
+/* Mesh Anti-Clogging Token */
+struct ieee80211_meshact_ie {
+ uint8_t act_ie; /* IEEE80211_ELEMID_MESHACT */
+ uint8_t act_len;
+} __packed;
+
+/*
* Atheros advanced capability information element.
*/
struct ieee80211_ath_ie {
@@ -892,6 +1169,19 @@ enum {
IEEE80211_REASON_BAD_MECHANISM = 37, /* 11e */
IEEE80211_REASON_SETUP_NEEDED = 38, /* 11e */
IEEE80211_REASON_TIMEOUT = 39, /* 11e */
+ /* values not yet allocated by ANA */
+ IEEE80211_REASON_PEER_LINK_CANCELED = 2, /* 11s */
+ IEEE80211_REASON_MESH_MAX_PEERS = 3, /* 11s */
+ IEEE80211_REASON_MESH_CAP_POLICY_VIOLATION = 4, /* 11s */
+ IEEE80211_REASON_MESH_CLOSE_RCVD = 5, /* 11s */
+ IEEE80211_REASON_MESH_MAX_RETRIES = 6, /* 11s */
+ IEEE80211_REASON_MESH_CONFIRM_TIMEOUT = 7, /* 11s */
+ IEEE80211_REASON_MESH_SEC_ROLE_NEG_DIFFERS = 8, /* 11s */
+ IEEE80211_REASON_MESH_SEC_AUTH_IMPOSSIBLE = 9, /* 11s */
+ IEEE80211_REASON_MESH_SEC_FAILED_VERIF = 10, /* 11s */
+ IEEE80211_REASON_MESH_INVALID_GTK = 11, /* 11s */
+ IEEE80211_REASON_MESH_MISMATCH_GTK = 12, /* 11s */
+ IEEE80211_REASON_MESH_INCONSISTENT_PARAMS = 13, /* 11s */
IEEE80211_STATUS_SUCCESS = 0,
IEEE80211_STATUS_UNSPECIFIED = 1,
@@ -919,6 +1209,18 @@ enum {
IEEE80211_STATUS_UNSUPP_RSN_IE_VERSION = 44, /* 11i */
IEEE80211_STATUS_INVALID_RSN_IE_CAP = 45, /* 11i */
IEEE80211_STATUS_CIPHER_SUITE_REJECTED = 46, /* 11i */
+ /* values not yet allocated by ANA */
+ IEEE80211_STATUS_PEER_LINK_ESTABLISHED = 14, /* 11s */
+ IEEE80211_STATUS_PEER_LINK_CLOSED = 15, /* 11s */
+ /* XXXRP: no identifiers for 16-17 */
+ IEEE80211_STATUS_PEER_LINK_MAX_RETRIES = 18, /* 11s */
+ IEEE80211_STATUS_PEER_LINK_NO_PMK = 19, /* 11s */
+ IEEE80211_STATUS_PEER_LINK_ALT_PMK = 20, /* 11s */
+ IEEE80211_STATUS_PEER_LINK_NO_AKM = 21, /* 11s */
+ IEEE80211_STATUS_PEER_LINK_ALT_AKM = 22, /* 11s */
+ IEEE80211_STATUS_PEER_LINK_NO_KDF = 23, /* 11s */
+ IEEE80211_STATUS_PEER_LINK_SA_ESTABLISHED = 24, /* 11s */
+ /* XXRP: no identifier for 25 */
};
#define IEEE80211_WEP_KEYLEN 5 /* 40bit */
More information about the svn-src-projects
mailing list