projects
/
project
/
netifd.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
0b7be79
)
add a function for adding a virtual device (not tracked in the avl tree)
author
Felix Fietkau
<nbd@openwrt.org>
Sun, 27 Mar 2011 16:40:01 +0000
(18:40 +0200)
committer
Felix Fietkau
<nbd@openwrt.org>
Sun, 27 Mar 2011 16:40:01 +0000
(18:40 +0200)
device.c
patch
|
blob
|
history
device.h
patch
|
blob
|
history
diff --git
a/device.c
b/device.c
index
e1ffba1
..
f9cb058
100644
(file)
--- a/
device.c
+++ b/
device.c
@@
-85,29
+85,36
@@
int check_device_state(struct device *dev)
return dev->type->check_state(dev);
}
return dev->type->check_state(dev);
}
-
int init_device(struct device *dev, const struct device_type *type, const char *if
name)
+
void init_virtual_device(struct device *dev, const struct device_type *type, const char *
name)
{
{
- int ret;
-
assert(dev);
assert(type);
assert(dev);
assert(type);
- if (ifname)
- strncpy(dev->ifname, ifname, IFNAMSIZ);
+ fprintf(stderr, "Initialize interface '%s'\n", dev->ifname);
+ INIT_LIST_HEAD(&dev->users);
+ dev->type = type;
+
+ if (name)
+ strncpy(dev->ifname, name, IFNAMSIZ);
+}
+
+int init_device(struct device *dev, const struct device_type *type, const char *ifname)
+{
+ int ret;
+
+ init_virtual_device(dev, type, ifname);
if (!dev->set_state)
dev->set_state = set_device_state;
if (!dev->set_state)
dev->set_state = set_device_state;
- fprintf(stderr, "Initialize interface '%s'\n", dev->ifname);
- INIT_LIST_HEAD(&dev->users);
dev->avl.key = dev->ifname;
dev->avl.key = dev->ifname;
- dev->type = type;
ret = avl_insert(&devices, &dev->avl);
if (ret < 0)
return ret;
check_device_state(dev);
ret = avl_insert(&devices, &dev->avl);
if (ret < 0)
return ret;
check_device_state(dev);
+
return 0;
}
return 0;
}
@@
-149,7
+156,8
@@
void cleanup_device(struct device *dev)
dep->cb(dep, DEV_EVENT_REMOVE);
}
dep->cb(dep, DEV_EVENT_REMOVE);
}
- avl_delete(&devices, &dev->avl);
+ if (dev->avl.key)
+ avl_delete(&devices, &dev->avl);
}
void set_device_present(struct device *dev, bool state)
}
void set_device_present(struct device *dev, bool state)
diff --git
a/device.h
b/device.h
index
9e7d309
..
bf93ebc
100644
(file)
--- a/
device.h
+++ b/
device.h
@@
-79,6
+79,7
@@
struct device_hotplug_ops {
int (*del)(struct device *main, struct device *member);
};
int (*del)(struct device *main, struct device *member);
};
+void init_virtual_device(struct device *dev, const struct device_type *type, const char *name);
int init_device(struct device *iface, const struct device_type *type, const char *ifname);
void cleanup_device(struct device *iface);
struct device *get_device(const char *name, bool create);
int init_device(struct device *iface, const struct device_type *type, const char *ifname);
void cleanup_device(struct device *iface);
struct device *get_device(const char *name, bool create);