Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]
  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 
 13 struct 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 
 87 struct net;
 88 struct sock;
 89 typedef int (*flow_resolve_t)(struct net *net, struct flowi *key, u16 family,
 90                               u8 dir, void **objp, atomic_t **obj_refp);
 91 
 92 extern void *flow_cache_lookup(struct net *net, struct flowi *key, u16 family,
 93                                u8 dir, flow_resolve_t resolver);
 94 extern void flow_cache_flush(void);
 95 extern atomic_t flow_cache_genid;
 96 
 97 static 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 
  This page was automatically generated by the LXR engine.