diff options
author | Ben Pfaff <blp@nicira.com> | 2011-03-16 14:39:17 -0700 |
---|---|---|
committer | Ben Pfaff <blp@nicira.com> | 2011-03-16 14:39:17 -0700 |
commit | 431488e6638d3fbb53d215fa10d2ff2d8f1c2824 (patch) | |
tree | 0bf2a0c44cd5fbd2fa3718acaab4b5d8e91644ef /acinclude.m4 | |
parent | 21dcb94fd5fbfda3b281cfcf124ab57802d77c23 (diff) |
Support vlan_group workaround implemented in XenServer kernels.
Some Linux network drivers support a feature called "VLAN acceleration",
associated with a data structure called a "vlan_group". A vlan_group is,
abstractly, a dictionary that maps from a VLAN ID (in the range 0...4095)
to a VLAN device, that is, a Linux network device associated with a
particular VLAN, e.g. "eth0.9" for VLAN 9 on eth0.
Some drivers that support VLAN acceleration have bugs that fall roughly
into the following categories:
* Some NICs strip VLAN tags on receive if no vlan_group is registered,
so that the tag is completely lost.
* Some drivers size their receive buffers based on whether a vlan_group
is enabled, meaning that a maximum size packet with a VLAN tag will
not fit if a vlan_group is not configured.
* On transmit some drivers expect that VLAN acceleration will be used
if it is available (which can only be done if a vlan_group is
configured). In these cases, the driver may fail to parse the packet
and correctly setup checksum offloading and/or TSO.
The correct long term solution is to fix these driver bugs. To cope until
then, we have prepared a patch to the Linux kernel network stack that works
around these problems. This commit adds support for the workaround
implemented by that patch.
Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Jesse Gross <jesse@nicira.com>
Diffstat (limited to 'acinclude.m4')
-rw-r--r-- | acinclude.m4 | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/acinclude.m4 b/acinclude.m4 index 5843bfa5..fa6f534d 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -211,6 +211,9 @@ AC_DEFUN([OVS_CHECK_LINUX26_COMPAT], [ OVS_GREP_IFELSE([$KSRC26/include/linux/if_link.h], [rtnl_link_stats64]) + OVS_GREP_IFELSE([$KSRC26/include/linux/if_vlan.h], [ADD_ALL_VLANS_CMD], + [OVS_DEFINE([HAVE_VLAN_BUG_WORKAROUND])]) + OVS_CHECK_LOG2_H if cmp -s datapath/linux-2.6/kcompat.h.new \ |