8 device_state_cb set_state;
9 struct blob_attr *config;
13 tunnel_set_state(struct device *dev, bool up)
15 struct tunnel *tun = container_of(dev, struct tunnel, dev);
19 ret = system_add_ip_tunnel(dev->ifname, tun->config);
24 ret = tun->set_state(dev, up);
26 system_del_ip_tunnel(dev->ifname);
31 static struct device *
32 tunnel_create(const char *name, struct blob_attr *attr)
37 tun = calloc(1, sizeof(*tun));
39 tun->config = config_memdup(attr);
40 device_init(dev, &tunnel_device_type, name);
41 tun->set_state = dev->set_state;
42 dev->set_state = tunnel_set_state;
43 device_set_present(dev, true);
49 tunnel_free(struct device *dev)
51 struct tunnel *tun = container_of(dev, struct tunnel, dev);
56 const struct device_type tunnel_device_type = {
58 .config_params = &tunnel_attr_list,
60 .create = tunnel_create,