On 2/21/18 7:12 PM, Donald Sharp wrote:
> @@ -577,21 +585,20 @@ static int iprule_modify(int cmd, int argc, char **argv)
>       __u32 tid = 0;
>       struct {
>               struct nlmsghdr n;
> -             struct rtmsg            r;
> +             struct fib_rule_hdr     frh;
>               char                    buf[1024];
>       } req = {
>               .n.nlmsg_type = cmd,
> -             .n.nlmsg_len = NLMSG_LENGTH(sizeof(struct rtmsg)),
> +             .n.nlmsg_len = NLMSG_LENGTH(sizeof(struct fib_rule_hdr)),
>               .n.nlmsg_flags = NLM_F_REQUEST,
> -             .r.rtm_family = preferred_family,
> -             .r.rtm_protocol = RTPROT_BOOT,
> -             .r.rtm_scope = RT_SCOPE_UNIVERSE,
> -             .r.rtm_type = RTN_UNSPEC,
> +             .frh.family = preferred_family,
> +             .frh.proto = RTPROT_BOOT,
> +             .frh.action = RTN_UNSPEC,
>       };
>  
>       if (cmd == RTM_NEWRULE) {
>               req.n.nlmsg_flags |= NLM_F_CREATE|NLM_F_EXCL;
> -             req.r.rtm_type = RTN_UNICAST;
> +             req.frh.action = RTN_UNICAST;
>       }

The action should be FR_ACT_TO_TBL; RTN_UNICAST == 1 == FR_ACT_TO_TBL;
the latter is the proper enum for fib rules.

Reply via email to