Re: [Nbd] Processing client's option list
- To: Goswin von Brederlow <goswin-v-b@...186...>
- Cc: nbd-general@lists.sourceforge.net
- Subject: Re: [Nbd] Processing client's option list
- From: Wouter Verhelst <w@...112...>
- Date: Sun, 29 May 2011 14:31:21 +0200
- Message-id: <20110529123121.GD31747@...510...>
- In-reply-to: <877h99bv24.fsf@...860...>
- References: <8BCC20F6E60432780CDEB0A8@...874...> <20110529092914.GC23363@...510...> <877h99bv24.fsf@...860...>
On Sun, May 29, 2011 at 01:33:23PM +0200, Goswin von Brederlow wrote:
> Wouter Verhelst <w@...112...> writes:
> > On Sun, May 29, 2011 at 10:06:20AM +0100, Alex Bligh wrote:
> >> Wouter,
> >>
> >> --On 16 May 2011 23:01:51 +0100 Alex Bligh <alex@...872...> wrote:
> >>
> >> > Hmm... Another problem. How does the server know when it has
> >> > reached the end of the client's option list? I'd suggest
> >> > the client writes 4 octets of zero (in place of another
> >> > option identifier), but that's possibly not API
> >> > compatible.
> >>
> >> Can I remind you about this one? I'm puzzled about how this is
> >> meant to work.
> >
> > I overlooked that when I defined the new negotiation. Worse, it's not
> > possible to add new messages without breaking the protocol, since the
> > server doesn't currently ignore any options it doesn't know about.
> >
> > So, here's a suggestion:
> > - The server sets a flag "I have a fixed new-style negotiation
> > implementation"
> > - The client replies with a similar flag.
> > - Only if both client and server have set that bit can extra options be
> > used. In that case, the server must continue reading data until it
> > reads a packet NBD_OPT_END, with zero length. It must echo that back
> > to the client when it has nothing more to say.
> > - The server must not send any data to the client beyond what is
> > required for any explicit requests by the client and the NBD_OPT_END
> > packet.
> >
> > This way, both the client and the server will know when negotiation is
> > finished, even if one or the other does not implement an option that is
> > requested by the other end.
> >
> > Thoughts?
>
> Currently NBD_OPT_EXPORT_NAME is the only possible option and it is also
> required. How about declaring that NBD_OPT_EXPORT_NAME must be the last
> option being send and ends the negotiation?
Yes, that sounds like a better way; and if the client sends more than
just NBD_OPT_EXPORT_NAME, the server must then reply with some
confirmation that it's parsed all options and thinks negotiation is
finished. It must not do so if only NBD_OPT_EXPORT_NAME has been
specified.
> That would be compatible with existing behaviour and allow to add new
> options.
>
> Only problem with that design would be if in the future there will be
> options that require the export name to be known before the server can
> decide how to reply.
If that ever happens, we can have the server set a flag to communicate
to the client that the server knows about these options, to which the
client can then reply with a message that it wants to use one (or more)
of them. It's a bit ugly, but not as bad as what I suggested above.
--
The volume of a pizza of thickness a and radius z can be described by
the following formula:
pi zz a
Reply to: