linux/net/sched/cls_flow.c
<<
>>
Prefs
   1/*
   2 * net/sched/cls_flow.c         Generic flow classifier
   3 *
   4 * Copyright (c) 2007, 2008 Patrick McHardy <kaber@trash.net>
   5 *
   6 * This program is free software; you can redistribute it and/or
   7 * modify it under the terms of the GNU General Public License
   8 * as published by the Free Software Foundation; either version 2
   9 * of the License, or (at your option) any later version.
  10 */
  11
  12#include <linux/kernel.h>
  13#include <linux/init.h>
  14#include <linux/list.h>
  15#include <linux/jhash.h>
  16#include <linux/random.h>
  17#include <linux/pkt_cls.h>
  18#include <linux/skbuff.h>
  19#include <linux/in.h>
  20#include <linux/ip.h>
  21#include <linux/ipv6.h>
  22#include <linux/if_vlan.h>
  23#include <linux/slab.h>
  24#include <linux/module.h>
  25
  26#include <net/pkt_cls.h>
  27#include <net/ip.h>
  28#include <net/route.h>
  29#include <net/flow_keys.h>
  30
  31#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
  32#include <net/netfilter/nf_conntrack.h>
  33#endif
  34
  35struct flow_head {
  36        struct list_head        filters;
  37};
  38
  39struct flow_filter {
  40        struct list_head        list;
  41        struct tcf_exts         exts;
  42        struct tcf_ematch_tree  ematches;
  43        struct timer_list       perturb_timer;
  44        u32                     perturb_period;
  45        u32                     handle;
  46
  47        u32                     nkeys;
  48        u32                     keymask;
  49        u32                     mode;
  50        u32                     mask;
  51        u32                     xor;
  52        u32                     rshift;
  53        u32                     addend;
  54        u32                     divisor;
  55        u32                     baseclass;
  56        u32                     hashrnd;
  57};
  58
  59static const struct tcf_ext_map flow_ext_map = {
  60        .action = TCA_FLOW_ACT,
  61        .police = TCA_FLOW_POLICE,
  62};
  63
  64static inline u32 addr_fold(void *addr)
  65{
  66        unsigned long a = (unsigned long)addr;
  67
  68        return (a & 0xFFFFFFFF) ^ (BITS_PER_LONG > 32 ? a >> 32 : 0);
  69}
  70
  71static u32 flow_get_src(const struct sk_buff *skb, const struct flow_keys *flow)
  72{
  73        if (flow->src)
  74                return ntohl(flow->src);
  75        return addr_fold(skb->sk);
  76}
  77
  78static u32 flow_get_dst(const struct sk_buff *skb, const struct flow_keys *flow)
  79{
  80        if (flow->dst)
  81                return ntohl(flow->dst);
  82        return addr_fold(skb_dst(skb)) ^ (__force u16)skb->protocol;
  83}
  84
  85static u32 flow_get_proto(const struct sk_buff *skb, const struct flow_keys *flow)
  86{
  87        return flow->ip_proto;
  88}
  89
  90static u32 flow_get_proto_src(const struct sk_buff *skb, const struct flow_keys *flow)
  91{
  92        if (flow->ports)
  93                return ntohs(flow->port16[0]);
  94
  95        return addr_fold(skb->sk);
  96}
  97
  98static u32 flow_get_proto_dst(const struct sk_buff *skb, const struct flow_keys *flow)
  99{
 100        if (flow->ports)
 101                return ntohs(flow->port16[1]);
 102
 103        return addr_fold(skb_dst(skb)) ^ (__force u16)skb->protocol;
 104}
 105
 106static u32 flow_get_iif(const struct sk_buff *skb)
 107{
 108        return skb->skb_iif;
 109}
 110
 111static u32 flow_get_priority(const struct sk_buff *skb)
 112{
 113        return skb->priority;
 114}
 115
 116static u32 flow_get_mark(const struct sk_buff *skb)
 117{
 118        return skb->mark;
 119}
 120
 121static u32 flow_get_nfct(const struct sk_buff *skb)
 122{
 123#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
 124        return addr_fold(skb->nfct);
 125#else
 126        return 0;
 127#endif
 128}
 129
 130#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
 131#define CTTUPLE(skb, member)                                            \
 132({                                                                      \
 133        enum ip_conntrack_info ctinfo;                                  \
 134        const struct nf_conn *ct = nf_ct_get(skb, &ctinfo);             \
 135        if (ct == NULL)                                                 \
 136                goto fallback;                                          \
 137        ct->tuplehash[CTINFO2DIR(ctinfo)].tuple.member;                 \
 138})
 139#else
 140#define CTTUPLE(skb, member)                                            \
 141({                                                                      \
 142        goto fallback;                                                  \
 143        0;                                                              \
 144})
 145#endif
 146
 147static u32 flow_get_nfct_src(const struct sk_buff *skb, const struct flow_keys *flow)
 148{
 149        switch (skb->protocol) {
 150        case htons(ETH_P_IP):
 151                return ntohl(CTTUPLE(skb, src.u3.ip));
 152        case htons(ETH_P_IPV6):
 153                return CTTUPLE(skb, src.u3.ip));
ef6de=ip=ark;
ef6de=a href6" class52class="sref">ef6de=a href  147stat740ame="L132"> 132({              32" class="sref">u32         sref">ef/a>        switc6/cls_flow.c_NF_CONNTRACK" class="srepls_fl;ip_proto;
 *.ip));
 148{
   5181  59<1/a>st1tic const struct tcf_ext_map flow_get_nfct_src(const struct sk_buff *skb, const struct flow_keys *flow)
 148{
actio1n = polic1e = protocol) {
 150        case   61316V6" class="sref">ETH_P_IPV6):
 151                return   64<1/a>st16/a>(skb, src.u3.ip));
  82       ref="net/sched/cls_flow.c#L152" id="L152" class="line" name="L152"> 152        case inline<1/a> ETH_P_IPV6):
 153                return   661 165a>(skb, src.u3.ip));
  82       ref="net/sched/cls_flow.c#L152" id="L152" class="line" ="sref">ef6de=a href a = (unsigned lon1g)  68<1/a>  1     rflow.c_NF_CONNTRACK" class="srepls_fl;ip_protosref">a & 0xFFFFFFFF) ^ (1 *.ip));
 148{
  701
1a href="net/sched/cls_flow.c#L71" id="L171" class1="line" name="L71">  71<1/a>st1tic u132 flow_get_src(const struct ss="srass="sref">sk_buff *skb, const struct flow_keys *flow)
 148{
  731 1      if (flow1->priority;
port16[1]);
u3.ip));
ef6de=ip=ark;
        case ntohl(ip_protoclass="sr1ef">addr_fold(skb->sk_buff *.ip));
 148{
  771
1a href="net/sched/cls_flow.c#L78" id="L178" class1="line" name="L78">  78<1/a>st1tic u132 flow_get_dst(const struct ss="srass="sref">sk_buff *skb, const struct flow_keys *flow)
  99{
u1370" clas1s="line" name="L80">  801 1      if (flow1->dsef">priority;
port16[1]);
u3.ip));
  82       ref="net/sched/clt struct ;
ntohl(ip_protoclass="sr1ef">addr_fold(skb_dstsk_buff *.ip));
 148{
  841
1a href="net/sched/cls_flow.c#L85" id="L185" class1="line" name="L85">  85<1/a>st1tic u132 flow_get_proto(const struct   36skb, const struct flow_keys *u1L87" clas1s="line" name="L87">  871 1      return f1low->CONine" naIP_ROUTE_CLASSID"+code=u3" classne" naIP_ROUTE_CLASSIDc u13.h" class=="fref">linux/skbuff.h__force  href="+code=u32" class="sref">u1370" clas1="line" name="L90">  90<1/a>st18col" class="s_dst" class="sref">skb_dstf="+code=__force" class="sref">__force CTINFO2DInst sie" name="L36">  tnst sie" cl <flow1 href="+code=flow_get_pr1oto_s1c" cla
  921 191=skb_dst" class="srif
flow1->ntohs(  95<1/a>  19sref">u32 skkuie" name="L36">  36skb, const struct flow_keys *u1class="sr1ef">addr_fold(  971
196"+code=BITS_a>)                f="ef="net/sched/cls_flow.c#L150" id="L150" ce="L96">  96}
  96}
  96}
u1c"sref">f1="line" name="L98">  98<1/a>st197ol" class="s_dst" class="sref">skb_dstf="ef="net/sched/cls_flow.c#L150" id="L150" ce="L96">  96}
  3suie" cl <linux/in.h>
st19 href="net/sched/cls_flow.c#L71" id="L2"sref">fl2w->u2tohs" cla2s="sref">ntohs(flow_get_src(const struct skkgie" name="L36">  36skb, const struct flow_keys *u2="L103" c2ass="line" name="L103"> 203addr_fold()                f="ef="net/sched/cls_flow.c#L150" id="L150" ce="L96">  96}
  96}
  96}
u2d="L105" 2lass="line" name="L105">2105flow->  96}
  3sgie" cl < 206if
2108u2s="sref">2kb->flow_get_dst(const struct svlan_tag" name="L36">  36skb, const struct flow_keys *u2=9"sref">2kef">linux/in.h>
2110 211maskprss="sref">mask__force   tag" clh+code=ntohf="+code=CTTUPLE"237" c2>u32 2a href="+code=flow_get_p2iorit2" clascode=ntohf="+code=CTTUPLE"237" c2>"L103" c2lass="line" name="L113">2113ports)
  vlan_"sretag" cla/a>.ip/cls_flow.c#L135" idtag" name="L36">  tag" clh < 0f="net/sched/cls_flow.c#L100" ">u2s="sref">2kb->2115skb->  tag" cl  32 ?                VLAN_VID_MASed( 2162118flow_get_nfct_src(const struct ((skb, const struct flow_keys *u2s="sref">2kb->2120skb->(__force  2212123#if flow_get_nfct_src(const struct skb, const struct flow_keys *flow)
  99{
u2">defined2/a>(addr_fold(protocol) {
 * 122e=skb" class=ef">ETH_P_IPV6): 62 *ip_prot2s_flow.c#2127" id="L127" class="li2e" na22                     ="line" name="L88ref="="ne clask_buff *.ip));
 148{
 227=skb" class=ef">ETH_P_IPV6): 62 62ip_prot2s="sref">2lass="line" name="L129">2129 *.ip));
 148{
 230ETH_P_IPV6): 62 62ip_prot2">defined2/a>(sk_buff *.ip));
 148{
CTT2PLE(ETH_P_IPV6): 62 *ip_prot2"="L123" 2                       \2skb->sk_buff *.ip));
 148{
ip_conntrack_2nfo ETH_P_IPV6): 62 62ip_prot2" class="2s="sref">nf_conn *flow->sk_buff *.ip));
 148{
ct == ETH_P_IPV6): 62 62ip_prot2"_flow.c#2ss="sref">fallback; 2     2                      flow-> * ct-&2t;ETH_P_IPV6): 62 62ip_prot2"="sref">2class="line" name="L139"2 139<238                    ="line" name="L88ref="="ne class="sref">sk_buff * "L130" c20" class="line" name="L120"> 1239=skb" class=ef">ETH_P_IPV6): 62(ip_prot2sref">CTT2PLE(sk_buff * ETH_P_IPV6): 62 62ip_prot2s="L123" 2">fallback;         2     24et/sched/cls_flow.c#L"sref">skb-> ETH_P_IPV6): 62 *ip_prot2s class="2class="line" name="L145"2 145<24e=flow" class="sref">flow->sk_buff *.ip));
 148{
 24e=skb" class=ef">ETH_P_IPV6): 62 62ip_prot2s_flow.c#2ass="line" name="L147"> 247->sk_buff *.ip));
 148{
-&2a href="+code=flow_get_n2ct_sr247=skb" class=ef">ETH_P_IPV6): 62 *ip_prot2s="sref">2lass="line" name="L149">2149sk_buff *.ip));
 148{
->ETH_P_IPV6): 62 62ip_prot2s="sref">2tons(sk_buff *.ip));
 148{
ntohl(ETH_P_IPV6): 62ip_prot2s="L123" 2tons(skb->  36 2TTUPL25 ETH_P_IPV6): 62ip_prot2s class="2 name="L147"> 147sta2740am25e=flow" class="sref">flow->  36 ef/a>      2 swit25e=skb" class=ef">ETH_P_IPV6): 62ip_prot2s_flow.c#2ref="net/sched/cls_flow.2#L88"25                     ="line" name="L88ref="="ne claskkgie" name="L36">  36 -&2ss="line" name="L58">  528257=skb" class=ef">ETH_P_IPV6): 62ip_prot2s="sref">2="line" name="L59">  59<2/a>st258                    ="line" name="L88ref="="ne clasvlan_tag" name="L36">  36 tcf_ext_map ETH_P_IPV6): 62ip_prot2ef">actio2n = (( polic2e = ip_prot2e="L123" 2ss="line" name="L63">  62326et/sched/cls_flow.c#Lorce   64<2/a>st26/a>(inline<2/a>   662 26tatic="net/sched/cls_flow.c#L78" id="L2lass="sre2f">a = (unsigned lon2g)  68<2/a>  2     ref">skb, ): 62 *a & 0xFFFFFFFF) ^ (2): 62 62  702
26col" class="s_dst" cl          (1 << TH_P_IPV6): 62 62  71<2/a>st270                              (1 << TH_P_IPV6): 62 *polic2 href="+code=flow_get_sr2c" cl27e=CTTUPLE" class="sre          (1 << TH_P_IPV6): 62 62  732 27et/sched/cls_flow.c#L          (1 << TH_P_IPV6): 62 *( 62inline<2="sref">ntohl(          (1 << TH_P_IPV6): 62 *addr_fold(): 62 62 href="+code=u32" class="sref">u2L77" clas2s="line" name="L77">  772
27tatic   78<2/a>st27 class="srefinkb, const struff" nst sif">sk_buff *skb, const struct flow_keys *flow)
sk_buff *sk class="sref">flow_ketame="L152"> 152   , aflow)
 *flow_keres_buff *  802 2      if (flow2->dss="sref">flow)
  36flow_keheae" name="L36">  heae clas        \
 152   .c#L150" id="L150" croot_buff *   f
ntohl(dss="sref">flow)
flow_kebuff *   f
addr_fold(flow_ke_src(const struct   96}keymae=>   f
  842
283=skb_dst" cl="sref">flow_ke_src(const struct   nst sie" clf
  85<2/a>st28e=flow" classunsignedfinkb, const strf_ct_get" class="ip));
 *NULL, const strsched/cls_flow.cre=flf
  872 28tatic f2low->tuplehash[ *  *   a>/cls_flow.c#L135" idheae" name="L36">  heae cla.c#L150" id="L150" cfi t/st/sched/cls_flow.i t/stip));
 *alinux/skbuff.h<2a" cl288                    ="sref">flow_ke_src(const struct ctinfo 62(  90<2/a>st28col" class="s_dst" cls="sref">flow)
flow)
flow2 href="+code=flow_get_pr2oto_s29ic u2L92" clas2s="line" name="L92">  922 29e=CTTUPLE" class="sreport!">flow)
.ip/cls_flow.c#L135" idbuff *   .c#L150" id="L150" cematcaes_buff *));
flow2->ntohs(  95<2/a>  29e=flow" class="sref">ref="+code=sk_bkeymae="L96">  96}keymae=>   s        \
 *   .c#L150" id="L150" ckeymae="L96">  96}keymae=>   f
addr_fold()
  96}keymae=>   s 32 ?                 62  972
29                     ="sref">ref="+code=sk_bs="s.c#L9dissek_buff *.ip/cls_flow.c#L135" idbref="net/sched/cls_flow.c#L99" id="L" <f2="line" name="L98">  98<2/a>st29ic u2c.h" clas2 href="+code=flow_get_pr2oto_d298                    forrts)
linux/in.h>
2aa>st29col" class="s_dst" cl        ));
 *port16[1]);
  96}keymae=>   ) - 1 <fl3w->  96}keymae=>   s 32 ?= ~(1 << TH_P_IPV6):key/a> *fl3w="line" name="L92">  923f="+c30e=CTTUPLE" class="sre        ref="+code=sk_bkeyt/sched/cls_flow9" id="Lsref">ctinfof_ct_get" class="ip.ipTH_P_IPV6):key/a> * 303addr_fold(3105ports)
 *   .c#L150" id="L150" cm0" uff * 306(  nst sie" cls        \
((const strj>(port16[1]);
 *   .c#L150" id="L150" cn"net/sched/cls_flown9" id="La>));
 *   .c#L150" id="L150" c>(  h(  973f" cl30                     efin if (3108  nst sie" cls        \
3kb->  nst sie" cls  uple.  nst sie" cls 32 ?                buff *   .c#L150" id="L150" cmae="L96">  96}mae=>   ) ^                buff *   .c#L150" id="L150" cxosched/cls_flow.cxos>   f
3kef">linux/in.h>
3110  nst sie" cls  uple.  nst sie" cls #L1 #L1                buff *   .c#L150" id="L150" crshift_buff *   ) +                buff *   .c#L150" id="L150" caddene" name="L36">  addene>   f
 311"L103" c3lass="line" name="L113">3113)
 *   .c#L150" id="L150" cdivisosched/cls_flow.cdivisos6" c" 3kb->  nst sie" cls%        \
 *   .c#L150" id="L150" cdivisosched/cls_flow.cdivisos6" cf
3115u3="L116" c3ass="line" name="L116"> 316(flow_keres_buff *  nst sa>(flow_keres_buff *  nst sie" cls        \
  TC_H_MAKE" claorce  *   .c#L150" id="L150" cbaseuff  baseuff));
 *   .c#L150" id="L150" cbaseuff  baseuff  nst sie" cl" <3118u3s="sref">3kb->flow_kesched/cls_flow.cre=fls        \
sk_buff *tcfsextssexef" cla/a>.ip/cls_flow.c#L135" idbuff *   .c#L150" id="L150" cexts_buff * *3lass="line" name="L120">3120)
u3="L121" c3ass="line" name="L121"> 3213123defined3/a>(pri-1 <addr_fold( 132e=skb"net/sched/cls_flow.c#L78" id="L3"u32 3127" id="L127" class="li3e" na32     s="srefvoid       \
pb"srof_ct_get" class=blf" per">pb"srof" claunsignedflong       \
  arg6" c"  327=skbif (3lass="line" name="L129">3129flow)
flow_kebuff *   s  us="sref">flow)
  arg6" c <3ass="line" name="L130"> 330defined3/a>(mask * *   .c#L150" id="L150" c>(  h(CTT3PLE()
 *   .c#L150" id="L150" cper">pb perioe" name="L36">  per">pb perioe6" c"  *   .c#L150" id="L150" cper">pb tim/sched/cls_flow.cper">pb tim/sd="La>));
 *pb perioe" name="L36">  per">pb perioe6" c" <defined3ass="sref">ip_conntrack_3nfonf_conn *u3ref">ct == f" class="sref">flow)
 * *ctinfoTCA_ 62(fallback; 3     3              sref">ctinfoTCA_ 62( *(const strNLA_Usre=fls}, ctinfoTCA_ 62  TCA_ 62;
3class="line" name="L139"3 139<338            sref">ctinfoTCA_ 62  TCA_ 62;
30" class="line" name="L130"> 1339=skb" class=sref">ctinfoTCA_ 62TCA_ 62;
CTT3PLE(ctinfoTCA_ 62;
CTT3                       \3ctinfoTCA_ 62( *(const strNLA_Usre=fls}, fallback;         3     34et/sched/cls_sref">ctinfoTCA_ 62( *(const strNLA_Usre=fls}, ctinfoTCA_ 62( *(const strNLA_Usre=fls}, ctinfoTCA_ 62TCA_ 62;
ct 34e=skb" class=sref">ctinfoTCA_ 62  TCA_ 62;
 347ctinfoTCA_ 62  TCA_ 62;
ctinfoTCA_ 62  TCA_ 62;
3lass="line" name="L149">3149->3tons(, const struff" nhang uff *flow)
sk_buff *sk class="sref">flow_ketame="L152"> 152   , unsignedflong       \
  base>   ,<CTT3s="sref">ntohl(flow)
flow_ketca_buff *   ,<(flow_kearg" name="L36">  arg6" c" 3TTUPL35NTRAC   switch ( 147sta3740am35e=flow" classs="sref">flow)
  36flow_keheae" name="L36">  heae clas        \
 152   .c#L150" id="L150" croot_buff *   f
ef/a>      3 swit35e=skb" class=s="sref">flow)
flow_kebuff *   f
flow)
flow)
 * *   sref">ctinfoTCA_OPTIONS" name="L36">  TCA_OPTIONSip-&3ss="line" name="L58">  538357=skb" class=s="sref">flow)
flow)
ctinfoTCA_ 62(3="line" name="L59">  59<3/a>st358            s="sref">flow)
sk_buff *tcfsexts    f
tcf_ext_map flow)
sk_buff *tcfsematca_tree actio3n = polic3e = , const strper">pb perioe" name="L36">  per">pb perioe6" ch=sif
  63336et/sched/cls_      \
(const struct   baseuff  64<3/a>st36/a>(  96}keymae=>   s  if
  *  663 36"sref">NULL, const strersched/cls_flow.cerse=flf
a = (unsigned lon3g)  68<3/a>  367=skb" class=ports)
 *3a> & 0xFFFFFFFF) ^ (3pri-      \
  703
369=skb<  71<3/a>st37de=mask" class="sref">maskflow)
));
());
 *));
 *polic3 href="+code=flow_get_sr3c" cl371=skb" class=ports)
u37="L123" 3s="line" name="L73">  733 37et/sched/cls_flow.c#L="line" name="L88ref="ersched/cls_flow.cerse=flf
->ntohl()
ctinfoTCA_ 62  TCA_ 62addr_fold(  baseuff(const strnla_clas_sr" cla">flow)
ctinfoTCA_ 62  TCA_ 62  773
37                     ports)
flow)
  baseuffu378" class3="line" name="L78">  78<3/a>st377ol" class="s_dst" cl        ef">pri-      \
a  803 379=skb<flow3->dsports)
ctinfoTCA_ 62(ntohl(  96}keymae=>   s        \
(const strnla_clas_sr" cla">flow)
ctinfoTCA_ 62(addr_fold(  843
38/a>(flow_kehweightsrc(const strhweightsr" cla">flow)
  96}keymae=>   )f
  85<3/a>st38e=flow" classsref">dsports)
u3h66" clas3 href="+code=flow_get_pr3oto" 385a>(pri-      \
  873 38tatic f3low->)
port16[1]);
  96}keymae=>   ) - 1  #L1                 62(u3href">alinux/skbuff.h<3a" cl388                            ef">pri-      \
  90<3/a>st38col" class="s="net/sched/cls_flow.c#L85" id="L3cef">flow3 href="+code=flow_get_pr3oto_s39ic u3L92" clas3s="line" name="L92">  923 39e=CTTUPLE" cls="sref">masksk_buff *tcfsextssvalidate" cla">flow)
 152   , ">flow)
));
 *   sref">ctinfoTCA_RATE" name="L36">  TCA_RATEip/cls_flow.c#L135" id    \
 152   )f
flow3->u3cohf="+co3="sref">ntohs(  95<3/a>  39ic u3class="sr3ef">addr_fold(masksk_buff *tcfsem_tree_validate" cla">flow)
 152   , ">flow)
ctinfoTCA_ 62  TCA_ 62/cls_flow.c#L135" idt_buff *   )f
  973
39             ports)
u3c"sref">f3="line" name="L98">  98<3/a>st397ol" class="s_dst" clgoto"s="sref">maskalinux/in.h>
3aa>st39col" class="s="sref">flow_kebuff *   s  us="sref">flow)
flow_kearg" name="L36">  arg6" cf
fl4w->dsports)
 *   s!        \
fl4w="line" name="L92">  924f="+c40e=CTTUPLE" class="sres="sref">mask 403)
 *   .c#L150" id="L150" chand     \
   s/cls_ 32 ?                hand     \
u4" class="4ref">addr_fold(mask(const strersre=flf
  95<4105u4="L106" c4ass="line" name="L106"> 406( * *   .c#L150" id="L150" cm0" uff *  974f" cl40                     ports)
ctinfoTCA_ 62  TCA_ 62u4"7L106" c4a"line" name="L98">  98<4108 *(const strnla_clas_sr" cla">flow)
ctinfoTCA_ 62  TCA_ 62 *u4"9L106" c4aef">linux/in.h>
4110mask(const strersre=flf
 411u4>u32 4a href="+code=flow_get_p4iorit41e=CTTUPLE" class="sreportref="+code=sk_bm0" uff *4113pb perioe" name="L36">  per">pb perioe6" ch=s      \
 *   .c#L150" id="L150" cper">pb perioe" name="L36">  per">pb perioe6" cf
-> *flow_k0e=flow" class" e=fls          1411"> 311sk_buff *tcfsem_treef">ctinfoTCA *tcfsem_treef">ctinfoTCA *tccfsem_trew.cerse=fls        \
   .c#L150" sretbd= 152ctinfoTCAHZ5 *   .HZ"sreportref="+code=e=fl8/40ic1ass="s=s=cls_flow.me="L36">  baseuff));
41">  974f" cl40       linux/skbuff.h<3a" cl4 id="L1504 cbaseuff4 base4ff.ip/cls_flow.c#Lef="+code4ports40ass="sref">dsports)
 *   s!        \
 * 403)
)
 311  924f="+f="net/sched/cls_ href="+code=flow" class="s3hl" class3="sref">ntohl(   s/cls_ 32 ?                haref="net/4ched/cls_flow.c#L3d="L124" 3la42cls_flow.c#L100" ">u4" class="4ref">ads_="net/s4hed/cls_flow.c#L78" id="43">de42e=sk        goto"s="sref">mask(const strersre=flf
pri-1 < * *   .c#L150" id="L150" cm0" uff *  974f" cl40                     ports)
ctinfoTCA_ 62  TCA_ 62u4"7L106" c4a"line" name="L98">  98<41084b"sro42clas_src(const strnla_clas_sr" cla">flow)
ctinfoTCA_ 62  TCA_ 62flow<4a>)
u4"9L106" c4aef">liC33de=mas4" class="sref">maskmask *   .c#L150" id="L150" cper">pb perioe" name="L36">  per">pb perioe6" cf
CTT3PLE(flow)
ctinfoTCA_ 62  TCA_ 62pb tim/sd="La>));
  732 27et/sched/cls_flow.a href 62  68<2/a>s        \
sk_buff *tcfsem_treef">ctinfoTCA *tcfsem_treef">ctinfoTCA *tccfsem_trew.cerse=fls        \
   .c#L150" sretbd= 152ctinfoTCAHZ5 *   .HZ"sreportref="+code=e=fl8/40ic1ass="s=s per">pb 4erioe6" c" <linux/skbuff.h<3a" cl4ref">flow4/a>)
 *<4 href43w.c#L100" ">u3h66" clas3 href="+code=4         4sref">ctinfoTCA_ 62<4KEYSd43     ef">pri-      \
   .c#d/clsJ *tccfsem_trew.cerseBASECLASS" name="L36">  TCA_ 62ctinfoTCA_ 62<4MODE"43L108">3108ctinfoTCA_ 62masku3class="sr3ef"BASECLASS" name="L36">  TCA_ 62ip/cls_flow.c#L135" idbuff *ctinfoTCA_ 62  TCA_ 62ctinfoTCA_ 62 *ctinfoTCA_ 62flow_keres_buff *1Cportref="+code=e=fl8/40ic1ass="s=s        s4ef">ctinfoTCA_ 62  adden4kb" class4sref">ctinfoTCA_ 62<4MASed44ef="+code=s3b" cl331=ef="+code4ports40ass="sref">dsports)
 *(ctinfoTCA_ 624/XORd44">ctinfoTCA_ 62(( 152   .c#L150" id="L150" cro)">u3class="sr3ef"GFP_KERNEef>   s!        GFP_KERNEeBASECportref="+code=e=fl8/40ic1ass="s=sef="+cosr4f">ctinfoTCA_ 62a = (unsigned lon3g)ctinfoTCA_ 62flow_k0e=flow" class" e=f 62c4infoTCA_ 62u3h66" clas3 href="+code=4sref">cti4foTCA_ 62pri-      \
2ctinfoTCA_ 623kb->3kb-&ga hrefarg" name="L36">  arg6" c <3ass="line" name="L130"> 330defined3/a>(f4owsk_buff(((const struct <4 href4"+code=sk_bhand     \
2mdatL href 6" id="L3""L116lass="line" namec#L150" id="L150" croot_buff *   f
4*   ,<ctinfoTCA_ 62(3ass="line" name="L130"> 330(linux/skbuff.h<3a" cl4low)
4a href=heae" name="L36">4 36(ef/a>  #L3>u32 3a Nhref="+ce="L149">3149u32 3a NTRAC   switch (u3s="sref">3kb->flow_kescdate">sk_buff *tcfsextssvalidate" clafined3/a>(cti4ttsched/cls_flow.cnlatts4class4>flow)
u32 3a Nhrefname="Le="L149">3149u32 3a NTRAC   switch (u3s="sref">3kb->  arg6" c sextse=hrefss="sref">u3s="sref">3idate">sk_buff *tcfsem_tree_validate" cla">flow4  538457=skb" class=s="sref">f4owu3c"sref">4maNhreme="Lloia href="+cod3=skNhreme="Lloialow.c#L3>u32 3a NTRAC   switch (flow4ched/cls_4low.c#L3s"L130" c3ass="s4ef">t46cls_flow.c#L100" ">u4"9L106" c4aef">li+code=sk_4t_buff *   f
<4 href4662(  803 379=skb<ctinfots)
flow4cbuff4sched/cls_flow.c#L3e="L143" 3s46">ctinfoTCA_ 62(((flow4cf="+cosr4net/sched/cls_flow.c#L3e4hf="+46LLLunsignedfllinux/skbuff.h<3a" cl4=>   s  i4
 *4a hre46sref">ef/a>  #L3>u32 3a /sched/cls_flow.c#L="net/sched/cls_flow.c#L78" id="L3" class="3ref">ad
(const struct   96}keyma4L3e6" id=4L3s="line" name="L66">  463 *   .c#L1504tic  * *  i /a>;
a = (unsigned lon3g)ip/cls_flow.c#Lef="+code4portset/sched/cls_flow.c#L3s="sref">3kb->ctinfoTCA_ 62  TCA_ 62u4"7L106" c4a"line" name  i /a>;
  96}keyma4p; 0xFFFF4FFF) ^ (3a;
a = (unsigned lon3g)sk_buff. bd="Lsref">ctinfoTCA_ 62  TCA_ 62u4"7L106" c4a"line" nams  i /a>;
  96}keyma4p9" id="L4/a> * *a = (unsigned lon3g)4ed/cls_flow.cerse=fls<4 0f="47">ctinfoTCA_ 62((>
3110ctinfoTCA_ 62  TCA_ 62u4"7L106" c4a"line" nams  i /a>;
  96}keyma4pf="+cosr4name="L73">  733 37e4/sche4/cls_flow.c#L="line" name="L88ref="ersched/cls_flow.cerse=flf
 *a = (unsigned lon3g)   s  i47>inline<3="sref">ntohl<4a>()
  nst sie" cls  uple.ctinfoTCA_ 62  TCA_ 62u4"7L106" c4a"line" nams  i /a>;
  96}keyma4p u3h66" clas3 href="+code=4.c#L37_fl4w.c#3s="line" name="L77"4  7734736"sref">NULL, const ssched/cls_flow.c#L100" ">u4"7L106" c4a"line" nams  i /a>;
a = (unsigned lon3g))
  nst sie" cls  uple.ctinfoTCA_ 62  TCA_ 62u4"7L106" c4a"line" nams  i /a>;
a = (unsigned lon3g)u4"7L10/BASECLASSipa-&ga hrefarg" name="L36">  arg6" c 36">  nst sie" cls        \
  TC_H_MAKE" claorce  AKE" name="L36">  TC_H_MAKE" claorce->ctinfoTCA_ 6a hrefnla4clas_src(const strnl4_clas48+code=T3CA_FL3W_POLICE" clas4113  4lass="line" name="L113">4113ctinfoTCA_ 624( 330(, con4t strf"net/sched/cls_flo4n9" i48="ersched/cls_flow.cerse=flf
  h(CTT3PL4
 href="+code=sk_bke .c#L150" id="L150" cper">pb perioe" name="L36">  per">pb perioe6" c"    .c#L150" id="L150" cper">pb tim/sched/cls_flow.cper">pb tim/sd="La>));
<4ed/cls_fl4w.c#L100" ">u3h66" clas34href=4+code=flow_get_pr3oto" 385a>(pri-      \
linuls_flo4" class=s4ef">ctinfoTCA_ 62< href=blt4sched/cls_flow.cf">port14[4]);
  9t/sched/cls_flolist_TCA_tail#L39"L130" c3eelist_TCA_tailerioe" name="L36">  per">pb perioe6" c" sk_buff *tcfsem_tree_ref">3TTUPL35NTRAC   switchf="+code=u32" class=  
pb tim/sd="La>));
<4ea4href=46" ">u3href">a(co4st strNLA4Usre=fls}, pri-   4  \
u32 3a NTRAC   unlow.ch (flow4ched/cls_4low.c#L3s"L130" c3ass=/cls_flow4c#L3h"L130" c3="line" na4e="L949adden4kb" class4sref">ctinfoTCA_ 6TCA_R4TE" name="L36">  TCA_RAT4ip/cls_flow.c#Let/sched/cls_flow.c#L39"L130" c3eef">linuls#L150" id="L150" croot_buff *   f
4*   ,<   )4
flow3u3c4hf="+co3="sref">ntohs(ntohs(3149u3s="sref">3kb->flow4  538457=skb" class=s="sref"a ht>   )4
)
<:o3="sref">ntohs(u3c498="+ce="L149">3149u3s="sref">3kb->cti4ttsched/cls_flow.cnlat97ol" cla4s="s_dst" clgoto"s="sref4>mask4/ers1ched/cls_a href="+code=3ports39et/sched/cls_ports)
 *fl4w->ctinfoTCA_ 5f">fl4w="5ine" name="L92">  924f="5c40e=5TTUPLE="L149"void="+c3de=skb="net/schedestroacode=flow_get_pr3oto_d398  destroacode=flch (->3tons( 152   .c#L150" id="L150" croot_buff *   f
ctinfoTCA_ 625d="L150" 5hand     \
u4" c5ass="506/a>( 152 iel="L123_syno"line" name="L130"> 330(u3s="sref">3kb->flow_kescdate">sk_buff *tcfsextssvaNF4 f="+cosr4TH_P_35et/sched/cls_f5h6ef="+co5e te=ip" class="sretbd="5bm0" 50f="+ce="L149">3149u3s="sref">3kb->  arg6" c sextse=hrefss="sref">u3s="sref">3idate">sk_NF4 f="+cosr4TH_P_35et/sched/cls_f5h7ef="+co5e3149 *tcfsextkf_buch (   f
   s  i4
u4"9L506" c51 name="L149">3149  95<3/a>  39ic ; ch (->3tons(ts classs="sref">flow_ketca_buff *   ,< 152   .c#L150" id="L150" croot_buff *   f
ats classs="sref">flow_ketF4 f="+cosr4TH_P_35et/sched/cls_f5>pb perio5" name="L36">  per">pb p5rioe651L123" 3s="line" name="L73">  733 5ef="+cod45prio470ls_flow.c#L3>  6852/a> 516/a>(u32 3a NTRAC   switch (flow4ched/cls_4low.c#L3s"L130" c3ass5ode=sk="s5ef">flow_k0e=flow" class5 e=fl51ersrc(con>3149  per">pb perioe6" c" sk_a>4ched/cls_4low.c#L3s"L130" c3ass5o6ef="+co5sk3149u32 3a NTRAC   unlow.ch (flow4ched/cls_4low.c#L3s"L130" c3ass5"L4>));
45">  974f" cl40       31493tons(   f
4 base45fip/cls_flow.c#Lef=5+code5ports4l4=>   s  i4
li+code=sk_4t_buff *   53149->3tons(  924f="5f="ne5/schedref="+code=3TH_P_35et/sched/cls_f5TU4LE" c45hand     \
  arg6" c" 3TTUPL35NTRAC   switchif
u4" c5ass="5ref">ads_="net/s4hed/cls_flow.c#L78" i5="43">de45e=sk        goto"s="sref5>mask52ersrc(con>31493TTUPL35NTRAC   switch ( 152   .c#L150" id="L150" cro)">u3class=ref">3TTUPL35NTRAC   switch s!        GFP_KERNEeBASECportref="+code=e=fl8/40ic1ass="s=sef="+cosr4f">ctinfoTCA_ 62<5="4nclud45f="+code=skref="+code=sk5bm0" 5ff *3TTUPL35NTRAC   switch (L3e_flow.c#3f">a = (unsigned lon3g)ctinfoTCA_ 62  974f" cl40          5     5    ports)
   ) - 1  #L1     portref="+code=e=fl8/40ic1ass="s=s/sched/cl4_sref">ctinfoTCA_5">4b"sro45clas_src(const strnl5_clas528="+ce="L149">3149  per">ref">3TTUPL35NTRAC   switchf="+code=u32" class=  
pb tim/sd="La>));
<5as4="sre45rem0" e=fls!        \
maskctinfoToositch (3TTUPL35NTRAC   switchif
u4"9L506" c5309" id="La>))a href=sif
(flow)
  732 27et/sched/cl5_flow5a href="L149"void="+c3de=skb="net/schedestroaow_get_pr3oto_d398  destroach (->3tons(  6852/a>s5      ref="+code=3TH_P_35et/sched/cls_f5="4nclud45e=sk        goto"s="slinux/skbuff36">  arg6" c" 3TTUPL35NTRAC   switchlow.c#L395" class3=b" cl3s clqRAC   switch (maskctinfoToositchif
u3h66" clas35href=536linux/skbuff36">  arg6" c"  152   .c#L150" id="L150" croot_buff *   f
nexsref">ctinfonexsitchif
pri-      \
31083149  39ic list_for_each_entry_saf ch (   f
ctinfonexsitchbuff *tcfsem_tree_ref">3TTUPL35NTRAC   switchf="+code=u32" class=  
sk_af=4n9" id="L4=sif
ip/cls_flow.c#L1355 idbu5f *3149  per">pb perioe6" c" sk_a>4ched/cls_4low.c#L3s"L130" c3ass5/R4HIFin45  ));
 531493tons(   f
54H"+code=u3" cl4=>   s  i4
 *tcfsextkf_buch (3TTUPL35NTRAC   switch F4 f="+cosr4TH_P_35et/sched/cls_f5/h4ef6" 45">ctinfoTCA_ 625   s  i4
ads_="net/s4hed/cls_flow.c#L78" i5in4" nam45ef">flow_k0e=flow" class5 e=f 523tons(u3h66" clas35href=5+code==4n9" id="L4=sif
pri-      \
2  arg6" c" 3TTUPL35NTRAC   switchlow.c#L395" class3=b" cl3s clqRAC   switch (maskctinfoToositchif
  arg6" c"  152   .c#L150" id="L150" croot_buff *   f
(co4st strNLA4Usre=fls}, 3kb<55Aet/sched/cls_floEINVAee=flflist_for_each_entry 95<3/a>  39ic list_for_each_entrych (   f
 *tcfsem_tree_ref">3TTUPL35NTRAC   switchf="+code=u32" class=  
sk_a4st strNLA4Usre=fls}, sk_buffmaska)
 *   .c#L150" 5 <4 href45+code=sk_bhand     \
2))a href=L150" id="L150" croot_buff *   f
4*   ,<ctinfoTCA_ 62553ref">flow3   s  i4
4 36(ef/a>  #L3>u3253a Nh5ef="+c="L149"void="+c3de=skb="net/schepu.ow_get_pr3oto_d398  pu.ch (->3tons( *   f
ctinfoTCA_ 625ts4class45flow)
u3253a Nh5efname=4n9" id="L4=sif
u3c55r" cll4=>   s  i4
t45cls_flow.c#L100" ">u4"9L506" c56 name="L149">3149));
->3tons( hs="sretbd="La>))h"+cod4st strNLA4Usre=fls}, ( 311->->f3ems /linux/in.h"3s="sref">classs="sref">f3a hro4" class=s4ef">ctinfoTCA_ 625d/4ls_fl45+code=sk_bhand     \
2ctinfoTCA_ 6256!        \
  arg6" c"  152   .c#L150" id="L150" croot_buff *   f
a hs="sretbd="La>))h"+coif
anest#L39"L130" c3eenest"+coif
ef/a>  #L3>u3253a /s56f *a = (unsigned lon3g)ctinfoTCA_ 62 *   56   ports)
 /in.h"3s="sref"sk" c4a"line" namssk""+cof="+code=u32" class=lec#L78ined3/a>( 56ref">4ip/cls_flow.c#Lef=5+code56me="Lloia href="+cod3=skNhremclasss="sref">f3a hrf="+code=u32" class=3em_ed/cls_flow.c#Lports<3em_ed/clsitchlow.c#L395" class3cls_flow.cerse=fls  -      \
ali+code=sk_4t_buff *   5f64 cTCA45
sk_buffnest#L39"L130" c3eenest"+coODE" name="L36">  TCA_nest_="Lrt#L39"L130" c3eenCA_nest_="Lrtch (  803 37OPTIONeitch F4 f="+cosr4TH_P_35et/sched/cls_f5li4yd="L45<a = (unsigned lon3g)ctinfoTCA_ 62ctinfoTCA_ 625ads_="net/s4hed/cls_flow.c#L78" i5l<4a>()
  803 379=skb<   f
ctinfots)
u3h66" clas35href=57f *   f
  96}keym)t4classsref4>ctinfoTCA_ 62NULL,5const57   ports)
4u4"7L10kb->ctinfoTCA_ 62. bd="Lsref">ctinfoTCA_ 62a-&ga hrefarg" name="78            ="netnCA_pu._/MODEip  96}kedea hrefss="sref" *   f
ctinfoTCA_ 62-> 311  96}kedea hrefss="sref" *   f
ctinfoTCA_ 62ctinfoTCA_ 62(const strnl5_clas58H"+code=u3" clas 62))ctinfoTCA_ 625, con5t strf"net/sched/cls_flo5n9" i58="ersched/cls_flow.cerse=flf
>
3110ctinfoTCA_ 62   s  i4
  96}kedea hrefss="sref" *   f
ctinfoTCA_ 62ctinfoTCA_ 62u3h66" clas35href=58f *pri-      \
   f
ctinfoTCA_ 62   s  i4
port15[5]);
  96}kedea hrefss="sref" *   f
ctinfoTCA_ 62ctinfoTCA_ 62u3href">a *pri-   5  \
li+code=sk_4t_buff *   5/cls_flow5c#L3h"L130" c3="line" na5e="L959get_ds3t" cl378            ="net36">  nst sie" cls  uple.ctinfoTCA_ 62   s  i4
  TCA_RAT5ipa = (unsigned lon3g)   f
ctinfoTCA_ 62ctinfoTCA_ 62   )5
u3c59="ersched/cls_flow.cerse=flf
>
3110  TC_H_MAKE" claorce   s  i4
  803 379=skbBASECLASe   f
ctinfoTCA_ 62 *u3c59a hrem0" e=fls        \
4113   s  i4
ctinfoTCAHZ5 *   f
4113ctinfoTCA_ 62 *-&ga hrefarg" name="fl4w->ctinfoTCA_ 6f">fl4w="6ine" name="L92">  924f="6c40e=60get_ds3t" cl378            ="net/ef="RAC dumss="sretbd="La>)/ef="RAC dumsch (flow_kescdate">sk_buff *tcfsextssvalidate" clafined3/a>(<398  sex_mass="sretbd="La>));
ctinfoTCA_ 626d="L150" 6hand     \
u4" c6ass="606/a>(#ifdefDE_HASH6" cs/clsCONFIG_NET_EMATCHed/cls_floEINVACONFIG_NET_EMATCHdden4kb" class4sref">ctinfoTCA_ 6f5t/sched6cf="+code=skb" clas name6>mask60)
  arg6" c sextse=hrefss="sref">u3s="sref">3idate">sk_">mdatL href 6" hdLsref">ctinfosk_">mdatL href 6" nefss="sref">u3s="sref"n3idate">sk_/ow.c#L4=8L4=>   s  i4
 *)/ef=" NTRAC dumsch (flow_kescdateefss="sref">u3s="sref">3idate">sk_bua hrefss="sref"(unsine" EMATCHEe="L80">  803 379=skbEMATCHEe2ctinfoTCA_ 626d7ef="+co6ectinfonCA_nest_"Lsch (u4"9L606" c61ef">li+code=sk_4t_buff *   6ass="s_ds6" cl        goto"s="sref6>mask61get_ds3t" cl378            ="net/ef="RAC dums_="L>sk_buff *tcf/ef="RAC dums_="L>sch (flow_kescdate">sk_buff *tcfsextssvalidate" clafined3/a>(<398  sex_mass="sretbd="La>));
ctinfoTCA_ 626ow_get_p46orit41e=CTTUPLE" class="6repor61H"+code=u3" clas 62pb perio6" name="L36">  per">pb p6rioe661L123" 3s="line" name="L73">  733 6ef="+cod46prio470ls_flow.c#L3>  6862/a> 616/a>( /in.h"3s="sref"sk" c4a"line" namssk""+cof="+code=u32" class=lec#L78ined3/a>(flow_k0e=flow" class6 e=fl61_C32t4t ntohs());
46">  974f" cl40       3149))a href=-1F4 f="+cosr4TH_P_35et/sched/cls_f6n9ef="+co6">ip/cls_flow.c#Lef=6+code6ports4l4=>   s  i4
li+code=sk_4t_buff *   6ctinfoTC/schewalech (->3tons(flow_ketca_buff *   ,<  924f="6f="ne6/schedref="+code=3TH_P_35et/sched/cls_f6TU4LE" c46hand     \
  arg6" c" 3TTUPL35NTRAC   switchlow.c#L395" class3=b" cl3s clqRAC   switch (maskctinfoToositchif
u4" c6ass="62kbuff.h<3a" clow.c#L39ref">a 152   .c#L150" id="L150" croot_buff *   f
de46e=sk        goto"s="sref6>mask62_C32t4t  *  39ic list_for_each_entrych (   f
 *tcfsem_tree_ref">3TTUPL35NTRAC   switchf="+code=u32" class=  
sk_af=4n9" id="L4=sif
  974f" cl40          6     6    ports)
flow_ketf="+code=u32" class=count#L39"L130" c3eecount>sk_/olt;f          ="netts classs="sref">flow_ketf="+code=u32" class=skib" cl3s clqRAC  skib_ketca_buff *   ,<  9las 62 *flow_ketf="+code=u32" class=fc#L78ined3/a>(3tons( *   f
flow_ketc <flof=4n9" id="L4=sif
u4"9L606" c63>-&ga hrefarg" name=" *flow_ketf="+code=u32" class=stob" cl3s clqRAC  stobitchlow1F4 f="+cosr4TH_P_35et/sched/cls_f6la4rando46" cl        goto"s="sref6>mask63 1411"> 311   s  i4
  732 27et/sched/cl6_flow6a hrefE_HASH6" cs/clsskib" cl3s clqRAC  skib_ket:o3="sref">ntohs(  6862/a>s634"+code=u3" clas 62flow_ketf="+code=u32" class=count#L39"L130" c3eecount>sk_++F4 f="+cosr4TH_P_35et/sched/cls_f6l"43">de46e=sk        goto"s="slinux/skbuffl4=>   s  i4
u3h66" clas36href=636linul4=>   s  i4
pri-      \
3108-> *tcfc32" cla_opslinuxode=u32" class=__read_mostly 95<3/a>  39ic __read_mostlyitchlow=4n9" id="L4=sif
ip/cls_flow.c#L1356 idbu6f *mdatL href 6" kiLsref">ctinfokiLs"+code=u3" clasow.spanef">ctinfTRing">""net" 6mdatL href 6" ;
  39ic ;
  39ic ccla_;
64H"+code=u3" c">mdatL href 6" /in.ow_get_pr3oto_d/in.ch (de=u3" clasow.c#L395" class3ccla_/in.ow_get_pr3oto_d398  /in.ch (s4st strNLA4Usre=fls}, mdatL href 6" destroaow_get_pr3oto_ddestroach (u3" clasow.c#L395" class3ccla_destroaow_get_pr3oto_d398  destroach (s4st strNLA4Usre=fls}, ctinfoTCA_ 62643"+keye=fls  ">mdatL href 6" ;hanghed/cls_floEINVA;hanghch (de=u3" clow.c#L395" class3ccla_;hanghed/cls_floEINVAccla_;hanghch (s4st strNLA4Usre=fls}, mdatL href 6" dele>  95<3/a>  39ic iele> ch (de=u3" clow.c#L395" class3ccla_iele>  95<3/a>  39ic ; ch (s4st strNLA4Usre=fls}, de46ef">flow_k0e=flow" class6 e=f 645code=T3CA_FL">mdatL href 6" ge.ow_get_pr3oto_dge.ch (3" clas 62u3h66" clas36href=646code=T3CA_FL">mdatL href 6" pu.ow_get_pr3oto_dpu.ch (3" clas 62pri-      \
2mdatL href 6" dumss="sretbd="La>)dumsch (" clas 62));
mdatL href 6" walef">ctinfoTCwalech (" clas 62ctinfoTC/schewalech (s4st strNLA4Usre=fls},  *mdatL href 6" own152"> 152   .own15ch (" clas 623kb<65Aet/s}F4 f="+cosr4TH_P_35et/sched/cls_f6oA4DEND"46
sk_buffctinfoTCA_ 6 <4 href46+code=sk_bhand     \
23149 *   ,<ctinfoTCA_ 6265(( /in.h"3s="sref"register_3e=pro349_opsk_buff *tcfregister_3e=pro349_opsch ( *tcfsem_tree_c32" cla_opsk_buff *tcfc32" cla_opslinu F4 f="+cosr4TH_P_35et/sched/cls_f6">4 36(ef/a>  #L3>u3263a Nh65code=flow_get_pr3oto" 385a>( *   ,<u3c65r" clref="+code=3TH_P_35et/sched/cls_f6o9ef="+co6s="s_dst" clgoto"s="sref6>maNh65me="Lloia href="+cod3=skNhreunregister_3e=pro349_opsk_buff *tcfunregister_3e=pro349_opsch ( *tcfsem_tree_c32" cla_opsk_buff *tcfc32" cla_opslinu F4 f="+cosr4TH_P_35et/sched/cls_f6"s4ef">t46cls_flow.c#L100" ">u4"9L606" c66s="srl4=>   s  i4
(ctinfoTCA_ 6 3TTUPL35NTRAC3456edule *   ,&l6edule " id="L150" croot_budca_buff *   ,<u4"9L606" c66s="srl4=="+code=3  arg6" c" ntohs(<6edule *   ,&l6edule " id="L150" croot_budca_buff *   ,<u4"9L606" c66s="srl4=href=ymaec#L39ref">a)
ntohs(<32"46 _LICENSls}, u4"9L606" c66s="srl4=w_get_pr3w.cerse=flf
 32"46 _AUTHsr" id="trNLA4Usre=fls}, +F4 4HIFin46  ));flow.c#L100" ">u4"9L606" c66s="srl4=149"void=hrefymae=> /in.h"3s="sre6"sk" 663="sref">ntohs(<32"46 _DESCRId="L4ef" * 32"46 _DESCRId="L4" id="trNLA4Usre=fls}, u4"9L606" c66s="srl4=="+code=3t/sched/cls_flow.c#L5ip


*<> The original LXR software by the w.c#L100"http://sourceforge. ">/projects/lx*<>LXR commu"in">ctin this ex"sctmental version by w.c#L100"mailto:lx*@_flux.no">lx*@_flux.no>cti.
*<> lx*._flux.no net&ly hola_d by w.c#L100"http://www.redpill-_flpro.no">Redpill Lflpro A=ip" clprovider of Lflux consult, < and o"scxn.ons services since 1995.