T_OPTMGMT(3NSL) Networking Services Library Functions T_OPTMGMT(3NSL)

NAME


t_optmgmt - manage options for a transport endpoint

SYNOPSIS


#include <xti.h>


int t_optmgmt(int fd, const struct t_optmgmt *req, struct t_optmgmt *ret);


DESCRIPTION


This routine is part of the XTI interfaces which evolved from the TLI
interfaces. XTI represents the future evolution of these interfaces.
However, TLI interfaces are supported for compatibility. When using a
TLI routine that has the same name as an XTI routine, the tiuser.h
header file must be used. Refer to the TLI COMPATIBILITY section
for a description of differences between the two interfaces.


The t_optmgmt() function enables a transport user to retrieve, verify
or negotiate protocol options with the transport provider. The
argument fd identifies a transport endpoint.


The req and ret arguments point to a t_optmgmt structure containing
the following members:

struct netbuf opt;
t_scalar_t flags;


The opt field identifies protocol options and the flags field is used
to specify the action to take with those options.


The options are represented by a netbuf structure in a manner similar
to the address in t_bind(3NSL). The argument req is used to request a
specific action of the provider and to send options to the provider.
The argument len specifies the number of bytes in the options, buf
points to the options buffer, and maxlen has no meaning for the req
argument. The transport provider may return options and flag values
to the user through ret. For ret, maxlen specifies the maximum size
of the options buffer and buf points to the buffer where the options
are to be placed. If maxlen in ret is set to zero, no options
values are returned. On return, len specifies the number of bytes of
options returned. The value in maxlen has no meaning for the req
argument, but must be set in the ret argument to specify the maximum
number of bytes the options buffer can hold.


Each option in the options buffer is of the form struct t_opthdr
possibly followed by an option value.


The level field of struct t_opthdr identifies the XTI level or a
protocol of the transport provider. The name field identifies the
option within the level, and len contains its total length; that is,
the length of the option header t_opthdr plus the length of the
option value. If t_optmgmt() is called with the action T_NEGOTIATE
set, the status field of the returned options contains information
about the success or failure of a negotiation.


Several options can be concatenated. The option user has, however to
ensure that each options header and value part starts at a boundary
appropriate for the architecture-specific alignment rules. The macros
T_OPT_FIRSTHDR(nbp), T_OPT_NEXTHDR (nbp,tohp), T_OPT_DATA(tohp) are
provided for that purpose.

T_OPT_DATA(nhp)
If argument is a pointer to a t_opthdr
structure, this macro returns an
unsigned character pointer to the data
associated with the t_opthdr.


T_OPT_NEXTHDR(nbp, tohp)
If the first argument is a pointer to a
netbuf structure associated with an
option buffer and second argument is a
pointer to a t_opthdr structure within
that option buffer, this macro returns a
pointer to the next t_opthdr structure
or a null pointer if this t_opthdr is
the last t_opthdr in the option buffer.


T_OPT_FIRSTHDR(tohp)
If the argument is a pointer to a netbuf
structure associated with an option
buffer, this macro returns the pointer
to the first t_opthdr structure in the
associated option buffer, or a null
pointer if there is no option buffer
associated with this netbuf or if it is
not possible or the associated option
buffer is too small to accommodate even
the first aligned option header.

T_OPT_FIRSTHDR is useful for finding an
appropriately aligned start of the
option buffer. T_OPT_NEXTHDR is useful
for moving to the start of the next
appropriately aligned option in the
option buffer. Note that OPT_NEXTHDR is
also available for backward
compatibility requirements. T_OPT_DATA
is useful for finding the start of the
data part in the option buffer where the
contents of its values start on an
appropriately aligned boundary.

If the transport user specifies several
options on input, all options must
address the same level.

If any option in the options buffer does
not indicate the same level as the first
option, or the level specified is
unsupported, then the t_optmgmt()
request will fail with TBADOPT. If the
error is detected, some options have
possibly been successfully negotiated.
The transport user can check the current
status by calling t_optmgmt() with the
T_CURRENT flag set.

The flags field of req must specify one
of the following actions:


T_NEGOTIATE
This action enables the transport user
to negotiate option values.

The user specifies the options of
interest and their values in the buffer
specified by req->opt.buf and
req->opt.len. The negotiated option
values are returned in the buffer
pointed to by ret->opt.buf. The status
field of each returned option is set to
indicate the result of the negotiation.
The value is T_SUCCESS if the proposed
value was negotiated, T_PARTSUCCESS if a
degraded value was negotiated, T_FAILURE
if the negotiation failed (according to
the negotiation rules), T_NOTSUPPORT if
the transport provider does not support
this option or illegally requests
negotiation of a privileged option, and
T_READONLY if modification of a read-
only option was requested. If the status
is T_SUCCESS, T_FAILURE, T_NOTSUPPORT or
T_READONLY, the returned option value is
the same as the one requested on input.

The overall result of the negotiation is
returned in ret->flags.

This field contains the worst single
result, whereby the rating is done
according to the order T_NOTSUPPORT,
T_READONLY, T_FAILURE, T_PARTSUCCESS,
T_SUCCESS. The value T_NOTSUPPORT is
the worst result and T_SUCCESS is the
best.

For each level, the option T_ALLOPT can
be requested on input. No value is given
with this option; only the t_opthdr part
is specified. This input requests to
negotiate all supported options of this
level to their default values. The
result is returned option by option in
ret->opt.buf. Note that depending on the
state of the transport endpoint, not all
requests to negotiate the default value
may be successful.


T_CHECK
This action enables the user to verify
whether the options specified in req are
supported by the transport provider.If
an option is specified with no option
value (it consists only of a t_opthdr
structure), the option is returned with
its status field set to T_SUCCESS if it
is supported, T_NOTSUPPORT if it is not
or needs additional user privileges, and
T_READONLY if it is read-only (in the
current XTI state). No option value is
returned.

If an option is specified with an option
value, the status field of the returned
option has the same value, as if the
user had tried to negotiate this value
with T_NEGOTIATE. If the status is
T_SUCCESS, T_FAILURE, T_NOTSUPPORT or
T_READONLY, the returned option value is
the same as the one requested on input.

The overall result of the option checks
is returned in ret->flags. This field
contains the worst single result of the
option checks, whereby the rating is the
same as for T_NEGOTIATE .

Note that no negotiation takes place.
All currently effective option values
remain unchanged.


T_DEFAULT
This action enables the transport user
to retrieve the default option values.
The user specifies the options of
interest in req->opt.buf. The option
values are irrelevant and will be
ignored; it is sufficient to specify the
t_opthdr part of an option only. The
default values are then returned in
ret->opt.buf.

The status field returned is
T_NOTSUPPORT if the protocol level does
not support this option or the transport
user illegally requested a privileged
option, T_READONLY if the option is
read-only, and set to T_SUCCESS in all
other cases. The overall result of the
request is returned in ret->flags. This
field contains the worst single result,
whereby the rating is the same as for
T_NEGOTIATE.

For each level, the option T_ALLOPT can
be requested on input. All supported
options of this level with their default
values are then returned. In this case,
ret->opt.maxlen must be given at least
the value info->options before the call.
See t_getinfo(3NSL) and t_open(3NSL).


T_CURRENT
This action enables the transport user
to retrieve the currently effective
option values. The user specifies the
options of interest in req->opt.buf. The
option values are irrelevant and will be
ignored; it is sufficient to specifiy
the t_opthdr part of an option only. The
currently effective values are then
returned in req->opt.buf.

The status field returned is
T_NOTSUPPORT if the protocol level does
not support this option or the transport
user illegally requested a privileged
option, T_READONLY if the option is
read-only, and set to T_SUCCESS in all
other cases. The overall result of the
request is returned in ret->flags. This
field contains the worst single result,
whereby the rating is the same as for
T_NEGOTIATE.

For each level, the option T_ALLOPT can
be requested on input. All supported
options of this level with their
currently effective values are then
returned.

The option T_ALLOPT can only be used
with t_optmgmt() and the actions
T_NEGOTIATE, T_DEFAULT and T_CURRENT.
It can be used with any supported level
and addresses all supported options of
this level. The option has no value; it
consists of a t_opthdr only. Since in a
t_optmgmt() call only options of one
level may be addressed, this option
should not be requested together with
other options. The function returns as
soon as this option has been processed.

Options are independently processed in
the order they appear in the input
option buffer. If an option is multiply
input, it depends on the implementation
whether it is multiply output or whether
it is returned only once.

Transport providers may not be able to
provide an interface capable of
supporting T_NEGOTIATE and/or T_CHECK
functionalities. When this is the case,
the error TNOTSUPPORT is returned.

The function t_optmgmt() may block under
various circumstances and depending on
the implementation. The function will
block, for instance, if the protocol
addressed by the call resides on a
separate controller. It may also block
due to flow control constraints; that
is, if data sent previously across this
transport endpoint has not yet been
fully processed. If the function is
interrupted by a signal, the option
negotiations that have been done so far
may remain valid. The behavior of the
function is not changed if O_NONBLOCK
is set.


RETURN VALUES


Upon successful completion, a value of 0 is returned. Otherwise, a
value of -1 is returned and t_errno is set to indicate an error.

VALID STATES


ALL - apart from T_UNINIT.

ERRORS


On failure, t_errno is set to one of the following:

TBADF
The specified file descriptor does not refer to a
transport endpoint.


TBADFLAG
An invalid flag was specified.


TBADOPT
The specified options were in an incorrect format or
contained illegal information.


TBUFOVFLW
The number of bytes allowed for an incoming argument
(maxlen) is greater than 0 but not sufficient to
store the value of that argument. The information to
be returned in ret will be discarded.


TNOTSUPPORT
This action is not supported by the transport
provider.


TOUTSTATE
The communications endpoint referenced by fd is not
in one of the states in which a call to this function
is valid.


TPROTO
This error indicates that a communication problem has
been detected between XTI and the transport provider
for which there is no other suitable XTI error
(t_errno).


TSYSERR
A system error has occurred during execution of this
function.


TLI COMPATIBILITY


The XTI and TLI interface definitions have common names but use
different header files. This, and other semantic differences between
the two interfaces are described in the subsections below.

Interface Header


The XTI interfaces use the header file, xti.h. TLI interfaces should
not use this header. They should use the header:

#include <tiuser.h>


Error Description Values


The t_errno value TPROTO can be set by the XTI interface but not by
the TLI interface.


The t_errno values that this routine can return under different
circumstances than its XTI counterpart are TACCES and TBUFOVFLW.

TACCES
can be returned to indicate that the user does not have
permission to negotiate the specified options.


TBUFOVFLW
can be returned even when the maxlen field of the
corresponding buffer has been set to zero.


Option Buffers


The format of the options in an opt buffer is dictated by the
transport provider. Unlike the XTI interface, the TLI interface does
not fix the buffer format. The macros T_OPT_DATA, T_OPT_NEXTHDR, and
T_OPT_FIRSTHDR described for XTI are not available for use by TLI
interfaces.

Actions


The semantic meaning of various action values for the flags field of
req differs between the TLI and XTI interfaces. TLI interface users
should heed the following descriptions of the actions:

T_NEGOTIATE
This action enables the user to negotiate the values
of the options specified in req with the transport
provider. The provider will evaluate the requested
options and negotiate the values, returning the
negotiated values through ret.


T_CHECK
This action enables the user to verify whether the
options specified in req are supported by the
transport provider. On return, the flags field of ret
will have either T_SUCCESS or T_FAILURE set to
indicate to the user whether the options are
supported. These flags are only meaningful for the
T_CHECK request.


T_DEFAULT
This action enables a user to retrieve the default
options supported by the transport provider into the
opt field of ret. In req, the len field of opt must
be zero and the buf field may be NULL.


Connectionless Mode


If issued as part of the connectionless mode service, t_optmgmt() may
block due to flow control constraints. The function will not complete
until the transport provider has processed all previously sent data
units.

ATTRIBUTES


See attributes(7) for descriptions of the following attributes:


+---------------+-----------------+
|ATTRIBUTE TYPE | ATTRIBUTE VALUE |
+---------------+-----------------+
|MT Level | Safe |
+---------------+-----------------+

SEE ALSO


close(2), poll(2), select(3C), t_accept(3NSL), t_alloc(3NSL),
t_bind(3NSL), t_close(3NSL), t_connect(3NSL), t_getinfo(3NSL),
t_listen(3NSL), t_open(3NSL), t_rcv(3NSL), t_rcvconnect(3NSL),
t_rcvudata(3NSL), t_snddis(3NSL), attributes(7)

May 7, 1998 T_OPTMGMT(3NSL)

tribblix@gmail.com :: GitHub :: Privacy