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