Revert to Fedora kernel-2.6.17-1.2187_FC5 patched with vs2.0.2.1; there are too many...
[linux-2.6.git] / drivers / w1 / w1_netlink.c
index df9d3e7..328645d 100644 (file)
@@ -26,6 +26,7 @@
 #include "w1_log.h"
 #include "w1_netlink.h"
 
+#ifndef NETLINK_DISABLED
 void w1_netlink_send(struct w1_master *dev, struct w1_netlink_msg *msg)
 {
        unsigned int size;
@@ -33,6 +34,9 @@ void w1_netlink_send(struct w1_master *dev, struct w1_netlink_msg *msg)
        struct w1_netlink_msg *data;
        struct nlmsghdr *nlh;
 
+       if (!dev->nls)
+               return;
+
        size = NLMSG_SPACE(sizeof(struct w1_netlink_msg));
 
        skb = alloc_skb(size, GFP_ATOMIC);
@@ -47,9 +51,42 @@ void w1_netlink_send(struct w1_master *dev, struct w1_netlink_msg *msg)
 
        memcpy(data, msg, sizeof(struct w1_netlink_msg));
 
-       NETLINK_CB(skb).dst_groups = dev->groups;
+       NETLINK_CB(skb).dst_group = dev->groups;
        netlink_broadcast(dev->nls, skb, 0, dev->groups, GFP_ATOMIC);
 
 nlmsg_failure:
        return;
 }
+
+int dev_init_netlink(struct w1_master *dev)
+{
+       dev->nls = netlink_kernel_create(NETLINK_W1, 1, NULL, THIS_MODULE);
+       if (!dev->nls) {
+               printk(KERN_ERR "Failed to create new netlink socket(%u) for w1 master %s.\n",
+                       NETLINK_W1, dev->dev.bus_id);
+       }
+
+       return 0;
+}
+
+void dev_fini_netlink(struct w1_master *dev)
+{
+       if (dev->nls && dev->nls->sk_socket)
+               sock_release(dev->nls->sk_socket);
+}
+#else
+#warning Netlink support is disabled. Please compile with NET support enabled.
+
+void w1_netlink_send(struct w1_master *dev, struct w1_netlink_msg *msg)
+{
+}
+
+int dev_init_netlink(struct w1_master *dev)
+{
+       return 0;
+}
+
+void dev_fini_netlink(struct w1_master *dev)
+{
+}
+#endif