qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v7 05/14] qapi: net: add stream and dgram netdevs


From: Markus Armbruster
Subject: Re: [PATCH v7 05/14] qapi: net: add stream and dgram netdevs
Date: Tue, 02 Aug 2022 15:53:43 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/27.2 (gnu/linux)

Laurent Vivier <lvivier@redhat.com> writes:

> On 02/08/2022 10:37, Markus Armbruster wrote:
>> Laurent Vivier <lvivier@redhat.com> writes:
>> 
> ...
>>> diff --git a/qemu-options.hx b/qemu-options.hx
>>> index 79e00916a11f..170117e1adf0 100644
>>> --- a/qemu-options.hx
>>> +++ b/qemu-options.hx
>>> @@ -2726,6 +2726,18 @@ DEF("netdev", HAS_ARG, QEMU_OPTION_netdev,
>>>       "-netdev socket,id=str[,fd=h][,udp=host:port][,localaddr=host:port]\n"
>>>       "                configure a network backend to connect to another 
>>> network\n"
>>>       "                using an UDP tunnel\n"
>>> +    "-netdev 
>>> stream,id=str[,server=on|off],addr.type=inet,addr.host=host,addr.port=port\n"
>>> +    "-netdev stream,id=str[,server=on|off],addr.type=fd,addr.str=h\n"
>>> +    "                configure a network backend to connect to another 
>>> network\n"
>>> +    "                using a socket connection in stream mode.\n"
>
>  From v6:
>> This part needs to match NetdevStreamOptions above.
>> 
>> Missing here: the optional members of InetSocketAddress: numeric, to,
>> ipv4, ...  Do we care?
>
> At this patch level, no, because we decode them manually and not using 
> socket_connect()/socket_listen(). But the doc should be updated for PATCH 
> 13/14 as I move 
> stream.c to QIO.
>
>> 
>> The next part needs to match NetdevDgramOptions above.
>
>
>>> +    "-netdev 
>>> dgram,id=str,remote.type=inet,remote.host=maddr,remote.port=port[,local.type=inet,local.host=addr]\n"
>>> +    "-netdev 
>>> dgram,id=str,remote.type=inet,remote.host=maddr,remote.port=port[,local.type=fd,local.str=h]\n"
>>> +    "                configure a network backend to connect to a multicast 
>>> maddr and port\n"
>>> +    "                use ``local.host=addr`` to specify the host address 
>>> to send packets from\n"
>
>  From v6:
>> I figure this covers table rows
>> 
>>    #    @remote         @local      |   okay?
>>    #    ----------------------------+--------
>>    #    multicast       absent      |   yes
>>    #    multicast       present     |   yes
>> 
>> for remote.type=inet and any local.type.
>> 
>> What about remote.type=fd?
>
> multicast is only supported with remote.type=inet, not fd or unix
>
> In net_dgram_init(), we initiate a multicast connection if remote.type is 
> inet and address 
> type is multicast, otherwise it's an unicast connection.

Hmm.

With .type=inet, .host=... determines multicast.

With .type=fd, we *assume* unicast?  What if the underlying socket is
actually bound to a multicast address?

>>> +    "-netdev 
>>> dgram,id=str,local.type=inet,local.host=addr,local.port=port[,remote.type=inet,remote.host=addr,remote.port=port]\n"
>
>  From v6:
>> I figure this covers table rows
>> 
>>     #    absent          present     |   yes
>>     #    not multicast   present     |   yes
>> 
>> for *.type=inet.
>
>
>>> +    "-netdev dgram,id=str,local.type=fd,local.str=h\n"
>>> +    "                configure a network backend to connect to another 
>>> network\n"
>>> +    "                using an UDP tunnel\n"
>
>  From v6:
>> I figure this covers table row
>> 
>>    #    absent          present     |   yes
>> 
>> for local.type=fd.
>> 
>> Together, they cover table row
>> 
>>     #    absent          present     |   yes
>> 
>> for any local.type.  Good.
>> 
>> Table row
>> 
>>     #    not multicast   present     |   yes
>> 
>> is only covered for *.type=inet.  Could either of the types be fd?
>
> In v7, I've update the table to include the case of fd:
>
>      =============  ========  =====
>      remote         local     okay?
>      =============  ========  =====
>      absent         absent    no
>      absent         not fd    no
>      absent         fd        yes
>      multicast      absent    yes
>      multicast      present   yes
>      not multicast  absent    no
>      not multicast  present   yes
>      =============  ========  =====
>
> For local, if it's not specified otherwise, fd is supported.
> Remote and local type must be the same (inet or unix), if local is fd, remote 
> must not be 
> provided.

My brain is melting.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]