lp: add CongestionMark field and tag
refs #3797
Change-Id: I6ac6663c874abde1df2102af81fc03567ad87029
diff --git a/src/util/dummy-client-face.cpp b/src/util/dummy-client-face.cpp
index 43efff9..911d3bb 100644
--- a/src/util/dummy-client-face.cpp
+++ b/src/util/dummy-client-face.cpp
@@ -137,12 +137,18 @@
if (lpPacket.has<lp::NextHopFaceIdField>()) {
nack->setTag(make_shared<lp::NextHopFaceIdTag>(lpPacket.get<lp::NextHopFaceIdField>()));
}
+ if (lpPacket.has<lp::CongestionMarkField>()) {
+ nack->setTag(make_shared<lp::CongestionMarkTag>(lpPacket.get<lp::CongestionMarkField>()));
+ }
onSendNack(*nack);
}
else {
if (lpPacket.has<lp::NextHopFaceIdField>()) {
interest->setTag(make_shared<lp::NextHopFaceIdTag>(lpPacket.get<lp::NextHopFaceIdField>()));
}
+ if (lpPacket.has<lp::CongestionMarkField>()) {
+ interest->setTag(make_shared<lp::CongestionMarkTag>(lpPacket.get<lp::CongestionMarkField>()));
+ }
onSendInterest(*interest);
}
}
@@ -152,6 +158,9 @@
if (lpPacket.has<lp::CachePolicyField>()) {
data->setTag(make_shared<lp::CachePolicyTag>(lpPacket.get<lp::CachePolicyField>()));
}
+ if (lpPacket.has<lp::CongestionMarkField>()) {
+ data->setTag(make_shared<lp::CongestionMarkTag>(lpPacket.get<lp::CongestionMarkField>()));
+ }
onSendData(*data);
}
@@ -208,23 +217,26 @@
});
}
+template<typename Packet, typename Field, typename Tag>
+static void
+addFieldFromTag(lp::Packet& lpPacket, const Packet& packet)
+{
+ shared_ptr<Tag> tag = static_cast<const TagHost&>(packet).getTag<Tag>();
+ if (tag != nullptr) {
+ lpPacket.add<Field>(*tag);
+ }
+}
+
template<typename Packet>
void
DummyClientFace::receive(const Packet& packet)
{
lp::Packet lpPacket(packet.wireEncode());
- shared_ptr<lp::IncomingFaceIdTag> incomingFaceIdTag =
- static_cast<const TagHost&>(packet).getTag<lp::IncomingFaceIdTag>();
- if (incomingFaceIdTag != nullptr) {
- lpPacket.add<lp::IncomingFaceIdField>(*incomingFaceIdTag);
- }
+ addFieldFromTag<Packet, lp::IncomingFaceIdField, lp::IncomingFaceIdTag>(lpPacket, packet);
+ addFieldFromTag<Packet, lp::NextHopFaceIdField, lp::NextHopFaceIdTag>(lpPacket, packet);
+ addFieldFromTag<Packet, lp::CongestionMarkField, lp::CongestionMarkTag>(lpPacket, packet);
- shared_ptr<lp::NextHopFaceIdTag> nextHopFaceIdTag =
- static_cast<const TagHost&>(packet).getTag<lp::NextHopFaceIdTag>();
- if (nextHopFaceIdTag != nullptr) {
- lpPacket.add<lp::NextHopFaceIdField>(*nextHopFaceIdTag);
- }
static_pointer_cast<Transport>(getTransport())->receive(lpPacket.wireEncode());
}
@@ -243,10 +255,8 @@
Block interest = nack.getInterest().wireEncode();
lpPacket.add<lp::FragmentField>(make_pair(interest.begin(), interest.end()));
- shared_ptr<lp::IncomingFaceIdTag> incomingFaceIdTag = nack.getTag<lp::IncomingFaceIdTag>();
- if (incomingFaceIdTag != nullptr) {
- lpPacket.add<lp::IncomingFaceIdField>(*incomingFaceIdTag);
- }
+ addFieldFromTag<lp::Nack, lp::IncomingFaceIdField, lp::IncomingFaceIdTag>(lpPacket, nack);
+ addFieldFromTag<lp::Nack, lp::CongestionMarkField, lp::CongestionMarkTag>(lpPacket, nack);
static_pointer_cast<Transport>(getTransport())->receive(lpPacket.wireEncode());
}