57 #include <sys/conf.h>
58 #include <sys/modctl.h>
59
60 static struct streamtab timinfo;
61
62 static struct fmodsw fsw = {
63 "timod",
64 &timinfo,
65 D_MTQPAIR | D_MP,
66 };
67
68 /*
69 * Module linkage information for the kernel.
70 */
71
72 static struct modlstrmod modlstrmod = {
73 &mod_strmodops, "transport interface str mod", &fsw
74 };
75
76 static struct modlinkage modlinkage = {
77 MODREV_1, &modlstrmod, NULL
78 };
79
80 static krwlock_t tim_list_rwlock;
81
82 /*
83 * This module keeps track of capabilities of underlying transport. Information
84 * is persistent through module invocations (open/close). Currently it remembers
85 * whether underlying transport supports TI_GET{MY,PEER}NAME ioctls and
86 * T_CAPABILITY_REQ message. This module either passes ioctl/messages to the
87 * transport or emulates it when transport doesn't understand these
88 * ioctl/messages.
89 *
90 * It is assumed that transport supports T_CAPABILITY_REQ when timod receives
91 * T_CAPABILITY_ACK from the transport. There is no current standard describing
92 * transport behaviour when it receives unknown message type, so following
93 * reactions are expected and handled:
94 *
95 * 1) Transport drops unknown T_CAPABILITY_REQ message type. In this case timod
96 * will wait for tcap_wait time and assume that transport doesn't provide
97 * this message type. T_CAPABILITY_REQ should never travel over the wire, so
|
57 #include <sys/conf.h>
58 #include <sys/modctl.h>
59
60 static struct streamtab timinfo;
61
62 static struct fmodsw fsw = {
63 "timod",
64 &timinfo,
65 D_MTQPAIR | D_MP,
66 };
67
68 /*
69 * Module linkage information for the kernel.
70 */
71
72 static struct modlstrmod modlstrmod = {
73 &mod_strmodops, "transport interface str mod", &fsw
74 };
75
76 static struct modlinkage modlinkage = {
77 MODREV_1, { &modlstrmod, NULL }
78 };
79
80 static krwlock_t tim_list_rwlock;
81
82 /*
83 * This module keeps track of capabilities of underlying transport. Information
84 * is persistent through module invocations (open/close). Currently it remembers
85 * whether underlying transport supports TI_GET{MY,PEER}NAME ioctls and
86 * T_CAPABILITY_REQ message. This module either passes ioctl/messages to the
87 * transport or emulates it when transport doesn't understand these
88 * ioctl/messages.
89 *
90 * It is assumed that transport supports T_CAPABILITY_REQ when timod receives
91 * T_CAPABILITY_ACK from the transport. There is no current standard describing
92 * transport behaviour when it receives unknown message type, so following
93 * reactions are expected and handled:
94 *
95 * 1) Transport drops unknown T_CAPABILITY_REQ message type. In this case timod
96 * will wait for tcap_wait time and assume that transport doesn't provide
97 * this message type. T_CAPABILITY_REQ should never travel over the wire, so
|