about summary refs log tree commit diff
path: root/bits/stropts.h
blob: c8e2c2c034560193b573bd17f49a06acd84ea210 (plain) (blame)
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
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
/* Copyright (C) 1998, 1999, 2000, 2002 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 Lesser General Public
   License as published by the Free Software Foundation; either
   version 2.1 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
   Lesser General Public License for more details.

   You should have received a copy of the GNU Lesser General Public
   License along with the GNU C Library; if not, write to the Free
   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
   02111-1307 USA.  */

#ifndef _STROPTS_H
# error "Never include <bits/stropts.h> directly; use <stropts.h> instead."
#endif

#ifndef _BITS_STROPTS_H
#define _BITS_STROPTS_H	1

#include <bits/types.h>

/* Macros used as `request' argument to `ioctl'.  */
#define __SID		('S' << 8)

#define I_NREAD	    (__SID | 1)	/* Counts the number of data bytes in the data
				   block in the first message.  */
#define I_PUSH	    (__SID | 2)	/* Push STREAMS module onto top of the current
				   STREAM, just below the STREAM head.  */
#define I_POP	    (__SID | 3)	/* Remove STREAMS module from just below the
				   STREAM head.  */
#define I_LOOK	    (__SID | 4)	/* Retrieve the name of the module just below
				   the STREAM head and place it in a character
				   string.  */
#define I_FLUSH	    (__SID | 5)	/* Flush all input and/or output.  */
#define I_SRDOPT    (__SID | 6)	/* Sets the read mode.  */
#define I_GRDOPT    (__SID | 7)	/* Returns the current read mode setting.  */
#define I_STR	    (__SID | 8)	/* Construct an internal STREAMS `ioctl'
				   message and send that message downstream. */
#define I_SETSIG    (__SID | 9)	/* Inform the STREAM head that the process
				   wants the SIGPOLL signal issued.  */
#define I_GETSIG    (__SID |10) /* Return the events for which the calling
				   process is currently registered to be sent
				   a SIGPOLL signal.  */
#define I_FIND	    (__SID |11) /* Compares the names of all modules currently
				   present in the STREAM to the name pointed to
				   by `arg'.  */
#define I_LINK	    (__SID |12) /* Connect two STREAMs.  */
#define I_UNLINK    (__SID |13) /* Disconnects the two STREAMs.  */
#define I_PEEK	    (__SID |15) /* 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_FDINSERT  (__SID |16) /* Create a message from the specified
				   buffer(s), adds information about another
				   STREAM, and send the message downstream.  */
#define I_SENDFD    (__SID |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    (__SID |14) /* Non-EFT definition.  */
#define I_SWROPT    (__SID |19) /* Set the write mode.  */
#define I_GWROPT    (__SID |20) /* Return the current write mode setting.  */
#define I_LIST	    (__SID |21) /* List all the module names on the STREAM, up
				   to and including the topmost driver name. */
#define I_PLINK	    (__SID |22) /* Connect two STREAMs with a persistent
				   link.  */
#define I_PUNLINK   (__SID |23) /* Disconnect the two STREAMs that were
				   connected with a persistent link.  */
#define I_FLUSHBAND (__SID |28) /* Flush only band specified.  */
#define I_CKBAND    (__SID |29) /* Check if the message of a given priority
				   band exists on the STREAM head read
				   queue.  */
#define I_GETBAND   (__SID |30) /* Return the priority band of the first
				   message on the STREAM head read queue.  */
#define I_ATMARK    (__SID |31) /* See if the current message on the STREAM
				   head read queue is "marked" by some module
				   downstream.  */
#define I_SETCLTIME (__SID |32) /* Set the time the STREAM head will delay when
				   a STREAM is closing and there is data on
				   the write queues.  */
#define I_GETCLTIME (__SID |33) /* Get current value for closing timeout.  */
#define I_CANPUT    (__SID |34) /* Check if a certain band is writable.  */


/* Used in `I_LOOK' request.  */
#define FMNAMESZ	8	/* compatibility w/UnixWare/Solaris.  */

/* Flush options.  */
#define FLUSHR		0x01	/* Flush read queues.  */
#define FLUSHW		0x02	/* Flush write queues.  */
#define FLUSHRW		0x03	/* Flush read and write queues.  */
#ifdef __USE_GNU
# define FLUSHBAND	0x04	/* Flush only specified band.  */
#endif

/* Possible arguments for `I_SETSIG'.  */
#define S_INPUT		0x0001	/* A message, other than a high-priority
				   message, has arrived.  */
#define S_HIPRI		0x0002	/* A high-priority message is present.  */
#define S_OUTPUT	0x0004	/* The write queue for normal data is no longer
				   full.  */
#define S_MSG		0x0008	/* A STREAMS signal message that contains the
				   SIGPOLL signal reaches the front of the
				   STREAM head read queue.  */
#define S_ERROR		0x0010	/* Notification of an error condition.  */
#define S_HANGUP	0x0020	/* Notification of a hangup.  */
#define S_RDNORM	0x0040	/* A normal message has arrived.  */
#define S_WRNORM	S_OUTPUT
#define S_RDBAND	0x0080	/* A message with a non-zero priority has
				   arrived.  */
#define S_WRBAND	0x0100	/* The write queue for a non-zero priority
				   band is no longer full.  */
#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	0x01	/* Only look for high-priority messages.  */

/* Options for `I_SRDOPT'.  */
#define RNORM		0x0000	/* Byte-STREAM mode, the default.  */
#define RMSGD		0x0001	/* Message-discard mode.   */
#define RMSGN		0x0002	/* Message-nondiscard mode.   */
#define RPROTDAT	0x0004	/* Deliver the control part of a message as
				   data.  */
#define RPROTDIS	0x0008	/* Discard the control part of a message,
				   delivering any data part.  */
#define RPROTNORM	0x0010	/* Fail `read' with EBADMSG if a message
				   containing a control part is at the front
				   of the STREAM head read queue.  */
#ifdef __USE_GNU
# define RPROTMASK	0x001C	/* The RPROT bits */
#endif

/* Possible mode for `I_SWROPT'.  */
#define SNDZERO		0x001	/* Send a zero-length message downstream when a
				   `write' of 0 bytes occurs.  */
#ifdef __USE_GNU
# define SNDPIPE	0x002	/* Send SIGPIPE on write and putmsg if
				   sd_werror is set.  */
#endif

/* Arguments for `I_ATMARK'.  */
#define ANYMARK		0x01	/* Check if the message is marked.  */
#define LASTMARK	0x02	/* Check if the message is the last one marked
				   on the queue.  */

/* Argument for `I_UNLINK'.  */
#ifdef __USE_GNU
# define MUXID_ALL	(-1)	/* Unlink all STREAMs linked to the STREAM
				   associated with `fildes'.  */
#endif


/* Macros for `getmsg', `getpmsg', `putmsg' and `putpmsg'.  */
#define MSG_HIPRI	0x01	/* Send/receive high priority message.  */
#define MSG_ANY		0x02	/* Receive any message.  */
#define MSG_BAND	0x04	/* Receive message from specified band.  */

/* Values returned by getmsg and getpmsg */
#define MORECTL		1	/* More control information is left in
				   message.  */
#define MOREDATA	2	/* 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;			/* UnixWare/Solaris compatibility.  */
  };

struct strfdinsert
  {
    struct strbuf ctlbuf;
    struct strbuf databuf;
    t_uscalar_t flags;			/* UnixWare/Solaris compatibility.  */
    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;
    char __fill[8];			/* UnixWare/Solaris compatibility */
  };


struct str_mlist
  {
    char l_name[FMNAMESZ + 1];
  };

struct str_list
  {
    int sl_nmods;
    struct str_mlist *sl_modlist;
  };

#endif /* bits/stropts.h */