X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=doc%2Fguides%2Ftestpmd_app_ug%2Ftestpmd_funcs.rst;h=3f076c848395107225bdc5dbc63606ef486b7913;hb=1b20b07d86872475ecca28af1a00ad9ad45c4c07;hp=a99e14d8bb36a28c8baa38a316b694cc3a1e9554;hpb=edab33b1c01d508fdd934c06ee27f84250d2749a;p=dpdk.git diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst index a99e14d8bb..3f076c8483 100644 --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst @@ -1,5 +1,5 @@ .. BSD LICENSE - Copyright(c) 2010-2014 Intel Corporation. All rights reserved. + Copyright(c) 2010-2015 Intel Corporation. All rights reserved. All rights reserved. Redistribution and use in source and binary forms, with or without @@ -138,16 +138,32 @@ For example: ********************* Infos for port 0 ********************* MAC address: XX:XX:XX:XX:XX:XX + Connect to socket: 0 + memory allocation on the socket: 0 Link status: up - Link speed: 10000 Mbps + Link speed: 40000 Mbps Link duplex: full-duplex Promiscuous mode: enabled Allmulticast mode: disabled - Maximum number of MAC addresses: 127 + Maximum number of MAC addresses: 64 + Maximum number of MAC addresses of hash filtering: 0 VLAN offload: strip on filter on qinq(extend) off + Redirection table size: 512 + Supported flow types: + ipv4-frag + ipv4-tcp + ipv4-udp + ipv4-sctp + ipv4-other + ipv6-frag + ipv6-tcp + ipv6-udp + ipv6-sctp + ipv6-other + l2_payload show port rss reta ~~~~~~~~~~~~~~~~~~ @@ -423,6 +439,8 @@ rx_vlan add (vlan_id|all) (port_id) .. note:: VLAN filter must be set on that port. VLAN ID < 4096. + Depending on the NIC used, number of vlan_ids may be limited to the maximum entries + in VFTA table. This is important if enabling all vlan_ids. rx_vlan rm ~~~~~~~~~~ @@ -485,14 +503,24 @@ rx_vxlan_port rm (udp_port) (port_id) tx_vlan set ~~~~~~~~~~~ -Set hardware insertion of VLAN ID in packets sent on a port: +Set hardware insertion of VLAN IDs in packets sent on a port: -tx_vlan set (vlan_id) (port_id) +tx_vlan set (port_id) vlan_id[, vlan_id_outer] + +.. code-block:: console + + Set a single VLAN ID (5) insertion on port 0. + + tx_vlan set 0 5 + + Set double VLAN ID (inner: 2, outer: 3) insertion on port 1. + + tx_vlan set 1 2 3 tx_vlan set pvid ~~~~~~~~~~~~~~~~ -Set port based hardware insertion of VLAN ID in pacekts sent on a port: +Set port based hardware insertion of VLAN ID in packets sent on a port: tx_vlan set pvid (port_id) (vlan_id) (on|off) @@ -503,28 +531,60 @@ Disable hardware insertion of a VLAN header in packets sent on a port: tx_vlan reset (port_id) -tx_checksum set -~~~~~~~~~~~~~~~ +csum set +~~~~~~~~ Select hardware or software calculation of the checksum when transmitting a packet using the csum forward engine: -tx_cksum set (ip|udp|tcp|sctp|vxlan) +csum set (ip|udp|tcp|sctp|outer-ip) (hw|sw) (port_id) -ip|udp|tcp|sctp always concern the inner layer. -vxlan concerns the outer IP and UDP layer (in case the packet -is recognized as a vxlan packet by the forward engine) +- ip|udp|tcp|sctp always concern the inner layer. + +- outer-ip concerns the outer IP layer (only for IPv4) in case the packet is recognized + as a tunnel packet by the forward engine (vxlan, gre and ipip are + supported). See "csum parse-tunnel" command. .. note:: Check the NIC Datasheet for hardware limits. -tx_checksum show -~~~~~~~~~~~~~~~~ +csum parse-tunnel +~~~~~~~~~~~~~~~~~ + +Define how tunneled packets should be handled by the csum forward +engine. + +csum parse-tunnel (on|off) (tx_port_id) + +If enabled, the csum forward engine will try to recognize supported +tunnel headers (vxlan, gre, ipip). + +If disabled, treat tunnel packets as non-tunneled packets (a inner +header is handled as a packet payload). + +.. note:: + + The port argument is the TX port like in the "csum set" command. + +Example: + +Consider a packet as following: +"eth_out/ipv4_out/udp_out/vxlan/eth_in/ipv4_in/tcp_in" + +- If parse-tunnel is enabled, the ip|udp|tcp|sctp parameters of "csum + set" command are about inner headers (here ipv4_in and tcp_in), and the + outer-ip parameter is about outer headers (here ipv4_out). + +- If parse-tunnel is disabled, the ip|udp|tcp|sctp parameters of "csum + set" command are about outer headers, here ipv4_out and udp_out. + +csum show +~~~~~~~~~ Display tx checksum offload configuration: -tx_checksum show (port_id) +csum show (port_id) tso set ~~~~~~~ @@ -534,7 +594,8 @@ Enable TCP Segmentation Offload in csum forward engine: tso set (segsize) (port_id) .. note:: - Please check the NIC datasheet for HW limits + + Check the NIC datasheet for hardware limits tso show ~~~~~~~~ @@ -574,6 +635,8 @@ The available information categories are: * icmpecho: receives a burst of packets, lookup for IMCP echo requests and, if any, send back ICMP echo replies. +* ieee1588: demonstrate L2 IEEE1588 V2 PTP timestamping for RX and TX. Requires ``CONFIG_RTE_LIBRTE_IEEE1588=y``. + Note: TX timestamping is only available in the "Full Featured" TX path. To force ``testpmd`` into this mode set ``--txqflags=0``. Example: @@ -721,9 +784,13 @@ set port (port_id) vf (vf_id) rate (rate_value) queue_mask (queue_mask) set port - mirror rule ~~~~~~~~~~~~~~~~~~~~~~ -Set port or vlan type mirror rule for a port. +Set pool or vlan type mirror rule for a port: + +set port (port_id) mirror-rule (rule_id) (pool-mirror-up|pool-mirror-down|vlan-mirror) (poolmask|vlanid[,vlanid]*) dst-pool (pool_id) (on|off) + +Set link mirror rule for a port: -set port (port_id) mirror-rule (rule_id) (pool-mirror|vlan-mirror) (poolmask|vlanid[,vlanid]*) dst-pool (pool_id) (on|off) +set port (port_id) mirror-rule (rule_id) (uplink-mirror|downlink-mirror) dst-pool (pool_id) (on|off) For example to enable mirror traffic with vlan 0,1 to pool 0: @@ -815,54 +882,135 @@ Attach a port specified by pci address or virtual device args. To attach a new pci device, the device should be recognized by kernel first. Then it should be moved under DPDK management. Finally the port can be attached to testpmd. -On the other hand, to attach a port created by virtual device, above steps are not needed. + +For example, to move a pci device using ixgbe under DPDK management: + +.. code-block:: console + + ./tools/dpdk_nic_bind.py --status + + Network devices using DPDK-compatible driver + ============================================ + + + Network devices using kernel driver + =================================== + 0000:0a:00.0 '82599ES 10-Gigabit SFI/SFP+ Network Connection' if=eth2 drv=ixgbe unused= + + ./tools/dpdk_nic_bind.py -b igb_uio 0000:0a:00.0 + ./tools/dpdk_nic_bind.py --status + + Network devices using DPDK-compatible driver + ============================================ + 0000:0a:00.0 '82599ES 10-Gigabit SFI/SFP+ Network Connection' drv=igb_uio unused= + +To attach a port created by virtual device, above steps are not needed. port attach (identifier) -For example, to attach a port whose pci address is 0000:02:00.0. +For example, to attach a port whose pci address is 0000:0a:00.0. .. code-block:: console - testpmd> port attach 0000:02:00.0 + testpmd> port attach 0000:0a:00.0 Attaching a new port... - ... snip ... + EAL: PCI device 0000:0a:00.0 on NUMA socket -1 + EAL: probe driver: 8086:10fb rte_ixgbe_pmd + EAL: PCI memory mapped at 0x7f83bfa00000 + EAL: PCI memory mapped at 0x7f83bfa80000 + PMD: eth_ixgbe_dev_init(): MAC: 2, PHY: 18, SFP+: 5 + PMD: eth_ixgbe_dev_init(): port 0 vendorID=0x8086 deviceID=0x10fb Port 0 is attached. Now total ports is 1 Done + testpmd> For example, to attach a port created by pcap PMD. .. code-block:: console - testpmd> port attach eth_pcap0,iface=eth0 + testpmd> port attach eth_pcap0 Attaching a new port... - ... snip ... + PMD: Initializing pmd_pcap for eth_pcap0 + PMD: Creating pcap-backed ethdev on numa socket 0 Port 0 is attached. Now total ports is 1 Done + testpmd> -In this case, identifier is "eth_pcap0,iface=eth0". +In this case, identifier is "eth_pcap0". This identifier format is the same as "--vdev" format of DPDK applications. +For example, to re-attach a bonded port which has been previously detached, +the mode and slave parameters must be given. + +.. code-block:: console + + testpmd> port attach eth_bond_testpmd_0,mode=0,slave=1 + Attaching a new port... + EAL: Initializing pmd_bond for eth_bond_testpmd_0 + EAL: Create bonded device eth_bond_testpmd_0 on port 0 in mode 0 on socket 0. + Port 0 is attached. Now total ports is 1 + Done + + port detach ~~~~~~~~~~~ Detach a specific port. Before detaching a port, the port should be closed. -Also to remove a pci device completely from the system, first detach the port from testpmd. -Then the device should be moved under kernel management. -Finally the device can be removed using kernel pci hotplug functionality. -On the other hand, to remove a port created by a virtual device, above steps are not needed. port detach (port_id) -For example, to detach a port 0. +For example, to detach a pci device port 0. .. code-block:: console + testpmd> port close 0 + Closing ports... + Done testpmd> port detach 0 Detaching a port... - ... snip ... + EAL: PCI device 0000:0a:00.0 on NUMA socket -1 + EAL: remove driver: 8086:10fb rte_ixgbe_pmd + EAL: PCI memory unmapped at 0x7f83bfa00000 + EAL: PCI memory unmapped at 0x7f83bfa80000 Done + testpmd> + +For example, to detach a virtual device port 0. + +.. code-block:: console + + testpmd> port close 0 + Closing ports... + Done + testpmd> port detach 0 + Detaching a port... + PMD: Closing pcap ethdev on numa socket 0 + Port 'eth_pcap0' is detached. Now total ports is 0 + Done + testpmd> + +To remove a pci device completely from the system, first detach the port from testpmd. +Then the device should be moved under kernel management. +Finally the device can be removed using kernel pci hotplug functionality. + +For example, to move a pci device under kernel management: + +.. code-block:: console + + ./tools/dpdk_nic_bind.py -b ixgbe 0000:0a:00.0 + ./tools/dpdk_nic_bind.py --status + + Network devices using DPDK-compatible driver + ============================================ + + + Network devices using kernel driver + =================================== + 0000:0a:00.0 '82599ES 10-Gigabit SFI/SFP+ Network Connection' if=eth2 drv=ixgbe unused=igb_uio + +To remove a port created by a virtual device, above steps are not needed. port start ~~~~~~~~~~ @@ -952,6 +1100,39 @@ Hardware VLAN is on by default. The off option is equivalent to the --disable-hw-vlan command-line option. +port config - VLAN filter +~~~~~~~~~~~~~~~~~~~~~~~~~ + +Set hardware VLAN filter on or off for all ports: + +port config all hw-vlan-filter (on|off) + +Hardware VLAN filter is on by default. + +The off option is equivalent to the --disable-hw-vlan-filter command-line option. + +port config - VLAN strip +~~~~~~~~~~~~~~~~~~~~~~~~ + +Set hardware VLAN strip on or off for all ports: + +port config all hw-vlan-strip (on|off) + +Hardware VLAN strip is on by default. + +The off option is equivalent to the --disable-hw-vlan-strip command-line option. + +port config - VLAN extend +~~~~~~~~~~~~~~~~~~~~~~~~~ + +Set hardware VLAN extend on or off for all ports: + +port config all hw-vlan-extend (on|off) + +Hardware VLAN extend is off by default. + +The off option is equivalent to the --disable-hw-vlan-extend command-line option. + port config - Drop Packets ~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -968,7 +1149,7 @@ port config - RSS Set the RSS (Receive Side Scaling) mode on or off: -port config all rss (ip|udp|none) +port config all rss (all|ip|tcp|udp|sctp|ether|none) RSS is on by default. @@ -1130,7 +1311,7 @@ For example, set a Link Bonding device (port 10) to use a balance policy of laye set bonding mon_period ~~~~~~~~~~~~~~~~~~~~~~ -Set the link status monitoring polling period in milliseconds for a bonding devicie. +Set the link status monitoring polling period in milliseconds for a bonding device. This adds support for PMD slave devices which do not support link status interrupts. When the mon_period is set to a value greater than 0 then all PMD's which do not support @@ -1441,29 +1622,32 @@ Different NICs may have different capabilities, command show port fdir (port_id) # Commands to add flow director filters of different flow types. -flow_director_filter (port_id) (add|del|update) flow (ip4|ip4-frag|ip6|ip6-frag) +flow_director_filter (port_id) (add|del|update) flow (ipv4-other|ipv4-frag|ipv6-other|ipv6-frag) src (src_ip_address) dst (dst_ip_address) vlan (vlan_value) flexbytes (flexbytes_value) (drop|fwd) queue (queue_id) fd_id (fd_id_value) -flow_director_filter (port_id) (add|del|update) flow (udp4|tcp4|udp6|tcp6) +flow_director_filter (port_id) (add|del|update) flow (ipv4-tcp|ipv4-udp|ipv6-tcp|ipv6-udp) src (src_ip_address) (src_port) dst (dst_ip_address) (dst_port) vlan (vlan_value) flexbytes (flexbytes_value) (drop|fwd) queue (queue_id) fd_id (fd_id_value) -flow_director_filter (port_id) (add|del|update) flow (sctp4|sctp6) +flow_director_filter (port_id) (add|del|update) flow (ipv4-sctp|ipv6-sctp) src (src_ip_address) (src_port) dst (dst_ip_address) (dst_port) tag (verification_tag) vlan (vlan_value) flexbytes (flexbytes_value) (drop|fwd) queue (queue_id) fd_id (fd_id_value) -For example, to add an udp flow type filter: +flow_director_filter (port_id) (add|del|update) flow l2_payload +ether (ethertype) flexbytes (flexbytes_value) (drop|fwd) queue (queue_id) fd_id (fd_id_value) + +For example, to add an ipv4-udp flow type filter: .. code-block:: console - testpmd> flow_director_filter 0 add flow udp4 src 2.2.2.3 32 dst 2.2.2.5 33 vlan 0x1 flexbytes (0x88,0x48) fwd queue 1 fd_id 1 + testpmd> flow_director_filter 0 add flow ipv4-udp src 2.2.2.3 32 dst 2.2.2.5 33 vlan 0x1 flexbytes (0x88,0x48) fwd queue 1 fd_id 1 -For example, add an ip4 flow type filter: +For example, add an ipv4-other flow type filter: .. code-block:: console - testpmd> flow_director_filter 0 add flow ip4 src 2.2.2.3 dst 2.2.2.5 vlan 0x1 flexbytes (0x88,0x48) fwd queue 1 fd_id 1 + testpmd> flow_director_filter 0 add flow ipv4-other src 2.2.2.3 dst 2.2.2.5 vlan 0x1 flexbytes (0x88,0x48) fwd queue 1 fd_id 1 flush_flow_director ~~~~~~~~~~~~~~~~~~~ @@ -1497,9 +1681,10 @@ flow_director_flex_mask set masks of flow director's flexible payload based on certain flow type: -flow_director_flex_mask (port_id) flow (raw|ip4|ip4-frag|tcp4|udp4|sctp4|ip6|ip6-frag|tcp6|udp6|sctp6|all) (mask) +flow_director_flex_mask (port_id) flow (none|ipv4-other|ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp| +ipv6-other|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|l2_payload|all) (mask) -Example, to set flow director's udpv4 flex mask on port 0: +Example, to set flow director's flex mask for all flow type on port 0: .. code-block:: console @@ -1513,8 +1698,62 @@ Configure flexible payload selection. flow_director_flex_payload (port_id) (raw|l2|l3|l4) (config) -For example, to select the first 16 bytes from the offset 4 (bytes) of packet’s payload as flexible payload. +For example, to select the first 16 bytes from the offset 4 (bytes) of packet's payload as flexible payload. .. code-block:: console testpmd> flow_director_flex_payload 0 l4 (4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19) + +get_sym_hash_ena_per_port +~~~~~~~~~~~~~~~~~~~~~~~~~ + +Get symmetric hash enable configuration per port. + +get_sym_hash_ena_per_port (port_id) + +For example, to get symmetric hash enable configuration of port 1. + +.. code-block:: console + + testpmd> get_sym_hash_ena_per_port 1 + +set_sym_hash_ena_per_port +~~~~~~~~~~~~~~~~~~~~~~~~~ + +Set symmetric hash enable configuration per port to enable or disable. + +set_sym_hash_ena_per_port (port_id) (enable|disable) + +For example, to set symmetric hash enable configuration of port 1 to enable. + +.. code-block:: console + + testpmd> set_sym_hash_ena_per_port 1 enable + +get_hash_global_config +~~~~~~~~~~~~~~~~~~~~~~ + +Get the global configurations of hash filters. + +get_hash_global_config (port_id) + +For example, to get the global configurations of hash filters of port 1. + +.. code-block:: console + + testpmd> get_hash_global_config 1 + +set_hash_global_config +~~~~~~~~~~~~~~~~~~~~~~ + +Set the global configurations of hash filters. + +set_hash_global_config (port_id) (toeplitz|simple_xor|default) +(ipv4|ipv4-frag|ipv4-tcp|ipv4-udp|ipv4-sctp|ipv4-other|ipv6|ipv6-frag|ipv6-tcp|ipv6-udp|ipv6-sctp|ipv6-other|l2_payload) +(enable|disable) + +For example, to enable simple_xor for flow type of ipv6 on port 2. + +.. code-block:: console + + testpmd> set_hash_global_config 2 simple_xor ipv6 enable