Skip to content
Snippets Groups Projects
Commit d19bba76 authored by cni's avatar cni
Browse files

Packets/DefaultBundle/MPSPacket: updated finalize method, enhanced unit test

parent e17f9c07
No related branches found
No related tags found
No related merge requests found
...@@ -63,6 +63,10 @@ prefix_ senf::PacketInterpreterBase::factory_t senf::MPLSPacketType::nextPacketT ...@@ -63,6 +63,10 @@ prefix_ senf::PacketInterpreterBase::factory_t senf::MPLSPacketType::nextPacketT
prefix_ void senf::MPLSPacketType::finalize(packet p) prefix_ void senf::MPLSPacketType::finalize(packet p)
{ {
if (p.prev(senf::nothrow).is<MPLSPacket>()) //not the last label on the MPLS stack
p->s_() << false;
else
p->s_() << true;
} }
///////////////////////////////cc.e//////////////////////////////////////// ///////////////////////////////cc.e////////////////////////////////////////
......
...@@ -49,10 +49,12 @@ namespace senf { ...@@ -49,10 +49,12 @@ namespace senf {
SENF_PARSER_BITFIELD( label, 20, unsigned); SENF_PARSER_BITFIELD( label, 20, unsigned);
SENF_PARSER_BITFIELD( tc, 3, unsigned); SENF_PARSER_BITFIELD( tc, 3, unsigned);
SENF_PARSER_BITFIELD( s, 1, bool); SENF_PARSER_BITFIELD_RO( s, 1, bool);
SENF_PARSER_FIELD( ttl, UInt8Parser); SENF_PARSER_FIELD( ttl, UInt8Parser);
SENF_PARSER_FINALIZE(MPLSPacketParser); SENF_PARSER_FINALIZE(MPLSPacketParser);
friend class MPLSPacketType;
}; };
/** \brief MPLS packet /** \brief MPLS packet
...@@ -62,7 +64,7 @@ namespace senf { ...@@ -62,7 +64,7 @@ namespace senf {
\par Fields: \par Fields:
\ref MPLSPacketParser \ref MPLSPacketParser
\ingroup protocolbundle_default \ingroup protocolbundle_default
*/ */
...@@ -82,7 +84,7 @@ namespace senf { ...@@ -82,7 +84,7 @@ namespace senf {
static factory_t nextPacketType(packet p); static factory_t nextPacketType(packet p);
/// Dump given MPLSPacket in readable form to given output stream /// Dump given MPLSPacket in readable form to given output stream
static void dump(packet p, std::ostream & os); static void dump(packet p, std::ostream & os);
static void finalize(packet p); static void finalize(packet p);
}; };
...@@ -100,7 +102,7 @@ namespace senf { ...@@ -100,7 +102,7 @@ namespace senf {
//#include "MPLSPacket.cti" //#include "MPLSPacket.cti"
#endif #endif
// Local Variables: // Local Variables:
// mode: c++ // mode: c++
// fill-column: 100 // fill-column: 100
......
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
// Custom includes // Custom includes
#include "MPLSPacket.hh" #include "MPLSPacket.hh"
#include "EthernetPacket.hh"
#include "../../Utils/auto_unit_test.hh" #include "../../Utils/auto_unit_test.hh"
...@@ -72,13 +73,26 @@ BOOST_AUTO_UNIT_TEST(mplsPacket_parse_chain) ...@@ -72,13 +73,26 @@ BOOST_AUTO_UNIT_TEST(mplsPacket_parse_chain)
BOOST_AUTO_UNIT_TEST(mplsPacket_create) BOOST_AUTO_UNIT_TEST(mplsPacket_create)
{ {
senf::MPLSPacket p (senf::MPLSPacket::create()); senf::EthernetPacket eth (senf::EthernetPacket::create());
eth->source() = senf::MACAddress::from_string("01:02:03:04:05:06");
eth->destination() = senf::MACAddress::from_string("07:08:09:0a:0b:0c");
senf::MPLSPacket p (senf::MPLSPacket::createAfter(eth));
p->label()=4444u; p->label()=4444u;
p->ttl()=10u; p->ttl()=10u;
p->s()=true;
p->tc()=0x0u; p->tc()=0x0u;
SENF_CHECK_NO_THROW(p.finalizeThis()); senf::MPLSPacket p2 (senf::MPLSPacket::createAfter(p));
p->label()=5555u;
p->ttl()=10u;
p->tc()=0x0u;
SENF_CHECK_NO_THROW(eth.finalizeAll());
BOOST_REQUIRE( eth.next().is<senf::MPLSPacket>() );
BOOST_REQUIRE( p.next().is<senf::MPLSPacket>() );
BOOST_CHECK( p->s());
BOOST_CHECK( !p2->s());
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment