qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/1] net/slirp: Add mfr-id and oob-eth-addr parameters
@ 2023-01-05  9:13 Peter Delevoryas
  2023-01-05  9:13 ` [PATCH 1/1] " Peter Delevoryas
  0 siblings, 1 reply; 2+ messages in thread
From: Peter Delevoryas @ 2023-01-05  9:13 UTC (permalink / raw)
  Cc: samuel.thibault, jasowang, eblake, armbru, qemu-devel,
	Peter Delevoryas

This adds mfr-id and oob-eth-addr parameters to the userspace netdev backend.

    -netdev user,id=[str],mfr-id=[uint32],oob-eth-addr=[MAC address]

I introduced mfr-id and oob-eth-addr to slirp a while ago, as part of Slirp
config version 5, but never managed to get the options exposed in upstream QEMU
(I've just been maintaining my own patches).

This is useful for testing NC-SI OEM commands, which are critical for bringing
up the network path for lots of BMC's in data centers. So like, OpenBMC devs
would be interested in this.

I tried to submit this change a long time ago, but failed cause I wasn't sure
exactly how to gate this on the slirp version.

My strategy was actually not to use the slirp version (e.g. 4.7.0) to check for
this, but to use the slirp config version. This is different, but correct, I
think? If we don't use the slirp config version, we have to create a new slirp
release, 4.8.0. But, I don't see the point of that, because we already have a
version number exposed for the SlirpConfig.

Thanks,
Peter

Peter Delevoryas (1):
  net/slirp: Add mfr-id and oob-eth-addr parameters

 net/slirp.c   | 19 ++++++++++++++++---
 qapi/net.json |  9 ++++++++-
 2 files changed, 24 insertions(+), 4 deletions(-)

-- 
2.31.1



^ permalink raw reply	[flat|nested] 2+ messages in thread

* [PATCH 1/1] net/slirp: Add mfr-id and oob-eth-addr parameters
  2023-01-05  9:13 [PATCH 0/1] net/slirp: Add mfr-id and oob-eth-addr parameters Peter Delevoryas
@ 2023-01-05  9:13 ` Peter Delevoryas
  0 siblings, 0 replies; 2+ messages in thread
From: Peter Delevoryas @ 2023-01-05  9:13 UTC (permalink / raw)
  Cc: samuel.thibault, jasowang, eblake, armbru, qemu-devel,
	Peter Delevoryas

This adds mfr-id and oob-eth-addr parameters to the userspace netdev backend.

    -netdev user,id=[str],mfr-id=[uint32],oob-eth-addr=[MAC address]

Signed-off-by: Peter Delevoryas <peter@pjd.dev>
---
 net/slirp.c   | 19 ++++++++++++++++---
 qapi/net.json |  9 ++++++++-
 2 files changed, 24 insertions(+), 4 deletions(-)

diff --git a/net/slirp.c b/net/slirp.c
index 2ee3f1a0d7..97c83d99f7 100644
--- a/net/slirp.c
+++ b/net/slirp.c
@@ -413,7 +413,8 @@ static int net_slirp_init(NetClientState *peer, const char *model,
                           const char *vnameserver, const char *vnameserver6,
                           const char *smb_export, const char *vsmbserver,
                           const char **dnssearch, const char *vdomainname,
-                          const char *tftp_server_name,
+                          const char *tftp_server_name, uint32_t mfr_id,
+                          const char *oob_eth_addr_str,
                           Error **errp)
 {
     /* default settings according to historic slirp */
@@ -436,6 +437,7 @@ static int net_slirp_init(NetClientState *peer, const char *model,
     int shift;
     char *end;
     struct slirp_config_str *config;
+    MACAddr oob_eth_addr = {};
 
     if (!ipv4 && (vnetwork || vhost || vnameserver)) {
         error_setg(errp, "IPv4 disabled but netmask/host/dns provided");
@@ -609,6 +611,12 @@ static int net_slirp_init(NetClientState *peer, const char *model,
         return -1;
     }
 
+    if (oob_eth_addr_str &&
+        net_parse_macaddr(oob_eth_addr.a, oob_eth_addr_str) < 0) {
+        error_setg(errp, "'oob-eth-addr' invalid syntax for MAC address");
+        return -1;
+    }
+
     nc = qemu_new_net_client(&net_slirp_info, peer, model, name);
 
     qemu_set_info_str(nc, "net=%s,restrict=%s", inet_ntoa(net),
@@ -616,7 +624,7 @@ static int net_slirp_init(NetClientState *peer, const char *model,
 
     s = DO_UPCAST(SlirpState, nc, nc);
 
-    cfg.version = SLIRP_CHECK_VERSION(4,7,0) ? 4 : 1;
+    cfg.version = SLIRP_CONFIG_VERSION_MAX;
     cfg.restricted = restricted;
     cfg.in_enabled = ipv4;
     cfg.vnetwork = net;
@@ -635,6 +643,10 @@ static int net_slirp_init(NetClientState *peer, const char *model,
     cfg.vnameserver6 = ip6_dns;
     cfg.vdnssearch = dnssearch;
     cfg.vdomainname = vdomainname;
+#if SLIRP_CONFIG_VERSION_MAX >= 5
+    cfg.mfr_id = mfr_id;
+    memcpy(cfg.oob_eth_addr, oob_eth_addr.a, sizeof(cfg.oob_eth_addr));
+#endif
     s->slirp = slirp_new(&cfg, &slirp_cb, s);
     QTAILQ_INSERT_TAIL(&slirp_stacks, s, entry);
 
@@ -1171,7 +1183,8 @@ int net_init_slirp(const Netdev *netdev, const char *name,
                          user->bootfile, user->dhcpstart,
                          user->dns, user->ipv6_dns, user->smb,
                          user->smbserver, dnssearch, user->domainname,
-                         user->tftp_server_name, errp);
+                         user->tftp_server_name, user->mfr_id,
+                         user->oob_eth_addr, errp);
 
     while (slirp_configs) {
         config = slirp_configs;
diff --git a/qapi/net.json b/qapi/net.json
index 522ac582ed..7aa1ea0496 100644
--- a/qapi/net.json
+++ b/qapi/net.json
@@ -168,6 +168,11 @@
 #
 # @tftp-server-name: RFC2132 "TFTP server name" string (Since 3.1)
 #
+# @mfr-id: Manufacturer ID (IANA Private Enterprise Number)
+#
+# @oob-eth-addr: MAC Address allocated for an out-of-band management
+#                controller, to be retrieved through NC-SI.
+#
 # Since: 1.2
 ##
 { 'struct': 'NetdevUserOptions',
@@ -193,7 +198,9 @@
     '*smbserver': 'str',
     '*hostfwd':   ['String'],
     '*guestfwd':  ['String'],
-    '*tftp-server-name': 'str' } }
+    '*tftp-server-name': 'str',
+    '*mfr-id':    'uint32',
+    '*oob-eth-addr': 'str' } }
 
 ##
 # @NetdevTapOptions:
-- 
2.31.1



^ permalink raw reply related	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2023-01-05 16:22 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-01-05  9:13 [PATCH 0/1] net/slirp: Add mfr-id and oob-eth-addr parameters Peter Delevoryas
2023-01-05  9:13 ` [PATCH 1/1] " Peter Delevoryas

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).