Imported Upstream version 17.05
[deb_dpdk.git] / examples / quota_watermark / qw / init.c
index c208721..b6264fc 100644 (file)
 
 
 static const struct rte_eth_conf port_conf = {
-       .rxmode = {
-               .split_hdr_size = 0,
-               .header_split   = 0, /**< Header Split disabled */
-               .hw_ip_checksum = 0, /**< IP checksum offload disabled */
-               .hw_vlan_filter = 0, /**< VLAN filtering disabled */
-               .jumbo_frame    = 0, /**< Jumbo Frame Support disabled */
-               .hw_strip_crc   = 0, /**< CRC stripped by hardware */
-       },
-       .txmode = {
-               .mq_mode = ETH_DCB_NONE,
-       },
+               .rxmode = {
+                       .split_hdr_size = 0,
+                       .header_split   = 0, /**< Header Split disabled */
+                       .hw_ip_checksum = 0, /**< IP csum offload disabled */
+                       .hw_vlan_filter = 0, /**< VLAN filtering disabled */
+                       .jumbo_frame    = 0, /**< Jumbo Frame disabled */
+                       .hw_strip_crc   = 1, /**< CRC stripped by hardware */
+               },
+               .txmode = {
+                       .mq_mode = ETH_DCB_NONE,
+               },
 };
 
 static struct rte_eth_fc_conf fc_conf = {
-    .mode       = RTE_FC_TX_PAUSE,
-    .high_water = 80 * 510 / 100,
-    .low_water  = 60 * 510 / 100,
-    .pause_time = 1337,
-    .send_xon   = 0,
+               .mode       = RTE_FC_TX_PAUSE,
+               .high_water = 80 * 510 / 100,
+               .low_water  = 60 * 510 / 100,
+               .pause_time = 1337,
+               .send_xon   = 0,
 };
 
 
 void configure_eth_port(uint8_t port_id)
 {
-    int ret;
-
-    rte_eth_dev_stop(port_id);
-
-    ret = rte_eth_dev_configure(port_id, 1, 1, &port_conf);
-    if (ret < 0)
-        rte_exit(EXIT_FAILURE, "Cannot configure port %u (error %d)\n",
-                               (unsigned) port_id, ret);
-
-    /* Initialize the port's RX queue */
-    ret = rte_eth_rx_queue_setup(port_id, 0, RX_DESC_PER_QUEUE,
-                               rte_eth_dev_socket_id(port_id),
-                               NULL,
-                               mbuf_pool);
-    if (ret < 0)
-        rte_exit(EXIT_FAILURE, "Failed to setup RX queue on "
-                               "port %u (error %d)\n", (unsigned) port_id, ret);
-
-    /* Initialize the port's TX queue */
-    ret = rte_eth_tx_queue_setup(port_id, 0, TX_DESC_PER_QUEUE,
-                               rte_eth_dev_socket_id(port_id),
-                               NULL);
-    if (ret < 0)
-        rte_exit(EXIT_FAILURE, "Failed to setup TX queue on "
-                               "port %u (error %d)\n", (unsigned) port_id, ret);
-
-    /* Initialize the port's flow control */
-    ret = rte_eth_dev_flow_ctrl_set(port_id, &fc_conf);
-    if (ret < 0)
-        rte_exit(EXIT_FAILURE, "Failed to setup hardware flow control on "
-                               "port %u (error %d)\n", (unsigned) port_id, ret);
-
-    /* Start the port */
-    ret = rte_eth_dev_start(port_id);
-    if (ret < 0)
-        rte_exit(EXIT_FAILURE, "Failed to start port %u (error %d)\n",
-                               (unsigned) port_id, ret);
-
-    /* Put it in promiscuous mode */
-    rte_eth_promiscuous_enable(port_id);
+       int ret;
+
+       rte_eth_dev_stop(port_id);
+
+       ret = rte_eth_dev_configure(port_id, 1, 1, &port_conf);
+       if (ret < 0)
+               rte_exit(EXIT_FAILURE, "Cannot configure port %u (error %d)\n",
+                               (unsigned int) port_id, ret);
+
+       /* Initialize the port's RX queue */
+       ret = rte_eth_rx_queue_setup(port_id, 0, RX_DESC_PER_QUEUE,
+                       rte_eth_dev_socket_id(port_id),
+                       NULL,
+                       mbuf_pool);
+       if (ret < 0)
+               rte_exit(EXIT_FAILURE,
+                               "Failed to setup RX queue on port %u (error %d)\n",
+                               (unsigned int) port_id, ret);
+
+       /* Initialize the port's TX queue */
+       ret = rte_eth_tx_queue_setup(port_id, 0, TX_DESC_PER_QUEUE,
+                       rte_eth_dev_socket_id(port_id),
+                       NULL);
+       if (ret < 0)
+               rte_exit(EXIT_FAILURE,
+                               "Failed to setup TX queue on port %u (error %d)\n",
+                               (unsigned int) port_id, ret);
+
+       /* Initialize the port's flow control */
+       ret = rte_eth_dev_flow_ctrl_set(port_id, &fc_conf);
+       if (ret < 0)
+               rte_exit(EXIT_FAILURE,
+                               "Failed to setup hardware flow control on port %u (error %d)\n",
+                               (unsigned int) port_id, ret);
+
+       /* Start the port */
+       ret = rte_eth_dev_start(port_id);
+       if (ret < 0)
+               rte_exit(EXIT_FAILURE, "Failed to start port %u (error %d)\n",
+                               (unsigned int) port_id, ret);
+
+       /* Put it in promiscuous mode */
+       rte_eth_promiscuous_enable(port_id);
 }
 
 void
 init_dpdk(void)
 {
-    if (rte_eth_dev_count() < 2)
-        rte_exit(EXIT_FAILURE, "Not enough ethernet port available\n");
+       if (rte_eth_dev_count() < 2)
+               rte_exit(EXIT_FAILURE, "Not enough ethernet port available\n");
 }
 
 void init_ring(int lcore_id, uint8_t port_id)
 {
-    struct rte_ring *ring;
-    char ring_name[RTE_RING_NAMESIZE];
+       struct rte_ring *ring;
+       char ring_name[RTE_RING_NAMESIZE];
 
-    snprintf(ring_name, RTE_RING_NAMESIZE,
-               "core%d_port%d", lcore_id, port_id);
-    ring = rte_ring_create(ring_name, RING_SIZE, rte_socket_id(),
-                           RING_F_SP_ENQ | RING_F_SC_DEQ);
+       snprintf(ring_name, RTE_RING_NAMESIZE,
+                       "core%d_port%d", lcore_id, port_id);
+       ring = rte_ring_create(ring_name, RING_SIZE, rte_socket_id(),
+                       RING_F_SP_ENQ | RING_F_SC_DEQ);
 
-    if (ring == NULL)
-        rte_exit(EXIT_FAILURE, "%s\n", rte_strerror(rte_errno));
+       if (ring == NULL)
+               rte_exit(EXIT_FAILURE, "%s\n", rte_strerror(rte_errno));
 
-    rte_ring_set_water_mark(ring, 80 * RING_SIZE / 100);
+       *high_watermark = 80 * RING_SIZE / 100;
 
-    rings[lcore_id][port_id] = ring;
+       rings[lcore_id][port_id] = ring;
 }
 
 void
 pair_ports(void)
 {
-    uint8_t i, j;
-
-    /* Pair ports with their "closest neighbour" in the portmask */
-    for (i = 0; i < RTE_MAX_ETHPORTS; i++)
-        if (is_bit_set(i, portmask))
-            for (j = (uint8_t) (i + 1); j < RTE_MAX_ETHPORTS; j++)
-                if (is_bit_set(j, portmask)) {
-                    port_pairs[i] = j;
-                    port_pairs[j] = i;
-                    i = j;
-                    break;
-                }
+       uint8_t i, j;
+
+       /* Pair ports with their "closest neighbour" in the portmask */
+       for (i = 0; i < RTE_MAX_ETHPORTS; i++)
+               if (is_bit_set(i, portmask))
+                       for (j = (uint8_t) (i + 1); j < RTE_MAX_ETHPORTS; j++)
+                               if (is_bit_set(j, portmask)) {
+                                       port_pairs[i] = j;
+                                       port_pairs[j] = i;
+                                       i = j;
+                                       break;
+                               }
 }
 
 void
 setup_shared_variables(void)
 {
-    const struct rte_memzone *qw_memzone;
+       const struct rte_memzone *qw_memzone;
 
-    qw_memzone = rte_memzone_reserve(QUOTA_WATERMARK_MEMZONE_NAME, 2 * sizeof(int),
-                                     rte_socket_id(), RTE_MEMZONE_2MB);
-    if (qw_memzone == NULL)
-        rte_exit(EXIT_FAILURE, "%s\n", rte_strerror(rte_errno));
+       qw_memzone = rte_memzone_reserve(QUOTA_WATERMARK_MEMZONE_NAME,
+                       3 * sizeof(int), rte_socket_id(), 0);
+       if (qw_memzone == NULL)
+               rte_exit(EXIT_FAILURE, "%s\n", rte_strerror(rte_errno));
 
-    quota = qw_memzone->addr;
-    low_watermark = (unsigned int *) qw_memzone->addr + 1;
+       quota = qw_memzone->addr;
+       low_watermark = (unsigned int *) qw_memzone->addr + 1;
+       high_watermark = (unsigned int *) qw_memzone->addr + 2;
 }