summaryrefslogtreecommitdiffstats
path: root/include/net/flow.h
diff options
context:
space:
mode:
authorTimothy Pearson <tpearson@raptorengineering.com>2017-08-23 14:45:25 -0500
committerTimothy Pearson <tpearson@raptorengineering.com>2017-08-23 14:45:25 -0500
commitfcbb27b0ec6dcbc5a5108cb8fb19eae64593d204 (patch)
tree22962a4387943edc841c72a4e636a068c66d58fd /include/net/flow.h
downloadast2050-linux-kernel-fcbb27b0ec6dcbc5a5108cb8fb19eae64593d204.zip
ast2050-linux-kernel-fcbb27b0ec6dcbc5a5108cb8fb19eae64593d204.tar.gz
Initial import of modified Linux 2.6.28 tree
Original upstream URL: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git | branch linux-2.6.28.y
Diffstat (limited to 'include/net/flow.h')
-rw-r--r--include/net/flow.h102
1 files changed, 102 insertions, 0 deletions
diff --git a/include/net/flow.h b/include/net/flow.h
new file mode 100644
index 0000000..b45a5e4
--- /dev/null
+++ b/include/net/flow.h
@@ -0,0 +1,102 @@
+/*
+ *
+ * Generic internet FLOW.
+ *
+ */
+
+#ifndef _NET_FLOW_H
+#define _NET_FLOW_H
+
+#include <linux/in6.h>
+#include <asm/atomic.h>
+
+struct flowi {
+ int oif;
+ int iif;
+ __u32 mark;
+
+ union {
+ struct {
+ __be32 daddr;
+ __be32 saddr;
+ __u8 tos;
+ __u8 scope;
+ } ip4_u;
+
+ struct {
+ struct in6_addr daddr;
+ struct in6_addr saddr;
+ __be32 flowlabel;
+ } ip6_u;
+
+ struct {
+ __le16 daddr;
+ __le16 saddr;
+ __u8 scope;
+ } dn_u;
+ } nl_u;
+#define fld_dst nl_u.dn_u.daddr
+#define fld_src nl_u.dn_u.saddr
+#define fld_scope nl_u.dn_u.scope
+#define fl6_dst nl_u.ip6_u.daddr
+#define fl6_src nl_u.ip6_u.saddr
+#define fl6_flowlabel nl_u.ip6_u.flowlabel
+#define fl4_dst nl_u.ip4_u.daddr
+#define fl4_src nl_u.ip4_u.saddr
+#define fl4_tos nl_u.ip4_u.tos
+#define fl4_scope nl_u.ip4_u.scope
+
+ __u8 proto;
+ __u8 flags;
+#define FLOWI_FLAG_ANYSRC 0x01
+ union {
+ struct {
+ __be16 sport;
+ __be16 dport;
+ } ports;
+
+ struct {
+ __u8 type;
+ __u8 code;
+ } icmpt;
+
+ struct {
+ __le16 sport;
+ __le16 dport;
+ } dnports;
+
+ __be32 spi;
+
+ struct {
+ __u8 type;
+ } mht;
+ } uli_u;
+#define fl_ip_sport uli_u.ports.sport
+#define fl_ip_dport uli_u.ports.dport
+#define fl_icmp_type uli_u.icmpt.type
+#define fl_icmp_code uli_u.icmpt.code
+#define fl_ipsec_spi uli_u.spi
+#define fl_mh_type uli_u.mht.type
+ __u32 secid; /* used by xfrm; see secid.txt */
+} __attribute__((__aligned__(BITS_PER_LONG/8)));
+
+#define FLOW_DIR_IN 0
+#define FLOW_DIR_OUT 1
+#define FLOW_DIR_FWD 2
+
+struct sock;
+typedef int (*flow_resolve_t)(struct flowi *key, u16 family, u8 dir,
+ void **objp, atomic_t **obj_refp);
+
+extern void *flow_cache_lookup(struct flowi *key, u16 family, u8 dir,
+ flow_resolve_t resolver);
+extern void flow_cache_flush(void);
+extern atomic_t flow_cache_genid;
+
+static inline int flow_cache_uli_match(struct flowi *fl1, struct flowi *fl2)
+{
+ return (fl1->proto == fl2->proto &&
+ !memcmp(&fl1->uli_u, &fl2->uli_u, sizeof(fl1->uli_u)));
+}
+
+#endif
OpenPOWER on IntegriCloud