|
|
1.1 ! root 1: /* ! 2: * @(#)raw_hy.c 7.1 6/5/86 ! 3: * ! 4: * 4.3 BSD Unix kernel - NSC HYPERchannel support ! 5: * ! 6: * $Header: raw_hy.c,v 3.1 84/02/15 04:27:44 steveg Exp $ ! 7: * $Locker: $ ! 8: * ! 9: * Copyright (c) 1984, Tektronix Inc. ! 10: * All Rights Reserved ! 11: * ! 12: */ ! 13: ! 14: #include "hy.h" ! 15: #if NHY > 0 ! 16: ! 17: #include "param.h" ! 18: #include "mbuf.h" ! 19: #include "socket.h" ! 20: #include "protosw.h" ! 21: #include "socketvar.h" ! 22: #include "errno.h" ! 23: ! 24: #include "../net/if.h" ! 25: #include "../net/route.h" ! 26: #include "../net/raw_cb.h" ! 27: ! 28: #include "../netinet/in.h" ! 29: #include "../netinet/in_systm.h" ! 30: #include "../netinet/in_var.h" ! 31: #include "if_hy.h" ! 32: ! 33: /* ! 34: * Raw interface to HYPERchannel. ! 35: */ ! 36: ! 37: /* ! 38: * Generate HYPERchannel leader and pass packet to hyoutput. ! 39: * The user must create a skeletal leader in order to ! 40: * communicate message type, message subtype, etc. ! 41: * We don't really check the header supplied by the user. ! 42: */ ! 43: rhy_output(m, so) ! 44: register struct mbuf *m; ! 45: struct socket *so; ! 46: { ! 47: int error = 0; ! 48: register struct sockaddr_in *sin; ! 49: register struct rawcb *rp = sotorawcb(so); ! 50: struct in_ifaddr *ia; ! 51: ! 52: /* ! 53: * Verify user has supplied necessary space ! 54: * for the header. ! 55: */ ! 56: if ((m->m_off > MMAXOFF || m->m_len < sizeof(struct hym_hdr)) && ! 57: (m = m_pullup(m, sizeof(struct hym_hdr))) == 0) { ! 58: error = EMSGSIZE; /* XXX */ ! 59: goto bad; ! 60: } ! 61: ! 62: sin = (struct sockaddr_in *)&rp->rcb_faddr; ! 63: /* no routing here */ ! 64: ia = in_iaonnetof(in_netof(sin->sin_addr)); ! 65: if (ia) ! 66: return (hyoutput(ia->ia_ifp, m, (struct sockaddr *)sin)); ! 67: error = ENETUNREACH; ! 68: bad: ! 69: m_freem(m); ! 70: return (error); ! 71: } ! 72: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.