Lines Matching refs:nlrule

466 static int fib_nl2rule_l3mdev(struct nlattr *nla, struct fib_rule *nlrule,  in fib_nl2rule_l3mdev()  argument
469 nlrule->l3mdev = nla_get_u8(nla); in fib_nl2rule_l3mdev()
470 if (nlrule->l3mdev != 1) { in fib_nl2rule_l3mdev()
478 static int fib_nl2rule_l3mdev(struct nlattr *nla, struct fib_rule *nlrule, in fib_nl2rule_l3mdev() argument
495 struct fib_rule *nlrule = NULL; in fib_nl2rule() local
514 nlrule = kzalloc(ops->rule_size, GFP_KERNEL); in fib_nl2rule()
515 if (!nlrule) { in fib_nl2rule()
519 refcount_set(&nlrule->refcnt, 1); in fib_nl2rule()
520 nlrule->fr_net = net; in fib_nl2rule()
523 nlrule->pref = nla_get_u32(tb[FRA_PRIORITY]); in fib_nl2rule()
526 nlrule->pref = fib_default_rule_pref(ops); in fib_nl2rule()
529 nlrule->proto = tb[FRA_PROTOCOL] ? in fib_nl2rule()
535 nlrule->iifindex = -1; in fib_nl2rule()
536 nla_strlcpy(nlrule->iifname, tb[FRA_IIFNAME], IFNAMSIZ); in fib_nl2rule()
537 dev = __dev_get_by_name(net, nlrule->iifname); in fib_nl2rule()
539 nlrule->iifindex = dev->ifindex; in fib_nl2rule()
545 nlrule->oifindex = -1; in fib_nl2rule()
546 nla_strlcpy(nlrule->oifname, tb[FRA_OIFNAME], IFNAMSIZ); in fib_nl2rule()
547 dev = __dev_get_by_name(net, nlrule->oifname); in fib_nl2rule()
549 nlrule->oifindex = dev->ifindex; in fib_nl2rule()
553 nlrule->mark = nla_get_u32(tb[FRA_FWMARK]); in fib_nl2rule()
554 if (nlrule->mark) in fib_nl2rule()
558 nlrule->mark_mask = 0xFFFFFFFF; in fib_nl2rule()
562 nlrule->mark_mask = nla_get_u32(tb[FRA_FWMASK]); in fib_nl2rule()
565 nlrule->tun_id = nla_get_be64(tb[FRA_TUN_ID]); in fib_nl2rule()
569 fib_nl2rule_l3mdev(tb[FRA_L3MDEV], nlrule, extack) < 0) in fib_nl2rule()
572 nlrule->action = frh->action; in fib_nl2rule()
573 nlrule->flags = frh->flags; in fib_nl2rule()
574 nlrule->table = frh_get_table(frh, tb); in fib_nl2rule()
576 nlrule->suppress_prefixlen = nla_get_u32(tb[FRA_SUPPRESS_PREFIXLEN]); in fib_nl2rule()
578 nlrule->suppress_prefixlen = -1; in fib_nl2rule()
581 nlrule->suppress_ifgroup = nla_get_u32(tb[FRA_SUPPRESS_IFGROUP]); in fib_nl2rule()
583 nlrule->suppress_ifgroup = -1; in fib_nl2rule()
586 if (nlrule->action != FR_ACT_GOTO) { in fib_nl2rule()
591 nlrule->target = nla_get_u32(tb[FRA_GOTO]); in fib_nl2rule()
593 if (nlrule->target <= nlrule->pref) { in fib_nl2rule()
597 } else if (nlrule->action == FR_ACT_GOTO) { in fib_nl2rule()
602 if (nlrule->l3mdev && nlrule->table) { in fib_nl2rule()
614 nlrule->uid_range = nla_get_kuid_range(tb); in fib_nl2rule()
616 if (!uid_range_set(&nlrule->uid_range) || in fib_nl2rule()
617 !uid_lte(nlrule->uid_range.start, nlrule->uid_range.end)) { in fib_nl2rule()
622 nlrule->uid_range = fib_kuid_range_unset; in fib_nl2rule()
626 nlrule->ip_proto = nla_get_u8(tb[FRA_IP_PROTO]); in fib_nl2rule()
630 &nlrule->sport_range); in fib_nl2rule()
639 &nlrule->dport_range); in fib_nl2rule()
646 *rule = nlrule; in fib_nl2rule()
651 kfree(nlrule); in fib_nl2rule()
837 struct fib_rule *rule = NULL, *r, *nlrule = NULL; in fib_nl_delrule() local
861 err = fib_nl2rule(skb, nlh, extack, ops, tb, &nlrule, &user_priority); in fib_nl_delrule()
865 rule = rule_find(ops, frh, tb, nlrule, user_priority); in fib_nl_delrule()
922 kfree(nlrule); in fib_nl_delrule()
926 kfree(nlrule); in fib_nl_delrule()