[DEV_ATTR_DADTRANSMITS] = { .name = "dadtransmits", .type = BLOBMSG_TYPE_INT32 },
[DEV_ATTR_MULTICAST_TO_UNICAST] = { .name = "multicast_to_unicast", .type = BLOBMSG_TYPE_BOOL },
[DEV_ATTR_MULTICAST_ROUTER] = { .name = "multicast_router", .type = BLOBMSG_TYPE_INT32 },
+ [DEV_ATTR_MULTICAST] = { .name ="multicast", .type = BLOBMSG_TYPE_BOOL },
};
const struct uci_blob_param_list device_attr_list = {
s->neigh6reachabletime : os->neigh6reachabletime;
n->dadtransmits = s->flags & DEV_OPT_DADTRANSMITS ?
s->dadtransmits : os->dadtransmits;
+ n->multicast = s->flags & DEV_OPT_MULTICAST ?
+ s->multicast : os->multicast;
n->multicast_to_unicast = s->multicast_to_unicast;
n->multicast_router = s->multicast_router;
n->flags = s->flags | os->flags | os->valid_flags;
DPRINTF("Invalid value: %d - (Use 0: never, 1: learn, 2: always)\n", blobmsg_get_u32(cur));
}
+ if ((cur = tb[DEV_ATTR_MULTICAST])) {
+ s->multicast = blobmsg_get_bool(cur);
+ s->flags |= DEV_OPT_MULTICAST;
+ }
+
device_set_disabled(dev, disabled);
}
if (dep->claimed)
return 0;
+ if (!dev)
+ return -1;
+
dep->claimed = true;
D(DEVICE, "Claim %s %s, new active count: %d\n", dev->type->name, dev->ifname, dev->active + 1);
if (++dev->active != 1)
free(dev->config);
dev->config = config;
if (change == DEV_CONFIG_RESTART && dev->present) {
+ int ret = 0;
+
device_set_present(dev, false);
if (dev->active && !dev->external) {
- dev->set_state(dev, false);
- dev->set_state(dev, true);
+ ret = dev->set_state(dev, false);
+ if (!ret)
+ ret = dev->set_state(dev, true);
}
- device_set_present(dev, true);
+ if (!ret)
+ device_set_present(dev, true);
}
break;
case DEV_CONFIG_NO_CHANGE:
blobmsg_add_u8(b, "multicast_to_unicast", st.multicast_to_unicast);
if (st.flags & DEV_OPT_MULTICAST_ROUTER)
blobmsg_add_u32(b, "multicast_router", st.multicast_router);
+ if (st.flags & DEV_OPT_MULTICAST)
+ blobmsg_add_u8(b, "multicast", st.multicast);
}
s = blobmsg_open_table(b, "statistics");