diff options
Diffstat (limited to 'net/tipc/link.c')
-rw-r--r-- | net/tipc/link.c | 120 |
1 files changed, 5 insertions, 115 deletions
diff --git a/net/tipc/link.c b/net/tipc/link.c index 33cecd6fc37d..7a614f43549d 100644 --- a/net/tipc/link.c +++ b/net/tipc/link.c | |||
@@ -45,13 +45,11 @@ | |||
45 | /* | 45 | /* |
46 | * Out-of-range value for link session numbers | 46 | * Out-of-range value for link session numbers |
47 | */ | 47 | */ |
48 | |||
49 | #define INVALID_SESSION 0x10000 | 48 | #define INVALID_SESSION 0x10000 |
50 | 49 | ||
51 | /* | 50 | /* |
52 | * Link state events: | 51 | * Link state events: |
53 | */ | 52 | */ |
54 | |||
55 | #define STARTING_EVT 856384768 /* link processing trigger */ | 53 | #define STARTING_EVT 856384768 /* link processing trigger */ |
56 | #define TRAFFIC_MSG_EVT 560815u /* rx'd ??? */ | 54 | #define TRAFFIC_MSG_EVT 560815u /* rx'd ??? */ |
57 | #define TIMEOUT_EVT 560817u /* link timer expired */ | 55 | #define TIMEOUT_EVT 560817u /* link timer expired */ |
@@ -67,7 +65,6 @@ | |||
67 | /* | 65 | /* |
68 | * State value stored in 'exp_msg_count' | 66 | * State value stored in 'exp_msg_count' |
69 | */ | 67 | */ |
70 | |||
71 | #define START_CHANGEOVER 100000u | 68 | #define START_CHANGEOVER 100000u |
72 | 69 | ||
73 | /** | 70 | /** |
@@ -77,7 +74,6 @@ | |||
77 | * @addr_peer: network address of node at far end | 74 | * @addr_peer: network address of node at far end |
78 | * @if_peer: name of interface at far end | 75 | * @if_peer: name of interface at far end |
79 | */ | 76 | */ |
80 | |||
81 | struct tipc_link_name { | 77 | struct tipc_link_name { |
82 | u32 addr_local; | 78 | u32 addr_local; |
83 | char if_local[TIPC_MAX_IF_NAME]; | 79 | char if_local[TIPC_MAX_IF_NAME]; |
@@ -105,7 +101,6 @@ static int link_send_long_buf(struct tipc_link *l_ptr, struct sk_buff *buf); | |||
105 | /* | 101 | /* |
106 | * Simple link routines | 102 | * Simple link routines |
107 | */ | 103 | */ |
108 | |||
109 | static unsigned int align(unsigned int i) | 104 | static unsigned int align(unsigned int i) |
110 | { | 105 | { |
111 | return (i + 3) & ~3u; | 106 | return (i + 3) & ~3u; |
@@ -143,7 +138,6 @@ static u32 link_last_sent(struct tipc_link *l_ptr) | |||
143 | /* | 138 | /* |
144 | * Simple non-static link routines (i.e. referenced outside this file) | 139 | * Simple non-static link routines (i.e. referenced outside this file) |
145 | */ | 140 | */ |
146 | |||
147 | int tipc_link_is_up(struct tipc_link *l_ptr) | 141 | int tipc_link_is_up(struct tipc_link *l_ptr) |
148 | { | 142 | { |
149 | if (!l_ptr) | 143 | if (!l_ptr) |
@@ -164,7 +158,6 @@ int tipc_link_is_active(struct tipc_link *l_ptr) | |||
164 | * | 158 | * |
165 | * Returns 1 if link name is valid, otherwise 0. | 159 | * Returns 1 if link name is valid, otherwise 0. |
166 | */ | 160 | */ |
167 | |||
168 | static int link_name_validate(const char *name, | 161 | static int link_name_validate(const char *name, |
169 | struct tipc_link_name *name_parts) | 162 | struct tipc_link_name *name_parts) |
170 | { | 163 | { |
@@ -180,7 +173,6 @@ static int link_name_validate(const char *name, | |||
180 | u32 if_peer_len; | 173 | u32 if_peer_len; |
181 | 174 | ||
182 | /* copy link name & ensure length is OK */ | 175 | /* copy link name & ensure length is OK */ |
183 | |||
184 | name_copy[TIPC_MAX_LINK_NAME - 1] = 0; | 176 | name_copy[TIPC_MAX_LINK_NAME - 1] = 0; |
185 | /* need above in case non-Posix strncpy() doesn't pad with nulls */ | 177 | /* need above in case non-Posix strncpy() doesn't pad with nulls */ |
186 | strncpy(name_copy, name, TIPC_MAX_LINK_NAME); | 178 | strncpy(name_copy, name, TIPC_MAX_LINK_NAME); |
@@ -188,7 +180,6 @@ static int link_name_validate(const char *name, | |||
188 | return 0; | 180 | return 0; |
189 | 181 | ||
190 | /* ensure all component parts of link name are present */ | 182 | /* ensure all component parts of link name are present */ |
191 | |||
192 | addr_local = name_copy; | 183 | addr_local = name_copy; |
193 | if_local = strchr(addr_local, ':'); | 184 | if_local = strchr(addr_local, ':'); |
194 | if (if_local == NULL) | 185 | if (if_local == NULL) |
@@ -206,7 +197,6 @@ static int link_name_validate(const char *name, | |||
206 | if_peer_len = strlen(if_peer) + 1; | 197 | if_peer_len = strlen(if_peer) + 1; |
207 | 198 | ||
208 | /* validate component parts of link name */ | 199 | /* validate component parts of link name */ |
209 | |||
210 | if ((sscanf(addr_local, "%u.%u.%u%c", | 200 | if ((sscanf(addr_local, "%u.%u.%u%c", |
211 | &z_local, &c_local, &n_local, &dummy) != 3) || | 201 | &z_local, &c_local, &n_local, &dummy) != 3) || |
212 | (sscanf(addr_peer, "%u.%u.%u%c", | 202 | (sscanf(addr_peer, "%u.%u.%u%c", |
@@ -220,7 +210,6 @@ static int link_name_validate(const char *name, | |||
220 | return 0; | 210 | return 0; |
221 | 211 | ||
222 | /* return link name components, if necessary */ | 212 | /* return link name components, if necessary */ |
223 | |||
224 | if (name_parts) { | 213 | if (name_parts) { |
225 | name_parts->addr_local = tipc_addr(z_local, c_local, n_local); | 214 | name_parts->addr_local = tipc_addr(z_local, c_local, n_local); |
226 | strcpy(name_parts->if_local, if_local); | 215 | strcpy(name_parts->if_local, if_local); |
@@ -239,13 +228,11 @@ static int link_name_validate(const char *name, | |||
239 | * another thread because tipc_link_delete() always cancels the link timer before | 228 | * another thread because tipc_link_delete() always cancels the link timer before |
240 | * tipc_node_delete() is called.) | 229 | * tipc_node_delete() is called.) |
241 | */ | 230 | */ |
242 | |||
243 | static void link_timeout(struct tipc_link *l_ptr) | 231 | static void link_timeout(struct tipc_link *l_ptr) |
244 | { | 232 | { |
245 | tipc_node_lock(l_ptr->owner); | 233 | tipc_node_lock(l_ptr->owner); |
246 | 234 | ||
247 | /* update counters used in statistical profiling of send traffic */ | 235 | /* update counters used in statistical profiling of send traffic */ |
248 | |||
249 | l_ptr->stats.accu_queue_sz += l_ptr->out_queue_size; | 236 | l_ptr->stats.accu_queue_sz += l_ptr->out_queue_size; |
250 | l_ptr->stats.queue_sz_counts++; | 237 | l_ptr->stats.queue_sz_counts++; |
251 | 238 | ||
@@ -278,7 +265,6 @@ static void link_timeout(struct tipc_link *l_ptr) | |||
278 | } | 265 | } |
279 | 266 | ||
280 | /* do all other link processing performed on a periodic basis */ | 267 | /* do all other link processing performed on a periodic basis */ |
281 | |||
282 | link_check_defragm_bufs(l_ptr); | 268 | link_check_defragm_bufs(l_ptr); |
283 | 269 | ||
284 | link_state_event(l_ptr, TIMEOUT_EVT); | 270 | link_state_event(l_ptr, TIMEOUT_EVT); |
@@ -302,7 +288,6 @@ static void link_set_timer(struct tipc_link *l_ptr, u32 time) | |||
302 | * | 288 | * |
303 | * Returns pointer to link. | 289 | * Returns pointer to link. |
304 | */ | 290 | */ |
305 | |||
306 | struct tipc_link *tipc_link_create(struct tipc_node *n_ptr, | 291 | struct tipc_link *tipc_link_create(struct tipc_node *n_ptr, |
307 | struct tipc_bearer *b_ptr, | 292 | struct tipc_bearer *b_ptr, |
308 | const struct tipc_media_addr *media_addr) | 293 | const struct tipc_media_addr *media_addr) |
@@ -383,7 +368,6 @@ struct tipc_link *tipc_link_create(struct tipc_node *n_ptr, | |||
383 | * This routine must not grab the node lock until after link timer cancellation | 368 | * This routine must not grab the node lock until after link timer cancellation |
384 | * to avoid a potential deadlock situation. | 369 | * to avoid a potential deadlock situation. |
385 | */ | 370 | */ |
386 | |||
387 | void tipc_link_delete(struct tipc_link *l_ptr) | 371 | void tipc_link_delete(struct tipc_link *l_ptr) |
388 | { | 372 | { |
389 | if (!l_ptr) { | 373 | if (!l_ptr) { |
@@ -419,7 +403,6 @@ static void link_start(struct tipc_link *l_ptr) | |||
419 | * Schedules port for renewed sending of messages after link congestion | 403 | * Schedules port for renewed sending of messages after link congestion |
420 | * has abated. | 404 | * has abated. |
421 | */ | 405 | */ |
422 | |||
423 | static int link_schedule_port(struct tipc_link *l_ptr, u32 origport, u32 sz) | 406 | static int link_schedule_port(struct tipc_link *l_ptr, u32 origport, u32 sz) |
424 | { | 407 | { |
425 | struct tipc_port *p_ptr; | 408 | struct tipc_port *p_ptr; |
@@ -476,7 +459,6 @@ exit: | |||
476 | * link_release_outqueue - purge link's outbound message queue | 459 | * link_release_outqueue - purge link's outbound message queue |
477 | * @l_ptr: pointer to link | 460 | * @l_ptr: pointer to link |
478 | */ | 461 | */ |
479 | |||
480 | static void link_release_outqueue(struct tipc_link *l_ptr) | 462 | static void link_release_outqueue(struct tipc_link *l_ptr) |
481 | { | 463 | { |
482 | struct sk_buff *buf = l_ptr->first_out; | 464 | struct sk_buff *buf = l_ptr->first_out; |
@@ -495,7 +477,6 @@ static void link_release_outqueue(struct tipc_link *l_ptr) | |||
495 | * tipc_link_reset_fragments - purge link's inbound message fragments queue | 477 | * tipc_link_reset_fragments - purge link's inbound message fragments queue |
496 | * @l_ptr: pointer to link | 478 | * @l_ptr: pointer to link |
497 | */ | 479 | */ |
498 | |||
499 | void tipc_link_reset_fragments(struct tipc_link *l_ptr) | 480 | void tipc_link_reset_fragments(struct tipc_link *l_ptr) |
500 | { | 481 | { |
501 | struct sk_buff *buf = l_ptr->defragm_buf; | 482 | struct sk_buff *buf = l_ptr->defragm_buf; |
@@ -513,7 +494,6 @@ void tipc_link_reset_fragments(struct tipc_link *l_ptr) | |||
513 | * tipc_link_stop - purge all inbound and outbound messages associated with link | 494 | * tipc_link_stop - purge all inbound and outbound messages associated with link |
514 | * @l_ptr: pointer to link | 495 | * @l_ptr: pointer to link |
515 | */ | 496 | */ |
516 | |||
517 | void tipc_link_stop(struct tipc_link *l_ptr) | 497 | void tipc_link_stop(struct tipc_link *l_ptr) |
518 | { | 498 | { |
519 | struct sk_buff *buf; | 499 | struct sk_buff *buf; |
@@ -569,7 +549,6 @@ void tipc_link_reset(struct tipc_link *l_ptr) | |||
569 | } | 549 | } |
570 | 550 | ||
571 | /* Clean up all queues: */ | 551 | /* Clean up all queues: */ |
572 | |||
573 | link_release_outqueue(l_ptr); | 552 | link_release_outqueue(l_ptr); |
574 | kfree_skb(l_ptr->proto_msg_queue); | 553 | kfree_skb(l_ptr->proto_msg_queue); |
575 | l_ptr->proto_msg_queue = NULL; | 554 | l_ptr->proto_msg_queue = NULL; |
@@ -611,7 +590,6 @@ static void link_activate(struct tipc_link *l_ptr) | |||
611 | * @l_ptr: pointer to link | 590 | * @l_ptr: pointer to link |
612 | * @event: state machine event to process | 591 | * @event: state machine event to process |
613 | */ | 592 | */ |
614 | |||
615 | static void link_state_event(struct tipc_link *l_ptr, unsigned int event) | 593 | static void link_state_event(struct tipc_link *l_ptr, unsigned int event) |
616 | { | 594 | { |
617 | struct tipc_link *other; | 595 | struct tipc_link *other; |
@@ -785,7 +763,6 @@ static void link_state_event(struct tipc_link *l_ptr, unsigned int event) | |||
785 | * link_bundle_buf(): Append contents of a buffer to | 763 | * link_bundle_buf(): Append contents of a buffer to |
786 | * the tail of an existing one. | 764 | * the tail of an existing one. |
787 | */ | 765 | */ |
788 | |||
789 | static int link_bundle_buf(struct tipc_link *l_ptr, | 766 | static int link_bundle_buf(struct tipc_link *l_ptr, |
790 | struct sk_buff *bundler, | 767 | struct sk_buff *bundler, |
791 | struct sk_buff *buf) | 768 | struct sk_buff *buf) |
@@ -860,7 +837,6 @@ static void link_add_chain_to_outqueue(struct tipc_link *l_ptr, | |||
860 | * inside TIPC when the 'fast path' in tipc_send_buf | 837 | * inside TIPC when the 'fast path' in tipc_send_buf |
861 | * has failed, and from link_send() | 838 | * has failed, and from link_send() |
862 | */ | 839 | */ |
863 | |||
864 | int tipc_link_send_buf(struct tipc_link *l_ptr, struct sk_buff *buf) | 840 | int tipc_link_send_buf(struct tipc_link *l_ptr, struct sk_buff *buf) |
865 | { | 841 | { |
866 | struct tipc_msg *msg = buf_msg(buf); | 842 | struct tipc_msg *msg = buf_msg(buf); |
@@ -872,7 +848,6 @@ int tipc_link_send_buf(struct tipc_link *l_ptr, struct sk_buff *buf) | |||
872 | u32 max_packet = l_ptr->max_pkt; | 848 | u32 max_packet = l_ptr->max_pkt; |
873 | 849 | ||
874 | /* Match msg importance against queue limits: */ | 850 | /* Match msg importance against queue limits: */ |
875 | |||
876 | if (unlikely(queue_size >= queue_limit)) { | 851 | if (unlikely(queue_size >= queue_limit)) { |
877 | if (imp <= TIPC_CRITICAL_IMPORTANCE) { | 852 | if (imp <= TIPC_CRITICAL_IMPORTANCE) { |
878 | link_schedule_port(l_ptr, msg_origport(msg), size); | 853 | link_schedule_port(l_ptr, msg_origport(msg), size); |
@@ -888,12 +863,10 @@ int tipc_link_send_buf(struct tipc_link *l_ptr, struct sk_buff *buf) | |||
888 | } | 863 | } |
889 | 864 | ||
890 | /* Fragmentation needed ? */ | 865 | /* Fragmentation needed ? */ |
891 | |||
892 | if (size > max_packet) | 866 | if (size > max_packet) |
893 | return link_send_long_buf(l_ptr, buf); | 867 | return link_send_long_buf(l_ptr, buf); |
894 | 868 | ||
895 | /* Packet can be queued or sent: */ | 869 | /* Packet can be queued or sent. */ |
896 | |||
897 | if (likely(!tipc_bearer_congested(l_ptr->b_ptr, l_ptr) && | 870 | if (likely(!tipc_bearer_congested(l_ptr->b_ptr, l_ptr) && |
898 | !link_congested(l_ptr))) { | 871 | !link_congested(l_ptr))) { |
899 | link_add_to_outqueue(l_ptr, buf, msg); | 872 | link_add_to_outqueue(l_ptr, buf, msg); |
@@ -907,13 +880,11 @@ int tipc_link_send_buf(struct tipc_link *l_ptr, struct sk_buff *buf) | |||
907 | } | 880 | } |
908 | return dsz; | 881 | return dsz; |
909 | } | 882 | } |
910 | /* Congestion: can message be bundled ?: */ | 883 | /* Congestion: can message be bundled ? */ |
911 | |||
912 | if ((msg_user(msg) != CHANGEOVER_PROTOCOL) && | 884 | if ((msg_user(msg) != CHANGEOVER_PROTOCOL) && |
913 | (msg_user(msg) != MSG_FRAGMENTER)) { | 885 | (msg_user(msg) != MSG_FRAGMENTER)) { |
914 | 886 | ||
915 | /* Try adding message to an existing bundle */ | 887 | /* Try adding message to an existing bundle */ |
916 | |||
917 | if (l_ptr->next_out && | 888 | if (l_ptr->next_out && |
918 | link_bundle_buf(l_ptr, l_ptr->last_out, buf)) { | 889 | link_bundle_buf(l_ptr, l_ptr->last_out, buf)) { |
919 | tipc_bearer_resolve_congestion(l_ptr->b_ptr, l_ptr); | 890 | tipc_bearer_resolve_congestion(l_ptr->b_ptr, l_ptr); |
@@ -921,7 +892,6 @@ int tipc_link_send_buf(struct tipc_link *l_ptr, struct sk_buff *buf) | |||
921 | } | 892 | } |
922 | 893 | ||
923 | /* Try creating a new bundle */ | 894 | /* Try creating a new bundle */ |
924 | |||
925 | if (size <= max_packet * 2 / 3) { | 895 | if (size <= max_packet * 2 / 3) { |
926 | struct sk_buff *bundler = tipc_buf_acquire(max_packet); | 896 | struct sk_buff *bundler = tipc_buf_acquire(max_packet); |
927 | struct tipc_msg bundler_hdr; | 897 | struct tipc_msg bundler_hdr; |
@@ -951,7 +921,6 @@ int tipc_link_send_buf(struct tipc_link *l_ptr, struct sk_buff *buf) | |||
951 | * not been selected yet, and the the owner node is not locked | 921 | * not been selected yet, and the the owner node is not locked |
952 | * Called by TIPC internal users, e.g. the name distributor | 922 | * Called by TIPC internal users, e.g. the name distributor |
953 | */ | 923 | */ |
954 | |||
955 | int tipc_link_send(struct sk_buff *buf, u32 dest, u32 selector) | 924 | int tipc_link_send(struct sk_buff *buf, u32 dest, u32 selector) |
956 | { | 925 | { |
957 | struct tipc_link *l_ptr; | 926 | struct tipc_link *l_ptr; |
@@ -984,7 +953,6 @@ int tipc_link_send(struct sk_buff *buf, u32 dest, u32 selector) | |||
984 | * small enough not to require fragmentation. | 953 | * small enough not to require fragmentation. |
985 | * Called without any locks held. | 954 | * Called without any locks held. |
986 | */ | 955 | */ |
987 | |||
988 | void tipc_link_send_names(struct list_head *message_list, u32 dest) | 956 | void tipc_link_send_names(struct list_head *message_list, u32 dest) |
989 | { | 957 | { |
990 | struct tipc_node *n_ptr; | 958 | struct tipc_node *n_ptr; |
@@ -1013,7 +981,6 @@ void tipc_link_send_names(struct list_head *message_list, u32 dest) | |||
1013 | read_unlock_bh(&tipc_net_lock); | 981 | read_unlock_bh(&tipc_net_lock); |
1014 | 982 | ||
1015 | /* discard the messages if they couldn't be sent */ | 983 | /* discard the messages if they couldn't be sent */ |
1016 | |||
1017 | list_for_each_safe(buf, temp_buf, ((struct sk_buff *)message_list)) { | 984 | list_for_each_safe(buf, temp_buf, ((struct sk_buff *)message_list)) { |
1018 | list_del((struct list_head *)buf); | 985 | list_del((struct list_head *)buf); |
1019 | kfree_skb(buf); | 986 | kfree_skb(buf); |
@@ -1026,7 +993,6 @@ void tipc_link_send_names(struct list_head *message_list, u32 dest) | |||
1026 | * inclusive total message length. Very time critical. | 993 | * inclusive total message length. Very time critical. |
1027 | * Link is locked. Returns user data length. | 994 | * Link is locked. Returns user data length. |
1028 | */ | 995 | */ |
1029 | |||
1030 | static int link_send_buf_fast(struct tipc_link *l_ptr, struct sk_buff *buf, | 996 | static int link_send_buf_fast(struct tipc_link *l_ptr, struct sk_buff *buf, |
1031 | u32 *used_max_pkt) | 997 | u32 *used_max_pkt) |
1032 | { | 998 | { |
@@ -1111,7 +1077,6 @@ again: | |||
1111 | * Try building message using port's max_pkt hint. | 1077 | * Try building message using port's max_pkt hint. |
1112 | * (Must not hold any locks while building message.) | 1078 | * (Must not hold any locks while building message.) |
1113 | */ | 1079 | */ |
1114 | |||
1115 | res = tipc_msg_build(hdr, msg_sect, num_sect, total_len, | 1080 | res = tipc_msg_build(hdr, msg_sect, num_sect, total_len, |
1116 | sender->max_pkt, !sender->user_port, &buf); | 1081 | sender->max_pkt, !sender->user_port, &buf); |
1117 | 1082 | ||
@@ -1131,12 +1096,10 @@ exit: | |||
1131 | } | 1096 | } |
1132 | 1097 | ||
1133 | /* Exit if build request was invalid */ | 1098 | /* Exit if build request was invalid */ |
1134 | |||
1135 | if (unlikely(res < 0)) | 1099 | if (unlikely(res < 0)) |
1136 | goto exit; | 1100 | goto exit; |
1137 | 1101 | ||
1138 | /* Exit if link (or bearer) is congested */ | 1102 | /* Exit if link (or bearer) is congested */ |
1139 | |||
1140 | if (link_congested(l_ptr) || | 1103 | if (link_congested(l_ptr) || |
1141 | !list_empty(&l_ptr->b_ptr->cong_links)) { | 1104 | !list_empty(&l_ptr->b_ptr->cong_links)) { |
1142 | res = link_schedule_port(l_ptr, | 1105 | res = link_schedule_port(l_ptr, |
@@ -1148,7 +1111,6 @@ exit: | |||
1148 | * Message size exceeds max_pkt hint; update hint, | 1111 | * Message size exceeds max_pkt hint; update hint, |
1149 | * then re-try fast path or fragment the message | 1112 | * then re-try fast path or fragment the message |
1150 | */ | 1113 | */ |
1151 | |||
1152 | sender->max_pkt = l_ptr->max_pkt; | 1114 | sender->max_pkt = l_ptr->max_pkt; |
1153 | tipc_node_unlock(node); | 1115 | tipc_node_unlock(node); |
1154 | read_unlock_bh(&tipc_net_lock); | 1116 | read_unlock_bh(&tipc_net_lock); |
@@ -1166,7 +1128,6 @@ exit: | |||
1166 | read_unlock_bh(&tipc_net_lock); | 1128 | read_unlock_bh(&tipc_net_lock); |
1167 | 1129 | ||
1168 | /* Couldn't find a link to the destination node */ | 1130 | /* Couldn't find a link to the destination node */ |
1169 | |||
1170 | if (buf) | 1131 | if (buf) |
1171 | return tipc_reject_msg(buf, TIPC_ERR_NO_NODE); | 1132 | return tipc_reject_msg(buf, TIPC_ERR_NO_NODE); |
1172 | if (res >= 0) | 1133 | if (res >= 0) |
@@ -1220,15 +1181,13 @@ again: | |||
1220 | sect_crs = NULL; | 1181 | sect_crs = NULL; |
1221 | curr_sect = -1; | 1182 | curr_sect = -1; |
1222 | 1183 | ||
1223 | /* Prepare reusable fragment header: */ | 1184 | /* Prepare reusable fragment header */ |
1224 | |||
1225 | tipc_msg_init(&fragm_hdr, MSG_FRAGMENTER, FIRST_FRAGMENT, | 1185 | tipc_msg_init(&fragm_hdr, MSG_FRAGMENTER, FIRST_FRAGMENT, |
1226 | INT_H_SIZE, msg_destnode(hdr)); | 1186 | INT_H_SIZE, msg_destnode(hdr)); |
1227 | msg_set_size(&fragm_hdr, max_pkt); | 1187 | msg_set_size(&fragm_hdr, max_pkt); |
1228 | msg_set_fragm_no(&fragm_hdr, 1); | 1188 | msg_set_fragm_no(&fragm_hdr, 1); |
1229 | 1189 | ||
1230 | /* Prepare header of first fragment: */ | 1190 | /* Prepare header of first fragment */ |
1231 | |||
1232 | buf_chain = buf = tipc_buf_acquire(max_pkt); | 1191 | buf_chain = buf = tipc_buf_acquire(max_pkt); |
1233 | if (!buf) | 1192 | if (!buf) |
1234 | return -ENOMEM; | 1193 | return -ENOMEM; |
@@ -1237,8 +1196,7 @@ again: | |||
1237 | hsz = msg_hdr_sz(hdr); | 1196 | hsz = msg_hdr_sz(hdr); |
1238 | skb_copy_to_linear_data_offset(buf, INT_H_SIZE, hdr, hsz); | 1197 | skb_copy_to_linear_data_offset(buf, INT_H_SIZE, hdr, hsz); |
1239 | 1198 | ||
1240 | /* Chop up message: */ | 1199 | /* Chop up message */ |
1241 | |||
1242 | fragm_crs = INT_H_SIZE + hsz; | 1200 | fragm_crs = INT_H_SIZE + hsz; |
1243 | fragm_rest = fragm_sz - hsz; | 1201 | fragm_rest = fragm_sz - hsz; |
1244 | 1202 | ||
@@ -1329,7 +1287,6 @@ reject: | |||
1329 | } | 1287 | } |
1330 | 1288 | ||
1331 | /* Append chain of fragments to send queue & send them */ | 1289 | /* Append chain of fragments to send queue & send them */ |
1332 | |||
1333 | l_ptr->long_msg_seq_no++; | 1290 | l_ptr->long_msg_seq_no++; |
1334 | link_add_chain_to_outqueue(l_ptr, buf_chain, l_ptr->long_msg_seq_no); | 1291 | link_add_chain_to_outqueue(l_ptr, buf_chain, l_ptr->long_msg_seq_no); |
1335 | l_ptr->stats.sent_fragments += fragm_no; | 1292 | l_ptr->stats.sent_fragments += fragm_no; |
@@ -1350,7 +1307,6 @@ u32 tipc_link_push_packet(struct tipc_link *l_ptr) | |||
1350 | 1307 | ||
1351 | /* Step to position where retransmission failed, if any, */ | 1308 | /* Step to position where retransmission failed, if any, */ |
1352 | /* consider that buffers may have been released in meantime */ | 1309 | /* consider that buffers may have been released in meantime */ |
1353 | |||
1354 | if (r_q_size && buf) { | 1310 | if (r_q_size && buf) { |
1355 | u32 last = lesser(mod(r_q_head + r_q_size), | 1311 | u32 last = lesser(mod(r_q_head + r_q_size), |
1356 | link_last_sent(l_ptr)); | 1312 | link_last_sent(l_ptr)); |
@@ -1365,7 +1321,6 @@ u32 tipc_link_push_packet(struct tipc_link *l_ptr) | |||
1365 | } | 1321 | } |
1366 | 1322 | ||
1367 | /* Continue retransmission now, if there is anything: */ | 1323 | /* Continue retransmission now, if there is anything: */ |
1368 | |||
1369 | if (r_q_size && buf) { | 1324 | if (r_q_size && buf) { |
1370 | msg_set_ack(buf_msg(buf), mod(l_ptr->next_in_no - 1)); | 1325 | msg_set_ack(buf_msg(buf), mod(l_ptr->next_in_no - 1)); |
1371 | msg_set_bcast_ack(buf_msg(buf), l_ptr->owner->bclink.last_in); | 1326 | msg_set_bcast_ack(buf_msg(buf), l_ptr->owner->bclink.last_in); |
@@ -1381,7 +1336,6 @@ u32 tipc_link_push_packet(struct tipc_link *l_ptr) | |||
1381 | } | 1336 | } |
1382 | 1337 | ||
1383 | /* Send deferred protocol message, if any: */ | 1338 | /* Send deferred protocol message, if any: */ |
1384 | |||
1385 | buf = l_ptr->proto_msg_queue; | 1339 | buf = l_ptr->proto_msg_queue; |
1386 | if (buf) { | 1340 | if (buf) { |
1387 | msg_set_ack(buf_msg(buf), mod(l_ptr->next_in_no - 1)); | 1341 | msg_set_ack(buf_msg(buf), mod(l_ptr->next_in_no - 1)); |
@@ -1398,7 +1352,6 @@ u32 tipc_link_push_packet(struct tipc_link *l_ptr) | |||
1398 | } | 1352 | } |
1399 | 1353 | ||
1400 | /* Send one deferred data message, if send window not full: */ | 1354 | /* Send one deferred data message, if send window not full: */ |
1401 | |||
1402 | buf = l_ptr->next_out; | 1355 | buf = l_ptr->next_out; |
1403 | if (buf) { | 1356 | if (buf) { |
1404 | struct tipc_msg *msg = buf_msg(buf); | 1357 | struct tipc_msg *msg = buf_msg(buf); |
@@ -1478,16 +1431,12 @@ static void link_retransmit_failure(struct tipc_link *l_ptr, | |||
1478 | warn("Retransmission failure on link <%s>\n", l_ptr->name); | 1431 | warn("Retransmission failure on link <%s>\n", l_ptr->name); |
1479 | 1432 | ||
1480 | if (l_ptr->addr) { | 1433 | if (l_ptr->addr) { |
1481 | |||
1482 | /* Handle failure on standard link */ | 1434 | /* Handle failure on standard link */ |
1483 | |||
1484 | link_print(l_ptr, "Resetting link\n"); | 1435 | link_print(l_ptr, "Resetting link\n"); |
1485 | tipc_link_reset(l_ptr); | 1436 | tipc_link_reset(l_ptr); |
1486 | 1437 | ||
1487 | } else { | 1438 | } else { |
1488 | |||
1489 | /* Handle failure on broadcast link */ | 1439 | /* Handle failure on broadcast link */ |
1490 | |||
1491 | struct tipc_node *n_ptr; | 1440 | struct tipc_node *n_ptr; |
1492 | char addr_string[16]; | 1441 | char addr_string[16]; |
1493 | 1442 | ||
@@ -1536,7 +1485,6 @@ void tipc_link_retransmit(struct tipc_link *l_ptr, struct sk_buff *buf, | |||
1536 | return; | 1485 | return; |
1537 | } else { | 1486 | } else { |
1538 | /* Detect repeated retransmit failures on uncongested bearer */ | 1487 | /* Detect repeated retransmit failures on uncongested bearer */ |
1539 | |||
1540 | if (l_ptr->last_retransmitted == msg_seqno(msg)) { | 1488 | if (l_ptr->last_retransmitted == msg_seqno(msg)) { |
1541 | if (++l_ptr->stale_count > 100) { | 1489 | if (++l_ptr->stale_count > 100) { |
1542 | link_retransmit_failure(l_ptr, buf); | 1490 | link_retransmit_failure(l_ptr, buf); |
@@ -1571,7 +1519,6 @@ void tipc_link_retransmit(struct tipc_link *l_ptr, struct sk_buff *buf, | |||
1571 | /** | 1519 | /** |
1572 | * link_insert_deferred_queue - insert deferred messages back into receive chain | 1520 | * link_insert_deferred_queue - insert deferred messages back into receive chain |
1573 | */ | 1521 | */ |
1574 | |||
1575 | static struct sk_buff *link_insert_deferred_queue(struct tipc_link *l_ptr, | 1522 | static struct sk_buff *link_insert_deferred_queue(struct tipc_link *l_ptr, |
1576 | struct sk_buff *buf) | 1523 | struct sk_buff *buf) |
1577 | { | 1524 | { |
@@ -1602,7 +1549,6 @@ static struct sk_buff *link_insert_deferred_queue(struct tipc_link *l_ptr, | |||
1602 | * TIPC will ignore the excess, under the assumption that it is optional info | 1549 | * TIPC will ignore the excess, under the assumption that it is optional info |
1603 | * introduced by a later release of the protocol. | 1550 | * introduced by a later release of the protocol. |
1604 | */ | 1551 | */ |
1605 | |||
1606 | static int link_recv_buf_validate(struct sk_buff *buf) | 1552 | static int link_recv_buf_validate(struct sk_buff *buf) |
1607 | { | 1553 | { |
1608 | static u32 min_data_hdr_size[8] = { | 1554 | static u32 min_data_hdr_size[8] = { |
@@ -1648,7 +1594,6 @@ static int link_recv_buf_validate(struct sk_buff *buf) | |||
1648 | * Invoked with no locks held. Bearer pointer must point to a valid bearer | 1594 | * Invoked with no locks held. Bearer pointer must point to a valid bearer |
1649 | * structure (i.e. cannot be NULL), but bearer can be inactive. | 1595 | * structure (i.e. cannot be NULL), but bearer can be inactive. |
1650 | */ | 1596 | */ |
1651 | |||
1652 | void tipc_recv_msg(struct sk_buff *head, struct tipc_bearer *b_ptr) | 1597 | void tipc_recv_msg(struct sk_buff *head, struct tipc_bearer *b_ptr) |
1653 | { | 1598 | { |
1654 | read_lock_bh(&tipc_net_lock); | 1599 | read_lock_bh(&tipc_net_lock); |
@@ -1666,22 +1611,18 @@ void tipc_recv_msg(struct sk_buff *head, struct tipc_bearer *b_ptr) | |||
1666 | head = head->next; | 1611 | head = head->next; |
1667 | 1612 | ||
1668 | /* Ensure bearer is still enabled */ | 1613 | /* Ensure bearer is still enabled */ |
1669 | |||
1670 | if (unlikely(!b_ptr->active)) | 1614 | if (unlikely(!b_ptr->active)) |
1671 | goto cont; | 1615 | goto cont; |
1672 | 1616 | ||
1673 | /* Ensure message is well-formed */ | 1617 | /* Ensure message is well-formed */ |
1674 | |||
1675 | if (unlikely(!link_recv_buf_validate(buf))) | 1618 | if (unlikely(!link_recv_buf_validate(buf))) |
1676 | goto cont; | 1619 | goto cont; |
1677 | 1620 | ||
1678 | /* Ensure message data is a single contiguous unit */ | 1621 | /* Ensure message data is a single contiguous unit */ |
1679 | |||
1680 | if (unlikely(skb_linearize(buf))) | 1622 | if (unlikely(skb_linearize(buf))) |
1681 | goto cont; | 1623 | goto cont; |
1682 | 1624 | ||
1683 | /* Handle arrival of a non-unicast link message */ | 1625 | /* Handle arrival of a non-unicast link message */ |
1684 | |||
1685 | msg = buf_msg(buf); | 1626 | msg = buf_msg(buf); |
1686 | 1627 | ||
1687 | if (unlikely(msg_non_seq(msg))) { | 1628 | if (unlikely(msg_non_seq(msg))) { |
@@ -1693,20 +1634,17 @@ void tipc_recv_msg(struct sk_buff *head, struct tipc_bearer *b_ptr) | |||
1693 | } | 1634 | } |
1694 | 1635 | ||
1695 | /* Discard unicast link messages destined for another node */ | 1636 | /* Discard unicast link messages destined for another node */ |
1696 | |||
1697 | if (unlikely(!msg_short(msg) && | 1637 | if (unlikely(!msg_short(msg) && |
1698 | (msg_destnode(msg) != tipc_own_addr))) | 1638 | (msg_destnode(msg) != tipc_own_addr))) |
1699 | goto cont; | 1639 | goto cont; |
1700 | 1640 | ||
1701 | /* Locate neighboring node that sent message */ | 1641 | /* Locate neighboring node that sent message */ |
1702 | |||
1703 | n_ptr = tipc_node_find(msg_prevnode(msg)); | 1642 | n_ptr = tipc_node_find(msg_prevnode(msg)); |
1704 | if (unlikely(!n_ptr)) | 1643 | if (unlikely(!n_ptr)) |
1705 | goto cont; | 1644 | goto cont; |
1706 | tipc_node_lock(n_ptr); | 1645 | tipc_node_lock(n_ptr); |
1707 | 1646 | ||
1708 | /* Locate unicast link endpoint that should handle message */ | 1647 | /* Locate unicast link endpoint that should handle message */ |
1709 | |||
1710 | l_ptr = n_ptr->links[b_ptr->identity]; | 1648 | l_ptr = n_ptr->links[b_ptr->identity]; |
1711 | if (unlikely(!l_ptr)) { | 1649 | if (unlikely(!l_ptr)) { |
1712 | tipc_node_unlock(n_ptr); | 1650 | tipc_node_unlock(n_ptr); |
@@ -1714,7 +1652,6 @@ void tipc_recv_msg(struct sk_buff *head, struct tipc_bearer *b_ptr) | |||
1714 | } | 1652 | } |
1715 | 1653 | ||
1716 | /* Verify that communication with node is currently allowed */ | 1654 | /* Verify that communication with node is currently allowed */ |
1717 | |||
1718 | if ((n_ptr->block_setup & WAIT_PEER_DOWN) && | 1655 | if ((n_ptr->block_setup & WAIT_PEER_DOWN) && |
1719 | msg_user(msg) == LINK_PROTOCOL && | 1656 | msg_user(msg) == LINK_PROTOCOL && |
1720 | (msg_type(msg) == RESET_MSG || | 1657 | (msg_type(msg) == RESET_MSG || |
@@ -1728,12 +1665,10 @@ void tipc_recv_msg(struct sk_buff *head, struct tipc_bearer *b_ptr) | |||
1728 | } | 1665 | } |
1729 | 1666 | ||
1730 | /* Validate message sequence number info */ | 1667 | /* Validate message sequence number info */ |
1731 | |||
1732 | seq_no = msg_seqno(msg); | 1668 | seq_no = msg_seqno(msg); |
1733 | ackd = msg_ack(msg); | 1669 | ackd = msg_ack(msg); |
1734 | 1670 | ||
1735 | /* Release acked messages */ | 1671 | /* Release acked messages */ |
1736 | |||
1737 | if (n_ptr->bclink.supported) | 1672 | if (n_ptr->bclink.supported) |
1738 | tipc_bclink_acknowledge(n_ptr, msg_bcast_ack(msg)); | 1673 | tipc_bclink_acknowledge(n_ptr, msg_bcast_ack(msg)); |
1739 | 1674 | ||
@@ -1752,7 +1687,6 @@ void tipc_recv_msg(struct sk_buff *head, struct tipc_bearer *b_ptr) | |||
1752 | } | 1687 | } |
1753 | 1688 | ||
1754 | /* Try sending any messages link endpoint has pending */ | 1689 | /* Try sending any messages link endpoint has pending */ |
1755 | |||
1756 | if (unlikely(l_ptr->next_out)) | 1690 | if (unlikely(l_ptr->next_out)) |
1757 | tipc_link_push_queue(l_ptr); | 1691 | tipc_link_push_queue(l_ptr); |
1758 | if (unlikely(!list_empty(&l_ptr->waiting_ports))) | 1692 | if (unlikely(!list_empty(&l_ptr->waiting_ports))) |
@@ -1763,7 +1697,6 @@ void tipc_recv_msg(struct sk_buff *head, struct tipc_bearer *b_ptr) | |||
1763 | } | 1697 | } |
1764 | 1698 | ||
1765 | /* Now (finally!) process the incoming message */ | 1699 | /* Now (finally!) process the incoming message */ |
1766 | |||
1767 | protocol_check: | 1700 | protocol_check: |
1768 | if (likely(link_working_working(l_ptr))) { | 1701 | if (likely(link_working_working(l_ptr))) { |
1769 | if (likely(seq_no == mod(l_ptr->next_in_no))) { | 1702 | if (likely(seq_no == mod(l_ptr->next_in_no))) { |
@@ -1859,7 +1792,6 @@ cont: | |||
1859 | * | 1792 | * |
1860 | * Returns increase in queue length (i.e. 0 or 1) | 1793 | * Returns increase in queue length (i.e. 0 or 1) |
1861 | */ | 1794 | */ |
1862 | |||
1863 | u32 tipc_link_defer_pkt(struct sk_buff **head, struct sk_buff **tail, | 1795 | u32 tipc_link_defer_pkt(struct sk_buff **head, struct sk_buff **tail, |
1864 | struct sk_buff *buf) | 1796 | struct sk_buff *buf) |
1865 | { | 1797 | { |
@@ -1908,7 +1840,6 @@ u32 tipc_link_defer_pkt(struct sk_buff **head, struct sk_buff **tail, | |||
1908 | /* | 1840 | /* |
1909 | * link_handle_out_of_seq_msg - handle arrival of out-of-sequence packet | 1841 | * link_handle_out_of_seq_msg - handle arrival of out-of-sequence packet |
1910 | */ | 1842 | */ |
1911 | |||
1912 | static void link_handle_out_of_seq_msg(struct tipc_link *l_ptr, | 1843 | static void link_handle_out_of_seq_msg(struct tipc_link *l_ptr, |
1913 | struct sk_buff *buf) | 1844 | struct sk_buff *buf) |
1914 | { | 1845 | { |
@@ -1920,14 +1851,12 @@ static void link_handle_out_of_seq_msg(struct tipc_link *l_ptr, | |||
1920 | } | 1851 | } |
1921 | 1852 | ||
1922 | /* Record OOS packet arrival (force mismatch on next timeout) */ | 1853 | /* Record OOS packet arrival (force mismatch on next timeout) */ |
1923 | |||
1924 | l_ptr->checkpoint--; | 1854 | l_ptr->checkpoint--; |
1925 | 1855 | ||
1926 | /* | 1856 | /* |
1927 | * Discard packet if a duplicate; otherwise add it to deferred queue | 1857 | * Discard packet if a duplicate; otherwise add it to deferred queue |
1928 | * and notify peer of gap as per protocol specification | 1858 | * and notify peer of gap as per protocol specification |
1929 | */ | 1859 | */ |
1930 | |||
1931 | if (less(seq_no, mod(l_ptr->next_in_no))) { | 1860 | if (less(seq_no, mod(l_ptr->next_in_no))) { |
1932 | l_ptr->stats.duplicates++; | 1861 | l_ptr->stats.duplicates++; |
1933 | kfree_skb(buf); | 1862 | kfree_skb(buf); |
@@ -1957,7 +1886,6 @@ void tipc_link_send_proto_msg(struct tipc_link *l_ptr, u32 msg_typ, | |||
1957 | int r_flag; | 1886 | int r_flag; |
1958 | 1887 | ||
1959 | /* Discard any previous message that was deferred due to congestion */ | 1888 | /* Discard any previous message that was deferred due to congestion */ |
1960 | |||
1961 | if (l_ptr->proto_msg_queue) { | 1889 | if (l_ptr->proto_msg_queue) { |
1962 | kfree_skb(l_ptr->proto_msg_queue); | 1890 | kfree_skb(l_ptr->proto_msg_queue); |
1963 | l_ptr->proto_msg_queue = NULL; | 1891 | l_ptr->proto_msg_queue = NULL; |
@@ -1967,12 +1895,10 @@ void tipc_link_send_proto_msg(struct tipc_link *l_ptr, u32 msg_typ, | |||
1967 | return; | 1895 | return; |
1968 | 1896 | ||
1969 | /* Abort non-RESET send if communication with node is prohibited */ | 1897 | /* Abort non-RESET send if communication with node is prohibited */ |
1970 | |||
1971 | if ((l_ptr->owner->block_setup) && (msg_typ != RESET_MSG)) | 1898 | if ((l_ptr->owner->block_setup) && (msg_typ != RESET_MSG)) |
1972 | return; | 1899 | return; |
1973 | 1900 | ||
1974 | /* Create protocol message with "out-of-sequence" sequence number */ | 1901 | /* Create protocol message with "out-of-sequence" sequence number */ |
1975 | |||
1976 | msg_set_type(msg, msg_typ); | 1902 | msg_set_type(msg, msg_typ); |
1977 | msg_set_net_plane(msg, l_ptr->b_ptr->net_plane); | 1903 | msg_set_net_plane(msg, l_ptr->b_ptr->net_plane); |
1978 | msg_set_bcast_ack(msg, l_ptr->owner->bclink.last_in); | 1904 | msg_set_bcast_ack(msg, l_ptr->owner->bclink.last_in); |
@@ -2040,14 +1966,12 @@ void tipc_link_send_proto_msg(struct tipc_link *l_ptr, u32 msg_typ, | |||
2040 | skb_copy_to_linear_data(buf, msg, sizeof(l_ptr->proto_msg)); | 1966 | skb_copy_to_linear_data(buf, msg, sizeof(l_ptr->proto_msg)); |
2041 | 1967 | ||
2042 | /* Defer message if bearer is already congested */ | 1968 | /* Defer message if bearer is already congested */ |
2043 | |||
2044 | if (tipc_bearer_congested(l_ptr->b_ptr, l_ptr)) { | 1969 | if (tipc_bearer_congested(l_ptr->b_ptr, l_ptr)) { |
2045 | l_ptr->proto_msg_queue = buf; | 1970 | l_ptr->proto_msg_queue = buf; |
2046 | return; | 1971 | return; |
2047 | } | 1972 | } |
2048 | 1973 | ||
2049 | /* Defer message if attempting to send results in bearer congestion */ | 1974 | /* Defer message if attempting to send results in bearer congestion */ |
2050 | |||
2051 | if (!tipc_bearer_send(l_ptr->b_ptr, buf, &l_ptr->media_addr)) { | 1975 | if (!tipc_bearer_send(l_ptr->b_ptr, buf, &l_ptr->media_addr)) { |
2052 | tipc_bearer_schedule(l_ptr->b_ptr, l_ptr); | 1976 | tipc_bearer_schedule(l_ptr->b_ptr, l_ptr); |
2053 | l_ptr->proto_msg_queue = buf; | 1977 | l_ptr->proto_msg_queue = buf; |
@@ -2056,7 +1980,6 @@ void tipc_link_send_proto_msg(struct tipc_link *l_ptr, u32 msg_typ, | |||
2056 | } | 1980 | } |
2057 | 1981 | ||
2058 | /* Discard message if it was sent successfully */ | 1982 | /* Discard message if it was sent successfully */ |
2059 | |||
2060 | l_ptr->unacked_window = 0; | 1983 | l_ptr->unacked_window = 0; |
2061 | kfree_skb(buf); | 1984 | kfree_skb(buf); |
2062 | } | 1985 | } |
@@ -2066,7 +1989,6 @@ void tipc_link_send_proto_msg(struct tipc_link *l_ptr, u32 msg_typ, | |||
2066 | * Note that network plane id propagates through the network, and may | 1989 | * Note that network plane id propagates through the network, and may |
2067 | * change at any time. The node with lowest address rules | 1990 | * change at any time. The node with lowest address rules |
2068 | */ | 1991 | */ |
2069 | |||
2070 | static void link_recv_proto_msg(struct tipc_link *l_ptr, struct sk_buff *buf) | 1992 | static void link_recv_proto_msg(struct tipc_link *l_ptr, struct sk_buff *buf) |
2071 | { | 1993 | { |
2072 | u32 rec_gap = 0; | 1994 | u32 rec_gap = 0; |
@@ -2079,7 +2001,6 @@ static void link_recv_proto_msg(struct tipc_link *l_ptr, struct sk_buff *buf) | |||
2079 | goto exit; | 2001 | goto exit; |
2080 | 2002 | ||
2081 | /* record unnumbered packet arrival (force mismatch on next timeout) */ | 2003 | /* record unnumbered packet arrival (force mismatch on next timeout) */ |
2082 | |||
2083 | l_ptr->checkpoint--; | 2004 | l_ptr->checkpoint--; |
2084 | 2005 | ||
2085 | if (l_ptr->b_ptr->net_plane != msg_net_plane(msg)) | 2006 | if (l_ptr->b_ptr->net_plane != msg_net_plane(msg)) |
@@ -2111,7 +2032,6 @@ static void link_recv_proto_msg(struct tipc_link *l_ptr, struct sk_buff *buf) | |||
2111 | /* fall thru' */ | 2032 | /* fall thru' */ |
2112 | case ACTIVATE_MSG: | 2033 | case ACTIVATE_MSG: |
2113 | /* Update link settings according other endpoint's values */ | 2034 | /* Update link settings according other endpoint's values */ |
2114 | |||
2115 | strcpy((strrchr(l_ptr->name, ':') + 1), (char *)msg_data(msg)); | 2035 | strcpy((strrchr(l_ptr->name, ':') + 1), (char *)msg_data(msg)); |
2116 | 2036 | ||
2117 | msg_tol = msg_link_tolerance(msg); | 2037 | msg_tol = msg_link_tolerance(msg); |
@@ -2133,7 +2053,6 @@ static void link_recv_proto_msg(struct tipc_link *l_ptr, struct sk_buff *buf) | |||
2133 | l_ptr->owner->bclink.supportable = (max_pkt_info != 0); | 2053 | l_ptr->owner->bclink.supportable = (max_pkt_info != 0); |
2134 | 2054 | ||
2135 | /* Synchronize broadcast link info, if not done previously */ | 2055 | /* Synchronize broadcast link info, if not done previously */ |
2136 | |||
2137 | if (!tipc_node_is_up(l_ptr->owner)) { | 2056 | if (!tipc_node_is_up(l_ptr->owner)) { |
2138 | l_ptr->owner->bclink.last_sent = | 2057 | l_ptr->owner->bclink.last_sent = |
2139 | l_ptr->owner->bclink.last_in = | 2058 | l_ptr->owner->bclink.last_in = |
@@ -2185,7 +2104,6 @@ static void link_recv_proto_msg(struct tipc_link *l_ptr, struct sk_buff *buf) | |||
2185 | } | 2104 | } |
2186 | 2105 | ||
2187 | /* Protocol message before retransmits, reduce loss risk */ | 2106 | /* Protocol message before retransmits, reduce loss risk */ |
2188 | |||
2189 | if (l_ptr->owner->bclink.supported) | 2107 | if (l_ptr->owner->bclink.supported) |
2190 | tipc_bclink_update_link_state(l_ptr->owner, | 2108 | tipc_bclink_update_link_state(l_ptr->owner, |
2191 | msg_last_bcast(msg)); | 2109 | msg_last_bcast(msg)); |
@@ -2243,7 +2161,6 @@ static void tipc_link_tunnel(struct tipc_link *l_ptr, | |||
2243 | * changeover(): Send whole message queue via the remaining link | 2161 | * changeover(): Send whole message queue via the remaining link |
2244 | * Owner node is locked. | 2162 | * Owner node is locked. |
2245 | */ | 2163 | */ |
2246 | |||
2247 | void tipc_link_changeover(struct tipc_link *l_ptr) | 2164 | void tipc_link_changeover(struct tipc_link *l_ptr) |
2248 | { | 2165 | { |
2249 | u32 msgcount = l_ptr->out_queue_size; | 2166 | u32 msgcount = l_ptr->out_queue_size; |
@@ -2343,8 +2260,6 @@ void tipc_link_send_duplicate(struct tipc_link *l_ptr, struct tipc_link *tunnel) | |||
2343 | } | 2260 | } |
2344 | } | 2261 | } |
2345 | 2262 | ||
2346 | |||
2347 | |||
2348 | /** | 2263 | /** |
2349 | * buf_extract - extracts embedded TIPC message from another message | 2264 | * buf_extract - extracts embedded TIPC message from another message |
2350 | * @skb: encapsulating message buffer | 2265 | * @skb: encapsulating message buffer |
@@ -2353,7 +2268,6 @@ void tipc_link_send_duplicate(struct tipc_link *l_ptr, struct tipc_link *tunnel) | |||
2353 | * Returns a new message buffer containing an embedded message. The | 2268 | * Returns a new message buffer containing an embedded message. The |
2354 | * encapsulating message itself is left unchanged. | 2269 | * encapsulating message itself is left unchanged. |
2355 | */ | 2270 | */ |
2356 | |||
2357 | static struct sk_buff *buf_extract(struct sk_buff *skb, u32 from_pos) | 2271 | static struct sk_buff *buf_extract(struct sk_buff *skb, u32 from_pos) |
2358 | { | 2272 | { |
2359 | struct tipc_msg *msg = (struct tipc_msg *)(skb->data + from_pos); | 2273 | struct tipc_msg *msg = (struct tipc_msg *)(skb->data + from_pos); |
@@ -2370,7 +2284,6 @@ static struct sk_buff *buf_extract(struct sk_buff *skb, u32 from_pos) | |||
2370 | * link_recv_changeover_msg(): Receive tunneled packet sent | 2284 | * link_recv_changeover_msg(): Receive tunneled packet sent |
2371 | * via other link. Node is locked. Return extracted buffer. | 2285 | * via other link. Node is locked. Return extracted buffer. |
2372 | */ | 2286 | */ |
2373 | |||
2374 | static int link_recv_changeover_msg(struct tipc_link **l_ptr, | 2287 | static int link_recv_changeover_msg(struct tipc_link **l_ptr, |
2375 | struct sk_buff **buf) | 2288 | struct sk_buff **buf) |
2376 | { | 2289 | { |
@@ -2405,7 +2318,6 @@ static int link_recv_changeover_msg(struct tipc_link **l_ptr, | |||
2405 | } | 2318 | } |
2406 | 2319 | ||
2407 | /* First original message ?: */ | 2320 | /* First original message ?: */ |
2408 | |||
2409 | if (tipc_link_is_up(dest_link)) { | 2321 | if (tipc_link_is_up(dest_link)) { |
2410 | info("Resetting link <%s>, changeover initiated by peer\n", | 2322 | info("Resetting link <%s>, changeover initiated by peer\n", |
2411 | dest_link->name); | 2323 | dest_link->name); |
@@ -2420,7 +2332,6 @@ static int link_recv_changeover_msg(struct tipc_link **l_ptr, | |||
2420 | } | 2332 | } |
2421 | 2333 | ||
2422 | /* Receive original message */ | 2334 | /* Receive original message */ |
2423 | |||
2424 | if (dest_link->exp_msg_count == 0) { | 2335 | if (dest_link->exp_msg_count == 0) { |
2425 | warn("Link switchover error, " | 2336 | warn("Link switchover error, " |
2426 | "got too many tunnelled messages\n"); | 2337 | "got too many tunnelled messages\n"); |
@@ -2469,7 +2380,6 @@ void tipc_link_recv_bundle(struct sk_buff *buf) | |||
2469 | * Fragmentation/defragmentation: | 2380 | * Fragmentation/defragmentation: |
2470 | */ | 2381 | */ |
2471 | 2382 | ||
2472 | |||
2473 | /* | 2383 | /* |
2474 | * link_send_long_buf: Entry for buffers needing fragmentation. | 2384 | * link_send_long_buf: Entry for buffers needing fragmentation. |
2475 | * The buffer is complete, inclusive total message length. | 2385 | * The buffer is complete, inclusive total message length. |
@@ -2496,12 +2406,10 @@ static int link_send_long_buf(struct tipc_link *l_ptr, struct sk_buff *buf) | |||
2496 | destaddr = msg_destnode(inmsg); | 2406 | destaddr = msg_destnode(inmsg); |
2497 | 2407 | ||
2498 | /* Prepare reusable fragment header: */ | 2408 | /* Prepare reusable fragment header: */ |
2499 | |||
2500 | tipc_msg_init(&fragm_hdr, MSG_FRAGMENTER, FIRST_FRAGMENT, | 2409 | tipc_msg_init(&fragm_hdr, MSG_FRAGMENTER, FIRST_FRAGMENT, |
2501 | INT_H_SIZE, destaddr); | 2410 | INT_H_SIZE, destaddr); |
2502 | 2411 | ||
2503 | /* Chop up message: */ | 2412 | /* Chop up message: */ |
2504 | |||
2505 | while (rest > 0) { | 2413 | while (rest > 0) { |
2506 | struct sk_buff *fragm; | 2414 | struct sk_buff *fragm; |
2507 | 2415 | ||
@@ -2535,7 +2443,6 @@ static int link_send_long_buf(struct tipc_link *l_ptr, struct sk_buff *buf) | |||
2535 | kfree_skb(buf); | 2443 | kfree_skb(buf); |
2536 | 2444 | ||
2537 | /* Append chain of fragments to send queue & send them */ | 2445 | /* Append chain of fragments to send queue & send them */ |
2538 | |||
2539 | l_ptr->long_msg_seq_no++; | 2446 | l_ptr->long_msg_seq_no++; |
2540 | link_add_chain_to_outqueue(l_ptr, buf_chain, l_ptr->long_msg_seq_no); | 2447 | link_add_chain_to_outqueue(l_ptr, buf_chain, l_ptr->long_msg_seq_no); |
2541 | l_ptr->stats.sent_fragments += fragm_no; | 2448 | l_ptr->stats.sent_fragments += fragm_no; |
@@ -2551,7 +2458,6 @@ static int link_send_long_buf(struct tipc_link *l_ptr, struct sk_buff *buf) | |||
2551 | * help storing these values in unused, available fields in the | 2458 | * help storing these values in unused, available fields in the |
2552 | * pending message. This makes dynamic memory allocation unnecessary. | 2459 | * pending message. This makes dynamic memory allocation unnecessary. |
2553 | */ | 2460 | */ |
2554 | |||
2555 | static void set_long_msg_seqno(struct sk_buff *buf, u32 seqno) | 2461 | static void set_long_msg_seqno(struct sk_buff *buf, u32 seqno) |
2556 | { | 2462 | { |
2557 | msg_set_seqno(buf_msg(buf), seqno); | 2463 | msg_set_seqno(buf_msg(buf), seqno); |
@@ -2603,7 +2509,6 @@ int tipc_link_recv_fragment(struct sk_buff **pending, struct sk_buff **fb, | |||
2603 | *fb = NULL; | 2509 | *fb = NULL; |
2604 | 2510 | ||
2605 | /* Is there an incomplete message waiting for this fragment? */ | 2511 | /* Is there an incomplete message waiting for this fragment? */ |
2606 | |||
2607 | while (pbuf && ((buf_seqno(pbuf) != long_msg_seq_no) || | 2512 | while (pbuf && ((buf_seqno(pbuf) != long_msg_seq_no) || |
2608 | (msg_orignode(fragm) != msg_orignode(buf_msg(pbuf))))) { | 2513 | (msg_orignode(fragm) != msg_orignode(buf_msg(pbuf))))) { |
2609 | prev = pbuf; | 2514 | prev = pbuf; |
@@ -2629,7 +2534,6 @@ int tipc_link_recv_fragment(struct sk_buff **pending, struct sk_buff **fb, | |||
2629 | skb_copy_to_linear_data(pbuf, imsg, | 2534 | skb_copy_to_linear_data(pbuf, imsg, |
2630 | msg_data_sz(fragm)); | 2535 | msg_data_sz(fragm)); |
2631 | /* Prepare buffer for subsequent fragments. */ | 2536 | /* Prepare buffer for subsequent fragments. */ |
2632 | |||
2633 | set_long_msg_seqno(pbuf, long_msg_seq_no); | 2537 | set_long_msg_seqno(pbuf, long_msg_seq_no); |
2634 | set_fragm_size(pbuf, fragm_sz); | 2538 | set_fragm_size(pbuf, fragm_sz); |
2635 | set_expected_frags(pbuf, exp_fragm_cnt - 1); | 2539 | set_expected_frags(pbuf, exp_fragm_cnt - 1); |
@@ -2650,7 +2554,6 @@ int tipc_link_recv_fragment(struct sk_buff **pending, struct sk_buff **fb, | |||
2650 | kfree_skb(fbuf); | 2554 | kfree_skb(fbuf); |
2651 | 2555 | ||
2652 | /* Is message complete? */ | 2556 | /* Is message complete? */ |
2653 | |||
2654 | if (exp_frags == 0) { | 2557 | if (exp_frags == 0) { |
2655 | if (prev) | 2558 | if (prev) |
2656 | prev->next = pbuf->next; | 2559 | prev->next = pbuf->next; |
@@ -2672,7 +2575,6 @@ int tipc_link_recv_fragment(struct sk_buff **pending, struct sk_buff **fb, | |||
2672 | * link_check_defragm_bufs - flush stale incoming message fragments | 2575 | * link_check_defragm_bufs - flush stale incoming message fragments |
2673 | * @l_ptr: pointer to link | 2576 | * @l_ptr: pointer to link |
2674 | */ | 2577 | */ |
2675 | |||
2676 | static void link_check_defragm_bufs(struct tipc_link *l_ptr) | 2578 | static void link_check_defragm_bufs(struct tipc_link *l_ptr) |
2677 | { | 2579 | { |
2678 | struct sk_buff *prev = NULL; | 2580 | struct sk_buff *prev = NULL; |
@@ -2701,8 +2603,6 @@ static void link_check_defragm_bufs(struct tipc_link *l_ptr) | |||
2701 | } | 2603 | } |
2702 | } | 2604 | } |
2703 | 2605 | ||
2704 | |||
2705 | |||
2706 | static void link_set_supervision_props(struct tipc_link *l_ptr, u32 tolerance) | 2606 | static void link_set_supervision_props(struct tipc_link *l_ptr, u32 tolerance) |
2707 | { | 2607 | { |
2708 | if ((tolerance < TIPC_MIN_LINK_TOL) || (tolerance > TIPC_MAX_LINK_TOL)) | 2608 | if ((tolerance < TIPC_MIN_LINK_TOL) || (tolerance > TIPC_MAX_LINK_TOL)) |
@@ -2714,7 +2614,6 @@ static void link_set_supervision_props(struct tipc_link *l_ptr, u32 tolerance) | |||
2714 | l_ptr->abort_limit = tolerance / (l_ptr->continuity_interval / 4); | 2614 | l_ptr->abort_limit = tolerance / (l_ptr->continuity_interval / 4); |
2715 | } | 2615 | } |
2716 | 2616 | ||
2717 | |||
2718 | void tipc_link_set_queue_limits(struct tipc_link *l_ptr, u32 window) | 2617 | void tipc_link_set_queue_limits(struct tipc_link *l_ptr, u32 window) |
2719 | { | 2618 | { |
2720 | /* Data messages from this node, inclusive FIRST_FRAGM */ | 2619 | /* Data messages from this node, inclusive FIRST_FRAGM */ |
@@ -2744,7 +2643,6 @@ void tipc_link_set_queue_limits(struct tipc_link *l_ptr, u32 window) | |||
2744 | * | 2643 | * |
2745 | * Returns pointer to link (or 0 if invalid link name). | 2644 | * Returns pointer to link (or 0 if invalid link name). |
2746 | */ | 2645 | */ |
2747 | |||
2748 | static struct tipc_link *link_find_link(const char *name, | 2646 | static struct tipc_link *link_find_link(const char *name, |
2749 | struct tipc_node **node) | 2647 | struct tipc_node **node) |
2750 | { | 2648 | { |
@@ -2778,7 +2676,6 @@ static struct tipc_link *link_find_link(const char *name, | |||
2778 | * | 2676 | * |
2779 | * Returns 1 if value is within range, 0 if not. | 2677 | * Returns 1 if value is within range, 0 if not. |
2780 | */ | 2678 | */ |
2781 | |||
2782 | static int link_value_is_valid(u16 cmd, u32 new_value) | 2679 | static int link_value_is_valid(u16 cmd, u32 new_value) |
2783 | { | 2680 | { |
2784 | switch (cmd) { | 2681 | switch (cmd) { |
@@ -2794,7 +2691,6 @@ static int link_value_is_valid(u16 cmd, u32 new_value) | |||
2794 | return 0; | 2691 | return 0; |
2795 | } | 2692 | } |
2796 | 2693 | ||
2797 | |||
2798 | /** | 2694 | /** |
2799 | * link_cmd_set_value - change priority/tolerance/window for link/bearer/media | 2695 | * link_cmd_set_value - change priority/tolerance/window for link/bearer/media |
2800 | * @name - ptr to link, bearer, or media name | 2696 | * @name - ptr to link, bearer, or media name |
@@ -2805,7 +2701,6 @@ static int link_value_is_valid(u16 cmd, u32 new_value) | |||
2805 | * | 2701 | * |
2806 | * Returns 0 if value updated and negative value on error. | 2702 | * Returns 0 if value updated and negative value on error. |
2807 | */ | 2703 | */ |
2808 | |||
2809 | static int link_cmd_set_value(const char *name, u32 new_value, u16 cmd) | 2704 | static int link_cmd_set_value(const char *name, u32 new_value, u16 cmd) |
2810 | { | 2705 | { |
2811 | struct tipc_node *node; | 2706 | struct tipc_node *node; |
@@ -2910,7 +2805,6 @@ struct sk_buff *tipc_link_cmd_config(const void *req_tlv_area, int req_tlv_space | |||
2910 | * link_reset_statistics - reset link statistics | 2805 | * link_reset_statistics - reset link statistics |
2911 | * @l_ptr: pointer to link | 2806 | * @l_ptr: pointer to link |
2912 | */ | 2807 | */ |
2913 | |||
2914 | static void link_reset_statistics(struct tipc_link *l_ptr) | 2808 | static void link_reset_statistics(struct tipc_link *l_ptr) |
2915 | { | 2809 | { |
2916 | memset(&l_ptr->stats, 0, sizeof(l_ptr->stats)); | 2810 | memset(&l_ptr->stats, 0, sizeof(l_ptr->stats)); |
@@ -2951,7 +2845,6 @@ struct sk_buff *tipc_link_cmd_reset_stats(const void *req_tlv_area, int req_tlv_ | |||
2951 | /** | 2845 | /** |
2952 | * percent - convert count to a percentage of total (rounding up or down) | 2846 | * percent - convert count to a percentage of total (rounding up or down) |
2953 | */ | 2847 | */ |
2954 | |||
2955 | static u32 percent(u32 count, u32 total) | 2848 | static u32 percent(u32 count, u32 total) |
2956 | { | 2849 | { |
2957 | return (count * 100 + (total / 2)) / total; | 2850 | return (count * 100 + (total / 2)) / total; |
@@ -2965,7 +2858,6 @@ static u32 percent(u32 count, u32 total) | |||
2965 | * | 2858 | * |
2966 | * Returns length of print buffer data string (or 0 if error) | 2859 | * Returns length of print buffer data string (or 0 if error) |
2967 | */ | 2860 | */ |
2968 | |||
2969 | static int tipc_link_stats(const char *name, char *buf, const u32 buf_size) | 2861 | static int tipc_link_stats(const char *name, char *buf, const u32 buf_size) |
2970 | { | 2862 | { |
2971 | struct print_buf pb; | 2863 | struct print_buf pb; |
@@ -3087,7 +2979,6 @@ struct sk_buff *tipc_link_cmd_show_stats(const void *req_tlv_area, int req_tlv_s | |||
3087 | * | 2979 | * |
3088 | * If no active link can be found, uses default maximum packet size. | 2980 | * If no active link can be found, uses default maximum packet size. |
3089 | */ | 2981 | */ |
3090 | |||
3091 | u32 tipc_link_get_max_pkt(u32 dest, u32 selector) | 2982 | u32 tipc_link_get_max_pkt(u32 dest, u32 selector) |
3092 | { | 2983 | { |
3093 | struct tipc_node *n_ptr; | 2984 | struct tipc_node *n_ptr; |
@@ -3171,4 +3062,3 @@ print_state: | |||
3171 | tipc_printbuf_validate(buf); | 3062 | tipc_printbuf_validate(buf); |
3172 | info("%s", print_area); | 3063 | info("%s", print_area); |
3173 | } | 3064 | } |
3174 | |||