cregit-Linux how code gets into the kernel

Release 4.12 include/net/netfilter/nf_conntrack_tuple.h

/*
 * Definitions and Declarations for tuple.
 *
 * 16 Dec 2003: Yasuyuki Kozakai @USAGI <yasuyuki.kozakai@toshiba.co.jp>
 *      - generalize L3 protocol dependent part.
 *
 * Derived from include/linux/netfiter_ipv4/ip_conntrack_tuple.h
 */

#ifndef _NF_CONNTRACK_TUPLE_H

#define _NF_CONNTRACK_TUPLE_H

#include <linux/netfilter/x_tables.h>
#include <linux/netfilter/nf_conntrack_tuple_common.h>
#include <linux/list_nulls.h>

/* A `tuple' is a structure containing the information to uniquely
  identify a connection.  ie. if two packets have the same tuple, they
  are in the same connection; if not, they are not.

  We divide the structure along "manipulatable" and
  "non-manipulatable" lines, for the benefit of the NAT code.
*/


#define NF_CT_TUPLE_L3SIZE	ARRAY_SIZE(((union nf_inet_addr *)NULL)->all)

/* The manipulable part of the tuple. */

struct nf_conntrack_man {
	
union nf_inet_addr u3;
	
union nf_conntrack_man_proto u;
	/* Layer 3 protocol */
	
u_int16_t l3num;
};

/* This contains the information to distinguish a connection. */

struct nf_conntrack_tuple {
	
struct nf_conntrack_man src;

	/* These are the parts of the tuple which are fixed. */
	struct {
		
union nf_inet_addr u3;
		union {
			/* Add other protocols here. */
			
__be16 all;

			struct {
				
__be16 port;
			
} tcp;
			struct {
				
__be16 port;
			
} udp;
			struct {
				

u_int8_t type, code;
			
} icmp;
			struct {
				
__be16 port;
			
} dccp;
			struct {
				
__be16 port;
			
} sctp;
			struct {
				
__be16 key;
			
} gre;
		
} u;

		/* The protocol. */
		
u_int8_t protonum;

		/* The direction (for tuplehash) */
		
u_int8_t dir;
	
} dst;
};


struct nf_conntrack_tuple_mask {
	struct {
		
union nf_inet_addr u3;
		
union nf_conntrack_man_proto u;
	
} src;
};


static inline void nf_ct_dump_tuple_ip(const struct nf_conntrack_tuple *t) { #ifdef DEBUG printk("tuple %p: %u %pI4:%hu -> %pI4:%hu\n", t, t->dst.protonum, &t->src.u3.ip, ntohs(t->src.u.all), &t->dst.u3.ip, ntohs(t->dst.u.all)); #endif }

Contributors

PersonTokensPropCommitsCommitProp
Patrick McHardy6895.77%150.00%
Harvey Harrison34.23%150.00%
Total71100.00%2100.00%


static inline void nf_ct_dump_tuple_ipv6(const struct nf_conntrack_tuple *t) { #ifdef DEBUG printk("tuple %p: %u %pI6 %hu -> %pI6 %hu\n", t, t->dst.protonum, t->src.u3.all, ntohs(t->src.u.all), t->dst.u3.all, ntohs(t->dst.u.all)); #endif }

Contributors

PersonTokensPropCommitsCommitProp
Patrick McHardy6898.55%150.00%
Harvey Harrison11.45%150.00%
Total69100.00%2100.00%


static inline void nf_ct_dump_tuple(const struct nf_conntrack_tuple *t) { switch (t->src.l3num) { case AF_INET: nf_ct_dump_tuple_ip(t); break; case AF_INET6: nf_ct_dump_tuple_ipv6(t); break; } }

Contributors

PersonTokensPropCommitsCommitProp
Patrick McHardy41100.00%1100.00%
Total41100.00%1100.00%

/* If we're the first tuple, it's the original dir. */ #define NF_CT_DIRECTION(h) \ ((enum ip_conntrack_dir)(h)->tuple.dst.dir) /* Connections have two entries in the hash table: one for each way */ struct nf_conntrack_tuple_hash { struct hlist_nulls_node hnnode; struct nf_conntrack_tuple tuple; };
static inline bool __nf_ct_tuple_src_equal(const struct nf_conntrack_tuple *t1, const struct nf_conntrack_tuple *t2) { return (nf_inet_addr_cmp(&t1->src.u3, &t2->src.u3) && t1->src.u.all == t2->src.u.all && t1->src.l3num == t2->src.l3num); }

Contributors

PersonTokensPropCommitsCommitProp
Yasuyuki Kozakai5988.06%125.00%
Patrick McHardy710.45%250.00%
Jan Engelhardt11.49%125.00%
Total67100.00%4100.00%


static inline bool __nf_ct_tuple_dst_equal(const struct nf_conntrack_tuple *t1, const struct nf_conntrack_tuple *t2) { return (nf_inet_addr_cmp(&t1->dst.u3, &t2->dst.u3) && t1->dst.u.all == t2->dst.u.all && t1->dst.protonum == t2->dst.protonum); }

Contributors

PersonTokensPropCommitsCommitProp
Yasuyuki Kozakai5988.06%125.00%
Patrick McHardy710.45%250.00%
Jan Engelhardt11.49%125.00%
Total67100.00%4100.00%


static inline bool nf_ct_tuple_equal(const struct nf_conntrack_tuple *t1, const struct nf_conntrack_tuple *t2) { return __nf_ct_tuple_src_equal(t1, t2) && __nf_ct_tuple_dst_equal(t1, t2); }

Contributors

PersonTokensPropCommitsCommitProp
Yasuyuki Kozakai3191.18%133.33%
Patrick McHardy25.88%133.33%
Jan Engelhardt12.94%133.33%
Total34100.00%3100.00%


static inline bool nf_ct_tuple_mask_equal(const struct nf_conntrack_tuple_mask *m1, const struct nf_conntrack_tuple_mask *m2) { return (nf_inet_addr_cmp(&m1->src.u3, &m2->src.u3) && m1->src.u.all == m2->src.u.all); }

Contributors

PersonTokensPropCommitsCommitProp
Patrick McHardy4072.73%250.00%
Yasuyuki Kozakai1425.45%125.00%
Jan Engelhardt11.82%125.00%
Total55100.00%4100.00%


static inline bool nf_ct_tuple_src_mask_cmp(const struct nf_conntrack_tuple *t1, const struct nf_conntrack_tuple *t2, const struct nf_conntrack_tuple_mask *mask) { int count; for (count = 0; count < NF_CT_TUPLE_L3SIZE; count++) { if ((t1->src.u3.all[count] ^ t2->src.u3.all[count]) & mask->src.u3.all[count]) return false; } if ((t1->src.u.all ^ t2->src.u.all) & mask->src.u.all) return false; if (t1->src.l3num != t2->src.l3num || t1->dst.protonum != t2->dst.protonum) return false; return true; }

Contributors

PersonTokensPropCommitsCommitProp
Yasuyuki Kozakai9766.44%133.33%
Patrick McHardy4430.14%133.33%
Jan Engelhardt53.42%133.33%
Total146100.00%3100.00%


static inline bool nf_ct_tuple_mask_cmp(const struct nf_conntrack_tuple *t, const struct nf_conntrack_tuple *tuple, const struct nf_conntrack_tuple_mask *mask) { return nf_ct_tuple_src_mask_cmp(t, tuple, mask) && __nf_ct_tuple_dst_equal(t, tuple); }

Contributors

PersonTokensPropCommitsCommitProp
Patrick McHardy4197.62%266.67%
Jan Engelhardt12.38%133.33%
Total42100.00%3100.00%

#endif /* _NF_CONNTRACK_TUPLE_H */

Overall Contributors

PersonTokensPropCommitsCommitProp
Yasuyuki Kozakai37949.74%16.67%
Patrick McHardy35646.72%853.33%
Jan Engelhardt172.23%213.33%
Eric Dumazet50.66%16.67%
Harvey Harrison40.52%213.33%
Al Viro10.13%16.67%
Total762100.00%15100.00%
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.