[libvirt] [PATCH v3 2/2] network: Add code for setting network bandwidth for ethernet interfaces

Anirban Chakraborty abchak at juniper.net
Thu Oct 9 06:21:32 UTC 2014



On 10/8/14, 8:39 PM, "Eric Blake" <eblake at redhat.com> wrote:

>On 10/08/2014 04:10 PM, Anirban Chakraborty wrote:
>
>>> Needs rework after my comments on 1/2.  I also wonder if this should
>>> just be folded in to that patch, and/or made into a switch statement
>>> where the compiler forces us to think about any future
>>> VIR_DOMAIN_NET_TYPE_* additions on whether they should return true or
>>> false.
>
>>> bool virNetDevSupportBandwidth(virDomainNetType type)
>>> {
>>>    switch (type) {
>>>    case VIR_DOMAIN_NET_TYPE_BRIDGE:
>>>    case VIR_DOMAIN_NET_TYPE_NETWORK:
>>>    case VIR_DOMAIN_NET_TYPE_DIRECT:
>>>    case VIR_DOMAIN_NET_TYPE_ETHERNET:
>>>        return true;
>>>    case VIR_DOMAIN_NET_TYPE_USER:
>>>    case VIR_DOMAIN_NET_TYPE_VHOSTUSER:
>>>    case VIR_DOMAIN_NET_TYPE_SERVER:
>>>    case VIR_DOMAIN_NET_TYPE_CLIENT:
>>>    case VIR_DOMAIN_NET_TYPE_MCAST:
>>>    case VIR_DOMAIN_NET_TYPE_INTERNAL:
>>>    case VIR_DOMAIN_NET_TYPE_HOSTDEV:
>>>    case VIR_DOMAIN_NET_TYPE_LAST:
>>>        /* cover all enums to appease the compiler */ ;
>>>    }
>>>    return false;
>>> }
>> 
>> We could have the function defined with a switch, however, instead of
>> listing all the types, I could return false from the default case.
>> 
>> Something like:
>>     switch (type) {
>>     case VIR_DOMAIN_NET_TYPE_BRIDGE:
>>     case VIR_DOMAIN_NET_TYPE_NETWORK:
>>     case VIR_DOMAIN_NET_TYPE_DIRECT:
>>     case VIR_DOMAIN_NET_TYPE_ETHERNET:
>>         return true;
>> 
>>     default;
>>         return false;
>
>Alas, using a default case means the compiler can no longer tell you
>about missed cases.  I wrote my example to intentionally spell out ALL
>cases without a default, in order to ensure the compiler will loudly
>warn if we add another enum in the future.

I understood the intention. However, I was aiming for a compact code. If
we add additional enums for network type, we should be adding those types
in the above switch provided the new interface type supports bandwidth. I
do not know if we should prevent future coding error by elaborating the
current code. Forgive me, as I do not know the coding convention for
libvirt. If this is the standard practice, I¹ll change the above switch as
per your wish.

Anirban 





More information about the libvir-list mailing list