|
|
1.1 root 1: /*
2: * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
3: *
4: * @APPLE_LICENSE_HEADER_START@
5: *
6: * The contents of this file constitute Original Code as defined in and
7: * are subject to the Apple Public Source License Version 1.1 (the
8: * "License"). You may not use this file except in compliance with the
9: * License. Please obtain a copy of the License at
10: * http://www.apple.com/publicsource and read it before using this file.
11: *
12: * This Original Code and all software distributed under the License are
13: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
14: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
15: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
16: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
17: * License for the specific language governing rights and limitations
18: * under the License.
19: *
20: * @APPLE_LICENSE_HEADER_END@
21: */
22: /*
23: * Copyright (c) 1980, 1986, 1993
24: * The Regents of the University of California. All rights reserved.
25: *
26: * Redistribution and use in source and binary forms, with or without
27: * modification, are permitted provided that the following conditions
28: * are met:
29: * 1. Redistributions of source code must retain the above copyright
30: * notice, this list of conditions and the following disclaimer.
31: * 2. Redistributions in binary form must reproduce the above copyright
32: * notice, this list of conditions and the following disclaimer in the
33: * documentation and/or other materials provided with the distribution.
34: * 3. All advertising materials mentioning features or use of this software
35: * must display the following acknowledgement:
36: * This product includes software developed by the University of
37: * California, Berkeley and its contributors.
38: * 4. Neither the name of the University nor the names of its contributors
39: * may be used to endorse or promote products derived from this software
40: * without specific prior written permission.
41: *
42: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
43: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
44: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
45: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
46: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
47: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
48: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
49: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
50: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
51: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
52: * SUCH DAMAGE.
53: *
54: * @(#)raw_cb.c 8.1 (Berkeley) 6/10/93
55: */
56:
57: #include <sys/param.h>
58: #include <sys/malloc.h>
59: #include <sys/socket.h>
60: #include <sys/socketvar.h>
61: #include <sys/domain.h>
62: #include <sys/protosw.h>
63:
64: #include <net/raw_cb.h>
65:
66: /*
67: * Routines to manage the raw protocol control blocks.
68: *
69: * TODO:
70: * hash lookups by protocol family/protocol + address family
71: * take care of unique address problems per AF?
72: * redo address binding to allow wildcards
73: */
74:
75: struct rawcb_list_head rawcb_list;
76:
77: static u_long raw_sendspace = RAWSNDQ;
78: static u_long raw_recvspace = RAWRCVQ;
79:
80: /*
81: * Allocate a control block and a nominal amount
82: * of buffer space for the socket.
83: */
84: int
85: raw_attach(so, proto)
86: register struct socket *so;
87: int proto;
88: {
89: register struct rawcb *rp = sotorawcb(so);
90: int error;
91:
92: /*
93: * It is assumed that raw_attach is called
94: * after space has been allocated for the
95: * rawcb.
96: */
97: if (rp == 0)
98: return (ENOBUFS);
99: error = soreserve(so, raw_sendspace, raw_recvspace);
100: if (error)
101: return (error);
102: rp->rcb_socket = so;
103: rp->rcb_proto.sp_family = so->so_proto->pr_domain->dom_family;
104: rp->rcb_proto.sp_protocol = proto;
105: LIST_INSERT_HEAD(&rawcb_list, rp, list);
106: return (0);
107: }
108:
109: /*
110: * Detach the raw connection block and discard
111: * socket resources.
112: */
113: void
114: raw_detach(rp)
115: register struct rawcb *rp;
116: {
117: struct socket *so = rp->rcb_socket;
118:
119: so->so_pcb = 0;
120: sofree(so);
121: LIST_REMOVE(rp, list);
122: #ifdef notdef
123: if (rp->rcb_laddr)
124: m_freem(dtom(rp->rcb_laddr));
125: rp->rcb_laddr = 0;
126: #endif
127: FREE((caddr_t)(rp), M_PCB);
128: }
129:
130: /*
131: * Disconnect and possibly release resources.
132: */
133: void
134: raw_disconnect(rp)
135: struct rawcb *rp;
136: {
137:
138: #ifdef notdef
139: if (rp->rcb_faddr)
140: m_freem(dtom(rp->rcb_faddr));
141: rp->rcb_faddr = 0;
142: #endif
143: if (rp->rcb_socket->so_state & SS_NOFDREF)
144: raw_detach(rp);
145: }
146:
147: #ifdef notdef
148: #include <sys/mbuf.h>
149:
150: int
151: raw_bind(so, nam)
152: register struct socket *so;
153: struct mbuf *nam;
154: {
155: struct sockaddr *addr = mtod(nam, struct sockaddr *);
156: register struct rawcb *rp;
157:
158: if (ifnet == 0)
159: return (EADDRNOTAVAIL);
160: rp = sotorawcb(so);
161: nam = m_copym(nam, 0, M_COPYALL, M_WAITOK);
162: rp->rcb_laddr = mtod(nam, struct sockaddr *);
163: return (0);
164: }
165: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.