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