linux/net/core/fib_rules.c
<<
ion .14/spaue= .14/forme= .14a ion .1 href="../linux+v3.7.5/net/core/fib_rules.c">ion .14img src="../.static/gfx/right.png" alt=">>">io4/spaue=io4spau class="lxr_search">ion ion .14input typ hidden" nam navtarget" ion> ">ion .14input typ text" nam search" id search">ion .14buttopttyp submit">Searchion .1Prefs= .14/a>io4/spaue=n .1 14/dive=n .1 14form acvalu="ajax+*" method="post" onsubmit="return false;">io4input typ hidden" nam ajax_lookup" id ajax_lookup" ion> ">in .1 14/forme=in .1 14div class="headingbottom">= 4div id file_contents"e
1 114/a>4spau class="comment">/*4/spaue=1 124/a>4spau class="comment"> * net/core/fib_rules.c         Generic Routing Rules4/spaue=1 134/a>4spau class="comment"> *4/spaue=1 144/a>4spau class="comment"> *      This program is free software; you cau redistribute it and/or4/spaue=1 154/a>4spau class="comment"> *      modify it under the terms of the GNU General Public License as4/spaue=1 164/a>4spau class="comment"> *      published by the Free Software Foundavalu, vers/opt2.4/spaue=1 174/a>4spau class="comment"> *4/spaue=1 184/a>4spau class="comment"> * Authors:     Thomas Graf <tgraf@suug.ch>4/spaue=1 194/a>4spau class="comment"> */4/spaue=1 8.10ae=1 114/a>#include <linux/typ
s.h4/a>>=1 124/a>#include <linux/kernel.h4/a>>=1 134/a>#include <linux/slab.h4/a>>=1 144/a>#include <linux/list.h4/a>>=1 154/a>#include <linux/module.h4/a>>=1 164/a>#include <net/net_nam
space.h4/a>>=1 174/a>#include <net/sock.h4/a>>=1 184/a>#include <net/fib_rules.h4/a>>=1 1910ae=1 2.10aeint14a href="+code=fib_default_rule_add" class="sref">fib_default_rule_add10ae(struct14a href="+code=fib_rules_ops" class="sref">fib_rules_ops10ae *4a href="+code=ops" class="sref">ops10ae,=1 214/a>                         4a href="+code=u32" class="sref">u324/a> 4a href="+code=pref" class="sref">pref10ae, 4a href="+code=u32" class="sref">u324/a> 4a href="+code=table" class="sref">table10ae, 4a href="+code=u32" class="sref">u324/a> 4a href="+code=flags" class="sref">flags4/a>)=1 224/a>{=1 234/a>        struct14a href="+code=fib_rule" class="sref">fib_rule10ae *4a href="+code=r" class="sref">r10ae;=1 2410ae=1 254/a>        4a href="+code=r" class="sref">r10ae = 4a href="+code=kzalloc" class="sref">kzalloc10ae(4a href="+code=ops" class="sref">ops10ae->4a href="+code=rule_size" class="sref">rule_size10ae, 4a href="+code=GFP_KERNEL" class="sref">GFP_KERNEL4/a>);=1 264/a>        if (4a href="+code=r" class="sref">r10ae == 4a href="+code=NULL" class="sref">NULL4/a>)=1 274/a>                return -4a href="+code=ENOMEM" class="sref">ENOMEM10ae;=1 2810ae=1 294/a>        4a href="+code=atomic_set" class="sref">atomic_set10ae(&4a href="+code=r" class="sref">r10ae->4a href="+code=refcnt" class="sref">refcnt10ae, 1);=1 304/a>        4a href="+code=r" class="sref">r10ae->4a href="+code=acvalu" class="sref">acvalu10ae = 4a href="+code=FR_ACT_TO_TBL" class="sref">FR_ACT_TO_TBL10ae;=1 314/a>        4a href="+code=r" class="sref">r10ae->4a href="+code=pref" class="sref">pref10ae = 4a href="+code=pref" class="sref">pref10ae;=1 324/a>        4a href="+code=r" class="sref">r10ae->4a href="+code=table" class="sref">table10ae = 4a href="+code=table" class="sref">table10ae;=1 334/a>        4a href="+code=r" class="sref">r10ae->4a href="+code=flags" class="sref">flags4/a> = 4a href="+code=flags" class="sref">flags4/a>;=1 344/a>        4a href="+code=r" class="sref">r10ae->4a href="+code=fr_net" class="sref">fr_net4/a> = 4a href="+code=hold_net" class="sref">hold_net10ae(4a href="+code=ops" class="sref">ops10ae->4a href="+code=fro_net" class="sref">fro_net10ae);=1 3510ae=1 364/a>        4spau class="comment">/* The lock is not required here, the list in unreacheable10spaue=1 374/a>4spau class="comment">         * at the moment this funcvalu is called */4/spaue=1 384/a>        4a href="+code=list_add_tail" class="sref">list_add_tail10ae(&4a href="+code=r" class="sref">r10ae->4a href="+code=list" class="sref">list10ae, &4a href="+code=ops" class="sref">ops10ae->4a href="+code=rules_list" class="sref">rules_list10ae);=1 394/a>        return 0;=1 404/a>}=1 414/a>4a href="+code=EXPORT_SYMBOL" class="sref">EXPORT_SYMBOL10ae(4a href="+code=fib_default_rule_add" class="sref">fib_default_rule_add10ae);=1 4210ae=1 434/a>4a href="+code=u32" class="sref">u324/a> 4a href="+code=fib_default_rule_pref" class="sref">fib_default_rule_pref10ae(struct14a href="+code=fib_rules_ops" class="sref">fib_rules_ops10ae *4a href="+code=ops" class="sref">ops10ae)=1 444/a>{=1 454/a>        struct14a href="+code=list_head" class="sref">list_head10ae *4a href="+code=pos" class="sref">pos4/a>;=1 464/a>        struct14a href="+code=fib_rule" class="sref">fib_rule10ae *4a href="+code=rule" class="sref">rule10ae;=1 4710ae=1 484/a>        if (!4a href="+code=list_empty" class="sref">list_empty10ae(&4a href="+code=ops" class="sref">ops10ae->4a href="+code=rules_list" class="sref">rules_list10ae)) {=1 494/a>                4a href="+code=pos" class="sref">pos4/a> = 4a href="+code=ops" class="sref">ops10ae->4a href="+code=rules_list" class="sref">rules_list10ae.4a href="+code=next" class="sref">next10ae;=1 504/a>                if (4a href="+code=pos" class="sref">pos4/a>->4a href="+code=next" class="sref">next10ae != &4a href="+code=ops" class="sref">ops10ae->4a href="+code=rules_list" class="sref">rules_list10ae) {=1 514/a>                        4a href="+code=rule" class="sref">rule10ae = 4a href="+code=list_entry" class="sref">list_entry10ae(4a href="+code=pos" class="sref">pos4/a>->4a href="+code=next" class="sref">next10ae, struct14a href="+code=fib_rule" class="sref">fib_rule10ae, 4a href="+code=list" class="sref">list10ae);=1 524/a>                        if (4a href="+code=rule" class="sref">rule10ae->4a href="+code=pref" class="sref">pref10ae)=1 534/a>                                return 4a href="+code=rule" class="sref">rule10ae->4a href="+code=pref" class="sref">pref10ae - 1;=1 544/a>                }=1 554/a>        }=1 5610ae=1 574/a>        return 0;=1 584/a>}=1 594/a>4a href="+code=EXPORT_SYMBOL" class="sref">EXPORT_SYMBOL10ae(4a href="+code=fib_default_rule_pref" class="sref">fib_default_rule_pref10ae);=1 6.10ae=1 614/a>static void 4a href="+code=notify_rule_change" class="sref">notify_rule_change10ae(int14a href="+code=event" class="sref">event10ae, struct14a href="+code=fib_rule" class="sref">fib_rule10ae *4a href="+code=rule" class="sref">rule10ae,=1 624/a>                               struct14a href="+code=fib_rules_ops" class="sref">fib_rules_ops10ae *4a href="+code=ops" class="sref">ops10ae, struct14a href="+code=nlmsghdr" class="sref">nlmsghdr10ae *4a href="+code=nlh" class="sref">nlh10ae,=1 634/a>                               4a href="+code=u32" class="sref">u324/a> 4a href="+code=pid" class="sref">pid10ae);=1 6410ae=1 654/a>static struct14a href="+code=fib_rules_ops" class="sref">fib_rules_ops10ae *4a href="+code=lookup_rules_ops" class="sref">lookup_rules_ops10ae(struct14a href="+code=net" class="sref">net4/a> *4a href="+code=net" class="sref">net4/a>, int14a href="+code=family" class="sref">family10ae)=1 664/a>{=1 674/a>        struct14a href="+code=fib_rules_ops" class="sref">fib_rules_ops10ae *4a href="+code=ops" class="sref">ops10ae;=1 6810ae=1 694/a>        4a href="+code=rcu_read_lock" class="sref">rcu_read_lock10ae();=1 704/a>        4a href="+code=list_for_each_entry_rcu" class="sref">list_for_each_entry_rcu10ae(4a href="+code=ops" class="sref">ops10ae, &4a href="+code=net" class="sref">net4/a>->4a href="+code=rules_ops" class="sref">rules_ops10ae, 4a href="+code=list" class="sref">list10ae) {=1 714/a>                if (4a href="+code=ops" class="sref">ops10ae->4a href="+code=family" class="sref">family10ae == 4a href="+code=family" class="sref">family10ae) {=1 724/a>                        if (!4a href="+code=try_module_get" class="sref">try_module_get10ae(4a href="+code=ops" class="sref">ops10ae->4a href="+code=owner" class="sref">owner10ae))=1 734/a>                                4a href="+code=ops" class="sref">ops10ae = 4a href="+code=NULL" class="sref">NULL4/a>;=1 744/a>                        4a href="+code=rcu_read_unlock" class="sref">rcu_read_unlock10ae();=1 754/a>                        return 4a href="+code=ops" class="sref">ops10ae;=1 764/a>                }=1 774/a>        }=1 784/a>        4a href="+code=rcu_read_unlock" class="sref">rcu_read_unlock10ae();=1 7910ae=1 804/a>        return 4a href="+code=NULL" class="sref">NULL4/a>;=1 814/a>}=1 8210ae=1 834/a>static void 4a href="+code=rules_ops_put" class="sref">rules_ops_put10ae(struct14a href="+code=fib_rules_ops" class="sref">fib_rules_ops10ae *4a href="+code=ops" class="sref">ops10ae)=1 844/a>{=1 854/a>        if (4a href="+code=ops" class="sref">ops10ae)=1 864/a>                4a href="+code=module_put" class="sref">module_put10ae(4a href="+code=ops" class="sref">ops10ae->4a href="+code=owner" class="sref">owner10ae);=1 874/a>}=1 8810ae=1 894/a>static void 4a href="+code=flush_route_cache" class="sref">flush_route_cache10ae(struct14a href="+code=fib_rules_ops" class="sref">fib_rules_ops10ae *4a href="+code=ops" class="sref">ops10ae)=1 904/a>{=1 914/a>        if (4a href="+code=ops" class="sref">ops10ae->4a href="+code=flush_cache" class="sref">flush_cache10ae)=1 924/a>                4a href="+code=ops" class="sref">ops10ae->4a href="+code=flush_cache" class="sref">flush_cache10ae(4a href="+code=ops" class="sref">ops10ae);=1 934/a>}=1 9410ae=1 954/a>static int14a href="+code=__fib_rules_register" class="sref">__fib_rules_register10ae(struct14a href="+code=fib_rules_ops" class="sref">fib_rules_ops10ae *4a href="+code=ops" class="sref">ops10ae)=1 964/a>{=1 974/a>        int14a href="+code=err" class="sref">err10ae = -4a href="+code=EEXIST" class="sref">EEXIST4/a>;=1 984/a>        struct14a href="+code=fib_rules_ops" class="sref">fib_rules_ops10ae *4a href="+code=o" class="sref">o4/a>;=1 994/a>        struct14a href="+code=net" class="sref">net4/a> *4a href="+code=net" class="sref">net4/a>;=110010ae=11014/a>        4a href="+code=net" class="sref">net4/a> = 4a href="+code=ops" class="sref">ops10ae->4a href="+code=fro_net" class="sref">fro_net10ae;=110210ae=11034/a>        if (4a href="+code=ops" class="sref">ops10ae->4a href="+code=rule_size" class="sref">rule_size10ae < sizeof(struct14a href="+code=fib_rule" class="sref">fib_rule10ae))=11044/a>                return -4a href="+code=EINVAL" class="sref">EINVAL10ae;=110510ae=11064/a>        if (4a href="+code=ops" class="sref">ops10ae->4a href="+code=match" class="sref">match10ae == 4a href="+code=NULL" class="sref">NULL4/a> || 4a href="+code=ops" class="sref">ops10ae->4a href="+code=configure" class="sref">configure10ae == 4a href="+code=NULL" class="sref">NULL4/a> ||=11074/a>            4a href="+code=ops" class="sref">ops10ae->4a href="+code=compare" class="sref">compare10ae == 4a href="+code=NULL" class="sref">NULL4/a> || 4a href="+code=ops" class="sref">ops10ae->4a href="+code=fill" class="sref">fill10ae == 4a href="+code=NULL" class="sref">NULL4/a> ||=11084/a>            4a href="+code=ops" class="sref">ops10ae->4a href="+code=acvalu" class="sref">acvalu10ae == 4a href="+code=NULL" class="sref">NULL4/a>)=11094/a>                return -4a href="+code=EINVAL" class="sref">EINVAL10ae;=118.10ae=11114/a>        4a href="+code=spin_lock" class="sref">spin_lock10ae(&4a href="+code=net" class="sref">net4/a>->4a href="+code=rules_mod_lock" class="sref">rules_mod_lock10ae);=11124/a>        4a href="+code=list_for_each_entry" class="sref">list_for_each_entry10ae(4a href="+code=o" class="sref">o4/a>, &4a href="+code=net" class="sref">net4/a>->4a href="+code=rules_ops" class="sref">rules_ops10ae, 4a href="+code=list" class="sref">list10ae)=11134/a>                if (4a href="+code=ops" class="sref">ops10ae->4a href="+code=family" class="sref">family10ae == 4a href="+code=o" class="sref">o4/a>->4a href="+code=family" class="sref">family10ae)=11144/a>                        goto14a href="+code=errout" class="sref">errout10ae;=111510ae=11164/a>        4a href="+code=hold_net" class="sref">hold_net10ae(4a href="+code=net" class="sref">net4/a>);=11174/a>        4a href="+code=list_add_tail_rcu" class="sref">list_add_tail_rcu10ae(&4a href="+code=ops" class="sref">ops10ae->4a href="+code=list" class="sref">list10ae, &4a href="+code=net" class="sref">net4/a>->4a href="+code=rules_ops" class="sref">rules_ops10ae);=11184/a>        4a href="+code=err" class="sref">err10ae = 0;=11194/a>4a href="+code=errout" class="sref">errout10ae:=11204/a>        4a href="+code=spin_unlock" class="sref">spin_unlock10ae(&4a href="+code=net" class="sref">net4/a>->4a href="+code=rules_mod_lock" class="sref">rules_mod_lock10ae);=11214/a>=11224/a>        return 4a href="+code=err" class="sref">err10ae;=11234/a>}=112410ae=11254/a>struct14a href="+code=fib_rules_ops" class="sref">fib_rules_ops10ae *=11264/a>4a href="+code=fib_rules_register" class="sref">fib_rules_register10ae(const struct14a href="+code=fib_rules_ops" class="sref">fib_rules_ops10ae *4a href="+code=tmpl" class="sref">tmpl10ae, struct14a href="+code=net" class="sref">net4/a> *4a href="+code=net" class="sref">net4/a>)=11274/a>{=11284/a>        struct14a href="+code=fib_rules_ops" class="sref">fib_rules_ops10ae *4a href="+code=ops" class="sref">ops10ae;=11294/a>        int14a href="+code=err" class="sref">err10ae;=113.10ae=11314/a>        4a href="+code=ops" class="sref">ops10ae = 4a href="+code=kmemdup" class="sref">kmemdup10ae(4a href="+code=tmpl" class="sref">tmpl10ae, sizeof(*4a href="+code=ops" class="sref">ops10ae), 4a href="+code=GFP_KERNEL" class="sref">GFP_KERNEL4/a>);=11324/a>        if (4a href="+code=ops" class="sref">ops10ae == 4a href="+code=NULL" class="sref">NULL4/a>)=11334/a>                return 4a href="+code=ERR_PTR" class="sref">ERR_PTR10ae(-4a href="+code=ENOMEM" class="sref">ENOMEM10ae);=113410ae=11354/a>        4a href="+code=INIT_LIST_HEAD" class="sref">INIT_LIST_HEAD10ae(&4a href="+code=ops" class="sref">ops10ae->4a href="+code=rules_list" class="sref">rules_list10ae);=11364/a>        4a href="+code=ops" class="sref">ops10ae->4a href="+code=fro_net" class="sref">fro_net10ae = 4a href="+code=net" class="sref">net4/a>;=113710ae=11384/a>        4a href="+code=err" class="sref">err10ae = 4a href="+code=__fib_rules_register" class="sref">__fib_rules_register10ae(4a href="+code=ops" class="sref">ops10ae);=11394/a>        if (4a href="+code=err" class="sref">err10ae) {=11404/a>                4a href="+code=kfree" class="sref">kfree10ae(4a href="+code=ops" class="sref">ops10ae);=11414/a>                4a href="+code=ops" class="sref">ops10ae = 4a href="+code=ERR_PTR" class="sref">ERR_PTR10ae(4a href="+code=err" class="sref">err10ae);=11424/a>        }=11434/a>=11444/a>        return 4a href="+code=ops" class="sref">ops10ae;=11454/a>}=11464/a>4a href="+code=EXPORT_SYMBOL_GPL" class="sref">EXPORT_SYMBOL_GPL10ae(4a href="+code=fib_rules_register" class="sref">fib_rules_register10ae);=114710ae=11484/a>static void 4a href="+code=fib_rules_cleanup_ops" class="sref">fib_rules_cleanup_ops10ae(struct14a href="+code=fib_rules_ops" class="sref">fib_rules_ops10ae *4a href="+code=ops" class="sref">ops10ae)=11494/a>{=11504/a>        struct14a href="+code=fib_rule" class="sref">fib_rule10ae *4a href="+code=rule" class="sref">rule10ae, *4a href="+code=tmp" class="sref">tmp10ae;=11514/a>=11524/a>        4a href="+code=list_for_each_entry_safe" class="sref">list_for_each_entry_safe10ae(4a href="+code=rule" class="sref">rule10ae, 4a href="+code=tmp" class="sref">tmp10ae, &4a href="+code=ops" class="sref">ops10ae->4a href="+code=rules_list" class="sref">rules_list10ae, 4a href="+code=list" class="sref">list10ae) {=11534/a>                4a href="+code=list_del_rcu" class="sref">list_del_rcu10ae(&4a href="+code=rule" class="sref">rule10ae->4a href="+code=list" class="sref">list10ae);=11544/a>                if (4a href="+code=ops" class="sref">ops10ae->4a href="+code=delete" class="sref">delete10ae)=11554/a>                        4a href="+code=ops" class="sref">ops10ae->4a href="+code=delete" class="sref">delete10ae(4a href="+code=rule" class="sref">rule10ae);=11564/a>                4a href="+code=fib_rule_put" class="sref">fib_rule_put10ae(4a href="+code=rule" class="sref">rule10ae);=11574/a>        }=11584/a>}=115910ae=116.10aestatic void 4a href="+code=fib_rules_put_rcu" class="sref">fib_rules_put_rcu10ae(struct14a href="+code=rcu_head" class="sref">rcu_head10ae *4a href="+code=head" class="sref">head10ae)=11614/a>{=11624/a>        struct14a href="+code=fib_rules_ops" class="sref">fib_rules_ops10ae *4a href="+code=ops" class="sref">ops10ae = 4a href="+code=container_of" class="sref">container_of10ae(4a href="+code=head" class="sref">head10ae, struct14a href="+code=fib_rules_ops" class="sref">fib_rules_ops10ae, 4a href="+code=rcu" class="sref">rcu10ae);=11634/a>        struct14a href="+code=net" class="sref">net4/a> *4a href="+code=net" class="sref">net4/a> = 4a href="+code=ops" class="sref">ops10ae->4a href="+code=fro_net" class="sref">fro_net10ae;=116410ae=11654/a>        4a href="+code=release_net" class="sref">release_net10ae(4a href="+code=net" class="sref">net4/a>);=11664/a>        4a href="+code=kfree" class="sref">kfree10ae(4a href="+code=ops" class="sref">ops10ae);=11674/a>}=116810ae=11694/a>void 4a href="+code=fib_rules_unregister" class="sref">fib_rules_unregister10ae(struct14a href="+code=fib_rules_ops" class="sref">fib_rules_ops10ae *4a href="+code=ops" class="sref">ops10ae)=11704/a>{=11714/a>        struct14a href="+code=net" class="sref">net4/a> *4a href="+code=net" class="sref">net4/a> = 4a href="+code=ops" class="sref">ops10ae->4a href="+code=fro_net" class="sref">fro_net10ae;=117210ae=11734/a>        4a href="+code=spin_lock" class="sref">spin_lock10ae(&4a href="+code=net" class="sref">net4/a>->4a href="+code=rules_mod_lock" class="sref">rules_mod_lock10ae);=11744/a>        4a href="+code=list_del_rcu" class="sref">list_del_rcu10ae(&4a href="+code=ops" class="sref">ops10ae->4a href="+code=list" class="sref">list10ae);=11754/a>        4a href="+code=fib_rules_cleanup_ops" class="sref">fib_rules_cleanup_ops10ae(4a href="+code=ops" class="sref">ops10ae);=11764/a>        4a href="+code=spin_unlock" class="sref">spin_unlock10ae(&4a href="+code=net" class="sref">net4/a>->4a href="+code=rules_mod_lock" class="sref">rules_mod_lock10ae);=117710ae=11784/a>        4a href="+code=call_rcu" class="sref">call_rcu10ae(&4a href="+code=ops" class="sref">ops10ae->4a href="+code=rcu" class="sref">rcu10ae, 4a href="+code=fib_rules_put_rcu" class="sref">fib_rules_put_rcu10ae);=117910ae}=11804/a>4a href="+code=EXPORT_SYMBOL_GPL" class="sref">EXPORT_SYMBOL_GPL10ae(4a href="+code=fib_rules_unregister" class="sref">fib_rules_unregister10ae);=11814/a>=118210aestatic int14a href="+code=fib_rule_match" class="sref">fib_rule_match10ae(struct14a href="+code=fib_rule" class="sref">fib_rule10ae *4a href="+code=rule" class="sref">rule10ae, struct14a href="+code=fib_rules_ops" class="sref">fib_rules_ops10ae *4a href="+code=ops" class="sref">ops10ae,=11834/a>                          struct14a href="+code=flowi" class="sref">flowi10ae *4a href="+code=fl" class="sref">fl10ae, int14a href="+code=flags" class="sref">flags4/a>)=11844/a>{=11854/a>        int14a href="+code=ret" class="sref">ret4/a> = 0;=118610ae=11874/a>        if (4a href="+code=rule" class="sref">rule10ae->4a href="+code=iifindex" class="sref">iifindex4/a> && (4a href="+code=rule" class="sref">rule10ae->4a href="+code=iifindex" class="sref">iifindex4/a> != 4a href="+code=fl" class="sref">fl10ae->4a href="+code=flowi_iif" class="sref">flowi_iif4/a>))=11884/a>                goto14a href="+code=out" class="sref">out10ae;=118910ae=11904/a>        if (4a href="+code=rule" class="sref">rule10ae->4a href="+code=oifindex" class="sref">oifindex4/a> && (4a href="+code=rule" class="sref">rule10ae->4a href="+code=oifindex" class="sref">oifindex4/a> != 4a href="+code=fl" class="sref">fl10ae->4a href="+code=flowi_oif" class="sref">flowi_oif4/a>))=11914/a>                goto14a href="+code=out" class="sref">out10ae;=119210ae=11934/a>        if ((4a href="+code=rule" class="sref">rule10ae->4a href="+code=mark" class="sref">mark4/a> ^ 4a href="+code=fl" class="sref">fl10ae->4a href="+code=flowi_mark" class="sref">flowi_mark10ae) & 4a href="+code=rule" class="sref">rule10ae->4a href="+code=mark_mask" class="sref">mark_mask4/a>)=11944/a>                goto14a href="+code=out" class="sref">out10ae;=119510ae=11964/a>        4a href="+code=ret" class="sref">ret4/a> = 4a href="+code=ops" class="sref">ops10ae->4a href="+code=match" class="sref">match10ae(4a href="+code=rule" class="sref">rule10ae, 4a href="+code=fl" class="sref">fl10ae, 4a href="+code=flags" class="sref">flags4/a>);=11974/a>4a href="+code=out" class="sref">out10ae:=11984/a>        return (4a href="+code=rule" class="sref">rule10ae->4a href="+code=flags" class="sref">flags4/a> & 4a href="+code=FIB_RULE_INVERT" class="sref">FIB_RULE_INVERT10ae) ? !4a href="+code=ret" class="sref">ret4/a> : 4a href="+code=ret" class="sref">ret4/a>;=119910ae}=120010ae=12014/a>int14a href="+code=fib_rules_lookup" class="sref">fib_rules_lookup10ae(struct14a href="+code=fib_rules_ops" class="sref">fib_rules_ops10ae *4a href="+code=ops" class="sref">ops10ae, struct14a href="+code=flowi" class="sref">flowi10ae *4a href="+code=fl" class="sref">fl10ae,=12024/a>                     int14a href="+code=flags" class="sref">flags4/a>, struct14a href="+code=fib_lookup_arg" class="sref">fib_lookup_arg10ae *4a href="+code=arg" class="sref">arg10ae)=12034/a>{=12044/a>        struct14a href="+code=fib_rule" class="sref">fib_rule10ae *4a href="+code=rule" class="sref">rule10ae;=12054/a>        int14a href="+code=err" class="sref">err10ae;=120610ae=12074/a>        4a href="+code=rcu_read_lock" class="sref">rcu_read_lock10ae();=120810ae=12094/a>        4a href="+code=list_for_each_entry_rcu" class="sref">list_for_each_entry_rcu10ae(4a href="+code=rule" class="sref">rule10ae, &4a href="+code=ops" class="sref">ops10ae->4a href="+code=rules_list" class="sref">rules_list10ae, 4a href="+code=list" class="sref">list10ae) {=12104/a>4a href="+code=jumped" class="sref">jumped10ae:=12114/a>                if (!4a href="+code=fib_rule_match" class="sref">fib_rule_match10ae(4a href="+code=rule" class="sref">rule10ae, 4a href="+code=ops" class="sref">ops10ae, 4a href="+code=fl" class="sref">fl10ae, 4a href="+code=flags" class="sref">flags4/a>))=12124/a>                        continue;=12134/a>=12144/a>                if (4a href="+code=rule" class="sref">rule10ae->4a href="+code=acvalu" class="sref">acvalu10ae == 4a href="+code=FR_ACT_GOTO" class="sref">FR_ACT_GOTO10ae) {=12154/a>                        struct14a href="+code=fib_rule" class="sref">fib_rule10ae *4a href="+code=target" class="sref">target10ae;=121610ae=12174/a>                        4a href="+code=target" class="sref">target10ae = 4a href="+code=rcu_dereference" class="sref">rcu_dereference10ae(4a href="+code=rule" class="sref">rule10ae->4a href="+code=ctarget" class="sref">ctarget10ae);=12184/a>                        if (4a href="+code=target" class="sref">target10ae == 4a href="+code=NULL" class="sref">NULL4/a>) {=12194/a>                                continue;=12204/a>                        } else {=12214/a>                                4a href="+code=rule" class="sref">rule10ae = 4a href="+code=target" class="sref">target10ae;=12224/a>                                goto14a href="+code=jumped" class="sref">jumped10ae;=12234/a>                        }=12244/a>                } else if (4a href="+code=rule" class="sref">rule10ae->4a href="+code=acvalu" class="sref">acvalu10ae == 4a href="+code=FR_ACT_NOP" class="sref">FR_ACT_NOP10ae)=12254/a>                        continue;=12264/a>                else=12274/a>                        4a href="+code=err" class="sref">err10ae = 4a href="+code=ops" class="sref">ops10ae->4a href="+code=acvalu" class="sref">acvalu10ae(4a href="+code=rule" class="sref">rule10ae, 4a href="+code=fl" class="sref">fl10ae, 4a href="+code=flags" class="sref">flags4/a>, 4a href="+code=arg" class="sref">arg10ae);=122810ae=12294/a>                if (4a href="+code=err" class="sref">err10ae != -4a href="+code=EAGAIN" class="sref">EAGAIN4/a>) {=12304/a>                        if ((4a href="+code=arg" class="sref">arg10ae->4a href="+code=flags" class="sref">flags4/a> & 4a href="+code=FIB_LOOKUP_NOREF" class="sref">FIB_LOOKUP_NOREF4/a>) ||=12314/a>                            4a href="+code=likely" class="sref">likely10ae(4a href="+code=atomic_inc_not_zero" class="sref">atomic_inc_not_zero10ae(&4a href="+code=rule" class="sref">rule10ae->4a href="+code=refcnt" class="sref">refcnt4/a>))) {=12324/a>                                4a href="+code=arg" class="sref">arg10ae->4a href="+code=rule" class="sref">rule10ae = 4a href="+code=rule" class="sref">rule10ae;=12334/a>                                goto14a href="+code=out" class="sref">out10ae;=12344/a>                        }=12354/a>                        break;=12364/a>                }=12374/a>        }=123810ae=12394/a>        4a href="+code=err" class="sref">err10ae = -4a href="+code=ESRCH" class="sref">ESRCH10ae;=12404/a>4a href="+code=out" class="sref">out10ae:=12414/a>        4a href="+code=rcu_read_unlock" class="sref">rcu_read_unlock10ae();=124210ae=12434/a>        return 4a href="+code=err" class="sref">err10ae;=12444/a>}=12454/a>4a href="+code=EXPORT_SYMBOL_GPL" class="sref">EXPORT_SYMBOL_GPL10ae(4a href="+code=fib_rules_lookup" class="sref">fib_rules_lookup10ae);=124610ae=124710aestatic int14a href="+code=validate_rulemsg" class="sref">validate_rulemsg10ae(struct14a href="+code=fib_rule_hdr" class="sref">fib_rule_hdr10ae *4a href="+code=frh" class="sref">frh4/a>, struct14a href="+code=nlattr" class="sref">nlattr10ae **4a href="+code=tb" class="sref">tb10ae,=12484/a>                            struct14a href="+code=fib_rules_ops" class="sref">fib_rules_ops10ae *4a href="+code=ops" class="sref">ops10ae)=12494/a>{=12504/a>        int14a href="+code=err" class="sref">err10ae = -4a href="+code=EINVAL" class="sref">EINVAL10ae;=12514/a>=12524/a>        if (4a href="+code=frh" class="sref">frh4/a>->4a href="+code=src_leu" class="sref">src_leu10ae)=12534/a>                if (4a href="+code=tb" class="sref">tb10ae[4a href="+code=FRA_SRC" class="sref">FRA_SRC10ae] == 4a href="+code=NULL" class="sref">NULL4/a> ||=12544/a>                    4a href="+code=frh" class="sref">frh4/a>->4a href="+code=src_leu" class="sref">src_leu10ae > (4a href="+code=ops" class="sref">ops10ae->4a href="+code=addr_size" class="sref">addr_size10ae * 8) ||=12554/a>                    4a href="+code=nla_leu" class="sref">nla_leu10ae(4a href="+code=tb" class="sref">tb10ae[4a href="+code=FRA_SRC" class="sref">FRA_SRC10ae]) != 4a href="+code=ops" class="sref">ops10ae->4a href="+code=addr_size" class="sref">addr_size10ae)=12564/a>                        goto14a href="+code=errout" class="sref">errout10ae;=125710ae=12584/a>        if (4a href="+code=frh" class="sref">frh4/a>->4a href="+code=dst_leu" class="sref">dst_leu10ae)=12594/a>                if (4a href="+code=tb" class="sref">tb10ae[4a href="+code=FRA_DST" class="sref">FRA_DST10ae] == 4a href="+code=NULL" class="sref">NULL4/a> ||=12604/a>                    4a href="+code=frh" class="sref">frh4/a>->4a href="+code=dst_leu" class="sref">dst_leu10ae > (4a href="+code=ops" class="sref">ops10ae->4a href="+code=addr_size" class="sref">addr_size10ae * 8) ||=12614/a>                    4a href="+code=nla_leu" class="sref">nla_leu10ae(4a href="+code=tb" class="sref">tb10ae[4a href="+code=FRA_DST" class="sref">FRA_DST10ae]) != 4a href="+code=ops" class="sref">ops10ae->4a href="+code=addr_size" class="sref">addr_size10ae)=12624/a>                        goto14a href="+code=errout" class="sref">errout10ae;=12634/a>=12644/a>        4a href="+code=err" class="sref">err10ae = 0;=12654/a>4a href="+code=errout" class="sref">errout10ae:=12664/a>        return 4a href="+code=err" class="sref">err10ae;=12674/a>}=126810ae=12694/a>static int14a href="+code=fib_nl_newrule" class="sref">fib_nl_newrule10ae(struct14a href="+code=sk_buff" class="sref">sk_buff10ae *4a href="+code=skb" class="sref">skb4/a>, struct14a href="+code=nlmsghdr" class="sref">nlmsghdr4/a>*14a href="+code=nlh" class="sref">nlh4/a>, void *4a href="+code=arg" class="sref">arg10ae)=12704/a>{=12714/a>        struct14a href="+code=net" class="sref">net4/a> *4a href="+code=net" class="sref">net4/a> = 4a href="+code=sock_net" class="sref">sock_net10ae(4a href="+code=skb" class="sref">skb4/a>->4a href="+code=sk" class="sref">sk10ae);=12724/a>        struct14a href="+code=fib_rule_hdr" class="sref">fib_rule_hdr10ae *4a href="+code=frh" class="sref">frh4/a> = 4a href="+code=nlmsg_data" class="sref">nlmsg_data10ae(4a href="+code=nlh" class="sref">nlh4/a>);=12734/a>        struct14a href="+code=fib_rules_ops" class="sref">fib_rules_ops10ae *4a href="+code=ops" class="sref">ops10ae = 4a href="+code=NULL" class="sref">NULL4/a>;=12744/a>        struct14a href="+code=fib_rule" class="sref">fib_rule10ae *4a href="+code=rule" class="sref">rule10ae, *4a href="+code=r" class="sref">r10ae, *4a href="+code=last" class="sref">last4/a> = 4a href="+code=NULL" class="sref">NULL4/a>;=12754/a>        struct14a href="+code=nlattr" class="sref">nlattr10ae *4a href="+code=tb" class="sref">tb10ae[4a href="+code=FRA_MAX" class="sref">FRA_MAX10ae+1];=12764/a>        int14a href="+code=err" class="sref">err10ae = -4a href="+code=EINVAL" class="sref">EINVAL10ae, 4a href="+code=unresolved" class="sref">unresolved10ae = 0;=127710ae=12784/a>        if (4a href="+code=nlh" class="sref">nlh4/a>->4a href="+code=nlmsg_leu" class="sref">nlmsg_leu10ae < 4a href="+code=nlmsg_msg_size" class="sref">nlmsg_msg_size10ae(sizeof(*4a href="+code=frh" class="sref">frh4/a>)))=12794/a>                goto14a href="+code=errout" class="sref">errout10ae;=128010ae=12814/a>        4a href="+code=ops" class="sref">ops10ae = 4a href="+code=lookup_rules_ops" class="sref">lookup_rules_ops10ae(4a href="+code=net" class="sref">net4/a>, 4a href="+code=frh" class="sref">frh4/a>->4a href="+code=family" class="sref">family10ae);=12824/a>        if (4a href="+code=ops" class="sref">ops10ae == 4a href="+code=NULL" class="sref">NULL4/a>) {=12834/a>                4a href="+code=err" class="sref">err10ae = -4a href="+code=EAFNOSUPPORT" class="sref">EAFNOSUPPORT10ae;=12844/a>                goto14a href="+code=errout" class="sref">errout10ae;=12854/a>        }=128610ae=12874/a>        4a href="+code=err" class="sref">err10ae = 4a href="+code=nlmsg_parse" class="sref">nlmsg_parse10ae(4a href="+code=nlh" class="sref">nlh4/a>, sizeof(*4a href="+code=frh" class="sref">frh4/a>), 4a href="+code=tb" class="sref">tb10ae, 4a href="+code=FRA_MAX" class="sref">FRA_MAX10ae, 4a href="+code=ops" class="sref">ops10ae->4a href="+code=policy" class="sref">policy10ae);=12884/a>        if (4a href="+code=err" class="sref">err10ae < 0)=12894/a>                goto14a href="+code=errout" class="sref">errout10ae;=129010ae=12914/a>        4a href="+code=err" class="sref">err10ae = 4a href="+code=validate_rulemsg" class="sref">validate_rulemsg10ae(4a href="+code=frh" class="sref">frh4/a>, 4a href="+code=tb" class="sref">tb10ae, 4a href="+code=ops" class="sref">ops10ae);=12924/a>        if (4a href="+code=err" class="sref">err10ae < 0)=12934/a>                goto14a href="+code=errout" class="sref">errout10ae;=129410ae=12954/a>        4a href="+code=rule" class="sref">rule10ae = 4a href="+code=kzalloc" class="sref">kzalloc10ae(4a href="+code=ops" class="sref">ops10ae->4a href="+code=rule_size" class="sref">rule_size10ae, 4a href="+code=GFP_KERNEL" class="sref">GFP_KERNEL4/a>);=12964/a>        if (4a href="+code=rule" class="sref">rule10ae == 4a href="+code=NULL" class="sref">NULL4/a>) {=12974/a>                4a href="+code=err" class="sref">err10ae = -4a href="+code=ENOMEM" class="sref">ENOMEM10ae;=12984/a>                goto14a href="+code=errout" class="sref">errout10ae;=12994/a>        }=13004/a>        4a href="+code=rule" class="sref">rule10ae->4a href="+code=fr_net" class="sref">fr_net10ae = 4a href="+code=hold_net" class="sref">hold_net10ae(4a href="+code=net" class="sref">net4/a>);=13014/a>=13024/a>        if (4a href="+code=tb" class="sref">tb10ae[4a href="+code=FRA_PRIORITY" class="sref">FRA_PRIORITY10ae])=13034/a>                4a href="+code=rule" class="sref">rule10ae->4a href="+code=pref" class="sref">pref10ae = 4a href="+code=nla_get_u32" class="sref">nla_get_u3210ae(4a href="+code=tb" class="sref">tb10ae[4a href="+code=FRA_PRIORITY" class="sref">FRA_PRIORITY10ae]);=130410ae=13054/a>        if (4a href="+code=tb" class="sref">tb10ae[4a href="+code=FRA_IIFNAME" class="sref">FRA_IIFNAME10ae]) {=13064/a>                struct14a href="+code=net_device" class="sref">net_device10ae *4a href="+code=dev" class="sref">dev10ae;=130710ae=13084/a>                4a href="+code=rule" class="sref">rule10ae->4a href="+code=iifindex" class="sref">iifindex4/a> = -1;=13094/a>                4a href="+code=nla_strlcpy" class="sref">nla_strlcpy10ae(4a href="+code=rule" class="sref">rule10ae->4a href="+code=iifnam
" class="sref">iifnam
4/a>, 4a href="+code=tb" class="sref">tb10ae[4a href="+code=FRA_IIFNAME" class="sref">FRA_IIFNAME10ae], 4a href="+code=IFNAMSIZ" class="sref">IFNAMSIZ4/a>);=13104/a>                4a href="+code=dev" class="sref">dev10ae = 4a href="+code=__dev_get_by_nam
" class="sref">__dev_get_by_nam
10ae(4a href="+code=net" class="sref">net4/a>, 4a href="+code=rule" class="sref">rule10ae->4a href="+code=iifnam
" class="sref">iifnam
4/a>);=13114/a>                if (4a href="+code=dev" class="sref">dev10ae)=13124/a>                        4a href="+code=rule" class="sref">rule10ae->4a href="+code=iifindex" class="sref">iifindex4/a> = 4a href="+code=dev" class="sref">dev10ae->4a href="+code=ifindex" class="sref">ifindex4/a>;=13134/a>        }=131410ae=13154/a>        if (4a href="+code=tb" class="sref">tb10ae[4a href="+code=FRA_OIFNAME" class="sref">FRA_OIFNAME10ae]) {=13164/a>                struct14a href="+code=net_device" class="sref">net_device10ae *4a href="+code=dev" class="sref">dev10ae;=131710ae=13184/a>                4a href="+code=rule" class="sref">rule10ae->4a href="+code=oifindex" class="sref">oifindex4/a> = -1;=13194/a>                4a href="+code=nla_strlcpy" class="sref">nla_strlcpy10ae(4a href="+code=rule" class="sref">rule10ae->4a href="+code=oifnam
" class="sref">oifnam
4/a>, 4a href="+code=tb" class="sref">tb10ae[4a href="+code=FRA_OIFNAME" class="sref">FRA_OIFNAME10ae], 4a href="+code=IFNAMSIZ" class="sref">IFNAMSIZ4/a>);=13204/a>                4a href="+code=dev" class="sref">dev10ae = 4a href="+code=__dev_get_by_nam
" class="sref">__dev_get_by_nam
10ae(4a href="+code=net" class="sref">net4/a>, 4a href="+code=rule" class="sref">rule10ae->4a href="+code=oifnam
" class="sref">oifnam
4/a>);=13214/a>                if (4a href="+code=dev" class="sref">dev10ae)=13224/a>                        4a href="+code=rule" class="sref">rule10ae->4a href="+code=oifindex" class="sref">oifindex4/a> = 4a href="+code=dev" class="sref">dev10ae->4a href="+code=ifindex" class="sref">ifindex4/a>;=13234/a>        }=132410ae=13254/a>        if (4a href="+code=tb" class="sref">tb10ae[4a href="+code=FRA_FWMARK" class="sref">FRA_FWMARK10ae]) {=13264/a>                4a href="+code=rule" class="sref">rule10ae->4a href="+code=mark" class="sref">mark4/a> = 4a href="+code=nla_get_u32" class="sref">nla_get_u3210ae(4a href="+code=tb" class="sref">tb10ae[4a href="+code=FRA_FWMARK" class="sref">FRA_FWMARK10ae]);=13274/a>                if (4a href="+code=rule" class="sref">rule10ae->4a href="+code=mark" class="sref">mark4/a>)=13284/a>                        /* compatibility: if the mark value is non-zero all bits13294/a>                         * are compared unless a mask is explicitly specified.13304/a>                         */13314/a>                        4a href="+code=rule" class="sref">rule10ae->4a href="+code=mark_mask" class="sref">mark_mask4/a> = 0xFFFFFFFF;=13324/a>        }=13334/a>=13344/a>        if (4a href="+code=tb" class="sref">tb10ae[4a href="+code=FRA_FWMASK" class="sref">FRA_FWMASK10ae])=13354/a>                4a href="+code=rule" class="sref">rule10ae->4a href="+code=mark_mask" class="sref">mark_mask4/a> = 4a href="+code=nla_get_u32" class="sref">nla_get_u3210ae(4a href="+code=tb" class="sref">tb10ae[4a href="+code=FRA_FWMASK" class="sref">FRA_FWMASK10ae]);=133610ae=13374/a>        4a href="+code=rule" class="sref">rule10ae->4a href="+code=acvalu" class="sref">acvalu10ae = 4a href="+code=frh" class="sref">frh4/a>->4a href="+code=acvalu" class="sref">acvalu10ae;=13384/a>        4a href="+code=rule" class="sref">rule10ae->4a href="+code=flags" class="sref">flags4/a> = 4a href="+code=frh" class="sref">frh4/a>->4a href="+code=flags" class="sref">flags4/a>;=13394/a>        4a href="+code=rule" class="sref">rule10ae->4a href="+code=table" class="sref">table4/a> = 4a href="+code=frh_get_table" class="sref">frh_get_table10ae(4a href="+code=frh" class="sref">frh4/a>, 4a href="+code=tb" class="sref">tb10ae);=134010ae=13414/a>        if (!4a href="+code=tb" class="sref">tb10ae[4a href="+code=FRA_PRIORITY" class="sref">FRA_PRIORITY10ae] && 4a href="+code=ops" class="sref">ops10ae->4a href="+code=default_pref" class="sref">default_pref4/a>)=13424/a>                4a href="+code=rule" class="sref">rule10ae->4a href="+code=pref" class="sref">pref10ae = 4a href="+code=ops" class="sref">ops10ae->4a href="+code=default_pref" class="sref">default_pref4/a>(4a href="+code=ops" class="sref">ops10ae);=13434/a>=13444/a>        4a href="+code=err" class="sref">err10ae = -4a href="+code=EINVAL" class="sref">EINVAL10ae;=13454/a>        if (4a href="+code=tb" class="sref">tb10ae[4a href="+code=FRA_GOTO" class="sref">FRA_GOTO10ae]) {=13464/a>                if (4a href="+code=rule" class="sref">rule10ae->4a href="+code=acvalu" class="sref">acvalu10ae != 4a href="+code=FR_ACT_GOTO" class="sref">FR_ACT_GOTO10ae)=13474/a>                        goto14a href="+code=errout_free" class="sref">errout_free10ae;=134810ae=13494/a>                4a href="+code=rule" class="sref">rule10ae->4a href="+code=target" class="sref">target10ae = 4a href="+code=nla_get_u32" class="sref">nla_get_u3210ae(4a href="+code=tb" class="sref">tb10ae[4a href="+code=FRA_GOTO" class="sref">FRA_GOTO10ae]);=13504/a>                4span class="comment">/* Backward jumps are prohibited to1avoid endless loops */13514/a>                if (4a href="+code=rule" class="sref">rule10ae->4a href="+code=target" class="sref">target10ae <= 4a href="+code=rule" class="sref">rule10ae->4a href="+code=pref" class="sref">pref10ae)=13524/a>                        goto14a href="+code=errout_free" class="sref">errout_free10ae;=13534/a>=13544/a>                4a href="+code=list_for_each_entry" class="sref">list_for_each_entry10ae(4a href="+code=r" class="sref">r4/a>, &4a href="+code=ops" class="sref">ops10ae->4a href="+code=rules_list" class="sref">rules_list10ae, 4a href="+code=list" class="sref">list10ae) {=13554/a>                        if (4a href="+code=r" class="sref">r4/a>->4a href="+code=pref" class="sref">pref10ae == 4a href="+code=rule" class="sref">rule10ae->4a href="+code=target" class="sref">target10ae) {=13564/a>                                4a href="+code=RCU_INIT_POINTER" class="sref">RCU_INIT_POINTER10ae(4a href="+code=rule" class="sref">rule10ae->4a href="+code=ctarget" class="sref">ctarget10ae, 4a href="+code=r" class="sref">r4/a>);=13574/a>                                break;=13584/a>                        }=13594/a>                }=136010ae=13614/a>                if (4a href="+code=rcu_dereference_protected" class="sref">rcu_dereference_protected10ae(4a href="+code=rule" class="sref">rule10ae->4a href="+code=ctarget" class="sref">ctarget10ae, 1) == 4a href="+code=NULL" class="sref">NULL4/a>)=13624/a>                        4a href="+code=unresolved" class="sref">unresolved10ae = 1;=13634/a>        } else if (4a href="+code=rule" class="sref">rule10ae->4a href="+code=acvalu" class="sref">acvalu10ae == 4a href="+code=FR_ACT_GOTO" class="sref">FR_ACT_GOTO10ae)=13644/a>                goto14a href="+code=errout_free" class="sref">errout_free10ae;=136510ae=13664/a>        4a href="+code=err" class="sref">err10ae = 4a href="+code=ops" class="sref">ops10ae->4a href="+code=configure" class="sref">configure10ae(4a href="+code=rule" class="sref">rule10ae, 4a href="+code=skb" class="sref">skb4/a>, 4a href="+code=frh" class="sref">frh4/a>, 4a href="+code=tb" class="sref">tb10ae);=13674/a>        if (4a href="+code=err" class="sref">err10ae < 0)=13684/a>                goto14a href="+code=errout_free" class="sref">errout_free10ae;=13694/a>=13704/a>        4a href="+code=list_for_each_entry" class="sref">list_for_each_entry10ae(4a href="+code=r" class="sref">r4/a>, &4a href="+code=ops" class="sref">ops10ae->4a href="+code=rules_list" class="sref">rules_list10ae, 4a href="+code=list" class="sref">list10ae) {=13714/a>                if (4a href="+code=r" class="sref">r4/a>->4a href="+code=pref" class="sref">pref10ae > 4a href="+code=rule" class="sref">rule10ae->4a href="+code=pref" class="sref">pref10ae)=13724/a>                        break;=13734/a>                4a href="+code=last" class="sref">last4/a> = 4a href="+code=r" class="sref">r4/a>;=13744/a>        }=137510ae=13764/a>        4a href="+code=fib_rule_get" class="sref">fib_rule_get10ae(4a href="+code=rule" class="sref">rule10ae);=137710ae=13784/a>        if (4a href="+code=last" class="sref">last4/a>)=13794/a>                4a href="+code=list_add_rcu" class="sref">list_add_rcu10ae(&4a href="+code=rule" class="sref">rule10ae->4a href="+code=list" class="sref">list10ae, &4a href="+code=last" class="sref">last4/a>->4a href="+code=list" class="sref">list10ae);=13804/a>        else=13814/a>                4a href="+code=list_add_rcu" class="sref">list_add_rcu10ae(&4a href="+code=rule" class="sref">rule10ae->4a href="+code=list" class="sref">list10ae, &4a href="+code=ops" class="sref">ops10ae->4a href="+code=rules_list" class="sref">rules_list10ae);=138210ae=13834/a>        if (4a href="+code=ops" class="sref">ops10ae->4a href="+code=unresolved_rules" class="sref">unresolved_rules10ae) {=13844/a>                4span class="comment">/*13854/a>                 * There are unresolved goto1rules in the list, check if138610ae                 * any of them are pointing to1this new1rule.13874/a>                 */13884/a>                4a href="+code=list_for_each_entry" class="sref">list_for_each_entry10ae(4a href="+code=r" class="sref">r4/a>, &4a href="+code=ops" class="sref">ops10ae->4a href="+code=rules_list" class="sref">rules_list10ae, 4a href="+code=list" class="sref">list10ae) {=13894/a>                        if (4a href="+code=r" class="sref">r4/a>->4a href="+code=acvalu" class="sref">acvalu10ae == 4a href="+code=FR_ACT_GOTO" class="sref">FR_ACT_GOTO10ae &&=13904/a>                            4a href="+code=r" class="sref">r4/a>->4a href="+code=target" class="sref">target10ae == 4a href="+code=rule" class="sref">rule10ae->4a href="+code=pref" class="sref">pref10ae &&=13914/a>                            4a href="+code=rtnl_dereference" class="sref">rtnl_dereference10ae(4a href="+code=r" class="sref">r4/a>->4a href="+code=ctarget" class="sref">ctarget10ae) == 4a href="+code=NULL" class="sref">NULL4/a>) {=13924/a>                                4a href="+code=rcu_assign_pointer" class="sref">rcu_assign_pointer10ae(4a href="+code=r" class="sref">r4/a>->4a href="+code=ctarget" class="sref">ctarget10ae, 4a href="+code=rule" class="sref">rule10ae);=13934/a>                                if (--4a href="+code=ops" class="sref">ops10ae->4a href="+code=unresolved_rules" class="sref">unresolved_rules10ae == 0)=13944/a>                                        break;=13954/a>                        }=13964/a>                }=13974/a>        }=139810ae=13994/a>        if (4a href="+code=rule" class="sref">rule10ae->4a href="+code=acvalu" class="sref">acvalu10ae == 4a href="+code=FR_ACT_GOTO" class="sref">FR_ACT_GOTO10ae)=14004/a>                4a href="+code=ops" class="sref">ops10ae->4a href="+code=nr_goto_rules" class="sref">nr_goto_rules10ae++;=14014/a>=14024/a>        if (4a href="+code=unresolved" class="sref">unresolved10ae)=14034/a>                4a href="+code=ops" class="sref">ops10ae->4a href="+code=unresolved_rules" class="sref">unresolved_rules10ae++;=140410ae=14054/a>        4a href="+code=notify_rule_change" class="sref">notify_rule_change10ae(4a href="+code=RTM_NEWRULE" class="sref">RTM_NEWRULE10ae, 4a href="+code=rule" class="sref">rule10ae, 4a href="+code=ops" class="sref">ops10ae, 4a href="+code=nlh" class="sref">nlh4/a>, 4a href="+code=NETLINK_CB" class="sref">NETLINK_CB10ae(4a href="+code=skb" class="sref">skb4/a>).4a href="+code=portid" class="sref">portid10ae);=14064/a>        4a href="+code=flush_route_cache" class="sref">flush_route_cache10ae(4a href="+code=ops" class="sref">ops10ae);=14074/a>        4a href="+code=rules_ops_put" class="sref">rules_ops_put10ae(4a href="+code=ops" class="sref">ops10ae);=14084/a>        return 0;=14094/a>=14104/a>4a href="+code=errout_free" class="sref">errout_free10ae:=14114/a>        4a href="+code=release_net" class="sref">release_net10ae(4a href="+code=rule" class="sref">rule10ae->4a href="+code=fr_net" class="sref">fr_net10ae);=14124/a>        4a href="+code=kfree" class="sref">kfree10ae(4a href="+code=rule" class="sref">rule10ae);=14134/a>4a href="+code=errout" class="sref">errout10ae:=14144/a>        4a href="+code=rules_ops_put" class="sref">rules_ops_put10ae(4a href="+code=ops" class="sref">ops10ae);=14154/a>        return 4a href="+code=err" class="sref">err10ae;=14164/a>}=141710ae=14184/a>static int14a href="+code=fib_nl_delrule" class="sref">fib_nl_delrule10ae(struct14a href="+code=sk_buff" class="sref">sk_buff10ae *4a href="+code=skb" class="sref">skb4/a>, struct14a href="+code=nlmsghdr" class="sref">nlmsghdr4/a>*14a href="+code=nlh" class="sref">nlh4/a>, void *4a href="+code=arg" class="sref">arg10ae)=14194/a>{=14204/a>        struct14a href="+code=net" class="sref">net4/a> *4a href="+code=net" class="sref">net4/a> = 4a href="+code=sock_net" class="sref">sock_net10ae(4a href="+code=skb" class="sref">skb4/a>->4a href="+code=sk" class="sref">sk10ae);=14214/a>        struct14a href="+code=fib_rule_hdr" class="sref">fib_rule_hdr10ae *4a href="+code=frh" class="sref">frh4/a> = 4a href="+code=nlmsg_data" class="sref">nlmsg_data10ae(4a href="+code=nlh" class="sref">nlh4/a>);=14224/a>        struct14a href="+code=fib_rules_ops" class="sref">fib_rules_ops10ae *4a href="+code=ops" class="sref">ops10ae = 4a href="+code=NULL" class="sref">NULL4/a>;=14234/a>        struct14a href="+code=fib_rule" class="sref">fib_rule10ae *4a href="+code=rule" class="sref">rule10ae, *4a href="+code=tmp" class="sref">tmp4/a>;=14244/a>        struct14a href="+code=nlattr" class="sref">nlattr10ae *4a href="+code=tb" class="sref">tb10ae[4a href="+code=FRA_MAX" class="sref">FRA_MAX10ae+1];=14254/a>        int14a href="+code=err" class="sref">err10ae = -4a href="+code=EINVAL" class="sref">EINVAL10ae;=142610ae=14274/a>        if (4a href="+code=nlh" class="sref">nlh4/a>->4a href="+code=nlmsg_leu" class="sref">nlmsg_leu10ae < 4a href="+code=nlmsg_msg_size" class="sref">nlmsg_msg_size10ae(sizeof(*4a href="+code=frh" class="sref">frh4/a>)))=14284/a>                goto14a href="+code=errout" class="sref">errout10ae;=14294/a>=14304/a>        4a href="+code=ops" class="sref">ops10ae = 4a href="+code=lookup_rules_ops" class="sref">lookup_rules_ops10ae(4a href="+code=net" class="sref">net4/a>, 4a href="+code=frh" class="sref">frh4/a>->4a href="+code=family" class="sref">family10ae);=14314/a>        if (4a href="+code=ops" class="sref">ops10ae == 4a href="+code=NULL" class="sref">NULL4/a>) {=14324/a>                4a href="+code=err" class="sref">err10ae = -4a href="+code=EAFNOSUPPORT" class="sref">EAFNOSUPPORT10ae;=14334/a>                goto14a href="+code=errout" class="sref">errout10ae;=14344/a>        }=143510ae=14364/a>        4a href="+code=err" class="sref">err10ae = 4a href="+code=nlmsg_parse" class="sref">nlmsg_parse10ae(4a href="+code=nlh" class="sref">nlh4/a>, sizeof(*4a href="+code=frh" class="sref">frh4/a>), 4a href="+code=tb" class="sref">tb10ae, 4a href="+code=FRA_MAX" class="sref">FRA_MAX10ae, 4a href="+code=ops" class="sref">ops10ae->4a href="+code=policy" class="sref">policy10ae);=14374/a>        if (4a href="+code=err" class="sref">err10ae < 0)=14384/a>                goto14a href="+code=errout" class="sref">errout10ae;=14394/a>=14404/a>        4a href="+code=err" class="sref">err10ae = 4a href="+code=validate_rulemsg" class="sref">validate_rulemsg10ae(4a href="+code=frh" class="sref">frh4/a>, 4a href="+code=tb" class="sref">tb10ae, 4a href="+code=ops" class="sref">ops10ae);=14414/a>        if (4a href="+code=err" class="sref">err10ae < 0)=14424/a>                goto14a href="+code=errout" class="sref">errout10ae;=14434/a>=14444/a>        4a href="+code=list_for_each_entry" class="sref">list_for_each_entry10ae(4a href="+code=rule" class="sref">rule10ae, &4a href="+code=ops" class="sref">ops10ae->4a href="+code=rules_list" class="sref">rules_list10ae, 4a href="+code=list" class="sref">list10ae) {=14454/a>                if (4a href="+code=frh" class="sref">frh4/a>->4a href="+code=acvalu" class="sref">acvalu10ae && (4a href="+code=frh" class="sref">frh4/a>->4a href="+code=acvalu" class="sref">acvalu10ae != 4a href="+code=rule" class="sref">rule10ae->4a href="+code=acvalu" class="sref">acvalu10ae))=14464/a>                        continue;=144710ae=14484/a>                if (4a href="+code=frh" class="sref">frh4/a>->4a href="+code=table" class="sref">table4/a> && (4a href="+code=frh_get_table" class="sref">frh_get_table10ae(4a href="+code=frh" class="sref">frh4/a>, 4a href="+code=tb" class="sref">tb10ae) != 4a href="+code=rule" class="sref">rule10ae->4a href="+code=table" class="sref">table4/a>))=14494/a>                        continue;=145010ae=14514/a>                if (4a href="+code=tb" class="sref">tb10ae[4a href="+code=FRA_PRIORITY" class="sref">FRA_PRIORITY10ae] &&=14524/a>                    (4a href="+code=rule" class="sref">rule10ae->4a href="+code=pref" class="sref">pref10ae != 4a href="+code=nla_get_u32" class="sref">nla_get_u3210ae(4a href="+code=tb" class="sref">tb10ae[4a href="+code=FRA_PRIORITY" class="sref">FRA_PRIORITY10ae])))=14534/a>                        continue;=145410ae=14554/a>                if (4a href="+code=tb" class="sref">tb10ae[4a href="+code=FRA_IIFNAME" class="sref">FRA_IIFNAME10ae] &&=14564/a>                    4a href="+code=nla_strcmp" class="sref">nla_strcmp10ae(4a href="+code=tb" class="sref">tb10ae[4a href="+code=FRA_IIFNAME" class="sref">FRA_IIFNAME10ae], 4a href="+code=rule" class="sref">rule10ae->4a href="+code=iifnam
" class="sref">iifnam
4/a>))=14574/a>                        continue;=145810ae=14594/a>                if (4a href="+code=tb" class="sref">tb10ae[4a href="+code=FRA_OIFNAME" class="sref">FRA_OIFNAME10ae] &&=14604/a>                    4a href="+code=nla_strcmp" class="sref">nla_strcmp10ae(4a href="+code=tb" class="sref">tb10ae[4a href="+code=FRA_OIFNAME" class="sref">FRA_OIFNAME10ae], 4a href="+code=rule" class="sref">rule10ae->4a href="+code=oifnam
" class="sref">oifnam
4/a>))=14614/a>                        continue;=146210ae=14634/a>                if (4a href="+code=tb" class="sref">tb10ae[4a href="+code=FRA_FWMARK" class="sref">FRA_FWMARK10ae] &&=14644/a>                    (4a href="+code=rule" class="sref">rule10ae->4a href="+code=mark" class="sref">mark4/a> != 4a href="+code=nla_get_u32" class="sref">nla_get_u3210ae(4a href="+code=tb" class="sref">tb10ae[4a href="+code=FRA_FWMARK" class="sref">FRA_FWMARK10ae])))=14654/a>                        continue;=146610ae=14674/a>                if (4a href="+code=tb" class="sref">tb10ae[4a href="+code=FRA_FWMASK" class="sref">FRA_FWMASK10ae] &&=14684/a>                    (4a href="+code=rule" class="sref">rule10ae->4a href="+code=mark_mask" class="sref">mark_mask4/a> != 4a href="+code=nla_get_u32" class="sref">nla_get_u3210ae(4a href="+code=tb" class="sref">tb10ae[4a href="+code=FRA_FWMASK" class="sref">FRA_FWMASK10ae])))=14694/a>                        continue;=147010ae=14714/a>                if (!4a href="+code=ops" class="sref">ops10ae->4a href="+code=compare" class="sref">compare10ae(4a href="+code=rule" class="sref">rule10ae, 4a href="+code=frh" class="sref">frh4/a>, 4a href="+code=tb" class="sref">tb10ae))=14724/a>                        continue;=14734/a>=14744/a>                if (4a href="+code=rule" class="sref">rule10ae->4a href="+code=flags" class="sref">flags4/a> & 4a href="+code=FIB_RULE_PERMANENT" class="sref">FIB_RULE_PERMANENT10ae) {=14754/a>                        4a href="+code=err" class="sref">err10ae = -4a href="+code=EPERM" class="sref">EPERM10ae;=14764/a>                        goto14a href="+code=errout" class="sref">errout10ae;=14774/a>                }=147810ae=14794/a>                4a href="+code=list_del_rcu" class="sref">list_del_rcu10ae(&4a href="+code=rule" class="sref">rule10ae->4a href="+code=list" class="sref">list10ae);=148010ae=14814/a>                if (4a href="+code=rule" class="sref">rule10ae->4a href="+code=acvalu" class="sref">acvalu10ae == 4a href="+code=FR_ACT_GOTO" class="sref">FR_ACT_GOTO10ae) {=14824/a>                        4a href="+code=ops" class="sref">ops10ae->4a href="+code=nr_goto_rules" class="sref">nr_goto_rules10ae--;=14834/a>                        if (4a href="+code=rtnl_dereference" class="sref">rtnl_dereference10ae(4a href="+code=rule" class="sref">rule10ae->4a href="+code=ctarget" class="sref">ctarget10ae) == 4a href="+code=NULL" class="sref">NULL4/a>)=14844/a>                                4a href="+code=ops" class="sref">ops10ae->4a href="+code=unresolved_rules" class="sref">unresolved_rules10ae--;=14854/a>                }=148610ae=14874/a>                4span class="comment">/*14884/a>                 * Check if1this rule is a target to1any of them. If so,14894/a>                 * disable them. As1this operavalu is eventually very10spane=14904/a>                 * expensive, it is only performed if1goto1rules have10spane=14914/a>                 * actually been added.14924/a>                 */14934/a>                if (4a href="+code=ops" class="sref">ops10ae->4a href="+code=nr_goto_rules" class="sref">nr_goto_rules10ae > 0) {=14944/a>                        4a href="+code=list_for_each_entry" class="sref">list_for_each_entry10ae(4a href="+code=tmp" class="sref">tmp4/a>, &4a href="+code=ops" class="sref">ops10ae->4a href="+code=rules_list" class="sref">rules_list10ae, 4a href="+code=list" class="sref">list10ae) {=14954/a>                                if (4a href="+code=rtnl_dereference" class="sref">rtnl_dereference10ae(4a href="+code=tmp" class="sref">tmp4/a>->4a href="+code=ctarget" class="sref">ctarget10ae) == 4a href="+code=rule" class="sref">rule10ae) {=14964/a>                                        4a href="+code=RCU_INIT_POINTER" class="sref">RCU_INIT_POINTER10ae(4a href="+code=tmp" class="sref">tmp4/a>->4a href="+code=ctarget" class="sref">ctarget10ae, 4a href="+code=NULL" class="sref">NULL4/a>);=14974/a>                                        4a href="+code=ops" class="sref">ops10ae->4a href="+code=unresolved_rules" class="sref">unresolved_rules10ae++;=14984/a>                                }=14994/a>                        }=15004/a>                }=15014/a>=15024/a>                4a href="+code=notify_rule_change" class="sref">notify_rule_change10ae(4a href="+code=RTM_DELRULE" class="sref">RTM_DELRULE10ae, 4a href="+code=rule" class="sref">rule10ae, 4a href="+code=ops" class="sref">ops10ae, 4a href="+code=nlh" class="sref">nlh4/a>,=15034/a>                                   4a href="+code=NETLINK_CB" class="sref">NETLINK_CB10ae(4a href="+code=skb" class="sref">skb4/a>).4a href="+code=portid" class="sref">portid10ae);=15044/a>                if (4a href="+code=ops" class="sref">ops10ae->4a href="+code=delete" class="sref">delete4/a>)=15054/a>                        4a href="+code=ops" class="sref">ops10ae->4a href="+code=delete" class="sref">delete4/a>(4a href="+code=rule" class="sref">rule10ae);=15064/a>                4a href="+code=fib_rule_put" class="sref">fib_rule_put4/a>(4a href="+code=rule" class="sref">rule10ae);=15074/a>                4a href="+code=flush_route_cache" class="sref">flush_route_cache10ae(4a href="+code=ops" class="sref">ops10ae);=15084/a>                4a href="+code=rules_ops_put" class="sref">rules_ops_put10ae(4a href="+code=ops" class="sref">ops10ae);=15094/a>                return 0;=15104/a>        }=15114/a>=15124/a>        4a href="+code=err" class="sref">err10ae = -4a href="+code=ENOENT" class="sref">ENOENT10ae;=15134/a>4a href="+code=errout" class="sref">errout10ae:=15144/a>        4a href="+code=rules_ops_put" class="sref">rules_ops_put10ae(4a href="+code=ops" class="sref">ops10ae);=15154/a>        return 4a href="+code=err" class="sref">err10ae;=15164/a>}=151710ae=15184/a>static 4a href="+code=inline" class="sref">inline4/a> 4a href="+code=size_t" class="sref">size_t4/a> 4a href="+code=fib_rule_nlmsg_size" class="sref">fib_rule_nlmsg_size10ae(struct14a href="+code=fib_rules_ops" class="sref">fib_rules_ops10ae *4a href="+code=ops" class="sref">ops10ae,=15194/a>                                         struct14a href="+code=fib_rule" class="sref">fib_rule10ae *4a href="+code=rule" class="sref">rule10ae)=15204/a>{=15214/a>        4a href="+code=size_t" class="sref">size_t4/a> 4a href="+code=payload" class="sref">payload10ae = 4a href="+code=NLMSG_ALIGN" class="sref">NLMSG_ALIGN10ae(sizeof(struct14a href="+code=fib_rule_hdr" class="sref">fib_rule_hdr10ae))=15224/a>                         + 4a href="+code=nla_total_size" class="sref">nla_total_size10ae(4a href="+code=IFNAMSIZ" class="sref">IFNAMSIZ10ae) 4span class="comment">/* FRA_IIFNAME */15234/a>                         + 4a href="+code=nla_total_size" class="sref">nla_total_size10ae(4a href="+code=IFNAMSIZ" class="sref">IFNAMSIZ10ae) 4span class="comment">/* FRA_OIFNAME */15244/a>                         + 4a href="+code=nla_total_size" class="sref">nla_total_size10ae(4) 4span class="comment">/* FRA_PRIORITY */15254/a>                         + 4a href="+code=nla_total_size" class="sref">nla_total_size10ae(4) 4span class="comment">/* FRA_TABLE */15264/a>                         + 4a href="+code=nla_total_size" class="sref">nla_total_size10ae(4) 4span class="comment">/* FRA_FWMARK */15274/a>                         + 4a href="+code=nla_total_size" class="sref">nla_total_size10ae(4); 4span class="comment">/* FRA_FWMASK */152810ae=15294/a>        if (4a href="+code=ops" class="sref">ops10ae->4a href="+code=nlmsg_payload" class="sref">nlmsg_payload10ae)=15304/a>                4a href="+code=payload" class="sref">payload10ae += 4a href="+code=ops" class="sref">ops10ae->4a href="+code=nlmsg_payload" class="sref">nlmsg_payload10ae(4a href="+code=rule" class="sref">rule10ae);=15314/a>=15324/a>        return 4a href="+code=payload" class="sref">payload10ae;=15334/a>}=153410ae=153510aestatic int14a href="+code=fib_nl_fill_rule" class="sref">fib_nl_fill_rule10ae(struct14a href="+code=sk_buff" class="sref">sk_buff10ae *4a href="+code=skb" class="sref">skb4/a>, struct14a href="+code=fib_rule" class="sref">fib_rule10ae *4a href="+code=rule" class="sref">rule10ae,=15364/a>                            4a href="+code=u32" class="sref">u3210ae 4a href="+code=pid" class="sref">pid10ae, 4a href="+code=u32" class="sref">u3210ae 4a href="+code=seq" class="sref">seq10ae, int14a href="+code=type" class="sref">type10ae, int14a href="+code=flags" class="sref">flags4/a>,=15374/a>                            struct14a href="+code=fib_rules_ops" class="sref">fib_rules_ops10ae *4a href="+code=ops" class="sref">ops10ae)=15384/a>{=15394/a>        struct14a href="+code=nlmsghdr" class="sref">nlmsghdr4/a> *4a href="+code=nlh" class="sref">nlh4/a>;=15404/a>        struct14a href="+code=fib_rule_hdr" class="sref">fib_rule_hdr10ae *4a href="+code=frh" class="sref">frh4/a>;=15414/a>=15424/a>        4a href="+code=nlh" class="sref">nlh4/a> = 4a href="+code=nlmsg_put" class="sref">nlmsg_put10ae(4a href="+code=skb" class="sref">skb4/a>, 4a href="+code=pid" class="sref">pid10ae, 4a href="+code=seq" class="sref">seq10ae, 4a href="+code=type" class="sref">type10ae, sizeof(*4a href="+code=frh" class="sref">frh4/a>), 4a href="+code=flags" class="sref">flags4/a>);=15434/a>        if (4a href="+code=nlh" class="sref">nlh4/a> == 4a href="+code=NULL" class="sref">NULL4/a>)=15444/a>                return -4a href="+code=EMSGSIZE" class="sref">EMSGSIZE4/a>;=154510ae=15464/a>        4a href="+code=frh" class="sref">frh4/a> = 4a href="+code=nlmsg_data" class="sref">nlmsg_data10ae(4a href="+code=nlh" class="sref">nlh4/a>);=15474/a>        4a href="+code=frh" class="sref">frh4/a>->4a href="+code=family" class="sref">family10ae = 4a href="+code=ops" class="sref">ops10ae->4a href="+code=family" class="sref">family10ae;=15484/a>        4a href="+code=frh" class="sref">frh4/a>->4a href="+code=table" class="sref">table4/a> = 4a href="+code=rule" class="sref">rule10ae->4a href="+code=table" class="sref">table4/a>;=15494/a>        if (4a href="+code=nla_put_u32" class="sref">nla_put_u3210ae(4a href="+code=skb" class="sref">skb4/a>, 4a href="+code=FRA_TABLE" class="sref">FRA_TABLE4/a>, 4a href="+code=rule" class="sref">rule10ae->4a href="+code=table" class="sref">table4/a>))=15504/a>                goto14a href="+code=nla_put_failure" class="sref">nla_put_failure4/a>;=15514/a>        4a href="+code=frh" class="sref">frh4/a>->4a href="+code=res1" class="sref">res14/a> = 0;=15524/a>        4a href="+code=frh" class="sref">frh4/a>->4a href="+code=res2" class="sref">res24/a> = 0;=15534/a>        4a href="+code=frh" class="sref">frh4/a>->4a href="+code=acvalu" class="sref">acvalu10ae = 4a href="+code=rule" class="sref">rule10ae->4a href="+code=acvalu" class="sref">acvalu10ae;=15544/a>        4a href="+code=frh" class="sref">frh4/a>->4a href="+code=flags" class="sref">flags4/a> = 4a href="+code=rule" class="sref">rule10ae->4a href="+code=flags" class="sref">flags4/a>;=155510ae=15564/a>        if (4a href="+code=rule" class="sref">rule10ae->4a href="+code=acvalu" class="sref">acvalu10ae == 4a href="+code=FR_ACT_GOTO" class="sref">FR_ACT_GOTO10ae &&=15574/a>            4a href="+code=rcu_access_pointer" class="sref">rcu_access_pointer10ae(4a href="+code=rule" class="sref">rule10ae->4a href="+code=ctarget" class="sref">ctarget10ae) == 4a href="+code=NULL" class="sref">NULL4/a>)=15584/a>                4a href="+code=frh" class="sref">frh4/a>->4a href="+code=flags" class="sref">flags4/a> |= 4a href="+code=FIB_RULE_UNRESOLVED" class="sref">FIB_RULE_UNRESOLVED4/a>;=15594/a>=15604/a>        if (4a href="+code=rule" class="sref">rule10ae->4a href="+code=iifnam
" class="sref">iifnam
4/a>[0]) {=15614/a>                if (4a href="+code=nla_put_string" class="sref">nla_put_string10ae(4a href="+code=skb" class="sref">skb4/a>, 4a href="+code=FRA_IIFNAME" class="sref">FRA_IIFNAME10ae, 4a href="+code=rule" class="sref">rule10ae->4a href="+code=iifnam
" class="sref">iifnam
4/a>))=15624/a>                        goto14a href="+code=nla_put_failure" class="sref">nla_put_failure4/a>;=15634/a>                if (4a href="+code=rule" class="sref">rule10ae->4a href="+code=iifindex" class="sref">iifindex10ae == -1)=15644/a>                        4a href="+code=frh" class="sref">frh4/a>->4a href="+code=flags" class="sref">flags4/a> |= 4a href="+code=FIB_RULE_IIF_DETACHED" class="sref">FIB_RULE_IIF_DETACHED4/a>;=15654/a>        }=156610ae=15674/a>        if (4a href="+code=rule" class="sref">rule10ae->4a href="+code=oifnam
" class="sref">oifnam
4/a>[0]) {=15684/a>                if (4a href="+code=nla_put_string" class="sref">nla_put_string10ae(4a href="+code=skb" class="sref">skb4/a>, 4a href="+code=FRA_OIFNAME" class="sref">FRA_OIFNAME10ae, 4a href="+code=rule" class="sref">rule10ae->4a href="+code=oifnam
" class="sref">oifnam
4/a>))=15694/a>                        goto14a href="+code=nla_put_failure" class="sref">nla_put_failure4/a>;=15704/a>                if (4a href="+code=rule" class="sref">rule10ae->4a href="+code=oifindex" class="sref">oifindex10ae == -1)=15714/a>                        4a href="+code=frh" class="sref">frh4/a>->4a href="+code=flags" class="sref">flags4/a> |= 4a href="+code=FIB_RULE_OIF_DETACHED" class="sref">FIB_RULE_OIF_DETACHED4/a>;=15724/a>        }=15734/a>=15744/a>        if ((4a href="+code=rule" class="sref">rule10ae->4a href="+code=pref" class="sref">pref10ae &&=15754/a>             4a href="+code=nla_put_u32" class="sref">nla_put_u3210ae(4a href="+code=skb" class="sref">skb4/a>, 4a href="+code=FRA_PRIORITY" class="sref">FRA_PRIORITY10ae, 4a href="+code=rule" class="sref">rule10ae->4a href="+code=pref" class="sref">pref10ae)) ||=15764/a>            (4a href="+code=rule" class="sref">rule10ae->4a href="+code=mark" class="sref">mark4/a> &&=15774/a>             4a href="+code=nla_put_u32" class="sref">nla_put_u3210ae(4a href="+code=skb" class="sref">skb4/a>, 4a href="+code=FRA_FWMARK" class="sref">FRA_FWMARK10ae, 4a href="+code=rule" class="sref">rule10ae->4a href="+code=mark" class="sref">mark4/a>)) ||=15784/a>            ((4a href="+code=rule" class="sref">rule10ae->4a href="+code=mark_mask" class="sref">mark_mask4/a> || 4a href="+code=rule" class="sref">rule10ae->4a href="+code=mark" class="sref">mark4/a>) &&=15794/a>             4a href="+code=nla_put_u32" class="sref">nla_put_u3210ae(4a href="+code=skb" class="sref">skb4/a>, 4a href="+code=FRA_FWMASK" class="sref">FRA_FWMASK10ae, 4a href="+code=rule" class="sref">rule10ae->4a href="+code=mark_mask" class="sref">mark_mask4/a>)) ||=15804/a>            (4a href="+code=rule" class="sref">rule10ae->4a href="+code=target" class="sref">target10ae &&=15814/a>             4a href="+code=nla_put_u32" class="sref">nla_put_u3210ae(4a href="+code=skb" class="sref">skb4/a>, 4a href="+code=FRA_GOTO" class="sref">FRA_GOTO10ae, 4a href="+code=rule" class="sref">rule10ae->4a href="+code=target" class="sref">target10ae)))=15824/a>                goto14a href="+code=nla_put_failure" class="sref">nla_put_failure4/a>;=15834/a>        if (4a href="+code=ops" class="sref">ops10ae->4a href="+code=fill" class="sref">fill10ae(4a href="+code=rule" class="sref">rule10ae, 4a href="+code=skb" class="sref">skb4/a>, 4a href="+code=frh" class="sref">frh4/a>) < 0)=15844/a>                goto14a href="+code=nla_put_failure" class="sref">nla_put_failure4/a>;=158510ae=15864/a>        return 4a href="+code=nlmsg_end" class="sref">nlmsg_end10ae(4a href="+code=skb" class="sref">skb4/a>, 4a href="+code=nlh" class="sref">nlh4/a>);=158710ae=15884/a>nla_put_failure4/a>:=15894/a>        4a href="+code=nlmsg_cancel" class="sref">nlmsg_cancel10ae(4a href="+code=skb" class="sref">skb4/a>, 4a href="+code=nlh" class="sref">nlh4/a>);=15904/a>        return -4a href="+code=EMSGSIZE" class="sref">EMSGSIZE4/a>;=15914/a>}=159210ae=15934/a>static int14a href="+code=dump_rules" class="sref">dump_rules10ae(struct14a href="+code=sk_buff" class="sref">sk_buff10ae *4a href="+code=skb" class="sref">skb4/a>, struct14a href="+code=netlink_callback" class="sref">netlink_callback10ae *4a href="+code=cb" class="sref">cb4/a>,=15944/a>                      struct14a href="+code=fib_rules_ops" class="sref">fib_rules_ops10ae *4a href="+code=ops" class="sref">ops10ae)=15954/a>{=15964/a>        int14a href="+code=idx" class="sref">idx10ae = 0;=15974/a>        struct14a href="+code=fib_rule" class="sref">fib_rule10ae *4a href="+code=rule" class="sref">rule10ae;=159810ae=15994/a>        4a href="+code=rcu_read_lock" class="sref">rcu_read_lock10ae();=16004/a>        4a href="+code=list_for_each_entry_rcu" class="sref">list_for_each_entry_rcu10ae(4a href="+code=rule" class="sref">rule10ae, &4a href="+code=ops" class="sref">ops10ae->4a href="+code=rules_list" class="sref">rules_list10ae, 4a href="+code=list" class="sref">list10ae) {=16014/a>                if (4a href="+code=idx" class="sref">idx10ae < 4a href="+code=cb" class="sref">cb4/a>->4a href="+code=args" class="sref">args4/a>[1])=16024/a>                        goto14a href="+code=skip" class="sref">skip10ae;=16034/a>=16044/a>                if (4a href="+code=fib_nl_fill_rule" class="sref">fib_nl_fill_rule10ae(4a href="+code=skb" class="sref">skb4/a>, 4a href="+code=rule" class="sref">rule10ae, 4a href="+code=NETLINK_CB" class="sref">NETLINK_CB10ae(4a href="+code=cb" class="sref">cb4/a>->4a href="+code=skb" class="sref">skb4/a>).4a href="+code=portid" class="sref">portid10ae,=16054/a>                                     4a href="+code=cb" class="sref">cb4/a>->4a href="+code=nlh" class="sref">nlh4/a>->4a href="+code=nlmsg_seq" class="sref">nlmsg_seq10ae, 4a href="+code=RTM_NEWRULE" class="sref">RTM_NEWRULE10ae,=16064/a>                                     4a href="+code=NLM_F_MULTI" class="sref">NLM_F_MULTI10ae, 4a href="+code=ops" class="sref">ops10ae) < 0)=16074/a>                        break;=16084/a>skip10ae:=16094/a>                4a href="+code=idx" class="sref">idx10ae++;=16104/a>        }=16114/a>        4a href="+code=rcu_read_unlock" class="sref">rcu_read_unlock10ae();=16124/a>        4a href="+code=cb" class="sref">cb4/a>->4a href="+code=args" class="sref">args4/a>[1] = 4a href="+code=idx" class="sref">idx10ae;=16134/a>        4a href="+code=rules_ops_put" class="sref">rules_ops_put10ae(4a href="+code=ops" class="sref">ops10ae);=161410ae=16154/a>        return 4a href="+code=skb" class="sref">skb4/a>->4a href="+code=leu" class="sref">leu10ae;=16164/a>}=161710ae=16184/a>static int14a href="+code=fib_nl_dumprule" class="sref">fib_nl_dumprule10ae(struct14a href="+code=sk_buff" class="sref">sk_buff10ae *4a href="+code=skb" class="sref">skb4/a>, struct14a href="+code=netlink_callback" class="sref">netlink_callback10ae *4a href="+code=cb" class="sref">cb4/a>)=16194/a>{=16204/a>        struct14a href="+code=net" class="sref">net10ae *4a href="+code=net" class="sref">net10ae = 4a href="+code=sock_net" class="sref">sock_net10ae(4a href="+code=skb" class="sref">skb4/a>->4a href="+code=sk" class="sref">sk10ae);=16214/a>        struct14a href="+code=fib_rules_ops" class="sref">fib_rules_ops10ae *4a href="+code=ops" class="sref">ops10ae;=16224/a>        int14a href="+code=idx" class="sref">idx10ae = 0, 4a href="+code=family" class="sref">family10ae;=16234/a>=16244/a>        4a href="+code=family" class="sref">family10ae = 4a href="+code=rtnl_msg_family" class="sref">rtnl_msg_family10ae(4a href="+code=cb" class="sref">cb4/a>->4a href="+code=nlh" class="sref">nlh4/a>);=16254/a>        if (4a href="+code=family" class="sref">family10ae != 4a href="+code=AF_UNSPEC" class="sref">AF_UNSPEC10ae) {=16264/a>                4span class="comment">/* Protocol specific dump request */16274/a>                4a href="+code=ops" class="sref">ops10ae = 4a href="+code=lookup_rules_ops" class="sref">lookup_rules_ops10ae(4a href="+code=net" class="sref">net10ae, 4a href="+code=family" class="sref">family10ae);=16284/a>                if (4a href="+code=ops" class="sref">ops10ae == 4a href="+code=NULL" class="sref">NULL4/a>)=16294/a>                        return -4a href="+code=EAFNOSUPPORT" class="sref">EAFNOSUPPORT10ae;=163010ae=16314/a>                return 4a href="+code=dump_rules" class="sref">dump_rules10ae(4a href="+code=skb" class="sref">skb4/a>, 4a href="+code=cb" class="sref">cb4/a>, 4a href="+code=ops" class="sref">ops10ae);=16324/a>        }=16334/a>=16344/a>        4a href="+code=rcu_read_lock" class="sref">rcu_read_lock10ae();=16354/a>        4a href="+code=list_for_each_entry_rcu" class="sref">list_for_each_entry_rcu10ae(4a href="+code=ops" class="sref">ops10ae, &4a href="+code=net" class="sref">net10ae->4a href="+code=rules_ops" class="sref">rules_ops10ae, 4a href="+code=list" class="sref">list10ae) {=16364/a>                if (4a href="+code=idx" class="sref">idx10ae < 4a href="+code=cb" class="sref">cb4/a>->4a href="+code=args" class="sref">args4/a>[0] || !4a href="+code=try_module_get" class="sref">try_module_get10ae(4a href="+code=ops" class="sref">ops10ae->4a href="+code=owner" class="sref">owner10ae))=16374/a>                        goto14a href="+code=skip" class="sref">skip10ae;=163810ae=16394/a>                if (4a href="+code=dump_rules" class="sref">dump_rules10ae(4a href="+code=skb" class="sref">skb4/a>, 4a href="+code=cb" class="sref">cb4/a>, 4a href="+code=ops" class="sref">ops10ae) < 0)=16404/a>                        break;=16414/a>=16424/a>                4a href="+code=cb" class="sref">cb4/a>->4a href="+code=args" class="sref">args4/a>[1] = 0;=16434/a>4a href="+code=skip" class="sref">skip10ae:=16444/a>                4a href="+code=idx" class="sref">idx10ae++;=16454/a>        }=16464/a>        4a href="+code=rcu_read_unlock" class="sref">rcu_read_unlock10ae();=16474/a>        4a href="+code=cb" class="sref">cb4/a>->4a href="+code=args" class="sref">args4/a>[0] = 4a href="+code=idx" class="sref">idx10ae;=164810ae=16494/a>        return 4a href="+code=skb" class="sref">skb4/a>->4a href="+code=leu" class="sref">leu10ae;=16504/a>}=16514/a>=16524/a>static void14a href="+code=notify_rule_change" class="sref">notify_rule_change10ae(int14a href="+code=event" class="sref">event4/a>, struct14a href="+code=fib_rule" class="sref">fib_rule10ae *4a href="+code=rule" class="sref">rule10ae,=16534/a>                               struct14a href="+code=fib_rules_ops" class="sref">fib_rules_ops10ae *4a href="+code=ops" class="sref">ops10ae, struct14a href="+code=nlmsghdr" class="sref">nlmsghdr4/a> *4a href="+code=nlh" class="sref">nlh4/a>,=16544/a>                               4a href="+code=u32" class="sref">u3210ae 4a href="+code=pid" class="sref">pid10ae)=16554/a>{=16564/a>        struct14a href="+code=net" class="sref">net10ae *4a href="+code=net" class="sref">net10ae;=16574/a>        struct14a href="+code=sk_buff" class="sref">sk_buff10ae *4a href="+code=skb" class="sref">skb4/a>;=16584/a>        int14a href="+code=err" class="sref">err10ae = -4a href="+code=ENOBUFS" class="sref">ENOBUFS4/a>;=16594/a>=16604/a>        4a href="+code=net" class="sref">net10ae = 4a href="+code=ops" class="sref">ops10ae->4a href="+code=fro_net" class="sref">fro_net4/a>;=16614/a>        4a href="+code=skb" class="sref">skb4/a> = 4a href="+code=nlmsg_new" class="sref">nlmsg_new10ae(4a href="+code=fib_rule_nlmsg_size" class="sref">fib_rule_nlmsg_size10ae(4a href="+code=ops" class="sref">ops10ae, 4a href="+code=rule" class="sref">rule10ae), 4a href="+code=GFP_KERNEL" class="sref">GFP_KERNEL10ae);=16624/a>        if (4a href="+code=skb" class="sref">skb4/a> == 4a href="+code=NULL" class="sref">NULL4/a>)=16634/a>                goto14a href="+code=errout" class="sref">errout10ae;=166410ae=16654/a>        4a href="+code=err" class="sref">err10ae = 4a href="+code=fib_nl_fill_rule" class="sref">fib_nl_fill_rule10ae(4a href="+code=skb" class="sref">skb4/a>, 4a href="+code=rule" class="sref">rule10ae, 4a href="+code=pid" class="sref">pid10ae, 4a href="+code=nlh" class="sref">nlh4/a>->4a href="+code=nlmsg_seq" class="sref">nlmsg_seq10ae, 4a href="+code=event" class="sref">event4/a>, 0, 4a href="+code=ops" class="sref">ops10ae);=16664/a>        if (4a href="+code=err" class="sref">err10ae < 0) {=16674/a>                4span class="comment">/* -EMSGSIZE implies BUG in fib_rule_nlmsg_size() */16684/a>                4a href="+code=WARN_ON" class="sref">WARN_ON10ae(4a href="+code=err" class="sref">err10ae == -4a href="+code=EMSGSIZE" class="sref">EMSGSIZE4/a>);=16694/a>                4a href="+code=kfree_skb" class="sref">kfree_skb10ae(4a href="+code=skb" class="sref">skb4/a>);=16704/a>                goto14a href="+code=errout" class="sref">errout10ae;=16714/a>        }=167210ae=16734/a>        4a href="+code=rtnl_notify" class="sref">rtnl_notify10ae(4a href="+code=skb" class="sref">skb4/a>, 4a href="+code=net" class="sref">net10ae, 4a href="+code=pid" class="sref">pid10ae, 4a href="+code=ops" class="sref">ops10ae->4a href="+code=nlgroup" class="sref">nlgroup10ae, 4a href="+code=nlh" class="sref">nlh4/a>, 4a href="+code=GFP_KERNEL" class="sref">GFP_KERNEL10ae);=16744/a>        return;=16754/a>4a href="+code=errout" class="sref">errout10ae:=16764/a>        if (4a href="+code=err" class="sref">err10ae < 0)=16774/a>                4a href="+code=rtnl_set_sk_err" class="sref">rtnl_set_sk_err10ae(4a href="+code=net" class="sref">net10ae, 4a href="+code=ops" class="sref">ops10ae->4a href="+code=nlgroup" class="sref">nlgroup10ae, 4a href="+code=err" class="sref">err10ae);=16784/a>}=16794/a>=16804/a>static void14a href="+code=attach_rules" class="sref">attach_rules10ae(struct14a href="+code=list_head" class="sref">list_head10ae *4a href="+code=rules" class="sref">rules10ae, struct14a href="+code=net_device" class="sref">net_device10ae *4a href="+code=dev" class="sref">dev4/a>)=16814/a>{=16824/a>        struct14a href="+code=fib_rule" class="sref">fib_rule10ae *4a href="+code=rule" class="sref">rule10ae;=16834/a>=16844/a>        4a href="+code=list_for_each_entry" class="sref">list_for_each_entry10ae(4a href="+code=rule" class="sref">rule10ae, 4a href="+code=rules" class="sref">rules10ae, 4a href="+code=list" class="sref">list10ae) {=16854/a>                if (4a href="+code=rule" class="sref">rule10ae->4a href="+code=iifindex" class="sref">iifindex10ae == -1 &&=16864/a>                    4a href="+code=strcmp" class="sref">strcmp10ae(4a href="+code=dev" class="sref">dev4/a>->4a href="+code=nam
" class="sref">nam
4/a>, 4a href="+code=rule" class="sref">rule10ae->4a href="+code=iifnam
" class="sref">iifnam
4/a>) == 0)=16874/a>                        4a href="+code=rule" class="sref">rule10ae->4a href="+code=iifindex" class="sref">iifindex10ae = 4a href="+code=dev" class="sref">dev4/a>->4a href="+code=ifindex" class="sref">ifindex10ae;=16884/a>                if (4a href="+code=rule" class="sref">rule10ae->4a href="+code=oifindex" class="sref">oifindex10ae == -1 &&=16894/a>                    4a href="+code=strcmp" class="sref">strcmp10ae(4a href="+code=dev" class="sref">dev4/a>->4a href="+code=nam
" class="sref">nam
4/a>, 4a href="+code=rule" class="sref">rule10ae->4a href="+code=oifnam
" class="sref">oifnam
4/a>) == 0)=16904/a>                        4a href="+code=rule" class="sref">rule10ae->4a href="+code=oifindex" class="sref">oifindex10ae = 4a href="+code=dev" class="sref">dev4/a>->4a href="+code=ifindex" class="sref">ifindex10ae;=16914/a>        }=169210ae}=16934/a>=16944/a>static void14a href="+code=detach_rules" class="sref">detach_rules10ae(struct14a href="+code=list_head" class="sref">list_head10ae *4a href="+code=rules" class="sref">rules10ae, struct14a href="+code=net_device" class="sref">net_device10ae *4a href="+code=dev" class="sref">dev4/a>)=16954/a>{=16964/a>        struct14a href="+code=fib_rule" class="sref">fib_rule10ae *4a href="+code=rule" class="sref">rule10ae;=169710ae=16984/a>        4a href="+code=list_for_each_entry" class="sref">list_for_each_entry10ae(4a href="+code=rule" class="sref">rule10ae, 4a href="+code=rules" class="sref">rules10ae, 4a href="+code=list" class="sref">list10ae) {=16994/a>                if (4a href="+code=rule" class="sref">rule10ae->4a href="+code=iifindex" class="sref">iifindex10ae == 4a href="+code=dev" class="sref">dev4/a>->4a href="+code=ifindex" class="sref">ifindex10ae)=17004/a>                        4a href="+code=rule" class="sref">rule10ae->4a href="+code=iifindex" class="sref">iifindex10ae = -1;=17014/a>                if (4a href="+code=rule" class="sref">rule10ae->4a href="+code=oifindex" class="sref">oifindex10ae == 4a href="+code=dev" class="sref">dev4/a>->4a href="+code=ifindex" class="sref">ifindex10ae)=17024/a>                        4a href="+code=rule" class="sref">rule10ae->4a href="+code=oifindex" class="sref">oifindex10ae = -1;=17034/a>        }=17044/a>}=170510ae=170610ae=17074/a>static int14a href="+code=fib_rules_event" class="sref">fib_rules_event10ae(struct14a href="+code=notifier_block" class="sref">notifier_block10ae *4a href="+code=this" class="sref">this10ae, unsigned long 4a href="+code=event" class="sref">event4/a>,=17084/a>                            void1*4a href="+code=ptr" class="sref">ptr10ae)=17094/a>{=17104/a>        struct14a href="+code=net_device" class="sref">net_device10ae *4a href="+code=dev" class="sref">dev4/a> = 4a href="+code=ptr" class="sref">ptr10ae;=17114/a>        struct14a href="+code=net" class="sref">net10ae *4a href="+code=net" class="sref">net10ae = 4a href="+code=dev_net" class="sref">dev_net10ae(4a href="+code=dev" class="sref">dev4/a>);=17124/a>        struct14a href="+code=fib_rules_ops" class="sref">fib_rules_ops10ae *4a href="+code=ops" class="sref">ops10ae;=17134/a>=17144/a>        4a href="+code=ASSERT_RTNL" class="sref">ASSERT_RTNL10ae();=171510ae=17164/a>        switch (4a href="+code=event" class="sref">event4/a>) {=17174/a>        case 4a href="+code=NETDEV_REGISTER" class="sref">NETDEV_REGISTER10ae:=17184/a>                4a href="+code=list_for_each_entry" class="sref">list_for_each_entry10ae(4a href="+code=ops" class="sref">ops10ae, &4a href="+code=net" class="sref">net10ae->4a href="+code=rules_ops" class="sref">rules_ops10ae, 4a href="+code=list" class="sref">list10ae)=17194/a>                        4a href="+code=attach_rules" class="sref">attach_rules10ae(&4a href="+code=ops" class="sref">ops10ae->4a href="+code=rules_list" class="sref">rules_list10ae, 4a href="+code=dev" class="sref">dev4/a>);=17204/a>                break;=17214/a>=17224/a>        case 4a href="+code=NETDEV_UNREGISTER" class="sref">NETDEV_UNREGISTER10ae:=17234/a>                4a href="+code=list_for_each_entry" class="sref">list_for_each_entry10ae(4a href="+code=ops" class="sref">ops10ae, &4a href="+code=net" class="sref">net10ae->4a href="+code=rules_ops" class="sref">rules_ops10ae, 4a href="+code=list" class="sref">list10ae)=17244/a>                        4a href="+code=detach_rules" class="sref">detach_rules10ae(&4a href="+code=ops" class="sref">ops10ae->4a href="+code=rules_list" class="sref">rules_list10ae, 4a href="+code=dev" class="sref">dev4/a>);=17254/a>                break;=17264/a>        }=172710ae=17284/a>        return 4a href="+code=NOTIFY_DONE" class="sref">NOTIFY_DONE10ae;=17294/a>}=173010ae=17314/a>static struct14a href="+code=notifier_block" class="sref">notifier_block10ae 4a href="+code=fib_rules_notifier" class="sref">fib_rules_notifier10ae = {=17324/a>        .4a href="+code=notifier_call" class="sref">notifier_call10ae = 4a href="+code=fib_rules_event" class="sref">fib_rules_event10ae,=17334/a>};=173410ae=17354/a>static int14a href="+code=__net_init" class="sref">__net_init10ae 4a href="+code=fib_rules_net_init" class="sref">fib_rules_net_init10ae(struct14a href="+code=net" class="sref">net10ae *4a href="+code=net" class="sref">net10ae)=17364/a>{=17374/a>        4a href="+code=INIT_LIST_HEAD" class="sref">INIT_LIST_HEAD10ae(&4a href="+code=net" class="sref">net10ae->4a href="+code=rules_ops" class="sref">rules_ops10ae);=17384/a>        4a href="+code=spin_lock_init" class="sref">spin_lock_init10ae(&4a href="+code=net" class="sref">net10ae->4a href="+code=rules_mod_lock" class="sref">rules_mod_lock10ae);=17394/a>        return 0;=17404/a>}=17414/a>=17424/a>static struct14a href="+code=pernet_operations" class="sref">pernet_operations10ae 4a href="+code=fib_rules_net_ops" class="sref">fib_rules_net_ops10ae = {=17434/a>        .4a href="+code=init" class="sref">init10ae = 4a href="+code=fib_rules_net_init" class="sref">fib_rules_net_init10ae,=17444/a>};=174510ae=17464/a>static int14a href="+code=__init" class="sref">__init10ae 4a href="+code=fib_rules_init" class="sref">fib_rules_init10ae(void)=17474/a>{=17484/a>        int14a href="+code=err" class="sref">err10ae;=17494/a>        4a href="+code=rtnl_register" class="sref">rtnl_register10ae(4a href="+code=PF_UNSPEC" class="sref">PF_UNSPEC10ae, 4a href="+code=RTM_NEWRULE" class="sref">RTM_NEWRULE10ae, 4a href="+code=fib_nl_newrule" class="sref">fib_nl_newrule10ae, 4a href="+code=NULL" class="sref">NULL4/a>, 4a href="+code=NULL" class="sref">NULL4/a>);=17504/a>        4a href="+code=rtnl_register" class="sref">rtnl_register10ae(4a href="+code=PF_UNSPEC" class="sref">PF_UNSPEC10ae, 4a href="+code=RTM_DELRULE" class="sref">RTM_DELRULE10ae, 4a href="+code=fib_nl_delrule" class="sref">fib_nl_delrule10ae, 4a href="+code=NULL" class="sref">NULL4/a>, 4a href="+code=NULL" class="sref">NULL4/a>);=17514/a>        4a href="+code=rtnl_register" class="sref">rtnl_register10ae(4a href="+code=PF_UNSPEC" class="sref">PF_UNSPEC10ae, 4a href="+code=RTM_GETRULE" class="sref">RTM_GETRULE10ae, 4a href="+code=NULL" class="sref">NULL4/a>, 4a href="+code=fib_nl_dumprule" class="sref">fib_nl_dumprule10ae, 4a href="+code=NULL" class="sref">NULL4/a>);=175210ae=17534/a>        4a href="+code=err" class="sref">err10ae = 4a href="+code=register_pernet_subsys" class="sref">register_pernet_subsys10ae(&4a href="+code=fib_rules_net_ops" class="sref">fib_rules_net_ops10ae);=17544/a>        if (4a href="+code=err" class="sref">err10ae < 0)=17554/a>                goto14a href="+code=fail" class="sref">fail10ae;=175610ae=17574/a>        4a href="+code=err" class="sref">err10ae = 4a href="+code=register_netdevice_notifier" class="sref">register_netdevice_notifier10ae(&4a href="+code=fib_rules_notifier" class="sref">fib_rules_notifier10ae);=17584/a>        if (4a href="+code=err" class="sref">err10ae < 0)=17594/a>                goto14a href="+code=fail_unregister" class="sref">fail_unregister10ae;=176010ae=17614/a>        return 0;=176210ae=17634/a>4a href="+code=fail_unregister" class="sref">fail_unregister10ae:=17644/a>        4a href="+code=unregister_pernet_subsys" class="sref">unregister_pernet_subsys10ae(&4a href="+code=fib_rules_net_ops" class="sref">fib_rules_net_ops10ae);=17654/a>4a href="+code=fail" class="sref">fail10ae:=17664/a>        4a href="+code=rtnl_unregister" class="sref">rtnl_unregister10ae(4a href="+code=PF_UNSPEC" class="sref">PF_UNSPEC10ae, 4a href="+code=RTM_NEWRULE" class="sref">RTM_NEWRULE10ae);=17674/a>        4a href="+code=rtnl_unregister" class="sref">rtnl_unregister10ae(4a href="+code=PF_UNSPEC" class="sref">PF_UNSPEC10ae, 4a href="+code=RTM_DELRULE" class="sref">RTM_DELRULE10ae);=17684/a>        4a href="+code=rtnl_unregister" class="sref">rtnl_unregister10ae(4a href="+code=PF_UNSPEC" class="sref">PF_UNSPEC10ae, 4a href="+code=RTM_GETRULE" class="sref">RTM_GETRULE10ae);=17694/a>        return 4a href="+code=err" class="sref">err10ae;=17704/a>}=17714/a>=177210ae4a href="+code=subsys_initcall" class="sref">subsys_initcall10ae(4a href="+code=fib_rules_init" class="sref">fib_rules_init10ae);=17734/a>
lxr.linux.no kindly hosted by 4a href="http://www.redpill-linpro.no">Redpill Linpro AS10ae, provider of Linux consulting and operations services since 1995.