vhost: remove switching related logics
authorHuawei Xie <huawei.xie@intel.com>
Wed, 8 Oct 2014 18:54:38 +0000 (02:54 +0800)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Mon, 13 Oct 2014 17:13:10 +0000 (19:13 +0200)
The following logics will be moved to vhost example:
 1. mac learning, which is used to learn the mac address from the first
transmitted packet of guest and bind the vhost device to a queue in a
pool of VMDQ.
 2. VMDQ mac/vlan filter: Each pool the vhost device is bind to is
assigned a mac/vlan filter.
 3. num_devices is used to specify the maximum vhost devices the nic supports.

Signed-off-by: Huawei Xie <huawei.xie@intel.com>
Acked-by: Changchun Ouyang <changchun.ouyang@intel.com>
lib/librte_vhost/rte_virtio_net.h
lib/librte_vhost/vhost_rxtx.c
lib/librte_vhost/virtio-net.c

index 1a2f0dc..4d43f2c 100644 (file)
@@ -83,15 +83,9 @@ struct virtio_net
 {
        struct vhost_virtqueue  *virtqueue[VIRTIO_QNUM];        /* Contains all virtqueue information. */
        struct virtio_memory    *mem;                                           /* QEMU memory and memory region information. */
-       struct ether_addr               mac_address;                            /* Device MAC address (Obtained on first TX packet). */
        uint64_t                                features;                                       /* Negotiated feature set. */
        uint64_t                                device_fh;                                      /* device identifier. */
-       uint32_t                                vmdq_rx_q;                                      /* RX VMDQ queue number. */
        uint32_t                                flags;                                          /* Device flags. Only used to check if device is running on data core. */
-       uint32_t                                vlan_tag;                                       /* Vlan tag for device. Currently set to device_id (0-63). */
-       uint16_t                                coreid;                                         /* Data core that the device is added to. */
-       volatile uint8_t                ready;                                          /* A device is set as ready if the MAC address has been set. */
-       volatile uint8_t                remove;                                         /* Device is marked for removal from the data core. */
 } __rte_cache_aligned;
 
 /*
index 365d5c0..5ae0f9c 100644 (file)
@@ -762,24 +762,6 @@ virtio_dev_merge_tx(struct virtio_net *dev, struct rte_mempool *mbuf_pool)
 
                m->nb_segs = seg_num;
 
-               /*
-                * If this is the first received packet we need to learn
-                * the MAC and setup VMDQ
-                */
-               if (dev->ready == DEVICE_MAC_LEARNING) {
-                       if (dev->remove || (link_vmdq(dev, m) == -1)) {
-                               /*
-                                * Discard frame if device is scheduled for
-                                * removal or a duplicate MAC address is found.
-                                */
-                               entry_success = free_entries;
-                               vq->last_used_idx += entry_success;
-                               rte_pktmbuf_free(m);
-                               break;
-                       }
-               }
-
-               virtio_tx_route(dev, m, mbuf_pool, (uint16_t)dev->device_fh);
                vq->last_used_idx++;
                entry_success++;
                rte_pktmbuf_free(m);
index 5e659c7..4089584 100644 (file)
@@ -55,9 +55,6 @@
 
 const char eventfd_cdev[] = "/dev/eventfd-link";
 
-extern uint32_t num_devices;
-static uint32_t num_cur_devices = 0;
-
 /* device ops to add/remove device to data core. */
 static struct virtio_net_device_ops const * notify_ops;
 /* Root address of the linked list in the configuration core. */
@@ -434,12 +431,6 @@ new_device(struct vhost_device_ctx ctx)
        struct virtio_net_config_ll *new_ll_dev;
        struct vhost_virtqueue *virtqueue_rx, *virtqueue_tx;
 
-       /*check the number of devices in the system*/
-       if (num_cur_devices == num_devices) {
-               RTE_LOG(ERR, VHOST_CONFIG, "() Max num devices (%u) exceeded\n", num_devices);
-               return -1;
-       }
-
        /* Setup device and virtqueues. */
        new_ll_dev = malloc(sizeof(struct virtio_net_config_ll));
        if (new_ll_dev == NULL) {
@@ -473,9 +464,6 @@ new_device(struct vhost_device_ctx ctx)
        /* Add entry to device configuration linked list. */
        add_config_ll_entry(new_ll_dev);
 
-       /*increment the number of devices in the system*/
-       num_cur_devices++;
-
        return new_ll_dev->dev.device_fh;
 }
 
@@ -506,9 +494,6 @@ destroy_device(struct vhost_device_ctx ctx)
                        ll_dev_cur = ll_dev_cur->next;
                }
        }
-
-       /*decrement the number of devices in the system*/
-       num_cur_devices--;
 }
 
 /*