1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
|
/* Copyright (C) 1998 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#ifndef _BITS_STROPTS_H
#define _BITS_STROPTS_H 1
#include <bits/types.h>
/* Macros used as `request' argument to `ioctl'. */
#define I_PUSH 1 /* Push STREAMS module onto top of the current
STREAM, just below the STREAM head. */
#define I_POP 2 /* Remove STREAMS module from just below the
STREAM head. */
#define I_LOOK 3 /* Retrieve the name of the module just below
the STREAM head and place it in a character
string. */
#define I_FLUSH 4 /* Flush all input and/or output. */
#define I_FLUSHBAND 5 /* Flush only band specified. */
#define I_SETSIG 6 /* Inform the STREAM head that the process
wants the SIGPOLL signal issued. */
#define I_GETSIG 7 /* Return the events for which the calling
process is currently registered to be sent
a SIGPOLL signal. */
#define I_FIND 8 /* Compares the names of all modules currently
present in the STREAM to the name pointed to
by `arg'. */
#define I_PEEK 9 /* Allows a process to retrieve the information
in the first message on the STREAM head read
queue without taking the message off the
queue. */
#define I_SRDOPT 10 /* Sets the read mode. */
#define I_GRDOPT 11 /* Returns the current read mode setting. */
#define I_NREAD 12 /* Counts the number of data bytes in the data
block in the first message. */
#define I_FDINSERT 13 /* Create a message from the specified
buffer(s), adds information about another
STREAM, and send the message downstream. */
#define I_STR 14 /* Construct an internal STREAMS `ioctl'
message and send that message downstream. */
#define I_SWROPT 15 /* Set the write mode. */
#define I_GWRSET 16 /* Return the current write mode setting. */
#define I_SENDFD 17 /* Requests the STREAM associated with `fildes'
to send a message, containing a file
pointer, to the STREAM head at the other end
of a STREAMS pipe. */
#define I_RECVFD 18 /* Retrieve the file descriptor associated with
the message sent by an I_SENDFD `ioctl'
over a STREAMS pipe. */
#define I_LIST 19 /* List all the module names on the STREAM, up
to and including the topmost driver name. */
#define I_ATMARK 20 /* See if the current message on the STREAM
head read queue is "marked" by some module
downstream. */
#define I_CKBAND 21 /* Check if the message of a given priority
band exists on the STREAM head read
queue. */
#define I_GETBAND 22 /* Return the priority band of the first
message on the STREAM head read queue. */
#define I_CANPUT 23 /* Check if a certain band is writable. */
#define I_SETCLTIME 24 /* Set the time the STREAM head will delay when
a STREAM is closing and there is data on
the write queues. */
#define I_LINK 25 /* Connect two STREAMs. */
#define I_UNLINK 26 /* Disconnects the two STREAMs. */
#define I_PLINK 27 /* Connect two STREAMs with a persistent
link. */
#define I_PUNLINK 28 /* Disconnect the two STREAMs that were
connected with a persistent link. */
/* Used in `I_LOOK' request. */
#define FMNAMESZ 255
/* Flush options. */
#define FLUSHR 1 /* Flush read queues. */
#define FLUSHW 2 /* Flush write queues. */
#define FLUSHRW 3 /* Flush read and write queues. */
/* Possible arguments for `I_SETSIG'. */
#define S_RDNORM 0x0001 /* A normal message has arrived. */
#define S_RDBAND 0x0002 /* A message with a non-zero priority has
arrived. */
#define S_INPUT 0x0004 /* A message, other than a high-priority
message, has arrived. */
#define S_HIPRI 0x0008 /* A high-priority message is present. */
#define S_OUTPUT 0x0010 /* The write queue for normal data is no longer
full. */
#define S_WRNORM S_OUTPUT
#define S_WRBAND 0x0020 /* The write queue for a non-zero priority
band is no longer full. */
#define S_MSG 0x0040 /* A STREAMS signal message that contains the
SIGPOLL signal reaches the front of the
STREAM head read queue. */
#define S_ERROR 0x0080 /* Notification of an error condition. */
#define S_HANGUP 0x0100 /* Notification of a hangup. */
#define S_BANDURG 0x0200 /* When used in conjunction with S_RDBAND,
SIGURG is generated instead of SIGPOLL when
a priority message reaches the front of the
STREAM head read queue. */
/* Option for `I_PEEK'. */
#define RS_HIPRI 1 /* Only look for high-priority messages. */
/* Options for `I_SRDOPT'. */
#define RDNORM 1 /* Byte-STREAM mode, the default. */
#define RMSGD 2 /* Message-discard mode. */
#define RMSGN 3 /* Message-nondiscard mode. */
#define RPROTNORM 4 /* Fail `read' with EBADMSG if a message
containing a control part is at the front
of the STREAM head read queue. */
#define RPROTDAT 5 /* Deliver the control part of a message as
data. */
#define RPROTDIS 6 /* Discard the control part of a message,
delivering any data part. */
/* Possible mode for `I_SWROPT'. */
#define SNDZERO 1 /* Send a zero-length message downstream when a
`write' of 0 bytes occurs. */
/* Arguments for `I_ATMARK'. */
#define ANYMARK 1 /* Check if the message is marked. */
#define LASTMARK 2 /* Check if the message is the last one marked
on the queue. */
/* Argument for `I_UNLINK'. */
#define MUXID_ALL 1 /* Unlink all STREAMs linked to the STREAM
associated with `fildes'. */
/* Macros for `getmsg', `getpmsg', `putmsg' and `putpmsg'. */
#define MSG_ANY 1 /* Receive any message. */
#define MSG_BAND 2 /* Receive message from specified band. */
#define MSG_HIPRI 3 /* Send/receive high priority message. */
#define MORECTL 4 /* More control information is left in
message. */
#define MOREDATA 5 /* More data is left in message. */
/* Structure used for the I_FLUSHBAND ioctl on streams. */
struct bandinfo
{
unsigned char bi_pri;
int bi_flag;
};
struct strbuf
{
int maxlen; /* Maximum buffer length. */
int len; /* Length of data. */
char *buf; /* Pointer to buffer. */
};
struct strpeek
{
struct strbuf ctlbuf;
struct strbuf databuf;
__t_uscalar_t flags;
};
struct strfdinsert
{
struct strbuf ctlbuf;
struct strbuf databuf;
__t_uscalar_t flags;
int fildes;
int offset;
};
struct strioctl
{
int ic_cmd;
int ic_timout;
int ic_len;
char *ic_dp;
};
struct strrecvfd
{
int fd;
__uid_t uid;
__gid_t gid;
};
struct str_mlist
{
char l_name[FMNAMESZ + 1];
};
struct str_list
{
int sl_nmods;
struct str_mlist *sl_modlist;
};
#endif /* bits/stropts.h */
|