Networking Services Library Functions t_optmgmt(3NSL)
NAME
t_optmgmt - manage options for a transport endpoint
SYNOPSIS
#include
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 amanner 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 theoptions buffer, and maxlen has no meaning for the req argu-
ment. 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 theSunOS 5.11 Last change: 7 May 1998 1
Networking Services Library Functions t_optmgmt(3NSL)
maximum number of bytes the options buffer can hold. Each option in the options buffer is of the form structt_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 headert_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 thearchitecture-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 associatedwith 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 pointerto a t_opthdr structure within
that option buffer, this macro returns a pointer to the nextt_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 thefirst t_opthdr structure in the
associated option buffer, or a null pointer if there is no option buffer associated withSunOS 5.11 Last change: 7 May 1998 2
Networking Services Library Functions t_optmgmt(3NSL)
this netbuf or if it is not pos-
sible or the associated optionbuffer is too small to accommo-
date 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 mov-
ing to the start of the next appropriately aligned option in the option buffer. Note thatOPT_NEXTHDR is also available
for backward compatibilityrequirements. 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 unsup-
ported, then the t_optmgmt()
request will fail with TBADOPT. If the error is detected, someoptions have possibly been suc-
cessfully negotiated. The tran-
sport user can check the currentstatus 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 tran-
sport user to negotiate option values. The user specifies the options of interest and their values in the buffer specified bySunOS 5.11 Last change: 7 May 1998 3
Networking Services Library Functions t_optmgmt(3NSL)
req->opt.buf and req->opt.len.
The negotiated option values are returned in the buffer pointedto by ret->opt.buf. The status
field of each returned option is set to indicate the result of the negotiation. The value isT_SUCCESS if the proposed value
was negotiated, T_PARTSUCCESS if
a degraded value was negotiated,T_FAILURE if the negotiation
failed (according to the nego-
tiation rules), T_NOTSUPPORT if
the transport provider does not support this option or illegally requests negotiation of a privileged option, andT_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 nego-
tiation is returned inret->flags.
This field contains the worstsingle result, whereby the rat-
ing is done according to theorder 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 optionT_ALLOPT can be requested on
input. No value is given withthis option; only the t_opthdr
part is specified. This inputrequests to negotiate all sup-
ported options of this level to their default values. The result is returned option by option inret->opt.buf. Note that depend-
ing on the state of the tran-
sport endpoint, not all requests to negotiate the default value may be successful.SunOS 5.11 Last change: 7 May 1998 4
Networking Services Library Functions t_optmgmt(3NSL)
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 onlyof a t_opthdr structure), the
option is returned with itsstatus field set to T_SUCCESS
if it is supported,T_NOTSUPPORT if it is not or
needs additional userprivileges, 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 thisvalue 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 inret->flags. This field contains
the worst single result of theoption checks, whereby the rat-
ing is the same as forT_NEGOTIATE .
Note that no negotiation takes place. All currently effective option values remain unchanged.T_DEFAULT This action enables the tran-
sport user to retrieve the default option values. The user specifies the options ofinterest in req->opt.buf. The
option values are irrelevant andwill be ignored; it is suffi-
cient to specify the t_opthdr
part of an option only. The default values are then returnedSunOS 5.11 Last change: 7 May 1998 5
Networking Services Library Functions t_optmgmt(3NSL)
in ret->opt.buf.
The status field returned isT_NOTSUPPORT if the protocol
level does not support this option or the transport user illegally requested a privilegedoption, 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 inret->flags. This field contains
the worst single result, whereby the rating is the same as forT_NEGOTIATE.
For each level, the optionT_ALLOPT can be requested on
input. All supported options of this level with their default values are then returned. Inthis case, ret->opt.maxlen must
be given at least the valueinfo->options before the call.
See t_getinfo(3NSL) and
t_open(3NSL).
T_CURRENT This action enables the tran-
sport user to retrieve the currently effective option values. The user specifies the options of interest inreq->opt.buf. The option values
are irrelevant and will be ignored; it is sufficient tospecifiy the t_opthdr part of an
option only. The currently effective values are thenreturned in req->opt.buf.
The status field returned isT_NOTSUPPORT if the protocol
level does not support this option or the transport user illegally requested a privilegedoption, 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 inSunOS 5.11 Last change: 7 May 1998 6
Networking Services Library Functions t_optmgmt(3NSL)
ret->flags. This field contains
the worst single result, whereby the rating is the same as forT_NEGOTIATE.
For each level, the optionT_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 at_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 pro-
cessed 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 supportingT_NEGOTIATE and/or T_CHECK
functionalities. When this is the case, the error TNOTSUPPORT is returned.The function t_optmgmt() may
block under various cir-
cumstances and depending on the implementation. The function will block, for instance, if the protocol addressed by the call resides on a separateSunOS 5.11 Last change: 7 May 1998 7
Networking Services Library Functions t_optmgmt(3NSL)
controller. It may also block due to flow control constraints; that is, if data sent previously across this transport endpointhas not yet been fully pro-
cessed. If the function is interrupted by a signal, the option negotiations that have been done so far may remainvalid. The behavior of the func-
tion is not changed ifO_NONBLOCK is set.
RETURN VALUES
Upon successful completion, a value of 0 is returned. Oth-
erwise, a value of -1 is returned and t_errno is set to
indicate an error. VALID STATESALL - 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 notsufficient to store the value of that argu-
ment. 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.SunOS 5.11 Last change: 7 May 1998 8
Networking Services Library Functions t_optmgmt(3NSL)
TPROTO This error indicates that a communication problem has been detected between XTI and the transport provider for which there is noother 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 butuse different header files. This, and other semantic differ-
ences between the two interfaces are described in the sub-
sections below. Interface HeaderThe XTI interfaces use the header file, xti.h. TLI inter-
faces should not use this header. They should use the header:#include
Error Description ValuesThe 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 dif-
ferent 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 macrosT_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. TLISunOS 5.11 Last change: 7 May 1998 9
Networking Services Library Functions t_optmgmt(3NSL)
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 sup-
ported by the transport provider. On return, the flags field of ret will have eitherT_SUCCESS or T_FAILURE set to indicate to the
user whether the options are supported. Theseflags 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(5) for descriptions of the following attri-
butes:____________________________________________________________
| 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),
SunOS 5.11 Last change: 7 May 1998 10
Networking Services Library Functions t_optmgmt(3NSL)
attributes(5)SunOS 5.11 Last change: 7 May 1998 11