Deleted Added
sdiff udiff text old ( 25606 ) new ( 28270 )
full compact
1/* $NetBSD: natm.c,v 1.5 1996/11/09 03:26:26 chuck Exp $ */
2
3/*
4 *
5 * Copyright (c) 1996 Charles D. Cranor and Washington University.
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without

--- 62 unchanged lines hidden (view full) ---

71 * user requests
72 */
73#ifdef FREEBSD_USRREQS
74/*
75 * FreeBSD new usrreqs supersedes pr_usrreq.
76 */
77static int natm_usr_attach __P((struct socket *, int, struct proc *));
78static int natm_usr_detach __P((struct socket *));
79static int natm_usr_connect __P((struct socket *, struct mbuf *,
80 struct proc *));
81static int natm_usr_disconnect __P((struct socket *));
82static int natm_usr_shutdown __P((struct socket *));
83static int natm_usr_send __P((struct socket *, int, struct mbuf *,
84 struct mbuf *, struct mbuf *, struct proc *));
85static int natm_usr_peeraddr __P((struct socket *, struct mbuf *));
86static int natm_usr_control __P((struct socket *, int, caddr_t,
87 struct ifnet *, struct proc *));
88static int natm_usr_abort __P((struct socket *));
89static int natm_usr_bind __P((struct socket *, struct mbuf *, struct proc *));
90static int natm_usr_sockaddr __P((struct socket *, struct mbuf *));
91
92static int
93natm_usr_attach(struct socket *so, int proto, struct proc *p)
94{
95 struct natmpcb *npcb;
96 int error = 0;
97 int s = SPLSOFTNET();
98

--- 40 unchanged lines hidden (view full) ---

139 so->so_pcb = NULL;
140 sofree(so);
141 out:
142 splx(s);
143 return (error);
144}
145
146static int
147natm_usr_connect(struct socket *so, struct mbuf *nam, struct proc *p)
148{
149 struct natmpcb *npcb;
150 struct sockaddr_natm *snatm;
151 struct atm_pseudoioctl api;
152 struct atm_pseudohdr *aph;
153 struct ifnet *ifp;
154 int error = 0;
155 int s2, s = SPLSOFTNET();

--- 4 unchanged lines hidden (view full) ---

160 error = EINVAL;
161 goto out;
162 }
163
164 /*
165 * validate nam and npcb
166 */
167
168 if (nam->m_len != sizeof(*snatm)) {
169 error = EINVAL;
170 goto out;
171 }
172 snatm = mtod(nam, struct sockaddr_natm *);
173 if (snatm->snatm_len != sizeof(*snatm) ||
174 (npcb->npcb_flags & NPCB_FREE) == 0) {
175 error = EINVAL;
176 goto out;
177 }
178 if (snatm->snatm_family != AF_NATM) {
179 error = EAFNOSUPPORT;
180 goto out;

--- 99 unchanged lines hidden (view full) ---

280static int
281natm_usr_shutdown(struct socket *so)
282{
283 socantsendmore(so);
284 return 0;
285}
286
287static int
288natm_usr_send(struct socket *so, int flags, struct mbuf *m, struct mbuf *nam,
289 struct mbuf *control, struct proc *p)
290{
291 struct natmpcb *npcb;
292 struct atm_pseudohdr *aph;
293 int error = 0;
294 int s = SPLSOFTNET();
295 int proto = so->so_proto->pr_protocol;
296
297 npcb = (struct natmpcb *) so->so_pcb;

--- 26 unchanged lines hidden (view full) ---

324 error = atm_output(npcb->npcb_ifp, m, NULL, NULL);
325
326 out:
327 splx(s);
328 return (error);
329}
330
331static int
332natm_usr_peeraddr(struct socket *so, struct mbuf *nam)
333{
334 struct natmpcb *npcb;
335 struct sockaddr_natm *snatm;
336 int error = 0;
337 int s = SPLSOFTNET();
338
339 npcb = (struct natmpcb *) so->so_pcb;
340 if (npcb == NULL) {
341 error = EINVAL;
342 goto out;
343 }
344
345 snatm = mtod(nam, struct sockaddr_natm *);
346 bzero(snatm, sizeof(*snatm));
347 nam->m_len = snatm->snatm_len = sizeof(*snatm);
348 snatm->snatm_family = AF_NATM;
349 sprintf(snatm->snatm_if, "%s%d", npcb->npcb_ifp->if_name,
350 npcb->npcb_ifp->if_unit);
351 snatm->snatm_vci = npcb->npcb_vci;
352 snatm->snatm_vpi = npcb->npcb_vpi;
353
354 out:
355 splx(s);
356 return (error);
357}
358
359static int
360natm_usr_control(struct socket *so, int cmd, caddr_t arg,

--- 40 unchanged lines hidden (view full) ---

401
402static int
403natm_usr_abort(struct socket *so)
404{
405 return natm_usr_shutdown(so);
406}
407
408static int
409natm_usr_bind(struct socket *so, struct mbuf *nam, struct proc *p)
410{
411 return EOPNOTSUPP;
412}
413
414static int
415natm_usr_sockaddr(struct socket *so, struct mbuf *nam)
416{
417 return EOPNOTSUPP;
418}
419
420/* xxx - should be const */
421struct pr_usrreqs natm_usrreqs = {
422 natm_usr_abort, pru_accept_notsupp, natm_usr_attach, natm_usr_bind,
423 natm_usr_connect, pru_connect2_notsupp, natm_usr_control,

--- 399 unchanged lines hidden ---