natm.c (25606) | natm.c (28270) |
---|---|
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 *)); | 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 *, | 79static int natm_usr_connect __P((struct socket *, struct sockaddr *, |
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 *, | 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 *)); | 84 struct sockaddr *, struct mbuf *, 85 struct proc *)); 86static int natm_usr_peeraddr __P((struct socket *, struct sockaddr **)); |
86static int natm_usr_control __P((struct socket *, int, caddr_t, 87 struct ifnet *, struct proc *)); 88static int natm_usr_abort __P((struct socket *)); | 87static int natm_usr_control __P((struct socket *, int, caddr_t, 88 struct ifnet *, struct proc *)); 89static 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 *)); | 90static int natm_usr_bind __P((struct socket *, struct sockaddr *, 91 struct proc *)); 92static int natm_usr_sockaddr __P((struct socket *, struct sockaddr **)); |
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 | 93 94static int 95natm_usr_attach(struct socket *so, int proto, struct proc *p) 96{ 97 struct natmpcb *npcb; 98 int error = 0; 99 int s = SPLSOFTNET(); 100 --- 40 unchanged lines hidden (view full) --- 141 so->so_pcb = NULL; 142 sofree(so); 143 out: 144 splx(s); 145 return (error); 146} 147 148static int |
147natm_usr_connect(struct socket *so, struct mbuf *nam, struct proc *p) | 149natm_usr_connect(struct socket *so, struct sockaddr *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 | 150{ 151 struct natmpcb *npcb; 152 struct sockaddr_natm *snatm; 153 struct atm_pseudoioctl api; 154 struct atm_pseudohdr *aph; 155 struct ifnet *ifp; 156 int error = 0; 157 int s2, s = SPLSOFTNET(); --- 4 unchanged lines hidden (view full) --- 162 error = EINVAL; 163 goto out; 164 } 165 166 /* 167 * validate nam and npcb 168 */ 169 |
168 if (nam->m_len != sizeof(*snatm)) { 169 error = EINVAL; 170 goto out; 171 } 172 snatm = mtod(nam, struct sockaddr_natm *); | 170 snatm = (struct sockaddr_natm *)nam; |
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 | 171 if (snatm->snatm_len != sizeof(*snatm) || 172 (npcb->npcb_flags & NPCB_FREE) == 0) { 173 error = EINVAL; 174 goto out; 175 } 176 if (snatm->snatm_family != AF_NATM) { 177 error = EAFNOSUPPORT; 178 goto out; --- 99 unchanged lines hidden (view full) --- 278static int 279natm_usr_shutdown(struct socket *so) 280{ 281 socantsendmore(so); 282 return 0; 283} 284 285static int |
288natm_usr_send(struct socket *so, int flags, struct mbuf *m, struct mbuf *nam, 289 struct mbuf *control, struct proc *p) | 286natm_usr_send(struct socket *so, int flags, struct mbuf *m, 287 struct sockaddr *nam, 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 | 288{ 289 struct natmpcb *npcb; 290 struct atm_pseudohdr *aph; 291 int error = 0; 292 int s = SPLSOFTNET(); 293 int proto = so->so_proto->pr_protocol; 294 295 npcb = (struct natmpcb *) so->so_pcb; --- 26 unchanged lines hidden (view full) --- 322 error = atm_output(npcb->npcb_ifp, m, NULL, NULL); 323 324 out: 325 splx(s); 326 return (error); 327} 328 329static int |
332natm_usr_peeraddr(struct socket *so, struct mbuf *nam) | 330natm_usr_peeraddr(struct socket *so, struct sockaddr **nam) |
333{ 334 struct natmpcb *npcb; | 331{ 332 struct natmpcb *npcb; |
335 struct sockaddr_natm *snatm; | 333 struct sockaddr_natm *snatm, ssnatm; |
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 | 334 int error = 0; 335 int s = SPLSOFTNET(); 336 337 npcb = (struct natmpcb *) so->so_pcb; 338 if (npcb == NULL) { 339 error = EINVAL; 340 goto out; 341 } 342 |
345 snatm = mtod(nam, struct sockaddr_natm *); | 343 snatm = &ssnatm; |
346 bzero(snatm, sizeof(*snatm)); | 344 bzero(snatm, sizeof(*snatm)); |
347 nam->m_len = snatm->snatm_len = sizeof(*snatm); | 345 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; | 346 snatm->snatm_family = AF_NATM; 347 sprintf(snatm->snatm_if, "%s%d", npcb->npcb_ifp->if_name, 348 npcb->npcb_ifp->if_unit); 349 snatm->snatm_vci = npcb->npcb_vci; 350 snatm->snatm_vpi = npcb->npcb_vpi; |
351 *nam = dup_sockaddr((struct sockaddr *)snatm, 0); |
|
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 | 352 353 out: 354 splx(s); 355 return (error); 356} 357 358static int 359natm_usr_control(struct socket *so, int cmd, caddr_t arg, --- 40 unchanged lines hidden (view full) --- 400 401static int 402natm_usr_abort(struct socket *so) 403{ 404 return natm_usr_shutdown(so); 405} 406 407static int |
409natm_usr_bind(struct socket *so, struct mbuf *nam, struct proc *p) | 408natm_usr_bind(struct socket *so, struct sockaddr *nam, struct proc *p) |
410{ 411 return EOPNOTSUPP; 412} 413 414static int | 409{ 410 return EOPNOTSUPP; 411} 412 413static int |
415natm_usr_sockaddr(struct socket *so, struct mbuf *nam) | 414natm_usr_sockaddr(struct socket *so, struct sockaddr **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 --- | 415{ 416 return EOPNOTSUPP; 417} 418 419/* xxx - should be const */ 420struct pr_usrreqs natm_usrreqs = { 421 natm_usr_abort, pru_accept_notsupp, natm_usr_attach, natm_usr_bind, 422 natm_usr_connect, pru_connect2_notsupp, natm_usr_control, --- 399 unchanged lines hidden --- |