On 10 Dec 2024, at 23:18, Frode Nordahl wrote:

> In a subsequent patch we will introduce support for handling the
> RTA_MULTIPATH attribute.
>
> The RTA_MULTIPATH attribute is a nested attribute containing
> another set of route attributes.  There is some overlap of netlink
> policy for parsing both sets of attributes.
>
> Consequently we would want to reuse the code for parsing these
> attributes, and splitting up the function allows us to do this in
> a subsequent patch.
>
> Signed-off-by: Frode Nordahl <fnord...@ubuntu.com>

Two small comments below. The rest looks good to me.

> ---
>  lib/route-table.c | 31 ++++++++++++++++++++-----------
>  1 file changed, 20 insertions(+), 11 deletions(-)
>
> diff --git a/lib/route-table.c b/lib/route-table.c
> index b7e7861d6..33e0df2b8 100644
> --- a/lib/route-table.c
> +++ b/lib/route-table.c
> @@ -225,7 +225,9 @@ route_table_reset(void)
>  /* Return RTNLGRP_IPV4_ROUTE or RTNLGRP_IPV6_ROUTE on success, 0 on parse
>   * error. */
>  static int
> -route_table_parse(struct ofpbuf *buf, void *change_)
> +route_table_parse__(struct ofpbuf *buf, size_t ofs,
> +                    const struct nlmsghdr *nlmsg,
> +                    const struct rtmsg *rtm, void *change_)

Here, I would just replace change_ with struct route_table_msg *change.

>  {
>      struct route_table_msg *change = change_;
>      bool parsed, ipv4 = false;
> @@ -251,28 +253,22 @@ route_table_parse(struct ofpbuf *buf, void *change_)
>      };
>
>      struct nlattr *attrs[ARRAY_SIZE(policy)];
> -    const struct rtmsg *rtm;
> -
> -    rtm = ofpbuf_at(buf, NLMSG_HDRLEN, sizeof *rtm);
>
>      if (rtm->rtm_family == AF_INET) {
> -        parsed = nl_policy_parse(buf, NLMSG_HDRLEN + sizeof(struct rtmsg),
> -                                 policy, attrs, ARRAY_SIZE(policy));
> +        parsed = nl_policy_parse(buf, ofs, policy, attrs,
> +                                 ARRAY_SIZE(policy));
>          ipv4 = true;
>      } else if (rtm->rtm_family == AF_INET6) {
> -        parsed = nl_policy_parse(buf, NLMSG_HDRLEN + sizeof(struct rtmsg),
> -                                 policy6, attrs, ARRAY_SIZE(policy6));
> +        parsed = nl_policy_parse(buf, ofs, policy6, attrs,
> +                                 ARRAY_SIZE(policy6));
>      } else {
>          VLOG_DBG_RL(&rl, "received non AF_INET rtnetlink route message");
>          return 0;
>      }
>
>      if (parsed) {
> -        const struct nlmsghdr *nlmsg;
>          int rta_oif;      /* Output interface index. */
>
> -        nlmsg = buf->data;
> -
>          memset(change, 0, sizeof *change);
>          change->relevant = true;
>
> @@ -355,6 +351,19 @@ route_table_parse(struct ofpbuf *buf, void *change_)
>      return ipv4 ? RTNLGRP_IPV4_ROUTE : RTNLGRP_IPV6_ROUTE;
>  }
>
> +static int
> +route_table_parse(struct ofpbuf *buf, void *change_)
> +{
> +    struct rtmsg *rtm;
> +    struct nlmsghdr *nlmsg;

Swap the two declarations for a reverse Christmas tree.

> +
> +    nlmsg = ofpbuf_at(buf, 0, NLMSG_HDRLEN);
> +    rtm = ofpbuf_at(buf, NLMSG_HDRLEN, sizeof *rtm);
> +
> +    return route_table_parse__(buf, NLMSG_HDRLEN + sizeof *rtm,
> +                               nlmsg, rtm, change_);
> +}
> +
>  static bool
>  route_table_standard_table(uint32_t table_id)
>  {
> -- 
> 2.45.2

_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to