From: David Woodhouse <dwmw2@infradead.org> To: qemu-devel@nongnu.org Cc: "Kevin Wolf" <kwolf@redhat.com>, "Hanna Reitz" <hreitz@redhat.com>, "Stefano Stabellini" <sstabellini@kernel.org>, "Anthony Perard" <anthony.perard@citrix.com>, "Paul Durrant" <paul@xen.org>, "Marc-André Lureau" <marcandre.lureau@redhat.com>, "Paolo Bonzini" <pbonzini@redhat.com>, "Michael S. Tsirkin" <mst@redhat.com>, "Marcel Apfelbaum" <marcel.apfelbaum@gmail.com>, "Richard Henderson" <richard.henderson@linaro.org>, "Eduardo Habkost" <eduardo@habkost.net>, "Jason Wang" <jasowang@redhat.com>, "Marcelo Tosatti" <mtosatti@redhat.com>, qemu-block@nongnu.org, xen-devel@lists.xenproject.org, kvm@vger.kernel.org, "Bernhard Beschow" <shentey@gmail.com>, "Joel Upham" <jupham125@gmail.com> Subject: [PATCH v3 22/28] net: add qemu_{configure,create}_nic_device(), qemu_find_nic_info() Date: Wed, 25 Oct 2023 15:50:36 +0100 [thread overview] Message-ID: <20231025145042.627381-23-dwmw2@infradead.org> (raw) In-Reply-To: <20231025145042.627381-1-dwmw2@infradead.org> From: David Woodhouse <dwmw@amazon.co.uk> Most code which directly accesses nd_table[] and nb_nics uses them for one of two things. Either "I have created a NIC device and I'd like a configuration for it", or "I will create a NIC device *if* there is a configuration for it". With some variants on the theme around whether they actually *check* if the model specified in the configuration is the right one. Provide functions which perform both of those, allowing platforms to be a little more consistent and as a step towards making nd_table[] and nb_nics private to the net code. Also export the qemu_find_nic_info() helper, as some platforms have special cases they need to handle. Signed-off-by: David Woodhouse <dwmw@amazon.co.uk> --- include/net/net.h | 7 ++++++- net/net.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 1 deletion(-) diff --git a/include/net/net.h b/include/net/net.h index 2fb1c9181c..56be694c75 100644 --- a/include/net/net.h +++ b/include/net/net.h @@ -205,7 +205,12 @@ int qemu_show_nic_models(const char *arg, const char *const *models); void qemu_check_nic_model(NICInfo *nd, const char *model); int qemu_find_nic_model(NICInfo *nd, const char * const *models, const char *default_model); - +NICInfo *qemu_find_nic_info(const char *typename, bool match_default, + const char *alias); +bool qemu_configure_nic_device(DeviceState *dev, bool match_default, + const char *alias); +DeviceState *qemu_create_nic_device(const char *typename, bool match_default, + const char *alias); void print_net_client(Monitor *mon, NetClientState *nc); void net_socket_rs_init(SocketReadState *rs, SocketReadStateFinalize *finalize, diff --git a/net/net.c b/net/net.c index bbe33da176..f8b4973a1e 100644 --- a/net/net.c +++ b/net/net.c @@ -1072,6 +1072,57 @@ static int net_init_nic(const Netdev *netdev, const char *name, return idx; } +NICInfo *qemu_find_nic_info(const char *typename, bool match_default, + const char *alias) +{ + NICInfo *nd; + int i; + + for (i = 0; i < nb_nics; i++) { + nd = &nd_table[i]; + + if (!nd->used || nd->instantiated) { + continue; + } + + if ((match_default && !nd->model) || !g_strcmp0(nd->model, typename) + || (alias && !g_strcmp0(nd->model, alias))) { + return nd; + } + } + return NULL; +} + + +/* "I have created a device. Please configure it if you can" */ +bool qemu_configure_nic_device(DeviceState *dev, bool match_default, + const char *alias) +{ + NICInfo *nd = qemu_find_nic_info(object_get_typename(OBJECT(dev)), + match_default, alias); + + if (nd) { + qdev_set_nic_properties(dev, nd); + return true; + } + return false; +} + +/* "Please create a device, if you have a configuration for it" */ +DeviceState *qemu_create_nic_device(const char *typename, bool match_default, + const char *alias) +{ + NICInfo *nd = qemu_find_nic_info(typename, match_default, alias); + DeviceState *dev; + + if (!nd) { + return NULL; + } + + dev = qdev_new(typename); + qdev_set_nic_properties(dev, nd); + return dev; +} static int (* const net_client_init_fun[NET_CLIENT_DRIVER__MAX])( const Netdev *netdev, -- 2.40.1
WARNING: multiple messages have this Message-ID (diff)
From: David Woodhouse <dwmw2@infradead.org> To: qemu-devel@nongnu.org Cc: "Kevin Wolf" <kwolf@redhat.com>, "Hanna Reitz" <hreitz@redhat.com>, "Stefano Stabellini" <sstabellini@kernel.org>, "Anthony Perard" <anthony.perard@citrix.com>, "Paul Durrant" <paul@xen.org>, "Marc-André Lureau" <marcandre.lureau@redhat.com>, "Paolo Bonzini" <pbonzini@redhat.com>, "Michael S. Tsirkin" <mst@redhat.com>, "Marcel Apfelbaum" <marcel.apfelbaum@gmail.com>, "Richard Henderson" <richard.henderson@linaro.org>, "Eduardo Habkost" <eduardo@habkost.net>, "Jason Wang" <jasowang@redhat.com>, "Marcelo Tosatti" <mtosatti@redhat.com>, qemu-block@nongnu.org, xen-devel@lists.xenproject.org, kvm@vger.kernel.org, "Bernhard Beschow" <shentey@gmail.com>, "Joel Upham" <jupham125@gmail.com> Subject: [PATCH v3 22/28] net: add qemu_{configure, create}_nic_device(), qemu_find_nic_info() Date: Wed, 25 Oct 2023 15:50:36 +0100 [thread overview] Message-ID: <20231025145042.627381-23-dwmw2@infradead.org> (raw) In-Reply-To: <20231025145042.627381-1-dwmw2@infradead.org> From: David Woodhouse <dwmw@amazon.co.uk> Most code which directly accesses nd_table[] and nb_nics uses them for one of two things. Either "I have created a NIC device and I'd like a configuration for it", or "I will create a NIC device *if* there is a configuration for it". With some variants on the theme around whether they actually *check* if the model specified in the configuration is the right one. Provide functions which perform both of those, allowing platforms to be a little more consistent and as a step towards making nd_table[] and nb_nics private to the net code. Also export the qemu_find_nic_info() helper, as some platforms have special cases they need to handle. Signed-off-by: David Woodhouse <dwmw@amazon.co.uk> --- include/net/net.h | 7 ++++++- net/net.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 1 deletion(-) diff --git a/include/net/net.h b/include/net/net.h index 2fb1c9181c..56be694c75 100644 --- a/include/net/net.h +++ b/include/net/net.h @@ -205,7 +205,12 @@ int qemu_show_nic_models(const char *arg, const char *const *models); void qemu_check_nic_model(NICInfo *nd, const char *model); int qemu_find_nic_model(NICInfo *nd, const char * const *models, const char *default_model); - +NICInfo *qemu_find_nic_info(const char *typename, bool match_default, + const char *alias); +bool qemu_configure_nic_device(DeviceState *dev, bool match_default, + const char *alias); +DeviceState *qemu_create_nic_device(const char *typename, bool match_default, + const char *alias); void print_net_client(Monitor *mon, NetClientState *nc); void net_socket_rs_init(SocketReadState *rs, SocketReadStateFinalize *finalize, diff --git a/net/net.c b/net/net.c index bbe33da176..f8b4973a1e 100644 --- a/net/net.c +++ b/net/net.c @@ -1072,6 +1072,57 @@ static int net_init_nic(const Netdev *netdev, const char *name, return idx; } +NICInfo *qemu_find_nic_info(const char *typename, bool match_default, + const char *alias) +{ + NICInfo *nd; + int i; + + for (i = 0; i < nb_nics; i++) { + nd = &nd_table[i]; + + if (!nd->used || nd->instantiated) { + continue; + } + + if ((match_default && !nd->model) || !g_strcmp0(nd->model, typename) + || (alias && !g_strcmp0(nd->model, alias))) { + return nd; + } + } + return NULL; +} + + +/* "I have created a device. Please configure it if you can" */ +bool qemu_configure_nic_device(DeviceState *dev, bool match_default, + const char *alias) +{ + NICInfo *nd = qemu_find_nic_info(object_get_typename(OBJECT(dev)), + match_default, alias); + + if (nd) { + qdev_set_nic_properties(dev, nd); + return true; + } + return false; +} + +/* "Please create a device, if you have a configuration for it" */ +DeviceState *qemu_create_nic_device(const char *typename, bool match_default, + const char *alias) +{ + NICInfo *nd = qemu_find_nic_info(typename, match_default, alias); + DeviceState *dev; + + if (!nd) { + return NULL; + } + + dev = qdev_new(typename); + qdev_set_nic_properties(dev, nd); + return dev; +} static int (* const net_client_init_fun[NET_CLIENT_DRIVER__MAX])( const Netdev *netdev, -- 2.40.1
next prev parent reply other threads:[~2023-10-25 14:52 UTC|newest] Thread overview: 59+ messages / expand[flat|nested] mbox.gz Atom feed top 2023-10-25 14:50 [PATCH v3 00/28] Get Xen PV shim running in QEMU, add net & console David Woodhouse 2023-10-25 14:50 ` [PATCH v3 01/28] i386/xen: Don't advertise XENFEAT_supervisor_mode_kernel David Woodhouse 2023-10-25 14:50 ` [PATCH v3 02/28] i386/xen: fix per-vCPU upcall vector for Xen emulation David Woodhouse 2023-10-25 14:50 ` [PATCH v3 03/28] hw/xen: select kernel mode for per-vCPU event channel upcall vector David Woodhouse 2023-10-25 14:50 ` [PATCH v3 04/28] hw/xen: don't clear map_track[] in xen_gnttab_reset() David Woodhouse 2023-10-25 14:50 ` [PATCH v3 05/28] hw/xen: fix XenStore watch delivery to guest David Woodhouse 2023-10-27 7:15 ` Durrant, Paul 2023-10-25 14:50 ` [PATCH v3 06/28] hw/xen: take iothread mutex in xen_evtchn_reset_op() David Woodhouse 2023-10-27 7:20 ` Durrant, Paul 2023-10-25 14:50 ` [PATCH v3 07/28] hw/xen: use correct default protocol for xen-block on x86 David Woodhouse 2023-10-27 7:22 ` Durrant, Paul 2023-10-25 14:50 ` [PATCH v3 08/28] i386/xen: Ignore VCPU_SSHOTTMR_future flag in set_singleshot_timer() David Woodhouse 2023-10-27 7:23 ` Durrant, Paul 2023-10-25 14:50 ` [PATCH v3 09/28] hw/xen: Clean up event channel 'type_val' handling to use union David Woodhouse 2023-10-25 14:50 ` [PATCH v3 10/28] include: update Xen public headers to Xen 4.17.2 release David Woodhouse 2023-10-25 14:50 ` [PATCH v3 11/28] i386/xen: advertise XEN_HVM_CPUID_UPCALL_VECTOR in CPUID David Woodhouse 2023-10-25 14:50 ` [PATCH v3 12/28] hw/xen: populate store frontend nodes with XenStore PFN/port David Woodhouse 2023-10-25 14:50 ` [PATCH v3 13/28] hw/xen: automatically assign device index to block devices David Woodhouse 2023-10-27 7:30 ` Durrant, Paul 2023-10-27 8:45 ` David Woodhouse 2023-10-27 9:01 ` Durrant, Paul 2023-10-27 10:25 ` David Woodhouse 2023-10-27 10:32 ` Durrant, Paul 2023-10-27 12:02 ` David Woodhouse 2023-10-25 14:50 ` [PATCH v3 14/28] hw/xen: add get_frontend_path() method to XenDeviceClass David Woodhouse 2023-10-27 7:31 ` Durrant, Paul 2023-10-25 14:50 ` [PATCH v3 15/28] hw/xen: do not repeatedly try to create a failing backend device David Woodhouse 2023-10-25 14:50 ` [PATCH v3 16/28] hw/xen: update Xen console to XenDevice model David Woodhouse 2023-10-25 14:50 ` [PATCH v3 17/28] hw/xen: add support for Xen primary console in emulated mode David Woodhouse 2023-10-27 7:44 ` Durrant, Paul 2023-10-25 14:50 ` [PATCH v3 18/28] hw/xen: only remove peers of PCI NICs on unplug David Woodhouse 2023-10-27 8:29 ` Durrant, Paul 2023-10-25 14:50 ` [PATCH v3 19/28] hw/xen: update Xen PV NIC to XenDevice model David Woodhouse 2023-10-27 8:42 ` Durrant, Paul 2023-10-25 14:50 ` [PATCH v3 20/28] net: do not delete nics in net_cleanup() David Woodhouse 2023-10-27 8:44 ` Durrant, Paul 2023-10-25 14:50 ` [PATCH v3 21/28] xen-platform: unplug AHCI disks David Woodhouse 2023-10-27 9:08 ` Durrant, Paul 2023-10-25 14:50 ` David Woodhouse [this message] 2023-10-25 14:50 ` [PATCH v3 22/28] net: add qemu_{configure, create}_nic_device(), qemu_find_nic_info() David Woodhouse 2023-10-27 9:25 ` [PATCH v3 22/28] net: add qemu_{configure,create}_nic_device(), qemu_find_nic_info() Durrant, Paul 2023-10-25 14:50 ` [PATCH v3 23/28] net: report list of available models according to platform David Woodhouse 2023-10-27 9:31 ` Durrant, Paul 2023-10-25 14:50 ` [PATCH v3 24/28] net: add qemu_create_nic_bus_devices() David Woodhouse 2023-10-27 9:42 ` Durrant, Paul 2023-10-25 14:50 ` [PATCH v3 25/28] hw/pci: add pci_init_nic_devices(), pci_init_nic_in_slot() David Woodhouse 2023-10-27 9:46 ` Durrant, Paul 2023-10-25 14:50 ` [PATCH v3 26/28] hw/i386/pc: use qemu_get_nic_info() and pci_init_nic_devices() David Woodhouse 2023-10-27 9:48 ` Durrant, Paul 2023-10-25 14:50 ` [PATCH v3 27/28] hw/xen: use qemu_create_nic_bus_devices() to instantiate Xen NICs David Woodhouse 2023-10-27 9:52 ` Durrant, Paul 2023-10-25 14:50 ` [PATCH v3 28/28] docs: update Xen-on-KVM documentation David Woodhouse 2023-10-25 18:20 ` Eric Blake 2023-10-25 18:26 ` David Woodhouse 2023-10-25 18:56 ` Andrew Cooper 2023-10-25 19:02 ` David Woodhouse 2023-10-26 8:26 ` Kevin Wolf 2023-10-26 9:25 ` David Woodhouse 2023-10-26 16:25 ` David Woodhouse
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20231025145042.627381-23-dwmw2@infradead.org \ --to=dwmw2@infradead.org \ --cc=anthony.perard@citrix.com \ --cc=eduardo@habkost.net \ --cc=hreitz@redhat.com \ --cc=jasowang@redhat.com \ --cc=jupham125@gmail.com \ --cc=kvm@vger.kernel.org \ --cc=kwolf@redhat.com \ --cc=marcandre.lureau@redhat.com \ --cc=marcel.apfelbaum@gmail.com \ --cc=mst@redhat.com \ --cc=mtosatti@redhat.com \ --cc=paul@xen.org \ --cc=pbonzini@redhat.com \ --cc=qemu-block@nongnu.org \ --cc=qemu-devel@nongnu.org \ --cc=richard.henderson@linaro.org \ --cc=shentey@gmail.com \ --cc=sstabellini@kernel.org \ --cc=xen-devel@lists.xenproject.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.