diff options
Diffstat (limited to 'share/doc/iso/wisc/errors.nr')
-rw-r--r-- | share/doc/iso/wisc/errors.nr | 363 |
1 files changed, 363 insertions, 0 deletions
diff --git a/share/doc/iso/wisc/errors.nr b/share/doc/iso/wisc/errors.nr new file mode 100644 index 0000000..51b5eb5 --- /dev/null +++ b/share/doc/iso/wisc/errors.nr @@ -0,0 +1,363 @@ +.\"$Header: errors.nr,v 1.2 88/12/06 16:06:07 nhall Exp $ +.\"$Source: /usr/argo/doc/kernel/RCS/errors.nr,v $ +.NC "Error Handling" +This section describes the various ways that the ARGO kernel +handles errors. +For the purpose of this description, +errors are divided into +three classes : user errors, remote-end errors, and internal errors. +These three classes of errors and the way +the ARGO kernel handles them are described below. +.sh 1 "Network Layer Errors" +.pp +The following section describes how errors are handled by CLNP. +.sh 2 "User Errors" +.pp +User errors occur when attempting to send a CLNP packet. These errors +are reflected back to the caller of \fIclnp_output()\fR as the return value +of the function. The following table indicates the types of errors possible +and their associated return codes: +.(b L +.TS +tab(+), expand box; +l l. +Problem+Return Code += +Unsupported option selected+EINVAL +Incorrect address+ENAMETOOLONG +Insufficient \fImbufs\fR+ENOBUFS +Can't route packet+ENETUNREACH,EHOSTUNREACH +Insufficient \fImbufs\fR+ENOBUFS +.TE +.)b +.sh 2 "Remote-end Errors" +.pp +An error that occurs as the result of incoming NPDU +is a remote-end error. +.pp +In the case of CONS, +the majority of these are addressing problems, +PDN-generated errors (network or gateway congestion, number busy), +or higher layer negotiation problems. +All ISO 8208 diagnostic codes that may appear in a call clearing packet +are passed up to the higher layer. +Some of the higher layer protocols pass this error indication to the +user level program as well. +The CONS statistics that are maintained by the "glue" module +include counters for each of the possible +ISO 8208 diagnostic codes seen on incoming packets. +In addition to these error codes, there are some codes that may appear +due to device driver problems when an NPDU arrives, for example, +the driver may run out of buffers. +All possible errors that may occur in the CONS module are listed +in the file +\fC<netargo/iso_errno.h>\fR, +and the values listed in this file are passed to the user level +program in the global integer variable \fIerrno\fR. +The ARGO library +\fClibisodir.a\fR +includes an expanded version of +\fIperror()\fR that interprets these extra values. +.pp +In the case of CLNP, +the most remote-end errors are parsing errors. +When a remote-end error is discovered, processing of the NPDU stops. The +NPDU is discarded, and if error reporting is not disabled, and ER NPDU +is sent back to the source of the offending packet. The following +tables show the errors that may occur, and the error reason +that will specified when the ER NPDU is returned. +.pp +The following general errors may occur while parsing an NPDU: +.(b L +.TS +tab(+), box, expand; +l l. +Problem+Error Reason += +NPDU arrives before interface is configured+ADDR_DESTUNREACH +Packet too short or too big+GEN_INCOMPLETE +Protocol identification wrong+GEN_HDRSYNTAX +Version wrong+DISC_UNSUPPVERS +Lifetime expired+TTL_EXPTRANSIT +Incorrect checksum+GEN_BADCSUM +Address section too short+GEN_INCOMPLETE +Segment section too short+GEN_INCOMPLETE +Options section too short+GEN_INCOMPLETE +Unknown packet type+GEN_HDRSYNTAX +Can't route packet (forwarding)+ADDR_DESTUNREACH +.TE +.)b +The following errors are related to options processing: +.(b L +.TS +tab(+), box, expand; +l l. +Problem+Error Reason += +Duplicate option+GEN_DUPOPT +Unknown option+DISC_UNSUPPTOPT +Security format bad+GEN_HDRSYNTAX +Security option present+DISC_UNSUPPSECURE +Source route format bad+SRCRT_SYNTAX +Record route too short+GEN_INCOMPLETE +Record route format bad+GEN_HDRSYNTAX +QOS format bad+GEN_HDRSYNTAX +Priority format bad+GEN_HDRSYNTAX +Error reason format bad+GEN_HDRSYNTAX +Error reason on non-ER NPDU+DISC_UNSUPPOPT +Error reason absent from ER NPDU+GEN_HDRSYNTAX +.TE +.)b +.sh 2 "Internal Errors" +.pp +Internal errors occur as a result of a programmer error. These errors +will result in a kernel \fIpanic()\fR. The following panics have been +coded into CLNP: +.(b L +.TS +tab(+), box, expand; +l l. +\fIPanic()\fR message+Reason += +clnp_init: no raw clnp+The raw clnp protocol is not ++configured into the kernel. +_ +clnp_srcaddr: ifp does not match interface+The ifp ++passed to \fIclnp_srcaddr()\fR is invalid. +.TE +.)b +.sh 1 "Transport Layer Errors" +.pp +.sh 2 "User Errors" +.pp +TP handles these errors in the "standard" +way for 4.3BSD: +it causes an E\fIxxx\fR error constant (from the +list in /sys/h/errno.h) +to be put into the user program's +global variable \fIerrno\fR. +In most routines, in particular +those routines called directly or indirectly +the by system-call routines, +this is done +by simply returning +this integer value. +The errors that fall into this category are described +in the following table: +.(b L +.TS +expand box tab(+); +l l. +Error+Meaning += +EAFNOSUPPORT+Attempting to use an address family + +other than AF_ISO and AF_INET. +_ +ENOPROTOOPT+TP was not configured at boot time. +_ +ESOCKTNOSUPPORT+The given socket type is not supported. +_ +EPROTOTYPE+Attempting to use an inappropriate transport + +class for the network service. (e.g. class 0 over CLNS) + +or attempting to use an unknown network service. +_ +EISCONN+Attempting to perform on a connected socket an action + +that is permitted only on unconnected sockets. +_ +ENOTCONN+Attempting to perform on an unconnected socket an + +action that is permitted only on connected sockets. +_ +EMSGSIZE+Trying to send more data than are permitted on + +connect, disconnect, or expedited data PDUs. +_ +ENOTSOCK+The integer argument passed in the system + +call is not a socket descriptor or is a socket but + +has no transport pcb. +_ +EINVAL+Some argument to the system call is invalid. +_ +EOPNOTSUPP+Some command argument to the system call is invalid + +or the operation is not supported. +_ +EACCES+An unprivileged user tried to use a privileged command. +_ +ETOOMANYREFS+TP ran out of reference blocks. +_ +ENOBUFS+TP ran out of memory (mbufs). +.TE +.)b +Errors that should be reported to the user +by \fIerrno\fR but which occur asynchronously +are detected by the socket layer when the value +of the field \fIso_error\fR in the socket +structure is non-zero. +This is used to report such errors as +ECONNRESET, +ECONNABORTED, and +ECONNTIMEDOUT, which are really remote-end errors. +.sh 2 "Remote-end Errors" +.pp +An error that occurs is the result of a timer +or is a result of an +incoming TPDU +is a remote-end error. +The majority of these errors are parsing errors. +They also include some protocol errors. +Some of these errors cause the connection to be +closed locally. +It is unfortunate that when a connection is closed, +the kernel will not permit the user program to perform +anything on the socket in question, so the user cannot +inquire about the reason for disconnection. +There is no clean way to pass this information to a +signal handler either, since the process being signalled +may be swapped out at the time. +Some of these errors cause TP to return an ER TPDU +or a DR TPDU to the sending site. +Some have no effect on the connection locally. +These errors and their effects are described below. +.(b L +.TS +expand box tab(+); +l l l. +Error+Meaning+Return code or action taken += +Retransmission+The remote end has not responded +ETIMEDOUT +timeout+to repeated attempts to send.+ + +This can occur during connection+ + +or after connection establishment.+ +_ +Inactivity+The remote end has not sent anything +ETIMEDOUT +timeout+within the last \fIx\fR time, where+ ++\fIx\fR is a locally defined+ ++large value.+ +_ +Unacceptable+An unacceptable TPDU has arrived, and the+TPDU dropped +TPDU +remote end can be identified.+possibly DR/ER returned +_ +DR TPDU+A DR TPDU arrived, with any+Disconnect indication, +arrived+value in the reason field.+so_error == ECONNRESET +_ +ER TPDU+An ER TPDU arrived, with any+Disconnect indication, +arrived+anything in the reason field.+so_error == ECONNABORTED +.TE +.)b +TPDUs may be unacceptable for a variety of reasons: +.(b L +.TS +expand box tab(+); +l l. +Problem+Action taken by TP += +No connection at destination+Respond with DR, reason: session entity +reference or reference frozen+not attached to TSAP +_ +Invalid destination reference+Respond with DR, reason: mismatched ++references +_ +Invalid parameter code+Respond with ER, cause: inval. param. code +_ +Invalid DU type+Respond with ER, cause: invalid TPDU type +_ +Invalid version number+ Respond with ER, cause: inval. param. code +_ +Invalid suffix value+Respond with ER, cause: inval. param. value +_ +Suffix missing or is of+Respond with DR, reason: +invalid length+header or parameter length invalid +_ +Invalid checksum+packet discarded +_ +Can't find a connection+Respond with DR, reason: +for (dest ref, src ref) pair+mismatched references +_ +Old ACK TPDU+packet discarded, possibly send ACK w/ FCC +_ +Class requested isn't supported+Respond with DR, reason: +negotiation failed +_ +Invalid TPDU size parameter+Respond with ER, cause: inval. param. value +_ +Illegal amount of data+Respond with DR, reason: +on CR, CC, DR, or XPD+header or parameter length invalid +_ +Header length and length+Respond with DR, reason: +indicator field of TPDU don't agree+header or parameter length invalid +.TE +.)b +.lp +The file \fC<argo/iso_errno.h>\fR is a list +of the error codes and diagnostic that can be returned +from the peer transport entity in a DR TPDU or an ER TPDU, +and those that can be returned from the CONS, initiated by the DCE, +the remote DTE, or by the local network adapter. +These error values are too numerous to list here. +Most of them are taken from the ISO 8208 standard and the ISO 8073 standard. +The ARGO distribution contains an expanded form of the BSD library +routine \fIperror()\fR that prints an error messages for a given +\fIerrno\fR value. +.sh 2 "Internal Errors" +.pp +Some internal errors are the result of +a lack of resources such as buffers. +These are reported to the user with the +global variable +\fIerrno\fR +set to a value from +\fC<errno.h>\fR. +The errors that fall into this category are described +in the following table: +.(b L +.TS +expand box tab(+); +l l. +Return code+Problem += +ENOBUFS+TP ran out of mbufs. +_ +EPROTONOOPT+TP hasn't been configured. +_ +ETOOMANYREFS+TP ran out of (unfrozen) reference numbers. +.TE +.)b +.pp +Other +internal errors are coding errors +or errors of misinterpretation of a specification. +They result in the printing of a message on the +console followed by a system panic. +The following panics have been coded into TP: +.(b L +.TS +expand box tab(+); +l l. +\fIPanic()\fR message+Problem += +tp_emit CR/CC+The length indicator field of a TPDU is longer than the + +amount of space in an mbuf; TP is attempting to send a + +CR TPDU that is too large (perhaps legal but too large for + +this implementation to manage). +_ +tp_rcvoob: unexpected cluster+An incoming XPD TPDU was put into a cluster + +mbuf by a lower layer. +_ +tp timeout table overflow+The system ran out of structures for TP timers. +_ +tp: T_DETACH+The connected socket that is being detached has + +no parent socket. +_ +tp_soisdisconnected+The socket head queue is + +corrupted. +_ +tp_soisdisconnecting+The socket head queue is + +corrupted. +_ +tpclnp_input: bad clnp_len +The length parameter passed by clnp + +is bad. +_ +iso_control: SIOCDIFADDR+ioctl() system call passed down +iso_control: SIOCSIFADDR+a null interface pointer +_ +sofree dq+The list of socket structures is + +is inconsistent. +.TE +.)b |