/*-------------------------------------------------------------*/
/* 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);