/*-------------------------------------------------------------*/ /* Protocol values */ typedef enum { NETWIB_IP4HDRPROTO_IP = 0, /* Dummy protocol for TCP */ NETWIB_IP4HDRPROTO_HOPOPTS = 0, /* IPv6 Hop-by-Hop options */ NETWIB_IP4HDRPROTO_ICMP4 = 1, /* Internet Control Message Protocol */ NETWIB_IP4HDRPROTO_IGMP = 2, /* Internet Group Management Protocol */ NETWIB_IP4HDRPROTO_IPIP = 4, /* IPIP tunnels */ NETWIB_IP4HDRPROTO_TCP = 6, /* Transmission Control Protocol */ NETWIB_IP4HDRPROTO_EGP = 8, /* Exterior Gateway Protocol */ NETWIB_IP4HDRPROTO_PUP = 12, /* PUP protocol */ NETWIB_IP4HDRPROTO_UDP = 17, /* User Datagram Protocol */ NETWIB_IP4HDRPROTO_IDP = 22, /* XNS IDP protocol */ NETWIB_IP4HDRPROTO_TP = 29, /* SO Transport Protocol Class 4 */ NETWIB_IP4HDRPROTO_IP6 = 41, /* IPv6 header */ NETWIB_IP4HDRPROTO_ROUTING = 43, /* IPv6 routing header */ NETWIB_IP4HDRPROTO_FRAGMENT = 44, /* IPv6 fragmentation header */ NETWIB_IP4HDRPROTO_RSVP = 46, /* Reservation Protocol */ NETWIB_IP4HDRPROTO_GRE = 47, /* General Routing Encapsulation */ NETWIB_IP4HDRPROTO_ESP = 50, /* encapsulating security payload */ NETWIB_IP4HDRPROTO_AH = 51, /* authentication header */ NETWIB_IP4HDRPROTO_ICMP6 = 58, /* ICMPv6 */ NETWIB_IP4HDRPROTO_NONE = 59, /* IPv6 no next header */ NETWIB_IP4HDRPROTO_DSTOPTS = 60, /* IPv6 destination options */ NETWIB_IP4HDRPROTO_MTP = 92, /* Multicast Transport Protocol */ NETWIB_IP4HDRPROTO_ENCAP = 98, /* Encapsulation Header */ NETWIB_IP4HDRPROTO_PIM = 103, /* Protocol Independent Multicast */ NETWIB_IP4HDRPROTO_COMP = 108, /* Compression Header Protocol */ NETWIB_IP4HDRPROTO_RAW = 255 /* Raw IP packets */ } netwib_ip4hdrproto; /* IPv4 header */ typedef struct { netwib_uint8 version; netwib_uint8 ihl; netwib_uint8 tos; netwib_uint16 totlen; netwib_uint16 id; netwib_bool reserved; netwib_bool dontfrag; netwib_bool morefrag; netwib_uint16 offsetfrag; netwib_uint8 ttl; netwib_ip4hdrproto protocol; netwib_uint16 check; netwib_ip src; netwib_ip dst; } netwib_ip4hdr; typedef const netwib_ip4hdr netwib_constip4hdr; #define NETWIB_IP4HDR_LEN 20 /*-------------------------------------------------------------*/ /* Name : netwib_ip4hdr_initdefault Description : Initialize a netwib_ip4hdr with default values. Input parameter(s) : Input/output parameter(s) : Output parameter(s) : *pip4hdr : netwib_ip4hdr to initialize Normal return values : NETWIB_ERR_OK : ok */ netwib_err netwib_ip4hdr_initdefault(netwib_ip4hdr *pip4hdr); /*-------------------------------------------------------------*/ /* Name : netwib_pkt_append_ip4hdr Description : Initialize physical data from a netwib_ip4hdr. Input parameter(s) : *pip4hdr : netwib_ip4hdr Input/output parameter(s) : *ppht : buffer to initialize Output parameter(s) : Normal return values : NETWIB_ERR_OK : ok */ netwib_err netwib_pkt_append_ip4hdr(netwib_constip4hdr *pip4hdr, netwib_buf *ppkt); netwib_err netwib_pkt_prepend_ip4hdr(netwib_constip4hdr *pip4hdr, netwib_buf *ppkt); /*-------------------------------------------------------------*/ /* Name : netwib_pkt_decode_ip4hdr Description : Decode a netwib_ip4hdr from physical data. Input parameter(s) : *ppkt : buffer containing physical data Input/output parameter(s) : Output parameter(s) : *pip4hdr : netwib_ip4hdr contained in pkt *pskipsize : size to use to skip this header Normal return values : NETWIB_ERR_OK : ok NETWIB_ERR_OKNOTDECODED : pkt could not be decoded */ netwib_err netwib_pkt_decode_ip4hdr(netwib_constbuf *ppkt, netwib_ip4hdr *pip4hdr, netwib_uint32 *pskipsize); /*-------------------------------------------------------------*/ /* Name : netwib_buf_append_ip4hdr Description : Print a netwib_ip4hdr. Input parameter(s) : *pip4hdr : netwib_ip4hdr to print encodetype : netwib_encodetype to use Input/output parameter(s) : Output parameter(s) : *pbuf : netwib_buf receiving data Normal return values : NETWIB_ERR_OK : ok */ netwib_err netwib_buf_append_ip4hdr(netwib_constip4hdr *pip4hdr, netwib_encodetype encodetype, netwib_buf *pbuf);