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        union {
  51                struct {
  52                        __be16  sport;
  53                        __be16  dport;
  54                } ports;
  55
  56                struct {
  57                        __u8    type;
  58                        __u8    code;
  59                } icmpt;
  60
  61                struct {
  62                        __le16  sport;
  63                        __le16  dport;
  64                } dnports;
  65
  66                __be32          spi;
  67
  68                struct {
  69                        __u8    type;
  70                } mht;
  71        } uli_u;
  72#define fl_ip_sport     uli_u.ports.sport
  73#define fl_ip_dport     uli_u.ports.dport
  74#define fl_icmp_type    uli_u.icmpt.type
  75#define fl_icmp_code    uli_u.icmpt.code
  76#define fl_ipsec_spi    uli_u.spi
  77#define fl_mh_type      uli_u.mht.type
  78        __u32           secid;  /* used by xfrm; see secid.txt */
  79} __attribute__((__aligned__(BITS_PER_LONG/8)));
  80
  81#define FLOW_DIR_IN     0
  82#define FLOW_DIR_OUT    1
  83#define FLOW_DIR_FWD    2
  84
  85struct sock;
  86typedef int (*flow_resolve_t)(struct flowi *key, u16 family, u8 dir,
  87                               void **objp, atomic_t **obj_refp);
  88
  89extern void *flow_cache_lookup(struct flowi *key, u16 family, u8 dir,
  90                               flow_resolve_t resolver);
  91extern void flow_cache_flush(void);
  92extern atomic_t flow_cache_genid;
  93
  94static inline int flow_cache_uli_match(struct flowi *fl1, struct flowi *fl2)
  95{
  96        return (fl1->proto == fl2->proto &&
  97                !memcmp(&fl1->uli_u, &fl2->uli_u, sizeof(fl1->uli_u)));
  98}
  99
 100#endif
 101
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.