|
|
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.