|
|
1.1 ! root 1: .TH BSC 4 1.3 DLBA ! 2: .SH NAME ! 3: bsc \- BISYNC driver for modem port ! 4: .SH DESCRIPTION ! 5: .P ! 6: This section describes the general nature of the BISYNC driver which operates ! 7: the modem port. ! 8: .P ! 9: A prerequisite to fully understanding this section of the manual is a general ! 10: background in binary synchronous communications, which may be had by reading ! 11: the ! 12: .I `IBM General Information on Binary Synchronous Communications' ! 13: document, mentioned in `SEE ALSO', to follow. ! 14: .P ! 15: When a port being controlled by the ! 16: .I bsc ! 17: driver is opened, ! 18: it causes the process to wait until a connection is established. ! 19: When the open is requested, the driver will signal DTR (data terminal ready) ! 20: to the modem. This indicates the `data terminal' (the computer system) ! 21: end is ready to communicate whenever the modem is ready. ! 22: .P ! 23: A connection has been made when the modem signals DSR (data set ready) ! 24: to the modem port. When someone is dialing another system, or when an automatic ! 25: dialer is in use, DSR is signalled when the DATA button or its equivalent ! 26: is pressed (with an automatic dialer, there often is not a telephone, but ! 27: this function is simulated when the dialer thinks the phone has been answered). ! 28: If the modem is set up for automatic answer, DTR enables the automatic ! 29: answer function, and any subsequent telephone call to the line to which ! 30: the modem is connected will be answered by the modem. ! 31: NOTE that this can occur even though the operator is getting ready ! 32: to make a manual call, if the telephone has not been taken off hook yet. ! 33: This can be disabled if necessary; ! 34: read the modem manual carefully to see how to defeat automatic answer. ! 35: .P ! 36: The connection has been broken when the modem drops the DSR signal to the ! 37: modem port. ! 38: This only occurs when someone at either end breaks the connection. ! 39: The ! 40: .I bsc ! 41: driver will automatically disconnect upon close ! 42: by dropping the DTR signal to the modem. ! 43: .P ! 44: If a leased line connection has been made for the modem, DSR should be ! 45: asserted by the modem as long as it has power. ! 46: In this case, no special dialing arrangements are necessary. ! 47: .P ! 48: Reads and writes to this device correspond to reading and writing complete ! 49: data blocks via the binary synchronous (BISYNC) protocol. ! 50: In BISYNC, a series of one or more data blocks is transmitted to the other ! 51: end of the line; the last of the series of blocks is specially marked to ! 52: show that it is the last one. ! 53: This series of blocks is commonly called a transmission file. ! 54: While transmission of the series of blocks is proceeding, ! 55: the receiving host cannot transmit data blocks, and thus data transmission ! 56: is one way at a time. ! 57: Write calls to the driver, therefore, may be rejected ! 58: if the driver is presently receiving data; receive calls will be rejected ! 59: if the driver is still transmitting a data file (this can happen if the ! 60: driver was not informed that the last write operation was the last of a ! 61: series, for example). ! 62: .P ! 63: The ! 64: .I bsc ! 65: driver is controlled by open, close, read, and ! 66: write, as usual, and by parameters passed to it via the ! 67: .I ioctl ! 68: call. ! 69: These parameters control the line discipline, transmission ! 70: codes, and limit counts; the current status of the driver can be queried ! 71: by the same call (one may obtain error counts and number of blocks sent, ! 72: etc.) ! 73: The ! 74: .I ioctl(2) ! 75: calls use the structure and constants which are defined in ! 76: .I <bscio.h>: ! 77: .P ! 78: .nf ! 79: .ta .4i 3i ! 80: struct bscio { ! 81: unsigned short b_blks; /* max data blocks/ #sent/rcvd */ ! 82: unsigned short b_flags; /* see description */ ! 83: char b_termid[20]; /* our terminal id */ ! 84: char b_hostid[20]; /* host's id */ ! 85: unsigned char b_nbid; /* bid limit/count */ ! 86: unsigned char b_nnak; /* nak limit/count */ ! 87: unsigned char b_nretry; /* retry limit/count */ ! 88: unsigned char b_nttd; /* xmt delay limit/count */ ! 89: unsigned char b_nwack; /* rcv delay limit/count */ ! 90: unsigned char b_nor; /* rd timeout/# overruns */ ! 91: }; ! 92: .fi ! 93: .P ! 94: The primary ! 95: .I ioctl(2) ! 96: calls have the form: ! 97: .P ! 98: .nf ! 99: .ta .8i ! 100: ioctl (fildes, command, arg) ! 101: struct bscio *arg; ! 102: .fi ! 103: .P ! 104: The commands are: ! 105: .P ! 106: .nf ! 107: .ta .8i 1.6i ! 108: BSCGET Get the current values associated with ! 109: the variables indicated in the structure. ! 110: ! 111: BSCSET Set the bsc driver parameters to the ! 112: values contained in the structure. ! 113: .fi ! 114: .P ! 115: The first field (b_blks) is used to set the driver's maximum ! 116: transmission data block size. ! 117: This value cannot exceed 512. ! 118: Common block sizes are 510 for the IBM 3780 terminal, ! 119: 398 for the IBM 2780 terminal, and 254 for the IBM 3270 terminals ! 120: (this figure refers only to the data portion of the block; the documentation ! 121: for these devices refers to a block size which includes transmission ! 122: control characters STX and ETX/ETB). ! 123: On a GET operation, the number of blocks read and written since the open ! 124: is placed in this word. ! 125: .P ! 126: The second field, b_flags, may be used to set several mode indicators, ! 127: as follows: ! 128: .P ! 129: .nf ! 130: .ta .8i 2i 2.8i ! 131: BSCASCII 0000001 Transmission code is ASCII ! 132: BSCFDX 0000002 Full duplex modems being used ! 133: BSCIUS 0000004 Unit separators in use ! 134: BSCRVIABT 0000010 Abort on RVI sequence ! 135: BSCPRIM 0000020 Assume role of 'primary' node ! 136: BSCCKHOST 0000040 Check host id, abort if wrong ! 137: BSCMPT 0000100 Multi-point protocol ! 138: .fi ! 139: .P ! 140: A GET operation results in the b_flags field being set to the type of the ! 141: last error: ! 142: .P ! 143: .nf ! 144: .ta .8i 2i 2.8i ! 145: BSCPROTO 1 Protocol error by remote host ! 146: BSCRVI 2 RVI Abort ! 147: BSCNBID 3 NBID limit exceeded ! 148: BSCNNAK 4 NNAK limit exceeded ! 149: BSCNRETR 5 NRETRY limit exceeded ! 150: BSCNTTD 6 NTTD limit exceeded ! 151: BSCNWACK 7 NWACK limit exceeded ! 152: BSCNDSR 8 No DSR indication from modem ! 153: BSCTXTO 9 Transmit timeout ! 154: BSCRXTO 10 Receive idle timeout ! 155: BSCDSC 11 Disconnect message (DLE-EOT) sent ! 156: BSCRABT 12 Remote end aborted our sending ! 157: BSCEEOF 13 Remote end aborted their sending ! 158: BSCWHI 14 Wrong host id ! 159: BSCTXP 15 Block received in transparent mode ! 160: (not an error) ! 161: BSCBSOH 16 Block began with SOH ! 162: (not an error) ! 163: BSCONTND 17 Contention error (during write) ! 164: .fi ! 165: .P ! 166: The third field, b_termid, is used to set the terminal id to be given in ! 167: an initial bid. ! 168: It may be null, unless a multi-point protocol is in use, ! 169: in which case it gives the terminal's poll/select address. ! 170: If multipoint mode is selected, ! 171: the first byte of b_termid is the Poll address, ! 172: the second is the Select address. ! 173: This field must be translated to EBCDIC if that is the transmission ! 174: code in use. ! 175: The contents of this field after a GET operation are undefined. ! 176: .P ! 177: The fourth field, b_hostid, is used to set the host id required, if any. ! 178: .P ! 179: On a GET, b_hostid will contain any ! 180: header information (given following an SOH and beginning a message block, ! 181: or preceding an ENQ or ACK sequence). ! 182: .P ! 183: The next several fields are used to set various protocol limits. ! 184: Initial line bids may be limited via the b_nbid field, number of negative ! 185: acknowledgements the driver will give via the b_nnak field, number of response ! 186: timeouts and transmission errors which will be retried via the b_nretry ! 187: field, number of temporary transmit delays which will be accepted via the ! 188: b_nttd field, and number of received wait acknowledgements which will be ! 189: accepted via the b_nwack field. ! 190: For GET operations, these fields are set ! 191: to the counter values for these fields which have accumulated for the current ! 192: file transmission. ! 193: .P ! 194: The last field can be used to set a timeout value for read operations. ! 195: When set to a number of seconds between 1 and 127, it indicates the maximum ! 196: amount of time a read operation will suspend a process waiting to be ! 197: selected. ! 198: For GET operations, it indicates the number of receiver overruns which ! 199: have occurred during the current file transmission. ! 200: .P ! 201: The secondary calls to ! 202: .I ioctl(2) ! 203: have this form: ! 204: .P ! 205: .nf ! 206: .ta .8i ! 207: ioctl (fildes, command, arg) ! 208: int command; ! 209: int *arg; ! 210: .fi ! 211: .P ! 212: Note that 'arg' is not used by some of the commands using this form. ! 213: The commands are: ! 214: .P ! 215: .nf ! 216: .ta .8i 2i ! 217: BSCTRNSP Turn on transparent mode ! 218: BSCNTRNS Turn off transparent mode ! 219: BSCSOH Force SOH block prefix ! 220: BSCNSOH Return to STX block prefix ! 221: BSCLAST Next block sent will be last ! 222: (Send with ETX rather than ETB) ! 223: BSCID Return station address (in ASCII or ! 224: EBCDIC, depending on b_flags) ! 225: BSCNDLY Don't delay on read with no data ! 226: .fi ! 227: .P ! 228: Any eight-bit data can be sent in ! 229: .I transparent ! 230: mode; data blocks in this mode will be preceded by ! 231: DLE STX and followed by DLE ETB or DLE ETX. If a DLE character occurs ! 232: within the data, it must be preceded by another DLE character; other ! 233: protocol control characters will be ignored within the data block. ! 234: .P ! 235: If BSCIUS is set, it indicates Unit Separator characters may appear in ! 236: the data block. ! 237: Under Bisync conventions, Unit Separators are followed by a CRC (EBCDIC) ! 238: or LRC (ASCII). ! 239: The driver will generate the CRC or LRC as appropriate if the BSCIUS flag ! 240: is set and a Unit Separator is found, however, the data block must provide ! 241: the extra space in which to place the CRC (2 bytes) or LRC (1 byte). ! 242: .P ! 243: Data blocks not sent in ! 244: .I transparent ! 245: mode must not contain protocol control characters STX, ETX, ! 246: ETB, IUS, ENQ, or DLE. ! 247: .P ! 248: A data block is sent as is (no code translation), preceded ! 249: by a [DLE] STX and followed by [DLE] ETB or [DLE] ETX (the LAST block ! 250: has the ETX terminator, all others an ETB). If a heading needs to ! 251: be sent on a block, the BSCSOH command forces the next block to be ! 252: preceded by SOH instead of STX; in this case, the data block given ! 253: to the driver should consist of the heading, followed by STX, followed ! 254: by the data. ! 255: .P ! 256: Under multi-point protocols, each station attached to a cluster has a ! 257: separate station address; the address is the same for polling and selecting. ! 258: The BSCID command returns in the location indicated by 'arg' the station ! 259: address for the station corresponding to the file descriptor; this is given ! 260: in EBCDIC or ASCII in accordance with the line transmission code. ! 261: With this driver, the station address is always the same: 0x20 for ASCII, ! 262: 0x40 for EBCDIC. ! 263: .P ! 264: The driver appends block check characters to each data block as appropriate ! 265: for the protocol code. ASCII gets a one byte LRC code, and all data ! 266: bytes are sent with odd parity; EBCDIC gets ! 267: a two byte binary polynomial (CRC). ! 268: All protocol messages will begin with four SYN ! 269: characters to establish synchronization; ! 270: all messages will be terminated with a padding character ! 271: consisting of all one bits. ! 272: .P ! 273: Normally, ! 274: .I read(2) ! 275: calls are blocked until data is available or an error (including ! 276: .I "receive idle timeout" ! 277: (BSCRXTO)) occurs. ! 278: If `no delay' mode is set via BSCNDLY, read operations will return ! 279: immediately if no data is available at the time of the call; ! 280: this condition is indicated to the caller as an error (-1 returned by read) ! 281: with errno set to ! 282: .SM EAGAIN. ! 283: .I Write(2) ! 284: calls are blocked if the transmit buffer is not available (full, due to a ! 285: previous write) or if the BSCLAST flag was set immediately prior to this ! 286: .I write ! 287: call. ! 288: .I Write ! 289: calls are not affected by the state of the BSCNDLY flag. ! 290: .SH SEE ALSO ! 291: .P ! 292: .nf ! 293: .ta 1.5i ! 294: bscd(8) IBM 2780/3780 Terminal Emulation ! 295: bscmon(8) Monitoring and Tracing Utilities ! 296: em3270(8) IBM 3270 Terminal Emulation ! 297: .I ! 298: General Information \- Binary Synchronous Communications, ! 299: IBM document GA27-3004. ! 300: .fi ! 301: .SH FILES ! 302: .nf ! 303: /dev/bsc* ! 304: .fi ! 305: .SH ERROR CODES ! 306: .TP ! 307: EAGAIN ! 308: BSCNDLY was set, and no data exists at the time of a ! 309: .I read ! 310: operation. ! 311: .TP ! 312: EIO ! 313: If an error occurs during a read or write operation, ! 314: .I errno ! 315: will be set to EIO. ! 316: An ! 317: .I ioctl ! 318: operation should be performed to determine the actual error ! 319: being reported (see above, BSCGET). ! 320: .TP ! 321: EINVAL ! 322: During a write operation, this indicates either: invalid length ! 323: (must be greater than zero and must not exceed b_blks), or ! 324: wrong mode (driver is presently in read mode).
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.