1
0
mirror of git://projects.qi-hardware.com/openwrt-xburst.git synced 2024-11-02 00:29:41 +02:00
openwrt-xburst/target/linux/generic/patches-2.6.32/223-kobject-add-broadcast_uevent.patch
juhosg c78a804527 generic: introduce broadcast_uevent function
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@22858 3c298f89-4303-0410-b956-a3cf2f4a3e73
2010-08-31 20:06:25 +00:00

70 lines
1.8 KiB
Diff

--- a/include/linux/kobject.h
+++ b/include/linux/kobject.h
@@ -30,6 +30,8 @@
#define UEVENT_NUM_ENVP 32 /* number of env pointers */
#define UEVENT_BUFFER_SIZE 2048 /* buffer for the variables */
+struct sk_buff;
+
/* path to the userspace helper executed on an event */
extern char uevent_helper[];
@@ -208,6 +210,10 @@ int add_uevent_var(struct kobj_uevent_en
int kobject_action_type(const char *buf, size_t count,
enum kobject_action *type);
+
+int broadcast_uevent(struct sk_buff *skb, __u32 pid, __u32 group,
+ gfp_t allocation);
+
#else
static inline int kobject_uevent(struct kobject *kobj,
enum kobject_action action)
@@ -224,6 +230,16 @@ static inline int add_uevent_var(struct
static inline int kobject_action_type(const char *buf, size_t count,
enum kobject_action *type)
{ return -EINVAL; }
+
+void kfree_skb(struct sk_buff *);
+
+static inline int broadcast_uevent(struct sk_buff *skb, __u32 pid, __u32 group,
+ gfp_t allocation)
+{
+ kfree_skb(skb);
+ return 0;
+}
+
#endif
#endif /* _KOBJECT_H_ */
--- a/lib/kobject_uevent.c
+++ b/lib/kobject_uevent.c
@@ -330,6 +330,27 @@ int add_uevent_var(struct kobj_uevent_en
EXPORT_SYMBOL_GPL(add_uevent_var);
#if defined(CONFIG_NET)
+int broadcast_uevent(struct sk_buff *skb, __u32 pid, __u32 group,
+ gfp_t allocation)
+{
+ if (!uevent_sock) {
+ kfree_skb(skb);
+ return -ENODEV;
+ }
+
+ return netlink_broadcast(uevent_sock, skb, pid, group, allocation);;
+}
+#else
+int broadcast_uevent(struct sk_buff *skb, __u32 pid, __u32 group,
+ gfp_t allocation)
+{
+ kfree_skb(skb);
+ return 0;
+}
+#endif
+EXPORT_SYMBOL_GPL(broadcast_uevent);
+
+#if defined(CONFIG_NET)
static int __init kobject_uevent_init(void)
{
uevent_sock = netlink_kernel_create(&init_net, NETLINK_KOBJECT_UEVENT,