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 MESH_WIFI_BEACON_H 22 #define MESH_WIFI_BEACON_H 23 24 #include "ns3/object.h" 25 #include "ns3/packet.h" 26 #include "ns3/mgt-headers.h" 27 #include "ns3/mesh-information-element-vector.h" 28 29 namespace ns3 { 30 31 class WifiMacHeader; 32 class Time; 33 34 /** 35 * \brief Beacon is beacon header + list of arbitrary information elements 36 * 37 * It is supposed that distinct mesh protocols can use beacons to transport 38 * their own information elements. 39 */ 40 class MeshWifiBeacon 41 { 42 public: 43 /** 44 * C-tor 45 * 46 * \param ssid is SSID for beacon header 47 * \param rates is a set of supported rates 48 * \param us beacon interval in microseconds 49 */ 50 MeshWifiBeacon (Ssid ssid, SupportedRates rates, uint64_t us); 51 /** 52 * Read standard Wifi beacon header 53 * 54 * \returns the management beacon header 55 */ BeaconHeader()56 MgtBeaconHeader BeaconHeader () const { return m_header; } 57 /** 58 * Add information element 59 * 60 * \param ie the Wifi information element 61 */ 62 void AddInformationElement (Ptr<WifiInformationElement> ie); 63 64 /** 65 * Create Wifi header for beacon frame. 66 * 67 * \param address is sender address 68 * \param mpAddress is mesh point address 69 * \returns the WifiMacHeader 70 */ 71 WifiMacHeader CreateHeader (Mac48Address address, Mac48Address mpAddress); 72 /** 73 * Returns the beacon interval of Wifi beacon 74 * 75 * \returns the beacon interval time 76 */ 77 Time GetBeaconInterval () const; 78 /** 79 * Create frame = { beacon header + all information elements sorted by ElementId () } 80 * 81 * \returns the frame 82 */ 83 Ptr<Packet> CreatePacket (); 84 85 private: 86 /// Beacon header 87 MgtBeaconHeader m_header; 88 /// List of information elements added 89 MeshInformationElementVector m_elements; 90 }; 91 92 } 93 94 #endif /* MESH_WIFI_BEACON_H */ 95