OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [rtos/] [rtems/] [c/] [src/] [libnetworking/] [net/] [raw_cb.c] - Blame information for rev 507

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 30 unneback
/*
2
 * Copyright (c) 1980, 1986, 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
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
 *
33
 *      @(#)raw_cb.c    8.1 (Berkeley) 6/10/93
34
 * $Id: raw_cb.c,v 1.2 2001-09-27 12:01:54 chris Exp $
35
 */
36
 
37
#include <sys/param.h>
38
#include <sys/queue.h>
39
#include <sys/systm.h>
40
#include <sys/mbuf.h>
41
#include <sys/socket.h>
42
#include <sys/socketvar.h>
43
#include <sys/domain.h>
44
#include <sys/protosw.h>
45
#include <sys/errno.h>
46
 
47
#include <net/if.h>
48
#include <net/route.h>
49
#include <net/raw_cb.h>
50
#include <netinet/in.h>
51
 
52
/*
53
 * Routines to manage the raw protocol control blocks.
54
 *
55
 * TODO:
56
 *      hash lookups by protocol family/protocol + address family
57
 *      take care of unique address problems per AF?
58
 *      redo address binding to allow wildcards
59
 */
60
 
61
struct rawcb rawcb;
62
static u_long   raw_sendspace = RAWSNDQ;
63
static 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
int
70
raw_attach(so, proto)
71
        register struct socket *so;
72
        int proto;
73
{
74
        register struct rawcb *rp = sotorawcb(so);
75
        int error;
76
 
77
        /*
78
         * It is assumed that raw_attach is called
79
         * after space has been allocated for the
80
         * rawcb.
81
         */
82
        if (rp == 0)
83
                return (ENOBUFS);
84
        error = soreserve(so, raw_sendspace, raw_recvspace);
85
        if (error)
86
                return (error);
87
        rp->rcb_socket = so;
88
        rp->rcb_proto.sp_family = so->so_proto->pr_domain->dom_family;
89
        rp->rcb_proto.sp_protocol = proto;
90
        insque(rp, &rawcb);
91
        return (0);
92
}
93
 
94
/*
95
 * Detach the raw connection block and discard
96
 * socket resources.
97
 */
98
void
99
raw_detach(rp)
100
        register struct rawcb *rp;
101
{
102
        struct socket *so = rp->rcb_socket;
103
 
104
        so->so_pcb = 0;
105
        sofree(so);
106
        remque(rp);
107
#ifdef notdef
108
        if (rp->rcb_laddr)
109
                m_freem(dtom(rp->rcb_laddr));
110
        rp->rcb_laddr = 0;
111
#endif
112
        free((caddr_t)(rp), M_PCB);
113
}
114
 
115
/*
116
 * Disconnect and possibly release resources.
117
 */
118
void
119
raw_disconnect(rp)
120
        struct rawcb *rp;
121
{
122
 
123
#ifdef notdef
124
        if (rp->rcb_faddr)
125
                m_freem(dtom(rp->rcb_faddr));
126
        rp->rcb_faddr = 0;
127
#endif
128
        if (rp->rcb_socket->so_state & SS_NOFDREF)
129
                raw_detach(rp);
130
}
131
 
132
#ifdef notdef
133
int
134
raw_bind(so, nam)
135
        register struct socket *so;
136
        struct mbuf *nam;
137
{
138
        struct sockaddr *addr = mtod(nam, struct sockaddr *);
139
        register struct rawcb *rp;
140
 
141
        if (ifnet == 0)
142
                return (EADDRNOTAVAIL);
143
        rp = sotorawcb(so);
144
        nam = m_copym(nam, 0, M_COPYALL, M_WAITOK);
145
        rp->rcb_laddr = mtod(nam, struct sockaddr *);
146
        return (0);
147
}
148
#endif

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.