home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / net / flow.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  1.9 KB  |  97 lines

  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.  
  17.     union {
  18.         struct {
  19.             __u32            daddr;
  20.             __u32            saddr;
  21.             __u32            fwmark;
  22.             __u8            tos;
  23.             __u8            scope;
  24.         } ip4_u;
  25.         
  26.         struct {
  27.             struct in6_addr        daddr;
  28.             struct in6_addr        saddr;
  29.             __u32            flowlabel;
  30.         } ip6_u;
  31.  
  32.         struct {
  33.             __le16            daddr;
  34.             __le16            saddr;
  35.             __u32            fwmark;
  36.             __u8            scope;
  37.         } dn_u;
  38.     } nl_u;
  39. #define fld_dst        nl_u.dn_u.daddr
  40. #define fld_src        nl_u.dn_u.saddr
  41. #define fld_fwmark    nl_u.dn_u.fwmark
  42. #define fld_scope    nl_u.dn_u.scope
  43. #define fl6_dst        nl_u.ip6_u.daddr
  44. #define fl6_src        nl_u.ip6_u.saddr
  45. #define fl6_flowlabel    nl_u.ip6_u.flowlabel
  46. #define fl4_dst        nl_u.ip4_u.daddr
  47. #define fl4_src        nl_u.ip4_u.saddr
  48. #define fl4_fwmark    nl_u.ip4_u.fwmark
  49. #define fl4_tos        nl_u.ip4_u.tos
  50. #define fl4_scope    nl_u.ip4_u.scope
  51.  
  52.     __u8    proto;
  53.     __u8    flags;
  54. #define FLOWI_FLAG_MULTIPATHOLDROUTE 0x01
  55.     union {
  56.         struct {
  57.             __u16    sport;
  58.             __u16    dport;
  59.         } ports;
  60.  
  61.         struct {
  62.             __u8    type;
  63.             __u8    code;
  64.         } icmpt;
  65.  
  66.         struct {
  67.             __le16    sport;
  68.             __le16    dport;
  69.             __u8    objnum;
  70.             __u8    objnamel; /* Not 16 bits since max val is 16 */
  71.             __u8    objname[16]; /* Not zero terminated */
  72.         } dnports;
  73.  
  74.         __u32        spi;
  75.     } uli_u;
  76. #define fl_ip_sport    uli_u.ports.sport
  77. #define fl_ip_dport    uli_u.ports.dport
  78. #define fl_icmp_type    uli_u.icmpt.type
  79. #define fl_icmp_code    uli_u.icmpt.code
  80. #define fl_ipsec_spi    uli_u.spi
  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 sock;
  88. typedef void (*flow_resolve_t)(struct flowi *key, u32 sk_sid, u16 family, u8 dir,
  89.                    void **objp, atomic_t **obj_refp);
  90.  
  91. extern void *flow_cache_lookup(struct flowi *key, u32 sk_sid, u16 family, u8 dir,
  92.                     flow_resolve_t resolver);
  93. extern void flow_cache_flush(void);
  94. extern atomic_t flow_cache_genid;
  95.  
  96. #endif
  97.