Skip to content

Commit

Permalink
base: add PacketBase to provide wrappers for congestion tags
Browse files Browse the repository at this point in the history
refs #3797

Change-Id: I8747bb4fcbc11bfd1731516896b8aef1ec181c36
  • Loading branch information
eric135 authored and cawka committed Oct 1, 2017
1 parent b10024c commit c3a4679
Show file tree
Hide file tree
Showing 7 changed files with 177 additions and 12 deletions.
4 changes: 2 additions & 2 deletions src/data.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,15 @@

#include "meta-info.hpp"
#include "name.hpp"
#include "packet-base.hpp"
#include "signature.hpp"
#include "tag-host.hpp"
#include "encoding/block.hpp"

namespace ndn {

/** @brief Represents a Data packet
*/
class Data : public TagHost, public enable_shared_from_this<Data>
class Data : public PacketBase, public enable_shared_from_this<Data>
{
public:
class Error : public tlv::Error
Expand Down
4 changes: 2 additions & 2 deletions src/interest.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@

#include "delegation-list.hpp"
#include "name.hpp"
#include "packet-base.hpp"
#include "selectors.hpp"
#include "tag-host.hpp"
#include "util/time.hpp"

namespace ndn {
Expand All @@ -39,7 +39,7 @@ const time::milliseconds DEFAULT_INTEREST_LIFETIME = time::milliseconds(4000);

/** @brief represents an Interest packet
*/
class Interest : public TagHost, public enable_shared_from_this<Interest>
class Interest : public PacketBase, public enable_shared_from_this<Interest>
{
public:
class Error : public tlv::Error
Expand Down
8 changes: 5 additions & 3 deletions src/lp/nack.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/**
* Copyright (c) 2013-2015 Regents of the University of California.
/*
* Copyright (c) 2013-2017 Regents of the University of California.
*
* This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
*
Expand All @@ -26,6 +26,8 @@
namespace ndn {
namespace lp {

Nack::Nack() = default;

Nack::Nack(const Interest& interest)
: m_interest(interest)
{
Expand All @@ -37,4 +39,4 @@ Nack::Nack(Interest&& interest)
}

} // namespace lp
} // namespace ndn
} // namespace ndn
10 changes: 5 additions & 5 deletions src/lp/nack.hpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/**
* Copyright (c) 2013-2015 Regents of the University of California.
/*
* Copyright (c) 2013-2017 Regents of the University of California.
*
* This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
*
Expand All @@ -25,8 +25,8 @@
#define NDN_CXX_LP_NACK_HPP

#include "../common.hpp"
#include "../tag-host.hpp"
#include "../interest.hpp"
#include "../packet-base.hpp"

#include "nack-header.hpp"

Expand All @@ -37,10 +37,10 @@ namespace lp {
*
* This type binds a NackHeader and an Interest, and is intended for use in network layer.
*/
class Nack : public TagHost
class Nack : public PacketBase
{
public:
Nack() = default;
Nack();

explicit
Nack(const Interest& interest);
Expand Down
52 changes: 52 additions & 0 deletions src/packet-base.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
* Copyright (c) 2013-2017 Regents of the University of California.
*
* This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
*
* ndn-cxx library is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later version.
*
* ndn-cxx library is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received copies of the GNU General Public License and GNU Lesser
* General Public License along with ndn-cxx, e.g., in COPYING.md file. If not, see
* <http://www.gnu.org/licenses/>.
*
* See AUTHORS.md for complete list of ndn-cxx authors and contributors.
*/

#include "packet-base.hpp"
#include "lp/tags.hpp"

namespace ndn {

uint64_t
PacketBase::getCongestionMark() const
{
auto mark = this->getTag<lp::CongestionMarkTag>();

if (mark == nullptr) {
return 0;
}
else {
return *mark;
}
}

void
PacketBase::setCongestionMark(uint64_t mark)
{
if (mark != 0) {
auto tag = make_shared<lp::CongestionMarkTag>(mark);
this->setTag(std::move(tag));
}
else {
this->removeTag<lp::CongestionMarkTag>();
}
}

} // namespace ndn
47 changes: 47 additions & 0 deletions src/packet-base.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
* Copyright (c) 2013-2017 Regents of the University of California.
*
* This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
*
* ndn-cxx library is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later version.
*
* ndn-cxx library is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received copies of the GNU General Public License and GNU Lesser
* General Public License along with ndn-cxx, e.g., in COPYING.md file. If not, see
* <http://www.gnu.org/licenses/>.
*
* See AUTHORS.md for complete list of ndn-cxx authors and contributors.
*/

#ifndef NDN_PACKET_BASE_HPP
#define NDN_PACKET_BASE_HPP

#include "tag-host.hpp"

namespace ndn {

/** \brief base class to allow simple management of packet tags
*/
class PacketBase : public TagHost
{
public:
/** \brief get the value of the CongestionMark tag
*/
uint64_t
getCongestionMark() const;

/** \brief set the CongestionMark tag to the specified value
*/
void
setCongestionMark(uint64_t mark);
};

} // namespace ndn

#endif // NDN_PACKET_BASE_HPP
64 changes: 64 additions & 0 deletions tests/unit-tests/packet-base.t.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
* Copyright (c) 2013-2017 Regents of the University of California.
*
* This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
*
* ndn-cxx library is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later version.
*
* ndn-cxx library is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received copies of the GNU General Public License and GNU Lesser
* General Public License along with ndn-cxx, e.g., in COPYING.md file. If not, see
* <http://www.gnu.org/licenses/>.
*
* See AUTHORS.md for complete list of ndn-cxx authors and contributors.
*/

#include "packet-base.hpp"

#include "../boost-test.hpp"
#include "interest.hpp"
#include "lp/tags.hpp"

namespace ndn {
namespace tests {

BOOST_AUTO_TEST_SUITE(TestPacketBase)

BOOST_AUTO_TEST_CASE(CongestionMark)
{
Interest interest;

BOOST_CHECK_EQUAL(interest.getCongestionMark(), 0);

auto tag = interest.getTag<lp::CongestionMarkTag>();
BOOST_CHECK(!tag);

interest.setCongestionMark(true);
tag = interest.getTag<lp::CongestionMarkTag>();
BOOST_REQUIRE(tag);
BOOST_CHECK_EQUAL(*tag, 1);

interest.setCongestionMark(false);
tag = interest.getTag<lp::CongestionMarkTag>();
BOOST_CHECK(!tag);

interest.setCongestionMark(300);
tag = interest.getTag<lp::CongestionMarkTag>();
BOOST_REQUIRE(tag);
BOOST_CHECK_EQUAL(*tag, 300);

interest.setCongestionMark(0);
tag = interest.getTag<lp::CongestionMarkTag>();
BOOST_CHECK(!tag);
}

BOOST_AUTO_TEST_SUITE_END() // TestPacketBase

} // namespace tests
} // namespace ndn

0 comments on commit c3a4679

Please sign in to comment.