diff options
Diffstat (limited to 'net/tipc/config.c')
| -rw-r--r-- | net/tipc/config.c | 114 | 
1 files changed, 4 insertions, 110 deletions
| diff --git a/net/tipc/config.c b/net/tipc/config.c index c301a9a592d..4b981c05382 100644 --- a/net/tipc/config.c +++ b/net/tipc/config.c @@ -43,13 +43,11 @@  #define REPLY_TRUNCATED "<truncated>\n"  static DEFINE_MUTEX(config_mutex); -static struct tipc_server cfgsrv;  static const void *req_tlv_area;	/* request message TLV area */  static int req_tlv_space;		/* request message TLV area size */  static int rep_headroom;		/* reply message headroom to use */ -  struct sk_buff *tipc_cfg_reply_alloc(int payload_size)  {  	struct sk_buff *buf; @@ -181,19 +179,7 @@ static struct sk_buff *cfg_set_own_addr(void)  	if (tipc_own_addr)  		return tipc_cfg_reply_error_string(TIPC_CFG_NOT_SUPPORTED  						   " (cannot change node address once assigned)"); -	tipc_core_start_net(addr); -	return tipc_cfg_reply_none(); -} - -static struct sk_buff *cfg_set_remote_mng(void) -{ -	u32 value; - -	if (!TLV_CHECK(req_tlv_area, req_tlv_space, TIPC_TLV_UNSIGNED)) -		return tipc_cfg_reply_error_string(TIPC_CFG_TLV_ERROR); - -	value = ntohl(*(__be32 *)TLV_DATA(req_tlv_area)); -	tipc_remote_management = (value != 0); +	tipc_net_start(addr);  	return tipc_cfg_reply_none();  } @@ -247,21 +233,10 @@ struct sk_buff *tipc_cfg_do_cmd(u32 orig_node, u16 cmd, const void *request_area  	/* Check command authorization */  	if (likely(in_own_node(orig_node))) {  		/* command is permitted */ -	} else if (cmd >= 0x8000) { +	} else {  		rep_tlv_buf = tipc_cfg_reply_error_string(TIPC_CFG_NOT_SUPPORTED  							  " (cannot be done remotely)");  		goto exit; -	} else if (!tipc_remote_management) { -		rep_tlv_buf = tipc_cfg_reply_error_string(TIPC_CFG_NO_REMOTE); -		goto exit; -	} else if (cmd >= 0x4000) { -		u32 domain = 0; - -		if ((tipc_nametbl_translate(TIPC_ZM_SRV, 0, &domain) == 0) || -		    (domain != orig_node)) { -			rep_tlv_buf = tipc_cfg_reply_error_string(TIPC_CFG_NOT_ZONE_MSTR); -			goto exit; -		}  	}  	/* Call appropriate processing routine */ @@ -310,18 +285,12 @@ struct sk_buff *tipc_cfg_do_cmd(u32 orig_node, u16 cmd, const void *request_area  	case TIPC_CMD_SET_NODE_ADDR:  		rep_tlv_buf = cfg_set_own_addr();  		break; -	case TIPC_CMD_SET_REMOTE_MNG: -		rep_tlv_buf = cfg_set_remote_mng(); -		break;  	case TIPC_CMD_SET_MAX_PORTS:  		rep_tlv_buf = cfg_set_max_ports();  		break;  	case TIPC_CMD_SET_NETID:  		rep_tlv_buf = cfg_set_netid();  		break; -	case TIPC_CMD_GET_REMOTE_MNG: -		rep_tlv_buf = tipc_cfg_reply_unsigned(tipc_remote_management); -		break;  	case TIPC_CMD_GET_MAX_PORTS:  		rep_tlv_buf = tipc_cfg_reply_unsigned(tipc_max_ports);  		break; @@ -345,6 +314,8 @@ struct sk_buff *tipc_cfg_do_cmd(u32 orig_node, u16 cmd, const void *request_area  	case TIPC_CMD_SET_MAX_PUBL:  	case TIPC_CMD_GET_MAX_PUBL:  	case TIPC_CMD_SET_LOG_SIZE: +	case TIPC_CMD_SET_REMOTE_MNG: +	case TIPC_CMD_GET_REMOTE_MNG:  	case TIPC_CMD_DUMP_LOG:  		rep_tlv_buf = tipc_cfg_reply_error_string(TIPC_CFG_NOT_SUPPORTED  							  " (obsolete command)"); @@ -369,80 +340,3 @@ exit:  	mutex_unlock(&config_mutex);  	return rep_tlv_buf;  } - -static void cfg_conn_msg_event(int conid, struct sockaddr_tipc *addr, -			       void *usr_data, void *buf, size_t len) -{ -	struct tipc_cfg_msg_hdr *req_hdr; -	struct tipc_cfg_msg_hdr *rep_hdr; -	struct sk_buff *rep_buf; -	int ret; - -	/* Validate configuration message header (ignore invalid message) */ -	req_hdr = (struct tipc_cfg_msg_hdr *)buf; -	if ((len < sizeof(*req_hdr)) || -	    (len != TCM_ALIGN(ntohl(req_hdr->tcm_len))) || -	    (ntohs(req_hdr->tcm_flags) != TCM_F_REQUEST)) { -		pr_warn("Invalid configuration message discarded\n"); -		return; -	} - -	/* Generate reply for request (if can't, return request) */ -	rep_buf = tipc_cfg_do_cmd(addr->addr.id.node, ntohs(req_hdr->tcm_type), -				  buf + sizeof(*req_hdr), -				  len - sizeof(*req_hdr), -				  BUF_HEADROOM + MAX_H_SIZE + sizeof(*rep_hdr)); -	if (rep_buf) { -		skb_push(rep_buf, sizeof(*rep_hdr)); -		rep_hdr = (struct tipc_cfg_msg_hdr *)rep_buf->data; -		memcpy(rep_hdr, req_hdr, sizeof(*rep_hdr)); -		rep_hdr->tcm_len = htonl(rep_buf->len); -		rep_hdr->tcm_flags &= htons(~TCM_F_REQUEST); - -		ret = tipc_conn_sendmsg(&cfgsrv, conid, addr, rep_buf->data, -					rep_buf->len); -		if (ret < 0) -			pr_err("Sending cfg reply message failed, no memory\n"); - -		kfree_skb(rep_buf); -	} -} - -static struct sockaddr_tipc cfgsrv_addr __read_mostly = { -	.family			= AF_TIPC, -	.addrtype		= TIPC_ADDR_NAMESEQ, -	.addr.nameseq.type	= TIPC_CFG_SRV, -	.addr.nameseq.lower	= 0, -	.addr.nameseq.upper	= 0, -	.scope			= TIPC_ZONE_SCOPE -}; - -static struct tipc_server cfgsrv __read_mostly = { -	.saddr			= &cfgsrv_addr, -	.imp			= TIPC_CRITICAL_IMPORTANCE, -	.type			= SOCK_RDM, -	.max_rcvbuf_size	= 64 * 1024, -	.name			= "cfg_server", -	.tipc_conn_recvmsg	= cfg_conn_msg_event, -	.tipc_conn_new		= NULL, -	.tipc_conn_shutdown	= NULL -}; - -int tipc_cfg_init(void) -{ -	return tipc_server_start(&cfgsrv); -} - -void tipc_cfg_reinit(void) -{ -	tipc_server_stop(&cfgsrv); - -	cfgsrv_addr.addr.nameseq.lower = tipc_own_addr; -	cfgsrv_addr.addr.nameseq.upper = tipc_own_addr; -	tipc_server_start(&cfgsrv); -} - -void tipc_cfg_stop(void) -{ -	tipc_server_stop(&cfgsrv); -} | 
