@@ -52,19 +52,6 @@
#define BURST_SIZE 32
#define RTE_RING_SZ 1024
-/* uncommnet below line to enable debug logs */
-/* #define DEBUG */
-
-#ifdef DEBUG
-#define LOG_LEVEL RTE_LOG_DEBUG
-#define LOG_DEBUG(log_type, fmt, args...) do { \
- RTE_LOG(DEBUG, log_type, fmt, ##args); \
-} while (0)
-#else
-#define LOG_LEVEL RTE_LOG_INFO
-#define LOG_DEBUG(log_type, fmt, args...) do {} while (0)
-#endif
-
#define RTE_LOGTYPE_DISTRAPP RTE_LOGTYPE_USER1
/* mask of enabled ports */
@@ -240,7 +227,8 @@ lcore_rx(struct lcore_params *p)
uint16_t sent = rte_ring_enqueue_burst(r, (void *)bufs, nb_ret);
app_stats.rx.enqueued_pkts += sent;
if (unlikely(sent < nb_ret)) {
- LOG_DEBUG(DISTRAPP, "%s:Packet loss due to full ring\n", __func__);
+ RTE_LOG(DEBUG, DISTRAPP,
+ "%s:Packet loss due to full ring\n", __func__);
while (sent < nb_ret)
rte_pktmbuf_free(bufs[sent++]);
}
@@ -271,7 +259,8 @@ flush_one_port(struct output_buffer *outbuf, uint8_t outp)
app_stats.tx.tx_pkts += nb_tx;
if (unlikely(nb_tx < outbuf->count)) {
- LOG_DEBUG(DISTRAPP, "%s:Packet loss with tx_burst\n", __func__);
+ RTE_LOG(DEBUG, DISTRAPP,
+ "%s:Packet loss with tx_burst\n", __func__);
do {
rte_pktmbuf_free(outbuf->mbufs[nb_tx]);
} while (++nb_tx < outbuf->count);
@@ -83,7 +83,7 @@ esp4_tunnel_inbound_pre_crypto(struct rte_mbuf *m, struct ipsec_sa *sa,
sa->digest_len;
if ((payload_len & (sa->block_size - 1)) || (payload_len <= 0)) {
- IPSEC_LOG(DEBUG, IPSEC_ESP, "payload %d not multiple of %u\n",
+ RTE_LOG(DEBUG, IPSEC_ESP, "payload %d not multiple of %u\n",
payload_len, sa->block_size);
return -EINVAL;
}
@@ -129,7 +129,7 @@ esp4_tunnel_inbound_post_crypto(struct rte_mbuf *m, struct ipsec_sa *sa,
IPSEC_ASSERT(cop != NULL);
if (cop->status != RTE_CRYPTO_OP_STATUS_SUCCESS) {
- IPSEC_LOG(ERR, IPSEC_ESP, "Failed crypto op\n");
+ RTE_LOG(ERR, IPSEC_ESP, "Failed crypto op\n");
return -1;
}
@@ -140,13 +140,13 @@ esp4_tunnel_inbound_post_crypto(struct rte_mbuf *m, struct ipsec_sa *sa,
padding = pad_len - *pad_len;
for (i = 0; i < *pad_len; i++) {
if (padding[i] != i) {
- IPSEC_LOG(ERR, IPSEC_ESP, "invalid pad_len field\n");
+ RTE_LOG(ERR, IPSEC_ESP, "invalid pad_len field\n");
return -EINVAL;
}
}
if (rte_pktmbuf_trim(m, *pad_len + 2 + sa->digest_len)) {
- IPSEC_LOG(ERR, IPSEC_ESP,
+ RTE_LOG(ERR, IPSEC_ESP,
"failed to remove pad_len + digest\n");
return -EINVAL;
}
@@ -180,7 +180,7 @@ esp4_tunnel_outbound_pre_crypto(struct rte_mbuf *m, struct ipsec_sa *sa,
/* Check maximum packet size */
if (unlikely(IP_ESP_HDR_SZ + sa->iv_len + pad_payload_len +
sa->digest_len > IP_MAXPACKET)) {
- IPSEC_LOG(DEBUG, IPSEC_ESP, "ipsec packet is too big\n");
+ RTE_LOG(DEBUG, IPSEC_ESP, "ipsec packet is too big\n");
return -EINVAL;
}
@@ -195,7 +195,7 @@ esp4_tunnel_outbound_pre_crypto(struct rte_mbuf *m, struct ipsec_sa *sa,
esp->spi = sa->spi;
esp->seq = htonl(sa->seq++);
- IPSEC_LOG(DEBUG, IPSEC_ESP, "pktlen %u\n", rte_pktmbuf_pkt_len(m));
+ RTE_LOG(DEBUG, IPSEC_ESP, "pktlen %u\n", rte_pktmbuf_pkt_len(m));
/* Fill pad_len using default sequential scheme */
for (i = 0; i < pad_len - 2; i++)
@@ -243,7 +243,7 @@ esp4_tunnel_outbound_post_crypto(struct rte_mbuf *m __rte_unused,
IPSEC_ASSERT(cop != NULL);
if (cop->status != RTE_CRYPTO_OP_STATUS_SUCCESS) {
- IPSEC_LOG(ERR, IPSEC_ESP, "Failed crypto op\n");
+ RTE_LOG(ERR, IPSEC_ESP, "Failed crypto op\n");
return -1;
}
@@ -58,13 +58,13 @@ create_session(struct ipsec_ctx *ipsec_ctx __rte_unused, struct ipsec_sa *sa)
ret = rte_hash_lookup_data(ipsec_ctx->cdev_map, &key,
(void **)&cdev_id_qp);
if (ret < 0) {
- IPSEC_LOG(ERR, IPSEC, "No cryptodev: core %u, cipher_algo %u, "
+ RTE_LOG(ERR, IPSEC, "No cryptodev: core %u, cipher_algo %u, "
"auth_algo %u\n", key.lcore_id, key.cipher_algo,
key.auth_algo);
return -1;
}
- IPSEC_LOG(DEBUG, IPSEC, "Create session for SA spi %u on cryptodev "
+ RTE_LOG(DEBUG, IPSEC, "Create session for SA spi %u on cryptodev "
"%u qp %u\n", sa->spi, ipsec_ctx->tbl[cdev_id_qp].id,
ipsec_ctx->tbl[cdev_id_qp].qp);
@@ -87,7 +87,7 @@ enqueue_cop(struct cdev_qp *cqp, struct rte_crypto_op *cop)
ret = rte_cryptodev_enqueue_burst(cqp->id, cqp->qp,
cqp->buf, cqp->len);
if (ret < cqp->len) {
- IPSEC_LOG(DEBUG, IPSEC, "Cryptodev %u queue %u:"
+ RTE_LOG(DEBUG, IPSEC, "Cryptodev %u queue %u:"
" enqueued %u crypto ops out of %u\n",
cqp->id, cqp->qp,
ret, cqp->len);
@@ -52,11 +52,8 @@
if (!(exp)) { \
rte_panic("line%d\tassert \"" #exp "\" failed\n", __LINE__); \
}
-
-#define IPSEC_LOG RTE_LOG
#else
#define IPSEC_ASSERT(exp) do {} while (0)
-#define IPSEC_LOG(...) do {} while (0)
#endif /* IPSEC_DEBUG */
#define MAX_DIGEST_SIZE 32 /* Bytes -- 256 bits */
@@ -72,6 +72,9 @@
#include <rte_string_fns.h>
#include <rte_acl.h>
+#if RTE_LOG_LEVEL >= RTE_LOG_DEBUG
+#define L3FWDACL_DEBUG
+#endif
#define DO_RFC_1812_CHECKS
#define RTE_LOGTYPE_L3FWD RTE_LOGTYPE_USER1
@@ -55,17 +55,6 @@
#define RING_SIZE 16384
-/* uncomment below line to enable debug logs */
-/* #define DEBUG */
-
-#ifdef DEBUG
-#define LOG_LEVEL RTE_LOG_DEBUG
-#define LOG_DEBUG(log_type, fmt, args...) RTE_LOG(DEBUG, log_type, fmt, ##args)
-#else
-#define LOG_LEVEL RTE_LOG_INFO
-#define LOG_DEBUG(log_type, fmt, args...) do {} while (0)
-#endif
-
/* Macros for printing using RTE_LOG */
#define RTE_LOGTYPE_REORDERAPP RTE_LOGTYPE_USER1
@@ -240,7 +229,7 @@ flush_tx_error_callback(struct rte_mbuf **unsent, uint16_t count,
/* free the mbufs which failed from transmit */
app_stats.tx.ro_tx_failed_pkts += count;
- LOG_DEBUG(REORDERAPP, "%s:Packet loss with tx_burst\n", __func__);
+ RTE_LOG(DEBUG, REORDERAPP, "%s:Packet loss with tx_burst\n", __func__);
pktmbuf_free_bulk(unsent, count);
}
@@ -421,7 +410,7 @@ rx_thread(struct rte_ring *ring_out)
nb_rx_pkts = rte_eth_rx_burst(port_id, 0,
pkts, MAX_PKTS_BURST);
if (nb_rx_pkts == 0) {
- LOG_DEBUG(REORDERAPP,
+ RTE_LOG(DEBUG, REORDERAPP,
"%s():Received zero packets\n", __func__);
continue;
}
@@ -533,7 +522,8 @@ send_thread(struct send_thread_args *args)
if (ret == -1 && rte_errno == ERANGE) {
/* Too early pkts should be transmitted out directly */
- LOG_DEBUG(REORDERAPP, "%s():Cannot reorder early packet "
+ RTE_LOG(DEBUG, REORDERAPP,
+ "%s():Cannot reorder early packet "
"direct enqueuing to TX\n", __func__);
outp = mbufs[i]->port;
if ((portmask & (1 << outp)) == 0) {
@@ -568,7 +568,7 @@ virtio_tx_route(struct vhost_dev *vdev, struct rte_mbuf *m)
const uint16_t lcore_id = rte_lcore_id();
struct virtio_net *dev = vdev->dev;
- LOG_DEBUG(VHOST_DATA, "(%"PRIu64") TX: MAC address is external\n",
+ RTE_LOG(DEBUG, VHOST_DATA, "(%" PRIu64 ") TX: MAC address is external\n",
dev->device_fh);
/* Add packet to the port tx queue */
@@ -651,7 +651,7 @@ switch_worker(__rte_unused void *arg)
if (unlikely(diff_tsc > drain_tsc)) {
if (tx_q->len) {
- LOG_DEBUG(VHOST_DATA, "TX queue drained after "
+ RTE_LOG(DEBUG, VHOST_DATA, "TX queue drained after "
"timeout with burst size %u\n",
tx_q->len);
ret = overlay_options.tx_handle(ports[0],
@@ -1220,9 +1220,6 @@ main(int argc, char *argv[])
for (queue_id = 0; queue_id < MAX_QUEUES + 1; queue_id++)
vpool_array[queue_id].pool = mbuf_pool;
- /* Set log level. */
- rte_set_log_level(LOG_LEVEL);
-
/* initialize all ports */
for (portid = 0; portid < nb_ports; portid++) {
/* skip ports that are not enabled */
@@ -36,14 +36,6 @@
#include <rte_ether.h>
-#ifdef DEBUG
-#define LOG_LEVEL RTE_LOG_DEBUG
-#define LOG_DEBUG(log_type, fmt, args...) RTE_LOG(DEBUG, log_type, fmt, ##args)
-#else
-#define LOG_LEVEL RTE_LOG_INFO
-#define LOG_DEBUG(log_type, fmt, args...) do {} while (0)
-#endif
-
/* Macros for printing using RTE_LOG */
#define RTE_LOGTYPE_VHOST_CONFIG RTE_LOGTYPE_USER1
#define RTE_LOGTYPE_VHOST_DATA RTE_LOGTYPE_USER2
@@ -877,7 +877,7 @@ static unsigned check_ports_num(unsigned nb_ports)
* Macro to print out packet contents. Wrapped in debug define so that the
* data path is not effected when debug is disabled.
*/
-#ifdef DEBUG
+#if RTE_LOG_LEVEL >= RTE_LOG_DEBUG
#define PRINT_PACKET(device, addr, size, header) do { \
char *pkt_addr = (char*)(addr); \
unsigned int index; \
@@ -893,7 +893,7 @@ static unsigned check_ports_num(unsigned nb_ports)
} \
snprintf(packet + strnlen(packet, MAX_PRINT_BUFF), MAX_PRINT_BUFF - strnlen(packet, MAX_PRINT_BUFF), "\n"); \
\
- LOG_DEBUG(VHOST_DATA, "%s", packet); \
+ RTE_LOG(DEBUG, VHOST_DATA, "%s", packet); \
} while(0)
#else
#define PRINT_PACKET(device, addr, size, header) do{} while(0)
@@ -927,7 +927,7 @@ gpa_to_hpa(struct vhost_dev *vdev, uint64_t guest_pa,
}
}
- LOG_DEBUG(VHOST_DATA, "(%"PRIu64") GPA %p| HPA %p\n",
+ RTE_LOG(DEBUG, VHOST_DATA, "(%" PRIu64 ") GPA %p| HPA %p\n",
vdev->dev->device_fh, (void *)(uintptr_t)guest_pa,
(void *)(uintptr_t)vhost_pa);
@@ -1059,18 +1059,22 @@ virtio_tx_local(struct vhost_dev *vdev, struct rte_mbuf *m)
/* Drop the packet if the TX packet is destined for the TX device. */
if (dev_ll->vdev->dev->device_fh == dev->device_fh) {
- LOG_DEBUG(VHOST_DATA, "(%"PRIu64") TX: Source and destination MAC addresses are the same. Dropping packet.\n",
- dev->device_fh);
+ RTE_LOG(DEBUG, VHOST_DATA, "(%" PRIu64 ") TX: "
+ "Source and destination MAC addresses are the same. "
+ "Dropping packet.\n",
+ dev->device_fh);
return 0;
}
tdev = dev_ll->vdev->dev;
- LOG_DEBUG(VHOST_DATA, "(%"PRIu64") TX: MAC address is local\n", tdev->device_fh);
+ RTE_LOG(DEBUG, VHOST_DATA, "(%" PRIu64 ") TX: "
+ "MAC address is local\n", tdev->device_fh);
if (unlikely(dev_ll->vdev->remove)) {
/*drop the packet if the device is marked for removal*/
- LOG_DEBUG(VHOST_DATA, "(%"PRIu64") Device is marked for removal\n", tdev->device_fh);
+ RTE_LOG(DEBUG, VHOST_DATA, "(%" PRIu64 ") "
+ "Device is marked for removal\n", tdev->device_fh);
} else {
/*send the packet to the local virtio device*/
ret = rte_vhost_enqueue_burst(tdev, VIRTIO_RXQ, &m, 1);
@@ -1114,7 +1118,7 @@ find_local_dest(struct virtio_net *dev, struct rte_mbuf *m,
* destined for the TX device.
*/
if (dev_ll->vdev->dev->device_fh == dev->device_fh) {
- LOG_DEBUG(VHOST_DATA,
+ RTE_LOG(DEBUG, VHOST_DATA,
"(%"PRIu64") TX: Source and destination"
" MAC addresses are the same. Dropping "
"packet.\n",
@@ -1132,7 +1136,7 @@ find_local_dest(struct virtio_net *dev, struct rte_mbuf *m,
(uint16_t)
vlan_tags[(uint16_t)dev_ll->vdev->dev->device_fh];
- LOG_DEBUG(VHOST_DATA,
+ RTE_LOG(DEBUG, VHOST_DATA,
"(%"PRIu64") TX: pkt to local VM device id:"
"(%"PRIu64") vlan tag: %d.\n",
dev->device_fh, dev_ll->vdev->dev->device_fh,
@@ -1200,7 +1204,8 @@ virtio_tx_route(struct vhost_dev *vdev, struct rte_mbuf *m, uint16_t vlan_tag)
}
}
- LOG_DEBUG(VHOST_DATA, "(%"PRIu64") TX: MAC address is external\n", dev->device_fh);
+ RTE_LOG(DEBUG, VHOST_DATA, "(%" PRIu64 ") TX: "
+ "MAC address is external\n", dev->device_fh);
/*Add packet to the port tx queue*/
tx_q = &lcore_tx_queue[lcore_id];
@@ -1310,7 +1315,9 @@ switch_worker(__attribute__((unused)) void *arg)
if (unlikely(diff_tsc > drain_tsc)) {
if (tx_q->len) {
- LOG_DEBUG(VHOST_DATA, "TX queue drained after timeout with burst size %u \n", tx_q->len);
+ RTE_LOG(DEBUG, VHOST_DATA,
+ "TX queue drained after timeout with burst size %u\n",
+ tx_q->len);
/*Tx any packets in the queue*/
ret = rte_eth_tx_burst(ports[0], (uint16_t)tx_q->txq_id,
@@ -1444,7 +1451,7 @@ get_available_ring_index_zcp(struct virtio_net *dev,
avail_idx = *((volatile uint16_t *)&vq->avail->idx);
free_entries = (avail_idx - *res_base_idx);
- LOG_DEBUG(VHOST_DATA, "(%"PRIu64") in get_available_ring_index_zcp: "
+ RTE_LOG(DEBUG, VHOST_DATA, "(%" PRIu64 ") in get_available_ring_index_zcp: "
"avail idx: %d, "
"res base idx:%d, free entries:%d\n",
dev->device_fh, avail_idx, *res_base_idx,
@@ -1469,7 +1476,7 @@ get_available_ring_index_zcp(struct virtio_net *dev,
count = free_entries;
if (unlikely(count == 0)) {
- LOG_DEBUG(VHOST_DATA,
+ RTE_LOG(DEBUG, VHOST_DATA,
"(%"PRIu64") Fail in get_available_ring_index_zcp: "
"avail idx: %d, res base idx:%d, free entries:%d\n",
dev->device_fh, avail_idx,
@@ -1568,7 +1575,7 @@ attach_rxmbuf_zcp(struct virtio_net *dev)
rte_ring_sc_dequeue(vpool->ring, &obj);
mbuf = obj;
if (unlikely(mbuf == NULL)) {
- LOG_DEBUG(VHOST_DATA,
+ RTE_LOG(DEBUG, VHOST_DATA,
"(%"PRIu64") in attach_rxmbuf_zcp: "
"ring_sc_dequeue fail.\n",
dev->device_fh);
@@ -1577,7 +1584,7 @@ attach_rxmbuf_zcp(struct virtio_net *dev)
}
if (unlikely(vpool->buf_size > desc->len)) {
- LOG_DEBUG(VHOST_DATA,
+ RTE_LOG(DEBUG, VHOST_DATA,
"(%"PRIu64") in attach_rxmbuf_zcp: frame buffer "
"length(%d) of descriptor idx: %d less than room "
"size required: %d\n",
@@ -1593,7 +1600,7 @@ attach_rxmbuf_zcp(struct virtio_net *dev)
mbuf->data_len = desc->len;
MBUF_HEADROOM_UINT32(mbuf) = (uint32_t)desc_idx;
- LOG_DEBUG(VHOST_DATA,
+ RTE_LOG(DEBUG, VHOST_DATA,
"(%"PRIu64") in attach_rxmbuf_zcp: res base idx:%d, "
"descriptor idx:%d\n",
dev->device_fh, res_base_idx, desc_idx);
@@ -1644,11 +1651,11 @@ txmbuf_clean_zcp(struct virtio_net *dev, struct vpool *vpool)
uint32_t index = 0;
uint32_t mbuf_count = rte_mempool_count(vpool->pool);
- LOG_DEBUG(VHOST_DATA,
+ RTE_LOG(DEBUG, VHOST_DATA,
"(%"PRIu64") in txmbuf_clean_zcp: mbuf count in mempool before "
"clean is: %d\n",
dev->device_fh, mbuf_count);
- LOG_DEBUG(VHOST_DATA,
+ RTE_LOG(DEBUG, VHOST_DATA,
"(%"PRIu64") in txmbuf_clean_zcp: mbuf count in ring before "
"clean is : %d\n",
dev->device_fh, rte_ring_count(vpool->ring));
@@ -1666,22 +1673,22 @@ txmbuf_clean_zcp(struct virtio_net *dev, struct vpool *vpool)
used_idx = (used_idx + 1) & (vq->size - 1);
}
- LOG_DEBUG(VHOST_DATA,
+ RTE_LOG(DEBUG, VHOST_DATA,
"(%"PRIu64") in txmbuf_clean_zcp: mbuf count in mempool after "
"clean is: %d\n",
dev->device_fh, rte_mempool_count(vpool->pool));
- LOG_DEBUG(VHOST_DATA,
+ RTE_LOG(DEBUG, VHOST_DATA,
"(%"PRIu64") in txmbuf_clean_zcp: mbuf count in ring after "
"clean is : %d\n",
dev->device_fh, rte_ring_count(vpool->ring));
- LOG_DEBUG(VHOST_DATA,
+ RTE_LOG(DEBUG, VHOST_DATA,
"(%"PRIu64") in txmbuf_clean_zcp: before updated "
"vq->last_used_idx:%d\n",
dev->device_fh, vq->last_used_idx);
vq->last_used_idx += mbuf_count;
- LOG_DEBUG(VHOST_DATA,
+ RTE_LOG(DEBUG, VHOST_DATA,
"(%"PRIu64") in txmbuf_clean_zcp: after updated "
"vq->last_used_idx:%d\n",
dev->device_fh, vq->last_used_idx);
@@ -1706,11 +1713,11 @@ static void mbuf_destroy_zcp(struct vpool *vpool)
struct rte_mbuf *mbuf = NULL;
uint32_t index, mbuf_count = rte_mempool_count(vpool->pool);
- LOG_DEBUG(VHOST_CONFIG,
+ RTE_LOG(DEBUG, VHOST_CONFIG,
"in mbuf_destroy_zcp: mbuf count in mempool before "
"mbuf_destroy_zcp is: %d\n",
mbuf_count);
- LOG_DEBUG(VHOST_CONFIG,
+ RTE_LOG(DEBUG, VHOST_CONFIG,
"in mbuf_destroy_zcp: mbuf count in ring before "
"mbuf_destroy_zcp is : %d\n",
rte_ring_count(vpool->ring));
@@ -1724,11 +1731,11 @@ static void mbuf_destroy_zcp(struct vpool *vpool)
}
}
- LOG_DEBUG(VHOST_CONFIG,
+ RTE_LOG(DEBUG, VHOST_CONFIG,
"in mbuf_destroy_zcp: mbuf count in mempool after "
"mbuf_destroy_zcp is: %d\n",
rte_mempool_count(vpool->pool));
- LOG_DEBUG(VHOST_CONFIG,
+ RTE_LOG(DEBUG, VHOST_CONFIG,
"in mbuf_destroy_zcp: mbuf count in ring after "
"mbuf_destroy_zcp is : %d\n",
rte_ring_count(vpool->ring));
@@ -1752,7 +1759,8 @@ virtio_dev_rx_zcp(struct virtio_net *dev, struct rte_mbuf **pkts,
uint32_t head_idx, packet_success = 0;
uint16_t res_cur_idx;
- LOG_DEBUG(VHOST_DATA, "(%"PRIu64") virtio_dev_rx()\n", dev->device_fh);
+ RTE_LOG(DEBUG, VHOST_DATA, "(%" PRIu64 ") virtio_dev_rx()\n",
+ dev->device_fh);
if (count == 0)
return 0;
@@ -1761,7 +1769,7 @@ virtio_dev_rx_zcp(struct virtio_net *dev, struct rte_mbuf **pkts,
count = (count > MAX_PKT_BURST) ? MAX_PKT_BURST : count;
res_cur_idx = vq->last_used_idx;
- LOG_DEBUG(VHOST_DATA, "(%"PRIu64") Current Index %d| End Index %d\n",
+ RTE_LOG(DEBUG, VHOST_DATA, "(%" PRIu64 ") Current Index %d| End Index %d\n",
dev->device_fh, res_cur_idx, res_cur_idx + count);
/* Retrieve all of the head indexes first to avoid caching issues. */
@@ -1776,7 +1784,7 @@ virtio_dev_rx_zcp(struct virtio_net *dev, struct rte_mbuf **pkts,
desc = &vq->desc[head[packet_success]];
buff = pkts[packet_success];
- LOG_DEBUG(VHOST_DATA,
+ RTE_LOG(DEBUG, VHOST_DATA,
"(%"PRIu64") in dev_rx_zcp: update the used idx for "
"pkt[%d] descriptor idx: %d\n",
dev->device_fh, packet_success,
@@ -1825,7 +1833,7 @@ virtio_dev_rx_zcp(struct virtio_net *dev, struct rte_mbuf **pkts,
rte_compiler_barrier();
- LOG_DEBUG(VHOST_DATA,
+ RTE_LOG(DEBUG, VHOST_DATA,
"(%"PRIu64") in dev_rx_zcp: before update used idx: "
"vq.last_used_idx: %d, vq->used->idx: %d\n",
dev->device_fh, vq->last_used_idx, vq->used->idx);
@@ -1833,7 +1841,7 @@ virtio_dev_rx_zcp(struct virtio_net *dev, struct rte_mbuf **pkts,
*(volatile uint16_t *)&vq->used->idx += count;
vq->last_used_idx += count;
- LOG_DEBUG(VHOST_DATA,
+ RTE_LOG(DEBUG, VHOST_DATA,
"(%"PRIu64") in dev_rx_zcp: after update used idx: "
"vq.last_used_idx: %d, vq->used->idx: %d\n",
dev->device_fh, vq->last_used_idx, vq->used->idx);
@@ -1918,7 +1926,7 @@ virtio_tx_route_zcp(struct virtio_net *dev, struct rte_mbuf *m,
tx_q->m_table[len] = mbuf;
len++;
- LOG_DEBUG(VHOST_DATA,
+ RTE_LOG(DEBUG, VHOST_DATA,
"(%"PRIu64") in tx_route_zcp: pkt: nb_seg: %d, next:%s\n",
dev->device_fh,
mbuf->nb_segs,
@@ -1980,7 +1988,8 @@ virtio_dev_tx_zcp(struct virtio_net *dev)
if (vq->last_used_idx_res == avail_idx)
return;
- LOG_DEBUG(VHOST_DATA, "(%"PRIu64") virtio_dev_tx()\n", dev->device_fh);
+ RTE_LOG(DEBUG, VHOST_DATA, "(%" PRIu64 ") virtio_dev_tx()\n",
+ dev->device_fh);
/* Prefetch available ring to retrieve head indexes. */
rte_prefetch0(&vq->avail->ring[vq->last_used_idx_res & (vq->size - 1)]);
@@ -1992,7 +2001,7 @@ virtio_dev_tx_zcp(struct virtio_net *dev)
free_entries
= (free_entries > MAX_PKT_BURST) ? MAX_PKT_BURST : free_entries;
- LOG_DEBUG(VHOST_DATA, "(%"PRIu64") Buffers available %d\n",
+ RTE_LOG(DEBUG, VHOST_DATA, "(%" PRIu64 ") Buffers available %d\n",
dev->device_fh, free_entries);
/* Retrieve all of the head indexes first to avoid caching issues. */
@@ -2129,7 +2138,7 @@ switch_worker_zcp(__attribute__((unused)) void *arg)
if (likely(!vdev->remove)) {
tx_q = &tx_queue_zcp[(uint16_t)vdev->vmdq_rx_q];
if (tx_q->len) {
- LOG_DEBUG(VHOST_DATA,
+ RTE_LOG(DEBUG, VHOST_DATA,
"TX queue drained after timeout"
" with burst size %u\n",
tx_q->len);
@@ -2465,14 +2474,14 @@ destroy_device (volatile struct virtio_net *dev)
/* Stop the RX queue. */
if (rte_eth_dev_rx_queue_stop(ports[0], vdev->vmdq_rx_q) != 0) {
- LOG_DEBUG(VHOST_CONFIG,
+ RTE_LOG(DEBUG, VHOST_CONFIG,
"(%"PRIu64") In destroy_device: Failed to stop "
"rx queue:%d\n",
dev->device_fh,
vdev->vmdq_rx_q);
}
- LOG_DEBUG(VHOST_CONFIG,
+ RTE_LOG(DEBUG, VHOST_CONFIG,
"(%"PRIu64") in destroy_device: Start put mbuf in "
"mempool back to ring for RX queue: %d\n",
dev->device_fh, vdev->vmdq_rx_q);
@@ -2481,7 +2490,7 @@ destroy_device (volatile struct virtio_net *dev)
/* Stop the TX queue. */
if (rte_eth_dev_tx_queue_stop(ports[0], vdev->vmdq_rx_q) != 0) {
- LOG_DEBUG(VHOST_CONFIG,
+ RTE_LOG(DEBUG, VHOST_CONFIG,
"(%"PRIu64") In destroy_device: Failed to "
"stop tx queue:%d\n",
dev->device_fh, vdev->vmdq_rx_q);
@@ -2489,7 +2498,7 @@ destroy_device (volatile struct virtio_net *dev)
vpool = &vpool_array[vdev->vmdq_rx_q + MAX_QUEUES];
- LOG_DEBUG(VHOST_CONFIG,
+ RTE_LOG(DEBUG, VHOST_CONFIG,
"(%"PRIu64") destroy_device: Start put mbuf in mempool "
"back to ring for TX queue: %d, dev:(%"PRIu64")\n",
dev->device_fh, (vdev->vmdq_rx_q + MAX_QUEUES),
@@ -2513,14 +2522,14 @@ check_hpa_regions(uint64_t vva_start, uint64_t size)
uint32_t i, nregions = 0, page_size = getpagesize();
uint64_t cur_phys_addr = 0, next_phys_addr = 0;
if (vva_start % page_size) {
- LOG_DEBUG(VHOST_CONFIG,
+ RTE_LOG(DEBUG, VHOST_CONFIG,
"in check_countinous: vva start(%p) mod page_size(%d) "
"has remainder\n",
(void *)(uintptr_t)vva_start, page_size);
return 0;
}
if (size % page_size) {
- LOG_DEBUG(VHOST_CONFIG,
+ RTE_LOG(DEBUG, VHOST_CONFIG,
"in check_countinous: "
"size((%"PRIu64")) mod page_size(%d) has remainder\n",
size, page_size);
@@ -2533,13 +2542,13 @@ check_hpa_regions(uint64_t vva_start, uint64_t size)
(void *)(uintptr_t)(vva_start + i + page_size));
if ((cur_phys_addr + page_size) != next_phys_addr) {
++nregions;
- LOG_DEBUG(VHOST_CONFIG,
+ RTE_LOG(DEBUG, VHOST_CONFIG,
"in check_continuous: hva addr:(%p) is not "
"continuous with hva addr:(%p), diff:%d\n",
(void *)(uintptr_t)(vva_start + (uint64_t)i),
(void *)(uintptr_t)(vva_start + (uint64_t)i
+ page_size), page_size);
- LOG_DEBUG(VHOST_CONFIG,
+ RTE_LOG(DEBUG, VHOST_CONFIG,
"in check_continuous: hpa addr:(%p) is not "
"continuous with hpa addr:(%p), "
"diff:(%"PRIu64")\n",
@@ -2574,12 +2583,12 @@ fill_hpa_memory_regions(struct virtio_memory_regions_hpa *mem_region_hpa, struct
mem_region_hpa[regionidx_hpa].host_phys_addr_offset =
rte_mem_virt2phy((void *)(uintptr_t)(vva_start)) -
mem_region_hpa[regionidx_hpa].guest_phys_address;
- LOG_DEBUG(VHOST_CONFIG,
+ RTE_LOG(DEBUG, VHOST_CONFIG,
"in fill_hpa_regions: guest phys addr start[%d]:(%p)\n",
regionidx_hpa,
(void *)(uintptr_t)
(mem_region_hpa[regionidx_hpa].guest_phys_address));
- LOG_DEBUG(VHOST_CONFIG,
+ RTE_LOG(DEBUG, VHOST_CONFIG,
"in fill_hpa_regions: host phys addr start[%d]:(%p)\n",
regionidx_hpa,
(void *)(uintptr_t)
@@ -2599,12 +2608,12 @@ fill_hpa_memory_regions(struct virtio_memory_regions_hpa *mem_region_hpa, struct
k + page_size;
mem_region_hpa[regionidx_hpa].memory_size
= k + page_size;
- LOG_DEBUG(VHOST_CONFIG, "in fill_hpa_regions: guest "
+ RTE_LOG(DEBUG, VHOST_CONFIG, "in fill_hpa_regions: guest "
"phys addr end [%d]:(%p)\n",
regionidx_hpa,
(void *)(uintptr_t)
(mem_region_hpa[regionidx_hpa].guest_phys_address_end));
- LOG_DEBUG(VHOST_CONFIG,
+ RTE_LOG(DEBUG, VHOST_CONFIG,
"in fill_hpa_regions: guest phys addr "
"size [%d]:(%p)\n",
regionidx_hpa,
@@ -2616,12 +2625,12 @@ fill_hpa_memory_regions(struct virtio_memory_regions_hpa *mem_region_hpa, struct
mem_region_hpa[regionidx_hpa].host_phys_addr_offset =
next_phys_addr -
mem_region_hpa[regionidx_hpa].guest_phys_address;
- LOG_DEBUG(VHOST_CONFIG, "in fill_hpa_regions: guest"
+ RTE_LOG(DEBUG, VHOST_CONFIG, "in fill_hpa_regions: guest"
" phys addr start[%d]:(%p)\n",
regionidx_hpa,
(void *)(uintptr_t)
(mem_region_hpa[regionidx_hpa].guest_phys_address));
- LOG_DEBUG(VHOST_CONFIG,
+ RTE_LOG(DEBUG, VHOST_CONFIG,
"in fill_hpa_regions: host phys addr "
"start[%d]:(%p)\n",
regionidx_hpa,
@@ -2636,11 +2645,11 @@ fill_hpa_memory_regions(struct virtio_memory_regions_hpa *mem_region_hpa, struct
= mem_region_hpa[regionidx_hpa].guest_phys_address
+ k + page_size;
mem_region_hpa[regionidx_hpa].memory_size = k + page_size;
- LOG_DEBUG(VHOST_CONFIG, "in fill_hpa_regions: guest phys addr end "
+ RTE_LOG(DEBUG, VHOST_CONFIG, "in fill_hpa_regions: guest phys addr end "
"[%d]:(%p)\n", regionidx_hpa,
(void *)(uintptr_t)
(mem_region_hpa[regionidx_hpa].guest_phys_address_end));
- LOG_DEBUG(VHOST_CONFIG, "in fill_hpa_regions: guest phys addr size "
+ RTE_LOG(DEBUG, VHOST_CONFIG, "in fill_hpa_regions: guest phys addr size "
"[%d]:(%p)\n", regionidx_hpa,
(void *)(uintptr_t)
(mem_region_hpa[regionidx_hpa].memory_size));
@@ -2730,12 +2739,12 @@ new_device (struct virtio_net *dev)
count_in_ring = rte_ring_count(vpool_array[index].ring);
- LOG_DEBUG(VHOST_CONFIG,
+ RTE_LOG(DEBUG, VHOST_CONFIG,
"(%"PRIu64") in new_device: mbuf count in mempool "
"before attach is: %d\n",
dev->device_fh,
rte_mempool_count(vpool_array[index].pool));
- LOG_DEBUG(VHOST_CONFIG,
+ RTE_LOG(DEBUG, VHOST_CONFIG,
"(%"PRIu64") in new_device: mbuf count in ring "
"before attach is : %d\n",
dev->device_fh, count_in_ring);
@@ -2746,12 +2755,12 @@ new_device (struct virtio_net *dev)
for (i = 0; i < count_in_ring; i++)
attach_rxmbuf_zcp(dev);
- LOG_DEBUG(VHOST_CONFIG, "(%"PRIu64") in new_device: mbuf count in "
- "mempool after attach is: %d\n",
+ RTE_LOG(DEBUG, VHOST_CONFIG, "(%" PRIu64 ") in new_device: "
+ "mbuf count in mempool after attach is: %d\n",
dev->device_fh,
rte_mempool_count(vpool_array[index].pool));
- LOG_DEBUG(VHOST_CONFIG, "(%"PRIu64") in new_device: mbuf count in "
- "ring after attach is : %d\n",
+ RTE_LOG(DEBUG, VHOST_CONFIG, "(%" PRIu64 ") in new_device: "
+ "mbuf count in ring after attach is : %d\n",
dev->device_fh,
rte_ring_count(vpool_array[index].ring));
@@ -2761,7 +2770,7 @@ new_device (struct virtio_net *dev)
if (rte_eth_dev_tx_queue_start(ports[0], vdev->vmdq_rx_q) != 0) {
struct vpool *vpool = &vpool_array[vdev->vmdq_rx_q];
- LOG_DEBUG(VHOST_CONFIG,
+ RTE_LOG(DEBUG, VHOST_CONFIG,
"(%"PRIu64") In new_device: Failed to start "
"tx queue:%d\n",
dev->device_fh, vdev->vmdq_rx_q);
@@ -2775,7 +2784,7 @@ new_device (struct virtio_net *dev)
if (rte_eth_dev_rx_queue_start(ports[0], vdev->vmdq_rx_q) != 0) {
struct vpool *vpool = &vpool_array[vdev->vmdq_rx_q];
- LOG_DEBUG(VHOST_CONFIG,
+ RTE_LOG(DEBUG, VHOST_CONFIG,
"(%"PRIu64") In new_device: Failed to start "
"rx queue:%d\n",
dev->device_fh, vdev->vmdq_rx_q);
@@ -2783,7 +2792,7 @@ new_device (struct virtio_net *dev)
/* Stop the TX queue. */
if (rte_eth_dev_tx_queue_stop(ports[0],
vdev->vmdq_rx_q) != 0) {
- LOG_DEBUG(VHOST_CONFIG,
+ RTE_LOG(DEBUG, VHOST_CONFIG,
"(%"PRIu64") In new_device: Failed to "
"stop tx queue:%d\n",
dev->device_fh, vdev->vmdq_rx_q);
@@ -2919,11 +2928,11 @@ setup_mempool_tbl(int socket, uint32_t index, char *pool_name,
rte_align32pow2(nb_mbuf + 1),
socket, RING_F_SP_ENQ | RING_F_SC_DEQ);
if (likely(vpool_array[index].ring != NULL)) {
- LOG_DEBUG(VHOST_CONFIG,
+ RTE_LOG(DEBUG, VHOST_CONFIG,
"in setup_mempool_tbl: mbuf count in "
"mempool is: %d\n",
rte_mempool_count(vpool_array[index].pool));
- LOG_DEBUG(VHOST_CONFIG,
+ RTE_LOG(DEBUG, VHOST_CONFIG,
"in setup_mempool_tbl: mbuf count in "
"ring is: %d\n",
rte_ring_count(vpool_array[index].ring));
@@ -3021,7 +3030,7 @@ main(int argc, char *argv[])
if (vm2vm_mode == VM2VM_HARDWARE) {
/* Enable VT loop back to let L2 switch to do it. */
vmdq_conf_default.rx_adv_conf.vmdq_rx_conf.enable_loop_back = 1;
- LOG_DEBUG(VHOST_CONFIG,
+ RTE_LOG(DEBUG, VHOST_CONFIG,
"Enable loop back for L2 switch in vmdq.\n");
}
} else {
@@ -3059,12 +3068,10 @@ main(int argc, char *argv[])
if (vm2vm_mode == VM2VM_HARDWARE) {
/* Enable VT loop back to let L2 switch to do it. */
vmdq_conf_default.rx_adv_conf.vmdq_rx_conf.enable_loop_back = 1;
- LOG_DEBUG(VHOST_CONFIG,
+ RTE_LOG(DEBUG, VHOST_CONFIG,
"Enable loop back for L2 switch in vmdq.\n");
}
}
- /* Set log level. */
- rte_set_log_level(LOG_LEVEL);
/* initialize all ports */
for (portid = 0; portid < nb_ports; portid++) {
@@ -3126,10 +3133,10 @@ main(int argc, char *argv[])
(void *)mbuf);
}
- LOG_DEBUG(VHOST_CONFIG,
+ RTE_LOG(DEBUG, VHOST_CONFIG,
"in main: mbuf count in mempool at initial "
"is: %d\n", count_in_mempool);
- LOG_DEBUG(VHOST_CONFIG,
+ RTE_LOG(DEBUG, VHOST_CONFIG,
"in main: mbuf count in ring at initial is :"
" %d\n",
rte_ring_count(vpool_array[index].ring));
@@ -34,18 +34,6 @@
#ifndef _MAIN_H_
#define _MAIN_H_
-//#define DEBUG
-
-#ifdef DEBUG
-#define LOG_LEVEL RTE_LOG_DEBUG
-#define LOG_DEBUG(log_type, fmt, args...) do { \
- RTE_LOG(DEBUG, log_type, fmt, ##args); \
-} while (0)
-#else
-#define LOG_LEVEL RTE_LOG_INFO
-#define LOG_DEBUG(log_type, fmt, args...) do{} while(0)
-#endif
-
/* Macros for printing using RTE_LOG */
#define RTE_LOGTYPE_VHOST_CONFIG RTE_LOGTYPE_USER1
#define RTE_LOGTYPE_VHOST_DATA RTE_LOGTYPE_USER2
@@ -507,32 +507,6 @@ static unsigned check_ports_num(unsigned nb_ports)
}
/*
- * Macro to print out packet contents. Wrapped in debug define so that the
- * data path is not effected when debug is disabled.
- */
-#ifdef DEBUG
-#define PRINT_PACKET(device, addr, size, header) do { \
- char *pkt_addr = (char*)(addr); \
- unsigned int index; \
- char packet[MAX_PRINT_BUFF]; \
- \
- if ((header)) \
- snprintf(packet, MAX_PRINT_BUFF, "(%"PRIu64") Header size %d: ", (device->device_fh), (size)); \
- else \
- snprintf(packet, MAX_PRINT_BUFF, "(%"PRIu64") Packet size %d: ", (device->device_fh), (size)); \
- for (index = 0; index < (size); index++) { \
- snprintf(packet + strnlen(packet, MAX_PRINT_BUFF), MAX_PRINT_BUFF - strnlen(packet, MAX_PRINT_BUFF), \
- "%02hhx ", pkt_addr[index]); \
- } \
- snprintf(packet + strnlen(packet, MAX_PRINT_BUFF), MAX_PRINT_BUFF - strnlen(packet, MAX_PRINT_BUFF), "\n"); \
- \
- LOG_DEBUG(VHOST_DATA, "%s", packet); \
-} while(0)
-#else
-#define PRINT_PACKET(device, addr, size, header) do{} while(0)
-#endif
-
-/*
* Function to convert guest physical addresses to vhost virtual addresses. This
* is used to convert virtio buffer addresses.
*/
@@ -551,7 +525,7 @@ gpa_to_vva(struct virtio_net *dev, uint64_t guest_pa)
break;
}
}
- LOG_DEBUG(VHOST_DATA, "(%"PRIu64") GPA %p| VVA %p\n",
+ RTE_LOG(DEBUG, VHOST_DATA, "(%" PRIu64 ") GPA %p| VVA %p\n",
dev->device_fh, (void*)(uintptr_t)guest_pa, (void*)(uintptr_t)vhost_va);
return vhost_va;
@@ -581,7 +555,7 @@ virtio_dev_rx(struct virtio_net *dev, struct rte_mbuf **pkts, uint32_t count)
uint8_t success = 0;
void *userdata;
- LOG_DEBUG(VHOST_DATA, "(%"PRIu64") virtio_dev_rx()\n", dev->device_fh);
+ RTE_LOG(DEBUG, VHOST_DATA, "(%" PRIu64 ") virtio_dev_rx()\n", dev->device_fh);
vq = dev->virtqueue_rx;
count = (count > MAX_PKT_BURST) ? MAX_PKT_BURST : count;
/* As many data cores may want access to available buffers, they need to be reserved. */
@@ -606,7 +580,8 @@ virtio_dev_rx(struct virtio_net *dev, struct rte_mbuf **pkts, uint32_t count)
res_end_idx);
} while (unlikely(success == 0));
res_cur_idx = res_base_idx;
- LOG_DEBUG(VHOST_DATA, "(%"PRIu64") Current Index %d| End Index %d\n", dev->device_fh, res_cur_idx, res_end_idx);
+ RTE_LOG(DEBUG, VHOST_DATA, "(%" PRIu64 ") Current Index %d| End Index %d\n",
+ dev->device_fh, res_cur_idx, res_end_idx);
/* Prefetch available ring to retrieve indexes. */
rte_prefetch0(&vq->avail->ring[res_cur_idx & (vq->size - 1)]);
@@ -800,17 +775,22 @@ virtio_tx_local(struct virtio_net *dev, struct rte_mbuf *m)
/* Drop the packet if the TX packet is destined for the TX device. */
if (dev_ll->dev->device_fh == dev->device_fh) {
- LOG_DEBUG(VHOST_DATA, "(%"PRIu64") TX: Source and destination MAC addresses are the same. Dropping packet.\n",
- dev_ll->dev->device_fh);
+ RTE_LOG(DEBUG, VHOST_DATA, "(%" PRIu64 ") TX: "
+ "Source and destination MAC addresses are the same. "
+ "Dropping packet.\n",
+ dev_ll->dev->device_fh);
return 0;
}
- LOG_DEBUG(VHOST_DATA, "(%"PRIu64") TX: MAC address is local\n", dev_ll->dev->device_fh);
+ RTE_LOG(DEBUG, VHOST_DATA, "(%" PRIu64 ") TX: "
+ "MAC address is local\n", dev_ll->dev->device_fh);
if (dev_ll->dev->remove) {
/*drop the packet if the device is marked for removal*/
- LOG_DEBUG(VHOST_DATA, "(%"PRIu64") Device is marked for removal\n", dev_ll->dev->device_fh);
+ RTE_LOG(DEBUG, VHOST_DATA, "(%" PRIu64 ") "
+ "Device is marked for removal\n",
+ dev_ll->dev->device_fh);
} else {
/*send the packet to the local virtio device*/
ret = virtio_dev_rx(dev_ll->dev, &m, 1);
@@ -849,7 +829,8 @@ virtio_tx_route(struct virtio_net* dev, struct rte_mbuf *m, struct rte_mempool *
return;
}
- LOG_DEBUG(VHOST_DATA, "(%"PRIu64") TX: MAC address is external\n", dev->device_fh);
+ RTE_LOG(DEBUG, VHOST_DATA, "(%" PRIu64 ") TX: "
+ "MAC address is external\n", dev->device_fh);
/*Add packet to the port tx queue*/
tx_q = &lcore_tx_queue[lcore_id];
@@ -922,7 +903,8 @@ virtio_dev_tx(struct virtio_net* dev, struct rte_mempool *mbuf_pool)
if (vq->last_used_idx == avail_idx)
return;
- LOG_DEBUG(VHOST_DATA, "(%"PRIu64") virtio_dev_tx()\n", dev->device_fh);
+ RTE_LOG(DEBUG, VHOST_DATA, "(%" PRIu64 ") virtio_dev_tx()\n",
+ dev->device_fh);
/* Prefetch available ring to retrieve head indexes. */
rte_prefetch0(&vq->avail->ring[vq->last_used_idx & (vq->size - 1)]);
@@ -931,7 +913,8 @@ virtio_dev_tx(struct virtio_net* dev, struct rte_mempool *mbuf_pool)
free_entries = avail_idx - vq->last_used_idx;
free_entries = unlikely(free_entries < MAX_PKT_BURST) ? free_entries : MAX_PKT_BURST;
- LOG_DEBUG(VHOST_DATA, "(%"PRIu64") Buffers available %d\n", dev->device_fh, free_entries);
+ RTE_LOG(DEBUG, VHOST_DATA, "(%" PRIu64 ") Buffers available %d\n",
+ dev->device_fh, free_entries);
/* Retrieve all of the head indexes first to avoid caching issues. */
for (i = 0; i < free_entries; i++)
head[i] = vq->avail->ring[(vq->last_used_idx + i) & (vq->size - 1)];
@@ -1020,7 +1003,9 @@ switch_worker(__attribute__((unused)) void *arg)
if (unlikely(diff_tsc > drain_tsc)) {
if (tx_q->len) {
- LOG_DEBUG(VHOST_DATA, "TX queue drained after timeout with burst size %u \n", tx_q->len);
+ RTE_LOG(DEBUG, VHOST_DATA,
+ "TX queue drained after timeout with burst size %u\n",
+ tx_q->len);
/*Tx any packets in the queue*/
ret = rte_eth_tx_burst(ports[0], (uint16_t)tx_q->txq_id,
@@ -1482,9 +1467,6 @@ main(int argc, char *argv[])
if (mbuf_pool == NULL)
rte_exit(EXIT_FAILURE, "Cannot create mbuf pool\n");
- /* Set log level. */
- rte_set_log_level(LOG_LEVEL);
-
/* initialize all ports */
for (portid = 0; portid < nb_ports; portid++) {
/* skip ports that are not enabled */
@@ -34,17 +34,6 @@
#ifndef _MAIN_H_
#define _MAIN_H_
-//#define DEBUG
-
-#ifdef DEBUG
-#define LOG_LEVEL RTE_LOG_DEBUG
-#define LOG_DEBUG(log_type, fmt, args...) \
- RTE_LOG(DEBUG, log_type, fmt, ##args)
-#else
-#define LOG_LEVEL RTE_LOG_INFO
-#define LOG_DEBUG(log_type, fmt, args...) do{} while(0)
-#endif
-
/* Macros for printing using RTE_LOG */
#define RTE_LOGTYPE_VHOST_CONFIG RTE_LOGTYPE_USER1
#define RTE_LOGTYPE_VHOST_DATA RTE_LOGTYPE_USER2