From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail04.ics.ntt-tx.co.jp (mail05.ics.ntt-tx.co.jp [210.232.35.69]) by dpdk.org (Postfix) with ESMTP id 0A8191B00C for ; Thu, 28 Dec 2017 05:56:12 +0100 (CET) Received: from gwchk03.silk.ntt-tx.co.jp (gwchk03.silk.ntt-tx.co.jp [10.107.0.111]) by mail04.ics.ntt-tx.co.jp (unknown) with ESMTP id vBS4u8wC025151 for unknown; Thu, 28 Dec 2017 13:56:08 +0900 Received: (from root@localhost) by gwchk03.silk.ntt-tx.co.jp (unknown) id vBS4u7Zi027324 for unknown; Thu, 28 Dec 2017 13:56:07 +0900 Received: from gwchk.silk.ntt-tx.co.jp [10.107.0.110] by gwchk03.silk.ntt-tx.co.jp with ESMTP id PAA27314; Thu, 28 Dec 2017 13:56:06 +0900 Received: from imss03.silk.ntt-tx.co.jp (localhost [127.0.0.1]) by imss03.silk.ntt-tx.co.jp (unknown) with ESMTP id vBS4u6in011043 for unknown; Thu, 28 Dec 2017 13:56:06 +0900 Received: from mgate01.silk.ntt-tx.co.jp (smtp02.silk.ntt-tx.co.jp [10.107.0.37]) by imss03.silk.ntt-tx.co.jp (unknown) with ESMTP id vBS4u6om011027 for unknown; Thu, 28 Dec 2017 13:56:06 +0900 Message-Id: <201712280456.vBS4u6om011027@imss03.silk.ntt-tx.co.jp> Received: from localhost by mgate01.silk.ntt-tx.co.jp (unknown) id vBS4u4b1025622 ; Thu, 28 Dec 2017 13:56:06 +0900 From: x-fn-spp@sl.ntt-tx.co.jp To: spp@dpdk.org Date: Thu, 28 Dec 2017 13:55:34 +0900 X-Mailer: git-send-email 1.9.1 In-Reply-To: <4aae78ff-3b6c-cdfe-a8b7-24ec08b73935@lab.ntt.co.jp> References: <4aae78ff-3b6c-cdfe-a8b7-24ec08b73935@lab.ntt.co.jp> X-TM-AS-MML: No Subject: [spp] [PATCH 27/57] spp_vf: update socket creation procedure X-BeenThere: spp@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Soft Patch Panel List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 28 Dec 2017 04:56:14 -0000 From: Hiroyuki Nakamura Update socket socket creation procedure as follows: * Stop recreating socket spontaneously on failure so the caller can decide corresponding action. * Add socket closing procedure when error occurred. * Add comments. Signed-off-by: Daiki Yamashita Signed-off-by: Yasufum Ogawa --- src/vf/command_conn.c | 26 ++++++++++++++------------ src/vf/command_proc.c | 8 ++++---- src/vf/string_buffer.h | 48 ++++++++++++++++++++++++++++++++++++++++++++---- 3 files changed, 62 insertions(+), 20 deletions(-) diff --git a/src/vf/command_conn.c b/src/vf/command_conn.c index edd4d4c..4ac61a2 100644 --- a/src/vf/command_conn.c +++ b/src/vf/command_conn.c @@ -43,21 +43,19 @@ spp_connect_to_controller(int *sock) return 0; /* create socket */ + RTE_LOG(INFO, SPP_COMMAND_PROC, "Creating socket...\n"); + *sock = socket(AF_INET, SOCK_STREAM, 0); if (*sock < 0) { - RTE_LOG(INFO, SPP_COMMAND_PROC, "Creating socket...\n"); - *sock = socket(AF_INET, SOCK_STREAM, 0); - if (*sock < 0) { - RTE_LOG(ERR, SPP_COMMAND_PROC, - "Cannot create tcp socket. errno=%d\n", errno); - return -1; - } - - memset(&controller_addr, 0, sizeof(controller_addr)); - controller_addr.sin_family = AF_INET; - controller_addr.sin_addr.s_addr = inet_addr(g_controller_ip); - controller_addr.sin_port = htons(g_controller_port); + RTE_LOG(ERR, SPP_COMMAND_PROC, + "Cannot create tcp socket. errno=%d\n", errno); + return -1; } + memset(&controller_addr, 0, sizeof(controller_addr)); + controller_addr.sin_family = AF_INET; + controller_addr.sin_addr.s_addr = inet_addr(g_controller_ip); + controller_addr.sin_port = htons(g_controller_port); + /* connect to */ RTE_LOG(INFO, SPP_COMMAND_PROC, "Trying to connect ... socket=%d\n", *sock); ret = connect(*sock, (struct sockaddr *)&controller_addr, @@ -65,6 +63,8 @@ spp_connect_to_controller(int *sock) if (ret < 0) { RTE_LOG(ERR, SPP_COMMAND_PROC, "Cannot connect to controller. errno=%d\n", errno); + close(*sock); + *sock = -1; return -1; } @@ -129,6 +129,8 @@ spp_send_message(int *sock, const char* message, size_t message_len) ret = send(*sock, message, message_len, 0); if (unlikely(ret == -1)) { RTE_LOG(ERR, SPP_COMMAND_PROC, "Send failure. ret=%d\n", ret); + close(*sock); + *sock = -1; return -1; } diff --git a/src/vf/command_proc.c b/src/vf/command_proc.c index 097483c..10e209c 100644 --- a/src/vf/command_proc.c +++ b/src/vf/command_proc.c @@ -16,7 +16,7 @@ #define RTE_LOGTYPE_SPP_COMMAND_PROC RTE_LOGTYPE_USER1 /* request message initial size */ -#define MESSAGE_BUFFER_BLOCK_SIZE 2048 +#define CMD_REQ_BUF_INIT_SIZE 2048 /* command execution result code */ enum command_result_code { @@ -112,7 +112,7 @@ create_error_result_object(const char* err_msg) "message", err_msg); } -/* */ +/* append decode result array object to specified object */ static int append_response_decode_results_object(json_t *parent_obj, const struct spp_command_request *request, @@ -167,7 +167,7 @@ append_response_decode_results_object(json_t *parent_obj, return 0; } -/* */ +/* append command execution result array object to specified object */ static int append_response_command_results_object(json_t *parent_obj, const struct spp_command_request *request, @@ -391,7 +391,7 @@ spp_command_proc_do(void) static size_t lb_cnt = 0; if (unlikely(msgbuf == NULL)) - msgbuf = spp_strbuf_allocate(MESSAGE_BUFFER_BLOCK_SIZE); + msgbuf = spp_strbuf_allocate(CMD_REQ_BUF_INIT_SIZE); ret = spp_connect_to_controller(&sock); if (unlikely(ret != 0)) diff --git a/src/vf/string_buffer.h b/src/vf/string_buffer.h index adc52ef..9879b9d 100644 --- a/src/vf/string_buffer.h +++ b/src/vf/string_buffer.h @@ -1,16 +1,56 @@ #ifndef _STRING_BUFFER_H_ #define _STRING_BUFFER_H_ -/* allocate message buffer */ +/** + * allocate string buffer from heap memory. + * + * @attention allocated memory must free by spp_strbuf_free function. + * + * @param capacity + * initial buffer size (include null char). + * + * @retval not-NULL pointer to the allocated memory. + * @retval NULL error. + */ char* spp_strbuf_allocate(size_t capacity); -/* free message buffer */ +/** + * free string buffer. + * + * @param strbuf + * spp_strbuf_allocate/spp_strbuf_append return value. + */ void spp_strbuf_free(char* strbuf); -/* append message to buffer */ +/** + * append string to buffer. + * + * @param strbuf + * destination string buffer. + * spp_strbuf_allocate/spp_strbuf_append return value. + * + * @param append + * string to append. normal c-string. + * + * @param append_len + * length of append string. + * + * @return if the capacity is enough, the 1st parameter "strbuf", + * if it is insufficient, a new pointer to the allocated memory. + * in that case, old strbuf is freed in the function. + */ char* spp_strbuf_append(char *strbuf, const char *append, size_t append_len); -/* remove message from front */ +/** + * remove string from front. + * + * @param strbuf + * target string buffer. + * spp_strbuf_allocate/spp_strbuf_append return value. + * + * @param remove_len + * length of remove. + */ char* spp_strbuf_remove_front(char *strbuf, size_t remove_len); #endif /* _STRING_BUFFER_H_ */ -- 1.9.1