Outgoing data packets are dropped if there is no active link, MultihopAction
authorKirill Andreev <andreev@iitp.ru>
Wed, 29 Apr 2009 16:56:28 +0400
changeset 4984 77ab6e01a1c3
parent 4983 d10bfc9054a3
child 4985 8dbdba66f5e1
Outgoing data packets are dropped if there is no active link, MultihopAction renamed to Action (as it should be)
src/devices/mesh/dot11s/dot11s-mac-header.cc
src/devices/mesh/dot11s/dot11s-mac-header.h
src/devices/mesh/dot11s/hwmp-mac-plugin.cc
src/devices/mesh/dot11s/hwmp-protocol.cc
src/devices/mesh/dot11s/peer-link-frame.cc
src/devices/mesh/dot11s/peer-management-plugin.cc
--- a/src/devices/mesh/dot11s/dot11s-mac-header.cc	Wed Apr 29 16:18:50 2009 +0400
+++ b/src/devices/mesh/dot11s/dot11s-mac-header.cc	Wed Apr 29 16:56:28 2009 +0400
@@ -178,18 +178,18 @@
       );
 }
 /**********************************************************
- *   MultihopActionFrame
+ *   ActionFrame
  **********************************************************/
-WifiMeshMultihopActionHeader::WifiMeshMultihopActionHeader ()
+WifiMeshActionHeader::WifiMeshActionHeader ()
 {
 }
-WifiMeshMultihopActionHeader::~WifiMeshMultihopActionHeader ()
+WifiMeshActionHeader::~WifiMeshActionHeader ()
 {
 }
 void
-WifiMeshMultihopActionHeader::SetAction (
-  WifiMeshMultihopActionHeader::CategoryValue type,
-  WifiMeshMultihopActionHeader::ActionValue action)
+WifiMeshActionHeader::SetAction (
+  WifiMeshActionHeader::CategoryValue type,
+  WifiMeshActionHeader::ActionValue action)
 {
   m_category = type;
   
@@ -211,8 +211,8 @@
       break;
     };
 }
-WifiMeshMultihopActionHeader::CategoryValue
-WifiMeshMultihopActionHeader::GetCategory ()
+WifiMeshActionHeader::CategoryValue
+WifiMeshActionHeader::GetCategory ()
 {
   switch (m_category)
     {
@@ -231,8 +231,8 @@
       return MESH_PEER_LINK_MGT;
     }
 }
-WifiMeshMultihopActionHeader::ActionValue
-WifiMeshMultihopActionHeader::GetAction ()
+WifiMeshActionHeader::ActionValue
+WifiMeshActionHeader::GetAction ()
 {
   ActionValue retval;
   switch (m_category)
@@ -284,36 +284,36 @@
     }
 }
 TypeId
-WifiMeshMultihopActionHeader::GetTypeId ()
+WifiMeshActionHeader::GetTypeId ()
 {
-  static TypeId tid = TypeId ("ns3::WifiMeshMultihopActionHeader")
+  static TypeId tid = TypeId ("ns3::WifiMeshActionHeader")
                       .SetParent<Header> ()
-                      .AddConstructor<WifiMeshMultihopActionHeader> ()
+                      .AddConstructor<WifiMeshActionHeader> ()
                       ;
   return tid;
 }
 TypeId
-WifiMeshMultihopActionHeader::GetInstanceTypeId () const
+WifiMeshActionHeader::GetInstanceTypeId () const
 {
   return GetTypeId ();
 }
 void
-WifiMeshMultihopActionHeader::Print (std::ostream &os) const
+WifiMeshActionHeader::Print (std::ostream &os) const
 {
 }
 uint32_t
-WifiMeshMultihopActionHeader::GetSerializedSize () const
+WifiMeshActionHeader::GetSerializedSize () const
 {
   return 2;
 }
 void
-WifiMeshMultihopActionHeader::Serialize (Buffer::Iterator start) const
+WifiMeshActionHeader::Serialize (Buffer::Iterator start) const
 {
   start.WriteU8 (m_category);
   start.WriteU8 (m_actionValue);
 }
 uint32_t
-WifiMeshMultihopActionHeader::Deserialize (Buffer::Iterator start)
+WifiMeshActionHeader::Deserialize (Buffer::Iterator start)
 {
   Buffer::Iterator i = start;
   m_category = i.ReadU8 ();
--- a/src/devices/mesh/dot11s/dot11s-mac-header.h	Wed Apr 29 16:18:50 2009 +0400
+++ b/src/devices/mesh/dot11s/dot11s-mac-header.h	Wed Apr 29 16:56:28 2009 +0400
@@ -79,16 +79,16 @@
  * Multichop action frame consists of Mesh header, Action, and
  * the last information. Mesh header is present within all data
  * frames and multihop action frames, so Mesh header is a
- * separate structure. Each MultihopAction frames (frames like
+ * separate structure. Each Action frames (frames like
  * PREQ, PREP and other) start form Category field and Action
  * value field, so the Multihop Action Frame should containt
  * three fields: Category, Action Value.
  */
-class WifiMeshMultihopActionHeader : public Header 
+class WifiMeshActionHeader : public Header 
 {
 public:
-  WifiMeshMultihopActionHeader ();
-  ~WifiMeshMultihopActionHeader ();
+  WifiMeshActionHeader ();
+  ~WifiMeshActionHeader ();
       
   /* Compatible with open80211s implementation */
   enum CategoryValue //table 7-24 staring from 4
--- a/src/devices/mesh/dot11s/hwmp-mac-plugin.cc	Wed Apr 29 16:18:50 2009 +0400
+++ b/src/devices/mesh/dot11s/hwmp-mac-plugin.cc	Wed Apr 29 16:56:28 2009 +0400
@@ -85,16 +85,14 @@
   }
   if(header.IsAction())
   {
-    // TODO don't use multihop header
-    //parse multihop action header:
-    WifiMeshMultihopActionHeader multihopHdr;
-    packet->RemoveHeader (multihopHdr);
-    WifiMeshMultihopActionHeader::ActionValue actionValue = multihopHdr.GetAction ();
-    if(multihopHdr.GetCategory () != WifiMeshMultihopActionHeader::MESH_PATH_SELECTION)
+    WifiMeshActionHeader actionHdr;
+    packet->RemoveHeader (actionHdr);
+    WifiMeshActionHeader::ActionValue actionValue = actionHdr.GetAction ();
+    if(actionHdr.GetCategory () != WifiMeshActionHeader::MESH_PATH_SELECTION)
       return true;
     switch (actionValue.pathSelection)
     {
-      case WifiMeshMultihopActionHeader::PATH_REQUEST:
+      case WifiMeshActionHeader::PATH_REQUEST:
         {
           IePreq preq;
           packet->RemoveHeader (preq);
@@ -106,7 +104,7 @@
           m_protocol->ReceivePreq (preq, header.GetAddr2 (), m_ifIndex, m_parent->GetLinkMetric(header.GetAddr2 ()));
           return false;
         }
-      case WifiMeshMultihopActionHeader::PATH_REPLY:
+      case WifiMeshActionHeader::PATH_REPLY:
         {
           IePrep prep;
           packet->RemoveHeader (prep);
@@ -116,14 +114,14 @@
           m_protocol->ReceivePrep (prep, header.GetAddr2 (), m_ifIndex, m_parent->GetLinkMetric(header.GetAddr2 ()));
           return false;
         }
-      case WifiMeshMultihopActionHeader::PATH_ERROR:
+      case WifiMeshActionHeader::PATH_ERROR:
         {
           IePerr perr;
           packet->RemoveHeader (perr);
           m_protocol->ReceivePerr (perr, header.GetAddr2 (), m_ifIndex);
           return false;
         }
-      case WifiMeshMultihopActionHeader::ROOT_ANNOUNCEMENT:
+      case WifiMeshActionHeader::ROOT_ANNOUNCEMENT:
         return false;
     }
   }
@@ -187,12 +185,12 @@
   m_preqTimer = Simulator::Schedule (m_protocol->GetPreqMinInterval (), &HwmpMacPlugin::SendOnePreq, this);
   Ptr<Packet> packet  = Create<Packet> ();
   packet->AddHeader(m_preqQueue[0]);
-  //Multihop action header:
-  WifiMeshMultihopActionHeader multihopHdr;
-  WifiMeshMultihopActionHeader::ActionValue action;
-  action.pathSelection = WifiMeshMultihopActionHeader::PATH_REQUEST;
-  multihopHdr.SetAction (WifiMeshMultihopActionHeader::MESH_PATH_SELECTION, action);
-  packet->AddHeader (multihopHdr);
+  //Action header:
+  WifiMeshActionHeader actionHdr;
+  WifiMeshActionHeader::ActionValue action;
+  action.pathSelection = WifiMeshActionHeader::PATH_REQUEST;
+  actionHdr.SetAction (WifiMeshActionHeader::MESH_PATH_SELECTION, action);
+  packet->AddHeader (actionHdr);
   //create 802.11 header:
   WifiMacHeader hdr;
   hdr.SetAction ();
@@ -224,12 +222,12 @@
 //Create packet
   Ptr<Packet> packet  = Create<Packet> ();
   packet->AddHeader(m_myPerr.perr);
-  //Multihop action header:
-  WifiMeshMultihopActionHeader multihopHdr;
-  WifiMeshMultihopActionHeader::ActionValue action;
-  action.pathSelection = WifiMeshMultihopActionHeader::PATH_ERROR;
-  multihopHdr.SetAction (WifiMeshMultihopActionHeader::MESH_PATH_SELECTION, action);
-  packet->AddHeader (multihopHdr);
+  //Action header:
+  WifiMeshActionHeader actionHdr;
+  WifiMeshActionHeader::ActionValue action;
+  action.pathSelection = WifiMeshActionHeader::PATH_ERROR;
+  actionHdr.SetAction (WifiMeshActionHeader::MESH_PATH_SELECTION, action);
+  packet->AddHeader (actionHdr);
   //create 802.11 header:
   WifiMacHeader hdr;
   hdr.SetAction ();
@@ -252,12 +250,12 @@
   //Create packet
   Ptr<Packet> packet  = Create<Packet> ();
   packet->AddHeader(prep);
-  //Multihop action header:
-  WifiMeshMultihopActionHeader multihopHdr;
-  WifiMeshMultihopActionHeader::ActionValue action;
-  action.pathSelection = WifiMeshMultihopActionHeader::PATH_REPLY;
-  multihopHdr.SetAction (WifiMeshMultihopActionHeader::MESH_PATH_SELECTION, action);
-  packet->AddHeader (multihopHdr);
+  //Action header:
+  WifiMeshActionHeader actionHdr;
+  WifiMeshActionHeader::ActionValue action;
+  action.pathSelection = WifiMeshActionHeader::PATH_REPLY;
+  actionHdr.SetAction (WifiMeshActionHeader::MESH_PATH_SELECTION, action);
+  packet->AddHeader (actionHdr);
   //create 802.11 header:
   WifiMacHeader hdr;
   hdr.SetAction ();
--- a/src/devices/mesh/dot11s/hwmp-protocol.cc	Wed Apr 29 16:18:50 2009 +0400
+++ b/src/devices/mesh/dot11s/hwmp-protocol.cc	Wed Apr 29 16:56:28 2009 +0400
@@ -132,7 +132,7 @@
         )
     .AddAttribute ("doFlag",
         "Destination only HWMP flag",
-        BooleanValue (true),
+        BooleanValue (false),
         MakeUintegerAccessor (&HwmpProtocol::m_doFlag),
         MakeUintegerChecker<bool> ()
         )
--- a/src/devices/mesh/dot11s/peer-link-frame.cc	Wed Apr 29 16:18:50 2009 +0400
+++ b/src/devices/mesh/dot11s/peer-link-frame.cc	Wed Apr 29 16:56:28 2009 +0400
@@ -48,15 +48,15 @@
 {
   m_subtype = fields.subtype;
   m_protocol = fields.protocol;
-  if(m_subtype != (uint8_t)(WifiMeshMultihopActionHeader::PEER_LINK_CLOSE))
+  if(m_subtype != (uint8_t)(WifiMeshActionHeader::PEER_LINK_CLOSE))
     m_capability = fields.capability;
-  if(m_subtype == (uint8_t)(WifiMeshMultihopActionHeader::PEER_LINK_CONFIRM))
+  if(m_subtype == (uint8_t)(WifiMeshActionHeader::PEER_LINK_CONFIRM))
     m_aid = fields.aid;
-  if(m_subtype != (uint8_t)(WifiMeshMultihopActionHeader::PEER_LINK_CLOSE))
+  if(m_subtype != (uint8_t)(WifiMeshActionHeader::PEER_LINK_CLOSE))
     m_rates = fields.rates;
-  if(m_subtype != (uint8_t)(WifiMeshMultihopActionHeader::PEER_LINK_CONFIRM))
+  if(m_subtype != (uint8_t)(WifiMeshActionHeader::PEER_LINK_CONFIRM))
     m_meshId = fields.meshId;
-  if(m_subtype != (uint8_t)(WifiMeshMultihopActionHeader::PEER_LINK_CLOSE))
+  if(m_subtype != (uint8_t)(WifiMeshActionHeader::PEER_LINK_CLOSE))
     m_config = fields.config;
   else
     m_reasonCode = fields.reasonCode;
@@ -121,15 +121,15 @@
 {
   uint32_t size = 3; //Peering protocol
   NS_ASSERT(m_subtype < 3);
-  if ((uint8_t)(WifiMeshMultihopActionHeader::PEER_LINK_CLOSE) != m_subtype)
+  if ((uint8_t)(WifiMeshActionHeader::PEER_LINK_CLOSE) != m_subtype)
     size += 2;  //capability
-  if ((uint8_t)(WifiMeshMultihopActionHeader::PEER_LINK_CONFIRM) == m_subtype)
+  if ((uint8_t)(WifiMeshActionHeader::PEER_LINK_CONFIRM) == m_subtype)
     size += 2; //AID of remote peer
-  if ((uint8_t)(WifiMeshMultihopActionHeader::PEER_LINK_CLOSE) != m_subtype)
+  if ((uint8_t)(WifiMeshActionHeader::PEER_LINK_CLOSE) != m_subtype)
     size += m_rates.GetSerializedSize ();
-  if ((uint8_t)(WifiMeshMultihopActionHeader::PEER_LINK_CONFIRM) != m_subtype)
+  if ((uint8_t)(WifiMeshActionHeader::PEER_LINK_CONFIRM) != m_subtype)
     size += m_meshId.GetSerializedSize ();
-  if ((uint8_t)(WifiMeshMultihopActionHeader::PEER_LINK_CLOSE) != m_subtype)
+  if ((uint8_t)(WifiMeshActionHeader::PEER_LINK_CLOSE) != m_subtype)
     size += m_config.GetSerializedSize ();
   else
     size += 2; //reasonCode
@@ -143,15 +143,15 @@
   NS_ASSERT(m_subtype < 3);
   m_protocol.Serialize (i);
   i.Next (m_protocol.GetSerializedSize ());
-  if ((uint8_t)(WifiMeshMultihopActionHeader::PEER_LINK_CLOSE) != m_subtype)
+  if ((uint8_t)(WifiMeshActionHeader::PEER_LINK_CLOSE) != m_subtype)
     i.WriteHtonU16(m_capability);
-  if ((uint8_t)(WifiMeshMultihopActionHeader::PEER_LINK_CONFIRM) == m_subtype)
+  if ((uint8_t)(WifiMeshActionHeader::PEER_LINK_CONFIRM) == m_subtype)
     i.WriteHtonU16 (m_aid);
-  if ((uint8_t)(WifiMeshMultihopActionHeader::PEER_LINK_CLOSE) != m_subtype)
+  if ((uint8_t)(WifiMeshActionHeader::PEER_LINK_CLOSE) != m_subtype)
     i = m_rates.Serialize (i);
-  if ((uint8_t)(WifiMeshMultihopActionHeader::PEER_LINK_CONFIRM) != m_subtype)
+  if ((uint8_t)(WifiMeshActionHeader::PEER_LINK_CONFIRM) != m_subtype)
     i = m_meshId.Serialize (i);
-  if ((uint8_t)(WifiMeshMultihopActionHeader::PEER_LINK_CLOSE) != m_subtype)
+  if ((uint8_t)(WifiMeshActionHeader::PEER_LINK_CLOSE) != m_subtype)
   {
     m_config.Serialize (i);
     i.Next(m_config.GetSerializedSize ());
@@ -167,15 +167,15 @@
   NS_ASSERT(m_subtype < 3);
   m_protocol.Deserialize (i);
   i.Next (m_protocol.GetSerializedSize ());
-  if ((uint8_t)(WifiMeshMultihopActionHeader::PEER_LINK_CLOSE) != m_subtype)
+  if ((uint8_t)(WifiMeshActionHeader::PEER_LINK_CLOSE) != m_subtype)
     m_capability = i.ReadNtohU16();
-  if ((uint8_t)(WifiMeshMultihopActionHeader::PEER_LINK_CONFIRM) == m_subtype)
+  if ((uint8_t)(WifiMeshActionHeader::PEER_LINK_CONFIRM) == m_subtype)
     m_aid = i.ReadNtohU16 ();
-  if ((uint8_t)(WifiMeshMultihopActionHeader::PEER_LINK_CLOSE) != m_subtype)
+  if ((uint8_t)(WifiMeshActionHeader::PEER_LINK_CLOSE) != m_subtype)
     i = m_rates.Deserialize (i);
-  if ((uint8_t)(WifiMeshMultihopActionHeader::PEER_LINK_CONFIRM) != m_subtype)
+  if ((uint8_t)(WifiMeshActionHeader::PEER_LINK_CONFIRM) != m_subtype)
     i = m_meshId.Deserialize (i);
-  if ((uint8_t)(WifiMeshMultihopActionHeader::PEER_LINK_CLOSE) != m_subtype)
+  if ((uint8_t)(WifiMeshActionHeader::PEER_LINK_CLOSE) != m_subtype)
   {
     m_config.Deserialize (i);
     i.Next (m_config.GetSerializedSize ());
@@ -213,7 +213,7 @@
   {
     PeerLinkFrameStart a;
     PeerLinkFrameStart::PlinkFrameStartFields fields;
-    fields.subtype = (uint8_t)(WifiMeshMultihopActionHeader::PEER_LINK_OPEN);
+    fields.subtype = (uint8_t)(WifiMeshActionHeader::PEER_LINK_OPEN);
     fields.aid = 101;
     fields.reasonCode = 12;
     fields.meshId = Ssid("qwertyuiop");
@@ -221,14 +221,14 @@
     Ptr<Packet> packet = Create<Packet> ();
     packet->AddHeader (a);
     PeerLinkFrameStart b;
-    b.SetPlinkFrameSubtype((uint8_t)(WifiMeshMultihopActionHeader::PEER_LINK_OPEN));
+    b.SetPlinkFrameSubtype((uint8_t)(WifiMeshActionHeader::PEER_LINK_OPEN));
     packet->RemoveHeader (b);
     NS_TEST_ASSERT_EQUAL (a, b);
   }
   {
     PeerLinkFrameStart a;
     PeerLinkFrameStart::PlinkFrameStartFields fields;
-    fields.subtype = (uint8_t)(WifiMeshMultihopActionHeader::PEER_LINK_CONFIRM);
+    fields.subtype = (uint8_t)(WifiMeshActionHeader::PEER_LINK_CONFIRM);
     fields.aid = 1234;
     fields.reasonCode = 12;
     fields.meshId = Ssid("qwerty");
@@ -236,14 +236,14 @@
     Ptr<Packet> packet = Create<Packet> ();
     packet->AddHeader (a);
     PeerLinkFrameStart b;
-    b.SetPlinkFrameSubtype((uint8_t)(WifiMeshMultihopActionHeader::PEER_LINK_CONFIRM));
+    b.SetPlinkFrameSubtype((uint8_t)(WifiMeshActionHeader::PEER_LINK_CONFIRM));
     packet->RemoveHeader (b);
     NS_TEST_ASSERT_EQUAL (a, b);
   }
   {
     PeerLinkFrameStart a;
     PeerLinkFrameStart::PlinkFrameStartFields fields;
-    fields.subtype = (uint8_t)(WifiMeshMultihopActionHeader::PEER_LINK_CLOSE);
+    fields.subtype = (uint8_t)(WifiMeshActionHeader::PEER_LINK_CLOSE);
     fields.aid = 10;
     fields.meshId = Ssid("qqq");
     fields.reasonCode = 12;
@@ -251,7 +251,7 @@
     Ptr<Packet> packet = Create<Packet> ();
     packet->AddHeader (a);
     PeerLinkFrameStart b;
-    b.SetPlinkFrameSubtype((uint8_t)(WifiMeshMultihopActionHeader::PEER_LINK_CLOSE));
+    b.SetPlinkFrameSubtype((uint8_t)(WifiMeshActionHeader::PEER_LINK_CLOSE));
     packet->RemoveHeader (b);
     NS_TEST_ASSERT_EQUAL (a, b);
   }
--- a/src/devices/mesh/dot11s/peer-management-plugin.cc	Wed Apr 29 16:18:50 2009 +0400
+++ b/src/devices/mesh/dot11s/peer-management-plugin.cc	Wed Apr 29 16:56:28 2009 +0400
@@ -73,12 +73,11 @@
   }
   if(header.IsAction())
   {
-    WifiMeshMultihopActionHeader multihopHdr;
-    //parse multihop action header:
-    packet->RemoveHeader (multihopHdr);
-    WifiMeshMultihopActionHeader::ActionValue actionValue = multihopHdr.GetAction ();
+    WifiMeshActionHeader actionHdr;
+    packet->RemoveHeader (actionHdr);
+    WifiMeshActionHeader::ActionValue actionValue = actionHdr.GetAction ();
     // If can not handle - just return;
-    if(multihopHdr.GetCategory () != WifiMeshMultihopActionHeader::MESH_PEER_LINK_MGT)
+    if(actionHdr.GetCategory () != WifiMeshActionHeader::MESH_PEER_LINK_MGT)
       return true;
     Mac48Address peerAddress = header.GetAddr2 ();
     Mac48Address peerMpAddress = header.GetAddr3 ();
@@ -91,7 +90,7 @@
       NS_ASSERT(fields.subtype == actionValue.peerLink);
     }
     if (
-        (actionValue.peerLink != WifiMeshMultihopActionHeader::PEER_LINK_CLOSE) &&
+        (actionValue.peerLink != WifiMeshActionHeader::PEER_LINK_CLOSE) &&
         !(m_parent->CheckSupportedRates(fields.rates))
         )
       {
@@ -100,7 +99,7 @@
         return false;
       }
     if (
-        (actionValue.peerLink != WifiMeshMultihopActionHeader::PEER_LINK_CONFIRM) &&
+        (actionValue.peerLink != WifiMeshActionHeader::PEER_LINK_CONFIRM) &&
         !fields.meshId.IsEqual(m_parent->GetSsid())
         )
       {
@@ -113,15 +112,15 @@
     //Check taht frame subtype corresponds peer link subtype
     if(peerElement.SubtypeIsOpen ())
     {
-      NS_ASSERT(actionValue.peerLink == WifiMeshMultihopActionHeader::PEER_LINK_OPEN);
+      NS_ASSERT(actionValue.peerLink == WifiMeshActionHeader::PEER_LINK_OPEN);
     }
     if(peerElement.SubtypeIsConfirm ())
     {
-      NS_ASSERT(actionValue.peerLink == WifiMeshMultihopActionHeader::PEER_LINK_CONFIRM);
+      NS_ASSERT(actionValue.peerLink == WifiMeshActionHeader::PEER_LINK_CONFIRM);
     }
     if(peerElement.SubtypeIsClose ())
     {
-      NS_ASSERT(actionValue.peerLink == WifiMeshMultihopActionHeader::PEER_LINK_CLOSE);
+      NS_ASSERT(actionValue.peerLink == WifiMeshActionHeader::PEER_LINK_CLOSE);
     }
     //Deliver Peer link management frame to protocol:
     m_protocol->ReceivePeerLinkFrame(m_ifIndex, peerAddress, peerMpAddress, fields.aid, peerElement, fields.config);
@@ -134,7 +133,12 @@
 bool
 PeerManagerMacPlugin::UpdateOutcomingFrame (Ptr<Packet> packet, WifiMacHeader & header, Mac48Address from, Mac48Address to) const
 {
-  return true;
+  if(header.IsData ())
+    return true;
+  if(header.GetAddr1 ().IsGroup ())
+    return true;
+  else
+    return m_protocol->IsActiveLink(m_ifIndex,header.GetAddr1());
 }
 
 void
@@ -163,33 +167,33 @@
   PeerLinkFrameStart plinkFrame;
   //Create an 802.11 frame header:
   //Send management frame to MAC:
-  WifiMeshMultihopActionHeader multihopHdr;
+  WifiMeshActionHeader actionHdr;
   if (peerElement.SubtypeIsOpen ())
     {
-      WifiMeshMultihopActionHeader::ActionValue action;
-      action.peerLink = WifiMeshMultihopActionHeader::PEER_LINK_OPEN;
-      fields.subtype = WifiMeshMultihopActionHeader::PEER_LINK_OPEN;
-      multihopHdr.SetAction (WifiMeshMultihopActionHeader::MESH_PEER_LINK_MGT, action);
+      WifiMeshActionHeader::ActionValue action;
+      action.peerLink = WifiMeshActionHeader::PEER_LINK_OPEN;
+      fields.subtype = WifiMeshActionHeader::PEER_LINK_OPEN;
+      actionHdr.SetAction (WifiMeshActionHeader::MESH_PEER_LINK_MGT, action);
     }
   if (peerElement.SubtypeIsConfirm ())
     {
-      WifiMeshMultihopActionHeader::ActionValue action;
-      action.peerLink = WifiMeshMultihopActionHeader::PEER_LINK_CONFIRM;
+      WifiMeshActionHeader::ActionValue action;
+      action.peerLink = WifiMeshActionHeader::PEER_LINK_CONFIRM;
       fields.aid = aid;
-      fields.subtype = WifiMeshMultihopActionHeader::PEER_LINK_CONFIRM;
-      multihopHdr.SetAction (WifiMeshMultihopActionHeader::MESH_PEER_LINK_MGT, action);
+      fields.subtype = WifiMeshActionHeader::PEER_LINK_CONFIRM;
+      actionHdr.SetAction (WifiMeshActionHeader::MESH_PEER_LINK_MGT, action);
     }
   if (peerElement.SubtypeIsClose ())
     {
-      WifiMeshMultihopActionHeader::ActionValue action;
-      action.peerLink = WifiMeshMultihopActionHeader::PEER_LINK_CLOSE;
-      fields.subtype = WifiMeshMultihopActionHeader::PEER_LINK_CLOSE;
+      WifiMeshActionHeader::ActionValue action;
+      action.peerLink = WifiMeshActionHeader::PEER_LINK_CLOSE;
+      fields.subtype = WifiMeshActionHeader::PEER_LINK_CLOSE;
       fields.reasonCode = peerElement.GetReasonCode ();
-      multihopHdr.SetAction (WifiMeshMultihopActionHeader::MESH_PEER_LINK_MGT, action);
+      actionHdr.SetAction (WifiMeshActionHeader::MESH_PEER_LINK_MGT, action);
     }
   plinkFrame.SetPlinkFrameStart(fields);
   packet->AddHeader (plinkFrame);
-  packet->AddHeader (multihopHdr);
+  packet->AddHeader (actionHdr);
   // Wifi Mac header:
   WifiMacHeader hdr;
   hdr.SetAction ();