|
|
1.1 root 1: /*
2: * Copyright (c) 1988 Regents of the University of California.
3: * All rights reserved.
4: *
5: * This code is derived from software contributed to Berkeley by
6: * Tektronix Inc.
7: *
8: * Redistribution and use in source and binary forms, with or without
9: * modification, are permitted provided that the following conditions
10: * are met:
11: * 1. Redistributions of source code must retain the above copyright
12: * notice, this list of conditions and the following disclaimer.
13: * 2. Redistributions in binary form must reproduce the above copyright
14: * notice, this list of conditions and the following disclaimer in the
15: * documentation and/or other materials provided with the distribution.
16: * 3. All advertising materials mentioning features or use of this software
17: * must display the following acknowledgement:
18: * This product includes software developed by the University of
19: * California, Berkeley and its contributors.
20: * 4. Neither the name of the University nor the names of its contributors
21: * may be used to endorse or promote products derived from this software
22: * without specific prior written permission.
23: *
24: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
25: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
28: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34: * SUCH DAMAGE.
35: *
36: * @(#)raw_hy.c 7.4 (Berkeley) 12/16/90
37: */
38:
39: /*
40: * 4.3 BSD Unix kernel - NSC HYPERchannel support
41: *
42: * $Header: raw_hy.c,v 3.1 84/02/15 04:27:44 steveg Exp $
43: * $Locker: $
44: *
45: * Copyright (c) 1984, Tektronix Inc.
46: * All Rights Reserved
47: *
48: */
49:
50: #include "hy.h"
51: #if NHY > 0
52:
53: #include "sys/param.h"
54: #include "sys/mbuf.h"
55: #include "sys/socket.h"
56: #include "sys/protosw.h"
57: #include "sys/socketvar.h"
58: #include "sys/errno.h"
59:
60: #include "net/if.h"
61: #include "net/route.h"
62: #include "net/raw_cb.h"
63:
64: #include "netinet/in.h"
65: #include "netinet/in_systm.h"
66: #include "netinet/in_var.h"
67: #include "if_hy.h"
68:
69: /*
70: * Raw interface to HYPERchannel.
71: */
72:
73: /*
74: * Generate HYPERchannel leader and pass packet to hyoutput.
75: * The user must create a skeletal leader in order to
76: * communicate message type, message subtype, etc.
77: * We don't really check the header supplied by the user.
78: */
79: rhy_output(m, so)
80: register struct mbuf *m;
81: struct socket *so;
82: {
83: int error = 0;
84: register struct sockaddr_in *sin;
85: register struct rawcb *rp = sotorawcb(so);
86: struct in_ifaddr *ia;
87:
88: /*
89: * Verify user has supplied necessary space
90: * for the header.
91: */
92: if ((m->m_off > MMAXOFF || m->m_len < sizeof(struct hym_hdr)) &&
93: (m = m_pullup(m, sizeof(struct hym_hdr))) == 0) {
94: error = EMSGSIZE; /* XXX */
95: goto bad;
96: }
97:
98: sin = (struct sockaddr_in *)&rp->rcb_faddr;
99: /* no routing here */
100: ia = in_iaonnetof(in_netof(sin->sin_addr));
101: if (ia)
102: return (hyoutput(ia->ia_ifp, m, (struct sockaddr *)sin));
103: error = ENETUNREACH;
104: bad:
105: m_freem(m);
106: return (error);
107: }
108: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.