Skip to content
Snippets Groups Projects
Commit c6892672 authored by tho's avatar tho
Browse files

added tests for LLC/SNAP

parent 8ac0d4fc
No related branches found
No related tags found
No related merge requests found
...@@ -100,14 +100,15 @@ prefix_ void senf::EthVLanPacketType::finalize(packet p) ...@@ -100,14 +100,15 @@ prefix_ void senf::EthVLanPacketType::finalize(packet p)
prefix_ void senf::EthLlcSnapPacketType::dump(packet p, std::ostream & os) prefix_ void senf::EthLlcSnapPacketType::dump(packet p, std::ostream & os)
{ {
boost::io::ios_all_saver ias(os); boost::io::ios_all_saver ias(os);
os << "Ethernet LLC/SNAP" os << "Ethernet LLC/SNAP\n"
<< std::hex << std::setfill('0')
<< " LLC\n" << " LLC\n"
<< " DSAP: " << p->dsap() << "\n" << " DSAP: 0x" << unsigned(p->dsap()) << "\n"
<< " SSAP: " << p->ssap() << "\n" << " SSAP: 0x" << unsigned(p->ssap()) << "\n"
<< " SNAP\n" << " controlId: 0x" << unsigned(p->ctrl()) << "\n"
<< " ProtocolId: " << p->protocolId() << "\n" << " SNAP\n"
<< " type : 0x" << " ProtocolId: 0x" << std::setw(6) << unsigned(p->protocolId()) << "\n"
<< std::hex << std::setw(4) << std::setfill('0') << p->type() << "\n"; << " type : 0x" << std::setw(4) << unsigned(p->type()) << "\n";
} }
prefix_ void senf::EthLlcSnapPacketType::finalize(packet p) prefix_ void senf::EthLlcSnapPacketType::finalize(packet p)
......
...@@ -204,9 +204,16 @@ namespace senf { ...@@ -204,9 +204,16 @@ namespace senf {
SENF_PARSER_FIELD( ctrl, Parse_UInt8 ); SENF_PARSER_FIELD( ctrl, Parse_UInt8 );
SENF_PARSER_FIELD( protocolId, Parse_UInt24 ); SENF_PARSER_FIELD( protocolId, Parse_UInt24 );
SENF_PARSER_FIELD( type, Parse_UInt24 ); SENF_PARSER_FIELD( type, Parse_UInt16 );
SENF_PARSER_FINALIZE(Parse_EthLlcSnapPacket); SENF_PARSER_FINALIZE(Parse_EthLlcSnapPacket);
SENF_PARSER_INIT() {
dsap() = 0xaa;
ssap() = 0xaa;
ctrl() = 0x03;
protocolId() = 0x000000;
}
}; };
/** \brief Ethernet LLC/SNAP header /** \brief Ethernet LLC/SNAP header
......
...@@ -35,12 +35,13 @@ ...@@ -35,12 +35,13 @@
#define prefix_ #define prefix_
///////////////////////////////cc.p//////////////////////////////////////// ///////////////////////////////cc.p////////////////////////////////////////
BOOST_AUTO_UNIT_TEST(ethernetPacket_packet) BOOST_AUTO_UNIT_TEST(ethernetPacket_parse)
{ {
senf::PacketData::byte data[] = senf::PacketData::byte data[] = {
{ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, // destination MAC 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, // destination MAC
0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, // source MAC 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, // source MAC
0x10, 0x11 }; // EtherType 0x10, 0x11
}; // EtherType
senf::EthernetPacket p (senf::EthernetPacket::create(data)); senf::EthernetPacket p (senf::EthernetPacket::create(data));
BOOST_CHECK_EQUAL( p->destination()[3], 0x04 ); BOOST_CHECK_EQUAL( p->destination()[3], 0x04 );
...@@ -48,15 +49,16 @@ BOOST_AUTO_UNIT_TEST(ethernetPacket_packet) ...@@ -48,15 +49,16 @@ BOOST_AUTO_UNIT_TEST(ethernetPacket_packet)
BOOST_CHECK_EQUAL( p->type_length(), 0x1011 ); BOOST_CHECK_EQUAL( p->type_length(), 0x1011 );
} }
BOOST_AUTO_UNIT_TEST(ethernetPacket_chain) BOOST_AUTO_UNIT_TEST(ethernetPacket_parse_chain)
{ {
unsigned char data[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, // destination MAC unsigned char data[] = {
0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, // source MAC 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, // destination MAC
0x81, 0x00, // EtherType: VLan 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, // source MAC
0x92, 0x34, // VLAN prio, cfi, id 0x81, 0x00, // EtherType: VLan
0xab, 0xcd, // EtherType 0x92, 0x34, // VLAN prio, cfi, id
0xf0, 0xf1, 0xf2, 0xf3, 0xf4 }; // Payload 0xab, 0xcd, // EtherType
0xf0, 0xf1, 0xf2, 0xf3, 0xf4
}; // Payload
senf::EthernetPacket p (senf::EthernetPacket::create(data)); senf::EthernetPacket p (senf::EthernetPacket::create(data));
BOOST_REQUIRE( p.next().is<senf::EthVLanPacket>() ); BOOST_REQUIRE( p.next().is<senf::EthVLanPacket>() );
...@@ -89,6 +91,47 @@ BOOST_AUTO_UNIT_TEST(ethernetPacket_create) ...@@ -89,6 +91,47 @@ BOOST_AUTO_UNIT_TEST(ethernetPacket_create)
BOOST_CHECK_EQUAL(vlan->type(), 0x0800u); BOOST_CHECK_EQUAL(vlan->type(), 0x0800u);
} }
BOOST_AUTO_UNIT_TEST(llcsnap_parse)
{
senf::PacketData::byte data[] = {
0xaa, // DSAP
0xaa, // SSAP
0x03, // ctrl
0x00, 0x00, 0x00, // Protocol Identification Field
0x10, 0x11 // EtherType
};
senf::EthLlcSnapPacket p (senf::EthLlcSnapPacket::create(data));
BOOST_CHECK_EQUAL( p->dsap(), 0xaa );
BOOST_CHECK_EQUAL( p->ssap(), 0xaa );
BOOST_CHECK_EQUAL( p->ctrl(), 0x03 );
BOOST_CHECK_EQUAL( p->protocolId(), 0x000000u );
BOOST_CHECK_EQUAL( p->type(), 0x1011 );
}
BOOST_AUTO_UNIT_TEST(llcsnap_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::EthLlcSnapPacket llcsnap (senf::EthLlcSnapPacket::createAfter(eth));
senf::DataPacket payload (senf::DataPacket::createAfter(
llcsnap, std::string("Hello, world!")));
eth.finalize();
BOOST_CHECK_EQUAL( eth->type_length(), 8u + 13u);
BOOST_CHECK_EQUAL( llcsnap->dsap(), 0xaa );
BOOST_CHECK_EQUAL( llcsnap->ssap(), 0xaa );
BOOST_CHECK_EQUAL( llcsnap->ctrl(), 0x03 );
BOOST_CHECK_EQUAL( llcsnap->protocolId(), 0x000000u );
BOOST_CHECK_EQUAL( llcsnap->type(), 0u);
senf::IpV4Packet ip (senf::IpV4Packet::createAfter(llcsnap));
eth.finalize();
BOOST_CHECK_EQUAL(llcsnap->type(), 0x0800u);
}
///////////////////////////////cc.e//////////////////////////////////////// ///////////////////////////////cc.e////////////////////////////////////////
#undef prefix_ #undef prefix_
......
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