1/* 2 * include/net/tipc/tipc.h: Main include file for TIPC users 3 * 4 * Copyright (c) 2003-2006, Ericsson AB 5 * Copyright (c) 2005,2010 Wind River Systems 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions are met: 10 * 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. 19 * 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. 23 * 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. 35 */ 36 37#ifndef _NET_TIPC_H_ 38#define _NET_TIPC_H_ 39 40#ifdef __KERNEL__ 41 42#include <linux/tipc.h> 43#include <linux/skbuff.h> 44 45/* 46 * Native API 47 */ 48 49/* 50 * TIPC operating mode routines 51 */ 52 53u32 tipc_get_addr(void); 54 55#define TIPC_NOT_RUNNING 0 56#define TIPC_NODE_MODE 1 57#define TIPC_NET_MODE 2 58 59typedef void (*tipc_mode_event)(void *usr_handle, int mode, u32 addr); 60 61int tipc_attach(unsigned int *userref, tipc_mode_event, void *usr_handle); 62 63void tipc_detach(unsigned int userref); 64 65int tipc_get_mode(void); 66 67/* 68 * TIPC port manipulation routines 69 */ 70 71typedef void (*tipc_msg_err_event) (void *usr_handle, 72 u32 portref, 73 struct sk_buff **buf, 74 unsigned char const *data, 75 unsigned int size, 76 int reason, 77 struct tipc_portid const *attmpt_destid); 78 79typedef void (*tipc_named_msg_err_event) (void *usr_handle, 80 u32 portref, 81 struct sk_buff **buf, 82 unsigned char const *data, 83 unsigned int size, 84 int reason, 85 struct tipc_name_seq const *attmpt_dest); 86 87typedef void (*tipc_conn_shutdown_event) (void *usr_handle, 88 u32 portref, 89 struct sk_buff **buf, 90 unsigned char const *data, 91 unsigned int size, 92 int reason); 93 94typedef void (*tipc_msg_event) (void *usr_handle, 95 u32 portref, 96 struct sk_buff **buf, 97 unsigned char const *data, 98 unsigned int size, 99 unsigned int importance, 100 struct tipc_portid const *origin); 101 102typedef void (*tipc_named_msg_event) (void *usr_handle, 103 u32 portref, 104 struct sk_buff **buf, 105 unsigned char const *data, 106 unsigned int size, 107 unsigned int importance, 108 struct tipc_portid const *orig, 109 struct tipc_name_seq const *dest); 110 111typedef void (*tipc_conn_msg_event) (void *usr_handle, 112 u32 portref, 113 struct sk_buff **buf, 114 unsigned char const *data, 115 unsigned int size); 116 117typedef void (*tipc_continue_event) (void *usr_handle, 118 u32 portref); 119 120int tipc_createport(unsigned int tipc_user, 121 void *usr_handle, 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, 130 u32 *portref); 131 132int tipc_deleteport(u32 portref); 133 134int tipc_ownidentity(u32 portref, struct tipc_portid *port); 135 136int tipc_portimportance(u32 portref, unsigned int *importance); 137int tipc_set_portimportance(u32 portref, unsigned int importance); 138 139int tipc_portunreliable(u32 portref, unsigned int *isunreliable); 140int tipc_set_portunreliable(u32 portref, unsigned int isunreliable); 141 142int tipc_portunreturnable(u32 portref, unsigned int *isunreturnable); 143int tipc_set_portunreturnable(u32 portref, unsigned int isunreturnable); 144 145int tipc_publish(u32 portref, unsigned int scope, 146 struct tipc_name_seq const *name_seq); 147int tipc_withdraw(u32 portref, unsigned int scope, 148 struct tipc_name_seq const *name_seq); 149 150int tipc_connect2port(u32 portref, struct tipc_portid const *port); 151 152int tipc_disconnect(u32 portref); 153 154int tipc_shutdown(u32 ref); 155 156int tipc_isconnected(u32 portref, int *isconnected); 157 158int tipc_peer(u32 portref, struct tipc_portid *peer); 159 160int tipc_ref_valid(u32 portref); 161 162/* 163 * TIPC messaging routines 164 */ 165 166#define TIPC_PORT_IMPORTANCE 100 /* send using current port setting */ 167 168 169int tipc_send(u32 portref, 170 unsigned int num_sect, 171 struct iovec const *msg_sect); 172 173int tipc_send_buf(u32 portref, 174 struct sk_buff *buf, 175 unsigned int dsz); 176 177int tipc_send2name(u32 portref, 178 struct tipc_name const *name, 179 u32 domain, 180 unsigned int num_sect, 181 struct iovec const *msg_sect); 182 183int tipc_send_buf2name(u32 portref, 184 struct tipc_name const *name, 185 u32 domain, 186 struct sk_buff *buf, 187 unsigned int dsz); 188 189int tipc_forward2name(u32 portref, 190 struct tipc_name const *name, 191 u32 domain, 192 unsigned int section_count, 193 struct iovec const *msg_sect, 194 struct tipc_portid const *origin, 195 unsigned int importance); 196 197int tipc_forward_buf2name(u32 portref, 198 struct tipc_name const *name, 199 u32 domain, 200 struct sk_buff *buf, 201 unsigned int dsz, 202 struct tipc_portid const *orig, 203 unsigned int importance); 204 205int tipc_send2port(u32 portref, 206 struct tipc_portid const *dest, 207 unsigned int num_sect, 208 struct iovec const *msg_sect); 209 210int tipc_send_buf2port(u32 portref, 211 struct tipc_portid const *dest, 212 struct sk_buff *buf, 213 unsigned int dsz); 214 215int 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); 221 222int tipc_forward_buf2port(u32 portref, 223 struct tipc_portid const *dest, 224 struct sk_buff *buf, 225 unsigned int dsz, 226 struct tipc_portid const *orig, 227 unsigned int importance); 228 229int tipc_multicast(u32 portref, 230 struct tipc_name_seq const *seq, 231 u32 domain, /* currently unused */ 232 unsigned int section_count, 233 struct iovec const *msg); 234 235 236/* 237 * TIPC subscription routines 238 */ 239 240int tipc_ispublished(struct tipc_name const *name); 241 242/* 243 * Get number of available nodes within specified domain (excluding own node) 244 */ 245 246unsigned int tipc_available_nodes(const u32 domain); 247 248#endif 249 250#endif 251