From f40eabb01163f383e2471942da45f32361031e39 Mon Sep 17 00:00:00 2001 From: Pablo Neira Ayuso Date: Mon, 14 May 2012 13:14:14 +0200 Subject: add pkt_buff and protocol helper functions Signed-off-by: Pablo Neira Ayuso --- include/libnetfilter_queue/Makefile.am | 7 ++++++- .../libnetfilter_queue/libnetfilter_queue_ipv4.h | 12 ++++++++++++ .../libnetfilter_queue/libnetfilter_queue_ipv6.h | 11 +++++++++++ .../libnetfilter_queue/libnetfilter_queue_tcp.h | 18 ++++++++++++++++++ .../libnetfilter_queue/libnetfilter_queue_udp.h | 15 +++++++++++++++ include/libnetfilter_queue/pktbuff.h | 22 ++++++++++++++++++++++ 6 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 include/libnetfilter_queue/libnetfilter_queue_ipv4.h create mode 100644 include/libnetfilter_queue/libnetfilter_queue_ipv6.h create mode 100644 include/libnetfilter_queue/libnetfilter_queue_tcp.h create mode 100644 include/libnetfilter_queue/libnetfilter_queue_udp.h create mode 100644 include/libnetfilter_queue/pktbuff.h (limited to 'include/libnetfilter_queue') diff --git a/include/libnetfilter_queue/Makefile.am b/include/libnetfilter_queue/Makefile.am index 1a92fc6..902fbf9 100644 --- a/include/libnetfilter_queue/Makefile.am +++ b/include/libnetfilter_queue/Makefile.am @@ -1,2 +1,7 @@ pkginclude_HEADERS = libnetfilter_queue.h \ - linux_nfnetlink_queue.h + linux_nfnetlink_queue.h \ + libnetfilter_queue_ipv4.h \ + libnetfilter_queue_ipv6.h \ + libnetfilter_queue_tcp.h \ + libnetfilter_queue_udp.h \ + pktbuff.h diff --git a/include/libnetfilter_queue/libnetfilter_queue_ipv4.h b/include/libnetfilter_queue/libnetfilter_queue_ipv4.h new file mode 100644 index 0000000..d18924e --- /dev/null +++ b/include/libnetfilter_queue/libnetfilter_queue_ipv4.h @@ -0,0 +1,12 @@ +#ifndef _LIBNFQUEUE_IPV4_ +#define _LIBNFQUEUE_IPV4_ + +struct pkt_buff; +struct iphdr; + +struct iphdr *nfq_ip_get_hdr(struct pkt_buff *pktb); +int nfq_ip_set_transport_header(struct pkt_buff *pktb, struct iphdr *iph); +void nfq_ip_set_checksum(struct iphdr *iph); +int nfq_ip_snprintf(char *buf, size_t size, const struct iphdr *iph); + +#endif diff --git a/include/libnetfilter_queue/libnetfilter_queue_ipv6.h b/include/libnetfilter_queue/libnetfilter_queue_ipv6.h new file mode 100644 index 0000000..36835e2 --- /dev/null +++ b/include/libnetfilter_queue/libnetfilter_queue_ipv6.h @@ -0,0 +1,11 @@ +#ifndef _LIBNFQUEUE_H_ +#define _LIBNFQUEUE_H_ + +struct pkt_buff; +struct ip6_hdr; + +struct ip6_hdr *nfq_ip6_get_hdr(struct pkt_buff *pktb); +int nfq_ip6_set_transport_header(struct pkt_buff *pktb, struct ip6_hdr *iph, uint8_t target); +int nfq_ip6hdr_snprintf(char *buf, size_t size, const struct ip6_hdr *ip6h); + +#endif diff --git a/include/libnetfilter_queue/libnetfilter_queue_tcp.h b/include/libnetfilter_queue/libnetfilter_queue_tcp.h new file mode 100644 index 0000000..cc965f5 --- /dev/null +++ b/include/libnetfilter_queue/libnetfilter_queue_tcp.h @@ -0,0 +1,18 @@ +#ifndef _LIBNFQUEUE_TCP_H_ +#define _LIBNFQUEUE_TCP_H_ + +struct pkt_buff; + +struct tcphdr *nfq_tcp_get_hdr(struct pkt_buff *pktb); +void *nfq_tcp_get_payload(struct tcphdr *tcph, struct pkt_buff *pktb); +unsigned int nfq_tcp_get_payload_len(struct tcphdr *tcph, struct pkt_buff *pktb); + +struct iphdr; +struct ip6_hdr; + +void nfq_tcp_compute_checksum_ipv4(struct tcphdr *tcph, struct iphdr *iph); +void nfq_tcp_compute_checksum_ipv6(struct tcphdr *tcph, struct ip6_hdr *ip6h); + +int nfq_tcp_snprintf(char *buf, size_t size, const struct tcphdr *tcp); + +#endif diff --git a/include/libnetfilter_queue/libnetfilter_queue_udp.h b/include/libnetfilter_queue/libnetfilter_queue_udp.h new file mode 100644 index 0000000..e1aeb73 --- /dev/null +++ b/include/libnetfilter_queue/libnetfilter_queue_udp.h @@ -0,0 +1,15 @@ +#ifndef _LIBNFQUEUE_UDP_H_ +#define _LIBNFQUEUE_UDP_H_ + +struct pkt_buff; + +struct udphdr *nfq_udp_get_hdr(struct pkt_buff *pktb); +void *nfq_udp_get_payload(struct udphdr *udph, struct pkt_buff *pktb); +unsigned int nfq_udp_get_payload_len(struct udphdr *udph, struct pkt_buff *pktb); + +void nfq_udp_compute_checksum_ipv4(struct udphdr *udph, struct iphdr *iph); +void nfq_udp_compute_checksum_ipv6(struct udphdr *udph, struct ip6_hdr *ip6h); + +int nfq_udp_snprintf(char *buf, size_t size, const struct udphdr *udp); + +#endif diff --git a/include/libnetfilter_queue/pktbuff.h b/include/libnetfilter_queue/pktbuff.h new file mode 100644 index 0000000..a0e7abf --- /dev/null +++ b/include/libnetfilter_queue/pktbuff.h @@ -0,0 +1,22 @@ +#ifndef _PKTBUFF_H_ +#define _PKTBUFF_H_ + +struct pkt_buff; + +struct pkt_buff *pktb_alloc(int family, void *data, size_t len, size_t extra); +void pktb_free(struct pkt_buff *pktb); + +uint8_t *pktb_data(struct pkt_buff *pktb); +uint32_t pktb_len(struct pkt_buff *pktb); + +void pktb_push(struct pkt_buff *pktb, unsigned int len); +void pktb_pull(struct pkt_buff *pktb, unsigned int len); +void pktb_put(struct pkt_buff *pktb, unsigned int len); +void pktb_trim(struct pkt_buff *pktb, unsigned int len); +unsigned int pktb_tailroom(struct pkt_buff *pktb); + +uint8_t *pktb_mac_header(struct pkt_buff *pktb); +uint8_t *pktb_network_header(struct pkt_buff *pktb); +uint8_t *pktb_transport_header(struct pkt_buff *pktb); + +#endif -- cgit v1.2.3