virtio-net.c (9d8c6a258c70d8ff494489140a4fcb3a965909b2) | virtio-net.c (b2c929f02ba37b206144735313af10fb9cc5d1a4) |
---|---|
1/* 2 * Virtio Network Device 3 * 4 * Copyright IBM, Corp. 2007 5 * 6 * Authors: 7 * Anthony Liguori <aliguori@us.ibm.com> 8 * --- 136 unchanged lines hidden (view full) --- 145 146static bool virtio_net_started(VirtIONet *n, uint8_t status) 147{ 148 VirtIODevice *vdev = VIRTIO_DEVICE(n); 149 return (status & VIRTIO_CONFIG_S_DRIVER_OK) && 150 (n->status & VIRTIO_NET_S_LINK_UP) && vdev->vm_running; 151} 152 | 1/* 2 * Virtio Network Device 3 * 4 * Copyright IBM, Corp. 2007 5 * 6 * Authors: 7 * Anthony Liguori <aliguori@us.ibm.com> 8 * --- 136 unchanged lines hidden (view full) --- 145 146static bool virtio_net_started(VirtIONet *n, uint8_t status) 147{ 148 VirtIODevice *vdev = VIRTIO_DEVICE(n); 149 return (status & VIRTIO_CONFIG_S_DRIVER_OK) && 150 (n->status & VIRTIO_NET_S_LINK_UP) && vdev->vm_running; 151} 152 |
153static void virtio_net_announce_notify(VirtIONet *net) 154{ 155 VirtIODevice *vdev = VIRTIO_DEVICE(net); 156 trace_virtio_net_announce_notify(); 157 158 net->status |= VIRTIO_NET_S_ANNOUNCE; 159 virtio_notify_config(vdev); 160} 161 |
|
153static void virtio_net_announce_timer(void *opaque) 154{ 155 VirtIONet *n = opaque; | 162static void virtio_net_announce_timer(void *opaque) 163{ 164 VirtIONet *n = opaque; |
156 VirtIODevice *vdev = VIRTIO_DEVICE(n); | |
157 trace_virtio_net_announce_timer(n->announce_timer.round); 158 159 n->announce_timer.round--; | 165 trace_virtio_net_announce_timer(n->announce_timer.round); 166 167 n->announce_timer.round--; |
160 n->status |= VIRTIO_NET_S_ANNOUNCE; 161 virtio_notify_config(vdev); | 168 virtio_net_announce_notify(n); |
162} 163 | 169} 170 |
171static void virtio_net_announce(NetClientState *nc) 172{ 173 VirtIONet *n = qemu_get_nic_opaque(nc); 174 VirtIODevice *vdev = VIRTIO_DEVICE(n); 175 176 /* 177 * Make sure the virtio migration announcement timer isn't running 178 * If it is, let it trigger announcement so that we do not cause 179 * confusion. 180 */ 181 if (n->announce_timer.round) { 182 return; 183 } 184 185 if (virtio_vdev_has_feature(vdev, VIRTIO_NET_F_GUEST_ANNOUNCE) && 186 virtio_vdev_has_feature(vdev, VIRTIO_NET_F_CTRL_VQ)) { 187 virtio_net_announce_notify(n); 188 } 189} 190 |
|
164static void virtio_net_vhost_status(VirtIONet *n, uint8_t status) 165{ 166 VirtIODevice *vdev = VIRTIO_DEVICE(n); 167 NetClientState *nc = qemu_get_queue(n->nic); 168 int queues = n->multiqueue ? n->max_queues : 1; 169 170 if (!get_vhost_net(nc->peer)) { 171 return; --- 2379 unchanged lines hidden (view full) --- 2551 2552static NetClientInfo net_virtio_info = { 2553 .type = NET_CLIENT_DRIVER_NIC, 2554 .size = sizeof(NICState), 2555 .can_receive = virtio_net_can_receive, 2556 .receive = virtio_net_receive, 2557 .link_status_changed = virtio_net_set_link_status, 2558 .query_rx_filter = virtio_net_query_rxfilter, | 191static void virtio_net_vhost_status(VirtIONet *n, uint8_t status) 192{ 193 VirtIODevice *vdev = VIRTIO_DEVICE(n); 194 NetClientState *nc = qemu_get_queue(n->nic); 195 int queues = n->multiqueue ? n->max_queues : 1; 196 197 if (!get_vhost_net(nc->peer)) { 198 return; --- 2379 unchanged lines hidden (view full) --- 2578 2579static NetClientInfo net_virtio_info = { 2580 .type = NET_CLIENT_DRIVER_NIC, 2581 .size = sizeof(NICState), 2582 .can_receive = virtio_net_can_receive, 2583 .receive = virtio_net_receive, 2584 .link_status_changed = virtio_net_set_link_status, 2585 .query_rx_filter = virtio_net_query_rxfilter, |
2586 .announce = virtio_net_announce, |
|
2559}; 2560 2561static bool virtio_net_guest_notifier_pending(VirtIODevice *vdev, int idx) 2562{ 2563 VirtIONet *n = VIRTIO_NET(vdev); 2564 NetClientState *nc = qemu_get_subqueue(n->nic, vq2q(idx)); 2565 assert(n->vhost_started); 2566 return vhost_net_virtqueue_pending(get_vhost_net(nc->peer), idx); --- 120 unchanged lines hidden (view full) --- 2687 2688 n->ctrl_vq = virtio_add_queue(vdev, 64, virtio_net_handle_ctrl); 2689 qemu_macaddr_default_if_unset(&n->nic_conf.macaddr); 2690 memcpy(&n->mac[0], &n->nic_conf.macaddr, sizeof(n->mac)); 2691 n->status = VIRTIO_NET_S_LINK_UP; 2692 qemu_announce_timer_reset(&n->announce_timer, migrate_announce_params(), 2693 QEMU_CLOCK_VIRTUAL, 2694 virtio_net_announce_timer, n); | 2587}; 2588 2589static bool virtio_net_guest_notifier_pending(VirtIODevice *vdev, int idx) 2590{ 2591 VirtIONet *n = VIRTIO_NET(vdev); 2592 NetClientState *nc = qemu_get_subqueue(n->nic, vq2q(idx)); 2593 assert(n->vhost_started); 2594 return vhost_net_virtqueue_pending(get_vhost_net(nc->peer), idx); --- 120 unchanged lines hidden (view full) --- 2715 2716 n->ctrl_vq = virtio_add_queue(vdev, 64, virtio_net_handle_ctrl); 2717 qemu_macaddr_default_if_unset(&n->nic_conf.macaddr); 2718 memcpy(&n->mac[0], &n->nic_conf.macaddr, sizeof(n->mac)); 2719 n->status = VIRTIO_NET_S_LINK_UP; 2720 qemu_announce_timer_reset(&n->announce_timer, migrate_announce_params(), 2721 QEMU_CLOCK_VIRTUAL, 2722 virtio_net_announce_timer, n); |
2723 n->announce_timer.round = 0; |
|
2695 2696 if (n->netclient_type) { 2697 /* 2698 * Happen when virtio_net_set_netclient_name has been called. 2699 */ 2700 n->nic = qemu_new_nic(&net_virtio_info, &n->nic_conf, 2701 n->netclient_type, n->netclient_name, n); 2702 } else { --- 196 unchanged lines hidden --- | 2724 2725 if (n->netclient_type) { 2726 /* 2727 * Happen when virtio_net_set_netclient_name has been called. 2728 */ 2729 n->nic = qemu_new_nic(&net_virtio_info, &n->nic_conf, 2730 n->netclient_type, n->netclient_name, n); 2731 } else { --- 196 unchanged lines hidden --- |