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#define CONN_OVERLOAD_LIMIT ((TIPC_FLOW_CONTROL_WIN * 2 + 1) * \
47 SKB_TRUESIZE(TIPC_MAX_USER_MSG_SIZE))
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76struct tipc_port {
77 struct sock *sk;
78 spinlock_t *lock;
79 int connected;
80 u32 conn_type;
81 u32 conn_instance;
82 u32 conn_unacked;
83 int published;
84 u32 congested;
85 u32 max_pkt;
86 u32 ref;
87 struct tipc_msg phdr;
88 struct list_head port_list;
89 u32 (*dispatcher)(struct tipc_port *, struct sk_buff *);
90 void (*wakeup)(struct tipc_port *);
91 struct list_head wait_list;
92 u32 waiting_pkts;
93 u32 sent;
94 u32 acked;
95 struct list_head publications;
96 u32 pub_count;
97 u32 probing_state;
98 u32 probing_interval;
99 struct timer_list timer;
100 struct tipc_node_subscr subscription;
101};
102
103extern spinlock_t tipc_port_list_lock;
104struct tipc_port_list;
105
106
107
108
109struct tipc_port *tipc_createport(struct sock *sk,
110 u32 (*dispatcher)(struct tipc_port *,
111 struct sk_buff *),
112 void (*wakeup)(struct tipc_port *),
113 const u32 importance);
114
115int tipc_reject_msg(struct sk_buff *buf, u32 err);
116
117void tipc_acknowledge(u32 port_ref, u32 ack);
118
119int tipc_deleteport(struct tipc_port *p_ptr);
120
121int tipc_portimportance(u32 portref, unsigned int *importance);
122int tipc_set_portimportance(u32 portref, unsigned int importance);
123
124int tipc_portunreliable(u32 portref, unsigned int *isunreliable);
125int tipc_set_portunreliable(u32 portref, unsigned int isunreliable);
126
127int tipc_portunreturnable(u32 portref, unsigned int *isunreturnable);
128int tipc_set_portunreturnable(u32 portref, unsigned int isunreturnable);
129
130int tipc_publish(struct tipc_port *p_ptr, unsigned int scope,
131 struct tipc_name_seq const *name_seq);
132int tipc_withdraw(struct tipc_port *p_ptr, unsigned int scope,
133 struct tipc_name_seq const *name_seq);
134
135int tipc_connect(u32 portref, struct tipc_portid const *port);
136
137int tipc_disconnect(u32 portref);
138
139int tipc_shutdown(u32 ref);
140
141
142
143
144
145int __tipc_disconnect(struct tipc_port *tp_ptr);
146int __tipc_connect(u32 ref, struct tipc_port *p_ptr,
147 struct tipc_portid const *peer);
148int tipc_port_peer_msg(struct tipc_port *p_ptr, struct tipc_msg *msg);
149
150
151
152
153int tipc_port_recv_msg(struct sk_buff *buf);
154int tipc_send(u32 portref, struct iovec const *msg_sect, unsigned int len);
155
156int tipc_send2name(u32 portref, struct tipc_name const *name, u32 domain,
157 struct iovec const *msg_sect, unsigned int len);
158
159int tipc_send2port(u32 portref, struct tipc_portid const *dest,
160 struct iovec const *msg_sect, unsigned int len);
161
162int tipc_multicast(u32 portref, struct tipc_name_seq const *seq,
163 struct iovec const *msg, unsigned int len);
164
165int tipc_port_reject_sections(struct tipc_port *p_ptr, struct tipc_msg *hdr,
166 struct iovec const *msg_sect, unsigned int len,
167 int err);
168struct sk_buff *tipc_port_get_ports(void);
169void tipc_port_recv_proto_msg(struct sk_buff *buf);
170void tipc_port_recv_mcast(struct sk_buff *buf, struct tipc_port_list *dp);
171void tipc_port_reinit(void);
172
173
174
175
176static inline struct tipc_port *tipc_port_lock(u32 ref)
177{
178 return (struct tipc_port *)tipc_ref_lock(ref);
179}
180
181
182
183
184
185
186static inline void tipc_port_unlock(struct tipc_port *p_ptr)
187{
188 spin_unlock_bh(p_ptr->lock);
189}
190
191static inline struct tipc_port *tipc_port_deref(u32 ref)
192{
193 return (struct tipc_port *)tipc_ref_deref(ref);
194}
195
196static inline int tipc_port_congested(struct tipc_port *p_ptr)
197{
198 return (p_ptr->sent - p_ptr->acked) >= (TIPC_FLOW_CONTROL_WIN * 2);
199}
200
201#endif
202