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_LINK_H
38#define _TIPC_LINK_H
39
40#include "msg.h"
41#include "node.h"
42
43
44
45
46#define INVALID_LINK_SEQ 0x10000
47
48
49
50
51#define WORKING_WORKING 560810u
52#define WORKING_UNKNOWN 560811u
53#define RESET_UNKNOWN 560812u
54#define RESET_RESET 560813u
55
56
57
58
59
60#define MAX_PKT_DEFAULT 1500
61
62struct tipc_stats {
63 u32 sent_info;
64 u32 recv_info;
65 u32 sent_states;
66 u32 recv_states;
67 u32 sent_probes;
68 u32 recv_probes;
69 u32 sent_nacks;
70 u32 recv_nacks;
71 u32 sent_acks;
72 u32 sent_bundled;
73 u32 sent_bundles;
74 u32 recv_bundled;
75 u32 recv_bundles;
76 u32 retransmitted;
77 u32 sent_fragmented;
78 u32 sent_fragments;
79 u32 recv_fragmented;
80 u32 recv_fragments;
81 u32 link_congs;
82 u32 deferred_recv;
83 u32 duplicates;
84 u32 max_queue_sz;
85 u32 accu_queue_sz;
86 u32 queue_sz_counts;
87 u32 msg_length_counts;
88 u32 msg_lengths_total;
89 u32 msg_length_profile[7];
90};
91
92
93
94
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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140struct tipc_link {
141 u32 addr;
142 char name[TIPC_MAX_LINK_NAME];
143 struct tipc_media_addr media_addr;
144 struct timer_list timer;
145 struct tipc_node *owner;
146 struct list_head link_list;
147
148
149 int started;
150 u32 checkpoint;
151 u32 peer_session;
152 u32 peer_bearer_id;
153 struct tipc_bearer *b_ptr;
154 u32 tolerance;
155 u32 continuity_interval;
156 u32 abort_limit;
157 int state;
158 int blocked;
159 u32 fsm_msg_cnt;
160 struct {
161 unchar hdr[INT_H_SIZE];
162 unchar body[TIPC_MAX_IF_NAME];
163 } proto_msg;
164 struct tipc_msg *pmsg;
165 u32 priority;
166 u32 queue_limit[15];
167
168
169 u32 exp_msg_count;
170 u32 reset_checkpoint;
171
172
173 u32 max_pkt;
174 u32 max_pkt_target;
175 u32 max_pkt_probes;
176
177
178 u32 out_queue_size;
179 struct sk_buff *first_out;
180 struct sk_buff *last_out;
181 u32 next_out_no;
182 u32 last_retransmitted;
183 u32 stale_count;
184
185
186 u32 next_in_no;
187 u32 deferred_inqueue_sz;
188 struct sk_buff *oldest_deferred_in;
189 struct sk_buff *newest_deferred_in;
190 u32 unacked_window;
191
192
193 struct sk_buff *proto_msg_queue;
194 u32 retransm_queue_size;
195 u32 retransm_queue_head;
196 struct sk_buff *next_out;
197 struct list_head waiting_ports;
198
199
200 u32 long_msg_seq_no;
201 struct sk_buff *defragm_buf;
202
203
204 struct tipc_stats stats;
205};
206
207struct tipc_port;
208
209struct tipc_link *tipc_link_create(struct tipc_node *n_ptr,
210 struct tipc_bearer *b_ptr,
211 const struct tipc_media_addr *media_addr);
212void tipc_link_delete(struct tipc_link *l_ptr);
213void tipc_link_changeover(struct tipc_link *l_ptr);
214void tipc_link_send_duplicate(struct tipc_link *l_ptr, struct tipc_link *dest);
215void tipc_link_reset_fragments(struct tipc_link *l_ptr);
216int tipc_link_is_up(struct tipc_link *l_ptr);
217int tipc_link_is_active(struct tipc_link *l_ptr);
218u32 tipc_link_push_packet(struct tipc_link *l_ptr);
219void tipc_link_stop(struct tipc_link *l_ptr);
220struct sk_buff *tipc_link_cmd_config(const void *req_tlv_area, int req_tlv_space, u16 cmd);
221struct sk_buff *tipc_link_cmd_show_stats(const void *req_tlv_area, int req_tlv_space);
222struct sk_buff *tipc_link_cmd_reset_stats(const void *req_tlv_area, int req_tlv_space);
223void tipc_link_reset(struct tipc_link *l_ptr);
224int tipc_link_send(struct sk_buff *buf, u32 dest, u32 selector);
225void tipc_link_send_names(struct list_head *message_list, u32 dest);
226int tipc_link_send_buf(struct tipc_link *l_ptr, struct sk_buff *buf);
227u32 tipc_link_get_max_pkt(u32 dest, u32 selector);
228int tipc_link_send_sections_fast(struct tipc_port *sender,
229 struct iovec const *msg_sect,
230 const u32 num_sect,
231 unsigned int total_len,
232 u32 destnode);
233void tipc_link_recv_bundle(struct sk_buff *buf);
234int tipc_link_recv_fragment(struct sk_buff **pending,
235 struct sk_buff **fb,
236 struct tipc_msg **msg);
237void tipc_link_send_proto_msg(struct tipc_link *l_ptr, u32 msg_typ, int prob,
238 u32 gap, u32 tolerance, u32 priority,
239 u32 acked_mtu);
240void tipc_link_push_queue(struct tipc_link *l_ptr);
241u32 tipc_link_defer_pkt(struct sk_buff **head, struct sk_buff **tail,
242 struct sk_buff *buf);
243void tipc_link_wakeup_ports(struct tipc_link *l_ptr, int all);
244void tipc_link_set_queue_limits(struct tipc_link *l_ptr, u32 window);
245void tipc_link_retransmit(struct tipc_link *l_ptr,
246 struct sk_buff *start, u32 retransmits);
247
248
249
250
251static inline u32 buf_seqno(struct sk_buff *buf)
252{
253 return msg_seqno(buf_msg(buf));
254}
255
256static inline u32 mod(u32 x)
257{
258 return x & 0xffffu;
259}
260
261static inline int between(u32 lower, u32 upper, u32 n)
262{
263 if ((lower < n) && (n < upper))
264 return 1;
265 if ((upper < lower) && ((n > lower) || (n < upper)))
266 return 1;
267 return 0;
268}
269
270static inline int less_eq(u32 left, u32 right)
271{
272 return mod(right - left) < 32768u;
273}
274
275static inline int less(u32 left, u32 right)
276{
277 return less_eq(left, right) && (mod(right) != mod(left));
278}
279
280static inline u32 lesser(u32 left, u32 right)
281{
282 return less_eq(left, right) ? left : right;
283}
284
285
286
287
288
289static inline int link_working_working(struct tipc_link *l_ptr)
290{
291 return l_ptr->state == WORKING_WORKING;
292}
293
294static inline int link_working_unknown(struct tipc_link *l_ptr)
295{
296 return l_ptr->state == WORKING_UNKNOWN;
297}
298
299static inline int link_reset_unknown(struct tipc_link *l_ptr)
300{
301 return l_ptr->state == RESET_UNKNOWN;
302}
303
304static inline int link_reset_reset(struct tipc_link *l_ptr)
305{
306 return l_ptr->state == RESET_RESET;
307}
308
309static inline int link_blocked(struct tipc_link *l_ptr)
310{
311 return l_ptr->exp_msg_count || l_ptr->blocked;
312}
313
314static inline int link_congested(struct tipc_link *l_ptr)
315{
316 return l_ptr->out_queue_size >= l_ptr->queue_limit[0];
317}
318
319#endif
320