|
|
1.1 root 1: /*
2: * Copyright (c) 1980, 1986 Regents of the University of California.
3: * 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
9: * notice, this list of conditions and the following disclaimer.
10: * 2. Redistributions in binary form must reproduce the above copyright
11: * notice, this list of conditions and the following disclaimer in the
12: * documentation and/or other materials provided with the distribution.
13: * 3. All advertising materials mentioning features or use of this software
14: * must display the following acknowledgement:
15: * This product includes software developed by the University of
16: * California, Berkeley and its contributors.
17: * 4. Neither the name of the University nor the names of its contributors
18: * may be used to endorse or promote products derived from this software
19: * without specific prior written permission.
20: *
21: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
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: *
1.1.1.2 ! root 33: * from: @(#)raw_cb.c 7.11 (Berkeley) 6/28/90
! 34: * raw_cb.c,v 1.3 1993/05/22 11:42:15 cgd Exp
1.1 root 35: */
36:
37: #include "param.h"
38: #include "systm.h"
39: #include "mbuf.h"
40: #include "socket.h"
41: #include "socketvar.h"
42: #include "domain.h"
43: #include "protosw.h"
44: #include "errno.h"
45:
46: #include "if.h"
47: #include "route.h"
48: #include "raw_cb.h"
49: #include "../netinet/in.h"
50:
51: #include "machine/mtpr.h"
52:
53: /*
54: * Routines to manage the raw protocol control blocks.
55: *
56: * TODO:
57: * hash lookups by protocol family/protocol + address family
58: * take care of unique address problems per AF?
59: * redo address binding to allow wildcards
60: */
61:
62: u_long raw_sendspace = RAWSNDQ;
63: u_long raw_recvspace = RAWRCVQ;
64:
65: /*
66: * Allocate a control block and a nominal amount
67: * of buffer space for the socket.
68: */
69: raw_attach(so, proto)
70: register struct socket *so;
71: int proto;
72: {
73: register struct rawcb *rp = sotorawcb(so);
74: int error;
75:
76: /*
77: * It is assumed that raw_attach is called
78: * after space has been allocated for the
79: * rawcb.
80: */
81: if (rp == 0)
82: return (ENOBUFS);
83: if (error = soreserve(so, raw_sendspace, raw_recvspace))
84: return (error);
85: rp->rcb_socket = so;
86: rp->rcb_proto.sp_family = so->so_proto->pr_domain->dom_family;
87: rp->rcb_proto.sp_protocol = proto;
88: insque(rp, &rawcb);
89: return (0);
90: }
91:
92: /*
93: * Detach the raw connection block and discard
94: * socket resources.
95: */
96: raw_detach(rp)
97: register struct rawcb *rp;
98: {
99: struct socket *so = rp->rcb_socket;
100:
101: so->so_pcb = 0;
102: sofree(so);
103: remque(rp);
104: #ifdef notdef
105: if (rp->rcb_laddr)
106: m_freem(dtom(rp->rcb_laddr));
107: rp->rcb_laddr = 0;
108: #endif
109: free((caddr_t)(rp), M_PCB);
110: }
111:
112: /*
113: * Disconnect and possibly release resources.
114: */
115: raw_disconnect(rp)
116: struct rawcb *rp;
117: {
118:
119: #ifdef notdef
120: if (rp->rcb_faddr)
121: m_freem(dtom(rp->rcb_faddr));
122: rp->rcb_faddr = 0;
123: #endif
124: if (rp->rcb_socket->so_state & SS_NOFDREF)
125: raw_detach(rp);
126: }
127:
128: #ifdef notdef
129: raw_bind(so, nam)
130: register struct socket *so;
131: struct mbuf *nam;
132: {
133: struct sockaddr *addr = mtod(nam, struct sockaddr *);
134: register struct rawcb *rp;
135:
136: if (ifnet == 0)
137: return (EADDRNOTAVAIL);
138: rp = sotorawcb(so);
139: nam = m_copym(nam, 0, M_COPYALL, M_WAITOK);
140: rp->rcb_laddr = mtod(nam, struct sockaddr *);
141: return (0);
142: }
143: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.