X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fmemif%2Fmemif_socket.c;h=4efa68e1a6c1f242af3297bd80821399979f6070;hb=955d7c1f03d049b2018db3d2c4a78920368d7aa3;hp=01a935f87c9fd7ba5d872cfe5d4d6fe263057d94;hpb=c41a04958b09535ffc97e993233aec874cc42b1d;p=dpdk.git diff --git a/drivers/net/memif/memif_socket.c b/drivers/net/memif/memif_socket.c index 01a935f87c..4efa68e1a6 100644 --- a/drivers/net/memif/memif_socket.c +++ b/drivers/net/memif/memif_socket.c @@ -7,7 +7,6 @@ #include #include #include -#include #include #include @@ -852,7 +851,7 @@ memif_listener_handler(void *arg) return; error: - if (sockfd > 0) { + if (sockfd >= 0) { close(sockfd); sockfd = -1; } @@ -861,7 +860,8 @@ memif_listener_handler(void *arg) } static struct memif_socket * -memif_socket_create(struct pmd_internals *pmd, char *key, uint8_t listener) +memif_socket_create(struct pmd_internals *pmd, + const char *key, uint8_t listener) { struct memif_socket *sock; struct sockaddr_un un; @@ -876,7 +876,7 @@ memif_socket_create(struct pmd_internals *pmd, char *key, uint8_t listener) } sock->listener = listener; - rte_memcpy(sock->filename, key, 256); + strlcpy(sock->filename, key, MEMIF_SOCKET_UN_SIZE); TAILQ_INIT(&sock->dev_queue); if (listener != 0) { @@ -885,16 +885,17 @@ memif_socket_create(struct pmd_internals *pmd, char *key, uint8_t listener) goto error; un.sun_family = AF_UNIX; - memcpy(un.sun_path, sock->filename, - sizeof(un.sun_path) - 1); + strlcpy(un.sun_path, sock->filename, MEMIF_SOCKET_UN_SIZE); ret = setsockopt(sockfd, SOL_SOCKET, SO_PASSCRED, &on, sizeof(on)); if (ret < 0) goto error; + ret = bind(sockfd, (struct sockaddr *)&un, sizeof(un)); if (ret < 0) goto error; + ret = listen(sockfd, 1); if (ret < 0) goto error; @@ -918,9 +919,12 @@ memif_socket_create(struct pmd_internals *pmd, char *key, uint8_t listener) error: MIF_LOG(ERR, "%s: Failed to setup socket %s: %s", - rte_vdev_device_name(pmd->vdev), key, strerror(errno)); + rte_vdev_device_name(pmd->vdev) ? + rte_vdev_device_name(pmd->vdev) : "NULL", key, strerror(errno)); if (sock != NULL) rte_free(sock); + if (sockfd >= 0) + close(sockfd); return NULL; } @@ -928,9 +932,10 @@ static struct rte_hash * memif_create_socket_hash(void) { struct rte_hash_parameters params = { 0 }; + params.name = MEMIF_SOCKET_HASH_NAME; params.entries = 256; - params.key_len = 256; + params.key_len = MEMIF_SOCKET_UN_SIZE; params.hash_func = rte_jhash; params.hash_func_init_val = 0; return rte_hash_create(¶ms); @@ -945,7 +950,7 @@ memif_socket_init(struct rte_eth_dev *dev, const char *socket_filename) struct pmd_internals *tmp_pmd; struct rte_hash *hash; int ret; - char key[256]; + char key[MEMIF_SOCKET_UN_SIZE]; hash = rte_hash_find_existing(MEMIF_SOCKET_HASH_NAME); if (hash == NULL) { @@ -956,8 +961,8 @@ memif_socket_init(struct rte_eth_dev *dev, const char *socket_filename) } } - memset(key, 0, 256); - rte_memcpy(key, socket_filename, strlen(socket_filename)); + memset(key, 0, MEMIF_SOCKET_UN_SIZE); + strlcpy(key, socket_filename, MEMIF_SOCKET_UN_SIZE); ret = rte_hash_lookup_data(hash, key, (void **)&socket); if (ret < 0) { socket = memif_socket_create(pmd, key, @@ -1010,6 +1015,7 @@ memif_socket_remove_device(struct rte_eth_dev *dev) struct memif_socket *socket = NULL; struct memif_socket_dev_list_elt *elt, *next; struct rte_hash *hash; + int ret; hash = rte_hash_find_existing(MEMIF_SOCKET_HASH_NAME); if (hash == NULL) @@ -1037,7 +1043,10 @@ memif_socket_remove_device(struct rte_eth_dev *dev) /* remove listener socket file, * so we can create new one later. */ - remove(socket->filename); + ret = remove(socket->filename); + if (ret < 0) + MIF_LOG(ERR, "Failed to remove socket file: %s", + socket->filename); } rte_free(socket); } @@ -1113,7 +1122,7 @@ memif_connect_slave(struct rte_eth_dev *dev) return 0; error: - if (sockfd > 0) { + if (sockfd >= 0) { close(sockfd); sockfd = -1; }