00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef HH_SENF_Packets_DefaultBundle_ICMPv6TypePacket_
00026 #define HH_SENF_Packets_DefaultBundle_ICMPv6TypePacket_ 1
00027
00028
00029 #include <senf/Packets/Packets.hh>
00030 #include "NDPOptions.hh"
00031 #include "ICMPv6Packet.hh"
00032
00033
00034 namespace senf {
00035
00036
00037
00038
00039 struct ICMPv6EchoRequestParser : public PacketParserBase
00040 {
00041 # include SENF_FIXED_PARSER()
00042 SENF_PARSER_FIELD ( identifier, UInt16Parser );
00043 SENF_PARSER_FIELD ( seqNr, UInt16Parser );
00044
00045 SENF_PARSER_FINALIZE ( ICMPv6EchoRequestParser );
00046 };
00047
00059 struct ICMPv6EchoRequestType
00060 : public PacketTypeBase,
00061 public PacketTypeMixin<ICMPv6EchoRequestType>
00062 {
00063 typedef PacketTypeMixin<ICMPv6EchoRequestType> mixin;
00064 typedef ConcretePacket<ICMPv6EchoRequestType> packet;
00065 typedef ICMPv6EchoRequestParser parser;
00066
00067 using mixin::nextPacketRange;
00068 using mixin::init;
00069 using mixin::initSize;
00070
00071 static void dump(packet p, std::ostream & os);
00072 };
00073
00074 typedef ConcretePacket<ICMPv6EchoRequestType> ICMPv6EchoRequest;
00075
00076
00077
00078
00079 struct ICMPv6EchoReplyParser : public PacketParserBase
00080 {
00081 # include SENF_FIXED_PARSER()
00082 SENF_PARSER_FIELD ( identifier, UInt16Parser );
00083 SENF_PARSER_FIELD ( seqNr, UInt16Parser );
00084
00085 SENF_PARSER_FINALIZE ( ICMPv6EchoReplyParser );
00086 };
00087
00099 struct ICMPv6EchoReplyType
00100 : public PacketTypeBase,
00101 public PacketTypeMixin<ICMPv6EchoReplyType>
00102 {
00103 typedef PacketTypeMixin<ICMPv6EchoReplyType> mixin;
00104 typedef ConcretePacket<ICMPv6EchoReplyType> packet;
00105 typedef ICMPv6EchoReplyParser parser;
00106
00107 using mixin::nextPacketRange;
00108 using mixin::init;
00109 using mixin::initSize;
00110
00111 static void dump(packet p, std::ostream & os);
00112 };
00113
00114 typedef ConcretePacket<ICMPv6EchoReplyType> ICMPv6EchoReply;
00115
00116
00117
00118
00119 struct ICMPv6ErrDestUnreachableParser : public PacketParserBase
00120 {
00121 # include SENF_FIXED_PARSER()
00122
00123
00124 SENF_PARSER_PRIVATE_FIELD ( unused, UInt32Parser );
00125
00126 SENF_PARSER_INIT() {
00127 unused() = 0;
00128 }
00129
00130
00131
00132
00133
00134
00135
00136
00137 void setErrCode(int code);
00138
00139 SENF_PARSER_FINALIZE ( ICMPv6ErrDestUnreachableParser );
00140 };
00141
00153 struct ICMPv6ErrDestUnreachableType
00154 : public PacketTypeBase,
00155 public PacketTypeMixin<ICMPv6ErrDestUnreachableType>
00156 {
00157 typedef PacketTypeMixin<ICMPv6ErrDestUnreachableType> mixin;
00158 typedef ConcretePacket<ICMPv6ErrDestUnreachableType> packet;
00159 typedef ICMPv6ErrDestUnreachableParser parser;
00160
00161 using mixin::nextPacketRange;
00162 using mixin::init;
00163 using mixin::initSize;
00164
00165 static void dump(packet p, std::ostream & os);
00166 };
00167
00168 typedef ConcretePacket<ICMPv6ErrDestUnreachableType> ICMPv6ErrDestUnreachable;
00169
00170
00171
00172
00173 struct ICMPv6ErrTooBigParser : public PacketParserBase
00174 {
00175 # include SENF_FIXED_PARSER()
00176 SENF_PARSER_FIELD ( mtu, UInt32Parser );
00177
00178
00179 SENF_PARSER_INIT() {
00180 ICMPv6Packet icmpv6 (packet().rfind<ICMPv6Packet>(senf::nothrow));
00181 icmpv6->code() = 0;
00182 }
00183
00184 SENF_PARSER_FINALIZE ( ICMPv6ErrTooBigParser );
00185 };
00186
00198 struct ICMPv6ErrTooBigType
00199 : public PacketTypeBase,
00200 public PacketTypeMixin<ICMPv6ErrTooBigType>
00201 {
00202 typedef PacketTypeMixin<ICMPv6ErrTooBigType> mixin;
00203 typedef ConcretePacket<ICMPv6ErrTooBigType> packet;
00204 typedef ICMPv6ErrTooBigParser parser;
00205
00206 using mixin::nextPacketRange;
00207 using mixin::init;
00208 using mixin::initSize;
00209
00210 static void dump(packet p, std::ostream & os);
00211 };
00212
00213 typedef ConcretePacket<ICMPv6ErrTooBigType> ICMPv6ErrTooBig;
00214
00215
00216
00217
00218 struct ICMPv6ErrTimeExceededParser : public PacketParserBase
00219 {
00220 # include SENF_FIXED_PARSER()
00221
00222 SENF_PARSER_FIELD ( unused, UInt32Parser );
00223
00224
00225 void setErrCode(int code);
00226
00227 SENF_PARSER_FINALIZE ( ICMPv6ErrTimeExceededParser );
00228 };
00229
00241 struct ICMPv6ErrTimeExceededType
00242 : public PacketTypeBase,
00243 public PacketTypeMixin<ICMPv6ErrTimeExceededType>
00244 {
00245 typedef PacketTypeMixin<ICMPv6ErrTimeExceededType> mixin;
00246 typedef ConcretePacket<ICMPv6ErrTimeExceededType> packet;
00247 typedef ICMPv6ErrTimeExceededParser parser;
00248
00249 using mixin::nextPacketRange;
00250 using mixin::init;
00251 using mixin::initSize;
00252
00253 static void dump(packet p, std::ostream & os);
00254 };
00255 typedef ConcretePacket<ICMPv6ErrTimeExceededType> ICMPv6ErrTimeExceeded;
00256
00257
00258
00259
00260 struct ICMPv6ErrParamProblemParser : public PacketParserBase
00261 {
00262 # include SENF_FIXED_PARSER()
00263
00264 SENF_PARSER_FIELD ( pointer, UInt32Parser );
00265
00266
00267
00268
00269 void setErrCode(int code);
00270
00271 SENF_PARSER_FINALIZE ( ICMPv6ErrParamProblemParser );
00272 };
00273
00285 struct ICMPv6ErrParamProblemType
00286 : public PacketTypeBase,
00287 public PacketTypeMixin<ICMPv6ErrParamProblemType>
00288 {
00289 typedef PacketTypeMixin<ICMPv6ErrParamProblemType> mixin;
00290 typedef ConcretePacket<ICMPv6ErrParamProblemType> packet;
00291 typedef ICMPv6ErrParamProblemParser parser;
00292
00293 using mixin::nextPacketRange;
00294 using mixin::init;
00295 using mixin::initSize;
00296
00297 static void dump(packet p, std::ostream & os);
00298 };
00299 typedef ConcretePacket<ICMPv6ErrParamProblemType> ICMPv6ErrParamProblem;
00300
00301
00302
00303
00304 struct MLDv2ListenerQueryParser : public PacketParserBase
00305 {
00306 # include SENF_PARSER()
00307
00308
00309
00310
00311
00312
00313
00314
00315
00316
00317 SENF_PARSER_FIELD ( maxResponseCode, UInt16Parser );
00318 SENF_PARSER_FIELD ( reserved, UInt16Parser );
00319 SENF_PARSER_FIELD ( mcAddress, INet6AddressParser );
00320 SENF_PARSER_BITFIELD ( resv, 4, unsigned );
00321 SENF_PARSER_BITFIELD ( sFlag, 1, unsigned );
00322 SENF_PARSER_BITFIELD ( qrv, 3, unsigned );
00323 SENF_PARSER_FIELD ( qqic, UInt8Parser );
00324 SENF_PARSER_PRIVATE_FIELD ( nrSources, UInt16Parser );
00325 SENF_PARSER_VECTOR (srcAddresses, nrSources, INet6AddressParser );
00326
00327 SENF_PARSER_FINALIZE ( MLDv2ListenerQueryParser );
00328
00329 SENF_PARSER_INIT() {
00330 reserved() = 0;
00331 resv() = 0;
00332 }
00333 };
00334
00346 struct MLDv2ListenerQueryType
00347 : public PacketTypeBase,
00348 public PacketTypeMixin<MLDv2ListenerQueryType>
00349 {
00350 typedef PacketTypeMixin<MLDv2ListenerQueryType> mixin;
00351 typedef ConcretePacket<MLDv2ListenerQueryType> packet;
00352 typedef MLDv2ListenerQueryParser parser;
00353
00354 using mixin::nextPacketRange;
00355 using mixin::init;
00356 using mixin::initSize;
00357
00358 static void dump(packet p, std::ostream & os);
00359 };
00360
00361 typedef ConcretePacket<MLDv2ListenerQueryType> MLDv2ListenerQuery;
00362
00363
00364
00365
00366
00367 struct MLDv2AddressRecordParser : public PacketParserBase
00368 {
00369 # include SENF_PARSER()
00370
00371 SENF_PARSER_FIELD ( recordType, UInt8Parser );
00372 SENF_PARSER_PRIVATE_FIELD ( auxDataLen, UInt8Parser );
00373 SENF_PARSER_PRIVATE_FIELD ( nrOfSrcs, UInt16Parser );
00374 SENF_PARSER_FIELD ( mcAddress, INet6AddressParser);
00375 SENF_PARSER_VECTOR ( srcAddresses, nrOfSrcs, INet6AddressParser );
00376 SENF_PARSER_VECTOR ( auxData, auxDataLen, UInt32Parser );
00377
00378 SENF_PARSER_FINALIZE ( MLDv2AddressRecordParser );
00379 };
00380
00381 struct MLDv2ListenerReportParser : public PacketParserBase
00382 {
00383 # include SENF_PARSER()
00384
00385 SENF_PARSER_FIELD ( reserved, UInt16Parser );
00386 SENF_PARSER_PRIVATE_FIELD ( nrMcastAddrRecords_, UInt16Parser );
00387 SENF_PARSER_LIST ( mcastAddrRecords, nrMcastAddrRecords_, MLDv2AddressRecordParser );
00388
00389 SENF_PARSER_FINALIZE ( MLDv2ListenerReportParser );
00390
00391 SENF_PARSER_INIT() {
00392 reserved() = 0;
00393 }
00394 };
00395
00408 struct MLDv2ListenerReportType
00409 : public PacketTypeBase,
00410 public PacketTypeMixin<MLDv2ListenerReportType>
00411 {
00412 typedef PacketTypeMixin<MLDv2ListenerReportType> mixin;
00413 typedef ConcretePacket<MLDv2ListenerReportType> packet;
00414 typedef MLDv2ListenerReportParser parser;
00415
00416 using mixin::nextPacketRange;
00417 using mixin::init;
00418 using mixin::initSize;
00419
00420 static void dump(packet p, std::ostream & os);
00421 };
00422 typedef ConcretePacket<MLDv2ListenerReportType> MLDv2ListenerReport;
00423
00424
00425
00426
00427 struct NDPRouterSolicitationParser : public PacketParserBase
00428 {
00429 # include SENF_PARSER()
00430 SENF_PARSER_BITFIELD ( reserved, 32, unsigned );
00431 SENF_PARSER_LIST ( options, packetSize(), senf::NDPGenericOptionParser );
00432 SENF_PARSER_FINALIZE ( NDPRouterSolicitationParser );
00433
00434 SENF_PARSER_INIT() {
00435 reserved() = 0;
00436 }
00437 };
00438
00450 struct NDPRouterSolicitationMessageType
00451 : public PacketTypeBase,
00452 public PacketTypeMixin<NDPRouterSolicitationMessageType>
00453 {
00454 typedef PacketTypeMixin<NDPRouterSolicitationMessageType> mixin;
00455 typedef ConcretePacket<NDPRouterSolicitationMessageType> packet;
00456 typedef NDPRouterSolicitationParser parser;
00457
00458 using mixin::nextPacketRange;
00459 using mixin::init;
00460 using mixin::initSize;
00461
00462 static void dump(packet p, std::ostream & os);
00463 };
00464 typedef ConcretePacket<NDPRouterSolicitationMessageType> NDPRouterSolicitationMessage;
00465
00466
00467
00468
00469 struct NDPRouterAdvertisementParser : public PacketParserBase
00470 {
00471 # include SENF_PARSER()
00472 SENF_PARSER_FIELD ( curHopLimit, UInt8Parser );
00473 SENF_PARSER_BITFIELD ( m, 1, bool);
00474 SENF_PARSER_BITFIELD ( o, 1, bool);
00475 SENF_PARSER_BITFIELD ( reserved, 6, unsigned );
00476 SENF_PARSER_FIELD ( routerLifetime, UInt16Parser );
00477 SENF_PARSER_FIELD ( reachableTime, UInt32Parser );
00478 SENF_PARSER_FIELD ( retransTimer, UInt32Parser );
00479 SENF_PARSER_LIST ( options, packetSize(), senf::NDPGenericOptionParser );
00480 SENF_PARSER_FINALIZE ( NDPRouterAdvertisementParser );
00481
00482 SENF_PARSER_INIT() {
00483 reserved() = 0;
00484 }
00485 };
00486
00498 struct NDPRouterAdvertisementMessageType
00499 : public PacketTypeBase,
00500 public PacketTypeMixin<NDPRouterAdvertisementMessageType>
00501 {
00502 typedef PacketTypeMixin<NDPRouterAdvertisementMessageType> mixin;
00503 typedef ConcretePacket<NDPRouterAdvertisementMessageType> packet;
00504 typedef NDPRouterAdvertisementParser parser;
00505
00506 using mixin::nextPacketRange;
00507 using mixin::init;
00508 using mixin::initSize;
00509
00510 static void dump(packet p, std::ostream & os);
00511 };
00512 typedef ConcretePacket<NDPRouterAdvertisementMessageType> NDPRouterAdvertisementMessage;
00513
00514
00515
00516
00517 struct NDPNeighborSolicitationParser : public PacketParserBase
00518 {
00519 # include SENF_PARSER()
00520 SENF_PARSER_BITFIELD ( reserved, 32, unsigned );
00521 SENF_PARSER_FIELD ( target, INet6AddressParser );
00522 SENF_PARSER_LIST ( options, packetSize(), senf::NDPGenericOptionParser );
00523 SENF_PARSER_FINALIZE ( NDPNeighborSolicitationParser );
00524
00525 SENF_PARSER_INIT() {
00526 reserved() = 0;
00527 }
00528 };
00529
00541 struct NDPNeighborSolicitationMessageType
00542 : public PacketTypeBase,
00543 public PacketTypeMixin<NDPNeighborSolicitationMessageType>
00544 {
00545 typedef PacketTypeMixin<NDPNeighborSolicitationMessageType> mixin;
00546 typedef ConcretePacket<NDPNeighborSolicitationMessageType> packet;
00547 typedef NDPNeighborSolicitationParser parser;
00548
00549 using mixin::nextPacketRange;
00550 using mixin::init;
00551 using mixin::initSize;
00552
00553 static void dump(packet p, std::ostream & os);
00554 };
00555 typedef ConcretePacket<NDPNeighborSolicitationMessageType> NDPNeighborSolicitationMessage;
00556
00557
00558
00559
00560 struct NDPNeighborAdvertisementParser : public PacketParserBase
00561 {
00562 # include SENF_PARSER()
00563 SENF_PARSER_BITFIELD ( r, 1, bool );
00564 SENF_PARSER_BITFIELD ( s, 1, bool );
00565 SENF_PARSER_BITFIELD ( o, 1, bool );
00566 SENF_PARSER_BITFIELD ( reserved, 29, unsigned );
00567 SENF_PARSER_FIELD ( target, INet6AddressParser );
00568 SENF_PARSER_LIST ( options, packetSize(), senf::NDPGenericOptionParser );
00569 SENF_PARSER_FINALIZE ( NDPNeighborAdvertisementParser );
00570
00571 SENF_PARSER_INIT() {
00572 reserved() = 0;
00573 }
00574 };
00575
00587 struct NDPNeighborAdvertisementMessageType
00588 : public PacketTypeBase,
00589 public PacketTypeMixin<NDPNeighborAdvertisementMessageType>
00590 {
00591 typedef PacketTypeMixin<NDPNeighborAdvertisementMessageType> mixin;
00592 typedef ConcretePacket<NDPNeighborAdvertisementMessageType> packet;
00593 typedef NDPNeighborAdvertisementParser parser;
00594
00595 using mixin::nextPacketRange;
00596 using mixin::init;
00597 using mixin::initSize;
00598
00599 static void dump(packet p, std::ostream & os);
00600 };
00601 typedef ConcretePacket<NDPNeighborAdvertisementMessageType> NDPNeighborAdvertisementMessage;
00602
00603
00604
00605
00606 struct NDPRedirectParser : public PacketParserBase
00607 {
00608 # include SENF_PARSER()
00609 SENF_PARSER_BITFIELD ( reserved, 32, unsigned );
00610 SENF_PARSER_FIELD ( target, INet6AddressParser );
00611 SENF_PARSER_FIELD ( destination, INet6AddressParser );
00612 SENF_PARSER_LIST ( options, packetSize(), senf::NDPGenericOptionParser );
00613 SENF_PARSER_FINALIZE ( NDPRedirectParser );
00614
00615 SENF_PARSER_INIT() {
00616 reserved() = 0;
00617
00618 }
00619 };
00620
00632 struct NDPRedirectMessageType
00633 : public PacketTypeBase,
00634 public PacketTypeMixin<NDPRedirectMessageType>
00635 {
00636 typedef PacketTypeMixin<NDPRedirectMessageType> mixin;
00637 typedef ConcretePacket<NDPRedirectMessageType> packet;
00638 typedef NDPRedirectParser parser;
00639
00640 using mixin::nextPacketRange;
00641 using mixin::init;
00642 using mixin::initSize;
00643
00644 static void dump(packet p, std::ostream & os);
00645 };
00646 typedef ConcretePacket<NDPRedirectMessageType> NDPRedirectMessage;
00647 }
00648
00649
00650
00651
00652
00653 #endif
00654
00655
00656
00657
00658
00659
00660
00661
00662
00663
00664