bdev = container_of(dev, struct bonding_device, dev);
attr = blob_memdup(attr);
- blobmsg_parse(device_attr_list.params, __DEV_ATTR_MAX, tb_dev,
- blob_data(attr), blob_len(attr));
- blobmsg_parse(bonding_attrs, __BOND_ATTR_MAX, tb_b,
- blob_data(attr), blob_len(attr));
+ blobmsg_parse_attr(device_attr_list.params, __DEV_ATTR_MAX, tb_dev, attr);
+ blobmsg_parse_attr(bonding_attrs, __BOND_ATTR_MAX, tb_b, attr);
bdev->has_macaddr = tb_dev[DEV_ATTR_MACADDR];
if (bdev->primary_port && !bdev->primary_port->set_primary &&
struct blob_attr *otb_dev[__DEV_ATTR_MAX];
struct blob_attr *otb_b[__BOND_ATTR_MAX];
- blobmsg_parse(device_attr_list.params, __DEV_ATTR_MAX, otb_dev,
- blob_data(bdev->config_data), blob_len(bdev->config_data));
+ blobmsg_parse_attr(device_attr_list.params, __DEV_ATTR_MAX, otb_dev,
+ bdev->config_data);
uci_blob_diff(tb_dev, otb_dev, &device_attr_list, diff);
if (diff[0] | diff[1])
ret = DEV_CONFIG_RESTART;
- blobmsg_parse(bonding_attrs, __BOND_ATTR_MAX, otb_b,
- blob_data(bdev->config_data), blob_len(bdev->config_data));
+ blobmsg_parse_attr(bonding_attrs, __BOND_ATTR_MAX, otb_b,
+ bdev->config_data);
diff[0] = 0;
uci_blob_diff(tb_b, otb_b, &bonding_attr_list, diff);
bst = container_of(dev, struct bridge_state, dev);
attr = blob_memdup(attr);
- blobmsg_parse(device_attr_list.params, __DEV_ATTR_MAX, tb_dev,
- blob_data(attr), blob_len(attr));
- blobmsg_parse(bridge_attrs, __BRIDGE_ATTR_MAX, tb_br,
- blob_data(attr), blob_len(attr));
+ blobmsg_parse_attr(device_attr_list.params, __DEV_ATTR_MAX, tb_dev, attr);
+ blobmsg_parse_attr(bridge_attrs, __BRIDGE_ATTR_MAX, tb_br, attr);
if (tb_dev[DEV_ATTR_MACADDR])
bst->primary_port = NULL;
struct blob_attr *otb_dev[__DEV_ATTR_MAX];
struct blob_attr *otb_br[__BRIDGE_ATTR_MAX];
- blobmsg_parse(device_attr_list.params, __DEV_ATTR_MAX, otb_dev,
- blob_data(bst->config_data), blob_len(bst->config_data));
+ blobmsg_parse_attr(device_attr_list.params, __DEV_ATTR_MAX, otb_dev,
+ bst->config_data);
uci_blob_diff(tb_dev, otb_dev, &device_attr_list, diff);
if (diff[0] | diff[1]) {
dev->ifname, diff[1], diff[0]);
}
- blobmsg_parse(bridge_attrs, __BRIDGE_ATTR_MAX, otb_br,
- blob_data(bst->config_data), blob_len(bst->config_data));
+ blobmsg_parse_attr(bridge_attrs, __BRIDGE_ATTR_MAX, otb_br, bst->config_data);
diff[0] = diff[1] = 0;
uci_blob_diff(tb_br, otb_br, &bridge_attr_list, diff);
struct blobmsg_policy policy = { .name = name, .type = type };
struct blob_attr *cur;
- blobmsg_parse(&policy, 1, &cur, blobmsg_data(attr), blobmsg_len(attr));
+ blobmsg_parse_attr(&policy, 1, &cur, attr);
return cur;
}
/* device type is unused for simple devices */
devtype = NULL;
- blobmsg_parse(dev_attrs, __DEV_ATTR_MAX, tb, blob_data(attr), blob_len(attr));
+ blobmsg_parse_attr(dev_attrs, __DEV_ATTR_MAX, tb, attr);
dev = device_get(name, true);
if (!dev)
return NULL;
memset(tb, 0, sizeof(tb));
if (attr)
- blobmsg_parse(dev_attrs, __DEV_ATTR_MAX, tb,
- blob_data(attr), blob_len(attr));
+ blobmsg_parse_attr(dev_attrs, __DEV_ATTR_MAX, tb, attr);
device_init_settings(dev, tb);
return DEV_CONFIG_RESTART;
if (strcmp(type, "ubus.object.add"))
return;
- blobmsg_parse(&wait_policy, 1, &attr, blob_data(msg), blob_len(msg));
+ blobmsg_parse_attr(&wait_policy, 1, &attr, msg);
if (!attr)
return;
if (config) {
config = blob_memdup(config);
- blobmsg_parse(brpol, __BRIDGE_MAX, tb, blobmsg_data(config), blobmsg_len(config));
+ blobmsg_parse_attr(brpol, __BRIDGE_MAX, tb, config);
ebr->edev.dep_name = blobmsg_get_string(tb[BRIDGE_DEPENDS_ON]);
if (tb[BRIDGE_EMPTY] && blobmsg_get_bool(tb[BRIDGE_EMPTY]))
config_params = ebr->edev.dev.type->config_params;
pol = config_params->params;
- blobmsg_parse(pol, n_params, old_tb, blobmsg_data(ebr->config),
- blobmsg_len(ebr->config));
- blobmsg_parse(pol, n_params, brtb, blobmsg_data(config), blobmsg_len
- (config));
+ blobmsg_parse_attr(pol, n_params, old_tb, ebr->config);
+ blobmsg_parse_attr(pol, n_params, brtb, config);
diff = 0;
uci_blob_diff(brtb, old_tb, config_params, &diff);
struct blob_attr *tb[params->n_params];
struct blob_attr *old_tb[params->n_params];
- blobmsg_parse(params->params, params->n_params, tb, blobmsg_data(config),
- blobmsg_len(config));
- blobmsg_parse(params->params, params->n_params, old_tb, blobmsg_data(edev->dev.config),
- blobmsg_len(edev->dev.config));
+ blobmsg_parse_attr(params->params, params->n_params, tb, config);
+ blobmsg_parse_attr(params->params, params->n_params, old_tb, edev->dev.config);
uci_blob_diff(tb, old_tb, edev->etype->config_params, &diff);
if (!diff)
struct blob_attr *tb[n_params];
- blobmsg_parse(info_policy, n_params, tb, blobmsg_data(reply), blobmsg_len(reply));
+ blobmsg_parse_attr(info_policy, n_params, tb, reply);
add_parsed_data(tb, info_policy, n_params, buf);
}
int af = v6 ? AF_INET6: AF_INET;
struct ether_addr *ea;
- blobmsg_parse(neighbor_attr, __NEIGHBOR_MAX, tb, blobmsg_data(attr), blobmsg_data_len(attr));
+ blobmsg_parse_attr(neighbor_attr, __NEIGHBOR_MAX, tb, attr);
if (!iface) {
if ((cur = tb[NEIGHBOR_INTERFACE]) == NULL)
int af = v6 ? AF_INET6 : AF_INET;
bool no_device = false;
- blobmsg_parse(route_attr, __ROUTE_MAX, tb, blobmsg_data(attr), blobmsg_data_len(attr));
+ blobmsg_parse_attr(route_attr, __ROUTE_MAX, tb, attr);
if ((cur = tb[ROUTE_DISABLED]) != NULL && blobmsg_get_bool(cur))
return;
iface->l3_dev.cb = interface_l3_dev_cb;
iface->ext_dev.cb = interface_ext_dev_cb;
- blobmsg_parse(iface_attrs, IFACE_ATTR_MAX, tb,
- blob_data(config), blob_len(config));
+ blobmsg_parse_attr(iface_attrs, IFACE_ATTR_MAX, tb, config);
iface->zone = NULL;
if ((cur = tb[IFACE_ATTR_ZONE]))
struct blob_attr *cur;
char *name = NULL;
- blobmsg_parse(iface_attrs, IFACE_ATTR_MAX, tb,
- blob_data(config), blob_len(config));
+ blobmsg_parse_attr(iface_attrs, IFACE_ATTR_MAX, tb, config);
if (alias) {
if ((cur = tb[IFACE_ATTR_INTERFACE]))
if (!if_new->device_config)
return false;
- blobmsg_parse(device_attr_list.params, __DEV_ATTR_MAX, otb,
- blob_data(if_old->config), blob_len(if_old->config));
-
- blobmsg_parse(device_attr_list.params, __DEV_ATTR_MAX, ntb,
- blob_data(if_new->config), blob_len(if_new->config));
+ blobmsg_parse_attr(device_attr_list.params, __DEV_ATTR_MAX, otb, if_old->config);
+ blobmsg_parse_attr(device_attr_list.params, __DEV_ATTR_MAX, ntb, if_new->config);
uci_blob_diff(ntb, otb, &device_attr_list, diff);
char *iface_name;
int af = v6 ? AF_INET6 : AF_INET;
- blobmsg_parse(rule_attr, __RULE_MAX, tb, blobmsg_data(attr), blobmsg_data_len(attr));
+ blobmsg_parse_attr(rule_attr, __RULE_MAX, tb, attr);
if ((cur = tb[RULE_DISABLED]) != NULL && blobmsg_get_bool(cur))
return;
mvdev = container_of(dev, struct macvlan_device, dev);
attr = blob_memdup(attr);
- blobmsg_parse(device_attr_list.params, __DEV_ATTR_MAX, tb_dev,
- blob_data(attr), blob_len(attr));
- blobmsg_parse(macvlan_attrs, __MACVLAN_ATTR_MAX, tb_mv,
- blob_data(attr), blob_len(attr));
+ blobmsg_parse_attr(device_attr_list.params, __DEV_ATTR_MAX, tb_dev, attr);
+ blobmsg_parse_attr(macvlan_attrs, __MACVLAN_ATTR_MAX, tb_mv, attr);
device_init_settings(dev, tb_dev);
macvlan_apply_settings(mvdev, tb_mv);
struct blob_attr *otb_dev[__DEV_ATTR_MAX];
struct blob_attr *otb_mv[__MACVLAN_ATTR_MAX];
- blobmsg_parse(device_attr_list.params, __DEV_ATTR_MAX, otb_dev,
- blob_data(mvdev->config_data), blob_len(mvdev->config_data));
+ blobmsg_parse_attr(device_attr_list.params, __DEV_ATTR_MAX, otb_dev,
+ mvdev->config_data);
if (uci_blob_diff(tb_dev, otb_dev, &device_attr_list, NULL))
ret = DEV_CONFIG_RESTART;
- blobmsg_parse(macvlan_attrs, __MACVLAN_ATTR_MAX, otb_mv,
- blob_data(mvdev->config_data), blob_len(mvdev->config_data));
+ blobmsg_parse_attr(macvlan_attrs, __MACVLAN_ATTR_MAX, otb_mv,
+ mvdev->config_data);
if (uci_blob_diff(tb_mv, otb_mv, &macvlan_attr_list, NULL))
ret = DEV_CONFIG_RESTART;
state = container_of(proto, struct proto_shell_state, proto);
- blobmsg_parse(notify_attr, __NOTIFY_LAST, tb, blob_data(attr), blob_len(attr));
+ blobmsg_parse_attr(notify_attr, __NOTIFY_LAST, tb, attr);
if (!tb[NOTIFY_ACTION])
return UBUS_STATUS_INVALID_ARGUMENT;
.type = BLOBMSG_TYPE_INT32
};
- blobmsg_parse(&checkup_policy, 1, &tb, blob_data(attr), blob_len(attr));
+ blobmsg_parse_attr(&checkup_policy, 1, &tb, (struct blob_attr *)attr);
if (!tb) {
state->checkup_interval = -1;
state->checkup_timeout.cb = NULL;
if (!addr)
return NULL;
- blobmsg_parse(proto_ip_addr, __ADDR_MAX, tb, blobmsg_data(attr), blobmsg_data_len(attr));
+ blobmsg_parse_attr(proto_ip_addr, __ADDR_MAX, tb, attr);
addr->mask = v6 ? 128 : 32;
if ((cur = tb[ADDR_MASK])) {
int n_v4 = 0, n_v6 = 0;
struct in_addr bcast = {0,}, ptp = {0,};
- blobmsg_parse(proto_ip_attributes, __OPT_MAX, tb, blob_data(attr), blob_len(attr));
+ blobmsg_parse_attr(proto_ip_attributes, __OPT_MAX, tb, attr);
if ((cur = tb[OPT_NETMASK])) {
netmask = parse_netmask_string(blobmsg_data(cur), false);
struct blob_attr *cur;
int n_v4 = 0, n_v6 = 0;
- blobmsg_parse(proto_ip_attributes, __OPT_MAX, tb, blob_data(attr), blob_len(attr));
+ blobmsg_parse_attr(proto_ip_attributes, __OPT_MAX, tb, attr);
if ((cur = tb[OPT_IPADDR]))
n_v4 = parse_address_list(iface, cur, false, ext);
struct blob_attr *tb_data[__IPIP6_DATA_ATTR_MAX];
uint32_t tun_flags = IP6_TNL_F_IGN_ENCAP_LIMIT;
- blobmsg_parse(ipip6_data_attr_list.params, __IPIP6_DATA_ATTR_MAX, tb_data,
- blobmsg_data(cur), blobmsg_len(cur));
+ blobmsg_parse_attr(ipip6_data_attr_list.params, __IPIP6_DATA_ATTR_MAX,
+ tb_data, cur);
if ((cur = tb_data[IPIP6_DATA_ENCAPLIMIT])) {
char *str = blobmsg_get_string(cur);
struct in_addr ip4prefix;
unsigned ip4len, ip6len, ealen, offset;
- blobmsg_parse(fmr_data_attr_list.params, __FMR_DATA_ATTR_MAX, tb_fmr,
- blobmsg_data(rcur), blobmsg_len(rcur));
+ blobmsg_parse_attr(fmr_data_attr_list.params, __FMR_DATA_ATTR_MAX,
+ tb_fmr, rcur);
if (!(tb_cur = tb_fmr[FMR_DATA_PREFIX6]) ||
!parse_ip_and_netmask(AF_INET6,
if ((cur = tb[TUNNEL_ATTR_DATA])) {
struct blob_attr *tb_data[__GRE_DATA_ATTR_MAX];
- blobmsg_parse(gre_data_attr_list.params, __GRE_DATA_ATTR_MAX, tb_data,
- blobmsg_data(cur), blobmsg_len(cur));
+ blobmsg_parse_attr(gre_data_attr_list.params, __GRE_DATA_ATTR_MAX,
+ tb_data, cur);
if ((cur = tb_data[GRE_DATA_IKEY])) {
if ((ikey = blobmsg_get_u32(cur)))
struct blob_attr *tb_data[__VTI_DATA_ATTR_MAX];
uint32_t ikey = 0, okey = 0;
- blobmsg_parse(vti_data_attr_list.params, __VTI_DATA_ATTR_MAX, tb_data,
- blobmsg_data(cur), blobmsg_len(cur));
+ blobmsg_parse_attr(vti_data_attr_list.params, __VTI_DATA_ATTR_MAX,
+ tb_data, cur);
if ((cur = tb_data[VTI_DATA_IKEY])) {
if ((ikey = blobmsg_get_u32(cur)))
struct blob_attr *tb_data[__XFRM_DATA_ATTR_MAX];
uint32_t if_id = 0;
- blobmsg_parse(xfrm_data_attr_list.params, __XFRM_DATA_ATTR_MAX, tb_data,
- blobmsg_data(cur), blobmsg_len(cur));
+ blobmsg_parse_attr(xfrm_data_attr_list.params, __XFRM_DATA_ATTR_MAX,
+ tb_data, cur);
if ((cur = tb_data[XFRM_DATA_IF_ID])) {
if ((if_id = blobmsg_get_u32(cur)))
int ret = 0;
if ((cur = tb[TUNNEL_ATTR_DATA]))
- blobmsg_parse(vxlan_data_attr_list.params, __VXLAN_DATA_ATTR_MAX, tb_data,
- blobmsg_data(cur), blobmsg_len(cur));
+ blobmsg_parse_attr(vxlan_data_attr_list.params, __VXLAN_DATA_ATTR_MAX,
+ tb_data, cur);
else
return -EINVAL;
unsigned int mask;
struct ip_tunnel_6rd p6;
- blobmsg_parse(sixrd_data_attr_list.params, __SIXRD_DATA_ATTR_MAX, tb_data,
- blobmsg_data(cur), blobmsg_len(cur));
+ blobmsg_parse_attr(sixrd_data_attr_list.params, __SIXRD_DATA_ATTR_MAX,
+ tb_data, cur);
memset(&p6, 0, sizeof(p6));
struct blob_attr *cur;
const char *str;
- blobmsg_parse(tunnel_attr_list.params, __TUNNEL_ATTR_MAX, tb,
- blob_data(attr), blob_len(attr));
+ blobmsg_parse_attr(tunnel_attr_list.params, __TUNNEL_ATTR_MAX, tb, attr);
system_link_del(dev->ifname);
memset(tb_dev, 0, sizeof(tb_dev));
if (attr)
- blobmsg_parse(device_attr_list.params, __DEV_ATTR_MAX, tb_dev,
- blob_data(attr), blob_len(attr));
+ blobmsg_parse_attr(device_attr_list.params, __DEV_ATTR_MAX, tb_dev, attr);
device_init_settings(dev, tb_dev);
bool v6 = false;
bool exclude = false;
- blobmsg_parse(route_policy, __HR_MAX, tb, blob_data(msg), blob_len(msg));
+ blobmsg_parse_attr(route_policy, __HR_MAX, tb, msg);
if (!tb[HR_TARGET])
return UBUS_STATUS_INVALID_ARGUMENT;
struct interface *iface;
struct blob_attr *config;
- blobmsg_parse(dynamic_policy, __DI_MAX, tb, blob_data(msg), blob_len(msg));
+ blobmsg_parse_attr(dynamic_policy, __DI_MAX, tb, msg);
if (!tb[DI_NAME])
return UBUS_STATUS_INVALID_ARGUMENT;
if (target_netns_fd < 0)
return UBUS_STATUS_INVALID_ARGUMENT;
- blobmsg_parse(netns_updown_policy, __NETNS_UPDOWN_MAX, tb, blob_data(msg), blob_len(msg));
+ blobmsg_parse_attr(netns_updown_policy, __NETNS_UPDOWN_MAX, tb, msg);
start = tb[NETNS_UPDOWN_START] && blobmsg_get_bool(tb[NETNS_UPDOWN_START]);
struct device *dev = NULL;
struct blob_attr *tb[__DEV_MAX];
- blobmsg_parse(dev_policy, __DEV_MAX, tb, blob_data(msg), blob_len(msg));
+ blobmsg_parse_attr(dev_policy, __DEV_MAX, tb, msg);
if (tb[DEV_NAME]) {
dev = device_find(blobmsg_data(tb[DEV_NAME]));
struct blob_attr *cur;
size_t rem;
- blobmsg_parse(alias_attrs, __ALIAS_ATTR_MAX, tb, blob_data(msg), blob_len(msg));
+ blobmsg_parse_attr(alias_attrs, __ALIAS_ATTR_MAX, tb, msg);
if (!tb[ALIAS_ATTR_ALIAS])
return UBUS_STATUS_INVALID_ARGUMENT;
struct blob_attr *cur;
bool auth_status;
- blobmsg_parse(dev_state_policy, __DEV_STATE_MAX, tb, blob_data(msg), blob_len(msg));
+ blobmsg_parse_attr(dev_state_policy, __DEV_STATE_MAX, tb, msg);
cur = tb[DEV_STATE_NAME];
if (!cur)
struct blob_attr *tb[__DEV_HOTPLUG_ATTR_MAX];
const char *name;
- blobmsg_parse(dev_hotplug_policy, __DEV_HOTPLUG_ATTR_MAX, tb,
- blob_data(msg), blob_len(msg));
+ blobmsg_parse_attr(dev_hotplug_policy, __DEV_HOTPLUG_ATTR_MAX, tb, msg);
if (!tb[DEV_HOTPLUG_ATTR_NAME] || !tb[DEV_HOTPLUG_ATTR_ADD])
return UBUS_STATUS_INVALID_ARGUMENT;
iface = container_of(obj, struct interface, ubus);
- blobmsg_parse(dev_link_policy, __DEV_LINK_MAX, tb, blob_data(msg), blob_len(msg));
+ blobmsg_parse_attr(dev_link_policy, __DEV_LINK_MAX, tb, msg);
if (!tb[DEV_LINK_NAME])
return UBUS_STATUS_INVALID_ARGUMENT;
struct blob_attr *tb;
size_t i;
- blobmsg_parse(&iface_policy, 1, &tb, blob_data(msg), blob_len(msg));
+ blobmsg_parse_attr(&iface_policy, 1, &tb, msg);
if (!tb)
return UBUS_STATUS_INVALID_ARGUMENT;
veth = container_of(dev, struct veth, dev);
attr = blob_memdup(attr);
- blobmsg_parse(device_attr_list.params, __DEV_ATTR_MAX, tb_dev,
- blob_data(attr), blob_len(attr));
- blobmsg_parse(veth_attrs, __VETH_ATTR_MAX, tb_mv,
- blob_data(attr), blob_len(attr));
+ blobmsg_parse_attr(device_attr_list.params, __DEV_ATTR_MAX, tb_dev, attr);
+ blobmsg_parse_attr(veth_attrs, __VETH_ATTR_MAX, tb_mv, attr);
device_init_settings(dev, tb_dev);
veth_apply_settings(veth, tb_mv);
struct blob_attr *otb_dev[__DEV_ATTR_MAX];
struct blob_attr *otb_mv[__VETH_ATTR_MAX];
- blobmsg_parse(device_attr_list.params, __DEV_ATTR_MAX, otb_dev,
- blob_data(veth->config_data), blob_len(veth->config_data));
+ blobmsg_parse_attr(device_attr_list.params, __DEV_ATTR_MAX, otb_dev,
+ veth->config_data);
if (uci_blob_diff(tb_dev, otb_dev, &device_attr_list, NULL))
ret = DEV_CONFIG_RESTART;
- blobmsg_parse(veth_attrs, __VETH_ATTR_MAX, otb_mv,
- blob_data(veth->config_data), blob_len(veth->config_data));
+ blobmsg_parse_attr(veth_attrs, __VETH_ATTR_MAX, otb_mv,
+ veth->config_data);
if (uci_blob_diff(tb_mv, otb_mv, &veth_attr_list, NULL))
ret = DEV_CONFIG_RESTART;
mvdev = container_of(dev, struct vlandev_device, dev);
attr = blob_memdup(attr);
- blobmsg_parse(device_attr_list.params, __DEV_ATTR_MAX, tb_dev,
- blob_data(attr), blob_len(attr));
- blobmsg_parse(vlandev_attrs, __VLANDEV_ATTR_MAX, tb_mv,
- blob_data(attr), blob_len(attr));
+ blobmsg_parse_attr(device_attr_list.params, __DEV_ATTR_MAX, tb_dev, attr);
+ blobmsg_parse_attr(vlandev_attrs, __VLANDEV_ATTR_MAX, tb_mv, attr);
device_init_settings(dev, tb_dev);
vlandev_apply_settings(mvdev, tb_mv);
struct blob_attr *otb_dev[__DEV_ATTR_MAX];
struct blob_attr *otb_mv[__VLANDEV_ATTR_MAX];
- blobmsg_parse(device_attr_list.params, __DEV_ATTR_MAX, otb_dev,
- blob_data(mvdev->config_data), blob_len(mvdev->config_data));
+ blobmsg_parse_attr(device_attr_list.params, __DEV_ATTR_MAX, otb_dev,
+ mvdev->config_data);
if (uci_blob_diff(tb_dev, otb_dev, &device_attr_list, NULL))
ret = DEV_CONFIG_RESTART;
- blobmsg_parse(vlandev_attrs, __VLANDEV_ATTR_MAX, otb_mv,
- blob_data(mvdev->config_data), blob_len(mvdev->config_data));
+ blobmsg_parse_attr(vlandev_attrs, __VLANDEV_ATTR_MAX, otb_mv,
+ mvdev->config_data);
if (uci_blob_diff(tb_mv, otb_mv, &vlandev_attr_list, NULL))
ret = DEV_CONFIG_RESTART;
vst = container_of(dev, struct vrf_state, dev);
attr = blob_memdup(attr);
- blobmsg_parse(device_attr_list.params, __DEV_ATTR_MAX, tb_dev,
- blob_data(attr), blob_len(attr));
- blobmsg_parse(vrf_attrs, __VRF_ATTR_MAX, tb_v,
- blob_data(attr), blob_len(attr));
+ blobmsg_parse_attr(device_attr_list.params, __DEV_ATTR_MAX, tb_dev, attr);
+ blobmsg_parse_attr(vrf_attrs, __VRF_ATTR_MAX, tb_v, attr);
if (tb_dev[DEV_ATTR_MACADDR])
vst->primary_port = NULL;
struct blob_attr *otb_dev[__DEV_ATTR_MAX];
struct blob_attr *otb_v[__VRF_ATTR_MAX];
- blobmsg_parse(device_attr_list.params, __DEV_ATTR_MAX, otb_dev,
- blob_data(vst->config_data), blob_len(vst->config_data));
+ blobmsg_parse_attr(device_attr_list.params, __DEV_ATTR_MAX, otb_dev,
+ vst->config_data);
diff[0] = diff[1] = 0;
uci_blob_diff(tb_dev, otb_dev, &device_attr_list, diff);
dev->ifname, diff[1], diff[0]);
}
- blobmsg_parse(vrf_attrs, __VRF_ATTR_MAX, otb_v,
- blob_data(vst->config_data), blob_len(vst->config_data));
+ blobmsg_parse_attr(vrf_attrs, __VRF_ATTR_MAX, otb_v,
+ vst->config_data);
diff[0] = diff[1] = 0;
uci_blob_diff(tb_v, otb_v, &vrf_attr_list, diff);