1978e27e8f8c2e49d0528c6c4ae3a56627fbe8492Jan Engelhardt/* This file was manually copied from the Linux kernel source 2978e27e8f8c2e49d0528c6c4ae3a56627fbe8492Jan Engelhardt * and manually stripped from __KERNEL__ sections and unused functions. 3978e27e8f8c2e49d0528c6c4ae3a56627fbe8492Jan Engelhardt */ 4978e27e8f8c2e49d0528c6c4ae3a56627fbe8492Jan Engelhardt 540d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy/* 640d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy * Definitions and Declarations for tuple. 740d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy * 840d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy * 16 Dec 2003: Yasuyuki Kozakai @USAGI <yasuyuki.kozakai@toshiba.co.jp> 940d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy * - generalize L3 protocol dependent part. 1040d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy * 1140d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy * Derived from include/linux/netfiter_ipv4/ip_conntrack_tuple.h 1240d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy */ 1340d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy 1440d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy#ifndef _NF_CONNTRACK_TUPLE_H 1540d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy#define _NF_CONNTRACK_TUPLE_H 1640d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy 17978e27e8f8c2e49d0528c6c4ae3a56627fbe8492Jan Engelhardt#include <linux/netfilter/x_tables.h> 1840d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy#include <linux/netfilter/nf_conntrack_tuple_common.h> 1940d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy 2040d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy/* A `tuple' is a structure containing the information to uniquely 2140d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy identify a connection. ie. if two packets have the same tuple, they 2240d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy are in the same connection; if not, they are not. 2340d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy 2440d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy We divide the structure along "manipulatable" and 2540d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy "non-manipulatable" lines, for the benefit of the NAT code. 2640d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy*/ 2740d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy 28978e27e8f8c2e49d0528c6c4ae3a56627fbe8492Jan Engelhardt#define NF_CT_TUPLE_L3SIZE ARRAY_SIZE(((union nf_inet_addr *)NULL)->all) 2940d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy 3040d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy/* The protocol-specific manipulable parts of the tuple: always in 3140d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy network order! */ 3240d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardyunion nf_conntrack_man_proto 3340d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy{ 3440d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy /* Add other protocols here. */ 35978e27e8f8c2e49d0528c6c4ae3a56627fbe8492Jan Engelhardt __be16 all; 3640d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy 3740d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy struct { 3840d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy __be16 port; 3940d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy } tcp; 4040d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy struct { 4140d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy __be16 port; 4240d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy } udp; 4340d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy struct { 4440d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy __be16 id; 4540d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy } icmp; 4640d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy struct { 4740d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy __be16 port; 48978e27e8f8c2e49d0528c6c4ae3a56627fbe8492Jan Engelhardt } dccp; 49978e27e8f8c2e49d0528c6c4ae3a56627fbe8492Jan Engelhardt struct { 50978e27e8f8c2e49d0528c6c4ae3a56627fbe8492Jan Engelhardt __be16 port; 5140d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy } sctp; 5240d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy struct { 5340d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy __be16 key; /* GRE key is 32bit, PPtP only uses 16bit */ 5440d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy } gre; 5540d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy}; 5640d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy 5740d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy/* The manipulable part of the tuple. */ 5840d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardystruct nf_conntrack_man 5940d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy{ 60978e27e8f8c2e49d0528c6c4ae3a56627fbe8492Jan Engelhardt union nf_inet_addr u3; 6140d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy union nf_conntrack_man_proto u; 6240d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy /* Layer 3 protocol */ 6340d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy u_int16_t l3num; 6440d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy}; 6540d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy 6640d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy/* This contains the information to distinguish a connection. */ 6740d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardystruct nf_conntrack_tuple 6840d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy{ 6940d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy struct nf_conntrack_man src; 7040d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy 7140d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy /* These are the parts of the tuple which are fixed. */ 7240d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy struct { 73978e27e8f8c2e49d0528c6c4ae3a56627fbe8492Jan Engelhardt union nf_inet_addr u3; 7440d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy union { 7540d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy /* Add other protocols here. */ 76978e27e8f8c2e49d0528c6c4ae3a56627fbe8492Jan Engelhardt __be16 all; 7740d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy 7840d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy struct { 7940d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy __be16 port; 8040d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy } tcp; 8140d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy struct { 8240d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy __be16 port; 8340d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy } udp; 8440d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy struct { 8540d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy u_int8_t type, code; 8640d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy } icmp; 8740d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy struct { 8840d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy __be16 port; 89978e27e8f8c2e49d0528c6c4ae3a56627fbe8492Jan Engelhardt } dccp; 90978e27e8f8c2e49d0528c6c4ae3a56627fbe8492Jan Engelhardt struct { 91978e27e8f8c2e49d0528c6c4ae3a56627fbe8492Jan Engelhardt __be16 port; 9240d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy } sctp; 9340d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy struct { 9440d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy __be16 key; 9540d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy } gre; 9640d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy } u; 9740d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy 9840d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy /* The protocol. */ 9940d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy u_int8_t protonum; 10040d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy 10140d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy /* The direction (for tuplehash) */ 10240d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy u_int8_t dir; 10340d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy } dst; 10440d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy}; 10540d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy 106978e27e8f8c2e49d0528c6c4ae3a56627fbe8492Jan Engelhardtstruct nf_conntrack_tuple_mask 107978e27e8f8c2e49d0528c6c4ae3a56627fbe8492Jan Engelhardt{ 108978e27e8f8c2e49d0528c6c4ae3a56627fbe8492Jan Engelhardt struct { 109978e27e8f8c2e49d0528c6c4ae3a56627fbe8492Jan Engelhardt union nf_inet_addr u3; 110978e27e8f8c2e49d0528c6c4ae3a56627fbe8492Jan Engelhardt union nf_conntrack_man_proto u; 111978e27e8f8c2e49d0528c6c4ae3a56627fbe8492Jan Engelhardt } src; 112978e27e8f8c2e49d0528c6c4ae3a56627fbe8492Jan Engelhardt}; 113978e27e8f8c2e49d0528c6c4ae3a56627fbe8492Jan Engelhardt 11440d54756cd8a2705e22b36f7aef03bb2c472a10bPatrick McHardy#endif /* _NF_CONNTRACK_TUPLE_H */ 115