In order to be able to unit test the tunnel flow setup code we
need to be able to generate netdevs that appear to be like
tunnel devices.  This adds a dummy_tunnel netdev with two
differences from the normal dummy devices: the ability to set and
read config and a different type to identify them as needing
tunnel translation.

Signed-off-by: Jesse Gross <je...@nicira.com>
---
 lib/netdev-dummy.c |   88 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 88 insertions(+)

diff --git a/lib/netdev-dummy.c b/lib/netdev-dummy.c
index 6aa4084..bb65c12 100644
--- a/lib/netdev-dummy.c
+++ b/lib/netdev-dummy.c
@@ -29,6 +29,7 @@
 #include "packets.h"
 #include "poll-loop.h"
 #include "shash.h"
+#include "smap.h"
 #include "sset.h"
 #include "unixctl.h"
 #include "vlog.h"
@@ -37,6 +38,7 @@ VLOG_DEFINE_THIS_MODULE(netdev_dummy);
 
 struct netdev_dev_dummy {
     struct netdev_dev netdev_dev;
+    struct smap config;
     uint8_t hwaddr[ETH_ADDR_LEN];
     int mtu;
     struct netdev_stats stats;
@@ -94,6 +96,7 @@ netdev_dummy_create(const struct netdev_class *class, const 
char *name,
 
     netdev_dev = xzalloc(sizeof *netdev_dev);
     netdev_dev_init(&netdev_dev->netdev_dev, name, class);
+    smap_init(&netdev_dev->config);
     netdev_dev->hwaddr[0] = 0xaa;
     netdev_dev->hwaddr[1] = 0x55;
     netdev_dev->hwaddr[2] = n >> 24;
@@ -119,12 +122,35 @@ netdev_dummy_destroy(struct netdev_dev *netdev_dev_)
 {
     struct netdev_dev_dummy *netdev_dev = netdev_dev_dummy_cast(netdev_dev_);
 
+    smap_destroy(&netdev_dev->config);
     shash_find_and_delete(&dummy_netdev_devs,
                           netdev_dev_get_name(netdev_dev_));
     free(netdev_dev);
 }
 
 static int
+netdev_dummy_get_config(struct netdev_dev *netdev_dev_, struct smap *args)
+{
+    struct netdev_dev_dummy *netdev_dev = netdev_dev_dummy_cast(netdev_dev_);
+
+    smap_destroy(args);
+    smap_clone(args, &netdev_dev->config);
+
+    return 0;
+}
+
+static int
+netdev_dummy_set_config(struct netdev_dev *netdev_dev_, const struct smap 
*args)
+{
+    struct netdev_dev_dummy *netdev_dev = netdev_dev_dummy_cast(netdev_dev_);
+
+    smap_destroy(&netdev_dev->config);
+    smap_clone(&netdev_dev->config, args);
+
+    return 0;
+}
+
+static int
 netdev_dummy_open(struct netdev_dev *netdev_dev_, struct netdev **netdevp)
 {
     struct netdev_dev_dummy *netdev_dev = netdev_dev_dummy_cast(netdev_dev_);
@@ -370,6 +396,67 @@ static const struct netdev_class dummy_class = {
     netdev_dummy_change_seq
 };
 
+static const struct netdev_class dummy_tunnel_class = {
+    "dummy_tunnel",
+    NULL,                       /* init */
+    NULL,                       /* run */
+    NULL,                       /* wait */
+
+    netdev_dummy_create,
+    netdev_dummy_destroy,
+    netdev_dummy_get_config,
+    netdev_dummy_set_config,
+
+    netdev_dummy_open,
+    netdev_dummy_close,
+
+    netdev_dummy_listen,
+    netdev_dummy_recv,
+    netdev_dummy_recv_wait,
+    netdev_dummy_drain,
+
+    NULL,                       /* send */
+    NULL,                       /* send_wait */
+
+    netdev_dummy_set_etheraddr,
+    netdev_dummy_get_etheraddr,
+    netdev_dummy_get_mtu,
+    netdev_dummy_set_mtu,
+    NULL,                       /* get_ifindex */
+    NULL,                       /* get_carrier */
+    NULL,                       /* get_carrier_resets */
+    NULL,                       /* get_miimon */
+    netdev_dummy_get_stats,
+    netdev_dummy_set_stats,
+
+    NULL,                       /* get_features */
+    NULL,                       /* set_advertisements */
+
+    NULL,                       /* set_policing */
+    NULL,                       /* get_qos_types */
+    NULL,                       /* get_qos_capabilities */
+    NULL,                       /* get_qos */
+    NULL,                       /* set_qos */
+    NULL,                       /* get_queue */
+    NULL,                       /* set_queue */
+    NULL,                       /* delete_queue */
+    NULL,                       /* get_queue_stats */
+    NULL,                       /* dump_queues */
+    NULL,                       /* dump_queue_stats */
+
+    NULL,                       /* get_in4 */
+    NULL,                       /* set_in4 */
+    NULL,                       /* get_in6 */
+    NULL,                       /* add_router */
+    NULL,                       /* get_next_hop */
+    NULL,                       /* get_drv_info */
+    NULL,                       /* arp_lookup */
+
+    netdev_dummy_update_flags,
+
+    netdev_dummy_change_seq
+};
+
 static struct ofpbuf *
 eth_from_packet_or_flow(const char *s)
 {
@@ -529,4 +616,5 @@ netdev_dummy_register(bool override)
         sset_destroy(&types);
     }
     netdev_register_provider(&dummy_class);
+    netdev_register_provider(&dummy_tunnel_class);
 }
-- 
1.7.9.5

_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to