From owner-svn-src-projects@FreeBSD.ORG Fri Apr 24 10:27:58 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 0CFC8106564A; Fri, 24 Apr 2009 10:27:58 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id EF6AC8FC0C; Fri, 24 Apr 2009 10:27:57 +0000 (UTC) (envelope-from rpaulo@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 n3OARviv015350; Fri, 24 Apr 2009 10:27:57 GMT (envelope-from rpaulo@svn.freebsd.org) Received: (from rpaulo@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n3OARvhv015348; Fri, 24 Apr 2009 10:27:57 GMT (envelope-from rpaulo@svn.freebsd.org) Message-Id: <200904241027.n3OARvhv015348@svn.freebsd.org> From: Rui Paulo Date: Fri, 24 Apr 2009 10:27:57 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r191460 - projects/mesh11s/sys/net80211 X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 24 Apr 2009 10:27:58 -0000 Author: rpaulo Date: Fri Apr 24 10:27:57 2009 New Revision: 191460 URL: http://svn.freebsd.org/changeset/base/191460 Log: Don't polute ieee80211.h with mesh definitions. We have ieee80211_mesh.h just for that. Sponsored by: The FreeBSD Foundation Modified: projects/mesh11s/sys/net80211/ieee80211.h projects/mesh11s/sys/net80211/ieee80211_mesh.h Modified: projects/mesh11s/sys/net80211/ieee80211.h ============================================================================== --- projects/mesh11s/sys/net80211/ieee80211.h Fri Apr 24 10:19:25 2009 (r191459) +++ projects/mesh11s/sys/net80211/ieee80211.h Fri Apr 24 10:27:57 2009 (r191460) @@ -775,264 +775,6 @@ struct ieee80211_csa_ie { #define IEEE80211_ERP_BITS \ "\20\1NON_ERP_PRESENT\2USE_PROTECTION\3LONG_PREAMBLE" -/* - * 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_finfo; /* Formation Information */ - uint8_t conf_cap; -} __packed; - -#define IEEE80211_MESHCONF_APSPI_HWMP_OUI 0x000fac -#define IEEE80211_MESHCONF_APSPI_HWMP_VALUE 0xff /* XXX Linux */ -#define IEEE80211_MESHCONF_APSMI_AIRTIME_OUI 0x000fac -#define IEEE80211_MESHCONF_APSMI_AIRTIME_VALUE 0xff /* XXX Linux */ -#define IEEE80211_MESHCONF_CCMI_DEFAULT_OUI 0x000fac -#define IEEE80211_MESHCONF_CCMI_DEFAULT_VALUE 0xff /* XXX Linux */ -#define IEEE80211_MESHCONF_CCMI_NULL_OUI 0x000fac -#define IEEE80211_MESHCONF_CCMI_NULL_VALUE 255 -#define IEEE80211_MESHCONF_FORM_MP (1 << 1) /* connected to portal */ -#define IEEE80211_MESHCONF_FORM_NEIGH (1 << 4) /* no of neighbours */ - -/* 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) + IEEE80211_NWID_LEN) - -/* 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; - #define ATH_OUI 0x7f0300 /* Atheros OUI */ #define ATH_OUI_TYPE 0x01 /* Atheros protocol ie */ Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.h ============================================================================== --- projects/mesh11s/sys/net80211/ieee80211_mesh.h Fri Apr 24 10:19:25 2009 (r191459) +++ projects/mesh11s/sys/net80211/ieee80211_mesh.h Fri Apr 24 10:27:57 2009 (r191460) @@ -31,6 +31,265 @@ #ifndef _NET80211_IEEE80211_MESH_H_ #define _NET80211_IEEE80211_MESH_H_ +/* + * 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_finfo; /* Formation Information */ + uint8_t conf_cap; +} __packed; + +#define IEEE80211_MESHCONF_APSPI_HWMP_OUI 0x000fac +#define IEEE80211_MESHCONF_APSPI_HWMP_VALUE 0xff /* XXX Linux */ +#define IEEE80211_MESHCONF_APSMI_AIRTIME_OUI 0x000fac +#define IEEE80211_MESHCONF_APSMI_AIRTIME_VALUE 0xff /* XXX Linux */ +#define IEEE80211_MESHCONF_CCMI_DEFAULT_OUI 0x000fac +#define IEEE80211_MESHCONF_CCMI_DEFAULT_VALUE 0xff /* XXX Linux */ +#define IEEE80211_MESHCONF_CCMI_NULL_OUI 0x000fac +#define IEEE80211_MESHCONF_CCMI_NULL_VALUE 255 +#define IEEE80211_MESHCONF_FORM_MP (1 << 1) /* connected to portal */ +#define IEEE80211_MESHCONF_FORM_NEIGH (1 << 4) /* no of neighbours */ + +/* 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) + IEEE80211_NWID_LEN) + +/* 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; + + void ieee80211_mesh_attach(struct ieee80211com *); void ieee80211_mesh_detach(struct ieee80211com *);