aboutsummaryrefslogtreecommitdiffstats
path: root/net/tipc
diff options
context:
space:
mode:
authorAllan Stephens <allan.stephens@windriver.com>2010-11-30 07:00:53 -0500
committerDavid S. Miller <davem@davemloft.net>2010-12-02 16:34:01 -0500
commitd265fef6ddf9042195aae551e1fde211c2a1588b (patch)
treeb9c45caac6e191f6c68df3cc215831ee7e8f1e21 /net/tipc
parentdca9b2404a6d6579828da2425c051462701efd3f (diff)
tipc: Remove obsolete native API files and exports
As part of the removal of TIPC's native API support it is no longer necessary for TIPC to export symbols for routines that can be called by kernel-based applications, nor for it to have header files that kernel-based applications can include to access the declarations for those routines. This commit eliminates the exporting of symbols by TIPC and migrates the contents of each obsolete native API include file into its corresponding non-native API equivalent. The code which was migrated in this commit was migrated intact, in that there are no technical changes combined with the relocation. Signed-off-by: Allan Stephens <Allan.Stephens@windriver.com> Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/tipc')
-rw-r--r--net/tipc/bcast.c1
-rw-r--r--net/tipc/bearer.h69
-rw-r--r--net/tipc/config.c2
-rw-r--r--net/tipc/core.c40
-rw-r--r--net/tipc/core.h14
-rw-r--r--net/tipc/eth_media.c6
-rw-r--r--net/tipc/msg.h168
-rw-r--r--net/tipc/port.h131
-rw-r--r--net/tipc/socket.c3
-rw-r--r--net/tipc/subscr.c1
-rw-r--r--net/tipc/user_reg.h5
11 files changed, 382 insertions, 58 deletions
diff --git a/net/tipc/bcast.c b/net/tipc/bcast.c
index 22a60fc98392..7d449f03c385 100644
--- a/net/tipc/bcast.c
+++ b/net/tipc/bcast.c
@@ -47,6 +47,7 @@
47#include "name_distr.h" 47#include "name_distr.h"
48#include "bearer.h" 48#include "bearer.h"
49#include "name_table.h" 49#include "name_table.h"
50#include "port.h"
50#include "bcast.h" 51#include "bcast.h"
51 52
52#define MAX_PKT_DEFAULT_MCAST 1500 /* bcast link max packet size (fixed) */ 53#define MAX_PKT_DEFAULT_MCAST 1500 /* bcast link max packet size (fixed) */
diff --git a/net/tipc/bearer.h b/net/tipc/bearer.h
index a850b389663e..49af7fae8b5a 100644
--- a/net/tipc/bearer.h
+++ b/net/tipc/bearer.h
@@ -43,6 +43,45 @@
43#define MAX_BEARERS 8 43#define MAX_BEARERS 8
44#define MAX_MEDIA 4 44#define MAX_MEDIA 4
45 45
46/*
47 * Identifiers of supported TIPC media types
48 */
49#define TIPC_MEDIA_TYPE_ETH 1
50
51/*
52 * Destination address structure used by TIPC bearers when sending messages
53 *
54 * IMPORTANT: The fields of this structure MUST be stored using the specified
55 * byte order indicated below, as the structure is exchanged between nodes
56 * as part of a link setup process.
57 */
58struct tipc_media_addr {
59 __be32 type; /* bearer type (network byte order) */
60 union {
61 __u8 eth_addr[6]; /* 48 bit Ethernet addr (byte array) */
62 } dev_addr;
63};
64
65/**
66 * struct tipc_bearer - TIPC bearer info available to media code
67 * @usr_handle: pointer to additional media-specific information about bearer
68 * @mtu: max packet size bearer can support
69 * @blocked: non-zero if bearer is blocked
70 * @lock: spinlock for controlling access to bearer
71 * @addr: media-specific address associated with bearer
72 * @name: bearer name (format = media:interface)
73 *
74 * Note: TIPC initializes "name" and "lock" fields; media code is responsible
75 * for initialization all other fields when a bearer is enabled.
76 */
77struct tipc_bearer {
78 void *usr_handle;
79 u32 mtu;
80 int blocked;
81 spinlock_t lock;
82 struct tipc_media_addr addr;
83 char name[TIPC_MAX_BEARER_NAME];
84};
46 85
47/** 86/**
48 * struct media - TIPC media information available to internal users 87 * struct media - TIPC media information available to internal users
@@ -55,7 +94,7 @@
55 * @priority: default link (and bearer) priority 94 * @priority: default link (and bearer) priority
56 * @tolerance: default time (in ms) before declaring link failure 95 * @tolerance: default time (in ms) before declaring link failure
57 * @window: default window (in packets) before declaring link congestion 96 * @window: default window (in packets) before declaring link congestion
58 * @type_id: TIPC media identifier [defined in tipc_bearer.h] 97 * @type_id: TIPC media identifier
59 * @name: media name 98 * @name: media name
60 */ 99 */
61 100
@@ -116,6 +155,34 @@ struct link;
116 155
117extern struct bearer tipc_bearers[]; 156extern struct bearer tipc_bearers[];
118 157
158/*
159 * TIPC routines available to supported media types
160 */
161int tipc_register_media(u32 media_type,
162 char *media_name, int (*enable)(struct tipc_bearer *),
163 void (*disable)(struct tipc_bearer *),
164 int (*send_msg)(struct sk_buff *,
165 struct tipc_bearer *, struct tipc_media_addr *),
166 char *(*addr2str)(struct tipc_media_addr *a,
167 char *str_buf, int str_size),
168 struct tipc_media_addr *bcast_addr, const u32 bearer_priority,
169 const u32 link_tolerance, /* [ms] */
170 const u32 send_window_limit);
171
172void tipc_recv_msg(struct sk_buff *buf, struct tipc_bearer *tb_ptr);
173
174int tipc_block_bearer(const char *name);
175void tipc_continue(struct tipc_bearer *tb_ptr);
176
177int tipc_enable_bearer(const char *bearer_name, u32 bcast_scope, u32 priority);
178int tipc_disable_bearer(const char *name);
179
180/*
181 * Routines made available to TIPC by supported media types
182 */
183int tipc_eth_media_start(void);
184void tipc_eth_media_stop(void);
185
119void tipc_media_addr_printf(struct print_buf *pb, struct tipc_media_addr *a); 186void tipc_media_addr_printf(struct print_buf *pb, struct tipc_media_addr *a);
120struct sk_buff *tipc_media_get_names(void); 187struct sk_buff *tipc_media_get_names(void);
121 188
diff --git a/net/tipc/config.c b/net/tipc/config.c
index 50a6133a3668..82267f3cd3b7 100644
--- a/net/tipc/config.c
+++ b/net/tipc/config.c
@@ -43,8 +43,8 @@
43#include "addr.h" 43#include "addr.h"
44#include "name_table.h" 44#include "name_table.h"
45#include "node.h" 45#include "node.h"
46#include "user_reg.h"
46#include "config.h" 47#include "config.h"
47#include "discover.h"
48 48
49struct subscr_data { 49struct subscr_data {
50 char usr_handle[8]; 50 char usr_handle[8];
diff --git a/net/tipc/core.c b/net/tipc/core.c
index e2a09eb8efd4..785362f6a411 100644
--- a/net/tipc/core.c
+++ b/net/tipc/core.c
@@ -236,43 +236,3 @@ module_exit(tipc_exit);
236MODULE_DESCRIPTION("TIPC: Transparent Inter Process Communication"); 236MODULE_DESCRIPTION("TIPC: Transparent Inter Process Communication");
237MODULE_LICENSE("Dual BSD/GPL"); 237MODULE_LICENSE("Dual BSD/GPL");
238MODULE_VERSION(TIPC_MOD_VER); 238MODULE_VERSION(TIPC_MOD_VER);
239
240/* Native TIPC API for kernel-space applications (see tipc.h) */
241
242EXPORT_SYMBOL(tipc_attach);
243EXPORT_SYMBOL(tipc_detach);
244EXPORT_SYMBOL(tipc_createport);
245EXPORT_SYMBOL(tipc_deleteport);
246EXPORT_SYMBOL(tipc_ownidentity);
247EXPORT_SYMBOL(tipc_portimportance);
248EXPORT_SYMBOL(tipc_set_portimportance);
249EXPORT_SYMBOL(tipc_portunreliable);
250EXPORT_SYMBOL(tipc_set_portunreliable);
251EXPORT_SYMBOL(tipc_portunreturnable);
252EXPORT_SYMBOL(tipc_set_portunreturnable);
253EXPORT_SYMBOL(tipc_publish);
254EXPORT_SYMBOL(tipc_withdraw);
255EXPORT_SYMBOL(tipc_connect2port);
256EXPORT_SYMBOL(tipc_disconnect);
257EXPORT_SYMBOL(tipc_shutdown);
258EXPORT_SYMBOL(tipc_send);
259EXPORT_SYMBOL(tipc_send2name);
260EXPORT_SYMBOL(tipc_send2port);
261EXPORT_SYMBOL(tipc_multicast);
262
263/* TIPC API for external bearers (see tipc_bearer.h) */
264
265EXPORT_SYMBOL(tipc_block_bearer);
266EXPORT_SYMBOL(tipc_continue);
267EXPORT_SYMBOL(tipc_disable_bearer);
268EXPORT_SYMBOL(tipc_enable_bearer);
269EXPORT_SYMBOL(tipc_recv_msg);
270EXPORT_SYMBOL(tipc_register_media);
271
272/* TIPC API for external APIs (see tipc_port.h) */
273
274EXPORT_SYMBOL(tipc_createport_raw);
275EXPORT_SYMBOL(tipc_reject_msg);
276EXPORT_SYMBOL(tipc_send_buf_fast);
277EXPORT_SYMBOL(tipc_acknowledge);
278
diff --git a/net/tipc/core.h b/net/tipc/core.h
index e19389e57227..ca7e171c1043 100644
--- a/net/tipc/core.h
+++ b/net/tipc/core.h
@@ -39,10 +39,6 @@
39 39
40#include <linux/tipc.h> 40#include <linux/tipc.h>
41#include <linux/tipc_config.h> 41#include <linux/tipc_config.h>
42#include <net/tipc/tipc_msg.h>
43#include <net/tipc/tipc_port.h>
44#include <net/tipc/tipc_bearer.h>
45#include <net/tipc/tipc.h>
46#include <linux/types.h> 42#include <linux/types.h>
47#include <linux/kernel.h> 43#include <linux/kernel.h>
48#include <linux/errno.h> 44#include <linux/errno.h>
@@ -62,6 +58,9 @@
62 58
63#define TIPC_MOD_VER "2.0.0" 59#define TIPC_MOD_VER "2.0.0"
64 60
61struct tipc_msg; /* msg.h */
62struct print_buf; /* dbg.h */
63
65/* 64/*
66 * TIPC sanity test macros 65 * TIPC sanity test macros
67 */ 66 */
@@ -174,6 +173,13 @@ void tipc_dump_dbg(struct print_buf *, const char *fmt, ...);
174#define ELINKCONG EAGAIN /* link congestion <=> resource unavailable */ 173#define ELINKCONG EAGAIN /* link congestion <=> resource unavailable */
175 174
176/* 175/*
176 * TIPC operating mode routines
177 */
178#define TIPC_NOT_RUNNING 0
179#define TIPC_NODE_MODE 1
180#define TIPC_NET_MODE 2
181
182/*
177 * Global configuration variables 183 * Global configuration variables
178 */ 184 */
179 185
diff --git a/net/tipc/eth_media.c b/net/tipc/eth_media.c
index 6e988ba485fd..ee683cc8f4b1 100644
--- a/net/tipc/eth_media.c
+++ b/net/tipc/eth_media.c
@@ -34,13 +34,13 @@
34 * POSSIBILITY OF SUCH DAMAGE. 34 * POSSIBILITY OF SUCH DAMAGE.
35 */ 35 */
36 36
37#include <net/tipc/tipc.h>
38#include <net/tipc/tipc_bearer.h>
39#include <net/tipc/tipc_msg.h>
40#include <linux/netdevice.h> 37#include <linux/netdevice.h>
41#include <linux/slab.h> 38#include <linux/slab.h>
42#include <net/net_namespace.h> 39#include <net/net_namespace.h>
43 40
41#include "core.h"
42#include "bearer.h"
43
44#define MAX_ETH_BEARERS 2 44#define MAX_ETH_BEARERS 2
45#define ETH_LINK_PRIORITY TIPC_DEF_LINK_PRI 45#define ETH_LINK_PRIORITY TIPC_DEF_LINK_PRI
46#define ETH_LINK_TOLERANCE TIPC_DEF_LINK_TOL 46#define ETH_LINK_TOLERANCE TIPC_DEF_LINK_TOL
diff --git a/net/tipc/msg.h b/net/tipc/msg.h
index 031aad18efce..aee53864d7a0 100644
--- a/net/tipc/msg.h
+++ b/net/tipc/msg.h
@@ -37,10 +37,51 @@
37#ifndef _TIPC_MSG_H 37#ifndef _TIPC_MSG_H
38#define _TIPC_MSG_H 38#define _TIPC_MSG_H
39 39
40#include "core.h" 40#include "bearer.h"
41 41
42#define TIPC_VERSION 2 42#define TIPC_VERSION 2
43 43
44/*
45 * TIPC user data message header format, version 2:
46 *
47 *
48 * 1 0 9 8 7 6 5 4|3 2 1 0 9 8 7 6|5 4 3 2 1 0 9 8|7 6 5 4 3 2 1 0
49 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
50 * w0:|vers | user |hdr sz |n|d|s|-| message size |
51 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
52 * w1:|mstyp| error |rer cnt|lsc|opt p| broadcast ack no |
53 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
54 * w2:| link level ack no | broadcast/link level seq no |
55 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
56 * w3:| previous node |
57 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
58 * w4:| originating port |
59 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
60 * w5:| destination port |
61 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
62 * w6:| originating node |
63 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
64 * w7:| destination node |
65 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
66 * w8:| name type / transport sequence number |
67 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
68 * w9:| name instance/multicast lower bound |
69 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
70 * wA:| multicast upper bound |
71 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
72 * / /
73 * \ options \
74 * / /
75 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
76 *
77 */
78
79#define TIPC_CONN_MSG 0
80#define TIPC_MCAST_MSG 1
81#define TIPC_NAMED_MSG 2
82#define TIPC_DIRECT_MSG 3
83
84
44#define SHORT_H_SIZE 24 /* Connected, in-cluster messages */ 85#define SHORT_H_SIZE 24 /* Connected, in-cluster messages */
45#define DIR_MSG_H_SIZE 32 /* Directly addressed messages */ 86#define DIR_MSG_H_SIZE 32 /* Directly addressed messages */
46#define LONG_H_SIZE 40 /* Named messages */ 87#define LONG_H_SIZE 40 /* Named messages */
@@ -52,20 +93,26 @@
52#define MAX_MSG_SIZE (MAX_H_SIZE + TIPC_MAX_USER_MSG_SIZE) 93#define MAX_MSG_SIZE (MAX_H_SIZE + TIPC_MAX_USER_MSG_SIZE)
53 94
54 95
55/* 96struct tipc_msg {
56 TIPC user data message header format, version 2 97 __be32 hdr[15];
98};
57 99
58 - Fundamental definitions available to privileged TIPC users
59 are located in tipc_msg.h.
60 - Remaining definitions available to TIPC internal users appear below.
61*/
62 100
101static inline u32 msg_word(struct tipc_msg *m, u32 pos)
102{
103 return ntohl(m->hdr[pos]);
104}
63 105
64static inline void msg_set_word(struct tipc_msg *m, u32 w, u32 val) 106static inline void msg_set_word(struct tipc_msg *m, u32 w, u32 val)
65{ 107{
66 m->hdr[w] = htonl(val); 108 m->hdr[w] = htonl(val);
67} 109}
68 110
111static inline u32 msg_bits(struct tipc_msg *m, u32 w, u32 pos, u32 mask)
112{
113 return (msg_word(m, w) >> pos) & mask;
114}
115
69static inline void msg_set_bits(struct tipc_msg *m, u32 w, 116static inline void msg_set_bits(struct tipc_msg *m, u32 w,
70 u32 pos, u32 mask, u32 val) 117 u32 pos, u32 mask, u32 val)
71{ 118{
@@ -112,16 +159,36 @@ static inline void msg_set_user(struct tipc_msg *m, u32 n)
112 msg_set_bits(m, 0, 25, 0xf, n); 159 msg_set_bits(m, 0, 25, 0xf, n);
113} 160}
114 161
162static inline u32 msg_importance(struct tipc_msg *m)
163{
164 return msg_bits(m, 0, 25, 0xf);
165}
166
115static inline void msg_set_importance(struct tipc_msg *m, u32 i) 167static inline void msg_set_importance(struct tipc_msg *m, u32 i)
116{ 168{
117 msg_set_user(m, i); 169 msg_set_user(m, i);
118} 170}
119 171
172static inline u32 msg_hdr_sz(struct tipc_msg *m)
173{
174 return msg_bits(m, 0, 21, 0xf) << 2;
175}
176
120static inline void msg_set_hdr_sz(struct tipc_msg *m,u32 n) 177static inline void msg_set_hdr_sz(struct tipc_msg *m,u32 n)
121{ 178{
122 msg_set_bits(m, 0, 21, 0xf, n>>2); 179 msg_set_bits(m, 0, 21, 0xf, n>>2);
123} 180}
124 181
182static inline u32 msg_size(struct tipc_msg *m)
183{
184 return msg_bits(m, 0, 0, 0x1ffff);
185}
186
187static inline u32 msg_data_sz(struct tipc_msg *m)
188{
189 return msg_size(m) - msg_hdr_sz(m);
190}
191
125static inline int msg_non_seq(struct tipc_msg *m) 192static inline int msg_non_seq(struct tipc_msg *m)
126{ 193{
127 return msg_bits(m, 0, 20, 1); 194 return msg_bits(m, 0, 20, 1);
@@ -162,11 +229,36 @@ static inline void msg_set_size(struct tipc_msg *m, u32 sz)
162 * Word 1 229 * Word 1
163 */ 230 */
164 231
232static inline u32 msg_type(struct tipc_msg *m)
233{
234 return msg_bits(m, 1, 29, 0x7);
235}
236
165static inline void msg_set_type(struct tipc_msg *m, u32 n) 237static inline void msg_set_type(struct tipc_msg *m, u32 n)
166{ 238{
167 msg_set_bits(m, 1, 29, 0x7, n); 239 msg_set_bits(m, 1, 29, 0x7, n);
168} 240}
169 241
242static inline u32 msg_named(struct tipc_msg *m)
243{
244 return msg_type(m) == TIPC_NAMED_MSG;
245}
246
247static inline u32 msg_mcast(struct tipc_msg *m)
248{
249 return msg_type(m) == TIPC_MCAST_MSG;
250}
251
252static inline u32 msg_connected(struct tipc_msg *m)
253{
254 return msg_type(m) == TIPC_CONN_MSG;
255}
256
257static inline u32 msg_errcode(struct tipc_msg *m)
258{
259 return msg_bits(m, 1, 25, 0xf);
260}
261
170static inline void msg_set_errcode(struct tipc_msg *m, u32 err) 262static inline void msg_set_errcode(struct tipc_msg *m, u32 err)
171{ 263{
172 msg_set_bits(m, 1, 25, 0xf, err); 264 msg_set_bits(m, 1, 25, 0xf, err);
@@ -257,31 +349,68 @@ static inline void msg_set_destnode_cache(struct tipc_msg *m, u32 dnode)
257 */ 349 */
258 350
259 351
352static inline u32 msg_prevnode(struct tipc_msg *m)
353{
354 return msg_word(m, 3);
355}
356
260static inline void msg_set_prevnode(struct tipc_msg *m, u32 a) 357static inline void msg_set_prevnode(struct tipc_msg *m, u32 a)
261{ 358{
262 msg_set_word(m, 3, a); 359 msg_set_word(m, 3, a);
263} 360}
264 361
362static inline u32 msg_origport(struct tipc_msg *m)
363{
364 return msg_word(m, 4);
365}
366
265static inline void msg_set_origport(struct tipc_msg *m, u32 p) 367static inline void msg_set_origport(struct tipc_msg *m, u32 p)
266{ 368{
267 msg_set_word(m, 4, p); 369 msg_set_word(m, 4, p);
268} 370}
269 371
372static inline u32 msg_destport(struct tipc_msg *m)
373{
374 return msg_word(m, 5);
375}
376
270static inline void msg_set_destport(struct tipc_msg *m, u32 p) 377static inline void msg_set_destport(struct tipc_msg *m, u32 p)
271{ 378{
272 msg_set_word(m, 5, p); 379 msg_set_word(m, 5, p);
273} 380}
274 381
382static inline u32 msg_mc_netid(struct tipc_msg *m)
383{
384 return msg_word(m, 5);
385}
386
275static inline void msg_set_mc_netid(struct tipc_msg *m, u32 p) 387static inline void msg_set_mc_netid(struct tipc_msg *m, u32 p)
276{ 388{
277 msg_set_word(m, 5, p); 389 msg_set_word(m, 5, p);
278} 390}
279 391
392static inline int msg_short(struct tipc_msg *m)
393{
394 return msg_hdr_sz(m) == 24;
395}
396
397static inline u32 msg_orignode(struct tipc_msg *m)
398{
399 if (likely(msg_short(m)))
400 return msg_prevnode(m);
401 return msg_word(m, 6);
402}
403
280static inline void msg_set_orignode(struct tipc_msg *m, u32 a) 404static inline void msg_set_orignode(struct tipc_msg *m, u32 a)
281{ 405{
282 msg_set_word(m, 6, a); 406 msg_set_word(m, 6, a);
283} 407}
284 408
409static inline u32 msg_destnode(struct tipc_msg *m)
410{
411 return msg_word(m, 7);
412}
413
285static inline void msg_set_destnode(struct tipc_msg *m, u32 a) 414static inline void msg_set_destnode(struct tipc_msg *m, u32 a)
286{ 415{
287 msg_set_word(m, 7, a); 416 msg_set_word(m, 7, a);
@@ -299,6 +428,11 @@ static inline u32 msg_routed(struct tipc_msg *m)
299 return(msg_destnode(m) ^ msg_orignode(m)) >> 11; 428 return(msg_destnode(m) ^ msg_orignode(m)) >> 11;
300} 429}
301 430
431static inline u32 msg_nametype(struct tipc_msg *m)
432{
433 return msg_word(m, 8);
434}
435
302static inline void msg_set_nametype(struct tipc_msg *m, u32 n) 436static inline void msg_set_nametype(struct tipc_msg *m, u32 n)
303{ 437{
304 msg_set_word(m, 8, n); 438 msg_set_word(m, 8, n);
@@ -324,6 +458,16 @@ static inline void msg_set_transp_seqno(struct tipc_msg *m, u32 n)
324 msg_set_word(m, 8, n); 458 msg_set_word(m, 8, n);
325} 459}
326 460
461static inline u32 msg_nameinst(struct tipc_msg *m)
462{
463 return msg_word(m, 9);
464}
465
466static inline u32 msg_namelower(struct tipc_msg *m)
467{
468 return msg_nameinst(m);
469}
470
327static inline void msg_set_namelower(struct tipc_msg *m, u32 n) 471static inline void msg_set_namelower(struct tipc_msg *m, u32 n)
328{ 472{
329 msg_set_word(m, 9, n); 473 msg_set_word(m, 9, n);
@@ -334,11 +478,21 @@ static inline void msg_set_nameinst(struct tipc_msg *m, u32 n)
334 msg_set_namelower(m, n); 478 msg_set_namelower(m, n);
335} 479}
336 480
481static inline u32 msg_nameupper(struct tipc_msg *m)
482{
483 return msg_word(m, 10);
484}
485
337static inline void msg_set_nameupper(struct tipc_msg *m, u32 n) 486static inline void msg_set_nameupper(struct tipc_msg *m, u32 n)
338{ 487{
339 msg_set_word(m, 10, n); 488 msg_set_word(m, 10, n);
340} 489}
341 490
491static inline unchar *msg_data(struct tipc_msg *m)
492{
493 return ((unchar *)m) + msg_hdr_sz(m);
494}
495
342static inline struct tipc_msg *msg_get_wrapped(struct tipc_msg *m) 496static inline struct tipc_msg *msg_get_wrapped(struct tipc_msg *m)
343{ 497{
344 return (struct tipc_msg *)msg_data(m); 498 return (struct tipc_msg *)msg_data(m);
diff --git a/net/tipc/port.h b/net/tipc/port.h
index 73bbf442b346..8b9d87a3efae 100644
--- a/net/tipc/port.h
+++ b/net/tipc/port.h
@@ -44,6 +44,39 @@
44#include "dbg.h" 44#include "dbg.h"
45#include "node_subscr.h" 45#include "node_subscr.h"
46 46
47#define TIPC_FLOW_CONTROL_WIN 512
48
49typedef void (*tipc_msg_err_event) (void *usr_handle, u32 portref,
50 struct sk_buff **buf, unsigned char const *data,
51 unsigned int size, int reason,
52 struct tipc_portid const *attmpt_destid);
53
54typedef void (*tipc_named_msg_err_event) (void *usr_handle, u32 portref,
55 struct sk_buff **buf, unsigned char const *data,
56 unsigned int size, int reason,
57 struct tipc_name_seq const *attmpt_dest);
58
59typedef void (*tipc_conn_shutdown_event) (void *usr_handle, u32 portref,
60 struct sk_buff **buf, unsigned char const *data,
61 unsigned int size, int reason);
62
63typedef void (*tipc_msg_event) (void *usr_handle, u32 portref,
64 struct sk_buff **buf, unsigned char const *data,
65 unsigned int size, unsigned int importance,
66 struct tipc_portid const *origin);
67
68typedef void (*tipc_named_msg_event) (void *usr_handle, u32 portref,
69 struct sk_buff **buf, unsigned char const *data,
70 unsigned int size, unsigned int importance,
71 struct tipc_portid const *orig,
72 struct tipc_name_seq const *dest);
73
74typedef void (*tipc_conn_msg_event) (void *usr_handle, u32 portref,
75 struct sk_buff **buf, unsigned char const *data,
76 unsigned int size);
77
78typedef void (*tipc_continue_event) (void *usr_handle, u32 portref);
79
47/** 80/**
48 * struct user_port - TIPC user port (used with native API) 81 * struct user_port - TIPC user port (used with native API)
49 * @user_ref: id of user who created user port 82 * @user_ref: id of user who created user port
@@ -68,6 +101,34 @@ struct user_port {
68}; 101};
69 102
70/** 103/**
104 * struct tipc_port - TIPC port info available to socket API
105 * @usr_handle: pointer to additional user-defined information about port
106 * @lock: pointer to spinlock for controlling access to port
107 * @connected: non-zero if port is currently connected to a peer port
108 * @conn_type: TIPC type used when connection was established
109 * @conn_instance: TIPC instance used when connection was established
110 * @conn_unacked: number of unacknowledged messages received from peer port
111 * @published: non-zero if port has one or more associated names
112 * @congested: non-zero if cannot send because of link or port congestion
113 * @max_pkt: maximum packet size "hint" used when building messages sent by port
114 * @ref: unique reference to port in TIPC object registry
115 * @phdr: preformatted message header used when sending messages
116 */
117struct tipc_port {
118 void *usr_handle;
119 spinlock_t *lock;
120 int connected;
121 u32 conn_type;
122 u32 conn_instance;
123 u32 conn_unacked;
124 int published;
125 u32 congested;
126 u32 max_pkt;
127 u32 ref;
128 struct tipc_msg phdr;
129};
130
131/**
71 * struct port - TIPC port structure 132 * struct port - TIPC port structure
72 * @publ: TIPC port info available to privileged users 133 * @publ: TIPC port info available to privileged users
73 * @port_list: adjacent ports in TIPC's global list of ports 134 * @port_list: adjacent ports in TIPC's global list of ports
@@ -109,6 +170,76 @@ struct port {
109extern spinlock_t tipc_port_list_lock; 170extern spinlock_t tipc_port_list_lock;
110struct port_list; 171struct port_list;
111 172
173/*
174 * TIPC port manipulation routines
175 */
176struct tipc_port *tipc_createport_raw(void *usr_handle,
177 u32 (*dispatcher)(struct tipc_port *, struct sk_buff *),
178 void (*wakeup)(struct tipc_port *), const u32 importance);
179
180int tipc_reject_msg(struct sk_buff *buf, u32 err);
181
182int tipc_send_buf_fast(struct sk_buff *buf, u32 destnode);
183
184void tipc_acknowledge(u32 port_ref, u32 ack);
185
186int tipc_createport(unsigned int tipc_user, void *usr_handle,
187 unsigned int importance, tipc_msg_err_event error_cb,
188 tipc_named_msg_err_event named_error_cb,
189 tipc_conn_shutdown_event conn_error_cb, tipc_msg_event msg_cb,
190 tipc_named_msg_event named_msg_cb,
191 tipc_conn_msg_event conn_msg_cb,
192 tipc_continue_event continue_event_cb, u32 *portref);
193
194int tipc_deleteport(u32 portref);
195
196int tipc_ownidentity(u32 portref, struct tipc_portid *port);
197
198int tipc_portimportance(u32 portref, unsigned int *importance);
199int tipc_set_portimportance(u32 portref, unsigned int importance);
200
201int tipc_portunreliable(u32 portref, unsigned int *isunreliable);
202int tipc_set_portunreliable(u32 portref, unsigned int isunreliable);
203
204int tipc_portunreturnable(u32 portref, unsigned int *isunreturnable);
205int tipc_set_portunreturnable(u32 portref, unsigned int isunreturnable);
206
207int tipc_publish(u32 portref, unsigned int scope,
208 struct tipc_name_seq const *name_seq);
209int tipc_withdraw(u32 portref, unsigned int scope,
210 struct tipc_name_seq const *name_seq);
211
212int tipc_connect2port(u32 portref, struct tipc_portid const *port);
213
214int tipc_disconnect(u32 portref);
215
216int tipc_shutdown(u32 ref);
217
218
219/*
220 * The following routines require that the port be locked on entry
221 */
222int tipc_disconnect_port(struct tipc_port *tp_ptr);
223
224/*
225 * TIPC messaging routines
226 */
227#define TIPC_PORT_IMPORTANCE 100 /* send using current port setting */
228
229int tipc_send(u32 portref, unsigned int num_sect, struct iovec const *msg_sect);
230
231int tipc_send2name(u32 portref, struct tipc_name const *name, u32 domain,
232 unsigned int num_sect, struct iovec const *msg_sect);
233
234int tipc_send2port(u32 portref, struct tipc_portid const *dest,
235 unsigned int num_sect, struct iovec const *msg_sect);
236
237int tipc_send_buf2port(u32 portref, struct tipc_portid const *dest,
238 struct sk_buff *buf, unsigned int dsz);
239
240int tipc_multicast(u32 portref, struct tipc_name_seq const *seq, u32 domain,
241 unsigned int section_count, struct iovec const *msg);
242
112int tipc_port_reject_sections(struct port *p_ptr, struct tipc_msg *hdr, 243int tipc_port_reject_sections(struct port *p_ptr, struct tipc_msg *hdr,
113 struct iovec const *msg_sect, u32 num_sect, 244 struct iovec const *msg_sect, u32 num_sect,
114 int err); 245 int err);
diff --git a/net/tipc/socket.c b/net/tipc/socket.c
index e9f0d5004483..23a12e44347f 100644
--- a/net/tipc/socket.c
+++ b/net/tipc/socket.c
@@ -49,10 +49,9 @@
49 49
50#include <linux/tipc.h> 50#include <linux/tipc.h>
51#include <linux/tipc_config.h> 51#include <linux/tipc_config.h>
52#include <net/tipc/tipc_msg.h>
53#include <net/tipc/tipc_port.h>
54 52
55#include "core.h" 53#include "core.h"
54#include "port.h"
56 55
57#define SS_LISTENING -1 /* socket is listening */ 56#define SS_LISTENING -1 /* socket is listening */
58#define SS_READY -2 /* socket is connectionless */ 57#define SS_READY -2 /* socket is connectionless */
diff --git a/net/tipc/subscr.c b/net/tipc/subscr.c
index 33313961d010..a857e6ea857e 100644
--- a/net/tipc/subscr.c
+++ b/net/tipc/subscr.c
@@ -37,6 +37,7 @@
37#include "core.h" 37#include "core.h"
38#include "dbg.h" 38#include "dbg.h"
39#include "name_table.h" 39#include "name_table.h"
40#include "user_reg.h"
40#include "port.h" 41#include "port.h"
41#include "ref.h" 42#include "ref.h"
42#include "subscr.h" 43#include "subscr.h"
diff --git a/net/tipc/user_reg.h b/net/tipc/user_reg.h
index 81dc12e2882f..a05981fb9176 100644
--- a/net/tipc/user_reg.h
+++ b/net/tipc/user_reg.h
@@ -42,6 +42,11 @@
42int tipc_reg_start(void); 42int tipc_reg_start(void);
43void tipc_reg_stop(void); 43void tipc_reg_stop(void);
44 44
45typedef void (*tipc_mode_event)(void *usr_handle, int mode, u32 addr);
46
47int tipc_attach(unsigned int *userref, tipc_mode_event, void *usr_handle);
48void tipc_detach(unsigned int userref);
49
45int tipc_reg_add_port(struct user_port *up_ptr); 50int tipc_reg_add_port(struct user_port *up_ptr);
46int tipc_reg_remove_port(struct user_port *up_ptr); 51int tipc_reg_remove_port(struct user_port *up_ptr);
47 52