sctp_syscalls.c (8876) | sctp_syscalls.c (11328) |
---|---|
1/* 2 * Copyright (c) 1982, 1986, 1989, 1990, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 17 unchanged lines hidden (view full) --- 26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 31 * SUCH DAMAGE. 32 * 33 * @(#)uipc_syscalls.c 8.4 (Berkeley) 2/21/94 | 1/* 2 * Copyright (c) 1982, 1986, 1989, 1990, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 17 unchanged lines hidden (view full) --- 26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 31 * SUCH DAMAGE. 32 * 33 * @(#)uipc_syscalls.c 8.4 (Berkeley) 2/21/94 |
34 * $Id: uipc_syscalls.c,v 1.5 1995/03/16 18:12:46 bde Exp $ | 34 * $Id: uipc_syscalls.c,v 1.6 1995/05/30 08:06:24 rgrimes Exp $ |
35 */ 36 37#include <sys/param.h> 38#include <sys/systm.h> 39#include <sys/filedesc.h> 40#include <sys/proc.h> 41#include <sys/file.h> 42#include <sys/buf.h> --- 97 unchanged lines hidden (view full) --- 140 return (error); 141 return (solisten((struct socket *)fp->f_data, uap->backlog)); 142} 143 144struct accept_args { 145 int s; 146 caddr_t name; 147 int *anamelen; | 35 */ 36 37#include <sys/param.h> 38#include <sys/systm.h> 39#include <sys/filedesc.h> 40#include <sys/proc.h> 41#include <sys/file.h> 42#include <sys/buf.h> --- 97 unchanged lines hidden (view full) --- 140 return (error); 141 return (solisten((struct socket *)fp->f_data, uap->backlog)); 142} 143 144struct accept_args { 145 int s; 146 caddr_t name; 147 int *anamelen; |
148#ifdef COMPAT_OLDSOCK 149 int compat_43; /* pseudo */ 150#endif | |
151}; 152 | 148}; 149 |
153#ifndef COMPAT_OLDSOCK 154# define accept1 accept 155#endif /* COMPAT_OLDSOCK*/ | |
156 | 150 |
151#ifdef COMPAT_OLDSOCK 152static int accept1(struct proc *, struct accept_args *, int [], int); 153 |
|
157int | 154int |
158accept1(p, uap, retval) | 155oaccept(p, uap, retval) |
159 struct proc *p; | 156 struct proc *p; |
157 struct accept_args *uap; 158 int *retval; 159{ 160 return (accept1(p, uap, retval, 1)); 161} 162 163 164int 165accept(p, uap, retval) 166 struct proc *p; 167 struct accept_args *uap; 168 int *retval; 169{ 170 return (accept1(p, uap, retval, 0)); 171} 172 173static int 174accept1(p, uap, retval, compat) 175 struct proc *p; |
|
160 register struct accept_args *uap; 161 int *retval; | 176 register struct accept_args *uap; 177 int *retval; |
178 int compat; 179#else /* COMPAT_OLDSOCK */ 180int 181accept(p, uap, retval) 182 struct proc *p; 183 register struct accept_args *uap; 184 int *retval; 185#endif /* COMPAT_OLDSOCK*/ |
|
162{ 163 struct file *fp; 164 struct mbuf *nam; 165 int namelen, error, s; 166 register struct socket *so; 167 168 if (uap->name) { 169 error = copyin((caddr_t)uap->anamelen, (caddr_t)&namelen, --- 45 unchanged lines hidden (view full) --- 215 fp->f_type = DTYPE_SOCKET; 216 fp->f_flag = FREAD|FWRITE; 217 fp->f_ops = &socketops; 218 fp->f_data = (caddr_t)so; 219 nam = m_get(M_WAIT, MT_SONAME); 220 (void) soaccept(so, nam); 221 if (uap->name) { 222#ifdef COMPAT_OLDSOCK | 186{ 187 struct file *fp; 188 struct mbuf *nam; 189 int namelen, error, s; 190 register struct socket *so; 191 192 if (uap->name) { 193 error = copyin((caddr_t)uap->anamelen, (caddr_t)&namelen, --- 45 unchanged lines hidden (view full) --- 239 fp->f_type = DTYPE_SOCKET; 240 fp->f_flag = FREAD|FWRITE; 241 fp->f_ops = &socketops; 242 fp->f_data = (caddr_t)so; 243 nam = m_get(M_WAIT, MT_SONAME); 244 (void) soaccept(so, nam); 245 if (uap->name) { 246#ifdef COMPAT_OLDSOCK |
223 if (uap->compat_43) | 247 if (compat) |
224 mtod(nam, struct osockaddr *)->sa_family = 225 mtod(nam, struct sockaddr *)->sa_family; 226#endif 227 if (namelen > nam->m_len) 228 namelen = nam->m_len; 229 /* SHOULD COPY OUT A CHAIN HERE */ 230 error = copyout(mtod(nam, caddr_t), (caddr_t)uap->name, 231 (u_int)namelen); 232 if (!error) 233 error = copyout((caddr_t)&namelen, 234 (caddr_t)uap->anamelen, sizeof (*uap->anamelen)); 235 } 236 m_freem(nam); 237 splx(s); 238 return (error); 239} 240 | 248 mtod(nam, struct osockaddr *)->sa_family = 249 mtod(nam, struct sockaddr *)->sa_family; 250#endif 251 if (namelen > nam->m_len) 252 namelen = nam->m_len; 253 /* SHOULD COPY OUT A CHAIN HERE */ 254 error = copyout(mtod(nam, caddr_t), (caddr_t)uap->name, 255 (u_int)namelen); 256 if (!error) 257 error = copyout((caddr_t)&namelen, 258 (caddr_t)uap->anamelen, sizeof (*uap->anamelen)); 259 } 260 m_freem(nam); 261 splx(s); 262 return (error); 263} 264 |
241#ifdef COMPAT_OLDSOCK 242int 243accept(p, uap, retval) 244 struct proc *p; 245 struct accept_args *uap; 246 int *retval; 247{ | |
248 | 265 |
249 uap->compat_43 = 0; 250 return (accept1(p, uap, retval)); 251} 252 253int 254oaccept(p, uap, retval) 255 struct proc *p; 256 struct accept_args *uap; 257 int *retval; 258{ 259 260 uap->compat_43 = 1; 261 return (accept1(p, uap, retval)); 262} 263#endif /* COMPAT_OLDSOCK */ 264 | |
265struct connect_args { 266 int s; 267 caddr_t name; 268 int namelen; 269}; 270/* ARGSUSED */ 271int 272connect(p, uap, retval) --- 345 unchanged lines hidden (view full) --- 618#endif 619 error = sendit(p, uap->s, &msg, uap->flags, retval); 620done: 621 if (iov != aiov) 622 FREE(iov, M_IOV); 623 return (error); 624} 625 | 266struct connect_args { 267 int s; 268 caddr_t name; 269 int namelen; 270}; 271/* ARGSUSED */ 272int 273connect(p, uap, retval) --- 345 unchanged lines hidden (view full) --- 619#endif 620 error = sendit(p, uap->s, &msg, uap->flags, retval); 621done: 622 if (iov != aiov) 623 FREE(iov, M_IOV); 624 return (error); 625} 626 |
626struct recvfrom_args { 627 int s; 628 caddr_t buf; 629 size_t len; 630 int flags; 631 caddr_t from; 632 int *fromlenaddr; 633}; 634 | |
635int 636recvit(p, s, mp, namelenp, retsize) 637 register struct proc *p; 638 int s; 639 register struct msghdr *mp; 640 caddr_t namelenp; 641 int *retsize; 642{ --- 116 unchanged lines hidden (view full) --- 759out: 760 if (from) 761 m_freem(from); 762 if (control) 763 m_freem(control); 764 return (error); 765} 766 | 627int 628recvit(p, s, mp, namelenp, retsize) 629 register struct proc *p; 630 int s; 631 register struct msghdr *mp; 632 caddr_t namelenp; 633 int *retsize; 634{ --- 116 unchanged lines hidden (view full) --- 751out: 752 if (from) 753 m_freem(from); 754 if (control) 755 m_freem(control); 756 return (error); 757} 758 |
767struct shutdown_args { | 759 760struct recvfrom_args { |
768 int s; | 761 int s; |
769 int how; | 762 caddr_t buf; 763 size_t len; 764 int flags; 765 caddr_t from; 766 int *fromlenaddr; |
770}; 771 772int 773recvfrom(p, uap, retval) 774 struct proc *p; 775 register struct recvfrom_args *uap; 776 int *retval; 777{ --- 104 unchanged lines hidden (view full) --- 882 (caddr_t)&uap->msg->msg_accrightslen, sizeof (int)); 883done: 884 if (iov != aiov) 885 FREE(iov, M_IOV); 886 return (error); 887} 888#endif 889 | 767}; 768 769int 770recvfrom(p, uap, retval) 771 struct proc *p; 772 register struct recvfrom_args *uap; 773 int *retval; 774{ --- 104 unchanged lines hidden (view full) --- 879 (caddr_t)&uap->msg->msg_accrightslen, sizeof (int)); 880done: 881 if (iov != aiov) 882 FREE(iov, M_IOV); 883 return (error); 884} 885#endif 886 |
887 |
|
890struct recvmsg_args { 891 int s; 892 struct msghdr *msg; 893 int flags; 894}; 895int 896recvmsg(p, uap, retval) 897 struct proc *p; --- 31 unchanged lines hidden (view full) --- 929 msg.msg_iov = uiov; 930 error = copyout((caddr_t)&msg, (caddr_t)uap->msg, sizeof(msg)); 931 } 932done: 933 if (iov != aiov) 934 FREE(iov, M_IOV); 935 return (error); 936} | 888struct recvmsg_args { 889 int s; 890 struct msghdr *msg; 891 int flags; 892}; 893int 894recvmsg(p, uap, retval) 895 struct proc *p; --- 31 unchanged lines hidden (view full) --- 927 msg.msg_iov = uiov; 928 error = copyout((caddr_t)&msg, (caddr_t)uap->msg, sizeof(msg)); 929 } 930done: 931 if (iov != aiov) 932 FREE(iov, M_IOV); 933 return (error); 934} |
935 936 937struct shutdown_args { 938 int s; 939 int how; 940}; 941 |
|
937/* ARGSUSED */ 938int 939shutdown(p, uap, retval) 940 struct proc *p; 941 register struct shutdown_args *uap; 942 int *retval; 943{ 944 struct file *fp; --- 137 unchanged lines hidden (view full) --- 1082free1: 1083 (void)soclose(rso); 1084 return (error); 1085} 1086 1087/* 1088 * Get socket name. 1089 */ | 942/* ARGSUSED */ 943int 944shutdown(p, uap, retval) 945 struct proc *p; 946 register struct shutdown_args *uap; 947 int *retval; 948{ 949 struct file *fp; --- 137 unchanged lines hidden (view full) --- 1087free1: 1088 (void)soclose(rso); 1089 return (error); 1090} 1091 1092/* 1093 * Get socket name. 1094 */ |
1095 |
|
1090struct getsockname_args { 1091 int fdes; 1092 caddr_t asa; 1093 int *alen; | 1096struct getsockname_args { 1097 int fdes; 1098 caddr_t asa; 1099 int *alen; |
1094#ifdef COMPAT_OLDSOCK 1095 int compat_43; /* pseudo */ 1096#endif | |
1097}; 1098 | 1100}; 1101 |
1099#ifndef COMPAT_OLDSOCK 1100#define getsockname1 getsockname 1101#endif | 1102#ifdef COMPAT_OLDSOCK 1103static int getsockname1(struct proc *, struct getsockname_args *, int [], int); |
1102 | 1104 |
1105int 1106ogetsockname(p, uap, retval) 1107 struct proc *p; 1108 struct getsockname_args *uap; 1109 int *retval; 1110{ 1111 return (getsockname1(p, uap, retval, 1)); 1112} 1113 1114int 1115getsockname(p, uap, retval) 1116 struct proc *p; 1117 struct getsockname_args *uap; 1118 int *retval; 1119{ 1120 return (getsockname1(p, uap, retval, 0)); 1121} 1122 1123static int 1124getsockname1(p, uap, retval, compat) 1125 struct proc *p; 1126 register struct getsockname_args *uap; 1127 int *retval; 1128 int compat; 1129#else /* COMPAT_OLDSOCK */ |
|
1103/* ARGSUSED */ 1104int 1105getsockname1(p, uap, retval) 1106 struct proc *p; 1107 register struct getsockname_args *uap; 1108 int *retval; | 1130/* ARGSUSED */ 1131int 1132getsockname1(p, uap, retval) 1133 struct proc *p; 1134 register struct getsockname_args *uap; 1135 int *retval; |
1136#endif /* COMPAT_OLDSOCK */ |
|
1109{ 1110 struct file *fp; 1111 register struct socket *so; 1112 struct mbuf *m; 1113 int len, error; 1114 1115 error = getsock(p->p_fd, uap->fdes, &fp); 1116 if (error) --- 6 unchanged lines hidden (view full) --- 1123 if (m == NULL) 1124 return (ENOBUFS); 1125 error = (*so->so_proto->pr_usrreq)(so, PRU_SOCKADDR, 0, m, 0); 1126 if (error) 1127 goto bad; 1128 if (len > m->m_len) 1129 len = m->m_len; 1130#ifdef COMPAT_OLDSOCK | 1137{ 1138 struct file *fp; 1139 register struct socket *so; 1140 struct mbuf *m; 1141 int len, error; 1142 1143 error = getsock(p->p_fd, uap->fdes, &fp); 1144 if (error) --- 6 unchanged lines hidden (view full) --- 1151 if (m == NULL) 1152 return (ENOBUFS); 1153 error = (*so->so_proto->pr_usrreq)(so, PRU_SOCKADDR, 0, m, 0); 1154 if (error) 1155 goto bad; 1156 if (len > m->m_len) 1157 len = m->m_len; 1158#ifdef COMPAT_OLDSOCK |
1131 if (uap->compat_43) | 1159 if (compat) |
1132 mtod(m, struct osockaddr *)->sa_family = 1133 mtod(m, struct sockaddr *)->sa_family; 1134#endif 1135 error = copyout(mtod(m, caddr_t), (caddr_t)uap->asa, (u_int)len); 1136 if (error == 0) 1137 error = copyout((caddr_t)&len, (caddr_t)uap->alen, 1138 sizeof (len)); 1139bad: 1140 m_freem(m); 1141 return (error); 1142} 1143 | 1160 mtod(m, struct osockaddr *)->sa_family = 1161 mtod(m, struct sockaddr *)->sa_family; 1162#endif 1163 error = copyout(mtod(m, caddr_t), (caddr_t)uap->asa, (u_int)len); 1164 if (error == 0) 1165 error = copyout((caddr_t)&len, (caddr_t)uap->alen, 1166 sizeof (len)); 1167bad: 1168 m_freem(m); 1169 return (error); 1170} 1171 |
1172/* 1173 * Get name of peer for connected socket. 1174 */ 1175struct getpeername_args { 1176 int fdes; 1177 caddr_t asa; 1178 int *alen; 1179}; 1180 |
|
1144#ifdef COMPAT_OLDSOCK | 1181#ifdef COMPAT_OLDSOCK |
1182static int getpeername1(struct proc *, struct getpeername_args *, int [], int); 1183 |
|
1145int | 1184int |
1146getsockname(p, uap, retval) | 1185ogetpeername(p, uap, retval) |
1147 struct proc *p; | 1186 struct proc *p; |
1148 struct getsockname_args *uap; | 1187 struct getpeername_args *uap; |
1149 int *retval; 1150{ | 1188 int *retval; 1189{ |
1151 1152 uap->compat_43 = 0; 1153 return (getsockname1(p, uap, retval)); | 1190 return (getpeername1(p, uap, retval, 1)); |
1154} 1155 1156int | 1191} 1192 1193int |
1157ogetsockname(p, uap, retval) | 1194getpeername(p, uap, retval) |
1158 struct proc *p; | 1195 struct proc *p; |
1159 struct getsockname_args *uap; | 1196 struct getpeername_args *uap; |
1160 int *retval; 1161{ | 1197 int *retval; 1198{ |
1162 1163 uap->compat_43 = 1; 1164 return (getsockname1(p, uap, retval)); | 1199 return (getpeername1(p, uap, retval, 0)); |
1165} | 1200} |
1166#endif /* COMPAT_OLDSOCK */ | |
1167 | 1201 |
1168/* 1169 * Get name of peer for connected socket. 1170 */ 1171struct getpeername_args { 1172 int fdes; 1173 caddr_t asa; 1174 int *alen; 1175#ifdef COMPAT_OLDSOCK 1176 int compat_43; /* pseudo */ 1177#endif 1178}; 1179 1180 1181#ifndef COMPAT_OLDSOCK 1182#define getpeername1 getpeername 1183#endif 1184 | 1202static int 1203getpeername1(p, uap, retval, compat) 1204 struct proc *p; 1205 register struct getpeername_args *uap; 1206 int *retval; 1207 int compat; 1208#else /* COMPAT_OLDSOCK */ |
1185/* ARGSUSED */ 1186int 1187getpeername1(p, uap, retval) 1188 struct proc *p; 1189 register struct getpeername_args *uap; 1190 int *retval; | 1209/* ARGSUSED */ 1210int 1211getpeername1(p, uap, retval) 1212 struct proc *p; 1213 register struct getpeername_args *uap; 1214 int *retval; |
1215#endif /* COMPAT_OLDSOCK */ |
|
1191{ 1192 struct file *fp; 1193 register struct socket *so; 1194 struct mbuf *m; 1195 int len, error; 1196 1197 error = getsock(p->p_fd, uap->fdes, &fp); 1198 if (error) --- 8 unchanged lines hidden (view full) --- 1207 if (m == NULL) 1208 return (ENOBUFS); 1209 error = (*so->so_proto->pr_usrreq)(so, PRU_PEERADDR, 0, m, 0); 1210 if (error) 1211 goto bad; 1212 if (len > m->m_len) 1213 len = m->m_len; 1214#ifdef COMPAT_OLDSOCK | 1216{ 1217 struct file *fp; 1218 register struct socket *so; 1219 struct mbuf *m; 1220 int len, error; 1221 1222 error = getsock(p->p_fd, uap->fdes, &fp); 1223 if (error) --- 8 unchanged lines hidden (view full) --- 1232 if (m == NULL) 1233 return (ENOBUFS); 1234 error = (*so->so_proto->pr_usrreq)(so, PRU_PEERADDR, 0, m, 0); 1235 if (error) 1236 goto bad; 1237 if (len > m->m_len) 1238 len = m->m_len; 1239#ifdef COMPAT_OLDSOCK |
1215 if (uap->compat_43) | 1240 if (compat) |
1216 mtod(m, struct osockaddr *)->sa_family = 1217 mtod(m, struct sockaddr *)->sa_family; 1218#endif 1219 error = copyout(mtod(m, caddr_t), (caddr_t)uap->asa, (u_int)len); 1220 if (error) 1221 goto bad; 1222 error = copyout((caddr_t)&len, (caddr_t)uap->alen, sizeof (len)); 1223bad: 1224 m_freem(m); 1225 return (error); 1226} 1227 | 1241 mtod(m, struct osockaddr *)->sa_family = 1242 mtod(m, struct sockaddr *)->sa_family; 1243#endif 1244 error = copyout(mtod(m, caddr_t), (caddr_t)uap->asa, (u_int)len); 1245 if (error) 1246 goto bad; 1247 error = copyout((caddr_t)&len, (caddr_t)uap->alen, sizeof (len)); 1248bad: 1249 m_freem(m); 1250 return (error); 1251} 1252 |
1228#ifdef COMPAT_OLDSOCK 1229int 1230getpeername(p, uap, retval) 1231 struct proc *p; 1232 struct getpeername_args *uap; 1233 int *retval; 1234{ | |
1235 | 1253 |
1236 uap->compat_43 = 0; 1237 return (getpeername1(p, uap, retval)); 1238} 1239 | |
1240int | 1254int |
1241ogetpeername(p, uap, retval) 1242 struct proc *p; 1243 struct getpeername_args *uap; 1244 int *retval; 1245{ 1246 1247 uap->compat_43 = 1; 1248 return (getpeername1(p, uap, retval)); 1249} 1250#endif /* COMPAT_OLDSOCK */ 1251int | |
1252sockargs(mp, buf, buflen, type) 1253 struct mbuf **mp; 1254 caddr_t buf; 1255 int buflen, type; 1256{ 1257 register struct sockaddr *sa; 1258 register struct mbuf *m; 1259 int error; --- 47 unchanged lines hidden --- | 1255sockargs(mp, buf, buflen, type) 1256 struct mbuf **mp; 1257 caddr_t buf; 1258 int buflen, type; 1259{ 1260 register struct sockaddr *sa; 1261 register struct mbuf *m; 1262 int error; --- 47 unchanged lines hidden --- |