Lines Matching refs:nlrule

522 static int fib_nl2rule_l3mdev(struct nlattr *nla, struct fib_rule *nlrule,  in fib_nl2rule_l3mdev()  argument
525 nlrule->l3mdev = nla_get_u8(nla); in fib_nl2rule_l3mdev()
526 if (nlrule->l3mdev != 1) { in fib_nl2rule_l3mdev()
534 static int fib_nl2rule_l3mdev(struct nlattr *nla, struct fib_rule *nlrule, in fib_nl2rule_l3mdev() argument
577 struct fib_rule *nlrule = NULL; in fib_nl2rule() local
596 nlrule = kzalloc(ops->rule_size, GFP_KERNEL_ACCOUNT); in fib_nl2rule()
597 if (!nlrule) { in fib_nl2rule()
601 refcount_set(&nlrule->refcnt, 1); in fib_nl2rule()
602 nlrule->fr_net = net; in fib_nl2rule()
605 nlrule->pref = nla_get_u32(tb[FRA_PRIORITY]); in fib_nl2rule()
609 nlrule->proto = nla_get_u8_default(tb[FRA_PROTOCOL], RTPROT_UNSPEC); in fib_nl2rule()
612 nlrule->iifindex = -1; in fib_nl2rule()
613 nla_strscpy(nlrule->iifname, tb[FRA_IIFNAME], IFNAMSIZ); in fib_nl2rule()
617 nlrule->oifindex = -1; in fib_nl2rule()
618 nla_strscpy(nlrule->oifname, tb[FRA_OIFNAME], IFNAMSIZ); in fib_nl2rule()
622 nlrule->mark = nla_get_u32(tb[FRA_FWMARK]); in fib_nl2rule()
623 if (nlrule->mark) in fib_nl2rule()
627 nlrule->mark_mask = 0xFFFFFFFF; in fib_nl2rule()
631 nlrule->mark_mask = nla_get_u32(tb[FRA_FWMASK]); in fib_nl2rule()
634 nlrule->tun_id = nla_get_be64(tb[FRA_TUN_ID]); in fib_nl2rule()
637 fib_nl2rule_l3mdev(tb[FRA_L3MDEV], nlrule, extack) < 0) in fib_nl2rule()
640 nlrule->action = frh->action; in fib_nl2rule()
641 nlrule->flags = frh->flags; in fib_nl2rule()
642 nlrule->table = frh_get_table(frh, tb); in fib_nl2rule()
644 nlrule->suppress_prefixlen = nla_get_u32(tb[FRA_SUPPRESS_PREFIXLEN]); in fib_nl2rule()
646 nlrule->suppress_prefixlen = -1; in fib_nl2rule()
649 nlrule->suppress_ifgroup = nla_get_u32(tb[FRA_SUPPRESS_IFGROUP]); in fib_nl2rule()
651 nlrule->suppress_ifgroup = -1; in fib_nl2rule()
654 if (nlrule->action != FR_ACT_GOTO) { in fib_nl2rule()
659 nlrule->target = nla_get_u32(tb[FRA_GOTO]); in fib_nl2rule()
660 } else if (nlrule->action == FR_ACT_GOTO) { in fib_nl2rule()
665 if (nlrule->l3mdev && nlrule->table) { in fib_nl2rule()
677 nlrule->uid_range = nla_get_kuid_range(tb); in fib_nl2rule()
679 if (!uid_range_set(&nlrule->uid_range) || in fib_nl2rule()
680 !uid_lte(nlrule->uid_range.start, nlrule->uid_range.end)) { in fib_nl2rule()
685 nlrule->uid_range = fib_kuid_range_unset; in fib_nl2rule()
689 nlrule->ip_proto = nla_get_u8(tb[FRA_IP_PROTO]); in fib_nl2rule()
693 &nlrule->sport_range); in fib_nl2rule()
698 if (!fib_rule_port_is_range(&nlrule->sport_range)) in fib_nl2rule()
699 nlrule->sport_mask = U16_MAX; in fib_nl2rule()
704 &nlrule->sport_range, in fib_nl2rule()
705 &nlrule->sport_mask, extack); in fib_nl2rule()
712 &nlrule->dport_range); in fib_nl2rule()
717 if (!fib_rule_port_is_range(&nlrule->dport_range)) in fib_nl2rule()
718 nlrule->dport_mask = U16_MAX; in fib_nl2rule()
723 &nlrule->dport_range, in fib_nl2rule()
724 &nlrule->dport_mask, extack); in fib_nl2rule()
729 *rule = nlrule; in fib_nl2rule()
734 kfree(nlrule); in fib_nl2rule()
739 static int fib_nl2rule_rtnl(struct fib_rule *nlrule, in fib_nl2rule_rtnl() argument
745 nlrule->pref = fib_default_rule_pref(ops); in fib_nl2rule_rtnl()
748 if (tb[FRA_GOTO] && nlrule->target <= nlrule->pref) { in fib_nl2rule_rtnl()
756 dev = __dev_get_by_name(nlrule->fr_net, nlrule->iifname); in fib_nl2rule_rtnl()
758 nlrule->iifindex = dev->ifindex; in fib_nl2rule_rtnl()
759 nlrule->iif_is_l3_master = netif_is_l3_master(dev); in fib_nl2rule_rtnl()
766 dev = __dev_get_by_name(nlrule->fr_net, nlrule->oifname); in fib_nl2rule_rtnl()
768 nlrule->oifindex = dev->ifindex; in fib_nl2rule_rtnl()
769 nlrule->oif_is_l3_master = netif_is_l3_master(dev); in fib_nl2rule_rtnl()
1004 struct fib_rule *rule = NULL, *nlrule = NULL; in fib_delrule() local
1030 err = fib_nl2rule(net, nlh, extack, ops, tb, &nlrule, &user_priority); in fib_delrule()
1037 err = fib_nl2rule_rtnl(nlrule, ops, tb, extack); in fib_delrule()
1041 rule = rule_find(ops, frh, tb, nlrule, user_priority); in fib_delrule()
1100 kfree(nlrule); in fib_delrule()
1106 kfree(nlrule); in fib_delrule()