Deleted Added
full compact
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 ---