1/*	$NetBSD: svr4_stropts.h,v 1.13 2007/12/04 18:40:24 dsl Exp $	 */
2
3/*-
4 * Copyright (c) 1994 The NetBSD Foundation, Inc.
5 * All rights reserved.
6 *
7 * This code is derived from software contributed to The NetBSD Foundation
8 * by Christos Zoulas.
9 *
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions
12 * are met:
13 * 1. Redistributions of source code must retain the above copyright
14 *    notice, this list of conditions and the following disclaimer.
15 * 2. Redistributions in binary form must reproduce the above copyright
16 *    notice, this list of conditions and the following disclaimer in the
17 *    documentation and/or other materials provided with the distribution.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 * POSSIBILITY OF SUCH DAMAGE.
30 */
31
32#ifndef	_SVR4_STROPTS_H_
33#define	_SVR4_STROPTS_H_
34
35
36struct svr4_strbuf {
37	int	 maxlen;
38	int 	 len;
39	char 	*buf;
40};
41
42#define SVR4_STR             ('S' << 8)
43#define SVR4_I_NREAD         (SVR4_STR| 1)
44#define SVR4_I_PUSH          (SVR4_STR| 2)
45#define SVR4_I_POP           (SVR4_STR| 3)
46#define SVR4_I_LOOK          (SVR4_STR| 4)
47#define SVR4_I_FLUSH         (SVR4_STR| 5)
48#define SVR4_I_SRDOPT        (SVR4_STR| 6)
49#define SVR4_I_GRDOPT        (SVR4_STR| 7)
50#define SVR4_I_STR           (SVR4_STR| 8)
51#define SVR4_I_SETSIG        (SVR4_STR| 9)
52#define SVR4_I_GETSIG        (SVR4_STR|10)
53#define SVR4_I_FIND          (SVR4_STR|11)
54#define SVR4_I_LINK          (SVR4_STR|12)
55#define SVR4_I_UNLINK        (SVR4_STR|13)
56#define SVR4_I_ERECVFD       (SVR4_STR|14)
57#define SVR4_I_PEEK          (SVR4_STR|15)
58#define SVR4_I_FDINSERT      (SVR4_STR|16)
59#define SVR4_I_SENDFD        (SVR4_STR|17)
60#define SVR4_I_RECVFD        (SVR4_STR|18)
61#define SVR4_I_SWROPT        (SVR4_STR|19)
62#define SVR4_I_GWROPT        (SVR4_STR|20)
63#define SVR4_I_LIST          (SVR4_STR|21)
64#define SVR4_I_PLINK         (SVR4_STR|22)
65#define SVR4_I_PUNLINK       (SVR4_STR|23)
66#define SVR4_I_SETEV         (SVR4_STR|24)
67#define SVR4_I_GETEV         (SVR4_STR|25)
68#define SVR4_I_STREV         (SVR4_STR|26)
69#define SVR4_I_UNSTREV       (SVR4_STR|27)
70#define SVR4_I_FLUSHBAND     (SVR4_STR|28)
71#define SVR4_I_CKBAND        (SVR4_STR|29)
72#define SVR4_I_GETBAND       (SVR4_STR|30)
73#define SVR4_I_ATMARK        (SVR4_STR|31)
74#define SVR4_I_SETCLTIME     (SVR4_STR|32)
75#define SVR4_I_GETCLTIME     (SVR4_STR|33)
76#define SVR4_I_CANPUT        (SVR4_STR|34)
77
78/*
79 * The following two ioctls are OS specific and
80 * undocumented.
81 */
82#define SVR4__I_BIND_RSVD    (SVR4_STR|242)
83#define SVR4__I_RELE_RSVD    (SVR4_STR|243)
84
85/*
86 * Service type definitions
87 */
88#define SVR4_T_COTS           1   /* Connection-orieted */
89#define SVR4_T_COTS_ORD       2   /* Local connection-oriented */
90#define SVR4_T_CLTS           3   /* Connectionless */
91
92/* Struct passed for SVR4_I_STR */
93struct svr4_strioctl {
94	u_long	 cmd;
95	int	 timeout;
96	int	 len;
97	char	*buf;
98};
99
100
101/*
102 * Bits for I_{G,S}ETSIG
103 */
104#define	SVR4_S_INPUT	0x0001		/* any message on read queue no HIPRI */
105#define	SVR4_S_HIPRI	0x0002		/* high prio message on read queue */
106#define	SVR4_S_OUTPUT	0x0004		/* write queue has free space */
107#define	SVR4_S_MSG	0x0008		/* signal message in read queue head */
108#define	SVR4_S_ERROR	0x0010		/* error message in read queue head */
109#define	SVR4_S_HANGUP	0x0020		/* hangup message in read queue head */
110#define	SVR4_S_RDNORM	0x0040		/* normal message on read queue */
111#define	SVR4_S_WRNORM	S_OUTPUT	/* write queue has free space */
112#define	SVR4_S_RDBAND	0x0080		/* out of band message on read queue */
113#define	SVR4_S_WRBAND	0x0100		/* write queue has free space for oob */
114#define	SVR4_S_BANDURG	0x0200		/* generate SIGURG instead of SIGPOLL */
115#define SVR4_S_ALLMASK	0x03ff		/* all events mask */
116
117/*
118 * Our internal state for the stream
119 * For now we keep almost nothing... In the future we can keep more
120 * streams state.
121 */
122struct svr4_strm {
123	int	s_family;	/* socket family */
124	int	s_cmd;		/* last getmsg reply or putmsg request */
125	int	s_afd;		/* last accepted fd; [for fd_insert] */
126	int	s_eventmask;	/* event mask for I_{G,S}ETSIG */
127};
128
129/*
130 * The following structures are determined empirically.
131 */
132struct svr4_strmcmd {
133	long	cmd;		/* command ? 		*/
134	long	len;		/* Address len 		*/
135	long	offs;		/* Address offset	*/
136	long	pad[61];
137};
138
139struct svr4_infocmd {
140	long	cmd;
141	long	tsdu;
142	long	etsdu;
143	long	cdata;
144	long	ddata;
145	long	addr;
146	long	opt;
147	long	tidu;
148	long	serv;
149	long	current;
150	long	provider;
151};
152
153struct svr4_strfdinsert {
154	struct svr4_strbuf	ctl;
155	struct svr4_strbuf	data;
156	long			flags;
157	int 			fd;
158	int			offset;
159};
160
161struct svr4_netaddr_in {
162	u_short	family;
163	u_short	port;
164	u_long	addr;
165};
166
167struct svr4_netaddr_un {
168	u_short	family;
169	char 	path[1];
170};
171
172#define SVR4_ADDROF(sc) (void *) (((char *) (sc)) + (sc)->offs)
173#define SVR4_C_ADDROF(sc) (const void *) (((const char *) (sc)) + (sc)->offs)
174
175struct svr4_strm *svr4_stream_get(struct file *fp);
176
177#endif /* !_SVR4_STROPTS */
178