1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ 2 /* 3 * Copyright (c) 2011 Bucknell 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 * Authors: L. Felipe Perrone (perrone@bucknell.edu) 19 * Tiago G. Rodrigues (tgr002@bucknell.edu) 20 * 21 * Modified by: Mitch Watrous (watrous@u.washington.edu) 22 * Adapted to Ipv6 by: Tommaso Pecorella (tommaso.pecorella@unifi.it) 23 */ 24 25 #ifndef IPV6_PACKET_PROBE_H 26 #define IPV6_PACKET_PROBE_H 27 28 #include "ns3/object.h" 29 #include "ns3/callback.h" 30 #include "ns3/boolean.h" 31 #include "ns3/nstime.h" 32 #include "ns3/packet.h" 33 #include "ns3/ipv6.h" 34 #include "ns3/traced-value.h" 35 #include "ns3/simulator.h" 36 #include "ns3/probe.h" 37 38 namespace ns3 { 39 40 /** 41 * \ingroup ipv6 42 * 43 * This class is designed to probe an underlying ns3 TraceSource 44 * exporting a packet, an IPv6 object, and an interface. This probe 45 * exports a trace source "Output" with arguments of type Ptr<const Packet>, 46 * Ptr<Ipv6>, and uint32_t. The Output trace source emits a value 47 * when either the trace source emits a new value, or when SetValue () 48 * is called. 49 */ 50 class Ipv6PacketProbe : public Probe 51 { 52 public: 53 /** 54 * \brief Get the type ID. 55 * \return the object TypeId 56 */ 57 static TypeId GetTypeId (); 58 59 Ipv6PacketProbe (); 60 virtual ~Ipv6PacketProbe (); 61 62 /** 63 * \brief Set a probe value 64 * 65 * \param packet set the traced packet equal to this 66 * \param ipv6 set the IPv6 object for the traced packet equal to this 67 * \param interface set the IPv6 interface for the traced packet equal to this 68 */ 69 void SetValue (Ptr<const Packet> packet, Ptr<Ipv6> ipv6, uint32_t interface); 70 71 /** 72 * \brief Set a probe value by its name in the Config system 73 * 74 * \param path config path to access the probe 75 * \param packet set the traced packet equal to this 76 * \param ipv6 set the IPv6 object for the traced packet equal to this 77 * \param interface set the IPv6 interface for the traced packet equal to this 78 */ 79 static void SetValueByPath (std::string path, Ptr<const Packet> packet, Ptr<Ipv6> ipv6, uint32_t interface); 80 81 /** 82 * \brief connect to a trace source attribute provided by a given object 83 * 84 * \param traceSource the name of the attribute TraceSource to connect to 85 * \param obj ns3::Object to connect to 86 * \return true if the trace source was successfully connected 87 */ 88 virtual bool ConnectByObject (std::string traceSource, Ptr<Object> obj); 89 90 /** 91 * \brief connect to a trace source provided by a config path 92 * 93 * \param path Config path to bind to 94 * 95 * Note, if an invalid path is provided, the probe will not be connected 96 * to anything. 97 */ 98 virtual void ConnectByPath (std::string path); 99 100 private: 101 /** 102 * \brief Method to connect to an underlying ns3::TraceSource with 103 * arguments of type Ptr<const Packet>, Ptr<Ipv6>, and uint32_t 104 * 105 * \param packet the traced packet 106 * \param ipv6 the IPv6 object for the traced packet 107 * \param interface the IPv6 interface for the traced packet 108 */ 109 void TraceSink (Ptr<const Packet> packet, Ptr<Ipv6> ipv6, uint32_t interface); 110 111 /// Traced Callback: the packet, the Ipv6 object and the interface. 112 ns3::TracedCallback<Ptr<const Packet>, Ptr<Ipv6>, uint32_t> m_output; 113 /// Traced Callback: the previous packet's size and the actual packet's size. 114 ns3::TracedCallback<uint32_t, uint32_t> m_outputBytes; 115 116 /// The traced packet. 117 Ptr<const Packet> m_packet; 118 119 /// The IPv6 object for the traced packet. 120 Ptr<Ipv6> m_ipv6; 121 122 /// The IPv6 interface for the traced packet. 123 uint32_t m_interface; 124 125 /// The size of the traced packet. 126 uint32_t m_packetSizeOld; 127 }; 128 129 130 } // namespace ns3 131 132 #endif // IPV6_PACKET_PROBE_H 133