• Evgeniy Polyakov's avatar
    [NET]: Add netlink connector. · 7672d0b5
    Evgeniy Polyakov authored
    Kernel connector - new userspace <-> kernel space easy to use
    communication module which implements easy to use bidirectional
    message bus using netlink as it's backend.  Connector was created to
    eliminate complex skb handling both in send and receive message bus
    direction.
    
    Connector driver adds possibility to connect various agents using as
    one of it's backends netlink based network.  One must register
    callback and identifier. When driver receives special netlink message
    with appropriate identifier, appropriate callback will be called.
    
    From the userspace point of view it's quite straightforward:
    
    	socket();
    	bind();
    	send();
    	recv();
    
    But if kernelspace want to use full power of such connections, driver
    writer must create special sockets, must know about struct sk_buff
    handling...  Connector allows any kernelspace agents to use netlink
    based networking for inter-process communication in a significantly
    easier way:
    
    int cn_add_callback(struct cb_id *id, char *name, void (*callback) (void *));
    void cn_netlink_send(struct cn_msg *msg, u32 __groups, int gfp_mask);
    
    struct cb_id
    {
    	__u32			idx;
    	__u32			val;
    };
    
    idx and val are unique identifiers which must be registered in
    connector.h for in-kernel usage.  void (*callback) (void *) - is a
    callback function which will be called when message with above idx.val
    will be received by connector core.
    
    Using connector completely hides low-level transport layer from it's
    users.
    
    Connector uses new netlink ability to have many groups in one socket.
    
    [ Incorporating many cleanups and fixes by myself and
      Andrew Morton -DaveM ]
    Signed-off-by: default avatarEvgeniy Polyakov <johnpol@2ka.mipt.ru>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    7672d0b5
cn_test.c 4.29 KB