static bool check_route(struct nlmsghdr *hdr, int ifindex)
{
+ struct rtmsg *r = NLMSG_DATA(hdr);
struct nlattr *tb[__RTA_MAX];
+ if (r->rtm_protocol == RTPROT_KERNEL &&
+ r->rtm_family == AF_INET6)
+ return false;
+
nlmsg_parse(hdr, sizeof(struct rtmsg), tb, __RTA_MAX - 1, NULL);
if (!tb[RTA_OIF])
return false;
}
static bool
-read_int_file(int dir_fd, const char *file, int *val)
+read_uint64_file(int dir_fd, const char *file, uint64_t *val)
{
char buf[64];
bool ret = false;
ret = read_string_file(dir_fd, file, buf, sizeof(buf));
if (ret)
- *val = strtoul(buf, NULL, 0);
+ *val = strtoull(buf, NULL, 0);
return ret;
}
struct ifreq ifr;
char buf[64], *s;
void *c;
- int dir_fd, val = 0;
+ int dir_fd;
+ uint64_t val = 0;
snprintf(buf, sizeof(buf), "/sys/class/net/%s", dev->ifname);
dir_fd = open(buf, O_DIRECTORY);
- if (read_int_file(dir_fd, "carrier", &val))
+ if (read_uint64_file(dir_fd, "carrier", &val))
blobmsg_add_u8(b, "link", !!val);
memset(&ecmd, 0, sizeof(ecmd));
};
char buf[64];
int stats_dir;
- int i, val = 0;
+ int i;
+ uint64_t val = 0;
snprintf(buf, sizeof(buf), "/sys/class/net/%s/statistics", dev->ifname);
stats_dir = open(buf, O_DIRECTORY);
return -1;
for (i = 0; i < ARRAY_SIZE(counters); i++)
- if (read_int_file(stats_dir, counters[i], &val))
- blobmsg_add_u32(b, counters[i], val);
+ if (read_uint64_file(stats_dir, counters[i], &val))
+ blobmsg_add_u64(b, counters[i], val);
close(stats_dir);
return 0;
.rtm_family = (alen == 4) ? AF_INET : AF_INET6,
.rtm_dst_len = route->mask,
.rtm_table = RT_TABLE_MAIN,
- .rtm_protocol = (route->flags & DEVADDR_KERNEL) ? RTPROT_KERNEL : RTPROT_BOOT,
+ .rtm_protocol = (route->flags & DEVADDR_KERNEL) ? RTPROT_KERNEL : RTPROT_STATIC,
.rtm_scope = scope,
.rtm_type = (cmd == RTM_DELROUTE) ? 0: RTN_UNICAST,
};