#ifndef TSN_NODE_H #define TSN_NODE_H #include "ns3/node.h" #include "ns3/traced-callback.h" #include "ns3/clock.h" #include "ns3/tsn-net-device.h" #include "ns3/switch-net-device.h" #include "stream-identity-entry.h" #include "stream-identification-function.h" #include "frer-sequence-generation-function.h" #include "frer-sequence-encode-decode-function.h" #include "frer-sequence-recovery-function.h" #include "psfp-stream-filter-instance.h" #include "psfp-flow-meter-instance.h" namespace ns3 { class TsnNetDevice; class TsnAggregatedNetDevice; class TsnMultidropNetDevice; class SwitchNetDevice; class StreamIdEntry; class SequenceGenerationFunction; class SequenceEncodeDecodeFunction; class SequenceRecoveryFunction; /** * \ingroup tsn * * \brief A network tsn Node. * * It add clocks to the ns3 vanilla Node */ class TsnNode: public Node { public: /** * \brief Get the TypeId * * \return The TypeId for this class */ static TypeId GetTypeId(); /** * \brief Create a TsnNode */ TsnNode(); /** * \param systemId a unique integer used for parallel simulations. */ TsnNode(uint32_t systemId); uint32_t AddDevice(Ptr device); uint32_t AddDevice(Ptr device); uint32_t AddDevice(Ptr device); uint32_t AddDevice(Ptr device); Ptr GetActiveClock(); Time GetTime() const; Time GetTime(uint32_t clockId) const; /** * Destroy a TsnNode * * This is the destructor for the TsnNode. */ ~TsnNode(); // Delete copy constructor and assignment operator to avoid misuse TsnNode& operator=(const TsnNode&) = delete; TsnNode(const TsnNode&) = delete; void SetMainClock(Ptr clock); void AddClock(Ptr clock); void setActiveClock(uint32_t activeClockId); //Stream identification void AddStreamIdentificationFunction( uint32_t streamHandle, Ptr streamIdentificationFunction, std::vector> outFacInputPortList, std::vector> inFacInputPortList, std::vector> inFacOutputPortList, std::vector> outFacOutputPortList); std::vector> GetStreamIdentityTable(); //FRER void AddSequenceGenerationFunction(Ptr entry); std::vector> GetSequenceGenerationTable(); void AddSequenceRecoveryFunction(Ptr entry); std::vector> GetSequenceRecoveryTable(); void AddSequenceEncodeDecodeFunction(Ptr entry); std::vector> GetSequenceEncodeDecodeTable(); //PSFP void AddStreamFilter(Ptr streamFilterInstance); uint16_t AddFlowMeter(Ptr flowMeterInstance); std::vector> GetStreamFilterInstanceTable(); std::vector> GetFlowMeterInstanceTable(); void CallBackClockUpdate(); protected: private: Ptr m_mainClock = nullptr; uint32_t m_activeClockId = 0; /** * The Clocks which this TsnNode uses */ std::vector> m_clocks; //StreamIdenty uint16_t m_maxSidEntryNumber; std::vector> m_streamIdentityTable; //FRER uint16_t m_maxFrerSeqGenEntryNumber; uint16_t m_maxFrerSeqRcvyEntryNumber; uint16_t m_maxFrerSeqEncEntryNumber; std::vector> m_frerSeqGenTable; std::vector> m_frerSeqRcvyTable; std::vector> m_frerSeqEncTable; // std::vector> m_frerSplitTable; //PSFP uint16_t m_maxPsfpFilterEntryNumber; uint16_t m_maxPsfpStreamGateEntryNumber; uint16_t m_maxPsfpFlowMeterEntryNumber; std::vector> m_streamFilterInstanceTable; // std::vector> m_streamGateInstanceTable; std::vector> m_flowMeterInstanceTable; }; } #endif /* TSN_NODE_H */