/*-------------------------------------------------------------*/
/***************************************************************
* Following functions work on extension headers of IPv6. *
***************************************************************/
/*-------------------------------------------------------------*/
/* IPv6 Hop-by-Hop Options extension header */
typedef struct {
netwib_bufext options;
} netwib_ip6ext_hopopts;
typedef const netwib_ip6ext_hopopts netwib_constip6ext_hopopts;
/*-------------------------------------------------------------*/
/* IPv6 Destination Options extension header */
typedef struct {
netwib_bufext options;
} netwib_ip6ext_dstopts;
typedef const netwib_ip6ext_dstopts netwib_constip6ext_dstopts;
/*-------------------------------------------------------------*/
/* IPv6 Routing extension header */
typedef struct {
netwib_uint8 routingtype;
netwib_uint8 segmentsleft;
netwib_bufext data;
} netwib_ip6ext_routing;
typedef const netwib_ip6ext_routing netwib_constip6ext_routing;
/*-------------------------------------------------------------*/
/* IPv6 Fragment extension header */
typedef struct {
netwib_uint16 fragmentoffset;
netwib_bool reservedb1;
netwib_bool reservedb2;
netwib_bool morefrag;
netwib_uint32 id;
} netwib_ip6ext_fragment;
typedef const netwib_ip6ext_fragment netwib_constip6ext_fragment;
/*-------------------------------------------------------------*/
/* IPv6 Authentication Header extension header (rfc 2402) */
typedef struct {
netwib_uint16 reserved;
netwib_uint32 spi;
netwib_uint32 seqnum;
netwib_bufext data;
} netwib_ip6ext_ah;
typedef const netwib_ip6ext_ah netwib_constip6ext_ah;
/*-------------------------------------------------------------*/
/* Generic IPv6 extension header */
typedef struct {
netwib_ipproto proto;
union {
netwib_ip6ext_hopopts hopopts;
netwib_ip6ext_dstopts dstopts;
netwib_ip6ext_routing routing;
netwib_ip6ext_fragment fragment;
netwib_ip6ext_ah ah;
} ext;
netwib_ipproto nextproto;
} netwib_ip6ext;
typedef const netwib_ip6ext netwib_constip6ext;
/*-------------------------------------------------------------*/
/* Name : netwib_ip6ext_initdefault
Description :
Initialize a netwib_ip6ext with default values.
Input parameter(s) :
Input/output parameter(s) :
Output parameter(s) :
*pip6ext : netwib_ip6ext to initialize
Normal return values :
NETWIB_ERR_OK : ok
*/
netwib_err netwib_ip6ext_initdefault(netwib_ipproto proto,
netwib_ip6ext *pip6ext);
/*-------------------------------------------------------------*/
/* Name : netwib_pkt_append_ip6ext
Description :
Initialize physical data from a netwib_ip6ext.
Input parameter(s) :
ip6ext : netwib_ip6ext
Input/output parameter(s) :
*ppht : buffer to initialize
Output parameter(s) :
Normal return values :
NETWIB_ERR_OK : ok
*/
netwib_err netwib_pkt_append_ip6ext(netwib_constip6ext *pip6ext,
netwib_buf *ppkt);
netwib_err netwib_pkt_prepend_ip6ext(netwib_constip6ext *pip6ext,
netwib_buf *ppkt);
/*-------------------------------------------------------------*/
/* Name : netwib_pkt_decode_ip6ext
Description :
Decode a netwib_ip6ext from data coming from wire.
Input parameter(s) :
pktproto : protocol of the netwib_ip6ext in ppkt
*ppkt : buffer containing physical data
Input/output parameter(s) :
Output parameter(s) :
*pip6ext : netwib_ip6ext to initialize
*pskipsize : size to skip this header
Normal return values :
NETWIB_ERR_OK : ok
*/
netwib_err netwib_pkt_decode_ip6ext(netwib_ipproto pktproto,
netwib_constbuf *ppkt,
netwib_ip6ext *pip6ext,
netwib_uint32 *pskipsize);