main index

section index




/*-------------------------------------------------------------*/
/***************************************************************
 * Refer to RFC 792 to obtain more information about ICMP.     *
 ***************************************************************/

/*-------------------------------------------------------------*/
typedef enum {
  NETWIB_ICMP4CODE_DESTUNREACH_NET = 0,
  NETWIB_ICMP4CODE_DESTUNREACH_HOST = 1,
  NETWIB_ICMP4CODE_DESTUNREACH_PROTO = 2,
  NETWIB_ICMP4CODE_DESTUNREACH_PORT = 3,
  NETWIB_ICMP4CODE_DESTUNREACH_FRAG = 4,
  NETWIB_ICMP4CODE_DESTUNREACH_SR = 5,
  NETWIB_ICMP4CODE_DESTUNREACH_NETUNKNOWN = 6,
  NETWIB_ICMP4CODE_DESTUNREACH_HOSTUNKNOWN = 7,
  NETWIB_ICMP4CODE_DESTUNREACH_HOSTISOL = 8,
  NETWIB_ICMP4CODE_DESTUNREACH_NETPROHI = 9,
  NETWIB_ICMP4CODE_DESTUNREACH_HOSTPROHI = 10,
  NETWIB_ICMP4CODE_DESTUNREACH_NETTOS = 11,
  NETWIB_ICMP4CODE_DESTUNREACH_HOSTTOS = 12,
  NETWIB_ICMP4CODE_DESTUNREACH_PROHI = 13,
  NETWIB_ICMP4CODE_DESTUNREACH_PRECVIOL = 14,
  NETWIB_ICMP4CODE_DESTUNREACH_PRECCUTOFF = 15
} netwib_icmp4code_destunreach;
/* Name : netwib_icmp4_init_destunreach
   Description :
     Create a netwib_icmp4hdr and its data.
   Input parameter(s) :
     code : NETWIB_ICMP4_DESTUNREACH_xyz
     *pbadippacket : bad ip packet to store inside the icmp4data
   Input/output parameter(s) :
     *picmp4hdr : netwib_icmp4hdr created
     *picmp4icmp4data : buffer set with icmp4 data
   Output parameter(s) :
   Normal return values :
     NETWIB_ERR_OK : ok
*/
netwib_err netwib_icmp4_init_destunreach(netwib_icmp4code_destunreach code,
                                         netwib_constbuf *pbadippacket,
                                         netwib_icmp4hdr *picmp4hdr,
                                         netwib_buf *picmp4data);

/* Name : netwib_icmp4_decode_destunreach
   Description :
     Decode a netwib_icmp4hdr and its data.
   Input parameter(s) :
     icmp4hdr : netwib_icmp4hdr to analyze
     icmp4data : icmp4 data to analyze
   Input/output parameter(s) :
     *pbadippacket : bad ip packet
   Output parameter(s) :
     *pcode : NETWIB_ICMP4_DESTUNREACH_xyz
   Normal return values :
     NETWIB_ERR_OK : ok
*/
netwib_err netwib_icmp4_decode_destunreach(netwib_consticmp4hdr *picmp4hdr,
                                           netwib_constbuf *picmp4data,
                                           netwib_icmp4code_destunreach *pcode,
                                           netwib_bufext *pbadippacket);

/*-------------------------------------------------------------*/
typedef enum {
  NETWIB_ICMP4CODE_TIMEEXCEED_TTL = 0,
  NETWIB_ICMP4CODE_TIMEEXCEED_FRAG = 1
} netwib_icmp4code_timeexceed;
netwib_err netwib_icmp4_init_timeexceed(netwib_icmp4code_timeexceed code,
                                        netwib_constbuf *pbadippacket,
                                        netwib_icmp4hdr *picmp4hdr,
                                        netwib_buf *picmp4data);

netwib_err netwib_icmp4_decode_timeexceed(netwib_consticmp4hdr *picmp4hdr,
                                          netwib_constbuf *picmp4data,
                                          netwib_icmp4code_timeexceed *pcode,
                                          netwib_bufext *pbadippacket);

/*-------------------------------------------------------------*/
typedef enum {
  NETWIB_ICMP4CODE_PARAPROB_POINTER = 0,
  NETWIB_ICMP4CODE_PARAPROB_MISSOPT = 1,
  NETWIB_ICMP4CODE_PARAPROB_BADLEN = 2
} netwib_icmp4code_paraprob;
netwib_err netwib_icmp4_init_paraprob(netwib_icmp4code_paraprob code,
                                      netwib_uint8 pointer,
                                      netwib_constbuf *pbadippacket,
                                      netwib_icmp4hdr *picmp4hdr,
                                      netwib_buf *picmp4data);

netwib_err netwib_icmp4_decode_paraprob(netwib_consticmp4hdr *picmp4hdr,
                                        netwib_constbuf *picmp4data,
                                        netwib_icmp4code_paraprob *pcode,
                                        netwib_uint8 *ppointer,
                                        netwib_bufext *pbadippacket);

/*-------------------------------------------------------------*/
netwib_err netwib_icmp4_init_srcquench(netwib_constbuf *pbadippacket,
                                       netwib_icmp4hdr *picmp4hdr,
                                       netwib_buf *picmp4data);

netwib_err netwib_icmp4_decode_srcquench(netwib_consticmp4hdr *picmp4hdr,
                                         netwib_constbuf *picmp4data,
                                         netwib_bufext *pbadippacket);

/*-------------------------------------------------------------*/
typedef enum {
  NETWIB_ICMP4CODE_REDIRECT_NET = 0,
  NETWIB_ICMP4CODE_REDIRECT_HOST = 1,
  NETWIB_ICMP4CODE_REDIRECT_NETTOS = 2,
  NETWIB_ICMP4CODE_REDIRECT_HOSTTOS = 3
} netwib_icmp4code_redirect;
netwib_err netwib_icmp4_init_redirect(netwib_icmp4code_redirect code,
                                      netwib_ip *pgw,
                                      netwib_constbuf *pbadippacket,
                                      netwib_icmp4hdr *picmp4hdr,
                                      netwib_buf *picmp4data);

netwib_err netwib_icmp4_decode_redirect(netwib_consticmp4hdr *picmp4hdr,
                                        netwib_constbuf *picmp4data,
                                        netwib_icmp4code_redirect *pcode,
                                        netwib_ip *pgw,
                                        netwib_bufext *pbadippacket);

/*-------------------------------------------------------------*/
netwib_err netwib_icmp4_init_echo(netwib_icmp4type type,
                                  netwib_uint16 id,
                                  netwib_uint16 seqnum,
                                  netwib_constbuf *pechodata,
                                  netwib_icmp4hdr *picmp4hdr,
                                  netwib_buf *picmp4data);

netwib_err netwib_icmp4_decode_echo(netwib_consticmp4hdr *picmp4hdr,
                                    netwib_constbuf *picmp4data,
                                    netwib_icmp4type *ptype,
                                    netwib_uint16 *pid,
                                    netwib_uint16 *pseqnum,
                                    netwib_bufext *pechodata);

/*-------------------------------------------------------------*/
netwib_err netwib_icmp4_init_timestamp(netwib_icmp4type type,
                                       netwib_uint16 id,
                                       netwib_uint16 seqnum,
                                       netwib_uint32 originatetimestamp,
                                       netwib_uint32 receivetimestamp,
                                       netwib_uint32 transmittimestamp,
                                       netwib_icmp4hdr *picmp4hdr,
                                       netwib_buf *picmp4data);

netwib_err netwib_icmp4_decode_timestamp(netwib_consticmp4hdr *picmp4hdr,
                                         netwib_constbuf *picmp4data,
                                         netwib_icmp4type *ptype,
                                         netwib_uint16 *pid,
                                         netwib_uint16 *pseqnum,
                                         netwib_uint32 *poriginatetimestamp,
                                         netwib_uint32 *preceivetimestamp,
                                         netwib_uint32 *ptransmittimestamp);

/*-------------------------------------------------------------*/
netwib_err netwib_icmp4_init_info(netwib_icmp4type type,
                                  netwib_uint16 id,
                                  netwib_uint16 seqnum,
                                  netwib_icmp4hdr *picmp4hdr,
                                  netwib_buf *picmp4data);

netwib_err netwib_icmp4_decode_info(netwib_consticmp4hdr *picmp4hdr,
                                    netwib_constbuf *picmp4data,
                                    netwib_icmp4type *ptype,
                                    netwib_uint16 *pid,
                                    netwib_uint16 *pseqnum);

/*-------------------------------------------------------------*/
/* Try to decode errors :
     NETWIB_ICMP4TYPE_DESTUNREACH
     NETWIB_ICMP4TYPE_TIMEEXCEED
     NETWIB_ICMP4TYPE_PARAPROB
     NETWIB_ICMP4TYPE_SRCQUENCH
     NETWIB_ICMP4TYPE_REDIRECT
   Output parameters represents needed parameters for each type.
*/
netwib_err netwib_icmp4_decode_error(netwib_consticmp4hdr *picmp4hdr,
                                     netwib_constbuf *picmp4data,
                                     netwib_icmp4type *ptype,
                                     netwib_icmp4code *pcode,
                                     netwib_uint8 *ppointer,
                                     netwib_ip *pgw,
                                     netwib_bufext *pbadippacket);

/*-------------------------------------------------------------*/
/* Name : netwib_ip64bits_init_ip4xyz
   Description :
     Initialize a buffer containing an IP header and
     64 bits of data.
     This kind of packets are needed for errors (cf. rfc 792).
   Input parameter(s) :
     *pip4hdr : IP header
     *pipdata : IP data
     *phdrudp : udp header
     *phdrtcp : tcp header
   Input/output parameter(s) :
   Output parameter(s) :
     *pip64bits : buffer containing an IP header and
                  64 bits of data.
   Normal return values :
     NETWIB_ERR_OK : ok
*/
netwib_err netwib_ip64bits_init_ip4pkt(netwib_constbuf *pip4pkt,
                                       netwib_bufext *pip64bits);

/*-------------------------------------------------------------*/
/* Name : netwib_ip64bits_decode_ip4xyz
   Description :
     Try to decode ip packet contained in ip64bits.
   Input parameter(s) :
     *pip64bits : ip header and at least 64 bits of ip data
   Input/output parameter(s) :
   Output parameter(s) :
     *pip4hdr : decoded IP header
     *pip4data : buffer containing ip data
     *pudpsrc : udp source port
     *pudpdst : udp destination port
     *pudplen : udp len
     *pudpcheck : udp checksum
     *ptcpsrc : tcp source port
     *ptcpdst : tcp destination port
     *pseqnum : tcp sequence number
   Normal return values :
     NETWIB_ERR_OK : ok
     NETWIB_ERR_OKNOTDECODED : packet not decoded
*/
netwib_err netwib_ip64bits_decode_ip4optdata(netwib_constbuf *pip64bits,
                                             netwib_ip4hdr *pip4hdr,
                                             netwib_bufext *pip4opt,
                                             netwib_bufext *pip4data);
#define netwib_ip64bits_decode_ip4data(pip64bits,pip4hdr,pip4data) netwib_ip64bits_decode_ip4optdata(pip64bits,pip4hdr,NULL,pip4data)
netwib_err netwib_ip64bits_decode_ip4optudp(netwib_constbuf *pip64bits,
                                            netwib_ip4hdr *pip4hdr,
                                            netwib_bufext *pip4opt,
                                            netwib_port *pudpsrc,
                                            netwib_port *pudpdst,
                                            netwib_uint16 *pudplen,
                                            netwib_uint16 *pudpcheck);
#define netwib_ip64bits_decode_ip4udp(pip64bits,pip4hdr,pudpsrc,pudpdst,pudplen,pudpcheck) netwib_ip64bits_decode_ip4optudp(pip64bits,pip4hdr,NULL,pudpsrc,pudpdst,pudplen,pudpcheck)
netwib_err netwib_ip64bits_decode_ip4opttcp(netwib_constbuf *pip64bits,
                                            netwib_ip4hdr *pip4hdr,
                                            netwib_bufext *pip4opt,
                                            netwib_port *ptcpsrc,
                                            netwib_port *ptcpdst,
                                            netwib_uint32 *ptcpseqnum);
#define netwib_ip64bits_decode_ip4tcp(pip64bits,pip4hdr,ptcpsrc,ptcpdst,ptcpseqnum) netwib_ip64bits_decode_ip4opttcp(pip64bits,pip4hdr,NULL,ptcpsrc,ptcpdst,ptcpseqnum)










main index

section index