/* * New interface uses sysfs to find bridges */ static int new_foreach_bridge(int (*iterator)(const char *name, void *), void *arg) { struct sysfs_class_device *dev; struct dlist *devlist; int count = 0; if (!br_class_net) { dprintf("no class /sys/class/net\n"); return -EOPNOTSUPP; } devlist = sysfs_get_class_devices(br_class_net); if (!devlist) { dprintf("Can't read devices from sysfs\n"); return -errno; } dlist_for_each_data(devlist, dev, struct sysfs_class_device) { if (isbridge(dev)) { ++count; if (iterator(dev->name, arg)) break; } } return count; }
int main(int argc, char *argv[]) { struct sysfs_class *sf_class; struct sysfs_device *sf_dev; struct sysfs_class_device *sf_cdev; struct dlist *sf_cdev_list = NULL; char buffer[64]; int port; struct sysfs_attribute *sf_attr; struct sysfs_attribute *sf_part; struct dlist *sf_part_list = NULL; sf_class = sysfs_open_class("block"); if (sf_class != NULL) { sf_cdev_list = sysfs_get_class_devices(sf_class); if (sf_cdev_list != NULL) { dlist_for_each_data(sf_cdev_list, sf_cdev, struct sysfs_class_device) { sf_dev = sysfs_get_classdev_device(sf_cdev); if (sf_dev != NULL) { port = *(strstr(sf_dev->path, "/usb1/") + 8) - 48; if ((port != 1) && (port != 2)) { port = -1; } printf("%s, USB port %d\n", sf_cdev->name, port); /* size */ snprintf(buffer, 64, "%s/size", sf_cdev->path); sf_attr = sysfs_open_attribute(buffer); if (sf_attr != NULL) { if (sysfs_read_attribute(sf_attr) == 0) { printf("size: %s", sf_attr->value); } sysfs_close_attribute(sf_attr); } /* vendor */ snprintf(buffer, 64, "%s/device/vendor", sf_cdev->path); sf_attr = sysfs_open_attribute(buffer); if (sf_attr != NULL) { if (sysfs_read_attribute(sf_attr) == 0) { printf("vendor: %s", sf_attr->value); } sysfs_close_attribute(sf_attr); } /* model */ snprintf(buffer, 64, "%s/device/model", sf_cdev->path); sf_attr = sysfs_open_attribute(buffer); if (sf_attr != NULL) { if (sysfs_read_attribute(sf_attr) == 0) { printf("model: %s", sf_attr->value); } sysfs_close_attribute(sf_attr); } sf_part_list = sysfs_open_directory_list(sf_cdev->path); if (sf_part_list != NULL) { dlist_for_each_data(sf_part_list, sf_part, struct sysfs_attribute) { if (strncmp("queue", (char *) sf_part, 5) != 0) { snprintf(buffer, 64, "%s/%s/size", sf_cdev->path, sf_part); sf_attr = sysfs_open_attribute(buffer); if (sf_attr != NULL) { if (sysfs_read_attribute(sf_attr) == 0) { printf("%s - size: %s", sf_part, sf_attr->value); } sysfs_close_attribute(sf_attr); } } } }