src/devices/mesh/dot11s/peer-link.h
author Kirill Andreev <andreev@iitp.ru>
Thu, 26 Mar 2009 14:00:46 +0300
changeset 4887 cbf02c77d5c1
parent 4882 3eab2f6b1adc
child 4892 cdd13648776b
permissions -rw-r--r--
HWMP is attached to mesh point device and MAC layer with zero functionality
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:
4876
d78f1b978dac Rstructured file names: IeDot11s* no is Ie, because it is in namespace dot11s
Kirill Andreev <andreev@iitp.ru>
parents: 4873
diff changeset
    43
  friend class PeerManagerProtocol;
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 ();
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    48
  
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    49
  /// Process beacon received from peer
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    50
  void SetBeaconInformation (Time lastBeacon, Time BeaconInterval);
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    51
  /**
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    52
   * \brief Method used to detecet peer link changes
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
   * \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
    55
   */
4867
3a02e4e89292 Finished processing peer link frames on new architeture
Kirill Andreev <andreev@iitp.ru>
parents: 4866
diff changeset
    56
  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
    57
  /**
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    58
   * \name Peer link geeters/setters
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
   */
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    61
  void  SetPeerAddress (Mac48Address macaddr);
4869
bf6f699d4e03 Debug messages fixed
Kirill Andreev <andreev@iitp.ru>
parents: 4867
diff changeset
    62
  void  SetInterface (uint32_t interface);
4862
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    63
  void  SetLocalLinkId (uint16_t id);
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    64
  void  SetPeerLinkId (uint16_t id);
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    65
  void  SetLocalAid (uint16_t aid);
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    66
  void  SetPeerAid (uint16_t aid);
4876
d78f1b978dac Rstructured file names: IeDot11s* no is Ie, because it is in namespace dot11s
Kirill Andreev <andreev@iitp.ru>
parents: 4873
diff changeset
    67
  void  SetBeaconTimingElement (IeBeaconTiming beaconTiming);
d78f1b978dac Rstructured file names: IeDot11s* no is Ie, because it is in namespace dot11s
Kirill Andreev <andreev@iitp.ru>
parents: 4873
diff changeset
    68
  void  SetPeerLinkDescriptorElement (IePeerManagement peerLinkElement);
4862
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    69
  Mac48Address GetPeerAddress () const;
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    70
  uint16_t GetLocalAid () const;
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    71
  Time  GetLastBeacon () const;
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    72
  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
    73
  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
    74
  IePeerManagement GetPeerLinkDescriptorElement ()const;
4862
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    75
  void  ClearTimingElement ();
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    76
  //\}
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    77
  
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
   * \name MLME
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
   */
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    82
  /// MLME-CancelPeerLink.request
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    83
  void MLMECancelPeerLink (dot11sReasonCode reason);
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    84
  /// MLME-PassivePeerLinkOpen.request
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    85
  void MLMEPassivePeerLinkOpen ();
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    86
  /// MLME-ActivePeerLinkOpen.request
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    87
  void MLMEActivePeerLinkOpen ();
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    88
  /// MLME-PeeringRequestReject
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    89
  void MLMEPeeringRequestReject ();
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    90
  /// Callback type for MLME-SignalPeerLinkStatus event
4866
564372fc5491 First management frame goes through new archotecture
Kirill Andreev <andreev@iitp.ru>
parents: 4864
diff changeset
    91
  typedef Callback<void, uint32_t, Mac48Address, bool> SignalStatusCallback; 
4862
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    92
  /// Set callback
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    93
  void MLMESetSignalStatusCallback (SignalStatusCallback);
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    94
  //\}
4876
d78f1b978dac Rstructured file names: IeDot11s* no is Ie, because it is in namespace dot11s
Kirill Andreev <andreev@iitp.ru>
parents: 4873
diff changeset
    95
private:
4862
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    96
  /**
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    97
   * \name Link response to received management frames
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    98
   * 
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    99
   * \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
   100
   * 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
   101
   * 
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   102
   * TODO is that clear?
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   103
   * 
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   104
   * \{
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
  /// Close link
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   107
  void Close (uint16_t localLinkID, uint16_t peerLinkID, dot11sReasonCode reason);
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   108
  /// Accept open link
4876
d78f1b978dac Rstructured file names: IeDot11s* no is Ie, because it is in namespace dot11s
Kirill Andreev <andreev@iitp.ru>
parents: 4873
diff changeset
   109
  void OpenAccept (uint16_t localLinkId, IeConfiguration conf);
4862
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   110
  /// Reject open link 
4876
d78f1b978dac Rstructured file names: IeDot11s* no is Ie, because it is in namespace dot11s
Kirill Andreev <andreev@iitp.ru>
parents: 4873
diff changeset
   111
  void OpenReject (uint16_t localLinkId, IeConfiguration conf, dot11sReasonCode reason);
4862
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   112
  /// Confirm accept
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   113
  void ConfirmAccept (
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   114
    uint16_t localLinkId,
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   115
    uint16_t peerLinkId,
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   116
    uint16_t peerAid,
4876
d78f1b978dac Rstructured file names: IeDot11s* no is Ie, because it is in namespace dot11s
Kirill Andreev <andreev@iitp.ru>
parents: 4873
diff changeset
   117
    IeConfiguration conf
4862
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   118
  );
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   119
  /// Confirm reject
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   120
  void  ConfirmReject (
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   121
    uint16_t localLinkId,
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   122
    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
   123
    IeConfiguration  conf,
4862
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   124
    dot11sReasonCode reason
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   125
  );
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   126
  //\}
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   127
  
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   128
  /// True if link is established
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   129
  bool  LinkIsEstab () const;
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   130
  /// 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
   131
  bool  LinkIsIdle () const;
4866
564372fc5491 First management frame goes through new archotecture
Kirill Andreev <andreev@iitp.ru>
parents: 4864
diff changeset
   132
  /**
564372fc5491 First management frame goes through new archotecture
Kirill Andreev <andreev@iitp.ru>
parents: 4864
diff changeset
   133
   * 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
   134
   * link management frames
564372fc5491 First management frame goes through new archotecture
Kirill Andreev <andreev@iitp.ru>
parents: 4864
diff changeset
   135
   */
4873
3e5607e26273 Dot11s prefix removed
Kirill Andreev <andreev@iitp.ru>
parents: 4872
diff changeset
   136
  void SetMacPlugin(Ptr<PeerManagerMacPlugin> plugin);
4862
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   137
private:
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   138
  /// 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
   139
  enum  PeerState {
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   140
    IDLE,       
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   141
    LISTEN,
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   142
    OPN_SNT,
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   143
    CNF_RCVD,
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   144
    OPN_RCVD,
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   145
    ESTAB,
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   146
    HOLDING,
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   147
  };
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   148
  /// 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
   149
  enum  PeerEvent
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   150
  {
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   151
    CNCL,       ///< MLME-CancelPeerLink
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   152
    PASOPN,     ///< MLME-PassivePeerLinkOpen
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   153
    ACTOPN,     ///< MLME-ActivePeerLinkOpen
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   154
    CLS_ACPT,   ///< PeerLinkClose_Accept
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   155
    OPN_ACPT,   ///< PeerLinkOpen_Accept
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   156
    OPN_RJCT,   ///< PeerLinkOpen_Reject
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   157
    REQ_RJCT,   ///< PeerLinkOpenReject by internal reason
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   158
    CNF_ACPT,   ///< PeerLinkConfirm_Accept
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   159
    CNF_RJCT,   ///< PeerLinkConfirm_Reject
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   160
    TOR1,       ///< Timeout of retry timer
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   161
    TOR2,       ///< also timeout of retry timer
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   162
    TOC,        ///< Timeout of confirm timer
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   163
    TOH,        ///< Timeout of holding (gracefull closing) timer
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   164
  };
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   165
  
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   166
private:
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   167
  /// State transition
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   168
  void StateMachine (PeerEvent event, dot11sReasonCode = REASON11S_RESERVED);
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
   * \name Event handlers
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   172
   * \{ 
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   173
   */
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   174
  void ClearRetryTimer ();
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   175
  void ClearConfirmTimer ();
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   176
  void ClearHoldingTimer ();
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   177
  void SetHoldingTimer ();
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   178
  void SetRetryTimer ();
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   179
  void SetConfirmTimer ();
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   180
  //\}
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   181
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   182
  /** 
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   183
   * \name Work with management frames
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   184
   * \{
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
  void SendPeerLinkClose (dot11sReasonCode reasoncode);
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   187
  void SendPeerLinkOpen ();
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   188
  void SendPeerLinkConfirm ();
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
  
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   191
  /** 
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   192
   * \name Timeout handlers 
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   193
   * \{
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
  void HoldingTimeout ();
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   196
  void RetryTimeout ();
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   197
  void ConfirmTimeout ();
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
private:
4866
564372fc5491 First management frame goes through new archotecture
Kirill Andreev <andreev@iitp.ru>
parents: 4864
diff changeset
   201
  ///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
   202
  uint32_t m_interface;
564372fc5491 First management frame goes through new archotecture
Kirill Andreev <andreev@iitp.ru>
parents: 4864
diff changeset
   203
  /// pointer to mac plugin, which is responsible for peer management
4873
3e5607e26273 Dot11s prefix removed
Kirill Andreev <andreev@iitp.ru>
parents: 4872
diff changeset
   204
  Ptr<PeerManagerMacPlugin> m_macPlugin;
4862
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   205
  /// Peer address
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   206
  Mac48Address m_peerAddress;
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   207
  /// My ID of this link
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   208
  uint16_t m_localLinkId;
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   209
  /// Peer ID of this link
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   210
  uint16_t m_peerLinkId;
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   211
  /// My association ID
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   212
  uint16_t m_assocId;
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   213
  /// Assoc Id assigned to me by peer
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   214
  uint16_t m_peerAssocId;
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   215
    
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   216
  /// When last beacon was sent (TODO or received?)
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   217
  Time  m_lastBeacon;
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   218
  /// Current beacon interval on corresponding interface
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   219
  Time  m_beaconInterval;
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   220
  
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   221
  /// Current state
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   222
  PeerState m_state;
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   223
  /// 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
   224
  IeConfiguration m_configuration;
4862
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   225
  
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   226
  // State is a bitfield as defined as follows:
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   227
  // 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
   228
  IeBeaconTiming m_beaconTiming;
4862
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   229
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   230
  /**
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   231
   * \name Timers & counters used for internal state transitions
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   232
   * \{
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
  Time     m_retryTimeout;
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   235
  EventId  m_retryTimer;
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   236
  Time     m_holdingTimeout;
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   237
  EventId  m_holdingTimer;
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   238
  Time     m_confirmTimeout;
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   239
  EventId  m_confirmTimer;
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   240
  uint16_t m_maxRetries;
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   241
  uint16_t m_retryCounter;
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   242
  EventId  m_beaconLossTimer;
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   243
  uint16_t  m_maxBeaconLoss;
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   244
  //\}
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   245
  
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   246
  /// ?
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   247
  void BeaconLoss ();
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   248
   
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   249
  /// How to report my status change
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   250
  SignalStatusCallback m_linkStatusCallback;
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   251
};
6a14f272a033 PeerLink refactored (use peer-link.h)
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   252
  
4872
ea1bce018a44 Added namespace dot11s
Kirill Andreev <andreev@iitp.ru>
parents: 4871
diff changeset
   253
} // namespace dot11s
ea1bce018a44 Added namespace dot11s
Kirill Andreev <andreev@iitp.ru>
parents: 4871
diff changeset
   254
} //namespace ns3
4864
e13e65c3ba12 Merge with ns-3-dev.
Andrey Mazo <mazo@iitp.ru>
parents: 4862
diff changeset
   255
#endif /* PEERLLINK_H_ */