18a44513648da0c5f5551f96b329cf56b66f5b303pkanwar/*
28a44513648da0c5f5551f96b329cf56b66f5b303pkanwar * WARNING: Do *NOT* ever include this file, only for internal use!
38a44513648da0c5f5551f96b329cf56b66f5b303pkanwar * 	    Use the set/get API in order to set/get the conntrack attributes
48a44513648da0c5f5551f96b329cf56b66f5b303pkanwar */
58a44513648da0c5f5551f96b329cf56b66f5b303pkanwar
68a44513648da0c5f5551f96b329cf56b66f5b303pkanwar#ifndef __LIBNETFILTER_CONNTRACK_INTERNAL__
78a44513648da0c5f5551f96b329cf56b66f5b303pkanwar#define __LIBNETFILTER_CONNTRACK_INTERNAL__
88a44513648da0c5f5551f96b329cf56b66f5b303pkanwar
98a44513648da0c5f5551f96b329cf56b66f5b303pkanwar#include <stdio.h>
108a44513648da0c5f5551f96b329cf56b66f5b303pkanwar#include <stdlib.h>
118a44513648da0c5f5551f96b329cf56b66f5b303pkanwar#include <stdarg.h>
128a44513648da0c5f5551f96b329cf56b66f5b303pkanwar#include <string.h>
138a44513648da0c5f5551f96b329cf56b66f5b303pkanwar#include <sys/types.h>
148a44513648da0c5f5551f96b329cf56b66f5b303pkanwar#include <arpa/inet.h>
158a44513648da0c5f5551f96b329cf56b66f5b303pkanwar#include <time.h>
168a44513648da0c5f5551f96b329cf56b66f5b303pkanwar#include <errno.h>
178a44513648da0c5f5551f96b329cf56b66f5b303pkanwar#include <netinet/in.h>
188a44513648da0c5f5551f96b329cf56b66f5b303pkanwar
198a44513648da0c5f5551f96b329cf56b66f5b303pkanwar#include <libnfnetlink/libnfnetlink.h>
208a44513648da0c5f5551f96b329cf56b66f5b303pkanwar#include <libnetfilter_conntrack/libnetfilter_conntrack.h>
218a44513648da0c5f5551f96b329cf56b66f5b303pkanwar#include <libnetfilter_conntrack/libnetfilter_conntrack_tcp.h>
228a44513648da0c5f5551f96b329cf56b66f5b303pkanwar#include <libnetfilter_conntrack/libnetfilter_conntrack_sctp.h>
238a44513648da0c5f5551f96b329cf56b66f5b303pkanwar#include <libnetfilter_conntrack/libnetfilter_conntrack_dccp.h>
248a44513648da0c5f5551f96b329cf56b66f5b303pkanwar
258a44513648da0c5f5551f96b329cf56b66f5b303pkanwar#include "internal/object.h"
268a44513648da0c5f5551f96b329cf56b66f5b303pkanwar#include "internal/prototypes.h"
278a44513648da0c5f5551f96b329cf56b66f5b303pkanwar#include "internal/types.h"
288a44513648da0c5f5551f96b329cf56b66f5b303pkanwar#include "internal/extern.h"
298a44513648da0c5f5551f96b329cf56b66f5b303pkanwar#include "internal/bitops.h"
308a44513648da0c5f5551f96b329cf56b66f5b303pkanwar
318a44513648da0c5f5551f96b329cf56b66f5b303pkanwar#ifndef IPPROTO_SCTP
328a44513648da0c5f5551f96b329cf56b66f5b303pkanwar#define IPPROTO_SCTP 132
338a44513648da0c5f5551f96b329cf56b66f5b303pkanwar#endif
348a44513648da0c5f5551f96b329cf56b66f5b303pkanwar
358a44513648da0c5f5551f96b329cf56b66f5b303pkanwar#ifndef IPPROTO_UDPLITE
368a44513648da0c5f5551f96b329cf56b66f5b303pkanwar#define IPPROTO_UDPLITE 136
378a44513648da0c5f5551f96b329cf56b66f5b303pkanwar#endif
388a44513648da0c5f5551f96b329cf56b66f5b303pkanwar
398a44513648da0c5f5551f96b329cf56b66f5b303pkanwar#ifndef IPPROTO_DCCP
408a44513648da0c5f5551f96b329cf56b66f5b303pkanwar#define IPPROTO_DCCP 33
418a44513648da0c5f5551f96b329cf56b66f5b303pkanwar#endif
428a44513648da0c5f5551f96b329cf56b66f5b303pkanwar
438a44513648da0c5f5551f96b329cf56b66f5b303pkanwar#define BUFFER_SIZE(ret, size, len, offset)		\
448a44513648da0c5f5551f96b329cf56b66f5b303pkanwar	size += ret;					\
458a44513648da0c5f5551f96b329cf56b66f5b303pkanwar	if (ret > len)					\
468a44513648da0c5f5551f96b329cf56b66f5b303pkanwar		ret = len;				\
478a44513648da0c5f5551f96b329cf56b66f5b303pkanwar	offset += ret;					\
488a44513648da0c5f5551f96b329cf56b66f5b303pkanwar	len -= ret;
498a44513648da0c5f5551f96b329cf56b66f5b303pkanwar
508a44513648da0c5f5551f96b329cf56b66f5b303pkanwar#define TS_ORIG								\
518a44513648da0c5f5551f96b329cf56b66f5b303pkanwar({									\
528a44513648da0c5f5551f96b329cf56b66f5b303pkanwar	((1 << ATTR_ORIG_IPV4_SRC) | (1 << ATTR_ORIG_IPV4_DST) |	\
538a44513648da0c5f5551f96b329cf56b66f5b303pkanwar	 (1 << ATTR_ORIG_IPV6_SRC) | (1 << ATTR_ORIG_IPV6_DST) |	\
548a44513648da0c5f5551f96b329cf56b66f5b303pkanwar	 (1 << ATTR_ORIG_PORT_SRC) | (1 << ATTR_ORIG_PORT_DST) | 	\
558a44513648da0c5f5551f96b329cf56b66f5b303pkanwar	 (1 << ATTR_ORIG_L3PROTO)  | (1 << ATTR_ORIG_L4PROTO)  | 	\
568a44513648da0c5f5551f96b329cf56b66f5b303pkanwar	 (1 << ATTR_ICMP_TYPE)	   | (1 << ATTR_ICMP_CODE)     | 	\
578a44513648da0c5f5551f96b329cf56b66f5b303pkanwar	 (1 << ATTR_ICMP_ID));						\
588a44513648da0c5f5551f96b329cf56b66f5b303pkanwar})
598a44513648da0c5f5551f96b329cf56b66f5b303pkanwar
608a44513648da0c5f5551f96b329cf56b66f5b303pkanwar#define TS_REPL								\
618a44513648da0c5f5551f96b329cf56b66f5b303pkanwar({									\
628a44513648da0c5f5551f96b329cf56b66f5b303pkanwar	((1 << ATTR_REPL_IPV4_SRC) | (1 << ATTR_REPL_IPV4_DST) | 	\
638a44513648da0c5f5551f96b329cf56b66f5b303pkanwar	 (1 << ATTR_REPL_IPV6_SRC) | (1 << ATTR_REPL_IPV6_DST) | 	\
648a44513648da0c5f5551f96b329cf56b66f5b303pkanwar	 (1 << ATTR_REPL_PORT_SRC) | (1 << ATTR_REPL_PORT_DST) | 	\
658a44513648da0c5f5551f96b329cf56b66f5b303pkanwar	 (1 << ATTR_REPL_L3PROTO)  | (1 << ATTR_REPL_L4PROTO)  |	\
668a44513648da0c5f5551f96b329cf56b66f5b303pkanwar	 (1 << ATTR_ICMP_TYPE)	   | (1 << ATTR_ICMP_CODE)     | 	\
678a44513648da0c5f5551f96b329cf56b66f5b303pkanwar	 (1 << ATTR_ICMP_ID));						\
688a44513648da0c5f5551f96b329cf56b66f5b303pkanwar})
698a44513648da0c5f5551f96b329cf56b66f5b303pkanwar
708a44513648da0c5f5551f96b329cf56b66f5b303pkanwar#define TUPLE_SET(dir) (dir == __DIR_ORIG ? TS_ORIG : TS_REPL)
718a44513648da0c5f5551f96b329cf56b66f5b303pkanwar
728a44513648da0c5f5551f96b329cf56b66f5b303pkanwar#define likely(x)       __builtin_expect((x),1)
738a44513648da0c5f5551f96b329cf56b66f5b303pkanwar#define unlikely(x)     __builtin_expect((x),0)
748a44513648da0c5f5551f96b329cf56b66f5b303pkanwar
758a44513648da0c5f5551f96b329cf56b66f5b303pkanwar#ifndef NSEC_PER_SEC
768a44513648da0c5f5551f96b329cf56b66f5b303pkanwar#define NSEC_PER_SEC    1000000000L
778a44513648da0c5f5551f96b329cf56b66f5b303pkanwar#endif
788a44513648da0c5f5551f96b329cf56b66f5b303pkanwar
798a44513648da0c5f5551f96b329cf56b66f5b303pkanwar/* extracted from include/linux/netfilter/nf_conntrack_tcp.h .*/
808a44513648da0c5f5551f96b329cf56b66f5b303pkanwarstruct nf_ct_tcp_flags {
818a44513648da0c5f5551f96b329cf56b66f5b303pkanwar	uint8_t flags;
828a44513648da0c5f5551f96b329cf56b66f5b303pkanwar	uint8_t mask;
838a44513648da0c5f5551f96b329cf56b66f5b303pkanwar};
848a44513648da0c5f5551f96b329cf56b66f5b303pkanwar
858a44513648da0c5f5551f96b329cf56b66f5b303pkanwar#define NFCT_BITMASK_AND	0
868a44513648da0c5f5551f96b329cf56b66f5b303pkanwar#define NFCT_BITMASK_OR		1
878a44513648da0c5f5551f96b329cf56b66f5b303pkanwar
888a44513648da0c5f5551f96b329cf56b66f5b303pkanwar#endif
89