+static bool
+read_int_file(int dir_fd, const char *file, int *val)
+{
+ char buf[64];
+ int len, fd;
+ bool ret = false;
+
+ fd = openat(dir_fd, file, O_RDONLY);
+ if (fd < 0)
+ return false;
+
+retry:
+ len = read(fd, buf, sizeof(buf));
+ if (len < 0) {
+ if (errno == EINTR)
+ goto retry;
+ } else if (len > 0) {
+ buf[len] = 0;
+ *val = strtoul(buf, NULL, 0);
+ ret = true;
+ }
+
+ close(fd);
+
+ return ret;
+}
+
+int
+system_if_dump_info(struct device *dev, struct blob_buf *b)
+{
+ char buf[64];
+ int dir_fd, 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))
+ blobmsg_add_u8(b, "link", !!val);
+
+ close(dir_fd);
+ return 0;
+}
+
+int
+system_if_dump_stats(struct device *dev, struct blob_buf *b)