#include <senf/Packets/Packets.hh>
#include "IPv6Packet.hh"
#include "ICMPv6Packet.hh"
+#include "ListOptionTypeParser.hh"
+#include "NDPOptions.hh"
+///////////////////////////////hh.p////////////////////////////////////////
namespace senf {
//#############################################################
using mixin::nextPacketRange;
using mixin::init;
using mixin::initSize;
+
+ static void dump(packet p, std::ostream & os);
};
typedef ConcretePacket<ICMPv6EchoReplyType> ICMPv6EchoReply;
using mixin::nextPacketRange;
using mixin::init;
using mixin::initSize;
+
+ static void dump(packet p, std::ostream & os);
};
typedef ConcretePacket<ICMPv6ErrDestUnreachableType> ICMPv6ErrDestUnreachable;
SENF_PARSER_FIELD ( mtu, UInt32Parser );
/* Code static set to 0 */
- // SENF_PARSER_INIT() {
- // ICMPv6Packet icmpv6 (packet().rfind<ICMPv6Packet>(senf::nothrow));
- // icmpv6->code() = 0;
- // }
+ SENF_PARSER_INIT() {
+ ICMPv6Packet icmpv6 (packet().rfind<ICMPv6Packet>(senf::nothrow));
+ icmpv6->code() = 0;
+ }
SENF_PARSER_FINALIZE ( ICMPv6ErrTooBigParser );
};
using mixin::nextPacketRange;
using mixin::init;
using mixin::initSize;
+
+ static void dump(packet p, std::ostream & os);
};
typedef ConcretePacket<ICMPv6ErrTooBigType> ICMPv6ErrTooBig;
SENF_PARSER_FIELD ( unused, UInt32Parser );
/* Code 0 - Hop limit exceeded in transit
1 - Fragment reassembly time exceeded */
- void setErrCode(int code){
+ void setErrCode(int code)
+ {
ICMPv6Packet icmpv6 (packet().rfind<ICMPv6Packet>(senf::nothrow));
icmpv6->code() = code;
}
using mixin::nextPacketRange;
using mixin::init;
using mixin::initSize;
+
+ static void dump(packet p, std::ostream & os);
};
typedef ConcretePacket<ICMPv6ErrTimeExceededType> ICMPv6ErrTimeExceeded;
1 - Unrecognized Next Header type encountered
2 - Unrecognized IPv6 option encountered */
- void setErrCode(int code){
+ void setErrCode(int code)
+ {
ICMPv6Packet icmpv6 (packet().rfind<ICMPv6Packet>(senf::nothrow));
icmpv6->code() = code;
}
using mixin::nextPacketRange;
using mixin::init;
using mixin::initSize;
+
+ static void dump(packet p, std::ostream & os);
};
typedef ConcretePacket<ICMPv6ErrParamProblemType> ICMPv6ErrParamProblem;
using mixin::nextPacketRange;
using mixin::init;
using mixin::initSize;
+
+ static void dump(packet p, std::ostream & os);
};
typedef ConcretePacket<MLDv2ListenerQueryType> MLDv2ListenerQuery;
using mixin::nextPacketRange;
using mixin::init;
using mixin::initSize;
- };
+ static void dump(packet p, std::ostream & os);
+ };
typedef ConcretePacket<MLDv2ListenerReportType> MLDv2ListenerReport;
+
+ //#############################################################
+ //ICMPv6 Router Solicitation (RFC 4861) Message
+ //#############################################################
+ struct NDPRouterSolicitationParser : public PacketParserBase
+ {
+# include SENF_PARSER()
+ SENF_PARSER_FIELD ( reserved, UInt32Parser );// set to zero by default
+ SENF_PARSER_LIST ( options, packetSize(), senf::NDPGenericOptionParser );
+ SENF_PARSER_FINALIZE ( NDPRouterSolicitationParser );
+
+ SENF_PARSER_INIT() {
+ reserved() = 0;
+ }
+ };
+
+ /** \brief Router Solicitation Message
+
+ \par Packet type (typedef):
+ \ref NDPRouterSolicitationMessage
+
+ \par Fields:
+ \ref NDPRouterSolicitationParser
+ \image html NDPRouterSolicitationMessage.png
+
+ \ingroup protocolbundle_default
+ */
+ struct NDPRouterSolicitationMessageType
+ : public PacketTypeBase,
+ public PacketTypeMixin<NDPRouterSolicitationMessageType>
+ {
+ typedef PacketTypeMixin<NDPRouterSolicitationMessageType> mixin;
+ typedef ConcretePacket<NDPRouterSolicitationMessageType> packet;
+ typedef NDPRouterSolicitationParser parser;
+
+ using mixin::nextPacketRange;
+ using mixin::init;
+ using mixin::initSize;
+
+ static void dump(packet p, std::ostream & os);
+ };
+ typedef ConcretePacket<NDPRouterSolicitationMessageType> NDPRouterSolicitationMessage;
+
+ //#############################################################
+ //ICMPv6 Router Advertisement (RFC 4861) Message
+ //#############################################################
+ struct NDPRouterAdvertisementParser : public PacketParserBase
+ {
+# include SENF_PARSER()
+ SENF_PARSER_FIELD ( curHopLimit, UInt8Parser );
+ SENF_PARSER_BITFIELD ( m, 1, bool);
+ SENF_PARSER_BITFIELD ( o, 1, bool);
+ SENF_PARSER_BITFIELD ( reserved, 6, unsigned ); // set to zero by default
+ SENF_PARSER_FIELD ( routerLifetime, UInt16Parser );
+ SENF_PARSER_FIELD ( reachableTime, UInt32Parser );
+ SENF_PARSER_FIELD ( retransTimer, UInt32Parser );
+ SENF_PARSER_LIST ( options, packetSize(), senf::NDPGenericOptionParser );
+ SENF_PARSER_FINALIZE ( NDPRouterAdvertisementParser );
+
+ SENF_PARSER_INIT() {
+ reserved() = 0;
+ }
+ };
+
+ /** \brief Router Advertisement Message
+
+ \par Packet type (typedef):
+ \ref NDPRouterAdvertisementMessage
+
+ \par Fields:
+ \ref NDPRouterAdvertisementParser
+ \imageMessage html NDPRouterAdvertisementMessage.png
+
+ \ingroup protocolbundle_default
+ */
+ struct NDPRouterAdvertisementMessageType
+ : public PacketTypeBase,
+ public PacketTypeMixin<NDPRouterAdvertisementMessageType>
+ {
+ typedef PacketTypeMixin<NDPRouterAdvertisementMessageType> mixin;
+ typedef ConcretePacket<NDPRouterAdvertisementMessageType> packet;
+ typedef NDPRouterAdvertisementParser parser;
+
+ using mixin::nextPacketRange;
+ using mixin::init;
+ using mixin::initSize;
+
+ static void dump(packet p, std::ostream & os);
+ };
+ typedef ConcretePacket<NDPRouterAdvertisementMessageType> NDPRouterAdvertisementMessage;
+
+ //#############################################################
+ //ICMPv6 Neighbor Solicitation (RFC 4861) Message
+ //#############################################################
+ struct NDPNeighborSolicitationParser : public PacketParserBase
+ {
+# include SENF_PARSER()
+ SENF_PARSER_BITFIELD ( reserved, 32, unsigned ); // set to zero by default
+ SENF_PARSER_FIELD ( target, INet6AddressParser );
+ SENF_PARSER_LIST ( options, packetSize(), senf::NDPGenericOptionParser );
+ SENF_PARSER_FINALIZE ( NDPNeighborSolicitationParser );
+
+ SENF_PARSER_INIT() {
+ reserved() = 0;
+ }
+ };
+
+ /** \brief Neighbor Solicitation Message
+
+ \par Packet type (typedef):
+ \ref NDPNeighborSolicitationMessage
+
+ \par Fields:
+ \ref NDPNeighborSolicitationParser
+ \imageMessage html NDPNeighborSolicitationMessage.png
+
+ \ingroup protocolbundle_default
+ */
+ struct NDPNeighborSolicitationMessageType
+ : public PacketTypeBase,
+ public PacketTypeMixin<NDPNeighborSolicitationMessageType>
+ {
+ typedef PacketTypeMixin<NDPNeighborSolicitationMessageType> mixin;
+ typedef ConcretePacket<NDPNeighborSolicitationMessageType> packet;
+ typedef NDPNeighborSolicitationParser parser;
+
+ using mixin::nextPacketRange;
+ using mixin::init;
+ using mixin::initSize;
+
+ static void dump(packet p, std::ostream & os);
+ };
+ typedef ConcretePacket<NDPNeighborSolicitationMessageType> NDPNeighborSolicitationMessage;
+
+ //#############################################################
+ //ICMPv6 Neighbor Advertisement (RFC 4861) Message
+ //#############################################################
+ struct NDPNeighborAdvertisementParser : public PacketParserBase
+ {
+# include SENF_PARSER()
+ SENF_PARSER_BITFIELD ( r, 1, bool );
+ SENF_PARSER_BITFIELD ( s, 1, bool );
+ SENF_PARSER_BITFIELD ( o, 1, bool );
+ SENF_PARSER_BITFIELD ( reserved, 29, unsigned ); // set to zero by default
+ SENF_PARSER_FIELD ( target, INet6AddressParser );
+ SENF_PARSER_LIST ( options, packetSize(), senf::NDPGenericOptionParser );
+ SENF_PARSER_FINALIZE ( NDPNeighborAdvertisementParser );
+
+ SENF_PARSER_INIT() {
+ reserved() = 0;
+ }
+ };
+
+ /** \brief Neighbor Advertisement Message
+
+ \par Packet type (typedef):
+ \ref NDPNeighborAdvertisementParser
+
+ \par Fields:
+ \ref NDPNeighborAdvertisementParser
+ \imageMessage html NDPNeighborAdvertisementMessage.png
+
+ \ingroup protocolbundle_default
+ */
+ struct NDPNeighborAdvertisementMessageType
+ : public PacketTypeBase,
+ public PacketTypeMixin<NDPNeighborAdvertisementMessageType>
+ {
+ typedef PacketTypeMixin<NDPNeighborAdvertisementMessageType> mixin;
+ typedef ConcretePacket<NDPNeighborAdvertisementMessageType> packet;
+ typedef NDPNeighborAdvertisementParser parser;
+
+ using mixin::nextPacketRange;
+ using mixin::init;
+ using mixin::initSize;
+
+ static void dump(packet p, std::ostream & os);
+ };
+ typedef ConcretePacket<NDPNeighborAdvertisementMessageType> NDPNeighborAdvertisementMessage;
+
+ //#############################################################
+ //ICMPv6 Redirect (RFC 4861) Message
+ //#############################################################
+ struct NDPRedirectParser : public PacketParserBase
+ {
+# include SENF_PARSER()
+ SENF_PARSER_BITFIELD ( reserved, 32, unsigned ); // set to zero by default
+ SENF_PARSER_FIELD ( target, INet6AddressParser );
+ SENF_PARSER_FIELD ( destination, INet6AddressParser );
+ SENF_PARSER_LIST ( options, packetSize(), senf::NDPGenericOptionParser );
+ SENF_PARSER_FINALIZE ( NDPRedirectParser );
+
+ SENF_PARSER_INIT() {
+ reserved() = 0;
+
+ }
+ };
+
+ /** \brief Redirect Message
+
+ \par Packet type (typedef):
+ \ref NDPRedirectParser
+
+ \par Fields:
+ \ref NDPRedirectParser
+ \imageMessage html NDPRedirectMessage.png
+
+ \ingroup protocolbundle_default
+ */
+ struct NDPRedirectMessageType
+ : public PacketTypeBase,
+ public PacketTypeMixin<NDPRedirectMessageType>
+ {
+ typedef PacketTypeMixin<NDPRedirectMessageType> mixin;
+ typedef ConcretePacket<NDPRedirectMessageType> packet;
+ typedef NDPRedirectParser parser;
+
+ using mixin::nextPacketRange;
+ using mixin::init;
+ using mixin::initSize;
+
+ static void dump(packet p, std::ostream & os);
+ };
+ typedef ConcretePacket<NDPRedirectMessageType> NDPRedirectMessage;
}
+///////////////////////////////hh.e////////////////////////////////////////
+//#include "ICMPv6TypePacket.cci"
+//#include "ICMPv6TypePacket.ct"
+//#include "ICMPv6TypePacket.cti"
#endif
\f