[ovs-dev] ovs-vlan-bug-workaround: Remove.
diff mbox series

Message ID 20191010190727.22296-1-blp@ovn.org
State New
Headers show
Series
  • [ovs-dev] ovs-vlan-bug-workaround: Remove.
Related show

Commit Message

Ben Pfaff Oct. 10, 2019, 7:07 p.m. UTC
This workaround only applied to kernels earlier than 2.6.37, but OVS
only supports 3.10 and later.

As the original author of this code, I won't miss it.

Signed-off-by: Ben Pfaff <blp@ovn.org>
---
 Documentation/faq/vlan.rst                    |  40 -----
 Documentation/ref/index.rst                   |   4 -
 acinclude.m4                                  |   2 -
 manpages.mk                                   |  10 --
 rhel/openvswitch-fedora.spec.in               |   4 +-
 rhel/openvswitch.spec.in                      |   4 +-
 tests/interface-reconfigure.at                |   9 +-
 utilities/.gitignore                          |   2 -
 utilities/automake.mk                         |   8 -
 utilities/ovs-vlan-bug-workaround.8.in        |  86 -----------
 utilities/ovs-vlan-bug-workaround.c           | 145 ------------------
 utilities/ovs-vlan-bugs.man                   |  22 ---
 xenserver/openvswitch-xen.spec.in             |   2 -
 ...rce_libexec_InterfaceReconfigureVswitch.py |   6 -
 14 files changed, 3 insertions(+), 341 deletions(-)
 delete mode 100644 utilities/ovs-vlan-bug-workaround.8.in
 delete mode 100644 utilities/ovs-vlan-bug-workaround.c
 delete mode 100644 utilities/ovs-vlan-bugs.man

Comments

Gregory Rose Oct. 14, 2019, 10:18 p.m. UTC | #1
On 10/10/2019 12:07 PM, Ben Pfaff wrote:
> This workaround only applied to kernels earlier than 2.6.37, but OVS
> only supports 3.10 and later.
>
> As the original author of this code, I won't miss it.
>
> Signed-off-by: Ben Pfaff <blp@ovn.org>

Nice.

I applied the patch and compile tested it.  I then ran 'make check' and 
'make check-kmod' and found no regression
or other issues.  Reviewing the code it looks fine to me - reviewing 
patches that remove stuff is easier.

Thanks Ben, always a plus to get rid of old gunk.

Tested-by: Greg Rose <gvrose8192@gmail.com>
Reviewed-by: Greg Rose <gvrose8192@gmail.com>

> ---
>   Documentation/faq/vlan.rst                    |  40 -----
>   Documentation/ref/index.rst                   |   4 -
>   acinclude.m4                                  |   2 -
>   manpages.mk                                   |  10 --
>   rhel/openvswitch-fedora.spec.in               |   4 +-
>   rhel/openvswitch.spec.in                      |   4 +-
>   tests/interface-reconfigure.at                |   9 +-
>   utilities/.gitignore                          |   2 -
>   utilities/automake.mk                         |   8 -
>   utilities/ovs-vlan-bug-workaround.8.in        |  86 -----------
>   utilities/ovs-vlan-bug-workaround.c           | 145 ------------------
>   utilities/ovs-vlan-bugs.man                   |  22 ---
>   xenserver/openvswitch-xen.spec.in             |   2 -
>   ...rce_libexec_InterfaceReconfigureVswitch.py |   6 -
>   14 files changed, 3 insertions(+), 341 deletions(-)
>   delete mode 100644 utilities/ovs-vlan-bug-workaround.8.in
>   delete mode 100644 utilities/ovs-vlan-bug-workaround.c
>   delete mode 100644 utilities/ovs-vlan-bugs.man
>
> diff --git a/Documentation/faq/vlan.rst b/Documentation/faq/vlan.rst
> index 80e6660f5e77..d64db7a0d321 100644
> --- a/Documentation/faq/vlan.rst
> +++ b/Documentation/faq/vlan.rst
> @@ -77,46 +77,6 @@ Q: What's a VLAN?
>   
>   Q: VLANs don't work.
>   
> -    A: Many drivers in Linux kernels before version 3.3 had VLAN-related bugs.
> -    If you are having problems with VLANs that you suspect to be driver
> -    related, then you have several options:
> -
> -    - Upgrade to Linux 3.3 or later.
> -
> -    - Build and install a fixed version of the particular driver that is
> -      causing trouble, if one is available.
> -
> -    - Use a NIC whose driver does not have VLAN problems.
> -
> -    - Use "VLAN splinters", a feature in Open vSwitch 1.4 upto 2.5 that works
> -      around bugs in kernel drivers.  To enable VLAN splinters on interface
> -      eth0, use the command::
> -
> -          $ ovs-vsctl set interface eth0 other-config:enable-vlan-splinters=true
> -
> -      For VLAN splinters to be effective, Open vSwitch must know which VLANs
> -      are in use.  See the "VLAN splinters" section in the Interface table in
> -      ovs-vswitchd.conf.db(5) for details on how Open vSwitch infers in-use
> -      VLANs.
> -
> -      VLAN splinters increase memory use and reduce performance, so use them
> -      only if needed.
> -
> -    - Apply the "vlan workaround" patch from the XenServer kernel patch queue,
> -      build Open vSwitch against this patched kernel, and then use
> -      ovs-vlan-bug-workaround(8) to enable the VLAN workaround for each
> -      interface whose driver is buggy.
> -
> -      (This is a nontrivial exercise, so this option is included only for
> -      completeness.)
> -
> -    It is not always easy to tell whether a Linux kernel driver has buggy VLAN
> -    support.  The ovs-vlan-test(8) and ovs-test(8) utilities can help you test.
> -    See their manpages for details.  Of the two utilities, ovs-test(8) is newer
> -    and more thorough, but ovs-vlan-test(8) may be easier to use.
> -
> -Q: VLANs still don't work.  I've tested the driver so I know that it's OK.
> -
>       A: Do you have VLANs enabled on the physical switch that OVS is attached
>       to?  Make sure that the port is configured to trunk the VLAN or VLANs that
>       you are using with OVS.
> diff --git a/Documentation/ref/index.rst b/Documentation/ref/index.rst
> index 0cb5ef571676..83f031c4f646 100644
> --- a/Documentation/ref/index.rst
> +++ b/Documentation/ref/index.rst
> @@ -126,10 +126,6 @@ The remainder are still in roff format can be found below:
>        - `(pdf) <http://www.openvswitch.org/support/dist-docs/ovs-testcontroller.8.pdf>`__
>        - `(html) <http://www.openvswitch.org/support/dist-docs/ovs-testcontroller.8.html>`__
>        - `(plain text) <http://www.openvswitch.org/support/dist-docs/ovs-testcontroller.8.txt>`__
> -   * - ovs-vlan-bug-workaround(8)
> -     - `(pdf) <http://www.openvswitch.org/support/dist-docs/ovs-vlan-bug-workaround.8.pdf>`__
> -     - `(html) <http://www.openvswitch.org/support/dist-docs/ovs-vlan-bug-workaround.8.html>`__
> -     - `(plain text) <http://www.openvswitch.org/support/dist-docs/ovs-vlan-bug-workaround.8.txt>`__
>      * - ovs-vlan-test(8)
>        - `(pdf) <http://www.openvswitch.org/support/dist-docs/ovs-vlan-test.8.pdf>`__
>        - `(html) <http://www.openvswitch.org/support/dist-docs/ovs-vlan-test.8.html>`__
> diff --git a/acinclude.m4 b/acinclude.m4
> index 52f92870eaaa..b3e5f94690c8 100644
> --- a/acinclude.m4
> +++ b/acinclude.m4
> @@ -847,8 +847,6 @@ AC_DEFUN([OVS_CHECK_LINUX_COMPAT], [
>   
>     OVS_GREP_IFELSE([$KSRC/include/net/sctp/checksum.h], [sctp_compute_cksum])
>   
> -  OVS_GREP_IFELSE([$KSRC/include/linux/if_vlan.h], [ADD_ALL_VLANS_CMD],
> -                  [OVS_DEFINE([HAVE_VLAN_BUG_WORKAROUND])])
>     OVS_GREP_IFELSE([$KSRC/include/linux/if_vlan.h], [vlan_insert_tag_set_proto])
>     OVS_GREP_IFELSE([$KSRC/include/linux/if_vlan.h], [__vlan_insert_tag])
>     OVS_GREP_IFELSE([$KSRC/include/linux/if_vlan.h], [vlan_get_protocol])
> diff --git a/manpages.mk b/manpages.mk
> index b43deaef1ae5..281ebd8fe946 100644
> --- a/manpages.mk
> +++ b/manpages.mk
> @@ -232,16 +232,6 @@ lib/vconn-active.man:
>   lib/vconn-passive.man:
>   lib/vlog.man:
>   
> -utilities/ovs-vlan-bug-workaround.8: \
> -	utilities/ovs-vlan-bug-workaround.8.in \
> -	lib/common.man \
> -	lib/ovs.tmac \
> -	utilities/ovs-vlan-bugs.man
> -utilities/ovs-vlan-bug-workaround.8.in:
> -lib/common.man:
> -lib/ovs.tmac:
> -utilities/ovs-vlan-bugs.man:
> -
>   utilities/ovs-vsctl.8: \
>   	utilities/ovs-vsctl.8.in \
>   	lib/common.man \
> diff --git a/rhel/openvswitch-fedora.spec.in b/rhel/openvswitch-fedora.spec.in
> index 229bb22148ec..80010a41bd0b 100644
> --- a/rhel/openvswitch-fedora.spec.in
> +++ b/rhel/openvswitch-fedora.spec.in
> @@ -268,9 +268,7 @@ install -p -D -m 0755 \
>           $RPM_BUILD_ROOT%{_datadir}/openvswitch/scripts/ovs-systemd-reload
>   
>   # remove unpackaged files
> -rm -f $RPM_BUILD_ROOT%{_bindir}/ovs-parse-backtrace \
> -        $RPM_BUILD_ROOT%{_sbindir}/ovs-vlan-bug-workaround \
> -        $RPM_BUILD_ROOT%{_mandir}/man8/ovs-vlan-bug-workaround.8
> +rm -f $RPM_BUILD_ROOT%{_bindir}/ovs-parse-backtrace
>   
>   %check
>   %if %{with check}
> diff --git a/rhel/openvswitch.spec.in b/rhel/openvswitch.spec.in
> index 27935f81ed92..4b6b585c45a0 100644
> --- a/rhel/openvswitch.spec.in
> +++ b/rhel/openvswitch.spec.in
> @@ -99,9 +99,7 @@ rm \
>       $RPM_BUILD_ROOT/usr/bin/ovs-test \
>       $RPM_BUILD_ROOT/usr/bin/ovs-l3ping \
>       $RPM_BUILD_ROOT/usr/share/man/man8/ovs-test.8 \
> -    $RPM_BUILD_ROOT/usr/share/man/man8/ovs-l3ping.8 \
> -    $RPM_BUILD_ROOT/usr/sbin/ovs-vlan-bug-workaround \
> -    $RPM_BUILD_ROOT/usr/share/man/man8/ovs-vlan-bug-workaround.8
> +    $RPM_BUILD_ROOT/usr/share/man/man8/ovs-l3ping.8
>   (cd "$RPM_BUILD_ROOT" && rm -rf usr/%{_lib}/*.la)
>   (cd "$RPM_BUILD_ROOT" && rm -rf usr/include)
>   
> diff --git a/tests/interface-reconfigure.at b/tests/interface-reconfigure.at
> index f4ceb284af4d..12b66dc0fc43 100644
> --- a/tests/interface-reconfigure.at
> +++ b/tests/interface-reconfigure.at
> @@ -39,8 +39,7 @@ EOF
>               sbin/ip \
>               sbin/update-issue \
>               sbin/vconfig \
> -            usr/sbin/brctl \
> -            usr/sbin/ovs-vlan-bug-workaround
> +            usr/sbin/brctl
>           do
>               mkdir -p `dirname $utility`
>               cat > $utility <<'EOF'
> @@ -716,7 +715,6 @@ Applying changes to /etc/sysconfig/network configuration
>   Applying changes to /etc/sysconfig/network-scripts/ifcfg-xenbr2 configuration
>   /sbin/ip link set eth2 up mtu 1500
>   /sbin/ethtool -K eth2 gro off lro off
> -/usr/sbin/ovs-vlan-bug-workaround eth2 on
>   /usr/bin/ovs-vsctl --timeout=20
>       --with-iface --if-exists del-port eth2
>       --may-exist add-br xenbr2
> @@ -791,7 +789,6 @@ Applying changes to /etc/sysconfig/network-scripts/route-xapi3 configuration
>   Applying changes to /etc/sysconfig/network-scripts/ifcfg-xapi3 configuration
>   /sbin/ip link set eth3 up mtu 1500
>   /sbin/ethtool -K eth3 gro off lro off
> -/usr/sbin/ovs-vlan-bug-workaround eth3 on
>   /usr/bin/ovs-vsctl --timeout=20
>       --with-iface --if-exists del-port eth3
>       --may-exist add-br xenbr3
> @@ -877,10 +874,8 @@ Applying changes to /etc/sysconfig/network-scripts/route-xapi1 configuration
>   Applying changes to /etc/sysconfig/network-scripts/ifcfg-xapi1 configuration
>   /sbin/ip link set eth0 up mtu 1500
>   /sbin/ethtool -K eth0 gro off lro off
> -/usr/sbin/ovs-vlan-bug-workaround eth0 on
>   /sbin/ip link set eth1 up mtu 1500
>   /sbin/ethtool -K eth1 gro off lro off
> -/usr/sbin/ovs-vlan-bug-workaround eth1 off
>   /usr/bin/ovs-vsctl --timeout=20
>       --if-exists del-br xenbr0
>       --if-exists del-br xenbr1
> @@ -967,10 +962,8 @@ Applying changes to /etc/sysconfig/network-scripts/route-xapi2 configuration
>   Applying changes to /etc/sysconfig/network-scripts/ifcfg-xapi2 configuration
>   /sbin/ip link set eth0 up mtu 1500
>   /sbin/ethtool -K eth0 gro off lro off
> -/usr/sbin/ovs-vlan-bug-workaround eth0 on
>   /sbin/ip link set eth1 up mtu 1500
>   /sbin/ethtool -K eth1 gro off lro off
> -/usr/sbin/ovs-vlan-bug-workaround eth1 off
>   /usr/bin/ovs-vsctl --timeout=20
>       --if-exists del-br xenbr0
>       --if-exists del-br xenbr1
> diff --git a/utilities/.gitignore b/utilities/.gitignore
> index 10185c5d81d2..0a11356d4b29 100644
> --- a/utilities/.gitignore
> +++ b/utilities/.gitignore
> @@ -31,8 +31,6 @@
>   /ovs-tcpdump.8
>   /ovs-tcpundump
>   /ovs-tcpundump.1
> -/ovs-vlan-bug-workaround
> -/ovs-vlan-bug-workaround.8
>   /ovs-vlan-test
>   /ovs-vlan-test.8
>   /ovs-vsctl
> diff --git a/utilities/automake.mk b/utilities/automake.mk
> index 0660c078d259..37a59cfea451 100644
> --- a/utilities/automake.mk
> +++ b/utilities/automake.mk
> @@ -76,9 +76,7 @@ MAN_ROOTS += \
>   	utilities/ovs-pki.8.in \
>   	utilities/ovs-tcpdump.8.in \
>   	utilities/ovs-tcpundump.1.in \
> -	utilities/ovs-vlan-bug-workaround.8.in \
>   	utilities/ovs-vsctl.8.in
> -MAN_FRAGMENTS += utilities/ovs-vlan-bugs.man
>   CLEANFILES += \
>   	utilities/ovs-appctl.8 \
>   	utilities/ovs-ctl \
> @@ -104,7 +102,6 @@ CLEANFILES += \
>   	utilities/ovs-tcpundump.1 \
>   	utilities/ovs-test \
>   	utilities/ovs-vlan-test \
> -	utilities/ovs-vlan-bug-workaround.8 \
>   	utilities/ovs-vsctl.8
>   
>   man_MANS += \
> @@ -121,7 +118,6 @@ man_MANS += \
>   	utilities/ovs-pki.8 \
>   	utilities/ovs-tcpdump.8 \
>   	utilities/ovs-tcpundump.1 \
> -	utilities/ovs-vlan-bug-workaround.8 \
>   	utilities/ovs-vsctl.8
>   
>   utilities_ovs_appctl_SOURCES = utilities/ovs-appctl.c
> @@ -142,10 +138,6 @@ utilities_ovs_vsctl_SOURCES = utilities/ovs-vsctl.c
>   utilities_ovs_vsctl_LDADD = lib/libopenvswitch.la
>   
>   if LINUX
> -sbin_PROGRAMS += utilities/ovs-vlan-bug-workaround
> -utilities_ovs_vlan_bug_workaround_SOURCES = utilities/ovs-vlan-bug-workaround.c
> -utilities_ovs_vlan_bug_workaround_LDADD = lib/libopenvswitch.la
> -
>   noinst_PROGRAMS += utilities/nlmon
>   utilities_nlmon_SOURCES = utilities/nlmon.c
>   utilities_nlmon_LDADD = lib/libopenvswitch.la
> diff --git a/utilities/ovs-vlan-bug-workaround.8.in b/utilities/ovs-vlan-bug-workaround.8.in
> deleted file mode 100644
> index 4bb4bb77332c..000000000000
> --- a/utilities/ovs-vlan-bug-workaround.8.in
> +++ /dev/null
> @@ -1,86 +0,0 @@
> -.\" -*- nroff -*-
> -.so lib/ovs.tmac
> -.TH ovs\-vlan\-bug\-workaround 8 "@VERSION@" "Open vSwitch" "Open vSwitch Manual"
> -.ds PN ovs\-vlan\-bug\-workaround
> -.
> -.SH NAME
> -ovs\-vlan\-bug\-workaround \- utility for configuring Linux VLAN driver bug workaround
> -.
> -.SH SYNOPSIS
> -\fBovs\-vlan\-bug\-workaround \fInetdev\fR \fBon\fR
> -.br
> -\fBovs\-vlan\-bug\-workaround \fInetdev\fR \fBoff\fR
> -.br
> -\fBovs\-vlan\-bug\-workaround \-\-help
> -.br
> -\fBovs\-vlan\-bug\-workaround \-\-version
> -.SH DESCRIPTION
> -.
> -.PP
> -Some Linux network drivers support a feature called ``VLAN
> -acceleration''.  VLAN acceleration is associated with a data structure
> -called a \fBvlan_group\fR that is, abstractly, a dictionary that maps
> -from a VLAN ID (in the range 0 to 4095) to a VLAN device, that is, a
> -Linux network device associated with a particular VLAN,
> -e.g. \fBeth0.9\fR for VLAN 9 on \fBeth0\fR.
> -.PP
> -Some drivers that support VLAN acceleration have bugs that fall
> -roughly into the categories listed below.  \fBovs\-vlan\-test\fR(8)
> -can test for these driver bugs.
> -.so utilities/ovs-vlan-bugs.man
> -.PP
> -.PP
> -The correct long term solution is to fix these driver bugs.
> -.PP
> -For now, \fBovs\-vlan\-bug\-workaround\fR can enable a special-purpose
> -workaround for devices with buggy VLAN acceleration.  A kernel patch
> -must be applied for this workaround to work.
> -.PP
> -Use the command \fBovs\-vlan\-bug\-workaround \fInetdev\fR \fBon\fR to
> -enable the VLAN driver bug workaround for network device \fInetdev\fR.
> -Use the command \fBovs\-vlan\-bug\-workaround \fInetdev\fR \fBoff\fR to
> -disable the VLAN driver bug workaround for network device \fInetdev\fR.
> -.SH "DRIVER DETAILS"
> -.PP
> -The following drivers in Linux version
> -2.6.32.12-0.7.1.xs1.0.0.311.170586 implement VLAN acceleration and are
> -relevant to Open vSwitch on XenServer.  We have not tested any version
> -of most of these drivers, so we do not know whether they have a VLAN
> -problem that needs to be fixed.  The drivers are listed by the name
> -that they report in, e.g., \fBethtool \-i\fR output; in a few cases
> -this differs slightly from the name of the module's \fB.ko\fR file:
> -.
> -.nf
> -.ta T 1i
> -\fB8139cp	acenic	amd8111e	atl1c	ATL1E	atl1
> -atl2	be2net	bna	bnx2	bnx2x	cnic
> -cxgb	cxgb3	e1000	e1000e	enic	forcedeth
> -igb	igbvf	ixgb	ixgbe	jme	ml4x_core
> -ns83820	qlge	r8169	S2IO	sky2	starfire
> -tehuti	tg3	typhoon	via-velocity	vxge
> -.fi
> -.PP
> -The following drivers use \fBvlan_group\fR but are irrelevant to Open
> -vSwitch on XenServer:
> -.IP "\fBbonding\fR"
> -Not used with Open vSwitch on XenServer.
> -.IP "\fBgianfar\fR"
> -Not shipped with XenServer.  A FreeScale CPU-integrated device.
> -.IP "\fBehea\fR"
> -Cannot be built on x86.  IBM Power architecture only.
> -.IP "\fBstmmac\fR"
> -Cannot be built on x86.  SH4 architecture only.
> -.IP "\fBvmxnet3\fR"
> -Not shipped with XenServer.  For use inside VMware VMs only.
> -.
> -.SH OPTIONS
> -.
> -.so lib/common.man
> -.
> -.SH BUGS
> -.
> -Obviously.
> -.
> -.SH "SEE ALSO"
> -.
> -.BR ovs\-vlan\-test (8).
> diff --git a/utilities/ovs-vlan-bug-workaround.c b/utilities/ovs-vlan-bug-workaround.c
> deleted file mode 100644
> index add800e56633..000000000000
> --- a/utilities/ovs-vlan-bug-workaround.c
> +++ /dev/null
> @@ -1,145 +0,0 @@
> -/*
> - * Copyright (c) 2011 Nicira, Inc.
> - *
> - * Licensed under the Apache License, Version 2.0 (the "License");
> - * you may not use this file except in compliance with the License.
> - * You may obtain a copy of the License at:
> - *
> - *     http://www.apache.org/licenses/LICENSE-2.0
> - *
> - * Unless required by applicable law or agreed to in writing, software
> - * distributed under the License is distributed on an "AS IS" BASIS,
> - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> - * See the License for the specific language governing permissions and
> - * limitations under the License.
> - */
> -
> -#include <config.h>
> -
> -#include <errno.h>
> -#include <getopt.h>
> -#include <linux/if_vlan.h>
> -#include <linux/sockios.h>
> -#include <net/if.h>
> -#include <stdlib.h>
> -#include <sys/ioctl.h>
> -#include <sys/socket.h>
> -#include <stdio.h>
> -#include <string.h>
> -#include <unistd.h>
> -
> -#include "command-line.h"
> -#include "util.h"
> -
> -#define ADD_ALL_VLANS_CMD 10
> -#define DEL_ALL_VLANS_CMD 11
> -
> -static void usage(void);
> -static void parse_options(int argc, char *argv[]);
> -
> -int
> -main(int argc, char *argv[])
> -{
> -    struct vlan_ioctl_args vlan_args;
> -    const char *netdev, *setting;
> -    int fd;
> -
> -    set_program_name(argv[0]);
> -
> -    parse_options(argc, argv);
> -    if (argc - optind != 2) {
> -        ovs_fatal(0, "exactly two non-option arguments are required "
> -                  "(use --help for help)");
> -    }
> -
> -    memset(&vlan_args, 0, sizeof vlan_args);
> -
> -    /* Get command. */
> -    setting = argv[optind + 1];
> -    if (!strcmp(setting, "on")) {
> -        vlan_args.cmd = ADD_ALL_VLANS_CMD;
> -    } else if (!strcmp(setting, "off")) {
> -        vlan_args.cmd = DEL_ALL_VLANS_CMD;
> -    } else {
> -        ovs_fatal(0, "second command line argument must be \"on\" or \"off\" "
> -                  "(not \"%s\")", setting);
> -    }
> -
> -    /* Get network device name. */
> -    netdev = argv[optind];
> -    if (strlen(netdev) >= IFNAMSIZ) {
> -        ovs_fatal(0, "%s: network device name too long", netdev);
> -    }
> -    strcpy(vlan_args.device1, netdev);
> -
> -    /* Execute operation. */
> -    fd = socket(AF_INET, SOCK_STREAM, 0);
> -    if (fd < 0) {
> -        ovs_fatal(errno, "socket creation failed");
> -    }
> -    if (ioctl(fd, SIOCSIFVLAN, &vlan_args) < 0) {
> -        if (errno == ENOPKG) {
> -            ovs_fatal(0, "operation failed (8021q module not loaded)");
> -        } else if (errno == EOPNOTSUPP) {
> -            ovs_fatal(0, "operation failed (kernel does not support the "
> -                      "VLAN bug workaround)");
> -        } else {
> -            ovs_fatal(errno, "operation failed");
> -        }
> -    }
> -    close(fd);
> -
> -    return 0;
> -}
> -
> -static void
> -usage(void)
> -{
> -    printf("\
> -%s, for enabling or disabling the kernel VLAN bug workaround\n\
> -usage: %s NETDEV SETTING\n\
> -where NETDEV is a network device (e.g. \"eth0\")\n\
> -  and SETTING is \"on\" to enable the workaround or \"off\" to disable it.\n\
> -\n\
> -Options:\n\
> -  -h, --help         Print this helpful information\n\
> -  -V, --version      Display version information\n",
> -           program_name, program_name);
> -    exit(EXIT_SUCCESS);
> -}
> -
> -static void
> -parse_options(int argc, char *argv[])
> -{
> -    static const struct option long_options[] = {
> -        {"help", no_argument, NULL, 'h'},
> -        {"version", no_argument, NULL, 'V'},
> -        {NULL, 0, NULL, 0},
> -    };
> -    char *short_options = ovs_cmdl_long_options_to_short_options(long_options);
> -
> -    for (;;) {
> -        int option;
> -
> -        option = getopt_long(argc, argv, "+t:hVe", long_options, NULL);
> -        if (option == -1) {
> -            break;
> -        }
> -        switch (option) {
> -        case 'h':
> -            usage();
> -            break;
> -
> -        case 'V':
> -            ovs_print_version(0, 0);
> -            exit(EXIT_SUCCESS);
> -
> -        case '?':
> -            exit(EXIT_FAILURE);
> -
> -        default:
> -            OVS_NOT_REACHED();
> -        }
> -    }
> -    free(short_options);
> -}
> diff --git a/utilities/ovs-vlan-bugs.man b/utilities/ovs-vlan-bugs.man
> deleted file mode 100644
> index 1e62d16ef05e..000000000000
> --- a/utilities/ovs-vlan-bugs.man
> +++ /dev/null
> @@ -1,22 +0,0 @@
> -.IP \(bu
> -When NICs use VLAN stripping on receive they must pass a pointer to a
> -\fBvlan_group\fR when reporting the stripped tag to the networking
> -core.  If no \fBvlan_group\fR is in use then some drivers just drop
> -the extracted tag.  Drivers are supposed to only enable stripping if a
> -\fBvlan_group\fR is registered but not all of them do that.
> -.
> -.IP \(bu
> -On receive, some drivers handle priority tagged packets specially and
> -don't pass the tag onto the network stack at all, so Open vSwitch
> -never has a chance to see it.
> -.
> -.IP \(bu
> -Some drivers size their receive buffers based on whether a
> -\fBvlan_group\fR is enabled, meaning that a maximum size packet with a
> -VLAN tag will not fit if no \fBvlan_group\fR is configured.
> -.
> -.IP \(bu
> -On transmit, some drivers expect that VLAN acceleration will be used
> -if it is available, which can only be done if a \fBvlan_group\fR is
> -configured.  In these cases, the driver may fail to parse the packet
> -and correctly setup checksum offloading or TSO.
> diff --git a/xenserver/openvswitch-xen.spec.in b/xenserver/openvswitch-xen.spec.in
> index cdc341dcc3d3..4d21c6364ffc 100644
> --- a/xenserver/openvswitch-xen.spec.in
> +++ b/xenserver/openvswitch-xen.spec.in
> @@ -459,7 +459,6 @@ exit 0
>   /usr/share/openvswitch/vswitch.ovsschema
>   /usr/share/openvswitch/vtep.ovsschema
>   /usr/sbin/ovs-bugtool
> -/usr/sbin/ovs-vlan-bug-workaround
>   /usr/sbin/ovs-vswitchd
>   /usr/sbin/ovsdb-server
>   /usr/bin/ovs-appctl
> @@ -493,7 +492,6 @@ exit 0
>   /usr/share/man/man8/ovs-parse-backtrace.8.gz
>   /usr/share/man/man1/ovs-pcap.1.gz
>   /usr/share/man/man1/ovs-tcpundump.1.gz
> -/usr/share/man/man8/ovs-vlan-bug-workaround.8.gz
>   /usr/share/man/man8/ovs-vlan-test.8.gz
>   /usr/share/man/man8/ovs-vsctl.8.gz
>   /usr/share/man/man8/ovs-vswitchd.8.gz
> diff --git a/xenserver/opt_xensource_libexec_InterfaceReconfigureVswitch.py b/xenserver/opt_xensource_libexec_InterfaceReconfigureVswitch.py
> index 53468b7064e5..9ada3776f82a 100644
> --- a/xenserver/opt_xensource_libexec_InterfaceReconfigureVswitch.py
> +++ b/xenserver/opt_xensource_libexec_InterfaceReconfigureVswitch.py
> @@ -632,12 +632,6 @@ class DatapathVswitch(Datapath):
>               else:
>                   vlan_bug_workaround = netdev_has_vlan_accel(dev)
>   
> -            if vlan_bug_workaround:
> -                setting = 'on'
> -            else:
> -                setting = 'off'
> -            run_command(['/usr/sbin/ovs-vlan-bug-workaround', dev, setting])
> -
>           datapath_modify_config(self._vsctl_argv)
>           if self._bridge_flows:
>               ofports = []
Ben Pfaff Oct. 14, 2019, 10:37 p.m. UTC | #2
On Mon, Oct 14, 2019 at 03:18:01PM -0700, Gregory Rose wrote:
> On 10/10/2019 12:07 PM, Ben Pfaff wrote:
> > This workaround only applied to kernels earlier than 2.6.37, but OVS
> > only supports 3.10 and later.
> > 
> > As the original author of this code, I won't miss it.
> > 
> > Signed-off-by: Ben Pfaff <blp@ovn.org>
> 
> Nice.
> 
> I applied the patch and compile tested it.  I then ran 'make check' and
> 'make check-kmod' and found no regression
> or other issues.  Reviewing the code it looks fine to me - reviewing patches
> that remove stuff is easier.
> 
> Thanks Ben, always a plus to get rid of old gunk.
> 
> Tested-by: Greg Rose <gvrose8192@gmail.com>
> Reviewed-by: Greg Rose <gvrose8192@gmail.com>

Thanks a lot, Greg.  I applied this to master.

Patch
diff mbox series

diff --git a/Documentation/faq/vlan.rst b/Documentation/faq/vlan.rst
index 80e6660f5e77..d64db7a0d321 100644
--- a/Documentation/faq/vlan.rst
+++ b/Documentation/faq/vlan.rst
@@ -77,46 +77,6 @@  Q: What's a VLAN?
 
 Q: VLANs don't work.
 
-    A: Many drivers in Linux kernels before version 3.3 had VLAN-related bugs.
-    If you are having problems with VLANs that you suspect to be driver
-    related, then you have several options:
-
-    - Upgrade to Linux 3.3 or later.
-
-    - Build and install a fixed version of the particular driver that is
-      causing trouble, if one is available.
-
-    - Use a NIC whose driver does not have VLAN problems.
-
-    - Use "VLAN splinters", a feature in Open vSwitch 1.4 upto 2.5 that works
-      around bugs in kernel drivers.  To enable VLAN splinters on interface
-      eth0, use the command::
-
-          $ ovs-vsctl set interface eth0 other-config:enable-vlan-splinters=true
-
-      For VLAN splinters to be effective, Open vSwitch must know which VLANs
-      are in use.  See the "VLAN splinters" section in the Interface table in
-      ovs-vswitchd.conf.db(5) for details on how Open vSwitch infers in-use
-      VLANs.
-
-      VLAN splinters increase memory use and reduce performance, so use them
-      only if needed.
-
-    - Apply the "vlan workaround" patch from the XenServer kernel patch queue,
-      build Open vSwitch against this patched kernel, and then use
-      ovs-vlan-bug-workaround(8) to enable the VLAN workaround for each
-      interface whose driver is buggy.
-
-      (This is a nontrivial exercise, so this option is included only for
-      completeness.)
-
-    It is not always easy to tell whether a Linux kernel driver has buggy VLAN
-    support.  The ovs-vlan-test(8) and ovs-test(8) utilities can help you test.
-    See their manpages for details.  Of the two utilities, ovs-test(8) is newer
-    and more thorough, but ovs-vlan-test(8) may be easier to use.
-
-Q: VLANs still don't work.  I've tested the driver so I know that it's OK.
-
     A: Do you have VLANs enabled on the physical switch that OVS is attached
     to?  Make sure that the port is configured to trunk the VLAN or VLANs that
     you are using with OVS.
diff --git a/Documentation/ref/index.rst b/Documentation/ref/index.rst
index 0cb5ef571676..83f031c4f646 100644
--- a/Documentation/ref/index.rst
+++ b/Documentation/ref/index.rst
@@ -126,10 +126,6 @@  The remainder are still in roff format can be found below:
      - `(pdf) <http://www.openvswitch.org/support/dist-docs/ovs-testcontroller.8.pdf>`__
      - `(html) <http://www.openvswitch.org/support/dist-docs/ovs-testcontroller.8.html>`__
      - `(plain text) <http://www.openvswitch.org/support/dist-docs/ovs-testcontroller.8.txt>`__
-   * - ovs-vlan-bug-workaround(8)
-     - `(pdf) <http://www.openvswitch.org/support/dist-docs/ovs-vlan-bug-workaround.8.pdf>`__
-     - `(html) <http://www.openvswitch.org/support/dist-docs/ovs-vlan-bug-workaround.8.html>`__
-     - `(plain text) <http://www.openvswitch.org/support/dist-docs/ovs-vlan-bug-workaround.8.txt>`__
    * - ovs-vlan-test(8)
      - `(pdf) <http://www.openvswitch.org/support/dist-docs/ovs-vlan-test.8.pdf>`__
      - `(html) <http://www.openvswitch.org/support/dist-docs/ovs-vlan-test.8.html>`__
diff --git a/acinclude.m4 b/acinclude.m4
index 52f92870eaaa..b3e5f94690c8 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -847,8 +847,6 @@  AC_DEFUN([OVS_CHECK_LINUX_COMPAT], [
 
   OVS_GREP_IFELSE([$KSRC/include/net/sctp/checksum.h], [sctp_compute_cksum])
 
-  OVS_GREP_IFELSE([$KSRC/include/linux/if_vlan.h], [ADD_ALL_VLANS_CMD],
-                  [OVS_DEFINE([HAVE_VLAN_BUG_WORKAROUND])])
   OVS_GREP_IFELSE([$KSRC/include/linux/if_vlan.h], [vlan_insert_tag_set_proto])
   OVS_GREP_IFELSE([$KSRC/include/linux/if_vlan.h], [__vlan_insert_tag])
   OVS_GREP_IFELSE([$KSRC/include/linux/if_vlan.h], [vlan_get_protocol])
diff --git a/manpages.mk b/manpages.mk
index b43deaef1ae5..281ebd8fe946 100644
--- a/manpages.mk
+++ b/manpages.mk
@@ -232,16 +232,6 @@  lib/vconn-active.man:
 lib/vconn-passive.man:
 lib/vlog.man:
 
-utilities/ovs-vlan-bug-workaround.8: \
-	utilities/ovs-vlan-bug-workaround.8.in \
-	lib/common.man \
-	lib/ovs.tmac \
-	utilities/ovs-vlan-bugs.man
-utilities/ovs-vlan-bug-workaround.8.in:
-lib/common.man:
-lib/ovs.tmac:
-utilities/ovs-vlan-bugs.man:
-
 utilities/ovs-vsctl.8: \
 	utilities/ovs-vsctl.8.in \
 	lib/common.man \
diff --git a/rhel/openvswitch-fedora.spec.in b/rhel/openvswitch-fedora.spec.in
index 229bb22148ec..80010a41bd0b 100644
--- a/rhel/openvswitch-fedora.spec.in
+++ b/rhel/openvswitch-fedora.spec.in
@@ -268,9 +268,7 @@  install -p -D -m 0755 \
         $RPM_BUILD_ROOT%{_datadir}/openvswitch/scripts/ovs-systemd-reload
 
 # remove unpackaged files
-rm -f $RPM_BUILD_ROOT%{_bindir}/ovs-parse-backtrace \
-        $RPM_BUILD_ROOT%{_sbindir}/ovs-vlan-bug-workaround \
-        $RPM_BUILD_ROOT%{_mandir}/man8/ovs-vlan-bug-workaround.8
+rm -f $RPM_BUILD_ROOT%{_bindir}/ovs-parse-backtrace
 
 %check
 %if %{with check}
diff --git a/rhel/openvswitch.spec.in b/rhel/openvswitch.spec.in
index 27935f81ed92..4b6b585c45a0 100644
--- a/rhel/openvswitch.spec.in
+++ b/rhel/openvswitch.spec.in
@@ -99,9 +99,7 @@  rm \
     $RPM_BUILD_ROOT/usr/bin/ovs-test \
     $RPM_BUILD_ROOT/usr/bin/ovs-l3ping \
     $RPM_BUILD_ROOT/usr/share/man/man8/ovs-test.8 \
-    $RPM_BUILD_ROOT/usr/share/man/man8/ovs-l3ping.8 \
-    $RPM_BUILD_ROOT/usr/sbin/ovs-vlan-bug-workaround \
-    $RPM_BUILD_ROOT/usr/share/man/man8/ovs-vlan-bug-workaround.8
+    $RPM_BUILD_ROOT/usr/share/man/man8/ovs-l3ping.8
 (cd "$RPM_BUILD_ROOT" && rm -rf usr/%{_lib}/*.la)
 (cd "$RPM_BUILD_ROOT" && rm -rf usr/include)
 
diff --git a/tests/interface-reconfigure.at b/tests/interface-reconfigure.at
index f4ceb284af4d..12b66dc0fc43 100644
--- a/tests/interface-reconfigure.at
+++ b/tests/interface-reconfigure.at
@@ -39,8 +39,7 @@  EOF
             sbin/ip \
             sbin/update-issue \
             sbin/vconfig \
-            usr/sbin/brctl \
-            usr/sbin/ovs-vlan-bug-workaround
+            usr/sbin/brctl
         do
             mkdir -p `dirname $utility`
             cat > $utility <<'EOF'
@@ -716,7 +715,6 @@  Applying changes to /etc/sysconfig/network configuration
 Applying changes to /etc/sysconfig/network-scripts/ifcfg-xenbr2 configuration
 /sbin/ip link set eth2 up mtu 1500
 /sbin/ethtool -K eth2 gro off lro off
-/usr/sbin/ovs-vlan-bug-workaround eth2 on
 /usr/bin/ovs-vsctl --timeout=20
     --with-iface --if-exists del-port eth2
     --may-exist add-br xenbr2
@@ -791,7 +789,6 @@  Applying changes to /etc/sysconfig/network-scripts/route-xapi3 configuration
 Applying changes to /etc/sysconfig/network-scripts/ifcfg-xapi3 configuration
 /sbin/ip link set eth3 up mtu 1500
 /sbin/ethtool -K eth3 gro off lro off
-/usr/sbin/ovs-vlan-bug-workaround eth3 on
 /usr/bin/ovs-vsctl --timeout=20
     --with-iface --if-exists del-port eth3
     --may-exist add-br xenbr3
@@ -877,10 +874,8 @@  Applying changes to /etc/sysconfig/network-scripts/route-xapi1 configuration
 Applying changes to /etc/sysconfig/network-scripts/ifcfg-xapi1 configuration
 /sbin/ip link set eth0 up mtu 1500
 /sbin/ethtool -K eth0 gro off lro off
-/usr/sbin/ovs-vlan-bug-workaround eth0 on
 /sbin/ip link set eth1 up mtu 1500
 /sbin/ethtool -K eth1 gro off lro off
-/usr/sbin/ovs-vlan-bug-workaround eth1 off
 /usr/bin/ovs-vsctl --timeout=20
     --if-exists del-br xenbr0
     --if-exists del-br xenbr1
@@ -967,10 +962,8 @@  Applying changes to /etc/sysconfig/network-scripts/route-xapi2 configuration
 Applying changes to /etc/sysconfig/network-scripts/ifcfg-xapi2 configuration
 /sbin/ip link set eth0 up mtu 1500
 /sbin/ethtool -K eth0 gro off lro off
-/usr/sbin/ovs-vlan-bug-workaround eth0 on
 /sbin/ip link set eth1 up mtu 1500
 /sbin/ethtool -K eth1 gro off lro off
-/usr/sbin/ovs-vlan-bug-workaround eth1 off
 /usr/bin/ovs-vsctl --timeout=20
     --if-exists del-br xenbr0
     --if-exists del-br xenbr1
diff --git a/utilities/.gitignore b/utilities/.gitignore
index 10185c5d81d2..0a11356d4b29 100644
--- a/utilities/.gitignore
+++ b/utilities/.gitignore
@@ -31,8 +31,6 @@ 
 /ovs-tcpdump.8
 /ovs-tcpundump
 /ovs-tcpundump.1
-/ovs-vlan-bug-workaround
-/ovs-vlan-bug-workaround.8
 /ovs-vlan-test
 /ovs-vlan-test.8
 /ovs-vsctl
diff --git a/utilities/automake.mk b/utilities/automake.mk
index 0660c078d259..37a59cfea451 100644
--- a/utilities/automake.mk
+++ b/utilities/automake.mk
@@ -76,9 +76,7 @@  MAN_ROOTS += \
 	utilities/ovs-pki.8.in \
 	utilities/ovs-tcpdump.8.in \
 	utilities/ovs-tcpundump.1.in \
-	utilities/ovs-vlan-bug-workaround.8.in \
 	utilities/ovs-vsctl.8.in
-MAN_FRAGMENTS += utilities/ovs-vlan-bugs.man
 CLEANFILES += \
 	utilities/ovs-appctl.8 \
 	utilities/ovs-ctl \
@@ -104,7 +102,6 @@  CLEANFILES += \
 	utilities/ovs-tcpundump.1 \
 	utilities/ovs-test \
 	utilities/ovs-vlan-test \
-	utilities/ovs-vlan-bug-workaround.8 \
 	utilities/ovs-vsctl.8
 
 man_MANS += \
@@ -121,7 +118,6 @@  man_MANS += \
 	utilities/ovs-pki.8 \
 	utilities/ovs-tcpdump.8 \
 	utilities/ovs-tcpundump.1 \
-	utilities/ovs-vlan-bug-workaround.8 \
 	utilities/ovs-vsctl.8
 
 utilities_ovs_appctl_SOURCES = utilities/ovs-appctl.c
@@ -142,10 +138,6 @@  utilities_ovs_vsctl_SOURCES = utilities/ovs-vsctl.c
 utilities_ovs_vsctl_LDADD = lib/libopenvswitch.la
 
 if LINUX
-sbin_PROGRAMS += utilities/ovs-vlan-bug-workaround
-utilities_ovs_vlan_bug_workaround_SOURCES = utilities/ovs-vlan-bug-workaround.c
-utilities_ovs_vlan_bug_workaround_LDADD = lib/libopenvswitch.la
-
 noinst_PROGRAMS += utilities/nlmon
 utilities_nlmon_SOURCES = utilities/nlmon.c
 utilities_nlmon_LDADD = lib/libopenvswitch.la
diff --git a/utilities/ovs-vlan-bug-workaround.8.in b/utilities/ovs-vlan-bug-workaround.8.in
deleted file mode 100644
index 4bb4bb77332c..000000000000
--- a/utilities/ovs-vlan-bug-workaround.8.in
+++ /dev/null
@@ -1,86 +0,0 @@ 
-.\" -*- nroff -*-
-.so lib/ovs.tmac
-.TH ovs\-vlan\-bug\-workaround 8 "@VERSION@" "Open vSwitch" "Open vSwitch Manual"
-.ds PN ovs\-vlan\-bug\-workaround
-.
-.SH NAME
-ovs\-vlan\-bug\-workaround \- utility for configuring Linux VLAN driver bug workaround
-.
-.SH SYNOPSIS
-\fBovs\-vlan\-bug\-workaround \fInetdev\fR \fBon\fR
-.br
-\fBovs\-vlan\-bug\-workaround \fInetdev\fR \fBoff\fR
-.br
-\fBovs\-vlan\-bug\-workaround \-\-help
-.br
-\fBovs\-vlan\-bug\-workaround \-\-version
-.SH DESCRIPTION
-.
-.PP
-Some Linux network drivers support a feature called ``VLAN
-acceleration''.  VLAN acceleration is associated with a data structure
-called a \fBvlan_group\fR that is, abstractly, a dictionary that maps
-from a VLAN ID (in the range 0 to 4095) to a VLAN device, that is, a
-Linux network device associated with a particular VLAN,
-e.g. \fBeth0.9\fR for VLAN 9 on \fBeth0\fR.
-.PP
-Some drivers that support VLAN acceleration have bugs that fall
-roughly into the categories listed below.  \fBovs\-vlan\-test\fR(8)
-can test for these driver bugs.
-.so utilities/ovs-vlan-bugs.man
-.PP
-.PP
-The correct long term solution is to fix these driver bugs.
-.PP
-For now, \fBovs\-vlan\-bug\-workaround\fR can enable a special-purpose
-workaround for devices with buggy VLAN acceleration.  A kernel patch
-must be applied for this workaround to work.
-.PP
-Use the command \fBovs\-vlan\-bug\-workaround \fInetdev\fR \fBon\fR to
-enable the VLAN driver bug workaround for network device \fInetdev\fR.
-Use the command \fBovs\-vlan\-bug\-workaround \fInetdev\fR \fBoff\fR to
-disable the VLAN driver bug workaround for network device \fInetdev\fR.
-.SH "DRIVER DETAILS"
-.PP
-The following drivers in Linux version
-2.6.32.12-0.7.1.xs1.0.0.311.170586 implement VLAN acceleration and are
-relevant to Open vSwitch on XenServer.  We have not tested any version
-of most of these drivers, so we do not know whether they have a VLAN
-problem that needs to be fixed.  The drivers are listed by the name
-that they report in, e.g., \fBethtool \-i\fR output; in a few cases
-this differs slightly from the name of the module's \fB.ko\fR file:
-.
-.nf
-.ta T 1i
-\fB8139cp	acenic	amd8111e	atl1c	ATL1E	atl1
-atl2	be2net	bna	bnx2	bnx2x	cnic
-cxgb	cxgb3	e1000	e1000e	enic	forcedeth
-igb	igbvf	ixgb	ixgbe	jme	ml4x_core
-ns83820	qlge	r8169	S2IO	sky2	starfire
-tehuti	tg3	typhoon	via-velocity	vxge
-.fi
-.PP
-The following drivers use \fBvlan_group\fR but are irrelevant to Open
-vSwitch on XenServer:
-.IP "\fBbonding\fR"
-Not used with Open vSwitch on XenServer.
-.IP "\fBgianfar\fR"
-Not shipped with XenServer.  A FreeScale CPU-integrated device.
-.IP "\fBehea\fR"
-Cannot be built on x86.  IBM Power architecture only.
-.IP "\fBstmmac\fR"
-Cannot be built on x86.  SH4 architecture only.
-.IP "\fBvmxnet3\fR"
-Not shipped with XenServer.  For use inside VMware VMs only.
-.
-.SH OPTIONS
-.
-.so lib/common.man
-.
-.SH BUGS
-.
-Obviously.
-.
-.SH "SEE ALSO"
-.
-.BR ovs\-vlan\-test (8).
diff --git a/utilities/ovs-vlan-bug-workaround.c b/utilities/ovs-vlan-bug-workaround.c
deleted file mode 100644
index add800e56633..000000000000
--- a/utilities/ovs-vlan-bug-workaround.c
+++ /dev/null
@@ -1,145 +0,0 @@ 
-/*
- * Copyright (c) 2011 Nicira, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <config.h>
-
-#include <errno.h>
-#include <getopt.h>
-#include <linux/if_vlan.h>
-#include <linux/sockios.h>
-#include <net/if.h>
-#include <stdlib.h>
-#include <sys/ioctl.h>
-#include <sys/socket.h>
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-
-#include "command-line.h"
-#include "util.h"
-
-#define ADD_ALL_VLANS_CMD 10
-#define DEL_ALL_VLANS_CMD 11
-
-static void usage(void);
-static void parse_options(int argc, char *argv[]);
-
-int
-main(int argc, char *argv[])
-{
-    struct vlan_ioctl_args vlan_args;
-    const char *netdev, *setting;
-    int fd;
-
-    set_program_name(argv[0]);
-
-    parse_options(argc, argv);
-    if (argc - optind != 2) {
-        ovs_fatal(0, "exactly two non-option arguments are required "
-                  "(use --help for help)");
-    }
-
-    memset(&vlan_args, 0, sizeof vlan_args);
-
-    /* Get command. */
-    setting = argv[optind + 1];
-    if (!strcmp(setting, "on")) {
-        vlan_args.cmd = ADD_ALL_VLANS_CMD;
-    } else if (!strcmp(setting, "off")) {
-        vlan_args.cmd = DEL_ALL_VLANS_CMD;
-    } else {
-        ovs_fatal(0, "second command line argument must be \"on\" or \"off\" "
-                  "(not \"%s\")", setting);
-    }
-
-    /* Get network device name. */
-    netdev = argv[optind];
-    if (strlen(netdev) >= IFNAMSIZ) {
-        ovs_fatal(0, "%s: network device name too long", netdev);
-    }
-    strcpy(vlan_args.device1, netdev);
-
-    /* Execute operation. */
-    fd = socket(AF_INET, SOCK_STREAM, 0);
-    if (fd < 0) {
-        ovs_fatal(errno, "socket creation failed");
-    }
-    if (ioctl(fd, SIOCSIFVLAN, &vlan_args) < 0) {
-        if (errno == ENOPKG) {
-            ovs_fatal(0, "operation failed (8021q module not loaded)");
-        } else if (errno == EOPNOTSUPP) {
-            ovs_fatal(0, "operation failed (kernel does not support the "
-                      "VLAN bug workaround)");
-        } else {
-            ovs_fatal(errno, "operation failed");
-        }
-    }
-    close(fd);
-
-    return 0;
-}
-
-static void
-usage(void)
-{
-    printf("\
-%s, for enabling or disabling the kernel VLAN bug workaround\n\
-usage: %s NETDEV SETTING\n\
-where NETDEV is a network device (e.g. \"eth0\")\n\
-  and SETTING is \"on\" to enable the workaround or \"off\" to disable it.\n\
-\n\
-Options:\n\
-  -h, --help         Print this helpful information\n\
-  -V, --version      Display version information\n",
-           program_name, program_name);
-    exit(EXIT_SUCCESS);
-}
-
-static void
-parse_options(int argc, char *argv[])
-{
-    static const struct option long_options[] = {
-        {"help", no_argument, NULL, 'h'},
-        {"version", no_argument, NULL, 'V'},
-        {NULL, 0, NULL, 0},
-    };
-    char *short_options = ovs_cmdl_long_options_to_short_options(long_options);
-
-    for (;;) {
-        int option;
-
-        option = getopt_long(argc, argv, "+t:hVe", long_options, NULL);
-        if (option == -1) {
-            break;
-        }
-        switch (option) {
-        case 'h':
-            usage();
-            break;
-
-        case 'V':
-            ovs_print_version(0, 0);
-            exit(EXIT_SUCCESS);
-
-        case '?':
-            exit(EXIT_FAILURE);
-
-        default:
-            OVS_NOT_REACHED();
-        }
-    }
-    free(short_options);
-}
diff --git a/utilities/ovs-vlan-bugs.man b/utilities/ovs-vlan-bugs.man
deleted file mode 100644
index 1e62d16ef05e..000000000000
--- a/utilities/ovs-vlan-bugs.man
+++ /dev/null
@@ -1,22 +0,0 @@ 
-.IP \(bu
-When NICs use VLAN stripping on receive they must pass a pointer to a
-\fBvlan_group\fR when reporting the stripped tag to the networking
-core.  If no \fBvlan_group\fR is in use then some drivers just drop
-the extracted tag.  Drivers are supposed to only enable stripping if a
-\fBvlan_group\fR is registered but not all of them do that.
-.
-.IP \(bu
-On receive, some drivers handle priority tagged packets specially and
-don't pass the tag onto the network stack at all, so Open vSwitch
-never has a chance to see it.
-.
-.IP \(bu
-Some drivers size their receive buffers based on whether a
-\fBvlan_group\fR is enabled, meaning that a maximum size packet with a
-VLAN tag will not fit if no \fBvlan_group\fR is configured.
-.
-.IP \(bu
-On transmit, some drivers expect that VLAN acceleration will be used
-if it is available, which can only be done if a \fBvlan_group\fR is
-configured.  In these cases, the driver may fail to parse the packet
-and correctly setup checksum offloading or TSO.
diff --git a/xenserver/openvswitch-xen.spec.in b/xenserver/openvswitch-xen.spec.in
index cdc341dcc3d3..4d21c6364ffc 100644
--- a/xenserver/openvswitch-xen.spec.in
+++ b/xenserver/openvswitch-xen.spec.in
@@ -459,7 +459,6 @@  exit 0
 /usr/share/openvswitch/vswitch.ovsschema
 /usr/share/openvswitch/vtep.ovsschema
 /usr/sbin/ovs-bugtool
-/usr/sbin/ovs-vlan-bug-workaround
 /usr/sbin/ovs-vswitchd
 /usr/sbin/ovsdb-server
 /usr/bin/ovs-appctl
@@ -493,7 +492,6 @@  exit 0
 /usr/share/man/man8/ovs-parse-backtrace.8.gz
 /usr/share/man/man1/ovs-pcap.1.gz
 /usr/share/man/man1/ovs-tcpundump.1.gz
-/usr/share/man/man8/ovs-vlan-bug-workaround.8.gz
 /usr/share/man/man8/ovs-vlan-test.8.gz
 /usr/share/man/man8/ovs-vsctl.8.gz
 /usr/share/man/man8/ovs-vswitchd.8.gz
diff --git a/xenserver/opt_xensource_libexec_InterfaceReconfigureVswitch.py b/xenserver/opt_xensource_libexec_InterfaceReconfigureVswitch.py
index 53468b7064e5..9ada3776f82a 100644
--- a/xenserver/opt_xensource_libexec_InterfaceReconfigureVswitch.py
+++ b/xenserver/opt_xensource_libexec_InterfaceReconfigureVswitch.py
@@ -632,12 +632,6 @@  class DatapathVswitch(Datapath):
             else:
                 vlan_bug_workaround = netdev_has_vlan_accel(dev)
 
-            if vlan_bug_workaround:
-                setting = 'on'
-            else:
-                setting = 'off'
-            run_command(['/usr/sbin/ovs-vlan-bug-workaround', dev, setting])
-
         datapath_modify_config(self._vsctl_argv)
         if self._bridge_flows:
             ofports = []