1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ 2 /* 3 * Copyright (c) 2007-2009 Strasbourg University 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: David Gross <gdavid.devel@gmail.com> 19 */ 20 21 #ifndef IPV6_EXTENSION_DEMUX_H 22 #define IPV6_EXTENSION_DEMUX_H 23 24 #include <list> 25 #include "ns3/object.h" 26 #include "ns3/ptr.h" 27 28 namespace ns3 29 { 30 31 class Ipv6Extension; 32 class Node; 33 34 /** 35 * \ingroup ipv6HeaderExt 36 * 37 * \brief Demultiplexes IPv6 extensions. 38 */ 39 class Ipv6ExtensionDemux : public Object 40 { 41 public: 42 /** 43 * \brief The interface ID. 44 * \return type ID 45 */ 46 static TypeId GetTypeId (void); 47 48 /** 49 * \brief Constructor. 50 */ 51 Ipv6ExtensionDemux (); 52 53 /** 54 * \brief Destructor. 55 */ 56 virtual ~Ipv6ExtensionDemux (); 57 58 /** 59 * \brief Set the node. 60 * \param node the node to set 61 */ 62 void SetNode (Ptr<Node> node); 63 64 /** 65 * \brief Insert a new IPv6 Extension. 66 * \param extension the extension to insert 67 */ 68 void Insert (Ptr<Ipv6Extension> extension); 69 70 /** 71 * \brief Get the extension corresponding to extensionNumber. 72 * \param extensionNumber extension number of the extension to retrieve 73 * \return a matching IPv6 extension 74 */ 75 Ptr<Ipv6Extension> GetExtension (uint8_t extensionNumber); 76 77 /** 78 * \brief Remove an extension from this demux. 79 * \param extension pointer on the extension to remove 80 */ 81 void Remove (Ptr<Ipv6Extension> extension); 82 83 protected: 84 /** 85 * \brief Dispose object. 86 */ 87 virtual void DoDispose (); 88 89 private: 90 91 /** 92 * \brief Container of the IPv6 Extensions. 93 */ 94 typedef std::list<Ptr<Ipv6Extension> > Ipv6ExtensionList_t; 95 96 /** 97 * \brief List of IPv6 Extensions supported. 98 */ 99 Ipv6ExtensionList_t m_extensions; 100 101 /** 102 * \brief The node. 103 */ 104 Ptr<Node> m_node; 105 }; 106 107 } /* namespace ns3 */ 108 109 #endif /* IPV6_EXTENSION_DEMUX_H */ 110 111