X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fmemif%2Fmemif_socket.c;h=f58ff4c0cb7729b4a516c9696e47e6a3e7c3c8d6;hb=1c9e61b3a45321b3cae742e8769b10c06c0324f0;hp=7a26e300664bd19b60d3007a57f79045aab2c0d9;hpb=2f865ed07bb696bb7724c2a52674019391e9077e;p=dpdk.git diff --git a/drivers/net/memif/memif_socket.c b/drivers/net/memif/memif_socket.c index 7a26e30066..f58ff4c0cb 100644 --- a/drivers/net/memif/memif_socket.c +++ b/drivers/net/memif/memif_socket.c @@ -13,8 +13,8 @@ #include #include #include -#include -#include +#include +#include #include #include #include @@ -143,8 +143,8 @@ memif_msg_enq_hello(struct memif_control_channel *cc) e->msg.type = MEMIF_MSG_TYPE_HELLO; h->min_version = MEMIF_VERSION; h->max_version = MEMIF_VERSION; - h->max_s2m_ring = ETH_MEMIF_MAX_NUM_Q_PAIRS; - h->max_m2s_ring = ETH_MEMIF_MAX_NUM_Q_PAIRS; + h->max_c2s_ring = ETH_MEMIF_MAX_NUM_Q_PAIRS; + h->max_s2c_ring = ETH_MEMIF_MAX_NUM_Q_PAIRS; h->max_region = ETH_MEMIF_MAX_REGION_NUM - 1; h->max_log2_ring_size = ETH_MEMIF_MAX_LOG2_RING_SIZE; @@ -165,10 +165,10 @@ memif_msg_receive_hello(struct rte_eth_dev *dev, memif_msg_t *msg) } /* Set parameters for active connection */ - pmd->run.num_s2m_rings = RTE_MIN(h->max_s2m_ring + 1, - pmd->cfg.num_s2m_rings); - pmd->run.num_m2s_rings = RTE_MIN(h->max_m2s_ring + 1, - pmd->cfg.num_m2s_rings); + pmd->run.num_c2s_rings = RTE_MIN(h->max_c2s_ring + 1, + pmd->cfg.num_c2s_rings); + pmd->run.num_s2c_rings = RTE_MIN(h->max_s2c_ring + 1, + pmd->cfg.num_s2c_rings); pmd->run.log2_ring_size = RTE_MIN(h->max_log2_ring_size, pmd->cfg.log2_ring_size); pmd->run.pkt_buffer_size = pmd->cfg.pkt_buffer_size; @@ -203,7 +203,7 @@ memif_msg_receive_init(struct memif_control_channel *cc, memif_msg_t *msg) dev = elt->dev; pmd = dev->data->dev_private; if (((pmd->flags & ETH_MEMIF_FLAG_DISABLED) == 0) && - (pmd->id == i->id) && (pmd->role == MEMIF_ROLE_MASTER)) { + (pmd->id == i->id) && (pmd->role == MEMIF_ROLE_SERVER)) { if (pmd->flags & (ETH_MEMIF_FLAG_CONNECTING | ETH_MEMIF_FLAG_CONNECTED)) { memif_msg_enq_disconnect(cc, @@ -300,21 +300,21 @@ memif_msg_receive_add_ring(struct rte_eth_dev *dev, memif_msg_t *msg, int fd) } /* check if we have enough queues */ - if (ar->flags & MEMIF_MSG_ADD_RING_FLAG_S2M) { - if (ar->index >= pmd->cfg.num_s2m_rings) { + if (ar->flags & MEMIF_MSG_ADD_RING_FLAG_C2S) { + if (ar->index >= pmd->cfg.num_c2s_rings) { memif_msg_enq_disconnect(pmd->cc, "Invalid ring index", 0); return -1; } - pmd->run.num_s2m_rings++; + pmd->run.num_c2s_rings++; } else { - if (ar->index >= pmd->cfg.num_m2s_rings) { + if (ar->index >= pmd->cfg.num_s2c_rings) { memif_msg_enq_disconnect(pmd->cc, "Invalid ring index", 0); return -1; } - pmd->run.num_m2s_rings++; + pmd->run.num_s2c_rings++; } - mq = (ar->flags & MEMIF_MSG_ADD_RING_FLAG_S2M) ? + mq = (ar->flags & MEMIF_MSG_ADD_RING_FLAG_C2S) ? dev->data->rx_queues[ar->index] : dev->data->tx_queues[ar->index]; mq->intr_handle.fd = fd; @@ -449,7 +449,7 @@ memif_msg_enq_add_ring(struct rte_eth_dev *dev, uint8_t idx, return -1; ar = &e->msg.add_ring; - mq = (type == MEMIF_RING_S2M) ? dev->data->tx_queues[idx] : + mq = (type == MEMIF_RING_C2S) ? dev->data->tx_queues[idx] : dev->data->rx_queues[idx]; e->msg.type = MEMIF_MSG_TYPE_ADD_RING; @@ -458,7 +458,7 @@ memif_msg_enq_add_ring(struct rte_eth_dev *dev, uint8_t idx, ar->offset = mq->ring_offset; ar->region = mq->region; ar->log2_ring_size = mq->log2_ring_size; - ar->flags = (type == MEMIF_RING_S2M) ? MEMIF_MSG_ADD_RING_FLAG_S2M : 0; + ar->flags = (type == MEMIF_RING_C2S) ? MEMIF_MSG_ADD_RING_FLAG_C2S : 0; ar->private_hdr_size = 0; return 0; @@ -575,8 +575,8 @@ memif_disconnect(struct rte_eth_dev *dev) rte_spinlock_unlock(&pmd->cc_lock); /* unconfig interrupts */ - for (i = 0; i < pmd->cfg.num_s2m_rings; i++) { - if (pmd->role == MEMIF_ROLE_SLAVE) { + for (i = 0; i < pmd->cfg.num_c2s_rings; i++) { + if (pmd->role == MEMIF_ROLE_CLIENT) { if (dev->data->tx_queues != NULL) mq = dev->data->tx_queues[i]; else @@ -592,8 +592,8 @@ memif_disconnect(struct rte_eth_dev *dev) mq->intr_handle.fd = -1; } } - for (i = 0; i < pmd->cfg.num_m2s_rings; i++) { - if (pmd->role == MEMIF_ROLE_MASTER) { + for (i = 0; i < pmd->cfg.num_s2c_rings; i++) { + if (pmd->role == MEMIF_ROLE_SERVER) { if (dev->data->tx_queues != NULL) mq = dev->data->tx_queues[i]; else @@ -616,7 +616,7 @@ memif_disconnect(struct rte_eth_dev *dev) memset(&pmd->run, 0, sizeof(pmd->run)); MIF_LOG(DEBUG, "Disconnected, id: %d, role: %s.", pmd->id, - (pmd->role == MEMIF_ROLE_MASTER) ? "master" : "slave"); + (pmd->role == MEMIF_ROLE_SERVER) ? "server" : "client"); } static int @@ -694,15 +694,15 @@ memif_msg_receive(struct memif_control_channel *cc) if (ret < 0) goto exit; } - for (i = 0; i < pmd->run.num_s2m_rings; i++) { + for (i = 0; i < pmd->run.num_c2s_rings; i++) { ret = memif_msg_enq_add_ring(cc->dev, i, - MEMIF_RING_S2M); + MEMIF_RING_C2S); if (ret < 0) goto exit; } - for (i = 0; i < pmd->run.num_m2s_rings; i++) { + for (i = 0; i < pmd->run.num_s2c_rings; i++) { ret = memif_msg_enq_add_ring(cc->dev, i, - MEMIF_RING_M2S); + MEMIF_RING_S2C); if (ret < 0) goto exit; } @@ -866,6 +866,7 @@ memif_socket_create(char *key, uint8_t listener, bool is_abstract) { struct memif_socket *sock; struct sockaddr_un un = { 0 }; + uint32_t sunlen; int sockfd; int ret; int on = 1; @@ -890,7 +891,11 @@ memif_socket_create(char *key, uint8_t listener, bool is_abstract) /* abstract address */ un.sun_path[0] = '\0'; strlcpy(un.sun_path + 1, sock->filename, MEMIF_SOCKET_UN_SIZE - 1); + sunlen = RTE_MIN(1 + strlen(sock->filename), + MEMIF_SOCKET_UN_SIZE) + + sizeof(un) - sizeof(un.sun_path); } else { + sunlen = sizeof(un); strlcpy(un.sun_path, sock->filename, MEMIF_SOCKET_UN_SIZE); } @@ -899,7 +904,7 @@ memif_socket_create(char *key, uint8_t listener, bool is_abstract) if (ret < 0) goto error; - ret = bind(sockfd, (struct sockaddr *)&un, sizeof(un)); + ret = bind(sockfd, (struct sockaddr *)&un, sunlen); if (ret < 0) goto error; @@ -969,7 +974,7 @@ memif_socket_init(struct rte_eth_dev *dev, const char *socket_filename) ret = rte_hash_lookup_data(hash, key, (void **)&socket); if (ret < 0) { socket = memif_socket_create(key, - (pmd->role == MEMIF_ROLE_SLAVE) ? 0 : 1, + (pmd->role == MEMIF_ROLE_CLIENT) ? 0 : 1, pmd->flags & ETH_MEMIF_FLAG_SOCKET_ABSTRACT); if (socket == NULL) return -1; @@ -1046,7 +1051,7 @@ memif_socket_remove_device(struct rte_eth_dev *dev) } int -memif_connect_master(struct rte_eth_dev *dev) +memif_connect_server(struct rte_eth_dev *dev) { struct pmd_internals *pmd = dev->data->dev_private; @@ -1057,10 +1062,11 @@ memif_connect_master(struct rte_eth_dev *dev) } int -memif_connect_slave(struct rte_eth_dev *dev) +memif_connect_client(struct rte_eth_dev *dev) { int sockfd; int ret; + uint32_t sunlen; struct sockaddr_un sun = { 0 }; struct pmd_internals *pmd = dev->data->dev_private; @@ -1075,16 +1081,19 @@ memif_connect_slave(struct rte_eth_dev *dev) } sun.sun_family = AF_UNIX; + sunlen = sizeof(struct sockaddr_un); if (pmd->flags & ETH_MEMIF_FLAG_SOCKET_ABSTRACT) { /* abstract address */ sun.sun_path[0] = '\0'; strlcpy(sun.sun_path + 1, pmd->socket_filename, MEMIF_SOCKET_UN_SIZE - 1); + sunlen = RTE_MIN(strlen(pmd->socket_filename) + 1, + MEMIF_SOCKET_UN_SIZE) + + sizeof(sun) - sizeof(sun.sun_path); } else { strlcpy(sun.sun_path, pmd->socket_filename, MEMIF_SOCKET_UN_SIZE); } - ret = connect(sockfd, (struct sockaddr *)&sun, - sizeof(struct sockaddr_un)); + ret = connect(sockfd, (struct sockaddr *)&sun, sunlen); if (ret < 0) { MIF_LOG(ERR, "Failed to connect socket: %s.", pmd->socket_filename); goto error;