542
542
frh = nlmsg_data(nlh);
543
543
frh->family = ops->family;
544
544
frh->table = rule->table;
545
NLA_PUT_U32(skb, FRA_TABLE, rule->table);
545
if (nla_put_u32(skb, FRA_TABLE, rule->table))
546
goto nla_put_failure;
548
549
frh->action = rule->action;
553
554
frh->flags |= FIB_RULE_UNRESOLVED;
555
556
if (rule->iifname[0]) {
556
NLA_PUT_STRING(skb, FRA_IIFNAME, rule->iifname);
557
if (nla_put_string(skb, FRA_IIFNAME, rule->iifname))
558
goto nla_put_failure;
558
559
if (rule->iifindex == -1)
559
560
frh->flags |= FIB_RULE_IIF_DETACHED;
562
563
if (rule->oifname[0]) {
563
NLA_PUT_STRING(skb, FRA_OIFNAME, rule->oifname);
564
if (nla_put_string(skb, FRA_OIFNAME, rule->oifname))
565
goto nla_put_failure;
565
566
if (rule->oifindex == -1)
566
567
frh->flags |= FIB_RULE_OIF_DETACHED;
570
NLA_PUT_U32(skb, FRA_PRIORITY, rule->pref);
573
NLA_PUT_U32(skb, FRA_FWMARK, rule->mark);
575
if (rule->mark_mask || rule->mark)
576
NLA_PUT_U32(skb, FRA_FWMASK, rule->mark_mask);
579
NLA_PUT_U32(skb, FRA_GOTO, rule->target);
571
nla_put_u32(skb, FRA_PRIORITY, rule->pref)) ||
573
nla_put_u32(skb, FRA_FWMARK, rule->mark)) ||
574
((rule->mark_mask || rule->mark) &&
575
nla_put_u32(skb, FRA_FWMASK, rule->mark_mask)) ||
577
nla_put_u32(skb, FRA_GOTO, rule->target)))
578
goto nla_put_failure;
581
579
if (ops->fill(rule, skb, frh) < 0)
582
580
goto nla_put_failure;