mirror of
https://github.com/sheumann/hush.git
synced 2024-12-22 14:30:31 +00:00
Save a few more bytes
This commit is contained in:
parent
c82f2324bd
commit
18eae0031a
@ -534,6 +534,7 @@ static int iproute_get(int argc, char **argv)
|
|||||||
char *odev = NULL;
|
char *odev = NULL;
|
||||||
int connected = 0;
|
int connected = 0;
|
||||||
int from_ok = 0;
|
int from_ok = 0;
|
||||||
|
const char *options[] = { "from", "iif", "oif", "dev", "notify", "connected", "to", 0 };
|
||||||
|
|
||||||
memset(&req, 0, sizeof(req));
|
memset(&req, 0, sizeof(req));
|
||||||
|
|
||||||
@ -552,40 +553,53 @@ static int iproute_get(int argc, char **argv)
|
|||||||
req.r.rtm_tos = 0;
|
req.r.rtm_tos = 0;
|
||||||
|
|
||||||
while (argc > 0) {
|
while (argc > 0) {
|
||||||
if (matches(*argv, "from") == 0) {
|
switch (compare_string_array(options, *argv)) {
|
||||||
inet_prefix addr;
|
case 0: /* from */
|
||||||
NEXT_ARG();
|
{
|
||||||
from_ok = 1;
|
inet_prefix addr;
|
||||||
get_prefix(&addr, *argv, req.r.rtm_family);
|
|
||||||
if (req.r.rtm_family == AF_UNSPEC)
|
|
||||||
req.r.rtm_family = addr.family;
|
|
||||||
if (addr.bytelen)
|
|
||||||
addattr_l(&req.n, sizeof(req), RTA_SRC, &addr.data, addr.bytelen);
|
|
||||||
req.r.rtm_src_len = addr.bitlen;
|
|
||||||
} else if (matches(*argv, "iif") == 0) {
|
|
||||||
NEXT_ARG();
|
|
||||||
idev = *argv;
|
|
||||||
} else if (matches(*argv, "oif") == 0 ||
|
|
||||||
strcmp(*argv, "dev") == 0) {
|
|
||||||
NEXT_ARG();
|
|
||||||
odev = *argv;
|
|
||||||
} else if (matches(*argv, "notify") == 0) {
|
|
||||||
req.r.rtm_flags |= RTM_F_NOTIFY;
|
|
||||||
} else if (matches(*argv, "connected") == 0) {
|
|
||||||
connected = 1;
|
|
||||||
} else {
|
|
||||||
inet_prefix addr;
|
|
||||||
if (strcmp(*argv, "to") == 0) {
|
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
|
from_ok = 1;
|
||||||
|
get_prefix(&addr, *argv, req.r.rtm_family);
|
||||||
|
if (req.r.rtm_family == AF_UNSPEC) {
|
||||||
|
req.r.rtm_family = addr.family;
|
||||||
|
}
|
||||||
|
if (addr.bytelen) {
|
||||||
|
addattr_l(&req.n, sizeof(req), RTA_SRC, &addr.data, addr.bytelen);
|
||||||
|
}
|
||||||
|
req.r.rtm_src_len = addr.bitlen;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
get_prefix(&addr, *argv, req.r.rtm_family);
|
case 1: /* iif */
|
||||||
if (req.r.rtm_family == AF_UNSPEC)
|
NEXT_ARG();
|
||||||
req.r.rtm_family = addr.family;
|
idev = *argv;
|
||||||
if (addr.bytelen)
|
break;
|
||||||
addattr_l(&req.n, sizeof(req), RTA_DST, &addr.data, addr.bytelen);
|
case 2: /* oif */
|
||||||
req.r.rtm_dst_len = addr.bitlen;
|
case 3: /* dev */
|
||||||
|
NEXT_ARG();
|
||||||
|
odev = *argv;
|
||||||
|
break;
|
||||||
|
case 4: /* notify */
|
||||||
|
req.r.rtm_flags |= RTM_F_NOTIFY;
|
||||||
|
break;
|
||||||
|
case 5: /* connected */
|
||||||
|
connected = 1;
|
||||||
|
break;
|
||||||
|
case 6: /* to */
|
||||||
|
NEXT_ARG();
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
inet_prefix addr;
|
||||||
|
get_prefix(&addr, *argv, req.r.rtm_family);
|
||||||
|
if (req.r.rtm_family == AF_UNSPEC) {
|
||||||
|
req.r.rtm_family = addr.family;
|
||||||
|
}
|
||||||
|
if (addr.bytelen) {
|
||||||
|
addattr_l(&req.n, sizeof(req), RTA_DST, &addr.data, addr.bytelen);
|
||||||
|
}
|
||||||
|
req.r.rtm_dst_len = addr.bitlen;
|
||||||
|
}
|
||||||
|
argc--; argv++;
|
||||||
}
|
}
|
||||||
argc--; argv++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (req.r.rtm_dst_len == 0) {
|
if (req.r.rtm_dst_len == 0) {
|
||||||
|
Loading…
Reference in New Issue
Block a user