00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00027 #include "IPv6Extensions.hh"
00028
00029
00030
00031
00032
00033 #define prefix_
00034
00035
00036 namespace {
00037 SENF_PACKET_REGISTRY_REGISTER( senf::IpTypes, 44, senf::IPv6FragmentPacket );
00038 SENF_PACKET_REGISTRY_REGISTER( senf::IpTypes, 43, senf::IPv6RoutingPacket );
00039 SENF_PACKET_REGISTRY_REGISTER( senf::IpTypes, 0u, senf::IPv6HopByHopOptionsPacket );
00040 SENF_PACKET_REGISTRY_REGISTER( senf::IpTypes, 60u, senf::IPv6DestinationOptionsPacket );
00041 }
00042
00043 prefix_ void senf::IPv6FragmentPacketType::dump(packet p, std::ostream & os)
00044 {
00045 os << "Internet protocol Version 6 fragment extension:\n"
00046 << senf::fieldName("next header") << unsigned(p->nextHeader()) << "\n"
00047 << senf::fieldName("fragment offset")
00048 << "0x" << std::hex << unsigned(p->fragmentOffset()) << "\n"
00049 << senf::fieldName("more fragments") << (p->moreFragments()?"yes":"no") << "\n"
00050 << senf::fieldName("id")
00051 << "0x" << std::hex << unsigned(p->id()) << "\n";
00052 }
00053
00054 prefix_ void senf::IPv6FragmentPacketType::finalize(packet p)
00055 {
00056 try {
00057 p->nextHeader() << key(p.next());
00058 }
00059 catch (InvalidPacketChainException & ex) {
00060 p->nextHeader() << 59;
00061 }
00062 }
00063
00064 prefix_ void senf::IPv6RoutingPacketType::dump(packet p, std::ostream & os)
00065 {
00066 os << "Internet protocol Version 6 routing extension:\n"
00067 << senf::fieldName("next header") << unsigned(p->nextHeader()) << "\n"
00068 << senf::fieldName("header length") << unsigned(p->headerLength()) << "\n"
00069 << senf::fieldName("routing type") << unsigned(p->routingType()) << "\n"
00070 << senf::fieldName("segments left") << unsigned(p->segmentsLeft()) << "\n"
00071 << " further Hop Addresses:\n";
00072 typedef IPv6RoutingPacket::Parser::hopAddresses_t::container addrContainer_t;
00073 addrContainer_t hopAddresses (p->hopAddresses());
00074 if ( p->segmentsLeft() != 0 )
00075 for (addrContainer_t::iterator i (hopAddresses.begin()); i != hopAddresses.end(); ++i)
00076 os << " " << *i << "\n";
00077 }
00078
00079 prefix_ void senf::IPv6RoutingPacketType::finalize(packet p)
00080 {
00081 try {
00082 p->nextHeader() << key(p.next());
00083 }
00084 catch (InvalidPacketChainException & ex) {
00085 p->nextHeader() << 59;
00086 }
00087 }
00088
00089 prefix_ void senf::IPv6HopByHopOptionsPacketType::dump(packet p, std::ostream & os)
00090 {
00091 os << "Internet protocol Version 6 Hop-By-Hop extension:\n"
00092 << senf::fieldName("next header") << unsigned(p->nextHeader()) << "\n"
00093 << senf::fieldName("header length") << unsigned(p->headerLength()) <<" ("<< unsigned((1+p->headerLength())*8)<< ")\n";
00094 os << " OptionTypes:\n";
00095 typedef IPv6HopByHopOptionsPacket::Parser::options_t::container optContainer_t;
00096 optContainer_t options (p->options());
00097 for (optContainer_t::const_iterator i = options.begin(); i != options.end(); ++i)
00098 i->dump( os);
00099 }
00100
00101 prefix_ void senf::IPv6HopByHopOptionsPacketType::finalize(packet p)
00102 {
00103 try {
00104 p->nextHeader() << key(p.next());
00105 }
00106 catch (InvalidPacketChainException & ex) {
00107 p->nextHeader() << 59;
00108 }
00109 }
00110
00111 prefix_ void senf::IPv6DestinationOptionsPacketType::dump(packet p, std::ostream & os)
00112 {
00113 os << "Internet protocol Version 6 Destination Options extension:\n"
00114 << senf::fieldName("next header") << unsigned (p->nextHeader()) << "\n"
00115 << senf::fieldName("header length") << unsigned (p->headerLength()) << "\n";
00116 os << " OptionTypes:\n";
00117 typedef IPv6DestinationOptionsPacket::Parser::options_t::container optContainer_t;
00118 optContainer_t options (p->options());
00119 for (optContainer_t::const_iterator i = options.begin(); i != options.end(); ++i)
00120 i->dump( os);
00121 }
00122
00123 prefix_ void senf::IPv6DestinationOptionsPacketType::finalize(packet p)
00124 {
00125 try {
00126 p->nextHeader() << key(p.next());
00127 }
00128 catch (InvalidPacketChainException & ex) {
00129 p->nextHeader() << 59;
00130 }
00131 }
00132
00133
00134
00135 #undef prefix_
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147