src/devices/mesh/dot11s/peer-link-frame.h
author Kirill Andreev <andreev@iitp.ru>
Wed, 22 Jul 2009 15:56:55 +0400
changeset 5130 b5062e8e0da1
parent 5129 5688b8da4526
child 5200 3e8818c7a50e
permissions -rw-r--r--
Fixed coding style
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4865
e331ed5d3662 Added header for peer link frame (first fields without information element)
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5020
diff changeset
     2
/*
4865
e331ed5d3662 Added header for peer link frame (first fields without information element)
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
     3
 * Copyright (c) 2009 IITP RAS
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5020
diff changeset
     4
 *
4865
e331ed5d3662 Added header for peer link frame (first fields without information element)
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
e331ed5d3662 Added header for peer link frame (first fields without information element)
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
e331ed5d3662 Added header for peer link frame (first fields without information element)
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
     7
 * published by the Free Software Foundation;
e331ed5d3662 Added header for peer link frame (first fields without information element)
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
     8
 *
e331ed5d3662 Added header for peer link frame (first fields without information element)
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
e331ed5d3662 Added header for peer link frame (first fields without information element)
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
e331ed5d3662 Added header for peer link frame (first fields without information element)
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
e331ed5d3662 Added header for peer link frame (first fields without information element)
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    12
 * GNU General Public License for more details.
e331ed5d3662 Added header for peer link frame (first fields without information element)
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    13
 *
e331ed5d3662 Added header for peer link frame (first fields without information element)
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
e331ed5d3662 Added header for peer link frame (first fields without information element)
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
e331ed5d3662 Added header for peer link frame (first fields without information element)
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5020
diff changeset
    17
 *
4865
e331ed5d3662 Added header for peer link frame (first fields without information element)
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    18
 * Authors: Kirill Andreev <andreev@iitp.ru>
e331ed5d3662 Added header for peer link frame (first fields without information element)
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    19
 */
e331ed5d3662 Added header for peer link frame (first fields without information element)
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    20
e331ed5d3662 Added header for peer link frame (first fields without information element)
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    21
#ifndef PEER_LINK_FRAME_START_H
e331ed5d3662 Added header for peer link frame (first fields without information element)
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    22
#define PEER_LINK_FRAME_START_H
e331ed5d3662 Added header for peer link frame (first fields without information element)
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    23
#include "ns3/header.h"
e331ed5d3662 Added header for peer link frame (first fields without information element)
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    24
#include "ns3/supported-rates.h"
4957
3ce177c38776 Resturctured peer link frame - removed unneeded field "subtype", added unit
Kirill Andreev <andreev@iitp.ru>
parents: 4949
diff changeset
    25
#include "dot11s-mac-header.h"
4973
59b050ada622 Restructured peer link frame
Kirill Andreev <andreev@iitp.ru>
parents: 4957
diff changeset
    26
#include "ie-dot11s-configuration.h"
4974
8009731514d2 Peer link frame - done
Kirill Andreev <andreev@iitp.ru>
parents: 4973
diff changeset
    27
#include "ie-dot11s-peering-protocol.h"
5020
79e8178d69eb Mesh ID is made separately from SSID
Kirill Andreev <andreev@iitp.ru>
parents: 4976
diff changeset
    28
#include "ie-dot11s-id.h"
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5020
diff changeset
    29
namespace ns3
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5020
diff changeset
    30
{
4865
e331ed5d3662 Added header for peer link frame (first fields without information element)
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    31
class MeshWifiInterfaceMac;
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5020
diff changeset
    32
namespace dot11s
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5020
diff changeset
    33
{
4949
c376fb558264 Added docs to peer link frame cleass, mesh-wifi-mac-header has been moved to
Kirill Andreev <andreev@iitp.ru>
parents: 4882
diff changeset
    34
/**
c376fb558264 Added docs to peer link frame cleass, mesh-wifi-mac-header has been moved to
Kirill Andreev <andreev@iitp.ru>
parents: 4882
diff changeset
    35
 * \ingroup dot11s
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5020
diff changeset
    36
 *
4949
c376fb558264 Added docs to peer link frame cleass, mesh-wifi-mac-header has been moved to
Kirill Andreev <andreev@iitp.ru>
parents: 4882
diff changeset
    37
 * \brief 802.11s Peer link management frame:
c376fb558264 Added docs to peer link frame cleass, mesh-wifi-mac-header has been moved to
Kirill Andreev <andreev@iitp.ru>
parents: 4882
diff changeset
    38
 * \details included the following (see chapters 7.4.12.1-7.4.12.3 of
c376fb558264 Added docs to peer link frame cleass, mesh-wifi-mac-header has been moved to
Kirill Andreev <andreev@iitp.ru>
parents: 4882
diff changeset
    39
 * 802.11s):
c376fb558264 Added docs to peer link frame cleass, mesh-wifi-mac-header has been moved to
Kirill Andreev <andreev@iitp.ru>
parents: 4882
diff changeset
    40
 * - Subtype field
c376fb558264 Added docs to peer link frame cleass, mesh-wifi-mac-header has been moved to
Kirill Andreev <andreev@iitp.ru>
parents: 4882
diff changeset
    41
 * - Association ID field
c376fb558264 Added docs to peer link frame cleass, mesh-wifi-mac-header has been moved to
Kirill Andreev <andreev@iitp.ru>
parents: 4882
diff changeset
    42
 * - Supported rates
5020
79e8178d69eb Mesh ID is made separately from SSID
Kirill Andreev <andreev@iitp.ru>
parents: 4976
diff changeset
    43
 * - Mesh ID of mesh
4949
c376fb558264 Added docs to peer link frame cleass, mesh-wifi-mac-header has been moved to
Kirill Andreev <andreev@iitp.ru>
parents: 4882
diff changeset
    44
 */
4865
e331ed5d3662 Added header for peer link frame (first fields without information element)
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    45
class PeerLinkFrameStart : public Header
e331ed5d3662 Added header for peer link frame (first fields without information element)
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    46
{
e331ed5d3662 Added header for peer link frame (first fields without information element)
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    47
public:
e331ed5d3662 Added header for peer link frame (first fields without information element)
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    48
  PeerLinkFrameStart ();
4949
c376fb558264 Added docs to peer link frame cleass, mesh-wifi-mac-header has been moved to
Kirill Andreev <andreev@iitp.ru>
parents: 4882
diff changeset
    49
  ///\brief fields:
4865
e331ed5d3662 Added header for peer link frame (first fields without information element)
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    50
  struct PlinkFrameStartFields
e331ed5d3662 Added header for peer link frame (first fields without information element)
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    51
  {
4866
564372fc5491 First management frame goes through new archotecture
Kirill Andreev <andreev@iitp.ru>
parents: 4865
diff changeset
    52
    uint8_t subtype;
4974
8009731514d2 Peer link frame - done
Kirill Andreev <andreev@iitp.ru>
parents: 4973
diff changeset
    53
    IePeeringProtocol protocol; //Peering protocol version - in all subtypes - 3 octets
8009731514d2 Peer link frame - done
Kirill Andreev <andreev@iitp.ru>
parents: 4973
diff changeset
    54
    uint16_t capability;        //open and confirm
8009731514d2 Peer link frame - done
Kirill Andreev <andreev@iitp.ru>
parents: 4973
diff changeset
    55
    uint16_t aid;               //confirm only
8009731514d2 Peer link frame - done
Kirill Andreev <andreev@iitp.ru>
parents: 4973
diff changeset
    56
    SupportedRates rates;       //open and confirm
5020
79e8178d69eb Mesh ID is made separately from SSID
Kirill Andreev <andreev@iitp.ru>
parents: 4976
diff changeset
    57
    IeMeshId meshId;            //open and close
4974
8009731514d2 Peer link frame - done
Kirill Andreev <andreev@iitp.ru>
parents: 4973
diff changeset
    58
    IeConfiguration config;     //open and confirm
8009731514d2 Peer link frame - done
Kirill Andreev <andreev@iitp.ru>
parents: 4973
diff changeset
    59
    uint16_t reasonCode;        //close only
4865
e331ed5d3662 Added header for peer link frame (first fields without information element)
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    60
  };
4957
3ce177c38776 Resturctured peer link frame - removed unneeded field "subtype", added unit
Kirill Andreev <andreev@iitp.ru>
parents: 4949
diff changeset
    61
  ///\attention: must be set before deserialize, before only multihop
3ce177c38776 Resturctured peer link frame - removed unneeded field "subtype", added unit
Kirill Andreev <andreev@iitp.ru>
parents: 4949
diff changeset
    62
  //action header knows about subtype
5130
b5062e8e0da1 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5129
diff changeset
    63
  void SetPlinkFrameSubtype (uint8_t subtype);
b5062e8e0da1 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5129
diff changeset
    64
  void SetPlinkFrameStart (PlinkFrameStartFields);
4866
564372fc5491 First management frame goes through new archotecture
Kirill Andreev <andreev@iitp.ru>
parents: 4865
diff changeset
    65
  PlinkFrameStartFields GetFields ();
4874
f7ea3717e668 Code cleanups. Software delay is removed
Kirill Andreev <andreev@iitp.ru>
parents: 4872
diff changeset
    66
  /** \name Inherited from header:
4865
e331ed5d3662 Added header for peer link frame (first fields without information element)
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    67
   * \{
e331ed5d3662 Added header for peer link frame (first fields without information element)
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    68
   */
e331ed5d3662 Added header for peer link frame (first fields without information element)
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    69
  static  TypeId   GetTypeId ();
e331ed5d3662 Added header for peer link frame (first fields without information element)
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    70
  virtual TypeId   GetInstanceTypeId () const;
e331ed5d3662 Added header for peer link frame (first fields without information element)
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    71
  virtual void     Print (std::ostream &os) const;
e331ed5d3662 Added header for peer link frame (first fields without information element)
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    72
  virtual uint32_t GetSerializedSize () const;
e331ed5d3662 Added header for peer link frame (first fields without information element)
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    73
  virtual void     Serialize (Buffer::Iterator start) const;
e331ed5d3662 Added header for peer link frame (first fields without information element)
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    74
  virtual uint32_t Deserialize (Buffer::Iterator start);
e331ed5d3662 Added header for peer link frame (first fields without information element)
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    75
  /**
e331ed5d3662 Added header for peer link frame (first fields without information element)
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    76
   * \}
e331ed5d3662 Added header for peer link frame (first fields without information element)
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    77
   */
e331ed5d3662 Added header for peer link frame (first fields without information element)
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    78
private:
4957
3ce177c38776 Resturctured peer link frame - removed unneeded field "subtype", added unit
Kirill Andreev <andreev@iitp.ru>
parents: 4949
diff changeset
    79
  uint8_t m_subtype;
4974
8009731514d2 Peer link frame - done
Kirill Andreev <andreev@iitp.ru>
parents: 4973
diff changeset
    80
  IePeeringProtocol m_protocol;
4973
59b050ada622 Restructured peer link frame
Kirill Andreev <andreev@iitp.ru>
parents: 4957
diff changeset
    81
  uint16_t m_capability;
4957
3ce177c38776 Resturctured peer link frame - removed unneeded field "subtype", added unit
Kirill Andreev <andreev@iitp.ru>
parents: 4949
diff changeset
    82
  uint16_t m_aid;
3ce177c38776 Resturctured peer link frame - removed unneeded field "subtype", added unit
Kirill Andreev <andreev@iitp.ru>
parents: 4949
diff changeset
    83
  SupportedRates m_rates;
5020
79e8178d69eb Mesh ID is made separately from SSID
Kirill Andreev <andreev@iitp.ru>
parents: 4976
diff changeset
    84
  IeMeshId m_meshId;
4973
59b050ada622 Restructured peer link frame
Kirill Andreev <andreev@iitp.ru>
parents: 4957
diff changeset
    85
  IeConfiguration m_config;
59b050ada622 Restructured peer link frame
Kirill Andreev <andreev@iitp.ru>
parents: 4957
diff changeset
    86
  uint16_t m_reasonCode;
4957
3ce177c38776 Resturctured peer link frame - removed unneeded field "subtype", added unit
Kirill Andreev <andreev@iitp.ru>
parents: 4949
diff changeset
    87
3ce177c38776 Resturctured peer link frame - removed unneeded field "subtype", added unit
Kirill Andreev <andreev@iitp.ru>
parents: 4949
diff changeset
    88
  friend bool operator== (const PeerLinkFrameStart & a, const PeerLinkFrameStart & b);
4865
e331ed5d3662 Added header for peer link frame (first fields without information element)
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    89
};
4957
3ce177c38776 Resturctured peer link frame - removed unneeded field "subtype", added unit
Kirill Andreev <andreev@iitp.ru>
parents: 4949
diff changeset
    90
bool operator== (const PeerLinkFrameStart & a, const PeerLinkFrameStart & b);
4872
ea1bce018a44 Added namespace dot11s
Kirill Andreev <andreev@iitp.ru>
parents: 4871
diff changeset
    91
} //namespace dot11s
4865
e331ed5d3662 Added header for peer link frame (first fields without information element)
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    92
} //namespace ns3
e331ed5d3662 Added header for peer link frame (first fields without information element)
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    93
#endif