linux/include/net/flow.h
<<
>>
Prefs
   1/*
   2 *
   3 *      Generic internet FLOW.
   4 *
   5 */
   6
   7#ifndef _NET_FLOW_H
   8#define _NET_FLOW_H
   9
  10#include <linux/in6.h>
  11#include <asm/atomic.h>
  12
  13struct flowi {
  14        int     oif;
  15        int     iif;
  16        __u32   mark;
  17
  18        union {
  19                struct {
  20                        __be32                  daddr;
  21                        __be32                  saddr;
  22                        __u8                    tos;
  23                        __u8                    scope;
  24                } ip4_u;
  25                
  26                struct {
  27                        struct in6_addr         daddr;
  28                        struct in6_addr         saddr;
  29                        __be32                  flowlabel;
  30                } ip6_u;
  31
  32                struct {
  33                        __le16                  daddr;
  34                        __le16                  saddr;
  35                        __u8                    scope;
  36                } dn_u;
  37        } nl_u;
  38#define fld_dst         nl_u.dn_u.daddr
  39#define fld_src         nl_u.dn_u.saddr
  40#define fld_scope       nl_u.dn_u.scope
  41#define fl6_dst         nl_u.ip6_u.daddr
  42#define fl6_src         nl_u.ip6_u.saddr
  43#define fl6_flowlabel   nl_u.ip6_u.flowlabel
  44#define fl4_dst         nl_u.ip4_u.daddr
  45#define fl4_src         nl_u.ip4_u.saddr
  46#define fl4_tos         nl_u.ip4_u.tos
  47#define fl4_scope       nl_u.ip4_u.scope
  48
  49        __u8    proto;
  50        __u8    flags;
  51#define FLOWI_FLAG_ANYSRC 0x01
  52        union {
  53                struct {
  54                        __be16  sport;
  55                        __be16  dport;
  56                } ports;
  57
  58                struct {
  59                        __u8    type;
  60                        __u8    code;
  61                } icmpt;
  62
  63                struct {
  64                        __le16  sport;
  65                        __le16  dport;
  66                } dnports;
  67
  68                __be32          spi;
  69
  70                struct {
  71                        __u8    type;
  72                } mht;
  73        } uli_u;
  74#define fl_ip_sport     uli_u.ports.sport
  75#define fl_ip_dport     uli_u.ports.dport
  76#define fl_icmp_type    uli_u.icmpt.type
  77#define fl_icmp_code    uli_u.icmpt.code
  78#define fl_ipsec_spi    uli_u.spi
  79#define fl_mh_type      uli_u.mht.type
  80        __u32           secid;  /* used by xfrm; see secid.txt */
  81} __attribute__((__aligned__(BITS_PER_LONG/8)));
  82
  83#define FLOW_DIR_IN     0
  84#define FLOW_DIR_OUT    1
  85#define FLOW_DIR_FWD    2
  86
  87struct net;
  88struct sock;
  89struct flow_cache_ops;
  90
  91struct flow_cache_object {
  92        const struct flow_cache_ops *ops;
  93};
  94
  95struct flow_cache_ops {
  96        struct flow_cache_object *(*get)(struct flow_cache_object *);
  97        int (*check)(struct flow_cache_object *);
  98        void (*delete)(struct flow_cache_object *);
  99};
 100
 101typedef struct flow_cache_object *(*flow_resolve_t)(
 102                struct net *net, struct flowi *key, u16 family,
 103                u8 dir, struct flow_cache_object *oldobj, void *ctx);
 104
 105extern struct flow_cache_object *flow_cache_lookup(
 106                struct net *net, struct flowi *key, u16 family,
 107                u8 dir, flow_resolve_t resolver, void *ctx);
 108
 109extern void flow_cache_flush(void);
 110extern atomic_t flow_cache_genid;
 111
 112static inline int flow_cache_uli_match(struct flowi *fl1, struct flowi *fl2)
 113{
 114        return (fl1->proto == fl2->proto &&
 115                !memcmp(&fl1->uli_u, &fl2->uli_u, sizeof(fl1->uli_u)));
 116}
 117
 118#endif
 119
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.