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