datapath: Enforce mutual exclusion between bridge and brcompat_mod.
[sliver-openvswitch.git] / datapath / brcompat.c
index a315fc5..339b5dc 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007-2011 Nicira Networks.
+ * Copyright (c) 2007-2012 Nicira Networks.
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of version 2 of the GNU General Public
@@ -517,7 +517,7 @@ static int __init brc_init(void)
        brioctl_set(brc_ioctl_deviceless_stub);
 
        /* Set the openvswitch_mod device ioctl handler */
-       dp_ioctl_hook = brc_dev_ioctl;
+       ovs_dp_ioctl_hook = brc_dev_ioctl;
 
        /* Randomize the initial sequence number.  This is not a security
         * feature; it only helps avoid crossed wires between userspace and
@@ -548,7 +548,7 @@ error:
 static void brc_cleanup(void)
 {
        /* Unregister ioctl hooks */
-       dp_ioctl_hook = NULL;
+       ovs_dp_ioctl_hook = NULL;
        brioctl_set(NULL);
 
        genl_unregister_family(&brc_genl_family);
@@ -560,3 +560,12 @@ module_exit(brc_cleanup);
 MODULE_DESCRIPTION("Open vSwitch bridge compatibility");
 MODULE_AUTHOR("Nicira Networks");
 MODULE_LICENSE("GPL");
+
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36)
+/*
+ * In kernels 2.6.36 and later, Open vSwitch can safely coexist with
+ * the Linux bridge module, but it does not make sense to load both bridge and
+ * brcompat_mod, so this prevents it.
+ */
+BRIDGE_MUTUAL_EXCLUSION;
+#endif