doc: update flow filtering example guide

This patch updates the user guidance of example application of
flow_filtering, with more details of Tx queues configuration.

Signed-off-by: Wei Zhao <wei.zhao1@intel.com>
Reviewed-by: Ori Kam <orika@mellanox.com>
This commit is contained in:
Wei Zhao 2018-01-31 10:12:27 +08:00 committed by Ferruh Yigit
parent fbab400f61
commit cd148a3c80

View File

@ -167,44 +167,63 @@ application is shown below:
struct rte_eth_conf port_conf = { struct rte_eth_conf port_conf = {
.rxmode = { .rxmode = {
.split_hdr_size = 0, .split_hdr_size = 0,
/**< Header Split disabled */ .ignore_offload_bitfield = 1,
.header_split = 0, .offloads = DEV_RX_OFFLOAD_CRC_STRIP,
/**< IP checksum offload disabled */ },
.hw_ip_checksum = 0, .txmode = {
/**< VLAN filtering disabled */ .offloads =
.hw_vlan_filter = 0, DEV_TX_OFFLOAD_VLAN_INSERT |
/**< Jumbo Frame Support disabled */ DEV_TX_OFFLOAD_IPV4_CKSUM |
.jumbo_frame = 0, DEV_TX_OFFLOAD_UDP_CKSUM |
/**< CRC stripped by hardware */ DEV_TX_OFFLOAD_TCP_CKSUM |
.hw_strip_crc = 1, DEV_TX_OFFLOAD_SCTP_CKSUM |
DEV_TX_OFFLOAD_TCP_TSO,
}, },
}; };
struct rte_eth_txconf txq_conf;
struct rte_eth_rxconf rxq_conf;
struct rte_eth_dev_info dev_info;
printf(":: initializing port: %d\n", port_id); printf(":: initializing port: %d\n", port_id);
ret = rte_eth_dev_configure(port_id, ret = rte_eth_dev_configure(port_id,
nr_queues, nr_queues, &port_conf); nr_queues, nr_queues, &port_conf);
if (ret < 0) { if (ret < 0) {
rte_exit(EXIT_FAILURE, rte_exit(EXIT_FAILURE,
":: cannot configure device: err=%d, port=%u\n", ":: cannot configure device: err=%d, port=%u\n",
ret, port_id); ret, port_id);
} }
rte_eth_dev_info_get(port_id, &dev_info);
rxq_conf = dev_info.default_rxconf;
rxq_conf.offloads = port_conf.rxmode.offloads;
/* only set Rx queues: something we care only so far */ /* only set Rx queues: something we care only so far */
for (i = 0; i < nr_queues; i++) { for (i = 0; i < nr_queues; i++) {
ret = rte_eth_rx_queue_setup(port_id, i, 512, ret = rte_eth_rx_queue_setup(port_id, i, 512,
rte_eth_dev_socket_id(port_id), rte_eth_dev_socket_id(port_id),
NULL, &rxq_conf,
mbuf_pool); mbuf_pool);
if (ret < 0) { if (ret < 0) {
rte_exit(EXIT_FAILURE, rte_exit(EXIT_FAILURE,
":: Rx queue setup failed: err=%d, port=%u\n", ":: Rx queue setup failed: err=%d, port=%u\n",
ret, port_id); ret, port_id);
} }
} }
txq_conf = dev_info.default_txconf;
txq_conf.offloads = port_conf.txmode.offloads;
for (i = 0; i < nr_queues; i++) {
ret = rte_eth_tx_queue_setup(port_id, i, 512,
rte_eth_dev_socket_id(port_id),
&txq_conf);
if (ret < 0) {
rte_exit(EXIT_FAILURE,
":: Tx queue setup failed: err=%d, port=%u\n",
ret, port_id);
}
}
rte_eth_promiscuous_enable(port_id); rte_eth_promiscuous_enable(port_id);
ret = rte_eth_dev_start(port_id); ret = rte_eth_dev_start(port_id);
if (ret < 0) { if (ret < 0) {
rte_exit(EXIT_FAILURE, rte_exit(EXIT_FAILURE,
@ -223,20 +242,21 @@ The Ethernet port is configured with default settings using the
.. code-block:: c .. code-block:: c
struct rte_eth_conf port_conf = { struct rte_eth_conf port_conf = {
.rxmode = { .rxmode = {
.split_hdr_size = 0, .split_hdr_size = 0,
/**< Header Split disabled */ .ignore_offload_bitfield = 1,
.header_split = 0, .offloads = DEV_RX_OFFLOAD_CRC_STRIP,
/**< IP checksum offload disabled */ },
.hw_ip_checksum = 0, .txmode = {
/**< VLAN filtering disabled */ .offloads =
.hw_vlan_filter = 0, DEV_TX_OFFLOAD_VLAN_INSERT |
/**< Jumbo Frame Support disabled */ DEV_TX_OFFLOAD_IPV4_CKSUM |
.jumbo_frame = 0, DEV_TX_OFFLOAD_UDP_CKSUM |
/**< CRC stripped by hardware */ DEV_TX_OFFLOAD_TCP_CKSUM |
.hw_strip_crc = 1, DEV_TX_OFFLOAD_SCTP_CKSUM |
}, DEV_TX_OFFLOAD_TCP_TSO,
}; },
};
ret = rte_eth_dev_configure(port_id, nr_queues, nr_queues, &port_conf); ret = rte_eth_dev_configure(port_id, nr_queues, nr_queues, &port_conf);
if (ret < 0) { if (ret < 0) {
@ -244,23 +264,37 @@ The Ethernet port is configured with default settings using the
":: cannot configure device: err=%d, port=%u\n", ":: cannot configure device: err=%d, port=%u\n",
ret, port_id); ret, port_id);
} }
rte_eth_dev_info_get(port_id, &dev_info);
rxq_conf = dev_info.default_rxconf;
rxq_conf.offloads = port_conf.rxmode.offloads;
For this example we are configuring number of rx queues that are connected to For this example we are configuring number of rx and tx queues that are connected
a single port. to a single port.
.. code-block:: c .. code-block:: c
for (i = 0; i < nr_queues; i++) { for (i = 0; i < nr_queues; i++) {
ret = rte_eth_rx_queue_setup(port_id, i, 512, ret = rte_eth_rx_queue_setup(port_id, i, 512,
rte_eth_dev_socket_id(port_id), rte_eth_dev_socket_id(port_id),
NULL, &rxq_conf,
mbuf_pool); mbuf_pool);
if (ret < 0) { if (ret < 0) {
rte_exit(EXIT_FAILURE, rte_exit(EXIT_FAILURE,
":: Rx queue setup failed: err=%d, port=%u\n", ":: Rx queue setup failed: err=%d, port=%u\n",
ret, port_id); ret, port_id);
} }
} }
for (i = 0; i < nr_queues; i++) {
ret = rte_eth_tx_queue_setup(port_id, i, 512,
rte_eth_dev_socket_id(port_id),
&txq_conf);
if (ret < 0) {
rte_exit(EXIT_FAILURE,
":: Tx queue setup failed: err=%d, port=%u\n",
ret, port_id);
}
}
In the next step we create and apply the flow rule. which is to send packets In the next step we create and apply the flow rule. which is to send packets
with destination ip equals to 192.168.1.1 to queue number 1. The detail with destination ip equals to 192.168.1.1 to queue number 1. The detail