datapath: add dynamic ipv4 header size calculation

Add proper IPv4 dynamic header size calculation using the Internet Header
Length field (IHL) which contains the number of 32-bit words in the header.

Reviewed-by: Mark D. Gray <mark.d.gray@intel.com>
Reviewed-by: Eimear Morrissey <eimear.morrissey@intel.com>
Signed-off-by: Nicolas Pernas Maradei <nicolasx.pernas.maradei@intel.com>
Change-Id: If3ebf5cd1b4bcef38935055b0205efe67281f085
actions: Fix race condition using multiple actions

Fix race condition using multiple actions due to rte_pktmbuf_clone() not
doing a full copy of a mbuf, only an indirect copy of it with its data
pointer pointing to the original mbuf data section. Suppose a scenario
with three actions: output to port 16, push vlan tag and output to port
17. The mbuf comes in to action_execute() function and it gets cloned
because of the multiple output actions. The clone is not a full clone
just a shallow copy that still references to the original mbuf data
section. The clone is sent to port 16 but it’s not really sent – only
cached to be sent. Second action is executed which causes an ofpbuf pkt
being created from the mbuf, with its data pointer pointing to the
original mbuf’s data section - hence the data section of the mbuf
waiting to be sent on the port cache. After pushing the vlan tag in the
ofpbuf pkt its data and size have been modified so the mbuf needs to be
updated. Before that happens, the  mbuf sitting on port 16’s cache is
sent. Its data needed to be updated but it didn’t so it’s now corrupted.
The mbuf is finally updated and the next action gets executed: send to
port 17. The data is now correct so the packet received on this port is
not corrupted.  The patch creates a full copy of the original mbuf so
all the actions can be securely executed on them.

Change-Id: I64094bc1b038008cf046136202667065efaa4351
Reviewed-by: Mark D. Gray <mark.d.gray@intel.com>
Reviewed-by: Eimear Morrissey <eimear.morrissey@intel.com>
Signed-off-by: Nicolas Pernas Maradei <nicolasx.pernas.maradei@intel.com>
docs: add link to MEMNIC repo

Add a link to dpdk.org's repo where the MEMNIC code can be downloaded.

Change-Id: Ideb9a175c014f510c5ff6dfcb4ab80ad6e4191c7
Signed-off-by: Nicolas Pernas Maradei <nicolasx.pernas.maradei@intel.com>
Reviewed-by: Mark D. Gray <mark.d.gray@intel.com>
Reviewed-by: Stephen Finucane <stephen.finucane@intel.com>