From 4d4da09e0036107e7c49362b38df220e9a2f7b12 Mon Sep 17 00:00:00 2001 From: Hiroaki SHIMODA Date: Sat, 8 Mar 2014 22:10:03 +0900 Subject: [PATCH 1/3] htb: Move direct_qlen code part to htb_parse_opt(). The direct_qlen command option is used with qdisc operation. It happened to be implemented in htb_parse_class_opt() which is called with class operation. Signed-off-by: Hiroaki SHIMODA Cc: Eric Dumazet --- tc/q_htb.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/tc/q_htb.c b/tc/q_htb.c index 1d8c56f2..7075a4c0 100644 --- a/tc/q_htb.c +++ b/tc/q_htb.c @@ -62,6 +62,7 @@ static void explain1(char *arg) static int htb_parse_opt(struct qdisc_util *qu, int argc, char **argv, struct nlmsghdr *n) { + unsigned int direct_qlen = ~0U; struct tc_htb_glob opt; struct rtattr *tail; unsigned i; char *p; @@ -86,6 +87,11 @@ static int htb_parse_opt(struct qdisc_util *qu, int argc, char **argv, struct nl if (*p<'0' || *p>'3') break; opt.debug |= (*p-'0')<<(2*i); } + } else if (matches(*argv, "direct_qlen") == 0) { + NEXT_ARG(); + if (get_u32(&direct_qlen, *argv, 10)) { + explain1("direct_qlen"); return -1; + } } else { fprintf(stderr, "What is \"%s\"?\n", *argv); explain(); @@ -96,6 +102,9 @@ static int htb_parse_opt(struct qdisc_util *qu, int argc, char **argv, struct nl tail = NLMSG_TAIL(n); addattr_l(n, 1024, TCA_OPTIONS, NULL, 0); addattr_l(n, 2024, TCA_HTB_INIT, &opt, NLMSG_ALIGN(sizeof(opt))); + if (direct_qlen != ~0U) + addattr_l(n, 2024, TCA_HTB_DIRECT_QLEN, + &direct_qlen, sizeof(direct_qlen)); tail->rta_len = (void *) NLMSG_TAIL(n) - (void *) tail; return 0; } @@ -110,7 +119,6 @@ static int htb_parse_class_opt(struct qdisc_util *qu, int argc, char **argv, str unsigned mtu; unsigned short mpu = 0; unsigned short overhead = 0; - unsigned int direct_qlen = ~0U; unsigned int linklayer = LINKLAYER_ETHERNET; /* Assume ethernet */ struct rtattr *tail; __u64 ceil64 = 0, rate64 = 0; @@ -129,11 +137,6 @@ static int htb_parse_class_opt(struct qdisc_util *qu, int argc, char **argv, str if (get_u32(&mtu, *argv, 10)) { explain1("mtu"); return -1; } - } else if (matches(*argv, "direct_qlen") == 0) { - NEXT_ARG(); - if (get_u32(&direct_qlen, *argv, 10)) { - explain1("direct_qlen"); return -1; - } } else if (matches(*argv, "mpu") == 0) { NEXT_ARG(); if (get_u16(&mpu, *argv, 10)) { @@ -245,9 +248,6 @@ static int htb_parse_class_opt(struct qdisc_util *qu, int argc, char **argv, str opt.cbuffer = tc_calc_xmittime(ceil64, cbuffer); tail = NLMSG_TAIL(n); - if (direct_qlen != ~0U) - addattr_l(n, 1024, TCA_HTB_DIRECT_QLEN, - &direct_qlen, sizeof(direct_qlen)); addattr_l(n, 1024, TCA_OPTIONS, NULL, 0); if (rate64 >= (1ULL << 32)) From 577e5a53fc7731468f18f74fcbda5090691c48cb Mon Sep 17 00:00:00 2001 From: Masatake YAMATO Date: Wed, 12 Mar 2014 12:46:53 +0900 Subject: [PATCH 2/3] iproute: Show default type, table, proto and scope of route In "ip route show" output unicast type, main table, boot protocol and universe scope are hidden as default labels. Sometimes it is helpful to show the hidden label for people not enough familiar with routing subsystem to map the output of "ip route show" and kernel source code. With this patch "ip route show" with -d option shows the default labels. Example of difference of output with -d option: $ ./ip/ip -4 route show table all dev virbr1 ... 192.168.121.0/28 proto kernel scope link src 192.168.121.1 ... $ ./ip/ip -4 -d route show table all dev virbr1 ... unicast 192.168.121.0/28 table main proto kernel scope link src 192.168.121.1 ... Signed-off-by: Masatake YAMATO --- ip/iproute.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ip/iproute.c b/ip/iproute.c index bc3c3e14..daff9ce6 100644 --- a/ip/iproute.c +++ b/ip/iproute.c @@ -332,7 +332,7 @@ int print_route(const struct sockaddr_nl *who, struct nlmsghdr *n, void *arg) if (n->nlmsg_type == RTM_DELROUTE) fprintf(fp, "Deleted "); - if (r->rtm_type != RTN_UNICAST && !filter.type) + if ((r->rtm_type != RTN_UNICAST || show_details > 0) && !filter.type) fprintf(fp, "%s ", rtnl_rtntype_n2a(r->rtm_type, b1, sizeof(b1))); if (tb[RTA_DST]) { @@ -389,11 +389,11 @@ int print_route(const struct sockaddr_nl *who, struct nlmsghdr *n, void *arg) fprintf(fp, "dev %s ", ll_index_to_name(*(int*)RTA_DATA(tb[RTA_OIF]))); if (!(r->rtm_flags&RTM_F_CLONED)) { - if (table != RT_TABLE_MAIN && !filter.tb) + if ((table != RT_TABLE_MAIN || show_details > 0) && !filter.tb) fprintf(fp, " table %s ", rtnl_rttable_n2a(table, b1, sizeof(b1))); - if (r->rtm_protocol != RTPROT_BOOT && filter.protocolmask != -1) + if ((r->rtm_protocol != RTPROT_BOOT || show_details > 0) && filter.protocolmask != -1) fprintf(fp, " proto %s ", rtnl_rtprot_n2a(r->rtm_protocol, b1, sizeof(b1))); - if (r->rtm_scope != RT_SCOPE_UNIVERSE && filter.scopemask != -1) + if ((r->rtm_scope != RT_SCOPE_UNIVERSE || show_details > 0) && filter.scopemask != -1) fprintf(fp, " scope %s ", rtnl_rtscope_n2a(r->rtm_scope, b1, sizeof(b1))); } if (tb[RTA_PREFSRC] && filter.rprefsrc.bitlen != host_len) { From 9e763fa5d332f5839673aaf4a7cae10e97932564 Mon Sep 17 00:00:00 2001 From: Mike Rapoport Date: Thu, 20 Mar 2014 13:06:10 +0200 Subject: [PATCH 3/3] bridge: fix reporting of IPv6 addresses Signed-off-by: Mike Rapoport --- bridge/fdb.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/bridge/fdb.c b/bridge/fdb.c index e2e53f1f..9b720e30 100644 --- a/bridge/fdb.c +++ b/bridge/fdb.c @@ -103,8 +103,13 @@ int print_fdb(const struct sockaddr_nl *who, struct nlmsghdr *n, void *arg) if (tb[NDA_DST]) { SPRINT_BUF(abuf); + int family = AF_INET; + + if (RTA_PAYLOAD(tb[NDA_DST]) == sizeof(struct in6_addr)) + family = AF_INET6; + fprintf(fp, "dst %s ", - format_host(AF_INET, + format_host(family, RTA_PAYLOAD(tb[NDA_DST]), RTA_DATA(tb[NDA_DST]), abuf, sizeof(abuf)));