src/devices/mesh/mesh-wifi-interface-mac-plugin.h
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Thu Nov 12 13:01:01 2009 +0100 (2009-11-12)
changeset 5505 c0ac392289c3
parent 5012 c81291702113
permissions -rw-r--r--
replace RefCountBase with SimpleRefCount<> to avoid duplicate refcounting implementations.
     1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
     2 /* 
     3  * Copyright (c) 2009 IITP RAS
     4  * 
     5  * This program is free software; you can redistribute it and/or modify
     6  * it under the terms of the GNU General Public License version 2 as
     7  * published by the Free Software Foundation;
     8  *
     9  * This program is distributed in the hope that it will be useful,
    10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
    11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    12  * GNU General Public License for more details.
    13  *
    14  * You should have received a copy of the GNU General Public License
    15  * along with this program; if not, write to the Free Software
    16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    17  * 
    18  * Author: Pavel Boyko <boyko@iitp.ru>
    19  */
    20 
    21 #ifndef MESHWIFIINTERFACEMACPLUGIN_H_
    22 #define MESHWIFIINTERFACEMACPLUGIN_H_
    23 
    24 #include "ns3/wifi-mac-header.h"
    25 #include "ns3/packet.h"
    26 #include "ns3/mac48-address.h"
    27 #include "ns3/mesh-wifi-beacon.h"
    28 #include "ns3/simple-ref-count.h"
    29 
    30 namespace ns3 {
    31 
    32 class MeshWifiInterfaceMac;
    33   
    34 /**
    35  * \ingroup mesh
    36  * 
    37  * \brief Common interface for mesh point interface MAC plugins
    38  * 
    39  * TODO: plugins description
    40  */
    41 class MeshWifiInterfaceMacPlugin : public SimpleRefCount<MeshWifiInterfaceMacPlugin>
    42 {
    43 public:
    44   /// This is for subclasses
    45   virtual ~MeshWifiInterfaceMacPlugin (){};
    46   /// Each plugin must be installed on interface to work 
    47   virtual void SetParent (Ptr<MeshWifiInterfaceMac> parent) = 0; 
    48   /** 
    49    * \brief Process received frame
    50    * 
    51    * \return false if (and only if) frame should be dropped
    52    * TODO define when MAC call this
    53    */
    54   virtual bool Receive (Ptr<Packet> packet, const WifiMacHeader & header) = 0;
    55   /**
    56    * \brief Update frame before it will be forwarded down
    57    * 
    58    * \return false if (and only if) frame should be dropped
    59    * TODO define when MAC call this, preconditions & postconditions
    60    */
    61   virtual bool UpdateOutcomingFrame (Ptr<Packet> packet, WifiMacHeader & header, Mac48Address from, Mac48Address to) = 0;
    62   /**
    63    * \brief Update beacon before it will be formed and sent
    64    *  
    65    * TODO define when MAC call this
    66    */
    67   virtual void UpdateBeacon (MeshWifiBeacon & beacon) const = 0;
    68 };
    69 
    70 } // namespace ns3
    71 #endif /* MESHWIFIINTERFACEMACPLUGIN_H_ */