Lines Matching refs:ife

296 			  struct tcf_ife_info *ife, u32 metaid, void *metaval,  in __add_metainfo()  argument
317 spin_lock_bh(&ife->tcf_lock); in __add_metainfo()
318 list_add_tail(&mi->metalist, &ife->metalist); in __add_metainfo()
320 spin_unlock_bh(&ife->tcf_lock); in __add_metainfo()
326 struct tcf_ife_info *ife, u32 metaid, in add_metainfo_and_get_ops() argument
333 ret = __add_metainfo(ops, ife, metaid, NULL, 0, true, exists); in add_metainfo_and_get_ops()
339 static int add_metainfo(struct tcf_ife_info *ife, u32 metaid, void *metaval, in add_metainfo() argument
347 ret = __add_metainfo(ops, ife, metaid, metaval, len, false, exists); in add_metainfo()
354 static int use_all_metadata(struct tcf_ife_info *ife, bool exists) in use_all_metadata() argument
362 rc = add_metainfo_and_get_ops(o, ife, o->metaid, exists); in use_all_metadata()
374 static int dump_metalist(struct sk_buff *skb, struct tcf_ife_info *ife) in dump_metalist() argument
382 if (list_empty(&ife->metalist)) in dump_metalist()
389 list_for_each_entry(e, &ife->metalist, metalist) { in dump_metalist()
409 struct tcf_ife_info *ife = to_ife(a); in _tcf_ife_cleanup() local
412 list_for_each_entry_safe(e, n, &ife->metalist, metalist) { in _tcf_ife_cleanup()
427 struct tcf_ife_info *ife = to_ife(a); in tcf_ife_cleanup() local
430 spin_lock_bh(&ife->tcf_lock); in tcf_ife_cleanup()
432 spin_unlock_bh(&ife->tcf_lock); in tcf_ife_cleanup()
434 p = rcu_dereference_protected(ife->params, 1); in tcf_ife_cleanup()
458 static int populate_metalist(struct tcf_ife_info *ife, struct nlattr **tb, in populate_metalist() argument
471 rc = add_metainfo(ife, i, val, len, exists); in populate_metalist()
491 struct tcf_ife_info *ife; in tcf_ife_init() local
569 ife = to_ife(*a); in tcf_ife_init()
571 INIT_LIST_HEAD(&ife->metalist); in tcf_ife_init()
603 err = populate_metalist(ife, tb2, exists, in tcf_ife_init()
613 err = use_all_metadata(ife, exists); in tcf_ife_init()
619 spin_lock_bh(&ife->tcf_lock); in tcf_ife_init()
622 p = rcu_replace_pointer(ife->params, p, 1); in tcf_ife_init()
625 spin_unlock_bh(&ife->tcf_lock); in tcf_ife_init()
645 struct tcf_ife_info *ife = to_ife(a); in tcf_ife_dump() local
648 .index = ife->tcf_index, in tcf_ife_dump()
649 .refcnt = refcount_read(&ife->tcf_refcnt) - ref, in tcf_ife_dump()
650 .bindcnt = atomic_read(&ife->tcf_bindcnt) - bind, in tcf_ife_dump()
654 spin_lock_bh(&ife->tcf_lock); in tcf_ife_dump()
655 opt.action = ife->tcf_action; in tcf_ife_dump()
656 p = rcu_dereference_protected(ife->params, in tcf_ife_dump()
657 lockdep_is_held(&ife->tcf_lock)); in tcf_ife_dump()
663 tcf_tm_dump(&t, &ife->tcf_tm); in tcf_ife_dump()
680 if (dump_metalist(skb, ife)) { in tcf_ife_dump()
685 spin_unlock_bh(&ife->tcf_lock); in tcf_ife_dump()
689 spin_unlock_bh(&ife->tcf_lock); in tcf_ife_dump()
694 static int find_decode_metaid(struct sk_buff *skb, struct tcf_ife_info *ife, in find_decode_metaid() argument
700 list_for_each_entry(e, &ife->metalist, metalist) { in find_decode_metaid()
715 struct tcf_ife_info *ife = to_ife(a); in tcf_ife_decode() local
716 int action = ife->tcf_action; in tcf_ife_decode()
721 bstats_update(this_cpu_ptr(ife->common.cpu_bstats), skb); in tcf_ife_decode()
722 tcf_lastuse_update(&ife->tcf_tm); in tcf_ife_decode()
729 qstats_drop_inc(this_cpu_ptr(ife->common.cpu_qstats)); in tcf_ife_decode()
742 qstats_drop_inc(this_cpu_ptr(ife->common.cpu_qstats)); in tcf_ife_decode()
746 if (find_decode_metaid(skb, ife, mtype, dlen, curr_data)) { in tcf_ife_decode()
752 qstats_overlimit_inc(this_cpu_ptr(ife->common.cpu_qstats)); in tcf_ife_decode()
757 qstats_drop_inc(this_cpu_ptr(ife->common.cpu_qstats)); in tcf_ife_decode()
770 static int ife_get_sz(struct sk_buff *skb, struct tcf_ife_info *ife) in ife_get_sz() argument
775 list_for_each_entry_safe(e, n, &ife->metalist, metalist) { in ife_get_sz()
788 struct tcf_ife_info *ife = to_ife(a); in tcf_ife_encode() local
789 int action = ife->tcf_action; in tcf_ife_encode()
796 u16 metalen = ife_get_sz(skb, ife); in tcf_ife_encode()
809 bstats_update(this_cpu_ptr(ife->common.cpu_bstats), skb); in tcf_ife_encode()
810 tcf_lastuse_update(&ife->tcf_tm); in tcf_ife_encode()
816 qstats_overlimit_inc(this_cpu_ptr(ife->common.cpu_qstats)); in tcf_ife_encode()
822 qstats_drop_inc(this_cpu_ptr(ife->common.cpu_qstats)); in tcf_ife_encode()
831 spin_lock(&ife->tcf_lock); in tcf_ife_encode()
837 list_for_each_entry(e, &ife->metalist, metalist) { in tcf_ife_encode()
844 spin_unlock(&ife->tcf_lock); in tcf_ife_encode()
845 qstats_drop_inc(this_cpu_ptr(ife->common.cpu_qstats)); in tcf_ife_encode()
850 spin_unlock(&ife->tcf_lock); in tcf_ife_encode()
869 struct tcf_ife_info *ife = to_ife(a); in tcf_ife_act() local
873 p = rcu_dereference_bh(ife->params); in tcf_ife_act()