2651 Commits

Author SHA1 Message Date
Pablo de Lara
f9edbc9bb6 hash: add iterate function
Since now rte_hash structure is private, a new function
has been added to let the user iterate through the hash table,
returning next key and data associated on each iteration,
plus the position where they were stored.

Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
2015-07-13 00:18:41 +02:00
Pablo de Lara
473d1bebce hash: allow to store data in hash table
Usually hash tables not only store keys, but also data associated
to them. In order to maintain the existing API, the old functions
will still return the index where the key was stored.
The new functions will return the data associated to that key.
In the case of the lookup_bulk function, it will return also
the number of entries found and a bitmask of which entries
were found.

Unit tests have been updated to use these new functions.

As a final point, a flag has been added in rte_hash_parameters
to indicate if there are new parameters for future versions,
so there is no need to maintain multiple versions
of the existing functions in the future.

Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
[Thomas: fix || operator in a precondition check]
2015-07-13 00:16:29 +02:00
Pablo de Lara
b26473ff8f hash: add reset function
Added reset function to be able to empty the table,
without having to destroy and create it again.

Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
2015-07-13 00:15:03 +02:00
Pablo de Lara
48a3991196 hash: replace with cuckoo hash implementation
This patch replaces the existing hash library with another approach,
using the Cuckoo Hash method to resolve collisions (open addressing),
which pushes items from a full bucket when a new entry tries
to be added in it, storing the evicted entry in an alternative location,
using a secondary hash function.

This gives the user the ability to store more entries when a bucket
is full, in comparison with the previous implementation.
Therefore, the unit test has been updated, as some scenarios have changed
(such as the previous removed restriction).

Also note that the API has not been changed, although new fields
have been added in the rte_hash structure (structure is internal now).
The main change when creating a new table is that the number of entries
per bucket is fixed now, so its parameter is ignored now
(still there to maintain the same parameters structure).
The hash unit test has been updated to reflect these changes.

As a last note, the maximum burst size in lookup_burst function
hash been increased to 64, to improve performance.

Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
2015-07-12 23:46:11 +02:00
John McNamara
073208ebab ethdev: call Rx and Tx callbacks in the order they were added
Change the order that user supplied RX and TX callbacks are called
to the order that they were added (fifo).

The previous calling order was the reverse of this (lifo) and was
counter intuitive for users.

Suggested-by: Robert Sanford <rsanford@akamai.com>
Signed-off-by: John McNamara <john.mcnamara@intel.com>
2015-07-12 23:36:18 +02:00
Tetsuya Mukawa
980995f8cc ethdev: improve API comments of close and detach functions
The patch fixes doxygen comments of below functions.
 - rte_eth_dev_close()
   Add description about when the function can be called and also about
   what kind of resources will be freed.
 - rte_eth_dev_detach()
   Add description about when the function can be called.

Signed-off-by: Tetsuya Mukawa <mukawa@igel.co.jp>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
2015-07-11 00:32:34 +02:00
Jijiang Liu
27bb9216bb doc: announce ABI change to support 1024 queues per port
The significant ABI change is planned for struct rte_eth_dev to support
up to 1024 queues per port which will be taken effect from release 2.2.

Signed-off-by: Jijiang Liu <jijiang.liu@intel.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
2015-07-11 00:24:21 +02:00
Jijiang Liu
94c6cba001 config: revert the max queues per port to 256
The previous commit changed the size and the offsets of struct rte_eth_dev,
so it is an ABI breakage.
I revert it, and will send a deprecation notice for this.

Fixes: 1a1109404e70 ("config: increase max queues per port")

Signed-off-by: Jijiang Liu <jijiang.liu@intel.com>
2015-07-10 23:54:48 +02:00
Simon Kagstrom
410d70a3ff mem: warn once if pagemap is unreadable
Newer kernels make this unreadable for security reasons for non-roots.
Running the application will then fill the logs with

  rte_mem_virt2phy: cannot open /proc/self/pagemap

messages.

However, there are cases when DPDK is and should be run as non-root,
without the need for virtual-to-physical address translations: a
typical example is when working with PCAP input/output. This patch
adds a start-time check for /proc/self/pagemap readability, and
directly returns an error code from rte_mem_virt2phy().

This way, there is only a one-time warning at startup instead of
constant warnings all the time.

Signed-off-by: Simon Kagstrom <simon.kagstrom@netinsight.net>
Signed-off-by: Johan Faltstrom <johan.faltstrom@netinsight.net>
2015-07-10 23:45:36 +02:00
Xuelin Shi
afc5c914a0 lpm: fix big endian support
This module uses type conversion between struct and int.
Also truncation and comparison is used with this int.
It is not safe for different endian arch.

Add ifdef for big endian struct to fix this issue.

Signed-off-by: Xuelin Shi <xuelin.shi@freescale.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
2015-07-10 23:23:15 +02:00
Tero Aho
6db141c91e pcap: support jumbo frames
Extend eth_pcap rx and tx to support jumbo frames.

On the receive side read large packets into multiple mbufs and
on the transmit side convert them back to a single pcap buffer.

Signed-off-by: Tero Aho <tero.aho@coriant.com>
Signed-off-by: John McNamara <john.mcnamara@intel.com>
Acked-by: Sergio Gonzalez Monroy <sergio.gonzalez.monroy@intel.com>
2015-07-10 23:14:47 +02:00
Chen Jing D(Mark)
0a5311e7ef fm10k: fix RETA table initialization
fm10k has 128 RETA entries in 32 registers, but it only initialized
first 32 when doing multiple rx queue configurations. This fix will
initialize all 128 entries instead.

Signed-off-by: Chen Jing D(Mark) <jing.d.chen@intel.com>
Acked-by: Michael Qiu <michael.qiu@intel.com>
2015-07-10 22:41:03 +02:00
Shaopeng He
0681a1424d fm10k: fix error when adding default vlan
The default MAC address is read from hardware and copied to
Device Ethernet Link address array in the device initialization phase,
which bypasses fm10k MAC address number check mechanism,
and will cause an error message when adding default VLAN:
	"MAC address number not match"

Fix it by moving default MAC address registration to device
initialize phase.

Fixes: f5c1a236a218 ("fm10k: fix default mac/vlan in switch")

Signed-off-by: Shaopeng He <shaopeng.he@intel.com>
Acked-by: Michael Qiu <michael.qiu@intel.com>
2015-07-10 22:26:16 +02:00
Damjan Marion
b91fe0f7ad i40e: prefetch next mbuf in Rx init loop
This patch improves performance of Rx with i40e devices.

Signed-off-by: Damjan Marion <damarion@cisco.com>
Acked-by: Helin Zhang <helin.zhang@intel.com>
[Thomas: apply Helin's comments]
2015-07-10 19:17:17 +02:00
Zhe Tao
7eda588164 i40e: fix check of descriptor done flag
If a descriptor the device drive is handling is the context descriptor,
its type value will be 0x1.
When using the not operator ! to do the conditional check, if the expression
value is zero, the device driver will consider the transaction for this
descriptor has been completed, even its DD field is still 0x1 which means
NIC has not finished the operation on this descriptor.
Use the 0xF to check the DD status to avoid the above issue happens.

Fixes: 4861cde46116 ("i40e: new poll mode driver")
Fixes: 05999aab4ca6 ("i40e: add or delete flow director")

Signed-off-by: Zhe Tao <zhe.tao@intel.com>
Acked-by: Jingjing Wu <jingjing.wu@intel.com>
2015-07-10 18:55:31 +02:00
Wenzhuo Lu
49508ecd25 ixgbe: allow to disable flow control
There's a parameter "autoneg on|off" in testpmd CLI "set flow_ctrl ...". This
parameter is used to enable/disable auto negotiation for flow control. But it's
not supported yet.
The auto negotiation is enabled by default, we have no way to disable it. This
patch lets the parameter "autoneg on|off" be supproted.

Signed-off-by: Wenzhuo Lu <wenzhuo.lu@intel.com>
Acked-by: Changchun Ouyang <changchun.ouyang@intel.com>
2015-07-10 18:05:56 +02:00
Michael Qiu
b911281be6 ixgbe: reset hardware stats on initialization
When initialize the hardware, the stat should be reset.
Otherwise when detach then attach port, the stat will not
be re-init to zero.

Signed-off-by: Michael Qiu <michael.qiu@intel.com>
Acked-by: Bernard Iremonger <bernard.iremonger@intel.com>
2015-07-10 17:51:20 +02:00
Pablo de Lara
359e17bf08 app/test: improve hash unit tests
Add new unit test for calculating the average table utilization,
using random keys, based on number of entries that can be added
until we encounter one that cannot be added (bucket if full).

Also, replace current hash_perf unit test to see performance more clearly.
The current hash_perf unit test takes too long and add keys that
may or may not fit in the table and look up/delete that may not be
in the table. This new unit test gets a set of keys that we know
that fits in the table, and then measure the time to add/look up/delete
them.

Note that performance numbers include time to take a random key
from a pre-made array of keys, plus a quick check of return value.
Also, as stated above, expect higher numbers, as all operations
in the new unit tests will be successful, which means that
it will take more time, than mixing both successful and unsuccesful
operations.

Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
2015-07-10 12:34:13 +02:00
Pablo de Lara
9ef1501ea6 hash: hide structure from header and make it internal
rte_hash structure should not be a public structure,
and therefore it should be moved to the C file and be declared
as internal. rte_hash_hash implementation is also moved
to the C file, as it uses the structure.

This patch also removes part of a unit test that was checking
a field of the structure.

Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
2015-07-10 12:25:28 +02:00
Miguel Bernal Marin
6759c55180 kni: fix build with vhost header enabled
A missing port from memcpy_toiovecend to copy_to_iter
is showed when vHost HDR is enabled. DPDK would not build.

This patch add this validation to build with kernel > 3.19.

Fixes: 45e63ba8db31 ("kni: fix vhost build with kernels 3.19 and 4.0")
Linux: ba7438aed924 ("vhost: don't bother copying iovecs in handle_rx(), kill memcpy_toiovecend()")

Signed-off-by: Miguel Bernal Marin <miguel.bernal.marin@linux.intel.com>
Acked-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
2015-07-10 11:59:15 +02:00
Miguel Bernal Marin
8d8fb8aa58 kni: fix vhost build with kernel 4.1
Parameters from sendmsg and recvmsg has been changed in 4.1 kernel.
The function pointers belong to proto_ops structure were updated removing
the struct kiocb parameter.

Linux: 1b784140474e ("net: Remove iocb argument from sendmsg and recvmsg")

Signed-off-by: Miguel Bernal Marin <miguel.bernal.marin@linux.intel.com>
Acked-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
2015-07-10 11:59:07 +02:00
Miguel Bernal Marin
b90fcf82e8 kni: fix build with kernel 4.1
rebuild member was removed from headers_ops in kernel release
4.1. Therefore kni module compilation breaks.

This patch add the properly checks to fix it.

Linux: d476059e77d1 ("net: Kill dev_rebuild_header")

Signed-off-by: Miguel Bernal Marin <miguel.bernal.marin@linux.intel.com>
Acked-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
2015-07-10 11:58:59 +02:00
Miguel Bernal Marin
b2b5baa029 kni: fix igb build with kernel 4.1
ndo_bridge_getlink has changed in kernel release 4.1. It
adds new parameter which breaks compilation.

This patch add the properly checks to fix it.

Linux: 46c264daaaa5 ("bridge/nl: remove wrong use of NLM_F_MULTI")

Signed-off-by: Miguel Bernal Marin <miguel.bernal.marin@linux.intel.com>
Acked-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
2015-07-10 11:57:56 +02:00
Rahul Lakkireddy
8ec019a947 cxgbe: update documentation
Update cxgbe documentation with the following:
1. Add instructions on how to flash firmware and config file on Chelsio T5
   devices.
2. Add a list of supported devices.
3. Add instructions on how to enable and disable flow control via testpmd.

Signed-off-by: Rahul Lakkireddy <rahul.lakkireddy@chelsio.com>
Signed-off-by: Kumar Sanghvi <kumaras@chelsio.com>
2015-07-10 03:00:57 +02:00
Rahul Lakkireddy
50c3261cae cxgbe: add more supported devices
Update pci id table to include more supported Chelsio T5 devices.

Signed-off-by: Rahul Lakkireddy <rahul.lakkireddy@chelsio.com>
Signed-off-by: Kumar Sanghvi <kumaras@chelsio.com>
2015-07-10 03:00:22 +02:00
Rahul Lakkireddy
78fc1a716a cxgbe: improve Rx performance
CXGBE PMD rx allocates a new mbuf everytime, which could lead to performance
hit.  Instead, do bulk allocation of mbufs and re-use them.

Also, simplify the overall rx-handler, and update its logic to fix rx perf.

Signed-off-by: Rahul Lakkireddy <rahul.lakkireddy@chelsio.com>
Signed-off-by: Kumar Sanghvi <kumaras@chelsio.com>
2015-07-10 02:59:52 +02:00
John McNamara
c4bcc342c8 app/testpmd: refactor ieee1588 forwarding
Refactor the ieee1588_fwd mode in testpmd to use the new ethdev
APIs to enable and read IEEE1588 PTP timestamps.

Signed-off-by: John McNamara <john.mcnamara@intel.com>
Acked-by: Wenzhuo Lu <wenzhuo.lu@intel.com>
2015-07-10 02:43:37 +02:00
John McNamara
a4024448ef i40e: add ieee1588 timestamping
Add ixgbe support for new ethdev APIs to enable and read IEEE1588/
802.1AS PTP timestamps.

Signed-off-by: John McNamara <john.mcnamara@intel.com>
Acked-by: Wenzhuo Lu <wenzhuo.lu@intel.com>
2015-07-10 02:36:25 +02:00
John McNamara
97b6680ca3 ixgbe: add ieee1588 timestamping
Add ixgbe support for new ethdev APIs to enable and read IEEE1588
PTP timestamps.

Signed-off-by: John McNamara <john.mcnamara@intel.com>
Acked-by: Wenzhuo Lu <wenzhuo.lu@intel.com>
2015-07-10 02:36:25 +02:00
John McNamara
b8a1a1e7b7 e1000: add ieee1588 timestamping
Add e1000/igb support for new ethdev APIs to enable and read
IEEE1588 PTP timestamps.

Signed-off-by: John McNamara <john.mcnamara@intel.com>
Acked-by: Wenzhuo Lu <wenzhuo.lu@intel.com>
2015-07-10 02:36:25 +02:00
John McNamara
0d57ac4a34 mbuf: add ieee1588 timestamping
Add mbuf field to store the IEEE1588 RX register index and other flags.

The size of the structure is not changed (still 2 cache lines).

Signed-off-by: John McNamara <john.mcnamara@intel.com>
2015-07-10 02:36:13 +02:00
John McNamara
aee686ea17 ethdev: add ieee1588 timestamping
Add ethdev API to enable and read IEEE1588/802.1AS PTP timestamps
from devices that support it. The following functions are added:

    rte_eth_timesync_enable()
    rte_eth_timesync_disable()
    rte_eth_timesync_read_rx_timestamp()
    rte_eth_timesync_read_tx_timestamp()

Signed-off-by: John McNamara <john.mcnamara@intel.com>
Acked-by: Wenzhuo Lu <wenzhuo.lu@intel.com>
[Thomas: merged with new macro VALID_PORTID_OR_ERR_RET]
2015-07-10 02:26:01 +02:00
Stephen Hemminger
bd5d7beecd vmxnet3: remove unnecessary inlining
No reason to inline large functions. Compiler will decide already
based on optimization level.

Also register array should be const.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Yong Wang <yongwang@vmware.com>
2015-07-10 00:45:29 +02:00
Stephen Hemminger
cd3606435b vmxnet3: get rid of debug ifdefs
By defining macro as a stub it is possible to get rid of #ifdef's
in the actual code. Always evaluate the argument (even in the stub)
so that there are no extra unused variable errors.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Yong Wang <yongwang@vmware.com>
2015-07-10 00:45:09 +02:00
Stephen Hemminger
9fd5e98b62 vmxnet3: support RSS and refactor Rx offload
Refactor the logic to compute receive offload flags to a simpler
function. And add support for putting RSS flow hash into packet.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Signed-off-by: Bill Hong <bhong@brocade.com>
Acked-by: Yong Wang <yongwang@vmware.com>
2015-07-10 00:42:38 +02:00
Stephen Hemminger
bb1d14b87f vmxnet3: fix link state handling
The Intel version of VMXNET3 driver does not handle link state properly.
The VMXNET3 API returns 1 if connected and 0 if disconnected.
Also need to return correct value to indicate state change.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Yong Wang <yongwang@vmware.com>
2015-07-10 00:42:23 +02:00
Stephen Hemminger
7ba5de417e vmxnet3: support multi-segment transmit
Change sending loop to support multi-segment mbufs.
The VMXNET3 api has start-of-packet and end-packet flags, so it
is not hard to send multi-segment mbuf's.

Also, update descriptor in 32 bit value rather than toggling
bitfields which is slower and error prone.
Based on code in earlier driver, and the Linux kernel driver.

Add a compiler barrier to make sure that update of earlier descriptor
are completed prior to update of generation bit on start of packet.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Yong Wang <yongwang@vmware.com>
2015-07-10 00:41:47 +02:00
Stephen Hemminger
3df28ed516 vmxnet3: cleanup Tx stats per queue
There are several stats here which are never set, and have no way
to be displayed.  Assume in future xstats could be used.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Yong Wang <yongwang@vmware.com>
2015-07-10 00:40:03 +02:00
Stephen Hemminger
c3d685bfcd vmxnet3: remove mtu check
Remove check for packets greater than MTU. No other driver does
this, it should be handled at higher layer

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Yong Wang <yongwang@vmware.com>
2015-07-10 00:39:22 +02:00
Stephen Hemminger
f003fc3834 vmxnet3: enable vlan filtering
Support the VLAN filter functionality of the VMXNET3 interface.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Yong Wang <yongwang@vmware.com>
2015-07-10 00:38:44 +02:00
Olivier Matz
2465980ad2 app/test: decrease size of requested mempool
In test application, the default size of allocated mempool is calculated
as following:

  (RTE_MAX_LCORE * (RTE_MEMPOOL_CACHE_MAX_SIZE + max_kept_objects)) - 1

The objective is to ensure that all cores can fill their cache and keep
'max_kept_objects' at the same time. As RTE_MAX_LCORE is 128 and
RTE_MEMPOOL_CACHE_MAX_SIZE is 512 in the default configuration, it can
produce very large mempools (170 MB).

We can replace the number of core by a dynamic value, which drastically
reduces the amount of memory needed for this test (5 MB with 4 cores).

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
2015-07-09 17:35:25 +02:00
Maciej Gajdzica
7122d30131 examples/ip_pipeline: rework flow classification pipeline
Flow classification pipeline implementation is split to two files.
pipeline_flow_classification.c file handles front-end functions (cli
commands parsing) pipeline_flow_classification_ops.c contains
implementation of functions done by pipeline (back-end).

Signed-off-by: Maciej Gajdzica <maciejx.t.gajdzica@intel.com>
Acked-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
2015-07-09 17:25:46 +02:00
Maciej Gajdzica
30ad1f40ca examples/ip_pipeline: rework routing pipeline
Routing pipeline implementation is split to two files.
pipeline_routing.c file handles front-end functions (cli commands
parsing) pipeline_routing_ops.c contains implementation of functions
done by pipeline (back-end).

Signed-off-by: Pawel Wodkowski <pawelx.wodkowski@intel.com>
Acked-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
2015-07-09 17:25:46 +02:00
Daniel Mrzyglod
e1597e568e examples/ip_pipeline: rework firewall pipeline
Firewall pipeline implementation is split to two files.
pipeline_firewall.c file handles front-end functions (cli commands
parsing) pipeline_firewall_ops.c contains implementation of functions
done by pipeline (back-end).

Signed-off-by: Daniel Mrzyglod <danielx.t.mrzyglod@intel.com>
Acked-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
2015-07-09 17:25:46 +02:00
Jasvinder Singh
947024a26d examples/ip_pipeline: rework passthrough pipeline
Passthrough pipeline implementation is split to two files.
pipeline_passthrough.c file handles front-end functions (cli commands
parsing) pipeline_passthrough_ops.c contains implementation of functions
done by pipeline (back-end).

Signed-off-by: Jasvinder Singh <jasvinder.singh@intel.com>
Acked-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
2015-07-09 17:25:46 +02:00
Maciej Gajdzica
147fc74f44 examples/ip_pipeline: move config files to separate directory
Created new folder for config(.cfg) and script(.sh) files.

Signed-off-by: Maciej Gajdzica <maciejx.t.gajdzica@intel.com>
Acked-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
2015-07-09 17:25:46 +02:00
Maciej Gajdzica
2c2b14bfa0 examples/ip_pipeline: add application thread
Application thread runs pipelines on assigned cores.

Signed-off-by: Maciej Gajdzica <maciejx.t.gajdzica@intel.com>
Acked-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
2015-07-09 17:25:46 +02:00
Jasvinder Singh
ea0908c4ab examples/ip_pipeline: add master pipeline
Master pipeline is responsible for command line handling and
communicationg with all other pipelines via message queues. Removed
cmdline.c file, as its functionality will be split over multiple
pipeline files.

Signed-off-by: Jasvinder Singh <jasvinder.singh@intel.com>
Acked-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
2015-07-09 17:25:46 +02:00
Maciej Gajdzica
bff54484b2 examples/ip_pipeline: move pipelines to separate directory
Moved pipelines to separate folder, removed not needed pipelines and
modified Makefile to match that change.

Signed-off-by: Maciej Gajdzica <maciejx.t.gajdzica@intel.com>
Acked-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
2015-07-09 17:25:46 +02:00
Maciej Gajdzica
eb32fe7c55 examples/ip_pipeline: rework initialization parameters
After changes in config parser, app params struct is changed and
requires modifications in initialization procedures.

Signed-off-by: Maciej Gajdzica <maciejx.t.gajdzica@intel.com>
Acked-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
2015-07-09 17:25:46 +02:00