Since the ESX virtual hardware version 4.0, virtual machines support up
to 10 virtual NICs instead of 4 previously. This changes the limit
accordingly based on the provided `virtualHW.version`.
Signed-off-by: Bastien Orivel <bastien.orivel@diateam.net>
---
src/vmx/vmx.c | 20 ++++++++++++++------
src/vmx/vmx.h | 2 +-
2 files changed, 15 insertions(+), 7 deletions(-)
diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c
index 67bbe27fde..afe6fe0a1a 100644
--- a/src/vmx/vmx.c
+++ b/src/vmx/vmx.c
@@ -290,7 +290,7 @@ def->fss[0]... <=> sharedFolder0.present = "true"
################################################################################
## nets ########################################################################
- ethernet[0..3] -> <controller>
+ ethernet[0..9] -> <controller>
ethernet0.present = "true" # defaults to "false"
ethernet0.startConnected = "true" # defaults to "true"
@@ -3376,7 +3376,7 @@ virVMXFormatConfig(virVMXContext *ctx, virDomainXMLOptionPtr xmlopt, virDomainDe
/* def:nets */
for (i = 0; i < def->nnets; ++i) {
- if (virVMXFormatEthernet(def->nets[i], i, &buffer) < 0)
+ if (virVMXFormatEthernet(def->nets[i], i, &buffer, virtualHW_version) < 0)
goto cleanup;
}
@@ -3732,15 +3732,23 @@ virVMXFormatFileSystem(virDomainFSDefPtr def, int number, virBufferPtr buffer)
int
virVMXFormatEthernet(virDomainNetDefPtr def, int controller,
- virBufferPtr buffer)
+ virBufferPtr buffer, int virtualHW_version)
{
char mac_string[VIR_MAC_STRING_BUFLEN];
unsigned int prefix, suffix;
- if (controller < 0 || controller > 3) {
+ /*
+ * Machines older than virtualHW.version = 7 (ESXi 4.0) only support up to 4
+ * virtual NICs. New machines support up to 10.
+ */
+ int controller_limit = 4;
+ if (virtualHW_version >= 7)
+ controller_limit = 10;
+
+ if (controller < 0 || controller > controller_limit) {
virReportError(VIR_ERR_INTERNAL_ERROR,
- _("Ethernet controller index %d out of [0..3] range"),
- controller);
+ _("Ethernet controller index %d out of [0..%d] range"),
+ controller, controller_limit - 1);
return -1;
}
diff --git a/src/vmx/vmx.h b/src/vmx/vmx.h
index 63f47822fb..7069a50b6e 100644
--- a/src/vmx/vmx.h
+++ b/src/vmx/vmx.h
@@ -131,7 +131,7 @@ int virVMXFormatFileSystem(virDomainFSDefPtr def, int number,
virBufferPtr buffer);
int virVMXFormatEthernet(virDomainNetDefPtr def, int controller,
- virBufferPtr buffer);
+ virBufferPtr buffer, int virtualHW_version);
int virVMXFormatSerial(virVMXContext *ctx, virDomainChrDefPtr def,
virBufferPtr buffer);
--
2.20.1
On 7/7/20 4:04 PM, Bastien Orivel wrote:
> Since the ESX virtual hardware version 4.0, virtual machines support up
> to 10 virtual NICs instead of 4 previously. This changes the limit
> accordingly based on the provided `virtualHW.version`.
>
> Signed-off-by: Bastien Orivel <bastien.orivel@diateam.net>
> ---
> src/vmx/vmx.c | 20 ++++++++++++++------
> src/vmx/vmx.h | 2 +-
> 2 files changed, 15 insertions(+), 7 deletions(-)
>
> diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c
> index 67bbe27fde..afe6fe0a1a 100644
> --- a/src/vmx/vmx.c
> +++ b/src/vmx/vmx.c
> @@ -290,7 +290,7 @@ def->fss[0]... <=> sharedFolder0.present = "true"
> ################################################################################
> ## nets ########################################################################
>
> - ethernet[0..3] -> <controller>
> + ethernet[0..9] -> <controller>
>
> ethernet0.present = "true" # defaults to "false"
> ethernet0.startConnected = "true" # defaults to "true"
> @@ -3376,7 +3376,7 @@ virVMXFormatConfig(virVMXContext *ctx, virDomainXMLOptionPtr xmlopt, virDomainDe
>
> /* def:nets */
> for (i = 0; i < def->nnets; ++i) {
> - if (virVMXFormatEthernet(def->nets[i], i, &buffer) < 0)
> + if (virVMXFormatEthernet(def->nets[i], i, &buffer, virtualHW_version) < 0)
> goto cleanup;
> }
>
> @@ -3732,15 +3732,23 @@ virVMXFormatFileSystem(virDomainFSDefPtr def, int number, virBufferPtr buffer)
>
> int
> virVMXFormatEthernet(virDomainNetDefPtr def, int controller,
> - virBufferPtr buffer)
> + virBufferPtr buffer, int virtualHW_version)
> {
> char mac_string[VIR_MAC_STRING_BUFLEN];
> unsigned int prefix, suffix;
>
> - if (controller < 0 || controller > 3) {
> + /*
> + * Machines older than virtualHW.version = 7 (ESXi 4.0) only support up to 4
> + * virtual NICs. New machines support up to 10.
> + */
> + int controller_limit = 4;
> + if (virtualHW_version >= 7)
> + controller_limit = 10;
> +
> + if (controller < 0 || controller > controller_limit) {
This allows 4 nics for the old ESX version (if controller = 4 then this
would be reported, but with your patch it isn't anymore), and 11 nics
for the new EXS (if controller = 10, then this again is not caught
properly). We need to decrease those 4 and 10 and ..
> virReportError(VIR_ERR_INTERNAL_ERROR,
> - _("Ethernet controller index %d out of [0..3] range"),
> - controller);
> + _("Ethernet controller index %d out of [0..%d] range"),
> + controller, controller_limit - 1);
.. drop this -1.
No need to send v2, I can fix it just before pushing, if you agree with
suggested change.
Michal
On 08/07/2020 17:32, Michal Privoznik wrote:
> On 7/7/20 4:04 PM, Bastien Orivel wrote:
>> Since the ESX virtual hardware version 4.0, virtual machines support up
>> to 10 virtual NICs instead of 4 previously. This changes the limit
>> accordingly based on the provided `virtualHW.version`.
>>
>> Signed-off-by: Bastien Orivel <bastien.orivel@diateam.net>
>> ---
>> src/vmx/vmx.c | 20 ++++++++++++++------
>> src/vmx/vmx.h | 2 +-
>> 2 files changed, 15 insertions(+), 7 deletions(-)
>>
>> diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c
>> index 67bbe27fde..afe6fe0a1a 100644
>> --- a/src/vmx/vmx.c
>> +++ b/src/vmx/vmx.c
>> @@ -290,7 +290,7 @@ def->fss[0]... <=>
>> sharedFolder0.present = "true"
>>
>> ################################################################################
>> ## nets
>> ########################################################################
>> - ethernet[0..3] ->
>> <controller>
>> + ethernet[0..9] -> <controller>
>> ethernet0.present =
>> "true" # defaults to "false"
>> ethernet0.startConnected =
>> "true" # defaults to "true"
>> @@ -3376,7 +3376,7 @@ virVMXFormatConfig(virVMXContext *ctx,
>> virDomainXMLOptionPtr xmlopt, virDomainDe
>> /* def:nets */
>> for (i = 0; i < def->nnets; ++i) {
>> - if (virVMXFormatEthernet(def->nets[i], i, &buffer) < 0)
>> + if (virVMXFormatEthernet(def->nets[i], i, &buffer,
>> virtualHW_version) < 0)
>> goto cleanup;
>> }
>> @@ -3732,15 +3732,23 @@ virVMXFormatFileSystem(virDomainFSDefPtr
>> def, int number, virBufferPtr buffer)
>> int
>> virVMXFormatEthernet(virDomainNetDefPtr def, int controller,
>> - virBufferPtr buffer)
>> + virBufferPtr buffer, int virtualHW_version)
>> {
>> char mac_string[VIR_MAC_STRING_BUFLEN];
>> unsigned int prefix, suffix;
>> - if (controller < 0 || controller > 3) {
>> + /*
>> + * Machines older than virtualHW.version = 7 (ESXi 4.0) only
>> support up to 4
>> + * virtual NICs. New machines support up to 10.
>> + */
>> + int controller_limit = 4;
>> + if (virtualHW_version >= 7)
>> + controller_limit = 10;
>> +
>> + if (controller < 0 || controller > controller_limit) {
>
> This allows 4 nics for the old ESX version (if controller = 4 then
> this would be reported, but with your patch it isn't anymore), and 11
> nics for the new EXS (if controller = 10, then this again is not
> caught properly). We need to decrease those 4 and 10 and ..
>
Oof. Nice catch.
>> virReportError(VIR_ERR_INTERNAL_ERROR,
>> - _("Ethernet controller index %d out of [0..3]
>> range"),
>> - controller);
>> + _("Ethernet controller index %d out of
>> [0..%d] range"),
>> + controller, controller_limit - 1);
>
> .. drop this -1.
>
> No need to send v2, I can fix it just before pushing, if you agree
> with suggested change.
Sounds good to me.
>
> Michal
>
Bastien
On 7/8/20 5:37 PM, Bastien Orivel wrote:
>
>
> On 08/07/2020 17:32, Michal Privoznik wrote:
>> On 7/7/20 4:04 PM, Bastien Orivel wrote:
>>> Since the ESX virtual hardware version 4.0, virtual machines support up
>>> to 10 virtual NICs instead of 4 previously. This changes the limit
>>> accordingly based on the provided `virtualHW.version`.
>>>
>>> Signed-off-by: Bastien Orivel <bastien.orivel@diateam.net>
>>> ---
>>> src/vmx/vmx.c | 20 ++++++++++++++------
>>> src/vmx/vmx.h | 2 +-
>>> 2 files changed, 15 insertions(+), 7 deletions(-)
>>>
>>> diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c
>>> index 67bbe27fde..afe6fe0a1a 100644
>>> --- a/src/vmx/vmx.c
>>> +++ b/src/vmx/vmx.c
>>> @@ -290,7 +290,7 @@ def->fss[0]... <=>
>>> sharedFolder0.present = "true"
>>>
>>> ################################################################################
>>> ## nets
>>> ########################################################################
>>> - ethernet[0..3] ->
>>> <controller>
>>> + ethernet[0..9] -> <controller>
>>> ethernet0.present =
>>> "true" # defaults to "false"
>>> ethernet0.startConnected =
>>> "true" # defaults to "true"
>>> @@ -3376,7 +3376,7 @@ virVMXFormatConfig(virVMXContext *ctx,
>>> virDomainXMLOptionPtr xmlopt, virDomainDe
>>> /* def:nets */
>>> for (i = 0; i < def->nnets; ++i) {
>>> - if (virVMXFormatEthernet(def->nets[i], i, &buffer) < 0)
>>> + if (virVMXFormatEthernet(def->nets[i], i, &buffer,
>>> virtualHW_version) < 0)
>>> goto cleanup;
>>> }
>>> @@ -3732,15 +3732,23 @@ virVMXFormatFileSystem(virDomainFSDefPtr
>>> def, int number, virBufferPtr buffer)
>>> int
>>> virVMXFormatEthernet(virDomainNetDefPtr def, int controller,
>>> - virBufferPtr buffer)
>>> + virBufferPtr buffer, int virtualHW_version)
>>> {
>>> char mac_string[VIR_MAC_STRING_BUFLEN];
>>> unsigned int prefix, suffix;
>>> - if (controller < 0 || controller > 3) {
>>> + /*
>>> + * Machines older than virtualHW.version = 7 (ESXi 4.0) only
>>> support up to 4
>>> + * virtual NICs. New machines support up to 10.
>>> + */
>>> + int controller_limit = 4;
>>> + if (virtualHW_version >= 7)
>>> + controller_limit = 10;
>>> +
>>> + if (controller < 0 || controller > controller_limit) {
>>
>> This allows 4 nics for the old ESX version (if controller = 4 then
>> this would be reported, but with your patch it isn't anymore), and 11
>> nics for the new EXS (if controller = 10, then this again is not
>> caught properly). We need to decrease those 4 and 10 and ..
>>
> Oof. Nice catch.
>>> virReportError(VIR_ERR_INTERNAL_ERROR,
>>> - _("Ethernet controller index %d out of [0..3]
>>> range"),
>>> - controller);
>>> + _("Ethernet controller index %d out of
>>> [0..%d] range"),
>>> + controller, controller_limit - 1);
>>
>> .. drop this -1.
>>
>> No need to send v2, I can fix it just before pushing, if you agree
>> with suggested change.
> Sounds good to me.
Done.
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
and pushed. Congratulations on your first libvirt contribution!
Michal
On Wed, 2020-07-08 at 17:47 +0200, Michal Privoznik wrote: > On 7/8/20 5:37 PM, Bastien Orivel wrote: > > On 08/07/2020 17:32, Michal Privoznik wrote: > > > No need to send v2, I can fix it just before pushing, if you agree > > > with suggested change. > > > > > Sounds good to me. > > Done. > > Reviewed-by: Michal Privoznik <mprivozn@redhat.com> > > and pushed. Congratulations on your first libvirt contribution! Congratulations indeed :) As a follow-up to your contribution, would you mind posting a patch in which the release notes (NEWS.rst) are updated with a line of two describing the change? Thanks! -- Andrea Bolognani / Red Hat / Virtualization
© 2016 - 2026 Red Hat, Inc.