From 5609d3c3ab0635e8d07c718f3170b8cc23535dd7 Mon Sep 17 00:00:00 2001 From: Jakub Jermar Date: Sat, 23 Jun 2018 16:28:00 +0200 Subject: [PATCH] Provide virtio_net_on_multicast_mode_change --- uspace/drv/nic/virtio-net/virtio-net.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/uspace/drv/nic/virtio-net/virtio-net.c b/uspace/drv/nic/virtio-net/virtio-net.c index 6dc197ce1..7cec1d42a 100644 --- a/uspace/drv/nic/virtio-net/virtio-net.c +++ b/uspace/drv/nic/virtio-net/virtio-net.c @@ -419,6 +419,27 @@ static void virtio_net_send(nic_t *nic, void *data, size_t size) virtio_virtq_produce_available(vdev, TX_QUEUE_1, descno); } + +static errno_t virtio_net_on_multicast_mode_change(nic_t *nic, + nic_multicast_mode_t new_mode, const nic_address_t *address_list, + size_t address_count) +{ + switch (new_mode) { + case NIC_MULTICAST_BLOCKED: + nic_report_hw_filtering(nic, -1, 0, -1); + return EOK; + case NIC_MULTICAST_LIST: + nic_report_hw_filtering(nic, -1, 0, -1); + return EOK; + case NIC_MULTICAST_PROMISC: + nic_report_hw_filtering(nic, -1, 0, -1); + return EOK; + default: + return ENOTSUP; + } + return EOK; +} + static errno_t virtio_net_on_broadcast_mode_change(nic_t *nic, nic_broadcast_mode_t new_mode) { @@ -451,7 +472,8 @@ static errno_t virtio_net_dev_add(ddf_dev_t *dev) ddf_fun_set_ops(fun, &virtio_net_dev_ops); nic_set_send_frame_handler(nic, virtio_net_send); - nic_set_filtering_change_handlers(nic, NULL, NULL, + nic_set_filtering_change_handlers(nic, NULL, + virtio_net_on_multicast_mode_change, virtio_net_on_broadcast_mode_change, NULL, NULL); rc = ddf_fun_bind(fun); -- 2.11.4.GIT