aboutsummaryrefslogtreecommitdiff
path: root/datapath/dp_notify.c
diff options
context:
space:
mode:
Diffstat (limited to 'datapath/dp_notify.c')
-rw-r--r--datapath/dp_notify.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/datapath/dp_notify.c b/datapath/dp_notify.c
new file mode 100644
index 00000000..56d5c3c9
--- /dev/null
+++ b/datapath/dp_notify.c
@@ -0,0 +1,29 @@
+/*
+ * Distributed under the terms of the GNU GPL version 2.
+ * Copyright (c) 2007, 2008, 2009 Nicira Networks.
+ */
+
+/* Handle changes to managed devices */
+
+#include <linux/netdevice.h>
+
+#include "datapath.h"
+
+
+static int dp_device_event(struct notifier_block *unused, unsigned long event,
+ void *ptr)
+{
+ struct net_device *dev = ptr;
+ struct net_bridge_port *p = dev->br_port;
+ if (event == NETDEV_UNREGISTER && p) {
+ struct datapath *dp = p->dp;
+ mutex_lock(&dp->mutex);
+ dp_del_port(p, NULL);
+ mutex_unlock(&dp->mutex);
+ }
+ return NOTIFY_DONE;
+}
+
+struct notifier_block dp_device_notifier = {
+ .notifier_call = dp_device_event
+};