Update README and add contrib dir
This commit is contained in:
104
contrib/tsn/model/frer-sequence-encode-decode-function.cc
Normal file
104
contrib/tsn/model/frer-sequence-encode-decode-function.cc
Normal file
@@ -0,0 +1,104 @@
|
||||
#include "frer-sequence-encode-decode-function.h"
|
||||
|
||||
#include "ns3/log.h"
|
||||
#include "ns3/packet.h"
|
||||
|
||||
#include "ns3/ethernet-header2.h"
|
||||
|
||||
namespace ns3
|
||||
{
|
||||
|
||||
NS_LOG_COMPONENT_DEFINE("SequenceEncodeDecodeFunction");
|
||||
|
||||
NS_OBJECT_ENSURE_REGISTERED(SequenceEncodeDecodeFunction);
|
||||
|
||||
TypeId
|
||||
SequenceEncodeDecodeFunction::GetTypeId()
|
||||
{
|
||||
static TypeId tid =
|
||||
TypeId("ns3::SequenceEncodeDecodeFunction")
|
||||
.SetParent<Object>()
|
||||
.SetGroupName("tsn")
|
||||
.AddConstructor<SequenceEncodeDecodeFunction>()
|
||||
.AddAttribute("Direction",
|
||||
"A Boolean object indicating whether the Sequence encode/decode function is to be placed on the out-facing (True) or in-facing (False) side of the port",
|
||||
BooleanValue(false),
|
||||
MakeBooleanAccessor(&SequenceEncodeDecodeFunction::m_frerSeqEncDirection),
|
||||
MakeBooleanChecker())
|
||||
.AddAttribute("Active",
|
||||
"A Boolean value specifying whether this frerSeqEncEntry is passive (False) or active (True).",
|
||||
BooleanValue(false),
|
||||
MakeBooleanAccessor(&SequenceEncodeDecodeFunction::m_frerSeqEncActive),
|
||||
MakeBooleanChecker());
|
||||
return tid;
|
||||
}
|
||||
|
||||
|
||||
SequenceEncodeDecodeFunction::SequenceEncodeDecodeFunction()
|
||||
{
|
||||
NS_LOG_FUNCTION(this);
|
||||
}
|
||||
|
||||
SequenceEncodeDecodeFunction::~SequenceEncodeDecodeFunction()
|
||||
{
|
||||
NS_LOG_FUNCTION(this);
|
||||
}
|
||||
|
||||
void
|
||||
SequenceEncodeDecodeFunction::SetStreamHandle(std::vector<uint32_t> seqEncStreamList)
|
||||
{
|
||||
NS_LOG_FUNCTION(this);
|
||||
m_frerSeqEncStreamList = seqEncStreamList;
|
||||
}
|
||||
|
||||
void
|
||||
SequenceEncodeDecodeFunction::SetPort(Ptr<TsnNetDevice> seqEncPort)
|
||||
{
|
||||
NS_LOG_FUNCTION(this);
|
||||
m_frerSeqEncPort = seqEncPort;
|
||||
}
|
||||
|
||||
bool
|
||||
SequenceEncodeDecodeFunction::IsApplicable(uint32_t streamHandle, Ptr<TsnNetDevice> port, bool direction)
|
||||
{
|
||||
NS_LOG_FUNCTION(this);
|
||||
if (m_frerSeqEncPort == port && m_frerSeqEncDirection == direction)
|
||||
{
|
||||
for (uint32_t i = 0; i < m_frerSeqEncStreamList.size(); i++)
|
||||
{
|
||||
if(m_frerSeqEncStreamList[i]==streamHandle)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void
|
||||
SequenceEncodeDecodeFunction::Encode(Ptr<Packet> p, uint16_t seqNumber)
|
||||
{
|
||||
NS_LOG_FUNCTION(this);
|
||||
if (m_frerSeqEncActive)
|
||||
{
|
||||
EthernetHeader2 header;
|
||||
p->RemoveHeader(header);
|
||||
header.SetRedundancyTag(seqNumber);
|
||||
p->AddHeader(header);
|
||||
}
|
||||
}
|
||||
|
||||
uint16_t
|
||||
SequenceEncodeDecodeFunction::Decode(Ptr<Packet> p)
|
||||
{
|
||||
NS_LOG_FUNCTION(this);
|
||||
EthernetHeader2 header;
|
||||
p->RemoveHeader(header);
|
||||
uint16_t seqNumber = header.RemoveRedundancyTag();
|
||||
p->AddHeader(header);
|
||||
return seqNumber;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user