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;
  89typedef int (*flow_resolve_t)(struct net *net, struct flowi *key, u16 family,
  90                              u8 dir, void **objp, atomic_t **obj_refp);
  91
  92extern void *flow_cache_lookup(struct net *net, struct flowi *key, u16 family,
  93                               u8 dir, flow_resolve_t resolver);
  94extern void flow_cache_flush(void);
  95extern atomic_t flow_cache_genid;
  96
  97static inline int flow_cache_uli_match(struct flowi *fl1, struct flowi *fl2)
  98{
  99        return (fl1->proto == fl2->proto &&
 100                !memcmp(&fl1->uli_u, &fl2->uli_u, sizeof(fl1->uli_u)));
 101}
 102
 103#endif
 104