@@ -27,15 +27,15 @@
/** Packet socket using netmap mmaped rings for both Rx and Tx */
typedef struct {
odp_buffer_pool_t pool;
- size_t max_frame_len; /**< max frame len = buf_size - sizeof(pkt_hdr) */
- size_t frame_offset; /**< frame start offset from start of pkt buf */
- size_t buf_size; /**< size of buffer payload in 'pool' */
- struct nm_desc *nm_desc;
+ size_t max_frame_len; /* buf_size - sizeof(pkt_hdr) */
+ size_t frame_offset; /* offset from start of pkt buf */
+ size_t buf_size; /* size of buffer payload in 'pool' */
+ struct nm_desc *desc; /* netmap meta-data for the device */
uint32_t begin;
uint32_t end;
struct netmap_ring *rxring;
struct netmap_ring *txring;
- odp_queue_t tx_access; /* Used for exclusive access to send packets */
+ odp_queue_t tx_access; /* exclusive access to send packets */
uint32_t if_flags;
char ifname[32];
} pkt_netmap_t;
@@ -91,7 +91,9 @@ static int nm_do_ioctl(pkt_netmap_t * const pkt_nm, unsigned long cmd,
case SIOCGIFFLAGS:
pkt_nm->if_flags = (ifr.ifr_flags << 16) |
(0xffff & ifr.ifr_flags);
- ODP_DBG("flags are 0x%x\n", pkt_nm->if_flags);
+ ODP_DBG("[%04d] flags are 0x%x\n",
+ odp_thread_id(),
+ pkt_nm->if_flags);
break;
default:
break;
@@ -107,7 +109,7 @@ done:
int setup_pkt_netmap(pkt_netmap_t * const pkt_nm, const char *netdev,
odp_buffer_pool_t pool)
{
- char ifname[32];
+ char ifname[IFNAMSIZ];
odp_packet_t pkt;
uint8_t *pkt_buf;
uint8_t *l2_hdr;
@@ -134,27 +136,29 @@ int setup_pkt_netmap(pkt_netmap_t * const pkt_nm, const char *netdev,
strncpy(pkt_nm->ifname, netdev, sizeof(pkt_nm->ifname));
snprintf(ifname, sizeof(ifname), "netmap:%s", netdev);
- pkt_nm->nm_desc = nm_open(ifname, NULL, 0, 0);
+ pkt_nm->desc = nm_open(ifname, NULL, 0, 0);
- if (pkt_nm->nm_desc == NULL) {
+ if (pkt_nm->desc == NULL) {
ODP_ERR("Error opening nm interface: %s\n", strerror(errno));
return -1;
}
- ODP_DBG("thread %d mmap addr %p\n",
+ ODP_DBG("[%04d] mmap addr %p\n",
odp_thread_id(),
- pkt_nm->nm_desc->mem);
+ pkt_nm->desc->mem);
pkt_nm->begin = 0;
- pkt_nm->end = pkt_nm->nm_desc->req.nr_rx_rings;
- pkt_nm->rxring = NETMAP_RXRING(pkt_nm->nm_desc->nifp, 0);
- pkt_nm->txring = NETMAP_TXRING(pkt_nm->nm_desc->nifp, 0);
+ pkt_nm->end = pkt_nm->desc->req.nr_rx_rings;
+ pkt_nm->rxring = NETMAP_RXRING(pkt_nm->desc->nifp, 0);
+ pkt_nm->txring = NETMAP_TXRING(pkt_nm->desc->nifp, 0);
ret = nm_do_ioctl(pkt_nm, SIOCGIFFLAGS, 0);
if (ret)
return ret;
if ((pkt_nm->if_flags & IFF_UP) == 0) {
- ODP_DBG("%s is down, bringing up...\n", pkt_nm->ifname);
+ ODP_DBG("[%04d] %s is down, bringing up...\n",
+ odp_thread_id(),
+ pkt_nm->ifname);
pkt_nm->if_flags |= IFF_UP;
}
if (ETH_PROMISC) {
@@ -163,11 +167,13 @@ int setup_pkt_netmap(pkt_netmap_t * const pkt_nm, const char *netdev,
}
ret = nm_do_ioctl(pkt_nm, SIOCETHTOOL, ETHTOOL_SGSO);
if (ret)
- ODP_DBG("ETHTOOL_SGSO not supported\n");
+ ODP_DBG("[%04d] ETHTOOL_SGSO not supported\n",
+ odp_thread_id());
ret = nm_do_ioctl(pkt_nm, SIOCETHTOOL, ETHTOOL_STSO);
if (ret)
- ODP_DBG("ETHTOOL_STSO not supported\n");
+ ODP_DBG("[%04d] ETHTOOL_STSO not supported\n",
+ odp_thread_id());
/* TODO: This seems to cause the app to not receive frames
* first time it is launched after netmap driver is inserted.
* Should be investigated further.
@@ -177,20 +183,23 @@ int setup_pkt_netmap(pkt_netmap_t * const pkt_nm, const char *netdev,
*/
ret = nm_do_ioctl(pkt_nm, SIOCETHTOOL, ETHTOOL_STXCSUM);
if (ret)
- ODP_DBG("ETHTOOL_STXCSUM not supported\n");
+ ODP_DBG("[%04d] ETHTOOL_STXCSUM not supported\n",
+ odp_thread_id());
- ODP_DBG("Wait for link to come up\n");
+ ODP_DBG("[%04d] Wait for link to come up\n",
+ odp_thread_id());
sleep(WAITLINK_TMO);
- ODP_DBG("Done\n");
+ ODP_DBG("[%04d] Done\n",
+ odp_thread_id());
return 0;
}
int close_pkt_netmap(pkt_netmap_t * const pkt_nm)
{
- if (pkt_nm->nm_desc != NULL) {
- nm_close(pkt_nm->nm_desc);
- pkt_nm->nm_desc = NULL;
+ if (pkt_nm->desc != NULL) {
+ nm_close(pkt_nm->desc);
+ pkt_nm->desc = NULL;
}
return 0;
@@ -210,7 +219,7 @@ int recv_pkt_netmap(pkt_netmap_t * const pkt_nm, odp_packet_t pkt_table[],
int ret;
#endif
- fd = pkt_nm->nm_desc->fd;
+ fd = pkt_nm->desc->fd;
#ifdef NETMAP_BLOCKING_IO
fds[0].fd = fd;
fds[0].events = POLLIN;
@@ -236,7 +245,7 @@ int recv_pkt_netmap(pkt_netmap_t * const pkt_nm, odp_packet_t pkt_table[],
break;
}
- rxring = NETMAP_RXRING(pkt_nm->nm_desc->nifp, ringid);
+ rxring = NETMAP_RXRING(pkt_nm->desc->nifp, ringid);
}
if (ringid == pkt_nm->end)
@@ -246,8 +255,6 @@ int recv_pkt_netmap(pkt_netmap_t * const pkt_nm, odp_packet_t pkt_table[],
if (nm_ring_space(rxring) < limit)
limit = nm_ring_space(rxring);
- ODP_DBG("receiving %d frames out of %u\n", limit, len);
-
for (rx = 0; rx < limit; rx++) {
struct netmap_slot *rslot;
char *p;
@@ -305,9 +312,6 @@ int recv_pkt_netmap(pkt_netmap_t * const pkt_nm, odp_packet_t pkt_table[],
if (odp_unlikely(pkt != ODP_PACKET_INVALID))
odp_buffer_free((odp_buffer_t) pkt);
- if (nb_rx)
- ODP_DBG("<=== rcvd %03u frames from netmap adapter\n", nb_rx);
-
return nb_rx;
}
@@ -326,7 +330,7 @@ int send_pkt_netmap(pkt_netmap_t * const pkt_nm, odp_packet_t pkt_table[],
int ret;
#endif
- fd = pkt_nm->nm_desc->fd;
+ fd = pkt_nm->desc->fd;
#ifdef NETMAP_BLOCKING_IO
fds[0].fd = fd;
fds[0].events = POLLOUT;
@@ -352,7 +356,7 @@ int send_pkt_netmap(pkt_netmap_t * const pkt_nm, odp_packet_t pkt_table[],
break;
}
- txring = NETMAP_TXRING(pkt_nm->nm_desc->nifp, ringid);
+ txring = NETMAP_TXRING(pkt_nm->desc->nifp, ringid);
}
if (ringid == pkt_nm->end)
@@ -362,9 +366,6 @@ int send_pkt_netmap(pkt_netmap_t * const pkt_nm, odp_packet_t pkt_table[],
if (nm_ring_space(txring) < limit)
limit = nm_ring_space(txring);
- ODP_DBG("Sending %d packets out of %d to netmap %p %u\n",
- limit, len, txring, txring->cur);
-
for (tx = 0; tx < limit; tx++) {
struct netmap_slot *tslot;
size_t frame_len;
@@ -392,9 +393,6 @@ int send_pkt_netmap(pkt_netmap_t * const pkt_nm, odp_packet_t pkt_table[],
ioctl(fd, NIOCTXSYNC, NULL);
#endif
- if (nb_tx)
- ODP_DBG("===> sent %03u frames to netmap adapter\n", nb_tx);
-
for (tx = 0; tx < len; tx++)
odph_packet_free(pkt_table[tx]);
Signed-off-by: Ciprian Barbu <ciprian.barbu@linaro.org> --- platform/linux-netmap/include/odp_packet_netmap.h | 10 ++-- platform/linux-netmap/odp_packet_netmap.c | 64 +++++++++++------------ 2 files changed, 36 insertions(+), 38 deletions(-)