LCOV - code coverage report
Current view: top level - include/net - flow.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 1 1 100.0 %
Date: 2017-01-25 Functions: 0 0 -

          Line data    Source code
       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           1 : 
     103             : #endif

Generated by: LCOV version 1.10