Lines Matching refs:nlrule
469 static int fib_nl2rule_l3mdev(struct nlattr *nla, struct fib_rule *nlrule, in fib_nl2rule_l3mdev() argument
472 nlrule->l3mdev = nla_get_u8(nla); in fib_nl2rule_l3mdev()
473 if (nlrule->l3mdev != 1) { in fib_nl2rule_l3mdev()
481 static int fib_nl2rule_l3mdev(struct nlattr *nla, struct fib_rule *nlrule, in fib_nl2rule_l3mdev() argument
498 struct fib_rule *nlrule = NULL; in fib_nl2rule() local
517 nlrule = kzalloc(ops->rule_size, GFP_KERNEL); in fib_nl2rule()
518 if (!nlrule) { in fib_nl2rule()
522 refcount_set(&nlrule->refcnt, 1); in fib_nl2rule()
523 nlrule->fr_net = net; in fib_nl2rule()
526 nlrule->pref = nla_get_u32(tb[FRA_PRIORITY]); in fib_nl2rule()
529 nlrule->pref = fib_default_rule_pref(ops); in fib_nl2rule()
532 nlrule->proto = tb[FRA_PROTOCOL] ? in fib_nl2rule()
538 nlrule->iifindex = -1; in fib_nl2rule()
539 nla_strlcpy(nlrule->iifname, tb[FRA_IIFNAME], IFNAMSIZ); in fib_nl2rule()
540 dev = __dev_get_by_name(net, nlrule->iifname); in fib_nl2rule()
542 nlrule->iifindex = dev->ifindex; in fib_nl2rule()
548 nlrule->oifindex = -1; in fib_nl2rule()
549 nla_strlcpy(nlrule->oifname, tb[FRA_OIFNAME], IFNAMSIZ); in fib_nl2rule()
550 dev = __dev_get_by_name(net, nlrule->oifname); in fib_nl2rule()
552 nlrule->oifindex = dev->ifindex; in fib_nl2rule()
556 nlrule->mark = nla_get_u32(tb[FRA_FWMARK]); in fib_nl2rule()
557 if (nlrule->mark) in fib_nl2rule()
561 nlrule->mark_mask = 0xFFFFFFFF; in fib_nl2rule()
565 nlrule->mark_mask = nla_get_u32(tb[FRA_FWMASK]); in fib_nl2rule()
568 nlrule->tun_id = nla_get_be64(tb[FRA_TUN_ID]); in fib_nl2rule()
572 fib_nl2rule_l3mdev(tb[FRA_L3MDEV], nlrule, extack) < 0) in fib_nl2rule()
575 nlrule->action = frh->action; in fib_nl2rule()
576 nlrule->flags = frh->flags; in fib_nl2rule()
577 nlrule->table = frh_get_table(frh, tb); in fib_nl2rule()
579 nlrule->suppress_prefixlen = nla_get_u32(tb[FRA_SUPPRESS_PREFIXLEN]); in fib_nl2rule()
581 nlrule->suppress_prefixlen = -1; in fib_nl2rule()
584 nlrule->suppress_ifgroup = nla_get_u32(tb[FRA_SUPPRESS_IFGROUP]); in fib_nl2rule()
586 nlrule->suppress_ifgroup = -1; in fib_nl2rule()
589 if (nlrule->action != FR_ACT_GOTO) { in fib_nl2rule()
594 nlrule->target = nla_get_u32(tb[FRA_GOTO]); in fib_nl2rule()
596 if (nlrule->target <= nlrule->pref) { in fib_nl2rule()
600 } else if (nlrule->action == FR_ACT_GOTO) { in fib_nl2rule()
605 if (nlrule->l3mdev && nlrule->table) { in fib_nl2rule()
617 nlrule->uid_range = nla_get_kuid_range(tb); in fib_nl2rule()
619 if (!uid_range_set(&nlrule->uid_range) || in fib_nl2rule()
620 !uid_lte(nlrule->uid_range.start, nlrule->uid_range.end)) { in fib_nl2rule()
625 nlrule->uid_range = fib_kuid_range_unset; in fib_nl2rule()
629 nlrule->ip_proto = nla_get_u8(tb[FRA_IP_PROTO]); in fib_nl2rule()
633 &nlrule->sport_range); in fib_nl2rule()
642 &nlrule->dport_range); in fib_nl2rule()
649 *rule = nlrule; in fib_nl2rule()
654 kfree(nlrule); in fib_nl2rule()
839 struct fib_rule *rule = NULL, *r, *nlrule = NULL; in fib_nl_delrule() local
862 err = fib_nl2rule(skb, nlh, extack, ops, tb, &nlrule, &user_priority); in fib_nl_delrule()
866 rule = rule_find(ops, frh, tb, nlrule, user_priority); in fib_nl_delrule()
923 kfree(nlrule); in fib_nl_delrule()
927 kfree(nlrule); in fib_nl_delrule()