src/devices/mesh/dot11s/peer-link.h
author Kirill Andreev <andreev@iitp.ru>
Thu, 21 May 2009 16:35:55 +0400
changeset 5015 e460e29f9f78
parent 5005 8038200dac53
child 5063 97b947e83640
permissions -rw-r--r--
Statistics fixed
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4862
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
     2
/* 
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
     3
 * Copyright (c) 2009 IITP RAS
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
     4
 * 
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
     7
 * published by the Free Software Foundation;
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
     8
 *
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    12
 * GNU General Public License for more details.
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    13
 *
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    17
 * 
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    18
 * Authors: Kirill Andreev <andreev@iitp.ru>
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    19
 *          Aleksey Kovalenko <kovalenko@iitp.ru>
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    20
 */
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    21
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    22
#ifndef PEERLLINK_H_
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    23
#define PEERLLINK_H_
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    24
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    25
#include "ns3/nstime.h"
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    26
#include "ns3/callback.h"
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    27
#include "ns3/mac48-address.h"
4887
cbf02c77d5c1 HWMP is attached to mesh point device and MAC layer with zero functionality
Kirill Andreev <andreev@iitp.ru>
parents: 4882
diff changeset
    28
#include "ns3/event-id.h"
4862
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    29
#include "ie-dot11s-beacon-timing.h"
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    30
#include "ie-dot11s-peer-management.h"
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    31
#include "ie-dot11s-configuration.h"
4882
3eab2f6b1adc Moved hwmp to dot11s, removed unneded files, removed unneded headers from
Kirill Andreev <andreev@iitp.ru>
parents: 4876
diff changeset
    32
#include "peer-management-plugin.h"
4862
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    33
namespace ns3 {
4872
ea1bce018a44 Added namespace dot11s
Kirill Andreev <andreev@iitp.ru>
parents: 4871
diff changeset
    34
namespace dot11s {
4862
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    35
/**
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    36
 * \ingroup dot11s
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    37
 * 
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    38
 * \brief Peer link model for 802.11s Peer Management protocol 
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    39
 */
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    40
class PeerLink : public Object
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    41
{
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    42
public:
4919
b8a0476c7e06 Added unicast PREQ, peer link status callback.
Kirill Andreev <andreev@iitp.ru>
parents: 4899
diff changeset
    43
  friend class PeerManagementProtocol;
4862
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    44
  /// Support object system
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    45
  static TypeId GetTypeId();
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    46
  /// C-tor create empty link
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    47
  PeerLink ();
5005
8038200dac53 Fixed removing peer links
Kirill Andreev <andreev@iitp.ru>
parents: 4954
diff changeset
    48
  ~PeerLink ();
8038200dac53 Fixed removing peer links
Kirill Andreev <andreev@iitp.ru>
parents: 4954
diff changeset
    49
  void DoDispose ();
4862
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    50
  
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    51
  /// Process beacon received from peer
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    52
  void SetBeaconInformation (Time lastBeacon, Time BeaconInterval);
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    53
  /**
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    54
   * \brief Method used to detecet peer link changes
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    55
   * 
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    56
   * \param bool if true - opened new link, if false - link closed
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    57
   */
4867
3a02e4e89292 Finished processing peer link frames on new architeture
Kirill Andreev <andreev@iitp.ru>
parents: 4866
diff changeset
    58
  void  SetLinkStatusCallback (Callback<void, uint32_t, Mac48Address, bool> cb);
4862
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    59
  /**
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    60
   * \name Peer link geeters/setters
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    61
   * \{
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    62
   */
4933
72f0481cfb2d Peer link restructured to support multi-interface
Kirill Andreev <andreev@iitp.ru>
parents: 4919
diff changeset
    63
  void SetPeerAddress (Mac48Address macaddr);
72f0481cfb2d Peer link restructured to support multi-interface
Kirill Andreev <andreev@iitp.ru>
parents: 4919
diff changeset
    64
  void SetPeerMeshPointAddress (Mac48Address macaddr);
72f0481cfb2d Peer link restructured to support multi-interface
Kirill Andreev <andreev@iitp.ru>
parents: 4919
diff changeset
    65
  void SetInterface (uint32_t interface);
72f0481cfb2d Peer link restructured to support multi-interface
Kirill Andreev <andreev@iitp.ru>
parents: 4919
diff changeset
    66
  void SetLocalLinkId (uint16_t id);
72f0481cfb2d Peer link restructured to support multi-interface
Kirill Andreev <andreev@iitp.ru>
parents: 4919
diff changeset
    67
  void SetPeerLinkId (uint16_t id);
72f0481cfb2d Peer link restructured to support multi-interface
Kirill Andreev <andreev@iitp.ru>
parents: 4919
diff changeset
    68
  void SetLocalAid (uint16_t aid);
72f0481cfb2d Peer link restructured to support multi-interface
Kirill Andreev <andreev@iitp.ru>
parents: 4919
diff changeset
    69
  void SetPeerAid (uint16_t aid);
72f0481cfb2d Peer link restructured to support multi-interface
Kirill Andreev <andreev@iitp.ru>
parents: 4919
diff changeset
    70
  void SetBeaconTimingElement (IeBeaconTiming beaconTiming);
72f0481cfb2d Peer link restructured to support multi-interface
Kirill Andreev <andreev@iitp.ru>
parents: 4919
diff changeset
    71
  void SetPeerLinkDescriptorElement (IePeerManagement peerLinkElement);
4862
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    72
  Mac48Address GetPeerAddress () const;
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    73
  uint16_t GetLocalAid () const;
4933
72f0481cfb2d Peer link restructured to support multi-interface
Kirill Andreev <andreev@iitp.ru>
parents: 4919
diff changeset
    74
  Time GetLastBeacon () const;
72f0481cfb2d Peer link restructured to support multi-interface
Kirill Andreev <andreev@iitp.ru>
parents: 4919
diff changeset
    75
  Time GetBeaconInterval () const;
4876
d78f1b978dac Rstructured file names: IeDot11s* no is Ie, because it is in namespace dot11s
Kirill Andreev <andreev@iitp.ru>
parents: 4873
diff changeset
    76
  IeBeaconTiming GetBeaconTimingElement ()const;
d78f1b978dac Rstructured file names: IeDot11s* no is Ie, because it is in namespace dot11s
Kirill Andreev <andreev@iitp.ru>
parents: 4873
diff changeset
    77
  IePeerManagement GetPeerLinkDescriptorElement ()const;
4862
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    78
  //\}
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    79
  
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    80
  /**
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    81
   * \name MLME
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    82
   * \{
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    83
   */
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    84
  /// MLME-CancelPeerLink.request
4899
50591b95753a dot11s-codes.h removed. StatusCode enum is found to be unused and removed. ReadonCode enum is moved to dot11s/ie-dot11s-peer-management.h
Pavel Boyko <boyko@iitp.ru>
parents: 4892
diff changeset
    85
  void MLMECancelPeerLink (PmpReasonCode reason);
4862
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    86
  /// MLME-PassivePeerLinkOpen.request
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    87
  void MLMEPassivePeerLinkOpen ();
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    88
  /// MLME-ActivePeerLinkOpen.request
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    89
  void MLMEActivePeerLinkOpen ();
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    90
  /// MLME-PeeringRequestReject
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    91
  void MLMEPeeringRequestReject ();
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    92
  /// Callback type for MLME-SignalPeerLinkStatus event
4933
72f0481cfb2d Peer link restructured to support multi-interface
Kirill Andreev <andreev@iitp.ru>
parents: 4919
diff changeset
    93
  typedef Callback<void, uint32_t, Mac48Address, Mac48Address, bool> SignalStatusCallback; 
4862
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    94
  /// Set callback
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    95
  void MLMESetSignalStatusCallback (SignalStatusCallback);
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    96
  //\}
5015
e460e29f9f78 Statistics fixed
Kirill Andreev <andreev@iitp.ru>
parents: 5005
diff changeset
    97
  ///\brief Statistics
e460e29f9f78 Statistics fixed
Kirill Andreev <andreev@iitp.ru>
parents: 5005
diff changeset
    98
  void Report (std::ostream & os) const;
4876
d78f1b978dac Rstructured file names: IeDot11s* no is Ie, because it is in namespace dot11s
Kirill Andreev <andreev@iitp.ru>
parents: 4873
diff changeset
    99
private:
4862
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   100
  /**
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   101
   * \name Link response to received management frames
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   102
   * 
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   103
   * \attention In all this methods {local/peer}LinkID correspond to _peer_ station, as written in
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   104
   * received frame, e.g. I am peerLinkID and peer link is localLinkID .
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   105
   * 
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   106
   * TODO is that clear?
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   107
   * 
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   108
   * \{
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   109
   */
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   110
  /// Close link
4899
50591b95753a dot11s-codes.h removed. StatusCode enum is found to be unused and removed. ReadonCode enum is moved to dot11s/ie-dot11s-peer-management.h
Pavel Boyko <boyko@iitp.ru>
parents: 4892
diff changeset
   111
  void Close (uint16_t localLinkID, uint16_t peerLinkID, PmpReasonCode reason);
4862
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   112
  /// Accept open link
4933
72f0481cfb2d Peer link restructured to support multi-interface
Kirill Andreev <andreev@iitp.ru>
parents: 4919
diff changeset
   113
  void OpenAccept (uint16_t localLinkId, IeConfiguration conf, Mac48Address peerMp);
4862
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   114
  /// Reject open link 
4933
72f0481cfb2d Peer link restructured to support multi-interface
Kirill Andreev <andreev@iitp.ru>
parents: 4919
diff changeset
   115
  void OpenReject (uint16_t localLinkId, IeConfiguration conf, Mac48Address peerMp, PmpReasonCode reason);
4862
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   116
  /// Confirm accept
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   117
  void ConfirmAccept (
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   118
    uint16_t localLinkId,
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   119
    uint16_t peerLinkId,
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   120
    uint16_t peerAid,
4933
72f0481cfb2d Peer link restructured to support multi-interface
Kirill Andreev <andreev@iitp.ru>
parents: 4919
diff changeset
   121
    IeConfiguration conf,
72f0481cfb2d Peer link restructured to support multi-interface
Kirill Andreev <andreev@iitp.ru>
parents: 4919
diff changeset
   122
    Mac48Address peerMp
4862
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   123
  );
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   124
  /// Confirm reject
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   125
  void  ConfirmReject (
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   126
    uint16_t localLinkId,
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   127
    uint16_t peerLinkId,
4876
d78f1b978dac Rstructured file names: IeDot11s* no is Ie, because it is in namespace dot11s
Kirill Andreev <andreev@iitp.ru>
parents: 4873
diff changeset
   128
    IeConfiguration  conf,
4933
72f0481cfb2d Peer link restructured to support multi-interface
Kirill Andreev <andreev@iitp.ru>
parents: 4919
diff changeset
   129
    Mac48Address peerMp,
4899
50591b95753a dot11s-codes.h removed. StatusCode enum is found to be unused and removed. ReadonCode enum is moved to dot11s/ie-dot11s-peer-management.h
Pavel Boyko <boyko@iitp.ru>
parents: 4892
diff changeset
   130
    PmpReasonCode reason
4862
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   131
  );
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   132
  //\}
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   133
  
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   134
  /// True if link is established
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   135
  bool  LinkIsEstab () const;
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   136
  /// True if link is idle. Link can be deleted in this state 
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   137
  bool  LinkIsIdle () const;
4866
564372fc5491 First management frame goes through new archotecture
Kirill Andreev <andreev@iitp.ru>
parents: 4864
diff changeset
   138
  /**
564372fc5491 First management frame goes through new archotecture
Kirill Andreev <andreev@iitp.ru>
parents: 4864
diff changeset
   139
   * Set pointer to MAC-plugin, which is responsible for sending peer
564372fc5491 First management frame goes through new archotecture
Kirill Andreev <andreev@iitp.ru>
parents: 4864
diff changeset
   140
   * link management frames
564372fc5491 First management frame goes through new archotecture
Kirill Andreev <andreev@iitp.ru>
parents: 4864
diff changeset
   141
   */
4873
3e5607e26273 Dot11s prefix removed
Kirill Andreev <andreev@iitp.ru>
parents: 4872
diff changeset
   142
  void SetMacPlugin(Ptr<PeerManagerMacPlugin> plugin);
4862
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   143
private:
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   144
  /// Peer link states, see 802.11s draft 11B.3.3.1
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   145
  enum  PeerState {
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   146
    IDLE,       
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   147
    OPN_SNT,
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   148
    CNF_RCVD,
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   149
    OPN_RCVD,
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   150
    ESTAB,
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   151
    HOLDING,
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   152
  };
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   153
  /// Peer link events, see 802.11s draft 11B.3.3.2
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   154
  enum  PeerEvent
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   155
  {
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   156
    CNCL,       ///< MLME-CancelPeerLink
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   157
    PASOPN,     ///< MLME-PassivePeerLinkOpen
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   158
    ACTOPN,     ///< MLME-ActivePeerLinkOpen
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   159
    CLS_ACPT,   ///< PeerLinkClose_Accept
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   160
    OPN_ACPT,   ///< PeerLinkOpen_Accept
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   161
    OPN_RJCT,   ///< PeerLinkOpen_Reject
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   162
    REQ_RJCT,   ///< PeerLinkOpenReject by internal reason
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   163
    CNF_ACPT,   ///< PeerLinkConfirm_Accept
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   164
    CNF_RJCT,   ///< PeerLinkConfirm_Reject
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   165
    TOR1,       ///< Timeout of retry timer
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   166
    TOR2,       ///< also timeout of retry timer
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   167
    TOC,        ///< Timeout of confirm timer
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   168
    TOH,        ///< Timeout of holding (gracefull closing) timer
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   169
  };
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   170
  
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   171
private:
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   172
  /// State transition
4899
50591b95753a dot11s-codes.h removed. StatusCode enum is found to be unused and removed. ReadonCode enum is moved to dot11s/ie-dot11s-peer-management.h
Pavel Boyko <boyko@iitp.ru>
parents: 4892
diff changeset
   173
  void StateMachine (PeerEvent event, PmpReasonCode = REASON11S_RESERVED);
4862
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   174
  
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   175
  /** 
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   176
   * \name Event handlers
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   177
   * \{ 
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   178
   */
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   179
  void ClearRetryTimer ();
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   180
  void ClearConfirmTimer ();
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   181
  void ClearHoldingTimer ();
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   182
  void SetHoldingTimer ();
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   183
  void SetRetryTimer ();
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   184
  void SetConfirmTimer ();
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   185
  //\}
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   186
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   187
  /** 
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   188
   * \name Work with management frames
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   189
   * \{
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   190
   */
4899
50591b95753a dot11s-codes.h removed. StatusCode enum is found to be unused and removed. ReadonCode enum is moved to dot11s/ie-dot11s-peer-management.h
Pavel Boyko <boyko@iitp.ru>
parents: 4892
diff changeset
   191
  void SendPeerLinkClose (PmpReasonCode reasoncode);
4862
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   192
  void SendPeerLinkOpen ();
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   193
  void SendPeerLinkConfirm ();
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   194
  //\}
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   195
  
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   196
  /** 
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   197
   * \name Timeout handlers 
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   198
   * \{
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   199
   */
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   200
  void HoldingTimeout ();
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   201
  void RetryTimeout ();
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   202
  void ConfirmTimeout ();
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   203
  //\}
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   204
  
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   205
private:
4866
564372fc5491 First management frame goes through new archotecture
Kirill Andreev <andreev@iitp.ru>
parents: 4864
diff changeset
   206
  ///The number of interface I am associated with
564372fc5491 First management frame goes through new archotecture
Kirill Andreev <andreev@iitp.ru>
parents: 4864
diff changeset
   207
  uint32_t m_interface;
564372fc5491 First management frame goes through new archotecture
Kirill Andreev <andreev@iitp.ru>
parents: 4864
diff changeset
   208
  /// pointer to mac plugin, which is responsible for peer management
4873
3e5607e26273 Dot11s prefix removed
Kirill Andreev <andreev@iitp.ru>
parents: 4872
diff changeset
   209
  Ptr<PeerManagerMacPlugin> m_macPlugin;
4862
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   210
  /// Peer address
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   211
  Mac48Address m_peerAddress;
4933
72f0481cfb2d Peer link restructured to support multi-interface
Kirill Andreev <andreev@iitp.ru>
parents: 4919
diff changeset
   212
  /// Mesh point address, equal to peer address in case of single
72f0481cfb2d Peer link restructured to support multi-interface
Kirill Andreev <andreev@iitp.ru>
parents: 4919
diff changeset
   213
  //interface mesh point
72f0481cfb2d Peer link restructured to support multi-interface
Kirill Andreev <andreev@iitp.ru>
parents: 4919
diff changeset
   214
  Mac48Address m_peerMeshPointAddress;
4862
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   215
  /// My ID of this link
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   216
  uint16_t m_localLinkId;
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   217
  /// Peer ID of this link
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   218
  uint16_t m_peerLinkId;
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   219
  /// My association ID
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   220
  uint16_t m_assocId;
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   221
  /// Assoc Id assigned to me by peer
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   222
  uint16_t m_peerAssocId;
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   223
    
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   224
  /// When last beacon was sent (TODO or received?)
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   225
  Time  m_lastBeacon;
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   226
  /// Current beacon interval on corresponding interface
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   227
  Time  m_beaconInterval;
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   228
  
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   229
  /// Current state
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   230
  PeerState m_state;
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   231
  /// Mesh interface configuration
4876
d78f1b978dac Rstructured file names: IeDot11s* no is Ie, because it is in namespace dot11s
Kirill Andreev <andreev@iitp.ru>
parents: 4873
diff changeset
   232
  IeConfiguration m_configuration;
4862
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   233
  
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   234
  // State is a bitfield as defined as follows:
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   235
  // This are states for a given
4876
d78f1b978dac Rstructured file names: IeDot11s* no is Ie, because it is in namespace dot11s
Kirill Andreev <andreev@iitp.ru>
parents: 4873
diff changeset
   236
  IeBeaconTiming m_beaconTiming;
4862
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   237
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   238
  /**
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   239
   * \name Timers & counters used for internal state transitions
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   240
   * \{
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   241
   */
4892
cdd13648776b Removed dot11s-parameters and they are made as attributes
Kirill Andreev <andreev@iitp.ru>
parents: 4887
diff changeset
   242
  uint16_t m_dot11MeshMaxRetries;
cdd13648776b Removed dot11s-parameters and they are made as attributes
Kirill Andreev <andreev@iitp.ru>
parents: 4887
diff changeset
   243
  Time     m_dot11MeshRetryTimeout;
cdd13648776b Removed dot11s-parameters and they are made as attributes
Kirill Andreev <andreev@iitp.ru>
parents: 4887
diff changeset
   244
  Time     m_dot11MeshHoldingTimeout;
cdd13648776b Removed dot11s-parameters and they are made as attributes
Kirill Andreev <andreev@iitp.ru>
parents: 4887
diff changeset
   245
  Time     m_dot11MeshConfirmTimeout;
cdd13648776b Removed dot11s-parameters and they are made as attributes
Kirill Andreev <andreev@iitp.ru>
parents: 4887
diff changeset
   246
4862
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   247
  EventId  m_retryTimer;
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   248
  EventId  m_holdingTimer;
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   249
  EventId  m_confirmTimer;
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   250
  uint16_t m_retryCounter;
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   251
  EventId  m_beaconLossTimer;
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   252
  uint16_t  m_maxBeaconLoss;
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   253
  //\}
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   254
  
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   255
  /// ?
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   256
  void BeaconLoss ();
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   257
   
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   258
  /// How to report my status change
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   259
  SignalStatusCallback m_linkStatusCallback;
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   260
};
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   261
  
4872
ea1bce018a44 Added namespace dot11s
Kirill Andreev <andreev@iitp.ru>
parents: 4871
diff changeset
   262
} // namespace dot11s
ea1bce018a44 Added namespace dot11s
Kirill Andreev <andreev@iitp.ru>
parents: 4871
diff changeset
   263
} //namespace ns3
4864
e13e65c3ba12 Merge with ns-3-dev.
Andrey Mazo <mazo@iitp.ru>
parents: 4862
diff changeset
   264
#endif /* PEERLLINK_H_ */