#include <errno.h>
#include "netifd.h"
+#include "device.h"
+#include "interface.h"
#include "system.h"
struct bridge_state {
return 0;
system_bridge_delif(&bst->dev, bm->dev.dev);
- release_device(bm->dev.dev);
+ device_release(bm->dev.dev);
return 0;
}
if (!bm->present)
return 0;
- ret = claim_device(bm->dev.dev);
+ ret = device_claim(bm->dev.dev);
if (ret < 0)
goto error;
if (bst->dev.active)
bridge_enable_member(bm);
else if (bst->n_present == 1)
- set_device_present(&bst->dev, true);
+ device_set_present(&bst->dev, true);
break;
case DEV_EVENT_REMOVE:
bm->present = false;
bm->bst->n_present--;
if (bst->n_present == 0)
- set_device_present(&bst->dev, false);
+ device_set_present(&bst->dev, false);
break;
default:
if (!bst->n_present) {
/* initialization of all member interfaces failed */
system_bridge_delbr(&bst->dev);
- set_device_present(&bst->dev, false);
+ device_set_present(&bst->dev, false);
return -ENOENT;
}
bm = calloc(1, sizeof(*bm));
bm->bst = bst;
bm->dev.cb = bridge_member_cb;
- add_device_user(&bm->dev, dev);
+ device_add_user(&bm->dev, dev);
list_add(&bm->list, &bst->members);
}
list_del(&bm->list);
- remove_device_user(&bm->dev);
+ device_remove_user(&bm->dev);
free(bm);
}
{
struct device *dev;
- dev = get_device(name, true);
+ dev = device_get(name, true);
if (!dev)
return;
free(bst);
}
+static void
+bridge_dump_status(struct device *dev, struct blob_buf *b)
+{
+ struct bridge_state *bst;
+ struct bridge_member *bm;
+ void *list;
+
+ bst = container_of(dev, struct bridge_state, dev);
+
+ list = blobmsg_open_array(b, "bridge-members");
+ list_for_each_entry(bm, &bst->members, list) {
+ blobmsg_add_string(b, NULL, bm->dev.dev->ifname);
+ }
+ blobmsg_close_array(b, list);
+}
+
struct device *
bridge_create(const char *name, struct uci_section *s)
{
static const struct device_type bridge_type = {
.name = "Bridge",
.free = bridge_free,
+ .dump_status = bridge_dump_status,
};
struct bridge_state *bst;
struct device *dev;
- dev = get_device(name, false);
+ dev = device_get(name, false);
if (dev)
return NULL;
if (!bst)
return NULL;
- init_device(&bst->dev, &bridge_type, name);
+ device_init(&bst->dev, &bridge_type, name);
bst->set_state = bst->dev.set_state;
bst->dev.set_state = bridge_set_state;
if (!dev)
return -1;
- add_device_user(&iface->main_dev, dev);
+ device_add_user(&iface->main_dev, dev);
return 0;
}