Lines Matching refs:rule6

355 static int fib6_nl2rule_dscp(const struct nlattr *nla, struct fib6_rule *rule6,
358 if (rule6->dscp) {
363 rule6->dscp = inet_dsfield_to_dscp(nla_get_u8(nla) << 2);
364 rule6->dscp_mask = inet_dsfield_to_dscp(INET_DSCP_MASK);
365 rule6->dscp_full = true;
371 struct fib6_rule *rule6,
376 if (!rule6->dscp_full) {
383 if (rule6->dscp & ~dscp_mask) {
388 rule6->dscp_mask = dscp_mask;
393 static int fib6_nl2rule_flowlabel(struct nlattr **tb, struct fib6_rule *rule6,
416 rule6->flowlabel = flowlabel;
417 rule6->flowlabel_mask = flowlabel_mask;
427 struct fib6_rule *rule6 = (struct fib6_rule *)rule;
436 rule6->dscp = inet_dsfield_to_dscp(frh->tos);
437 rule6->dscp_mask = frh->tos ? inet_dsfield_to_dscp(INET_DSCP_MASK) : 0;
439 if (tb[FRA_DSCP] && fib6_nl2rule_dscp(tb[FRA_DSCP], rule6, extack) < 0)
443 fib6_nl2rule_dscp_mask(tb[FRA_DSCP_MASK], rule6, extack) < 0)
447 fib6_nl2rule_flowlabel(tb, rule6, extack) < 0)
463 rule6->src.addr = nla_get_in6_addr(tb[FRA_SRC]);
466 rule6->dst.addr = nla_get_in6_addr(tb[FRA_DST]);
468 rule6->src.plen = frh->src_len;
469 rule6->dst.plen = frh->dst_len;
494 struct fib6_rule *rule6 = (struct fib6_rule *) rule;
496 if (frh->src_len && (rule6->src.plen != frh->src_len))
499 if (frh->dst_len && (rule6->dst.plen != frh->dst_len))
503 (rule6->dscp_full ||
504 inet_dscp_to_dsfield(rule6->dscp) != frh->tos))
511 if (!rule6->dscp_full || rule6->dscp != dscp)
519 if (!rule6->dscp_full || rule6->dscp_mask != dscp_mask)
524 nla_get_be32(tb[FRA_FLOWLABEL]) != rule6->flowlabel)
528 nla_get_be32(tb[FRA_FLOWLABEL_MASK]) != rule6->flowlabel_mask)
532 nla_memcmp(tb[FRA_SRC], &rule6->src.addr, sizeof(struct in6_addr)))
536 nla_memcmp(tb[FRA_DST], &rule6->dst.addr, sizeof(struct in6_addr)))
545 struct fib6_rule *rule6 = (struct fib6_rule *) rule;
547 frh->dst_len = rule6->dst.plen;
548 frh->src_len = rule6->src.plen;
550 if (rule6->dscp_full) {
553 inet_dscp_to_dsfield(rule6->dscp) >> 2) ||
555 inet_dscp_to_dsfield(rule6->dscp_mask) >> 2))
558 frh->tos = inet_dscp_to_dsfield(rule6->dscp);
561 if (rule6->flowlabel_mask &&
562 (nla_put_be32(skb, FRA_FLOWLABEL, rule6->flowlabel) ||
563 nla_put_be32(skb, FRA_FLOWLABEL_MASK, rule6->flowlabel_mask)))
566 if ((rule6->dst.plen &&
567 nla_put_in6_addr(skb, FRA_DST, &rule6->dst.addr)) ||
568 (rule6->src.plen &&
569 nla_put_in6_addr(skb, FRA_SRC, &rule6->src.addr)))