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);
21 perror("add_ip_tunnel");
26 ret = tun->set_state(dev, up);
28 system_del_ip_tunnel(dev->ifname);
33 static struct device *
34 tunnel_create(const char *name, struct blob_attr *attr)
39 tun = calloc(1, sizeof(*tun));
41 tun->config = config_memdup(attr);
42 device_init(dev, &tunnel_device_type, name);
43 tun->set_state = dev->set_state;
44 dev->set_state = tunnel_set_state;
45 device_set_present(dev, true);
51 tunnel_free(struct device *dev)
53 struct tunnel *tun = container_of(dev, struct tunnel, dev);
58 const struct device_type tunnel_device_type = {
60 .config_params = &tunnel_attr_list,
62 .create = tunnel_create,