main index

section index




/*-------------------------------------------------------------*/
/***************************************************************
 * Some header fields are computed by functions :              *
 *  - linkhdr.ethhdr.type                                      *
 *  - ip4hdr.ihl                                               *
 *  - ip4hdr.totlen                                            *
 *  - ip4hdr.check                                             *
 *  - ip4hdr.protocol                                          *
 *  - udphdr.len                                               *
 *  - udphdr.check                                             *
 *  - tcphdr.doff                                              *
 *  - tcphdr.check                                             *
 *  - icmp4hdr.check                                           *
 * To use fake values for those fields, they have to be edited *
 * after packet construction.                                  *
 ***************************************************************/

/*-------------------------------------------------------------*/
/*-------------------------------------------------------------*/
/* Following functions create/decode layers. Their names should be
   self explaining.
   Note : when decoding a layer, ppkt buffer is automatically
   shifted to point to next entry.
*/

/*-------------------------------------------------------------*/
netwib_err netwib_pkt_append_layer_link(netwib_constlinkhdr *plinkhdr,
                                        netwib_buf *pbuf);
netwib_err netwib_pkt_decode_layer_link(netwib_device_dlttype dlttype,
                                        netwib_buf *ppkt,
                                        netwib_linkhdr *plinkhdr);

/*-------------------------------------------------------------*/
netwib_err netwib_pkt_append_layer_ip4opt(netwib_constip4hdr *pip4hdr,
                                          netwib_constbuf *pip4opt,
                                          netwib_uint32 datasize,
                                          netwib_buf *pbuf);
netwib_err netwib_pkt_decode_layer_ip4opt(netwib_buf *ppkt,
                                          netwib_ip4hdr *pip4hdr,
                                          netwib_bufext *pip4opt);
#define netwib_pkt_append_layer_ip4(pip4hdr,datasize,pbuf) netwib_pkt_append_layer_ip4opt(pip4hdr,NULL,datasize,pbuf)
#define netwib_pkt_decode_layer_ip4(pkt,pip4hdr) netwib_pkt_decode_layer_ip4opt(pkt,pip4hdr,NULL)

/*-------------------------------------------------------------*/
netwib_err netwib_pkt_append_layer_udpdata(netwib_constip4hdr *pip4hdr,
                                           netwib_constudphdr *pudphdr,
                                           netwib_constbuf *pdata,
                                           netwib_buf *pbuf);
netwib_err netwib_pkt_decode_layer_udpdata(netwib_buf *ppkt,
                                           netwib_udphdr *pudphdr,
                                           netwib_bufext *pdata);
#define netwib_pkt_decode_layer_udp(ppkt,pudphdr) netwib_pkt_decode_layer_udpdata(ppkt,pudphdr, NULL)

/*-------------------------------------------------------------*/
netwib_err netwib_pkt_append_layer_tcpoptdata(netwib_constip4hdr *pip4hdr,
                                              netwib_consttcphdr *ptcphdr,
                                              netwib_constbuf *ptcpopt,
                                              netwib_constbuf *pdata,
                                              netwib_buf *pbuf);
#define netwib_pkt_append_layer_tcpdata(pip4hdr,ptcphdr,pdata,pbuf) netwib_pkt_append_layer_tcpoptdata(pip4hdr,ptcphdr,NULL,pdata,pbuf)
netwib_err netwib_pkt_decode_layer_tcpoptdata(netwib_buf *ppkt,
                                              netwib_tcphdr *ptcphdr,
                                              netwib_bufext *ptcpopt,
                                              netwib_bufext *pdata);
#define netwib_pkt_decode_layer_tcpdata(pkt,ptcphdr,pdata) netwib_pkt_decode_layer_tcpoptdata(pkt,ptcphdr,NULL,pdata)
#define netwib_pkt_decode_layer_tcp(pkt,ptcphdr) netwib_pkt_decode_layer_tcpoptdata(pkt,ptcphdr,NULL,NULL)
#define netwib_pkt_decode_layer_tcpopt(pkt,ptcphdr,ptcpopt) netwib_pkt_decode_layer_tcpoptdata(pkt,ptcphdr,ptcpopt,NULL)

/*-------------------------------------------------------------*/
netwib_err netwib_pkt_append_layer_icmp4data(netwib_consticmp4hdr *picmp4hdr,
                                             netwib_constbuf *pdata,
                                             netwib_buf *pbuf);
netwib_err netwib_pkt_decode_layer_icmp4data(netwib_buf *ppkt,
                                             netwib_icmp4hdr *picmp4hdr,
                                             netwib_bufext *pdata);
#define netwib_pkt_decode_layer_icmp4(ppkt,picmp4hdr) netwib_pkt_decode_layer_icmp4data(ppkt,picmp4hdr, NULL)

/*-------------------------------------------------------------*/
netwib_err netwib_pkt_append_layer_arp(netwib_constarphdr *parphdr,
                                       netwib_buf *pbuf);
netwib_err netwib_pkt_decode_layer_arp(netwib_buf *ppkt,
                                       netwib_arphdr *parphdr);


/*-------------------------------------------------------------*/
/*-------------------------------------------------------------*/
/* Following functions create/decode packets. Their names should be
   self explaining.
*/

/*-------------------------------------------------------------*/
netwib_err netwib_pkt_append_linkdata(netwib_constlinkhdr *plinkhdr,
                                      netwib_constbuf *pdata,
                                      netwib_buf *pbuf);
netwib_err netwib_pkt_decode_linkdata(netwib_device_dlttype dlttype,
                                      netwib_constbuf *ppkt,
                                      netwib_linkhdr *plinkhdr,
                                      netwib_bufext *pdata);

/*-------------------------------------------------------------*/
netwib_err netwib_pkt_append_ip4optdata(netwib_constip4hdr *pip4hdr,
                                        netwib_constbuf *pip4opt,
                                        netwib_constbuf *pdata,
                                        netwib_buf *pbuf);
netwib_err netwib_pkt_decode_ip4optdata(netwib_constbuf *ppkt,
                                        netwib_ip4hdr *pip4hdr,
                                        netwib_bufext *pip4opt,
                                        netwib_bufext *pdata);
netwib_err netwib_pkt_append_linkip4optdata(netwib_constlinkhdr *plinkhdr,
                                            netwib_constip4hdr *pip4hdr,
                                            netwib_constbuf *pip4opt,
                                            netwib_constbuf *pdata,
                                            netwib_buf *pbuf);
netwib_err netwib_pkt_decode_linkip4optdata(netwib_device_dlttype dlttype,
                                            netwib_constbuf *ppkt,
                                            netwib_linkhdr *plinkhdr,
                                            netwib_ip4hdr *pip4hdr,
                                            netwib_bufext *pip4opt,
                                            netwib_bufext *pdata);
#define netwib_pkt_append_ip4data(pip4hdr,pdata,pbuf) netwib_pkt_append_ip4optdata(pip4hdr,NULL,pdata,pbuf)
#define netwib_pkt_decode_ip4data(pkt,pip4hdr,pdata) netwib_pkt_decode_ip4optdata(pkt,pip4hdr,NULL,pdata)
#define netwib_pkt_append_linkip4data(plinkhdr,pip4hdr,pdata,pbuf) netwib_pkt_append_linkip4optdata(plinkhdr,pip4hdr,NULL,pdata,pbuf)
#define netwib_pkt_decode_linkip4data(dlttype,pkt,plinkhdr,pip4hdr,pdata) netwib_pkt_decode_linkip4optdata(dlttype,pkt,plinkhdr,pip4hdr,NULL,pdata)

/*-------------------------------------------------------------*/
netwib_err netwib_pkt_append_ip4optudpdata(netwib_constip4hdr *pip4hdr,
                                           netwib_constbuf *pip4opt,
                                           netwib_constudphdr *pudphdr,
                                           netwib_constbuf *pdata,
                                           netwib_buf *pbuf);
netwib_err netwib_pkt_decode_ip4optudpdata(netwib_constbuf *ppkt,
                                           netwib_ip4hdr *pip4hdr,
                                           netwib_bufext *pip4opt,
                                           netwib_udphdr *pudphdr,
                                           netwib_bufext *pdata);
netwib_err netwib_pkt_append_linkip4optudpdata(netwib_constlinkhdr *plinkhdr,
                                               netwib_constip4hdr *pip4hdr,
                                               netwib_constbuf *pip4opt,
                                               netwib_constudphdr *pudphdr,
                                               netwib_constbuf *pdata,
                                               netwib_buf *pbuf);
netwib_err netwib_pkt_decode_linkip4optudpdata(netwib_device_dlttype dlttype,
                                               netwib_constbuf *ppkt,
                                               netwib_linkhdr *plinkhdr,
                                               netwib_ip4hdr *pip4hdr,
                                               netwib_bufext *pip4opt,
                                               netwib_udphdr *pudphdr,
                                               netwib_bufext *pdata);
#define netwib_pkt_append_ip4udpdata(pip4hdr,pudphdr,pdata,pbuf) netwib_pkt_append_ip4optudpdata(pip4hdr,NULL,pudphdr,pdata,pbuf)
#define netwib_pkt_decode_ip4udpdata(pkt,pip4hdr,pudphdr,pdata) netwib_pkt_decode_ip4optudpdata(pkt,pip4hdr,NULL,pudphdr,pdata)
#define netwib_pkt_append_linkip4udpdata(plinkhdr,pip4hdr,pudphdr,pdata,pbuf) netwib_pkt_append_linkip4optudpdata(plinkhdr,pip4hdr,NULL,pudphdr,pdata,pbuf)
#define netwib_pkt_decode_linkip4udpdata(dlttype,pkt,plinkhdr,pip4hdr,pudphdr,pdata) netwib_pkt_decode_linkip4optudpdata(dlttype,pkt,plinkhdr,pip4hdr,NULL,pudphdr,pdata)

/*-------------------------------------------------------------*/
netwib_err netwib_pkt_append_ip4opttcpoptdata(netwib_constip4hdr *pip4hdr,
                                              netwib_constbuf *pip4opt,
                                              netwib_consttcphdr *ptcphdr,
                                              netwib_constbuf *ptcpopt,
                                              netwib_constbuf *pdata,
                                              netwib_buf *pbuf);
netwib_err netwib_pkt_decode_ip4opttcpoptdata(netwib_constbuf *ppkt,
                                              netwib_ip4hdr *pip4hdr,
                                              netwib_bufext *pip4opt,
                                              netwib_tcphdr *ptcphdr,
                                              netwib_bufext *ptcpopt,
                                              netwib_bufext *pdata);
netwib_err netwib_pkt_append_linkip4opttcpoptdata(netwib_constlinkhdr *plinkhdr,
                                                  netwib_constip4hdr *pip4hdr,
                                                  netwib_constbuf *pip4opt,
                                                  netwib_consttcphdr *ptcphdr,
                                                  netwib_constbuf *ptcpopt,
                                                  netwib_constbuf *pdata,
                                                  netwib_buf *pbuf);
netwib_err netwib_pkt_decode_linkip4opttcpoptdata(netwib_device_dlttype dlttype,
                                                  netwib_constbuf *ppkt,
                                                  netwib_linkhdr *plinkhdr,
                                                  netwib_ip4hdr *pip4hdr,
                                                  netwib_bufext *pip4opt,
                                                  netwib_tcphdr *ptcphdr,
                                                  netwib_bufext *ptcpopt,
                                                  netwib_bufext *pdata);
#define netwib_pkt_append_ip4tcpdata(pip4hdr,ptcphdr,pdata,pbuf) netwib_pkt_append_ip4opttcpoptdata(pip4hdr,NULL,ptcphdr,NULL,pdata,pbuf)
#define netwib_pkt_append_ip4opttcpdata(pip4hdr,pip4opt,ptcphdr,pdata,pbuf) netwib_pkt_append_ip4opttcpoptdata(pip4hdr,pip4opt,ptcphdr,NULL,pdata,pbuf)
#define netwib_pkt_append_ip4tcpoptdata(pip4hdr,ptcphdr,ptcpopt,pdata,pbuf) netwib_pkt_append_ip4opttcpoptdata(pip4hdr,NULL,ptcphdr,ptcpopt,pdata,pbuf)
#define netwib_pkt_decode_ip4tcpdata(pkt,pip4hdr,ptcphdr,pdata) netwib_pkt_decode_ip4opttcpoptdata(pkt,pip4hdr,NULL,ptcphdr,NULL,pdata)
#define netwib_pkt_decode_ip4opttcpdata(pkt,pip4opt,ppip4hdr,ptcphdr,pdata) netwib_pkt_decode_ip4opttcpoptdata(pkt,pip4hdr,pip4opt,pptcphdr,NULL,pdata)
#define netwib_pkt_decode_ip4tcpoptdata(pkt,pip4hdr,ptcphdr,ptcpopt,pdata) netwib_pkt_decode_ip4opttcpoptdata(pkt,pip4hdr,NULL,ptcphdr,ptcpopt,pdata)
#define netwib_pkt_append_linkip4tcpdata(plinkhdr,pip4hdr,ptcphdr,pdata,pbuf) netwib_pkt_append_linkip4opttcpoptdata(plinkhdr,pip4hdr,NULL,ptcphdr,NULL,pdata,pbuf)
#define netwib_pkt_append_linkip4opttcpdata(plinkhdr,pip4hdr,pip4opt,ptcphdr,pdata,pbuf) netwib_pkt_append_linkip4opttcpoptdata(plinkhdr,pip4hdr,pip4opt,ptcphdr,NULL,pdata,pbuf)
#define netwib_pkt_append_linkip4tcpoptdata(plinkhdr,pip4hdr,ptcphdr,ptcpopt,pdata,pbuf) netwib_pkt_append_linkip4opttcpoptdata(plinkhdr,pip4hdr,NULL,ptcphdr,tcpopt,pdata,pbuf)
#define netwib_pkt_decode_linkip4tcpdata(dlttype,pkt,plinkhdr,pip4hdr,ptcphdr,pdata) netwib_pkt_decode_linkip4opttcpoptdata(dlttype,pkt,plinkhdr,pip4hdr,NULL,ptcphdr,NULL,pdata)
#define netwib_pkt_decode_linkip4opttcpdata(dlttype,pkt,plinkhdr,ip4opt,ppip4hdr,ptcphdr,pdata) netwib_pkt_decode_linkip4opttcpoptdata(dlttype,pkt,plinkhdr,pip4hdr,ip4opt,pptcphdr,NULL,pdata)
#define netwib_pkt_decode_linkip4tcpoptdata(dlttype,pkt,plinkhdr,pip4hdr,ptcphdr,tcpopt,pdata) netwib_pkt_decode_linkip4opttcpoptdata(dlttype,pkt,plinkhdr,pip4hdr,NULL,ptcphdr,tcpopt,pdata)

/*-------------------------------------------------------------*/
netwib_err netwib_pkt_append_ip4opticmp4data(netwib_constip4hdr *pip4hdr,
                                             netwib_constbuf *pip4opt,
                                             netwib_consticmp4hdr *picmp4hdr,
                                             netwib_constbuf *pdata,
                                             netwib_buf *pbuf);
netwib_err netwib_pkt_decode_ip4opticmp4data(netwib_constbuf *ppkt,
                                             netwib_ip4hdr *pip4hdr,
                                             netwib_bufext *pip4opt,
                                             netwib_icmp4hdr *picmp4hdr,
                                             netwib_bufext *pdata);
netwib_err netwib_pkt_append_linkip4opticmp4data(netwib_constlinkhdr *plinkhdr,
                                                 netwib_constip4hdr *pip4hdr,
                                                 netwib_constbuf *pip4opt,
                                                 netwib_consticmp4hdr *picmp4hdr,
                                                 netwib_constbuf *pdata,
                                                 netwib_buf *pbuf);
netwib_err netwib_pkt_decode_linkip4opticmp4data(netwib_device_dlttype dlttype,
                                                 netwib_constbuf *ppkt,
                                                 netwib_linkhdr *plinkhdr,
                                                 netwib_ip4hdr *pip4hdr,
                                                 netwib_bufext *pip4opt,
                                                 netwib_icmp4hdr *picmp4hdr,
                                               netwib_bufext *pdata);
#define netwib_pkt_append_ip4icmp4data(pip4hdr,picmp4hdr,pdata,pbuf) netwib_pkt_append_ip4opticmp4data(pip4hdr,NULL,picmp4hdr,pdata,pbuf)
#define netwib_pkt_decode_ip4icmp4data(pkt,pip4hdr,picmp4hdr,pdata) netwib_pkt_decode_ip4opticmp4data(pkt,pip4hdr,NULL,picmp4hdr,pdata)
#define netwib_pkt_append_linkip4icmp4data(plinkhdr,pip4hdr,picmp4hdr,pdata,pbuf) netwib_pkt_append_linkip4opticmp4data(plinkhdr,pip4hdr,NULL,picmp4hdr,pdata,pbuf)
#define netwib_pkt_decode_linkip4icmp4data(dlttype,pkt,plinkhdr,pip4hdr,picmp4hdr,pdata) netwib_pkt_decode_linkip4opticmp4data(dlttype,pkt,plinkhdr,pip4hdr,NULL,picmp4hdr,pdata)

/*-------------------------------------------------------------*/
/* before calling this function, user has to set plinkhdr->type
   to ARP or RARP */
netwib_err netwib_pkt_append_linkarp(netwib_constlinkhdr *plinkhdr,
                                     netwib_constarphdr *parphdr,
                                     netwib_buf *pbuf);
netwib_err netwib_pkt_decode_linkarp(netwib_device_dlttype dlttype,
                                     netwib_constbuf *ppkt,
                                     netwib_linkhdr *plinkhdr,
                                     netwib_arphdr *parphdr);




main index

section index