From: Wang Jian Date: Sat, 29 Sep 2018 11:09:17 +0000 (+0000) Subject: link: macvlan fixes X-Git-Tag: libnl3_5_0~18 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=470b98354627eb4ab9eeb67308bc2f2c746e83eb;p=libnl link: macvlan fixes 1. While parsing flags, it overrides mode. 2. Before, dump-line and dump-details are same leading that macvlan info will be shown twice while dumpping details. So make dump-line show nothing. 3. Add some spaces to show dump-details more prettier. Signed-off-by: Wang Jian Fixes: c76393e2037d78eb60c32f95b26f5b1e5b9422a6 http://lists.infradead.org/pipermail/libnl/2018-August/002405.html http://lists.infradead.org/pipermail/libnl/2018-September/002406.html http://lists.infradead.org/pipermail/libnl/2018-September/002411.html --- diff --git a/lib/route/link/macvlan.c b/lib/route/link/macvlan.c index ac90d0b..dbcea44 100644 --- a/lib/route/link/macvlan.c +++ b/lib/route/link/macvlan.c @@ -108,7 +108,7 @@ static int macvlan_parse(struct rtnl_link *link, struct nlattr *data, } if (tb[IFLA_MACVLAN_FLAGS]) { - mvi->mvi_mode = nla_get_u16(tb[IFLA_MACVLAN_FLAGS]); + mvi->mvi_flags = nla_get_u16(tb[IFLA_MACVLAN_FLAGS]); mvi->mvi_mask |= MACVLAN_HAS_FLAGS; } @@ -158,7 +158,7 @@ static void macvlan_free(struct rtnl_link *link) link->l_info = NULL; } -static void macvlan_dump(struct rtnl_link *link, struct nl_dump_params *p) +static void macvlan_dump_details(struct rtnl_link *link, struct nl_dump_params *p) { char buf[64]; uint32_t i; @@ -166,23 +166,26 @@ static void macvlan_dump(struct rtnl_link *link, struct nl_dump_params *p) if (mvi->mvi_mask & MACVLAN_HAS_MODE) { rtnl_link_macvlan_mode2str(mvi->mvi_mode, buf, sizeof(buf)); - nl_dump(p, "%s-mode %s", link->l_info_ops->io_name, buf); + nl_dump(p, " %s-mode %s", link->l_info_ops->io_name, buf); } if (mvi->mvi_mask & MACVLAN_HAS_FLAGS) { rtnl_link_macvlan_flags2str(mvi->mvi_flags, buf, sizeof(buf)); - nl_dump(p, "%s-flags %s", link->l_info_ops->io_name, buf); + nl_dump(p, " %s-flags %s", link->l_info_ops->io_name, buf); } if (mvi->mvi_mask & MACVLAN_HAS_MACADDR) { - nl_dump(p, "macvlan-count %u", (unsigned) mvi->mvi_maccount); + nl_dump(p, " macvlan-count %u", (unsigned) mvi->mvi_maccount); + + if (mvi->mvi_maccount) + nl_dump(p, " macvlan-sourcemac"); for (i = 0; i < mvi->mvi_maccount; i++) { - nl_dump(p, "macvlan-sourcemac %s", - nl_addr2str(mvi->mvi_macaddr[i], buf, + nl_dump(p, " %s", nl_addr2str(mvi->mvi_macaddr[i], buf, sizeof(buf))); } } + nl_dump(p, "\n"); } static int macvlan_clone(struct rtnl_link *dst, struct rtnl_link *src) @@ -258,8 +261,7 @@ static struct rtnl_link_info_ops macvlan_info_ops = { .io_alloc = macvlan_alloc, .io_parse = macvlan_parse, .io_dump = { - [NL_DUMP_LINE] = macvlan_dump, - [NL_DUMP_DETAILS] = macvlan_dump, + [NL_DUMP_DETAILS] = macvlan_dump_details, }, .io_clone = macvlan_clone, .io_put_attrs = macvlan_put_attrs, @@ -271,8 +273,7 @@ static struct rtnl_link_info_ops macvtap_info_ops = { .io_alloc = macvlan_alloc, .io_parse = macvlan_parse, .io_dump = { - [NL_DUMP_LINE] = macvlan_dump, - [NL_DUMP_DETAILS] = macvlan_dump, + [NL_DUMP_DETAILS] = macvlan_dump_details, }, .io_clone = macvlan_clone, .io_put_attrs = macvlan_put_attrs,