Home | History | Annotate | Download | only in internal
      1 /*
      2  * WARNING: Do *NOT* ever include this file, only for internal use!
      3  * 	    Use the set/get API in order to set/get the conntrack attributes
      4  */
      5 
      6 #ifndef __LIBNETFILTER_CONNTRACK_INTERNAL__
      7 #define __LIBNETFILTER_CONNTRACK_INTERNAL__
      8 
      9 #include <stdio.h>
     10 #include <stdlib.h>
     11 #include <stdarg.h>
     12 #include <string.h>
     13 #include <sys/types.h>
     14 #include <arpa/inet.h>
     15 #include <time.h>
     16 #include <errno.h>
     17 #include <netinet/in.h>
     18 
     19 #include <libnfnetlink/libnfnetlink.h>
     20 #include <libnetfilter_conntrack/libnetfilter_conntrack.h>
     21 #include <libnetfilter_conntrack/libnetfilter_conntrack_tcp.h>
     22 #include <libnetfilter_conntrack/libnetfilter_conntrack_sctp.h>
     23 #include <libnetfilter_conntrack/libnetfilter_conntrack_dccp.h>
     24 
     25 #include "internal/object.h"
     26 #include "internal/prototypes.h"
     27 #include "internal/types.h"
     28 #include "internal/extern.h"
     29 #include "internal/bitops.h"
     30 
     31 #ifndef IPPROTO_SCTP
     32 #define IPPROTO_SCTP 132
     33 #endif
     34 
     35 #ifndef IPPROTO_UDPLITE
     36 #define IPPROTO_UDPLITE 136
     37 #endif
     38 
     39 #ifndef IPPROTO_DCCP
     40 #define IPPROTO_DCCP 33
     41 #endif
     42 
     43 #define BUFFER_SIZE(ret, size, len, offset)		\
     44 	size += ret;					\
     45 	if (ret > len)					\
     46 		ret = len;				\
     47 	offset += ret;					\
     48 	len -= ret;
     49 
     50 #define TS_ORIG								\
     51 ({									\
     52 	((1 << ATTR_ORIG_IPV4_SRC) | (1 << ATTR_ORIG_IPV4_DST) |	\
     53 	 (1 << ATTR_ORIG_IPV6_SRC) | (1 << ATTR_ORIG_IPV6_DST) |	\
     54 	 (1 << ATTR_ORIG_PORT_SRC) | (1 << ATTR_ORIG_PORT_DST) | 	\
     55 	 (1 << ATTR_ORIG_L3PROTO)  | (1 << ATTR_ORIG_L4PROTO)  | 	\
     56 	 (1 << ATTR_ICMP_TYPE)	   | (1 << ATTR_ICMP_CODE)     | 	\
     57 	 (1 << ATTR_ICMP_ID));						\
     58 })
     59 
     60 #define TS_REPL								\
     61 ({									\
     62 	((1 << ATTR_REPL_IPV4_SRC) | (1 << ATTR_REPL_IPV4_DST) | 	\
     63 	 (1 << ATTR_REPL_IPV6_SRC) | (1 << ATTR_REPL_IPV6_DST) | 	\
     64 	 (1 << ATTR_REPL_PORT_SRC) | (1 << ATTR_REPL_PORT_DST) | 	\
     65 	 (1 << ATTR_REPL_L3PROTO)  | (1 << ATTR_REPL_L4PROTO)  |	\
     66 	 (1 << ATTR_ICMP_TYPE)	   | (1 << ATTR_ICMP_CODE)     | 	\
     67 	 (1 << ATTR_ICMP_ID));						\
     68 })
     69 
     70 #define TUPLE_SET(dir) (dir == __DIR_ORIG ? TS_ORIG : TS_REPL)
     71 
     72 #define likely(x)       __builtin_expect((x),1)
     73 #define unlikely(x)     __builtin_expect((x),0)
     74 
     75 #ifndef NSEC_PER_SEC
     76 #define NSEC_PER_SEC    1000000000L
     77 #endif
     78 
     79 /* extracted from include/linux/netfilter/nf_conntrack_tcp.h .*/
     80 struct nf_ct_tcp_flags {
     81 	uint8_t flags;
     82 	uint8_t mask;
     83 };
     84 
     85 #define NFCT_BITMASK_AND	0
     86 #define NFCT_BITMASK_OR		1
     87 
     88 #endif
     89