Lines Matching refs:rule4

231 static int fib4_nl2rule_dscp(const struct nlattr *nla, struct fib4_rule *rule4,  in fib4_nl2rule_dscp()  argument
234 if (rule4->dscp) { in fib4_nl2rule_dscp()
239 rule4->dscp = inet_dsfield_to_dscp(nla_get_u8(nla) << 2); in fib4_nl2rule_dscp()
240 rule4->dscp_mask = inet_dsfield_to_dscp(INET_DSCP_MASK); in fib4_nl2rule_dscp()
241 rule4->dscp_full = true; in fib4_nl2rule_dscp()
247 struct fib4_rule *rule4, in fib4_nl2rule_dscp_mask() argument
252 if (!rule4->dscp_full) { in fib4_nl2rule_dscp_mask()
259 if (rule4->dscp & ~dscp_mask) { in fib4_nl2rule_dscp_mask()
264 rule4->dscp_mask = dscp_mask; in fib4_nl2rule_dscp_mask()
274 struct fib4_rule *rule4 = (struct fib4_rule *)rule; in fib4_rule_configure() local
294 rule4->dscp = inet_dsfield_to_dscp(frh->tos); in fib4_rule_configure()
297 fib4_nl2rule_dscp(tb[FRA_DSCP], rule4, extack) < 0) in fib4_rule_configure()
301 fib4_nl2rule_dscp_mask(tb[FRA_DSCP_MASK], rule4, extack) < 0) in fib4_rule_configure()
324 rule4->src = nla_get_in_addr(tb[FRA_SRC]); in fib4_rule_configure()
327 rule4->dst = nla_get_in_addr(tb[FRA_DST]); in fib4_rule_configure()
331 rule4->tclassid = nla_get_u32(tb[FRA_FLOW]); in fib4_rule_configure()
332 if (rule4->tclassid) in fib4_rule_configure()
340 rule4->src_len = frh->src_len; in fib4_rule_configure()
341 rule4->srcmask = inet_make_mask(rule4->src_len); in fib4_rule_configure()
342 rule4->dst_len = frh->dst_len; in fib4_rule_configure()
343 rule4->dstmask = inet_make_mask(rule4->dst_len); in fib4_rule_configure()
378 struct fib4_rule *rule4 = (struct fib4_rule *) rule; in fib4_rule_compare() local
380 if (frh->src_len && (rule4->src_len != frh->src_len)) in fib4_rule_compare()
383 if (frh->dst_len && (rule4->dst_len != frh->dst_len)) in fib4_rule_compare()
387 (rule4->dscp_full || in fib4_rule_compare()
388 inet_dscp_to_dsfield(rule4->dscp) != frh->tos)) in fib4_rule_compare()
395 if (!rule4->dscp_full || rule4->dscp != dscp) in fib4_rule_compare()
403 if (!rule4->dscp_full || rule4->dscp_mask != dscp_mask) in fib4_rule_compare()
408 if (tb[FRA_FLOW] && (rule4->tclassid != nla_get_u32(tb[FRA_FLOW]))) in fib4_rule_compare()
412 if (frh->src_len && (rule4->src != nla_get_in_addr(tb[FRA_SRC]))) in fib4_rule_compare()
415 if (frh->dst_len && (rule4->dst != nla_get_in_addr(tb[FRA_DST]))) in fib4_rule_compare()
424 struct fib4_rule *rule4 = (struct fib4_rule *) rule; in fib4_rule_fill() local
426 frh->dst_len = rule4->dst_len; in fib4_rule_fill()
427 frh->src_len = rule4->src_len; in fib4_rule_fill()
429 if (rule4->dscp_full) { in fib4_rule_fill()
432 inet_dscp_to_dsfield(rule4->dscp) >> 2) || in fib4_rule_fill()
434 inet_dscp_to_dsfield(rule4->dscp_mask) >> 2)) in fib4_rule_fill()
437 frh->tos = inet_dscp_to_dsfield(rule4->dscp); in fib4_rule_fill()
440 if ((rule4->dst_len && in fib4_rule_fill()
441 nla_put_in_addr(skb, FRA_DST, rule4->dst)) || in fib4_rule_fill()
442 (rule4->src_len && in fib4_rule_fill()
443 nla_put_in_addr(skb, FRA_SRC, rule4->src))) in fib4_rule_fill()
446 if (rule4->tclassid && in fib4_rule_fill()
447 nla_put_u32(skb, FRA_FLOW, rule4->tclassid)) in fib4_rule_fill()