/*-------------------------------------------------------------*/ /*************************************************************** * Refer to RFC 2463 to obtain more information about ICMPv6. * ***************************************************************/ /*-------------------------------------------------------------*/ /* ICMP6 types. Comments starting with "NI" are not implemented */ typedef enum { NETWIB_ICMP6TYPE_DSTUNREACH = 1, /* destination unreachable */ NETWIB_ICMP6TYPE_PKTTOOBIG = 2, /* packet too big */ NETWIB_ICMP6TYPE_TIMEEXCEED = 3, /* time exceeded */ NETWIB_ICMP6TYPE_PARAPROB = 4, /* parameter problem */ NETWIB_ICMP6TYPE_ECHOREQ = 128, /* echo request */ NETWIB_ICMP6TYPE_ECHOREP = 129, /* echo reply */ NETWIB_ICMP6TYPE_ROUTERSOLICIT = 133, /* router solicitation (rfc2461) */ NETWIB_ICMP6TYPE_ROUTERADVERT = 134, /* router advert. (rfc2461) */ NETWIB_ICMP6TYPE_NEIGHBORSOLICIT = 135, /* neighbor soli. (rfc2461) */ NETWIB_ICMP6TYPE_NEIGHBORADVERT = 136, /* neighbor advert. (rfc2461) */ NETWIB_ICMP6TYPE_REDIRECT = 137 /* redirect (rfc2461) */ } netwib_icmp6type; /*-------------------------------------------------------------*/ typedef enum { NETWIB_ICMP6CODE_DSTUNREACH_NOROUTE = 0, NETWIB_ICMP6CODE_DSTUNREACH_PROHI = 1, NETWIB_ICMP6CODE_DSTUNREACH_HOST = 3, NETWIB_ICMP6CODE_DSTUNREACH_PORT = 4, NETWIB_ICMP6CODE_PKTTOOBIG = 0, NETWIB_ICMP6CODE_TIMEEXCEED_TTL = 0, NETWIB_ICMP6CODE_TIMEEXCEED_FRAG = 1, NETWIB_ICMP6CODE_PARAPROB_HDR = 0, NETWIB_ICMP6CODE_PARAPROB_NEXTHDR = 1, NETWIB_ICMP6CODE_PARAPROB_OPTION = 2, NETWIB_ICMP6CODE_ECHOREQ = 0, NETWIB_ICMP6CODE_ECHOREP = 0, NETWIB_ICMP6CODE_ROUTERSOLICIT = 0, NETWIB_ICMP6CODE_ROUTERADVERT = 0, NETWIB_ICMP6CODE_NEIGHBORSOLICIT = 0, NETWIB_ICMP6CODE_NEIGHBORADVERT = 0, NETWIB_ICMP6CODE_REDIRECT = 0 } netwib_icmp6code; /*-------------------------------------------------------------*/ /* Name : netwib_buf_append_icmp6type Description : Print the text corresponding to icmp type. Input parameter(s) : type : icmp6 type Input/output parameter(s) : *pbuf : netwib_buf receiving data Output parameter(s) : Normal return values : NETWIB_ERR_OK : ok */ netwib_err netwib_buf_append_icmp6type(netwib_icmp6type type, netwib_buf *pbuf); /*-------------------------------------------------------------*/ /* Name : netwib_buf_append_icmp6code Description : Print the text corresponding to icmp code. Input parameter(s) : type : icmp6 type code : icmp6 code Input/output parameter(s) : *pbuf : netwib_buf receiving data Output parameter(s) : Normal return values : NETWIB_ERR_OK : ok */ netwib_err netwib_buf_append_icmp6code(netwib_icmp6type type, netwib_icmp6code code, netwib_buf *pbuf); /*-------------------------------------------------------------*/ typedef struct { netwib_uint32 reserved; netwib_bufext badippacket; } netwib_icmp6_dstunreach; /*-------------------------------------------------------------*/ typedef struct { netwib_uint32 mtu; netwib_bufext badippacket; } netwib_icmp6_pkttoobig; /*-------------------------------------------------------------*/ typedef struct { netwib_uint32 reserved; netwib_bufext badippacket; } netwib_icmp6_timeexceed; /*-------------------------------------------------------------*/ typedef struct { netwib_uint32 pointer; netwib_bufext badippacket; } netwib_icmp6_paraprob; /*-------------------------------------------------------------*/ typedef struct { netwib_uint16 id; netwib_uint16 seqnum; netwib_bufext data; } netwib_icmp6_echo; /*-------------------------------------------------------------*/ typedef struct { netwib_uint32 reserved; netwib_bufext options; /* buffer contains netwib_icmp6nd */ } netwib_icmp6_routersolicit; /*-------------------------------------------------------------*/ typedef struct { netwib_uint8 curhoplimit; netwib_bool managedaddress; netwib_bool otherstateful; netwib_uint8 reserved; netwib_uint16 routerlifetime; netwib_uint32 reachabletime; netwib_uint32 retranstimer; netwib_bufext options; /* buffer contains netwib_icmp6nd */ } netwib_icmp6_routeradvert; /*-------------------------------------------------------------*/ typedef struct { netwib_uint32 reserved; netwib_ip target; netwib_bufext options; /* buffer contains netwib_icmp6nd */ } netwib_icmp6_neighborsolicit; /*-------------------------------------------------------------*/ typedef struct { netwib_bool router; netwib_bool solicited; netwib_bool override; netwib_uint32 reserved; netwib_ip target; netwib_bufext options; /* buffer contains netwib_icmp6nd */ } netwib_icmp6_neighboradvert; /*-------------------------------------------------------------*/ typedef struct { netwib_uint32 reserved; netwib_ip target; netwib_ip dst; netwib_bufext options; /* buffer contains netwib_icmp6nd */ } netwib_icmp6_redirect; /*-------------------------------------------------------------*/ typedef struct { netwib_icmp6type type; netwib_icmp6code code; netwib_uint16 check; union { netwib_icmp6_dstunreach dstunreach; netwib_icmp6_pkttoobig pkttoobig; netwib_icmp6_timeexceed timeexceed; netwib_icmp6_paraprob paraprob; netwib_icmp6_echo echo; /* used for request and reply */ netwib_icmp6_routersolicit routersolicit; netwib_icmp6_routeradvert routeradvert; netwib_icmp6_neighborsolicit neighborsolicit; netwib_icmp6_neighboradvert neighboradvert; netwib_icmp6_redirect redirect; } msg; } netwib_icmp6; typedef const netwib_icmp6 netwib_consticmp6; #define NETWIB_ICMP6_MINLEN 4 /*-------------------------------------------------------------*/ /* Name : netwib_icmp6_initdefault Description : Initialize a netwib_icmp6 with default values. Input parameter(s) : Input/output parameter(s) : Output parameter(s) : *picmp6hdr : netwib_icmp6hdr to initialize Normal return values : NETWIB_ERR_OK : ok */ netwib_err netwib_icmp6_initdefault(netwib_icmp6type type, netwib_icmp6 *picmp6); /*-------------------------------------------------------------*/ /* Name : netwib_pkt_append_icmp6 Description : Initialize physical data from a netwib_icmp6. Input parameter(s) : icmp6 : netwib_icmp6 Input/output parameter(s) : *ppht : buffer to initialize Output parameter(s) : Normal return values : NETWIB_ERR_OK : ok */ netwib_err netwib_pkt_append_icmp6(netwib_consticmp6 *picmp6, netwib_buf *ppkt); /*-------------------------------------------------------------*/ /* Name : netwib_pkt_decode_icmp6 Description : Decode a netwib_icmp6 from data coming from wire. Input parameter(s) : pktproto : protocol of the netwib_icmp6 in ppkt *ppkt : buffer containing physical data Input/output parameter(s) : Output parameter(s) : *picmp6 : netwib_icmp6 to initialize *pskipsize : size to skip this header Normal return values : NETWIB_ERR_OK : ok */ netwib_err netwib_pkt_decode_icmp6(netwib_constbuf *ppkt, netwib_icmp6 *picmp6, netwib_uint32 *pskipsize);