1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37#ifndef _TIPC_PORT_H
38#define _TIPC_PORT_H
39
40#include "ref.h"
41#include "net.h"
42#include "msg.h"
43#include "node_subscr.h"
44
45#define TIPC_FLOW_CONTROL_WIN 512
46
47typedef void (*tipc_msg_err_event) (void *usr_handle, u32 portref,
48 struct sk_buff **buf, unsigned char const *data,
49 unsigned int size, int reason,
50 struct tipc_portid const *attmpt_destid);
51
52typedef void (*tipc_named_msg_err_event) (void *usr_handle, u32 portref,
53 struct sk_buff **buf, unsigned char const *data,
54 unsigned int size, int reason,
55 struct tipc_name_seq const *attmpt_dest);
56
57typedef void (*tipc_conn_shutdown_event) (void *usr_handle, u32 portref,
58 struct sk_buff **buf, unsigned char const *data,
59 unsigned int size, int reason);
60
61typedef void (*tipc_msg_event) (void *usr_handle, u32 portref,
62 struct sk_buff **buf, unsigned char const *data,
63 unsigned int size, unsigned int importance,
64 struct tipc_portid const *origin);
65
66typedef void (*tipc_named_msg_event) (void *usr_handle, u32 portref,
67 struct sk_buff **buf, unsigned char const *data,
68 unsigned int size, unsigned int importance,
69 struct tipc_portid const *orig,
70 struct tipc_name_seq const *dest);
71
72typedef void (*tipc_conn_msg_event) (void *usr_handle, u32 portref,
73 struct sk_buff **buf, unsigned char const *data,
74 unsigned int size);
75
76typedef void (*tipc_continue_event) (void *usr_handle, u32 portref);
77
78
79
80
81
82
83
84
85struct user_port {
86 void *usr_handle;
87 u32 ref;
88 tipc_msg_err_event err_cb;
89 tipc_named_msg_err_event named_err_cb;
90 tipc_conn_shutdown_event conn_err_cb;
91 tipc_msg_event msg_cb;
92 tipc_named_msg_event named_msg_cb;
93 tipc_conn_msg_event conn_msg_cb;
94 tipc_continue_event continue_event_cb;
95};
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125struct tipc_port {
126 void *usr_handle;
127 spinlock_t *lock;
128 int connected;
129 u32 conn_type;
130 u32 conn_instance;
131 u32 conn_unacked;
132 int published;
133 u32 congested;
134 u32 max_pkt;
135 u32 ref;
136 struct tipc_msg phdr;
137 struct list_head port_list;
138 u32 (*dispatcher)(struct tipc_port *, struct sk_buff *);
139 void (*wakeup)(struct tipc_port *);
140 struct user_port *user_port;
141 struct list_head wait_list;
142 u32 waiting_pkts;
143 u32 sent;
144 u32 acked;
145 struct list_head publications;
146 u32 pub_count;
147 u32 probing_state;
148 u32 probing_interval;
149 struct timer_list timer;
150 struct tipc_node_subscr subscription;
151};
152
153extern spinlock_t tipc_port_list_lock;
154struct tipc_port_list;
155
156
157
158
159struct tipc_port *tipc_createport_raw(void *usr_handle,
160 u32 (*dispatcher)(struct tipc_port *, struct sk_buff *),
161 void (*wakeup)(struct tipc_port *), const u32 importance);
162
163int tipc_reject_msg(struct sk_buff *buf, u32 err);
164
165int tipc_send_buf_fast(struct sk_buff *buf, u32 destnode);
166
167void tipc_acknowledge(u32 port_ref, u32 ack);
168
169int tipc_createport(void *usr_handle,
170 unsigned int importance, tipc_msg_err_event error_cb,
171 tipc_named_msg_err_event named_error_cb,
172 tipc_conn_shutdown_event conn_error_cb, tipc_msg_event msg_cb,
173 tipc_named_msg_event named_msg_cb,
174 tipc_conn_msg_event conn_msg_cb,
175 tipc_continue_event continue_event_cb, u32 *portref);
176
177int tipc_deleteport(u32 portref);
178
179int tipc_portimportance(u32 portref, unsigned int *importance);
180int tipc_set_portimportance(u32 portref, unsigned int importance);
181
182int tipc_portunreliable(u32 portref, unsigned int *isunreliable);
183int tipc_set_portunreliable(u32 portref, unsigned int isunreliable);
184
185int tipc_portunreturnable(u32 portref, unsigned int *isunreturnable);
186int tipc_set_portunreturnable(u32 portref, unsigned int isunreturnable);
187
188int tipc_publish(u32 portref, unsigned int scope,
189 struct tipc_name_seq const *name_seq);
190int tipc_withdraw(u32 portref, unsigned int scope,
191 struct tipc_name_seq const *name_seq);
192
193int tipc_connect(u32 portref, struct tipc_portid const *port);
194
195int tipc_disconnect(u32 portref);
196
197int tipc_shutdown(u32 ref);
198
199
200
201
202
203int __tipc_disconnect(struct tipc_port *tp_ptr);
204int __tipc_connect(u32 ref, struct tipc_port *p_ptr,
205 struct tipc_portid const *peer);
206int tipc_port_peer_msg(struct tipc_port *p_ptr, struct tipc_msg *msg);
207
208
209
210
211int tipc_port_recv_msg(struct sk_buff *buf);
212int tipc_send(u32 portref, unsigned int num_sect, struct iovec const *msg_sect,
213 unsigned int total_len);
214
215int tipc_send2name(u32 portref, struct tipc_name const *name, u32 domain,
216 unsigned int num_sect, struct iovec const *msg_sect,
217 unsigned int total_len);
218
219int tipc_send2port(u32 portref, struct tipc_portid const *dest,
220 unsigned int num_sect, struct iovec const *msg_sect,
221 unsigned int total_len);
222
223int tipc_send_buf2port(u32 portref, struct tipc_portid const *dest,
224 struct sk_buff *buf, unsigned int dsz);
225
226int tipc_multicast(u32 portref, struct tipc_name_seq const *seq,
227 unsigned int section_count, struct iovec const *msg,
228 unsigned int total_len);
229
230int tipc_port_reject_sections(struct tipc_port *p_ptr, struct tipc_msg *hdr,
231 struct iovec const *msg_sect, u32 num_sect,
232 unsigned int total_len, int err);
233struct sk_buff *tipc_port_get_ports(void);
234void tipc_port_recv_proto_msg(struct sk_buff *buf);
235void tipc_port_recv_mcast(struct sk_buff *buf, struct tipc_port_list *dp);
236void tipc_port_reinit(void);
237
238
239
240
241static inline struct tipc_port *tipc_port_lock(u32 ref)
242{
243 return (struct tipc_port *)tipc_ref_lock(ref);
244}
245
246
247
248
249
250
251static inline void tipc_port_unlock(struct tipc_port *p_ptr)
252{
253 spin_unlock_bh(p_ptr->lock);
254}
255
256static inline struct tipc_port *tipc_port_deref(u32 ref)
257{
258 return (struct tipc_port *)tipc_ref_deref(ref);
259}
260
261static inline int tipc_port_congested(struct tipc_port *p_ptr)
262{
263 return (p_ptr->sent - p_ptr->acked) >= (TIPC_FLOW_CONTROL_WIN * 2);
264}
265
266#endif
267