X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=examples%2Fserver_node_efd%2Fnode%2Fnode.c;h=4580a44e3e5ddd8521b7b49e0e9f8d8d26949626;hb=9a212dc06c7aaf09b146d9c3dcfd584d741634c1;hp=a6c0c70dddffdec54406d518121e667cc52d8c89;hpb=ed2a80fdf672951cdd12b2f8828c9a4e20e1e3da;p=dpdk.git diff --git a/examples/server_node_efd/node/node.c b/examples/server_node_efd/node/node.c index a6c0c70ddd..4580a44e3e 100644 --- a/examples/server_node_efd/node/node.c +++ b/examples/server_node_efd/node/node.c @@ -1,34 +1,5 @@ -/*- - * BSD LICENSE - * - * Copyright(c) 2016-2017 Intel Corporation. All rights reserved. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Intel Corporation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2016-2017 Intel Corporation */ #include @@ -53,13 +24,10 @@ #include #include #include -#include -#include #include #include #include #include -#include #include #include #include @@ -79,7 +47,7 @@ static uint8_t node_id; #define MBQ_CAPACITY 32 /* maps input ports to output ports for packets */ -static uint8_t output_ports[RTE_MAX_ETHPORTS]; +static uint16_t output_ports[RTE_MAX_ETHPORTS]; /* buffers up a set of packet that are ready to send */ struct rte_eth_dev_tx_buffer *tx_buffer[RTE_MAX_ETHPORTS]; @@ -156,7 +124,7 @@ static void flush_tx_error_callback(struct rte_mbuf **unsent, uint16_t count, void *userdata) { int i; - uint8_t port_id = (uintptr_t)userdata; + uint16_t port_id = (uintptr_t)userdata; tx_stats->tx_drop[port_id] += count; @@ -167,7 +135,7 @@ flush_tx_error_callback(struct rte_mbuf **unsent, uint16_t count, } static void -configure_tx_buffer(uint8_t port_id, uint16_t size) +configure_tx_buffer(uint16_t port_id, uint16_t size) { int ret; @@ -176,16 +144,17 @@ configure_tx_buffer(uint8_t port_id, uint16_t size) RTE_ETH_TX_BUFFER_SIZE(size), 0, rte_eth_dev_socket_id(port_id)); if (tx_buffer[port_id] == NULL) - rte_exit(EXIT_FAILURE, "Cannot allocate buffer for tx " - "on port %u\n", (unsigned int) port_id); + rte_exit(EXIT_FAILURE, + "Cannot allocate buffer for tx on port %u\n", port_id); rte_eth_tx_buffer_init(tx_buffer[port_id], size); ret = rte_eth_tx_buffer_set_err_callback(tx_buffer[port_id], flush_tx_error_callback, (void *)(intptr_t)port_id); if (ret < 0) - rte_exit(EXIT_FAILURE, "Cannot set error callback for " - "tx buffer on port %u\n", (unsigned int) port_id); + rte_exit(EXIT_FAILURE, + "Cannot set error callback for tx buffer on port %u\n", + port_id); } /* @@ -220,6 +189,8 @@ configure_output_ports(const struct shared_info *info) * the node will handle, which will be used to decide if packet * is transmitted or dropped. */ + +/* Creation of hash table. 8< */ static struct rte_hash * create_hash_table(const struct shared_info *info) { @@ -274,6 +245,7 @@ populate_hash_table(const struct rte_hash *h, const struct shared_info *info) printf("Hash table: Adding 0x%x keys\n", num_flows_node); } +/* >8 End of creation of hash table. */ /* * This function performs routing of packets @@ -284,8 +256,8 @@ static inline void transmit_packet(struct rte_mbuf *buf) { int sent; - const uint8_t in_port = buf->port; - const uint8_t out_port = output_ports[in_port]; + const uint16_t in_port = buf->port; + const uint16_t out_port = output_ports[in_port]; struct rte_eth_dev_tx_buffer *buffer = tx_buffer[out_port]; sent = rte_eth_tx_buffer(out_port, node_id, buffer, buf); @@ -294,10 +266,11 @@ transmit_packet(struct rte_mbuf *buf) } +/* Packets dequeued from the shared ring. 8< */ static inline void handle_packets(struct rte_hash *h, struct rte_mbuf **bufs, uint16_t num_packets) { - struct ipv4_hdr *ipv4_hdr; + struct rte_ipv4_hdr *ipv4_hdr; uint32_t ipv4_dst_ip[PKT_READ_SIZE]; const void *key_ptrs[PKT_READ_SIZE]; unsigned int i; @@ -305,8 +278,8 @@ handle_packets(struct rte_hash *h, struct rte_mbuf **bufs, uint16_t num_packets) for (i = 0; i < num_packets; i++) { /* Handle IPv4 header.*/ - ipv4_hdr = rte_pktmbuf_mtod_offset(bufs[i], struct ipv4_hdr *, - sizeof(struct ether_hdr)); + ipv4_hdr = rte_pktmbuf_mtod_offset(bufs[i], + struct rte_ipv4_hdr *, sizeof(struct rte_ether_hdr)); ipv4_dst_ip[i] = ipv4_hdr->dst_addr; key_ptrs[i] = &ipv4_dst_ip[i]; } @@ -324,6 +297,7 @@ handle_packets(struct rte_hash *h, struct rte_mbuf **bufs, uint16_t num_packets) } } } +/* >8 End of packets dequeueing. */ /* * Application main function - loops through @@ -351,9 +325,10 @@ main(int argc, char *argv[]) if (parse_app_args(argc, argv) < 0) rte_exit(EXIT_FAILURE, "Invalid command-line arguments\n"); - if (rte_eth_dev_count() == 0) + if (rte_eth_dev_count_avail() == 0) rte_exit(EXIT_FAILURE, "No Ethernet ports - bye\n"); + /* Attaching to the server process memory. 8< */ rx_ring = rte_ring_lookup(get_rx_queue_name(node_id)); if (rx_ring == NULL) rte_exit(EXIT_FAILURE, "Cannot get RX ring - " @@ -369,6 +344,7 @@ main(int argc, char *argv[]) info = mz->addr; tx_stats = &(info->tx_stats[node_id]); filter_stats = &(info->filter_stats[node_id]); + /* >8 End of attaching to the server process memory. */ configure_output_ports(info); @@ -383,7 +359,7 @@ main(int argc, char *argv[]) for (;;) { uint16_t rx_pkts = PKT_READ_SIZE; - uint8_t port; + uint16_t port; /* * Try dequeuing max possible packets first, if that fails, @@ -392,7 +368,7 @@ main(int argc, char *argv[]) */ while (rx_pkts > 0 && unlikely(rte_ring_dequeue_bulk(rx_ring, pkts, - rx_pkts) != 0)) + rx_pkts, NULL) == 0)) rx_pkts = (uint16_t)RTE_MIN(rte_ring_count(rx_ring), PKT_READ_SIZE); @@ -414,4 +390,7 @@ main(int argc, char *argv[]) need_flush = 1; } + + /* clean up the EAL */ + rte_eal_cleanup(); }