+ const char *pstream;
+
+ netdev->ifindex = smap_get_int(args, "ifindex", -EOPNOTSUPP);
+
+ pstream = smap_get(args, "pstream");
+ if (!pstream
+ || !netdev->pstream
+ || strcmp(pstream_get_name(netdev->pstream), pstream)) {
+ pstream_close(netdev->pstream);
+ netdev->pstream = NULL;
+
+ if (pstream) {
+ int error;
+
+ error = pstream_open(pstream, &netdev->pstream, DSCP_DEFAULT);
+ if (error) {
+ VLOG_WARN("%s: open failed (%s)",
+ pstream, ovs_strerror(error));
+ }
+ }
+ }
+ return 0;
+}
+
+static int
+netdev_dummy_rx_open(struct netdev *netdev_, struct netdev_rx **rxp)
+{
+ struct netdev_dummy *netdev = netdev_dummy_cast(netdev_);
+ struct netdev_rx_dummy *rx;
+
+ rx = xmalloc(sizeof *rx);
+ netdev_rx_init(&rx->up, &netdev->up, &netdev_rx_dummy_class);
+ list_push_back(&netdev->rxes, &rx->node);
+ list_init(&rx->recv_queue);
+ rx->recv_queue_len = 0;
+
+ *rxp = &rx->up;
+ return 0;
+}
+
+static int
+netdev_rx_dummy_recv(struct netdev_rx *rx_, void *buffer, size_t size)
+{
+ struct netdev_rx_dummy *rx = netdev_rx_dummy_cast(rx_);