tcp_metrics: Rename addr to daddr and add local variable

Renaming addr to daddr, because we will introduce saddr later.

The local variable is necessary to store RTA_PAYLOAD(a) temporarily.

Signed-off-by: Christoph Paasch <christoph.paasch@uclouvain.be>
This commit is contained in:
Christoph Paasch 2014-02-06 23:15:02 +01:00 committed by Stephen Hemminger
parent 1c9af05071
commit 54b237a058
1 changed files with 26 additions and 25 deletions

View File

@ -74,7 +74,7 @@ static struct
int flushp; int flushp;
int flushe; int flushe;
int cmd; int cmd;
inet_prefix addr; inet_prefix daddr;
} f; } f;
static int flush_update(void) static int flush_update(void)
@ -95,8 +95,8 @@ static int process_msg(const struct sockaddr_nl *who, struct nlmsghdr *n,
struct rtattr *attrs[TCP_METRICS_ATTR_MAX + 1], *a; struct rtattr *attrs[TCP_METRICS_ATTR_MAX + 1], *a;
int len = n->nlmsg_len; int len = n->nlmsg_len;
char abuf[256]; char abuf[256];
inet_prefix addr; inet_prefix daddr;
int family, i, atype; int family, i, atype, dlen = 0;
if (n->nlmsg_type != genl_family) if (n->nlmsg_type != genl_family)
return -1; return -1;
@ -114,35 +114,37 @@ static int process_msg(const struct sockaddr_nl *who, struct nlmsghdr *n,
a = attrs[TCP_METRICS_ATTR_ADDR_IPV4]; a = attrs[TCP_METRICS_ATTR_ADDR_IPV4];
if (a) { if (a) {
if (f.addr.family && f.addr.family != AF_INET) if (f.daddr.family && f.daddr.family != AF_INET)
return 0; return 0;
memcpy(&addr.data, RTA_DATA(a), 4); memcpy(&daddr.data, RTA_DATA(a), 4);
addr.bytelen = 4; daddr.bytelen = 4;
family = AF_INET; family = AF_INET;
atype = TCP_METRICS_ATTR_ADDR_IPV4; atype = TCP_METRICS_ATTR_ADDR_IPV4;
dlen = RTA_PAYLOAD(a);
} else { } else {
a = attrs[TCP_METRICS_ATTR_ADDR_IPV6]; a = attrs[TCP_METRICS_ATTR_ADDR_IPV6];
if (a) { if (a) {
if (f.addr.family && f.addr.family != AF_INET6) if (f.daddr.family && f.daddr.family != AF_INET6)
return 0; return 0;
memcpy(&addr.data, RTA_DATA(a), 16); memcpy(&daddr.data, RTA_DATA(a), 16);
addr.bytelen = 16; daddr.bytelen = 16;
family = AF_INET6; family = AF_INET6;
atype = TCP_METRICS_ATTR_ADDR_IPV6; atype = TCP_METRICS_ATTR_ADDR_IPV6;
dlen = RTA_PAYLOAD(a);
} else } else
return 0; return 0;
} }
if (f.addr.family && f.addr.bitlen >= 0 && if (f.daddr.family && f.daddr.bitlen >= 0 &&
inet_addr_match(&addr, &f.addr, f.addr.bitlen)) inet_addr_match(&daddr, &f.daddr, f.daddr.bitlen))
return 0; return 0;
if (f.flushb) { if (f.flushb) {
struct nlmsghdr *fn; struct nlmsghdr *fn;
TCPM_REQUEST(req2, 128, TCP_METRICS_CMD_DEL, NLM_F_REQUEST); TCPM_REQUEST(req2, 128, TCP_METRICS_CMD_DEL, NLM_F_REQUEST);
addattr_l(&req2.n, sizeof(req2), atype, &addr.data, addattr_l(&req2.n, sizeof(req2), atype, &daddr.data,
addr.bytelen); daddr.bytelen);
if (NLMSG_ALIGN(f.flushp) + req2.n.nlmsg_len > f.flushe) { if (NLMSG_ALIGN(f.flushp) + req2.n.nlmsg_len > f.flushe) {
if (flush_update()) if (flush_update())
@ -161,8 +163,7 @@ static int process_msg(const struct sockaddr_nl *who, struct nlmsghdr *n,
fprintf(fp, "Deleted "); fprintf(fp, "Deleted ");
fprintf(fp, "%s", fprintf(fp, "%s",
format_host(family, RTA_PAYLOAD(a), &addr.data, format_host(family, dlen, &daddr.data, abuf, sizeof(abuf)));
abuf, sizeof(abuf)));
a = attrs[TCP_METRICS_ATTR_AGE]; a = attrs[TCP_METRICS_ATTR_AGE];
if (a) { if (a) {
@ -260,8 +261,8 @@ static int tcpm_do_cmd(int cmd, int argc, char **argv)
int ack; int ack;
memset(&f, 0, sizeof(f)); memset(&f, 0, sizeof(f));
f.addr.bitlen = -1; f.daddr.bitlen = -1;
f.addr.family = preferred_family; f.daddr.family = preferred_family;
switch (preferred_family) { switch (preferred_family) {
case AF_UNSPEC: case AF_UNSPEC:
@ -283,14 +284,14 @@ static int tcpm_do_cmd(int cmd, int argc, char **argv)
} }
if (matches(*argv, "help") == 0) if (matches(*argv, "help") == 0)
usage(); usage();
if (f.addr.bitlen >= 0) if (f.daddr.bitlen >= 0)
duparg2(who, *argv); duparg2(who, *argv);
get_prefix(&f.addr, *argv, preferred_family); get_prefix(&f.daddr, *argv, preferred_family);
if (f.addr.bytelen && f.addr.bytelen * 8 == f.addr.bitlen) { if (f.daddr.bytelen && f.daddr.bytelen * 8 == f.daddr.bitlen) {
if (f.addr.family == AF_INET) if (f.daddr.family == AF_INET)
atype = TCP_METRICS_ATTR_ADDR_IPV4; atype = TCP_METRICS_ATTR_ADDR_IPV4;
else if (f.addr.family == AF_INET6) else if (f.daddr.family == AF_INET6)
atype = TCP_METRICS_ATTR_ADDR_IPV6; atype = TCP_METRICS_ATTR_ADDR_IPV6;
} }
if ((CMD_DEL & cmd) && atype < 0) { if ((CMD_DEL & cmd) && atype < 0) {
@ -310,7 +311,7 @@ static int tcpm_do_cmd(int cmd, int argc, char **argv)
cmd = CMD_DEL; cmd = CMD_DEL;
/* flush for all addresses ? Single del without address */ /* flush for all addresses ? Single del without address */
if (cmd == CMD_FLUSH && f.addr.bitlen <= 0 && if (cmd == CMD_FLUSH && f.daddr.bitlen <= 0 &&
preferred_family == AF_UNSPEC) { preferred_family == AF_UNSPEC) {
cmd = CMD_DEL; cmd = CMD_DEL;
req.g.cmd = TCP_METRICS_CMD_DEL; req.g.cmd = TCP_METRICS_CMD_DEL;
@ -338,8 +339,8 @@ static int tcpm_do_cmd(int cmd, int argc, char **argv)
if (ack) if (ack)
req.n.nlmsg_flags |= NLM_F_ACK; req.n.nlmsg_flags |= NLM_F_ACK;
if (atype >= 0) if (atype >= 0)
addattr_l(&req.n, sizeof(req), atype, &f.addr.data, addattr_l(&req.n, sizeof(req), atype, &f.daddr.data,
f.addr.bytelen); f.daddr.bytelen);
} else { } else {
req.n.nlmsg_flags |= NLM_F_DUMP; req.n.nlmsg_flags |= NLM_F_DUMP;
} }