aboutsummaryrefslogtreecommitdiff
path: root/lib/dpif-netdev.c
diff options
context:
space:
mode:
authorAlexandru Copot <alex.mihai.c@gmail.com>2013-09-07 12:35:15 +0300
committerBen Pfaff <blp@nicira.com>2013-09-07 09:34:16 -0700
commit2499a8ce82400cbcb1ac330aad131bf21c25db25 (patch)
tree434b2b293e9666108369182aa9bdedf7cd87ae0b /lib/dpif-netdev.c
parent7ba19d412a0e8dc762a86f7ccbbdf4e39133cc71 (diff)
dpif-netdev: Do not allow adding loopback devices
Signed-off-by: Alexandru Copot <alex.mihai.c@gmail.com> Signed-off-by: Ben Pfaff <blp@nicira.com>
Diffstat (limited to 'lib/dpif-netdev.c')
-rw-r--r--lib/dpif-netdev.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c
index 46eb743a..0d489ba2 100644
--- a/lib/dpif-netdev.c
+++ b/lib/dpif-netdev.c
@@ -407,6 +407,7 @@ do_add_port(struct dp_netdev *dp, const char *devname, const char *type,
struct dp_netdev_port *port;
struct netdev *netdev;
struct netdev_rx *rx;
+ enum netdev_flags flags;
const char *open_type;
int mtu;
int error;
@@ -419,9 +420,15 @@ do_add_port(struct dp_netdev *dp, const char *devname, const char *type,
if (error) {
return error;
}
- /* XXX reject loopback devices */
/* XXX reject non-Ethernet devices */
+ netdev_get_flags(netdev, &flags);
+ if (flags & NETDEV_LOOPBACK) {
+ VLOG_ERR("%s: cannot add a loopback device", devname);
+ netdev_close(netdev);
+ return EINVAL;
+ }
+
error = netdev_rx_open(netdev, &rx);
if (error
&& !(error == EOPNOTSUPP && dpif_netdev_class_is_dummy(dp->class))) {