2  * include/net/tipc/tipc.h: Main include file for TIPC users
 
   4  * Copyright (c) 2003-2006, Ericsson AB
 
   5  * Copyright (c) 2005, Wind River Systems
 
   8  * Redistribution and use in source and binary forms, with or without
 
   9  * modification, are permitted provided that the following conditions are met:
 
  11  * 1. Redistributions of source code must retain the above copyright
 
  12  *    notice, this list of conditions and the following disclaimer.
 
  13  * 2. Redistributions in binary form must reproduce the above copyright
 
  14  *    notice, this list of conditions and the following disclaimer in the
 
  15  *    documentation and/or other materials provided with the distribution.
 
  16  * 3. Neither the names of the copyright holders nor the names of its
 
  17  *    contributors may be used to endorse or promote products derived from
 
  18  *    this software without specific prior written permission.
 
  20  * Alternatively, this software may be distributed under the terms of the
 
  21  * GNU General Public License ("GPL") version 2 as published by the Free
 
  22  * Software Foundation.
 
  24  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 
  25  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 
  26  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 
  27  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 
  28  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 
  29  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 
  30  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 
  31  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 
  32  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 
  33  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 
  34  * POSSIBILITY OF SUCH DAMAGE.
 
  42 #include <linux/tipc.h>
 
  43 #include <linux/skbuff.h>
 
  50  * TIPC operating mode routines
 
  53 u32 tipc_get_addr(void);
 
  55 #define TIPC_NOT_RUNNING  0
 
  56 #define TIPC_NODE_MODE    1
 
  57 #define TIPC_NET_MODE     2
 
  59 typedef void (*tipc_mode_event)(void *usr_handle, int mode, u32 addr);
 
  61 int tipc_attach(unsigned int *userref, tipc_mode_event, void *usr_handle);
 
  63 void tipc_detach(unsigned int userref);
 
  65 int tipc_get_mode(void);
 
  68  * TIPC port manipulation routines
 
  71 typedef void (*tipc_msg_err_event) (void *usr_handle,
 
  74                                     unsigned char const *data,
 
  77                                     struct tipc_portid const *attmpt_destid);
 
  79 typedef void (*tipc_named_msg_err_event) (void *usr_handle,
 
  82                                           unsigned char const *data,
 
  85                                           struct tipc_name_seq const *attmpt_dest);
 
  87 typedef void (*tipc_conn_shutdown_event) (void *usr_handle,
 
  90                                           unsigned char const *data,
 
  94 typedef void (*tipc_msg_event) (void *usr_handle,
 
  97                                 unsigned char const *data,
 
  99                                 unsigned int importance, 
 
 100                                 struct tipc_portid const *origin);
 
 102 typedef void (*tipc_named_msg_event) (void *usr_handle,
 
 104                                       struct sk_buff **buf,
 
 105                                       unsigned char const *data,
 
 107                                       unsigned int importance, 
 
 108                                       struct tipc_portid const *orig,
 
 109                                       struct tipc_name_seq const *dest);
 
 111 typedef void (*tipc_conn_msg_event) (void *usr_handle,
 
 113                                      struct sk_buff **buf,
 
 114                                      unsigned char const *data,
 
 117 typedef void (*tipc_continue_event) (void *usr_handle, 
 
 120 int tipc_createport(unsigned int tipc_user, 
 
 122                     unsigned int importance, 
 
 123                     tipc_msg_err_event error_cb, 
 
 124                     tipc_named_msg_err_event named_error_cb, 
 
 125                     tipc_conn_shutdown_event conn_error_cb, 
 
 126                     tipc_msg_event message_cb, 
 
 127                     tipc_named_msg_event named_message_cb, 
 
 128                     tipc_conn_msg_event conn_message_cb, 
 
 129                     tipc_continue_event continue_event_cb,/* May be zero */
 
 132 int tipc_deleteport(u32 portref);
 
 134 int tipc_ownidentity(u32 portref, struct tipc_portid *port);
 
 136 int tipc_portimportance(u32 portref, unsigned int *importance);
 
 137 int tipc_set_portimportance(u32 portref, unsigned int importance);
 
 139 int tipc_portunreliable(u32 portref, unsigned int *isunreliable);
 
 140 int tipc_set_portunreliable(u32 portref, unsigned int isunreliable);
 
 142 int tipc_portunreturnable(u32 portref, unsigned int *isunreturnable);
 
 143 int tipc_set_portunreturnable(u32 portref, unsigned int isunreturnable);
 
 145 int tipc_publish(u32 portref, unsigned int scope, 
 
 146                  struct tipc_name_seq const *name_seq);
 
 147 int tipc_withdraw(u32 portref, unsigned int scope,
 
 148                   struct tipc_name_seq const *name_seq); /* 0: all */
 
 150 int tipc_connect2port(u32 portref, struct tipc_portid const *port);
 
 152 int tipc_disconnect(u32 portref);
 
 154 int tipc_shutdown(u32 ref); /* Sends SHUTDOWN msg */
 
 156 int tipc_isconnected(u32 portref, int *isconnected);
 
 158 int tipc_peer(u32 portref, struct tipc_portid *peer);
 
 160 int tipc_ref_valid(u32 portref); 
 
 163  * TIPC messaging routines
 
 166 #define TIPC_PORT_IMPORTANCE 100        /* send using current port setting */
 
 169 int tipc_send(u32 portref,
 
 170               unsigned int num_sect,
 
 171               struct iovec const *msg_sect);
 
 173 int tipc_send_buf(u32 portref,
 
 177 int tipc_send2name(u32 portref, 
 
 178                    struct tipc_name const *name, 
 
 179                    u32 domain,  /* 0:own zone */
 
 180                    unsigned int num_sect,
 
 181                    struct iovec const *msg_sect);
 
 183 int tipc_send_buf2name(u32 portref,
 
 184                        struct tipc_name const *name,
 
 189 int tipc_forward2name(u32 portref, 
 
 190                       struct tipc_name const *name, 
 
 191                       u32 domain,   /*0: own zone */
 
 192                       unsigned int section_count,
 
 193                       struct iovec const *msg_sect,
 
 194                       struct tipc_portid const *origin,
 
 195                       unsigned int importance);
 
 197 int tipc_forward_buf2name(u32 portref,
 
 198                           struct tipc_name const *name,
 
 202                           struct tipc_portid const *orig,
 
 203                           unsigned int importance);
 
 205 int tipc_send2port(u32 portref,
 
 206                    struct tipc_portid const *dest,
 
 207                    unsigned int num_sect,
 
 208                    struct iovec const *msg_sect);
 
 210 int tipc_send_buf2port(u32 portref,
 
 211                        struct tipc_portid const *dest,
 
 215 int tipc_forward2port(u32 portref,
 
 216                       struct tipc_portid const *dest,
 
 217                       unsigned int num_sect,
 
 218                       struct iovec const *msg_sect,
 
 219                       struct tipc_portid const *origin,
 
 220                       unsigned int importance);
 
 222 int tipc_forward_buf2port(u32 portref,
 
 223                           struct tipc_portid const *dest,
 
 226                           struct tipc_portid const *orig,
 
 227                           unsigned int importance);
 
 229 int tipc_multicast(u32 portref, 
 
 230                    struct tipc_name_seq const *seq, 
 
 231                    u32 domain,  /* 0:own zone */
 
 232                    unsigned int section_count,
 
 233                    struct iovec const *msg);
 
 236 int tipc_multicast_buf(u32 portref, 
 
 237                        struct tipc_name_seq const *seq, 
 
 238                        u32 domain,      /* 0:own zone */
 
 244  * TIPC subscription routines
 
 247 int tipc_ispublished(struct tipc_name const *name);
 
 250  * Get number of available nodes within specified domain (excluding own node)
 
 253 unsigned int tipc_available_nodes(const u32 domain);