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