- device_add_user(&state->l3_dev,
- device_get(blobmsg_data(tb[NOTIFY_IFNAME]), dev_create));
+ devname = blobmsg_data(tb[NOTIFY_IFNAME]);
+ if (tb[NOTIFY_TUNNEL]) {
+ dev = proto_shell_create_tunnel(devname,
+ tb[NOTIFY_TUNNEL]);
+ if (!dev)
+ return UBUS_STATUS_INVALID_ARGUMENT;
+ } else {
+ dev = device_get(devname, dev_create);
+ if (!dev)
+ return UBUS_STATUS_NOT_FOUND;
+ }
+
+ device_add_user(&state->l3_dev, dev);