[ovs-dev] [PATCH] v2 openvswitch: Remove Linux bridge compatibility.

Jesse Gross jesse at nicira.com
Tue Dec 4 19:11:28 UTC 2012


On Mon, Dec 3, 2012 at 10:53 AM, Pravin B Shelar <pshelar at nicira.com> wrote:
> Currently brcompat does not on master due to recent
> datapath changes. We have decided to remove it as it is
> not used very widely.

I think you missing a word in the first sentence.

> diff --git a/NEWS b/NEWS
> index bb80beb..ac56e3e 100644
> --- a/NEWS
> +++ b/NEWS
> @@ -67,6 +67,7 @@ v1.9.0 - xx xxx xxxx
>          - CAPWAP tunnel support.
>      - The data in the RARP packets can now be matched in the same way as the
>        data in ARP packets.
> +    - Bridge compatibility is removed.

This patch should just be targeted master (i.e. post-1.9).  For the
upcoming release it should continue to work as is.

> diff --git a/datapath/vport-netdev.c b/datapath/vport-netdev.c
> index 5f437d3..6701838 100644
> --- a/datapath/vport-netdev.c
> +++ b/datapath/vport-netdev.c
> @@ -426,10 +426,21 @@ const struct vport_ops ovs_netdev_vport_ops = {
>
>  #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,36)
>  /*
> - * In kernels earlier than 2.6.36, Open vSwitch cannot safely coexist with the
> - * Linux bridge module, because there is only a single bridge hook function and
> - * only a single br_port member in struct net_device, so this prevents loading
> - * both bridge and openvswitch at the same time.
> + * Enforces, mutual exclusion with the Linux bridge module, by declaring and
> + * exporting br_should_route_hook.  Because the bridge module also exports the
> + * same symbol, the module loader will refuse to load both modules at the same
> + * time (e.g. "bridge: exports duplicate symbol br_should_route_hook (owned by
> + * openvswitch)").
> + *
> + * Before Linux 2.6.36, Open vSwitch cannot safely coexist with the Linux
> + * bridge module, so openvswitch uses this macro in those versions.  In
> + * Linux 2.6.36 and later, Open vSwitch can coexist with the bridge module,
> + * but it makes no sense to load both bridge and brcompat, so brcompat uses
> + * this macro in those versions.

We can remove mentions of brcompat here.

> diff --git a/datapath/vport.h b/datapath/vport.h
> index 5a7caf5..852b2b0 100644
> --- a/datapath/vport.h
> +++ b/datapath/vport.h
> @@ -76,7 +76,6 @@ struct vport_err_stats {
>   * @rcu: RCU callback head for deferred destruction.
>   * @port_no: Index into @dp's @ports array.
>   * @dp: Datapath to which this port belongs.
> - * @kobj: Represents /sys/class/net/<devname>/brport.
>   * @linkname: The name of the link from /sys/class/net/<datapath>/brif to this
>   * &struct vport.  (We keep this around so that we can delete it if the
>   * device gets renamed.)  Set to the null string when no link exists.
> @@ -95,7 +94,6 @@ struct vport {
>         struct rcu_head rcu;
>         u16 port_no;
>         struct datapath *dp;
> -       struct kobject kobj;
>         char linkname[IFNAMSIZ];
>         u32 upcall_pid;

There are some vport ops that are now unused and can be removed:
 * @get_kobj: Get the kobj associated with the device (may return null).
 * @get_dev_flags: Get the device's flags.
 * @is_running: Checks whether the device is running.
 * @get_operstate: Get the device's operating state.
 * @get_mtu: Get the device's MTU.  May be %NULL if the device does not have an
 * MTU (as e.g. some tunnels do not).  Must be implemented if @get_ifindex is
 * implemented.



More information about the dev mailing list