diff options
Diffstat (limited to 'net/tipc/config.c')
-rw-r--r-- | net/tipc/config.c | 68 |
1 files changed, 53 insertions, 15 deletions
diff --git a/net/tipc/config.c b/net/tipc/config.c index ca3544d030c7..961d1b097146 100644 --- a/net/tipc/config.c +++ b/net/tipc/config.c | |||
@@ -56,9 +56,6 @@ struct subscr_data { | |||
56 | struct manager { | 56 | struct manager { |
57 | u32 user_ref; | 57 | u32 user_ref; |
58 | u32 port_ref; | 58 | u32 port_ref; |
59 | u32 subscr_ref; | ||
60 | u32 link_subscriptions; | ||
61 | struct list_head link_subscribers; | ||
62 | }; | 59 | }; |
63 | 60 | ||
64 | static struct manager mng = { 0}; | 61 | static struct manager mng = { 0}; |
@@ -70,12 +67,6 @@ static int req_tlv_space; /* request message TLV area size */ | |||
70 | static int rep_headroom; /* reply message headroom to use */ | 67 | static int rep_headroom; /* reply message headroom to use */ |
71 | 68 | ||
72 | 69 | ||
73 | void tipc_cfg_link_event(u32 addr, char *name, int up) | ||
74 | { | ||
75 | /* TIPC DOESN'T HANDLE LINK EVENT SUBSCRIPTIONS AT THE MOMENT */ | ||
76 | } | ||
77 | |||
78 | |||
79 | struct sk_buff *tipc_cfg_reply_alloc(int payload_size) | 70 | struct sk_buff *tipc_cfg_reply_alloc(int payload_size) |
80 | { | 71 | { |
81 | struct sk_buff *buf; | 72 | struct sk_buff *buf; |
@@ -130,12 +121,24 @@ struct sk_buff *tipc_cfg_reply_string_type(u16 tlv_type, char *string) | |||
130 | } | 121 | } |
131 | 122 | ||
132 | 123 | ||
133 | |||
134 | |||
135 | #if 0 | 124 | #if 0 |
136 | 125 | ||
137 | /* Now obsolete code for handling commands not yet implemented the new way */ | 126 | /* Now obsolete code for handling commands not yet implemented the new way */ |
138 | 127 | ||
128 | /* | ||
129 | * Some of this code assumed that the manager structure contains two added | ||
130 | * fields: | ||
131 | * u32 link_subscriptions; | ||
132 | * struct list_head link_subscribers; | ||
133 | * which are currently not present. These fields may need to be re-introduced | ||
134 | * if and when support for link subscriptions is added. | ||
135 | */ | ||
136 | |||
137 | void tipc_cfg_link_event(u32 addr, char *name, int up) | ||
138 | { | ||
139 | /* TIPC DOESN'T HANDLE LINK EVENT SUBSCRIPTIONS AT THE MOMENT */ | ||
140 | } | ||
141 | |||
139 | int tipc_cfg_cmd(const struct tipc_cmd_msg * msg, | 142 | int tipc_cfg_cmd(const struct tipc_cmd_msg * msg, |
140 | char *data, | 143 | char *data, |
141 | u32 sz, | 144 | u32 sz, |
@@ -243,13 +246,48 @@ static void cfg_cmd_event(struct tipc_cmd_msg *msg, | |||
243 | default: | 246 | default: |
244 | rv = tipc_cfg_cmd(msg, data, sz, (u32 *)&msg_sect[1].iov_len, orig); | 247 | rv = tipc_cfg_cmd(msg, data, sz, (u32 *)&msg_sect[1].iov_len, orig); |
245 | } | 248 | } |
246 | exit: | 249 | exit: |
247 | rmsg.result_len = htonl(msg_sect[1].iov_len); | 250 | rmsg.result_len = htonl(msg_sect[1].iov_len); |
248 | rmsg.retval = htonl(rv); | 251 | rmsg.retval = htonl(rv); |
249 | tipc_cfg_respond(msg_sect, 2u, orig); | 252 | tipc_cfg_respond(msg_sect, 2u, orig); |
250 | } | 253 | } |
251 | #endif | 254 | #endif |
252 | 255 | ||
256 | #define MAX_STATS_INFO 2000 | ||
257 | |||
258 | static struct sk_buff *tipc_show_stats(void) | ||
259 | { | ||
260 | struct sk_buff *buf; | ||
261 | struct tlv_desc *rep_tlv; | ||
262 | struct print_buf pb; | ||
263 | int str_len; | ||
264 | u32 value; | ||
265 | |||
266 | if (!TLV_CHECK(req_tlv_area, req_tlv_space, TIPC_TLV_UNSIGNED)) | ||
267 | return tipc_cfg_reply_error_string(TIPC_CFG_TLV_ERROR); | ||
268 | |||
269 | value = ntohl(*(u32 *)TLV_DATA(req_tlv_area)); | ||
270 | if (value != 0) | ||
271 | return tipc_cfg_reply_error_string("unsupported argument"); | ||
272 | |||
273 | buf = tipc_cfg_reply_alloc(TLV_SPACE(MAX_STATS_INFO)); | ||
274 | if (buf == NULL) | ||
275 | return NULL; | ||
276 | |||
277 | rep_tlv = (struct tlv_desc *)buf->data; | ||
278 | tipc_printbuf_init(&pb, (char *)TLV_DATA(rep_tlv), MAX_STATS_INFO); | ||
279 | |||
280 | tipc_printf(&pb, "TIPC version " TIPC_MOD_VER "\n"); | ||
281 | |||
282 | /* Use additional tipc_printf()'s to return more info ... */ | ||
283 | |||
284 | str_len = tipc_printbuf_validate(&pb); | ||
285 | skb_put(buf, TLV_SPACE(str_len)); | ||
286 | TLV_SET(rep_tlv, TIPC_TLV_ULTRA_STRING, NULL, str_len); | ||
287 | |||
288 | return buf; | ||
289 | } | ||
290 | |||
253 | static struct sk_buff *cfg_enable_bearer(void) | 291 | static struct sk_buff *cfg_enable_bearer(void) |
254 | { | 292 | { |
255 | struct tipc_bearer_config *args; | 293 | struct tipc_bearer_config *args; |
@@ -533,6 +571,9 @@ struct sk_buff *tipc_cfg_do_cmd(u32 orig_node, u16 cmd, const void *request_area | |||
533 | case TIPC_CMD_DUMP_LOG: | 571 | case TIPC_CMD_DUMP_LOG: |
534 | rep_tlv_buf = tipc_log_dump(); | 572 | rep_tlv_buf = tipc_log_dump(); |
535 | break; | 573 | break; |
574 | case TIPC_CMD_SHOW_STATS: | ||
575 | rep_tlv_buf = tipc_show_stats(); | ||
576 | break; | ||
536 | case TIPC_CMD_SET_LINK_TOL: | 577 | case TIPC_CMD_SET_LINK_TOL: |
537 | case TIPC_CMD_SET_LINK_PRI: | 578 | case TIPC_CMD_SET_LINK_PRI: |
538 | case TIPC_CMD_SET_LINK_WINDOW: | 579 | case TIPC_CMD_SET_LINK_WINDOW: |
@@ -667,9 +708,6 @@ int tipc_cfg_init(void) | |||
667 | struct tipc_name_seq seq; | 708 | struct tipc_name_seq seq; |
668 | int res; | 709 | int res; |
669 | 710 | ||
670 | memset(&mng, 0, sizeof(mng)); | ||
671 | INIT_LIST_HEAD(&mng.link_subscribers); | ||
672 | |||
673 | res = tipc_attach(&mng.user_ref, NULL, NULL); | 711 | res = tipc_attach(&mng.user_ref, NULL, NULL); |
674 | if (res) | 712 | if (res) |
675 | goto failed; | 713 | goto failed; |