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