From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.5 (2021-03-20) on atuin.qyliss.net X-Spam-Level: X-Spam-Status: No, score=-1.4 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FORGED_SPF_HELO,FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, MSGID_FROM_MTA_HEADER,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2, SPF_HELO_PASS autolearn=no autolearn_force=no version=3.4.5 Received: by atuin.qyliss.net (Postfix, from userid 496) id A57911EFE8; Mon, 17 May 2021 19:23:51 +0000 (UTC) Received: from atuin.qyliss.net (localhost [IPv6:::1]) by atuin.qyliss.net (Postfix) with ESMTP id 6EE691EFCC; Mon, 17 May 2021 19:23:41 +0000 (UTC) Received: by atuin.qyliss.net (Postfix, from userid 496) id 749201EFBF; Mon, 17 May 2021 19:23:38 +0000 (UTC) Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10olkn2040.outbound.protection.outlook.com [40.92.42.40]) by atuin.qyliss.net (Postfix) with ESMTPS id C512D1EF5E for ; Mon, 17 May 2021 19:23:34 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=JaOFvVg9yymqXD9SNgYtlEioOVMWIkaOdLiPfXPUvwzUoq/W4GZsr9sUPc0hm6IRQXqRkOt7SKbyUgr8/3glHnCUdcA28CrABGjADqjAvIA5TrhIGZofqB0z+OM6fNyONM/DkKIgZXE7cI/gggOEyH4zbDAq8GTxYVt5c6en10akF8hy0W+xL5ORsMY7jtW/ELQoUSuMSEDcu5e5xVsDW5LZ6/6XpmNFvQiOLmQ/yutDp/ykPVEqkdNPYocNb85rh4xBkCclTRNRAhyiipuSihErTMXpQv6OT4YzFupfuvrFGfXDQKAPXElCPW48ZrNCwr1Kkp8Brgxfzv6d+JhLYg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=kgPe3FuDKpJgPORTEU00nDyxIegA5bP1yVVQMAozITE=; b=NJzacQxOrgy34nLfv82ZxK8lJnyYO0twj+5Cfw6oXw05X2zSDeFvpPuSqVweftDTjqlb4EQf7Ku8jxpmbe+lOfyriEPwOxMBltLf4ub3XD+vv7lX5kSeLJk9MTJWUdhY22UstTsop7ijadN6+lUuL7Cd7eaSkuxeRBBjCyDpqd9iwNou5IuuTHMLG1QR0eVZj7ozlUdh0Tm3DeAvKiPIlkBTgIo35E+tp5544caO8PfajVV0nXpWUXU7lNELK8LtvQ+gXIWTch+TPIvloADUhNymLIiw6sqApbJ3Ep8lBKb0pqUzdG0I4Ig5qV9/1nj2l4/RyrQCwUsMz/9DF6rQmg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=kgPe3FuDKpJgPORTEU00nDyxIegA5bP1yVVQMAozITE=; b=U7rGJhzljg3MIJVdrE50yD1OihaJ/ZanKg+kjiBF5gFm27YY7fpoWX6wPEi4VYJsV7GvmY2VmiC8G2gVxUsOHfnH1eY0kmm2R9QqOUyjUbC7kVb1OjtCzuMk8XltHhXr5qDy5bo9RH2iEFN7esdV1/gbS75ufeMhftXrPbsmMhvHJAeq5tnh55CUFjtCt70Dag21fxPlMA95VaRnSAO0/Kym77A8ZQggR7OiMDl8c4cNzRLwBqD2rbZVerq6Eqdb6pK3agjVD091rxi557QhliUKSIBSAD4DaAyxuhaNBX33umUfMY4E77lrcrhPXQOhytn8S1m86v2h30dQLkUHvA== Received: from DM6NAM10FT042.eop-nam10.prod.protection.outlook.com (2a01:111:e400:7e86::50) by DM6NAM10HT133.eop-nam10.prod.protection.outlook.com (2a01:111:e400:7e86::170) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4129.25; Mon, 17 May 2021 19:23:30 +0000 Received: from SJ0PR03MB5581.namprd03.prod.outlook.com (2a01:111:e400:7e86::44) by DM6NAM10FT042.mail.protection.outlook.com (2a01:111:e400:7e86::153) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4129.25 via Frontend Transport; Mon, 17 May 2021 19:23:30 +0000 X-IncomingTopHeaderMarker: OriginalChecksum:B52A91D8B166AD3099DEA723EB171D6EBBF06FE0699A9DE547D771B5FC33A97B;UpperCasedChecksum:D22107B2570182ACDD01F7E075A47201A7604039CCA1BB899C9D17DA77E0A94E;SizeAsReceived:8520;Count:45 Received: from SJ0PR03MB5581.namprd03.prod.outlook.com ([fe80::2437:eb29:a6eb:76fa]) by SJ0PR03MB5581.namprd03.prod.outlook.com ([fe80::2437:eb29:a6eb:76fa%5]) with mapi id 15.20.4129.031; Mon, 17 May 2021 19:23:30 +0000 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=UTF-8 To: "Alyssa Ross" , Subject: Re: [PATCH crosvm v2] crosvm: support setting guest MAC from tap-fd From: "Cole Helbling" Date: Mon, 17 May 2021 12:20:40 -0700 Message-ID: In-Reply-To: <20210517185700.3591932-1-hi@alyssa.is> X-TMN: [Hh29Tq0/U+WGEXfuFrA/KvH2wmBH+OJF] X-ClientProxiedBy: SJ0PR03CA0287.namprd03.prod.outlook.com (2603:10b6:a03:39e::22) To SJ0PR03MB5581.namprd03.prod.outlook.com (2603:10b6:a03:27b::20) X-Microsoft-Original-Message-ID: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost (73.48.197.220) by SJ0PR03CA0287.namprd03.prod.outlook.com (2603:10b6:a03:39e::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4108.25 via Frontend Transport; Mon, 17 May 2021 19:23:29 +0000 X-MS-PublicTrafficType: Email X-IncomingHeaderCount: 45 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-Correlation-Id: fce8ce08-d51c-407d-a91a-08d9196940c0 X-MS-Exchange-SLBlob-MailProps: wGn/oxjRRS/bnMAH+xH1yJPzcgj3poj2N9o1i2ipgkFDjsUuhK7LsOEWMm9ZVPYKZZ4wCWxBLBaFcWAvJzkHZ+QY3G/X+ZsNpJBuvrcL4YvI9wd7iCSh0cUI5df71PZo/hiixHtTUfZLsdRoTucXV+DJ2oeCtcIqwscQWMxH7kuWwckRKZve781+EebZqhlBzi0s8+TC1S6ysEV8V8qfhLzEJd1OtzYwwZoh2fFx/c68TKhxpONGXWWU73EJGaj17vOaIxC+2VblJZ6Nu72dDdueckZc3Pq4HvGK1CX7XLr9QshZRPXNtLy4NORFU7ZnU6VNpj5o1W0k91abrMp1+09pxO6Wyi1pHMiTDLv00OylfAzMQtJvyQzvrFXEiettE8TQfblBFbGnfFhFJ7213Uw0FMLqLSos4cto+8rcMjeiiZPogOpxI5ySg1CtpCf3evRtC+M0EMvRnEXVFP1udrH3HMcLdI42N31thP0VZw/xAO9fl0C7mq5+n3mRTHeC65H8FtVUUU6VV68UwmD7Czo7XYCXFMEibhm09Mr2S8MlFtrHD2ozxz5eL4lXhcAlCVdUk0/FVzCNK5kBf/ov9PPru94c85EryzAAZDuNQ/ZILCmWd1LX1UHpDH4nlr9/mrD8aAWJzSHWUWaxdFMQBh1iUs3GK3n+K+pAg3he36WxhWVRSzx1srOgDNBw4YeHFgbvh07stta+PJcnKz/qo2U5WqZfeuSG5uM5+UvJPtHs1nMDiR2ISeVZh2ojdU9bbrcRE9DQ/x4bJhU1Sd6PtD/o4PCrHRGBMpA/Ke5U0LRgF4L0Kzw207QKjR3Iha9MKP/gFb+vsyrMYCQtwJrsDXp+pneLzM/kLkh70FpXZxH2A0bEtEuYBO/LMZVmFrri X-MS-TrafficTypeDiagnostic: DM6NAM10HT133: X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Qdyghseb5Z2PHl6VPspKAPBIJOpNOCivHziIOKRQ/7dUxq29rflqW0wxOx756Poba1s9wdOKXS4NMuO565Y6tiYGx4vuJICLS/qV5wRXOfFIWJx5yooY2sbKczJkwYYbCeVumNH9fO4RG8hy76nXid/Gd517QGxn9sguitSLW8yz4znh67DuTdOcufo444sg5reK9UZuDdzHR0h1epjCXNs0bURbDlEEbJdo6fAlniKnYFk+JLla/NIPdtDg2XEnC/fRohbVeI/f51ZU93SZbn0smIODfTNoDzL4YGjNKkwXr96ob1dm1ZUkPjO7xC5IsKpCSuH4qMS9I7bGB8JNR9jPCoZXUCVpmHpCtNURlYiD4ItoTwB51FyviFG49vwbDAi6pipzMVdOrgMZR1MvYQ6cggB3RHbtGvOId0kQDnzfDeSvAp0OKQomQrgfGbWCMTTgCCuAdZPZ3/fNCmirAg== X-MS-Exchange-AntiSpam-MessageData: g0mk1s6IUxwRukvMLNWY0BE88KhKLIH6Xqo63fbmFjQ09WUAPfqhIRuPYfjHCLPQsBOe7TVBjQLhLCLOB74TEjNapn1fnmJjKRjQUt+MHBcbekNOOz2b8KW8p6uxVOIyC6Fi1/iPMABOVlkA8IODSQ== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: fce8ce08-d51c-407d-a91a-08d9196940c0 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 May 2021 19:23:30.0215 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-AuthSource: DM6NAM10FT042.eop-nam10.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: Internet X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6NAM10HT133 Message-ID-Hash: 24TBUW4UYBTD4GFAXIAR2PJ2RQGJZ6N5 X-Message-ID-Hash: 24TBUW4UYBTD4GFAXIAR2PJ2RQGJZ6N5 X-MailFrom: cole.e.helbling@outlook.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: Cole Helbling X-Mailman-Version: 3.3.4 Precedence: list List-Id: Patches and low-level development discussion Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: On Mon May 17, 2021 at 11:57 AM PDT, Alyssa Ross wrote: > This adds a mac=3D option to crosvm's --tap-fd option. The virtio-net > driver in the guest will read the desired MAC from virtio > configuration space. > > See the documentation for VIRTIO_NET_F_MAC in the Virtio spec[1]. > > [1]: https://docs.oasis-open.org/virtio/virtio/v1.1/virtio-v1.1.html > > Thanks-to: Puck Meerburg > --- > devices/src/virtio/net.rs | 12 ++++++-- > src/crosvm.rs | 8 +++-- > src/linux.rs | 12 ++++---- > src/main.rs | 63 ++++++++++++++++++++++++++++++--------- > 4 files changed, 71 insertions(+), 24 deletions(-) [snip] > diff --git a/src/main.rs b/src/main.rs > index 5d02af02f..f8bc0d14e 100644 > --- a/src/main.rs > +++ b/src/main.rs > @@ -28,7 +28,7 @@ use base::{ > }; > use crosvm::{ > argument::{self, print_help, set_arguments, Argument}, > - platform, BindMount, Config, DiskOption, Executable, GidMap, SharedD= ir, TouchDeviceOption, > + platform, BindMount, Config, DiskOption, Executable, GidMap, SharedD= ir, TapFdOptions, TouchDeviceOption, > DISK_ID_LEN, > }; > #[cfg(feature =3D "gpu")] > @@ -1319,17 +1319,52 @@ fn set_argument(cfg: &mut Config, name: &str, val= ue: Option<&str>) -> argument:: > } > "vhost-net" =3D> cfg.vhost_net =3D true, > "tap-fd" =3D> { > - cfg.tap_fd.push( > - value > - .unwrap() > - .parse() > - .map_err(|_| argument::Error::InvalidValue { > - value: value.unwrap().to_owned(), > - expected: String::from( > - "this value for `tap-fd` must be an unsigned= integer", > - ), > - })?, > - ); > + let mut components =3D value.unwrap().split(','); > + > + let fd: RawDescriptor =3D components > + .next() > + .and_then(|x| x.parse().ok()) > + .ok_or_else(|| argument::Error::InvalidValue { > + value: value.unwrap().to_owned(), > + expected: String::from("this value for `tap-fd` must= be an unsigned integer"), > + })?; > + > + let mut mac =3D None; > + for c in components { > + let mut kv =3D c.splitn(2, '=3D'); > + let (kind, value) =3D match (kv.next(), kv.next()) { > + (Some(kind), Some(value)) =3D> (kind, value), > + _ =3D> { > + return Err(argument::Error::InvalidValue { > + value: c.to_owned(), > + expected: String::from("option must be of th= e form `kind=3Dvalue`"), > + }) > + } > + }; > + match kind { > + "mac" =3D> { > + mac =3D Some(value.parse().map_err(|_| argument:= :Error::InvalidValue { > + value: value.to_owned(), > + expected: String::from( > + "`mac` needs to be in the form \"XX:XX:X= X:XX:XX:XX\"", > + ), > + })?) > + } > + _ =3D> { > + return Err(argument::Error::InvalidValue { > + value: kind.to_owned(), > + expected: String::from("unrecognized option"= ), > + }) > + } > + } > + } > + if cfg.tap_fd.contains_key(&fd) { > + return Err(argument::Error::TooManyArguments(format!( Is there a better Error variant for this? `TooManyArguments` seems not- completely-accurate when specifying an already-in-use FD. > + "TAP FD already used: '{}'", > + name > + ))); > + } > + cfg.tap_fd.insert(fd, TapFdOptions { mac }); > } > #[cfg(feature =3D "gpu")] > "gpu" =3D> { > @@ -1644,8 +1679,8 @@ writeback=3DBOOL - Indicates whether the VM can use= writeback caching (default: fa > Argument::value("plugin-gid-map-file", "PATH", "Path to the fi= le listing supplemental GIDs that should be mapped in plugin jail. Can be = given more than once."), > Argument::flag("vhost-net", "Use vhost for networking."), > Argument::value("tap-fd", > - "fd", > - "File descriptor for configured tap device. A = different virtual network card will be added each time this argument is giv= en."), > + "FD[,mac=3DMAC]", > + "File descriptor for configured tap device. A = different virtual network card will be added each time this argument is giv= en. MAC is the MAC address that will be set in the guest."), > #[cfg(feature =3D "gpu")] > Argument::flag_or_value("gpu", > "[width=3DINT,height=3DINT]", > > base-commit: f35d2c43ff19520855cffee761dc8899c5a439a1 > --=20 > 2.31.1 Else, LGTM. Reviewed-by: Cole Helbling