commit
6fc9d80472
@ -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…
Reference in New Issue