Merge branch 'arm-master' into arm-sdk7

arm-sdk7 2020.8.130
pedro 5 years ago
commit 6fc9d80472

@ -1519,7 +1519,7 @@ libbcm-install:
iproute2:
@$(SEP)
@$(MAKE) -C $@ KERNEL_INCLUDE=$(LINUXDIR)/include \
EXTRACFLAGS="$(EXTRACFLAGS) $(if $(TCONFIG_IPV6),-DUSE_IPV6,-DNO_IPV6)"
EXTRACFLAGS="$(EXTRACFLAGS)"
iproute2-install:
install -D iproute2/tc/tc $(INSTALLDIR)/iproute2/usr/sbin/tc
@ -1531,7 +1531,7 @@ iproute2-3.x: kernel_header iptables-1.8.x
@$(SEP)
$(call patch_files,iproute2-3.x)
@$(MAKE) -C $@ KERNEL_INCLUDE=$(LINUXDIR)/include \
EXTRACFLAGS="$(EXTRACFLAGS) $(if $(TCONFIG_IPV6),-DUSE_IPV6,-DNO_IPV6)" \
EXTRACFLAGS="$(EXTRACFLAGS)" \
PKG_CONFIG_PATH="$(PKG_CONFIG_PATH):$(TOP)/iptables-1.8.x/iptables" \
$(PARALLEL_BUILD)

@ -0,0 +1,717 @@
--- iproute2-3.x/bridge/fdb.c
+++ iproute2-3.x/bridge/fdb.c
@@ -316,7 +316,7 @@
if (d == NULL || addr == NULL) {
fprintf(stderr, "Device and address are required arguments.\n");
- exit(-1);
+ return -1;
}
/* Assume self */
@@ -331,7 +331,7 @@
abuf, abuf+1, abuf+2,
abuf+3, abuf+4, abuf+5) != 6) {
fprintf(stderr, "Invalid mac address %s\n", addr);
- exit(-1);
+ return -1;
}
addattr_l(&req.n, sizeof(req), NDA_LLADDR, abuf, ETH_ALEN);
@@ -359,7 +359,7 @@
}
if (rtnl_talk(&rth, &req.n, 0, 0, NULL) < 0)
- exit(2);
+ return -1;
return 0;
}
--- iproute2-3.x/bridge/link.c
+++ iproute2-3.x/bridge/link.c
@@ -283,31 +283,31 @@
} else if (strcmp(*argv, "guard") == 0) {
NEXT_ARG();
if (!on_off("guard", &bpdu_guard, *argv))
- exit(-1);
+ return -1;
} else if (strcmp(*argv, "hairpin") == 0) {
NEXT_ARG();
if (!on_off("hairping", &hairpin, *argv))
- exit(-1);
+ return -1;
} else if (strcmp(*argv, "fastleave") == 0) {
NEXT_ARG();
if (!on_off("fastleave", &fast_leave, *argv))
- exit(-1);
+ return -1;
} else if (strcmp(*argv, "root_block") == 0) {
NEXT_ARG();
if (!on_off("root_block", &root_block, *argv))
- exit(-1);
+ return -1;
} else if (strcmp(*argv, "learning") == 0) {
NEXT_ARG();
if (!on_off("learning", &learning, *argv))
- exit(-1);
+ return -1;
} else if (strcmp(*argv, "learning_sync") == 0) {
NEXT_ARG();
if (!on_off("learning_sync", &learning_sync, *argv))
- exit(-1);
+ return -1;
} else if (strcmp(*argv, "flood") == 0) {
NEXT_ARG();
if (!on_off("flood", &flood, *argv))
- exit(-1);
+ return -1;
} else if (strcmp(*argv, "cost") == 0) {
NEXT_ARG();
cost = atoi(*argv);
@@ -328,7 +328,7 @@
fprintf(stderr,
"Mode argument must be \"vepa\" or "
"\"veb\".\n");
- exit(-1);
+ return -1;
}
} else if (strcmp(*argv, "self") == 0) {
flags = BRIDGE_FLAGS_SELF;
@@ -339,14 +339,14 @@
}
if (d == NULL) {
fprintf(stderr, "Device is a required argument.\n");
- exit(-1);
+ return -1;
}
req.ifm.ifi_index = ll_name_to_index(d);
if (req.ifm.ifi_index == 0) {
fprintf(stderr, "Cannot find bridge device \"%s\"\n", d);
- exit(-1);
+ return -1;
}
/* Nested PROTINFO attribute. Contains: port flags, cost, priority and
@@ -401,7 +401,7 @@
}
if (rtnl_talk(&rth, &req.n, 0, 0, NULL) < 0)
- exit(2);
+ return -1;
return 0;
}
--- iproute2-3.x/bridge/mdb.c
+++ iproute2-3.x/bridge/mdb.c
@@ -145,12 +145,12 @@
if (rtnl_wilddump_request(&rth, PF_BRIDGE, RTM_GETMDB) < 0) {
perror("Cannot send dump request");
- exit(1);
+ return -1;
}
if (rtnl_dump_filter(&rth, print_mdb, stdout) < 0) {
fprintf(stderr, "Dump terminated\n");
- exit(1);
+ return -1;
}
return 0;
@@ -198,7 +198,7 @@
if (d == NULL || grp == NULL || p == NULL) {
fprintf(stderr, "Device, group address and port name are required arguments.\n");
- exit(-1);
+ return -1;
}
req.bpm.ifindex = ll_name_to_index(d);
@@ -225,7 +225,7 @@
addattr_l(&req.n, sizeof(req), MDBA_SET_ENTRY, &entry, sizeof(entry));
if (rtnl_talk(&rth, &req.n, 0, 0, NULL) < 0)
- exit(2);
+ return -1;
return 0;
}
--- iproute2-3.x/bridge/vlan.c
+++ iproute2-3.x/bridge/vlan.c
@@ -69,7 +69,7 @@
if (d == NULL || vid == -1) {
fprintf(stderr, "Device and VLAN ID are required arguments.\n");
- exit(-1);
+ return -1;
}
req.ifm.ifi_index = ll_name_to_index(d);
@@ -96,7 +96,7 @@
addattr_nest_end(&req.n, afspec);
if (rtnl_talk(&rth, &req.n, 0, 0, NULL) < 0)
- exit(2);
+ return -1;
return 0;
}
--- iproute2-3.x/include/namespace.h
+++ iproute2-3.x/include/namespace.h
@@ -3,6 +3,7 @@
#include <sched.h>
#include <sys/mount.h>
+#include <unistd.h>
#include <sys/syscall.h>
#include <errno.h>
--- iproute2-3.x/ip/ipaddrlabel.c
+++ iproute2-3.x/ip/ipaddrlabel.c
@@ -183,7 +183,7 @@
req.ifal.ifal_family = AF_INET6;
if (rtnl_talk(&rth, &req.n, 0, 0, NULL) < 0)
- return 2;
+ return -2;
return 0;
}
@@ -232,12 +232,12 @@
if (rtnl_wilddump_request(&rth, af, RTM_GETADDRLABEL) < 0) {
perror("Cannot send dump request");
- return 1;
+ return -1;
}
if (rtnl_dump_filter(&rth, flush_addrlabel, NULL) < 0) {
fprintf(stderr, "Flush terminated\n");
- return 1;
+ return -1;
}
return 0;
--- iproute2-3.x/ip/iplink_bond.c
+++ iproute2-3.x/ip/iplink_bond.c
@@ -166,10 +166,8 @@
while (argc > 0) {
if (matches(*argv, "mode") == 0) {
NEXT_ARG();
- if (get_index(mode_tbl, *argv) < 0) {
+ if (get_index(mode_tbl, *argv) < 0)
invarg("invalid mode", *argv);
- return -1;
- }
mode = get_index(mode_tbl, *argv);
addattr8(n, 1024, IFLA_BOND_MODE, mode);
} else if (matches(*argv, "active_slave") == 0) {
@@ -182,38 +180,28 @@
addattr32(n, 1024, IFLA_BOND_ACTIVE_SLAVE, 0);
} else if (matches(*argv, "miimon") == 0) {
NEXT_ARG();
- if (get_u32(&miimon, *argv, 0)) {
+ if (get_u32(&miimon, *argv, 0))
invarg("invalid miimon", *argv);
- return -1;
- }
addattr32(n, 1024, IFLA_BOND_MIIMON, miimon);
} else if (matches(*argv, "updelay") == 0) {
NEXT_ARG();
- if (get_u32(&updelay, *argv, 0)) {
+ if (get_u32(&updelay, *argv, 0))
invarg("invalid updelay", *argv);
- return -1;
- }
addattr32(n, 1024, IFLA_BOND_UPDELAY, updelay);
} else if (matches(*argv, "downdelay") == 0) {
NEXT_ARG();
- if (get_u32(&downdelay, *argv, 0)) {
+ if (get_u32(&downdelay, *argv, 0))
invarg("invalid downdelay", *argv);
- return -1;
- }
addattr32(n, 1024, IFLA_BOND_DOWNDELAY, downdelay);
} else if (matches(*argv, "use_carrier") == 0) {
NEXT_ARG();
- if (get_u8(&use_carrier, *argv, 0)) {
+ if (get_u8(&use_carrier, *argv, 0))
invarg("invalid use_carrier", *argv);
- return -1;
- }
addattr8(n, 1024, IFLA_BOND_USE_CARRIER, use_carrier);
} else if (matches(*argv, "arp_interval") == 0) {
NEXT_ARG();
- if (get_u32(&arp_interval, *argv, 0)) {
+ if (get_u32(&arp_interval, *argv, 0))
invarg("invalid arp_interval", *argv);
- return -1;
- }
addattr32(n, 1024, IFLA_BOND_ARP_INTERVAL, arp_interval);
} else if (matches(*argv, "arp_ip_target") == 0) {
struct rtattr * nest = addattr_nest(n, 1024,
@@ -234,18 +222,14 @@
addattr_nest_end(n, nest);
} else if (matches(*argv, "arp_validate") == 0) {
NEXT_ARG();
- if (get_index(arp_validate_tbl, *argv) < 0) {
+ if (get_index(arp_validate_tbl, *argv) < 0)
invarg("invalid arp_validate", *argv);
- return -1;
- }
arp_validate = get_index(arp_validate_tbl, *argv);
addattr32(n, 1024, IFLA_BOND_ARP_VALIDATE, arp_validate);
} else if (matches(*argv, "arp_all_targets") == 0) {
NEXT_ARG();
- if (get_index(arp_all_targets_tbl, *argv) < 0) {
+ if (get_index(arp_all_targets_tbl, *argv) < 0)
invarg("invalid arp_all_targets", *argv);
- return -1;
- }
arp_all_targets = get_index(arp_all_targets_tbl, *argv);
addattr32(n, 1024, IFLA_BOND_ARP_ALL_TARGETS, arp_all_targets);
} else if (matches(*argv, "primary") == 0) {
@@ -256,92 +240,79 @@
addattr32(n, 1024, IFLA_BOND_PRIMARY, ifindex);
} else if (matches(*argv, "primary_reselect") == 0) {
NEXT_ARG();
- if (get_index(primary_reselect_tbl, *argv) < 0) {
+ if (get_index(primary_reselect_tbl, *argv) < 0)
invarg("invalid primary_reselect", *argv);
- return -1;
- }
primary_reselect = get_index(primary_reselect_tbl, *argv);
addattr8(n, 1024, IFLA_BOND_PRIMARY_RESELECT,
primary_reselect);
} else if (matches(*argv, "fail_over_mac") == 0) {
NEXT_ARG();
- if (get_index(fail_over_mac_tbl, *argv) < 0) {
+ if (get_index(fail_over_mac_tbl, *argv) < 0)
invarg("invalid fail_over_mac", *argv);
- return -1;
- }
fail_over_mac = get_index(fail_over_mac_tbl, *argv);
addattr8(n, 1024, IFLA_BOND_FAIL_OVER_MAC,
fail_over_mac);
} else if (matches(*argv, "xmit_hash_policy") == 0) {
NEXT_ARG();
- if (get_index(xmit_hash_policy_tbl, *argv) < 0) {
+ if (get_index(xmit_hash_policy_tbl, *argv) < 0)
invarg("invalid xmit_hash_policy", *argv);
- return -1;
- }
+
xmit_hash_policy = get_index(xmit_hash_policy_tbl, *argv);
addattr8(n, 1024, IFLA_BOND_XMIT_HASH_POLICY,
xmit_hash_policy);
} else if (matches(*argv, "resend_igmp") == 0) {
NEXT_ARG();
- if (get_u32(&resend_igmp, *argv, 0)) {
+ if (get_u32(&resend_igmp, *argv, 0))
invarg("invalid resend_igmp", *argv);
- return -1;
- }
+
addattr32(n, 1024, IFLA_BOND_RESEND_IGMP, resend_igmp);
} else if (matches(*argv, "num_grat_arp") == 0 ||
matches(*argv, "num_unsol_na") == 0) {
NEXT_ARG();
- if (get_u8(&num_peer_notif, *argv, 0)) {
+ if (get_u8(&num_peer_notif, *argv, 0))
invarg("invalid num_grat_arp|num_unsol_na",
*argv);
- return -1;
- }
+
addattr8(n, 1024, IFLA_BOND_NUM_PEER_NOTIF,
num_peer_notif);
} else if (matches(*argv, "all_slaves_active") == 0) {
NEXT_ARG();
- if (get_u8(&all_slaves_active, *argv, 0)) {
+ if (get_u8(&all_slaves_active, *argv, 0))
invarg("invalid all_slaves_active", *argv);
- return -1;
- }
+
addattr8(n, 1024, IFLA_BOND_ALL_SLAVES_ACTIVE,
all_slaves_active);
} else if (matches(*argv, "min_links") == 0) {
NEXT_ARG();
- if (get_u32(&min_links, *argv, 0)) {
+ if (get_u32(&min_links, *argv, 0))
invarg("invalid min_links", *argv);
- return -1;
- }
+
addattr32(n, 1024, IFLA_BOND_MIN_LINKS, min_links);
} else if (matches(*argv, "lp_interval") == 0) {
NEXT_ARG();
- if (get_u32(&lp_interval, *argv, 0)) {
+ if (get_u32(&lp_interval, *argv, 0))
invarg("invalid lp_interval", *argv);
- return -1;
- }
+
addattr32(n, 1024, IFLA_BOND_LP_INTERVAL, lp_interval);
} else if (matches(*argv, "packets_per_slave") == 0) {
NEXT_ARG();
- if (get_u32(&packets_per_slave, *argv, 0)) {
+ if (get_u32(&packets_per_slave, *argv, 0))
invarg("invalid packets_per_slave", *argv);
- return -1;
- }
+
addattr32(n, 1024, IFLA_BOND_PACKETS_PER_SLAVE,
packets_per_slave);
} else if (matches(*argv, "lacp_rate") == 0) {
NEXT_ARG();
- if (get_index(lacp_rate_tbl, *argv) < 0) {
+ if (get_index(lacp_rate_tbl, *argv) < 0)
invarg("invalid lacp_rate", *argv);
- return -1;
- }
+
lacp_rate = get_index(lacp_rate_tbl, *argv);
addattr8(n, 1024, IFLA_BOND_AD_LACP_RATE, lacp_rate);
} else if (matches(*argv, "ad_select") == 0) {
NEXT_ARG();
- if (get_index(ad_select_tbl, *argv) < 0) {
+ if (get_index(ad_select_tbl, *argv) < 0)
invarg("invalid ad_select", *argv);
- return -1;
- }
+
ad_select = get_index(ad_select_tbl, *argv);
addattr8(n, 1024, IFLA_BOND_AD_SELECT, ad_select);
} else if (matches(*argv, "help") == 0) {
--- iproute2-3.x/ip/ipmonitor.c
+++ iproute2-3.x/ip/ipmonitor.c
@@ -251,12 +251,16 @@
}
if (file) {
FILE *fp;
+ int err;
+
fp = fopen(file, "r");
if (fp == NULL) {
perror("Cannot fopen");
exit(-1);
}
- return rtnl_from_file(fp, accept_msg, stdout);
+ err = rtnl_from_file(fp, accept_msg, stdout);
+ fclose(fp);
+ return err;
}
if (rtnl_open(&rth, groups) < 0)
--- iproute2-3.x/ip/iproute.c
+++ iproute2-3.x/ip/iproute.c
@@ -1059,7 +1059,7 @@
req.r.rtm_family = AF_INET;
if (rtnl_talk(&rth, &req.n, 0, 0, NULL) < 0)
- exit(2);
+ return -2;
return 0;
}
--- iproute2-3.x/ip/iprule.c
+++ iproute2-3.x/ip/iprule.c
@@ -386,7 +386,7 @@
req.r.rtm_table = RT_TABLE_MAIN;
if (rtnl_talk(&rth, &req.n, 0, 0, NULL) < 0)
- return 2;
+ return -2;
return 0;
}
--- iproute2-3.x/ip/link_gre.c
+++ iproute2-3.x/ip/link_gre.c
@@ -244,7 +244,8 @@
if (uval > 255)
invarg("TTL must be <= 255\n", *argv);
ttl = uval;
- }
+ } else
+ ttl = 0;
} else if (!matches(*argv, "tos") ||
!matches(*argv, "tclass") ||
!matches(*argv, "dsfield")) {
--- iproute2-3.x/ip/tcp_metrics.c
+++ iproute2-3.x/ip/tcp_metrics.c
@@ -153,7 +153,8 @@
saddr.bytelen = 16;
stype = TCP_METRICS_ATTR_SADDR_IPV6;
slen = RTA_PAYLOAD(a);
- }
+ } else
+ stype = 0;
}
if (f.daddr.family && f.daddr.bitlen >= 0 &&
--- iproute2-3.x/ip/tunnel.c
+++ iproute2-3.x/ip/tunnel.c
@@ -73,7 +73,13 @@
strncpy(ifr.ifr_name, basedev, IFNAMSIZ);
ifr.ifr_ifru.ifru_data = (void*)p;
+
fd = socket(preferred_family, SOCK_DGRAM, 0);
+ if (fd < 0) {
+ fprintf(stderr, "create socket failed: %s\n", strerror(errno));
+ return -1;
+ }
+
err = ioctl(fd, SIOCGETTUNNEL, &ifr);
if (err)
fprintf(stderr, "get tunnel \"%s\" failed: %s\n", basedev,
@@ -94,7 +100,13 @@
else
strncpy(ifr.ifr_name, basedev, IFNAMSIZ);
ifr.ifr_ifru.ifru_data = p;
+
fd = socket(preferred_family, SOCK_DGRAM, 0);
+ if (fd < 0) {
+ fprintf(stderr, "create socket failed: %s\n", strerror(errno));
+ return -1;
+ }
+
err = ioctl(fd, cmd, &ifr);
if (err)
fprintf(stderr, "add tunnel \"%s\" failed: %s\n", ifr.ifr_name,
@@ -115,7 +127,13 @@
strncpy(ifr.ifr_name, basedev, IFNAMSIZ);
ifr.ifr_ifru.ifru_data = p;
+
fd = socket(preferred_family, SOCK_DGRAM, 0);
+ if (fd < 0) {
+ fprintf(stderr, "create socket failed: %s\n", strerror(errno));
+ return -1;
+ }
+
err = ioctl(fd, SIOCDELTUNNEL, &ifr);
if (err)
fprintf(stderr, "delete tunnel \"%s\" failed: %s\n",
@@ -133,7 +151,13 @@
strncpy(ifr.ifr_name, name, IFNAMSIZ);
ifr.ifr_ifru.ifru_data = p;
+
fd = socket(preferred_family, SOCK_DGRAM, 0);
+ if (fd < 0) {
+ fprintf(stderr, "create socket failed: %s\n", strerror(errno));
+ return -1;
+ }
+
err = ioctl(fd, cmd, &ifr);
if (err && errno != skiperr)
fprintf(stderr, "%s: ioctl %x failed: %s\n", name,
--- iproute2-3.x/ip/xfrm_monitor.c
+++ iproute2-3.x/ip/xfrm_monitor.c
@@ -396,12 +396,16 @@
if (file) {
FILE *fp;
+ int err;
+
fp = fopen(file, "r");
if (fp == NULL) {
perror("Cannot fopen");
exit(-1);
}
- return rtnl_from_file(fp, xfrm_accept_msg, (void*)stdout);
+ err = rtnl_from_file(fp, xfrm_accept_msg, stdout);
+ fclose(fp);
+ return err;
}
if (rtnl_open_byproto(&rth, groups, NETLINK_XFRM) < 0)
--- iproute2-3.x/lib/namespace.c
+++ iproute2-3.x/lib/namespace.c
@@ -57,8 +57,10 @@
if (setns(netns, CLONE_NEWNET) < 0) {
fprintf(stderr, "setting the network namespace \"%s\" failed: %s\n",
name, strerror(errno));
+ close(netns);
return -1;
}
+ close(netns);
if (unshare(CLONE_NEWNS) < 0) {
fprintf(stderr, "unshare failed: %s\n", strerror(errno));
--- iproute2-3.x/misc/lnstat_util.c
+++ iproute2-3.x/misc/lnstat_util.c
@@ -175,8 +175,10 @@
/* allocate */
lf = malloc(sizeof(*lf));
- if (!lf)
+ if (!lf) {
+ fprintf(stderr, "out of memory\n");
return NULL;
+ }
/* initialize */
memset(lf, 0, sizeof(*lf));
@@ -193,6 +195,7 @@
/* open */
lf->fp = fopen(lf->path, "r");
if (!lf->fp) {
+ perror(lf->path);
free(lf);
return NULL;
}
@@ -259,12 +262,16 @@
continue;
lf = alloc_and_open(path, de->d_name);
- if (!lf)
+ if (!lf) {
+ closedir(dir);
return NULL;
+ }
/* fill in field structure */
- if (lnstat_scan_fields(lf) < 0)
+ if (lnstat_scan_fields(lf) < 0) {
+ closedir(dir);
return NULL;
+ }
/* prepend to global list */
lf->next = lnstat_files;
--- iproute2-3.x/tc/m_simple.c
+++ iproute2-3.x/tc/m_simple.c
@@ -138,7 +138,7 @@
}
if (strlen(simpdata) > (SIMP_MAX_DATA - 1)) {
- fprintf(stderr, "simple: Illegal string len %ld <%s> \n",
+ fprintf(stderr, "simple: Illegal string len %zu <%s> \n",
strlen(simpdata), simpdata);
return -1;
}
--- iproute2-3.x/tc/m_xt.c
+++ iproute2-3.x/tc/m_xt.c
@@ -90,7 +90,8 @@
if (NULL == t) {
target->t = xtables_calloc(1, size);
target->t->u.target_size = size;
- strcpy(target->t->u.user.name, target->name);
+ strncpy(target->t->u.user.name, target->name,
+ sizeof(target->t->u.user.name) - 1);
target->t->u.user.revision = target->revision;
if (target->init != NULL)
@@ -252,8 +253,8 @@
m->print(NULL, m->t, 0);
fprintf(stdout, " index %d\n", index);
- if (strlen(tname) > 16) {
- size = 16;
+ if (strlen(tname) >= 16) {
+ size = 15;
k[15] = 0;
} else {
size = 1 + strlen(tname);
--- iproute2-3.x/tc/tc_monitor.c
+++ iproute2-3.x/tc/tc_monitor.c
@@ -87,13 +87,17 @@
}
if (file) {
- FILE *fp;
- fp = fopen(file, "r");
+ FILE *fp = fopen(file, "r");
+ int ret;
+
if (fp == NULL) {
perror("Cannot fopen");
exit(-1);
}
- return rtnl_from_file(fp, accept_tcmsg, (void*)stdout);
+
+ ret = rtnl_from_file(fp, accept_tcmsg, stdout);
+ fclose(fp);
+ return ret;
}
if (rtnl_open(&rth, groups) < 0)
--- iproute2-3.x/tc/tc_stab.c
+++ iproute2-3.x/tc/tc_stab.c
@@ -67,42 +67,32 @@
NEXT_ARG();
if (s.mtu)
duparg("mtu", *argv);
- if (get_u32(&s.mtu, *argv, 10)) {
+ if (get_u32(&s.mtu, *argv, 10))
invarg("mtu", "invalid mtu");
- return -1;
- }
} else if (matches(*argv, "mpu") == 0) {
NEXT_ARG();
if (s.mpu)
duparg("mpu", *argv);
- if (get_u32(&s.mpu, *argv, 10)) {
+ if (get_u32(&s.mpu, *argv, 10))
invarg("mpu", "invalid mpu");
- return -1;
- }
} else if (matches(*argv, "overhead") == 0) {
NEXT_ARG();
if (s.overhead)
duparg("overhead", *argv);
- if (get_integer(&s.overhead, *argv, 10)) {
+ if (get_integer(&s.overhead, *argv, 10))
invarg("overhead", "invalid overhead");
- return -1;
- }
} else if (matches(*argv, "tsize") == 0) {
NEXT_ARG();
if (s.tsize)
duparg("tsize", *argv);
- if (get_u32(&s.tsize, *argv, 10)) {
+ if (get_u32(&s.tsize, *argv, 10))
invarg("tsize", "invalid table size");
- return -1;
- }
} else if (matches(*argv, "linklayer") == 0) {
NEXT_ARG();
if (s.linklayer != LINKLAYER_UNSPEC)
duparg("linklayer", *argv);
- if (get_linklayer(&s.linklayer, *argv)) {
+ if (get_linklayer(&s.linklayer, *argv))
invarg("linklayer", "invalid linklayer");
- return -1;
- }
} else
break;
argc--; argv++;
--- iproute2-3.x/tc/tc_util.c
+++ iproute2-3.x/tc/tc_util.c
@@ -202,18 +202,19 @@
extern int use_iec;
unsigned long kilo = use_iec ? 1024 : 1000;
const char *str = use_iec ? "i" : "";
- int i = 0;
static char *units[5] = {"", "K", "M", "G", "T"};
+ int i;
rate <<= 3; /* bytes/sec -> bits/sec */
- for (i = 0; i < ARRAY_SIZE(units); i++) {
+ for (i = 0; i < ARRAY_SIZE(units) - 1; i++) {
if (rate < kilo)
break;
if (((rate % kilo) != 0) && rate < 1000*kilo)
break;
rate /= kilo;
}
+
snprintf(buf, len, "%.0f%s%sbit", (double)rate, units[i], str);
}
Loading…
Cancel
Save