On Thu, Jan 26, 2012 at 06:49:52PM +0400, Tony Zelenoff wrote:
> +     /* check for full ndmsg structure presence, family member is
> +      * the same for both structures */
> +     if (nlmsg_len(cb->nlh) == sizeof(struct ndmsg) &&
> +         ((struct ndmsg *) nlmsg_data(cb->nlh))->ndm_flags == NTF_PROXY)
> +             proxy = 1;
> +

Please change this check to nlmsg_len(cb->nlh) >= sizeof(struct ndmsg) so
we have the possibility to extend the request message in the future
without breaking backwards compatibility.

>       s_t = cb->args[0];
>  
> -     for (tbl = neigh_tables, t = 0; tbl; tbl = tbl->next, t++) {
> +     for (tbl = neigh_tables, t = 0; tbl && (err >= 0);
> +          tbl = tbl->next, t++) {
>               if (t < s_t || (family && tbl->family != family))
>                       continue;
>               if (t > s_t)
>                       memset(&cb->args[1], 0, sizeof(cb->args) -
>                                               sizeof(cb->args[0]));
> -             if (neigh_dump_table(tbl, skb, cb) < 0)
> -                     break;
> +             if (proxy) {
> +                     err = pneigh_dump_table(tbl, skb, cb);
> +                     continue;
> +             }
> +             err = neigh_dump_table(tbl, skb, cb);

Personally I would call neigh_dump_table() in the else branch and avoid
the continue statement.

_______________________________________________
Devel mailing list
[email protected]
https://openvz.org/mailman/listinfo/devel

Reply via email to