00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef PROTO_IP4_HH_
00023 # define PROTO_IP4_HH_
00024
00025 extern "C"
00026 {
00027 # include <inttypes.h>
00028 }
00029
00030 # include <wipal/tool/addr.hh>
00031
00032 namespace wpl
00033 {
00034
00036 namespace ip4
00037 {
00038
00040 typedef tool::addr<uint8_t, 4, false, '.'> addr;
00041
00043 namespace proto
00044 {
00045
00047 enum proto
00048 {
00049 ICMP = 1,
00050 TCP = 6,
00051 UDP = 17,
00052 ICMPv6 = 58
00053 };
00054
00055 }
00056
00058 struct header
00059 {
00061 enum addr_index
00062 {
00063 sa = 0,
00064 da = 1,
00065 };
00066
00067 union
00068 {
00069
00070 uint8_t version;
00071 uint8_t headerlength;
00072 };
00073
00074 uint8_t dsfield;
00075 uint16_t iplen;
00076 uint16_t identifier;
00077
00078 union
00079 {
00080
00081 uint16_t flags;
00082 uint16_t fragoffset;
00083 };
00084
00085 uint8_t ttl;
00086 uint8_t ipproto;
00087 uint16_t checksum;
00088 addr addrs[2];
00089
00090 } __attribute__((__packed__));
00091
00092 }
00093
00094 }
00095
00096 #endif // ! PROTO_IP4_HH_