root/include/linux/connector.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0-or-later */
   2 /*
   3  *      connector.h
   4  * 
   5  * 2004-2005 Copyright (c) Evgeniy Polyakov <zbr@ioremap.net>
   6  * All rights reserved.
   7  */
   8 #ifndef __CONNECTOR_H
   9 #define __CONNECTOR_H
  10 
  11 
  12 #include <linux/refcount.h>
  13 
  14 #include <linux/list.h>
  15 #include <linux/workqueue.h>
  16 
  17 #include <net/sock.h>
  18 #include <uapi/linux/connector.h>
  19 
  20 #define CN_CBQ_NAMELEN          32
  21 
  22 struct cn_queue_dev {
  23         atomic_t refcnt;
  24         unsigned char name[CN_CBQ_NAMELEN];
  25 
  26         struct list_head queue_list;
  27         spinlock_t queue_lock;
  28 
  29         struct sock *nls;
  30 };
  31 
  32 struct cn_callback_id {
  33         unsigned char name[CN_CBQ_NAMELEN];
  34         struct cb_id id;
  35 };
  36 
  37 struct cn_callback_entry {
  38         struct list_head callback_entry;
  39         refcount_t refcnt;
  40         struct cn_queue_dev *pdev;
  41 
  42         struct cn_callback_id id;
  43         void (*callback) (struct cn_msg *, struct netlink_skb_parms *);
  44 
  45         u32 seq, group;
  46 };
  47 
  48 struct cn_dev {
  49         struct cb_id id;
  50 
  51         u32 seq, groups;
  52         struct sock *nls;
  53 
  54         struct cn_queue_dev *cbdev;
  55 };
  56 
  57 /**
  58  * cn_add_callback() - Registers new callback with connector core.
  59  *
  60  * @id:         unique connector's user identifier.
  61  *              It must be registered in connector.h for legal
  62  *              in-kernel users.
  63  * @name:       connector's callback symbolic name.
  64  * @callback:   connector's callback.
  65  *              parameters are %cn_msg and the sender's credentials
  66  */
  67 int cn_add_callback(struct cb_id *id, const char *name,
  68                     void (*callback)(struct cn_msg *, struct netlink_skb_parms *));
  69 /**
  70  * cn_del_callback() - Unregisters new callback with connector core.
  71  *
  72  * @id:         unique connector's user identifier.
  73  */
  74 void cn_del_callback(struct cb_id *id);
  75 
  76 
  77 /**
  78  * cn_netlink_send_mult - Sends message to the specified groups.
  79  *
  80  * @msg:        message header(with attached data).
  81  * @len:        Number of @msg to be sent.
  82  * @portid:     destination port.
  83  *              If non-zero the message will be sent to the given port,
  84  *              which should be set to the original sender.
  85  * @group:      destination group.
  86  *              If @portid and @group is zero, then appropriate group will
  87  *              be searched through all registered connector users, and
  88  *              message will be delivered to the group which was created
  89  *              for user with the same ID as in @msg.
  90  *              If @group is not zero, then message will be delivered
  91  *              to the specified group.
  92  * @gfp_mask:   GFP mask.
  93  *
  94  * It can be safely called from softirq context, but may silently
  95  * fail under strong memory pressure.
  96  *
  97  * If there are no listeners for given group %-ESRCH can be returned.
  98  */
  99 int cn_netlink_send_mult(struct cn_msg *msg, u16 len, u32 portid, u32 group, gfp_t gfp_mask);
 100 
 101 /**
 102  * cn_netlink_send_mult - Sends message to the specified groups.
 103  *
 104  * @msg:        message header(with attached data).
 105  * @portid:     destination port.
 106  *              If non-zero the message will be sent to the given port,
 107  *              which should be set to the original sender.
 108  * @group:      destination group.
 109  *              If @portid and @group is zero, then appropriate group will
 110  *              be searched through all registered connector users, and
 111  *              message will be delivered to the group which was created
 112  *              for user with the same ID as in @msg.
 113  *              If @group is not zero, then message will be delivered
 114  *              to the specified group.
 115  * @gfp_mask:   GFP mask.
 116  *
 117  * It can be safely called from softirq context, but may silently
 118  * fail under strong memory pressure.
 119  *
 120  * If there are no listeners for given group %-ESRCH can be returned.
 121  */
 122 int cn_netlink_send(struct cn_msg *msg, u32 portid, u32 group, gfp_t gfp_mask);
 123 
 124 int cn_queue_add_callback(struct cn_queue_dev *dev, const char *name,
 125                           struct cb_id *id,
 126                           void (*callback)(struct cn_msg *, struct netlink_skb_parms *));
 127 void cn_queue_del_callback(struct cn_queue_dev *dev, struct cb_id *id);
 128 void cn_queue_release_callback(struct cn_callback_entry *);
 129 
 130 struct cn_queue_dev *cn_queue_alloc_dev(const char *name, struct sock *);
 131 void cn_queue_free_dev(struct cn_queue_dev *dev);
 132 
 133 int cn_cb_equal(struct cb_id *, struct cb_id *);
 134 
 135 #endif                          /* __CONNECTOR_H */

/* [<][>][^][v][top][bottom][index][help] */