SCCS-vsn: sys/netinet/in_pcb.c 4.25
SCCS-vsn: sys/net/raw_cb.c 4.7
SCCS-vsn: sys/net/raw_cb.h 4.4
SCCS-vsn: sys/deprecated/netimp/raw_imp.c 4.10
SCCS-vsn: sys/netinet/raw_ip.c 4.10
SCCS-vsn: sys/deprecated/netpup/raw_pup.c 4.11
SCCS-vsn: sys/net/raw_usrreq.c 4.13
SCCS-vsn: sys/netinet/tcp_input.c 1.67
SCCS-vsn: sys/netinet/tcp_usrreq.c 1.56
SCCS-vsn: sys/netinet/udp_usrreq.c 4.26
-/* raw_imp.c 4.9 82/03/28 */
+/* raw_imp.c 4.10 82/04/10 */
#include "../h/param.h"
#include "../h/mbuf.h"
#include "../h/param.h"
#include "../h/mbuf.h"
#include "../net/if.h"
#include "../net/if_imp.h"
#include "../net/raw_cb.h"
#include "../net/if.h"
#include "../net/if_imp.h"
#include "../net/raw_cb.h"
/*
* Raw interface to IMP.
*/
/*
* Raw interface to IMP.
*/
-struct sockaddr_in rawimpaddr = { AF_IMPLINK };
/*
* Generate IMP leader and pass packet to impoutput.
* The user must create a skeletal leader in order to
/*
* Generate IMP leader and pass packet to impoutput.
* The user must create a skeletal leader in order to
struct socket *so;
{
struct mbuf *n;
struct socket *so;
{
struct mbuf *n;
register struct imp_leader *ip;
register struct sockaddr_in *sin;
register struct rawcb *rp = sotorawcb(so);
register struct imp_leader *ip;
register struct sockaddr_in *sin;
register struct rawcb *rp = sotorawcb(so);
* for the leader and check parameters in it.
*/
if ((m->m_off > MMAXOFF || m->m_len < sizeof(struct control_leader)) &&
* for the leader and check parameters in it.
*/
if ((m->m_off > MMAXOFF || m->m_len < sizeof(struct control_leader)) &&
- (m = m_pullup(m, sizeof(struct control_leader))) == 0)
- return (0);
+ (m = m_pullup(m, sizeof(struct control_leader))) == 0) {
+ error = EMSGSIZE; /* XXX */
+ goto bad;
+ }
cp = mtod(m, struct control_leader *);
if (cp->dl_mtype == IMPTYPE_DATA)
if (m->m_len < sizeof(struct imp_leader) &&
cp = mtod(m, struct control_leader *);
if (cp->dl_mtype == IMPTYPE_DATA)
if (m->m_len < sizeof(struct imp_leader) &&
- (m = m_pullup(m, sizeof(struct imp_leader))) == 0)
- return (0);
+ (m = m_pullup(m, sizeof(struct imp_leader))) == 0) {
+ error = EMSGSIZE; /* XXX */
+ goto bad;
+ }
ip = mtod(m, struct imp_leader *);
ip = mtod(m, struct imp_leader *);
- if (ip->il_format != IMP_NFF)
+ if (ip->il_format != IMP_NFF) {
+ error = EMSGSIZE; /* XXX */
#ifdef notdef
if (ip->il_link != IMPLINK_IP &&
#ifdef notdef
if (ip->il_link != IMPLINK_IP &&
- (ip->il_link < IMPLINK_LOWEXPER || ip->il_link > IMPLINK_HIGHEXPER))
+ (ip->il_link<IMPLINK_LOWEXPER || ip->il_link>IMPLINK_HIGHEXPER)) {
+ error = EPERM;
for (len = 0, n = m; n; n = n->m_next)
len += n->m_len;
ip->il_length = htons((u_short)(len << 3));
for (len = 0, n = m; n; n = n->m_next)
len += n->m_len;
ip->il_length = htons((u_short)(len << 3));
- sin = (struct sockaddr_in *)&rp->rcb_addr;
+ sin = (struct sockaddr_in *)&rp->rcb_faddr;
ip->il_network = sin->sin_addr.s_net;
ip->il_host = sin->sin_addr.s_host;
ip->il_imp = sin->sin_addr.s_imp;
/* no routing here */
ifp = if_ifonnetof(ip->il_network);
ip->il_network = sin->sin_addr.s_net;
ip->il_host = sin->sin_addr.s_host;
ip->il_imp = sin->sin_addr.s_imp;
/* no routing here */
ifp = if_ifonnetof(ip->il_network);
- if (ifp == 0)
- goto bad;
- return (impoutput(ifp, m, (struct sockaddr *)&rawimpaddr));
-
+ if (ifp)
+ return (impoutput(ifp, m, (struct sockaddr *)sin));
+ error = ENETUNREACH;
-/* raw_pup.c 4.10 82/04/04 */
+/* raw_pup.c 4.11 82/04/10 */
#include "../h/param.h"
#include "../h/mbuf.h"
#include "../h/param.h"
#include "../h/mbuf.h"
{
register struct rawcb *rp = sotorawcb(so);
register struct pup_header *pup;
{
register struct rawcb *rp = sotorawcb(so);
register struct pup_header *pup;
- struct sockaddr_pup *spup;
+ struct sockaddr_pup *dst;
struct ifnet *ifp;
COUNT(RPUP_OUTPUT);
struct ifnet *ifp;
COUNT(RPUP_OUTPUT);
* for the header and check parameters in it.
*/
if ((m->m_off > MMAXOFF || m->m_len < sizeof(struct pup_header)) &&
* for the header and check parameters in it.
*/
if ((m->m_off > MMAXOFF || m->m_len < sizeof(struct pup_header)) &&
- (m = m_pullup(m, sizeof(struct pup_header))) == 0)
+ (m = m_pullup(m, sizeof(struct pup_header))) == 0) {
+ error = EMSGSIZE; /* XXX */
pup = mtod(m, struct pup_header *);
pup = mtod(m, struct pup_header *);
- if (pup->pup_type == 0)
+ if (pup->pup_type == 0) {
+ error = EPERM; /* XXX */
- if (pup->pup_tcontrol && (pup->pup_tcontrol & ~PUP_TRACE))
+ }
+ if (pup->pup_tcontrol && (pup->pup_tcontrol & ~PUP_TRACE)) {
+ error = EPERM; /* XXX */
for (len = 0, n = m; n; n = n->m_next)
len += n->m_len;
pup->pup_length = len;
#if vax || pdp11
pup->pup_length = htons(pup->pup_length);
#endif
for (len = 0, n = m; n; n = n->m_next)
len += n->m_len;
pup->pup_length = len;
#if vax || pdp11
pup->pup_length = htons(pup->pup_length);
#endif
- spup = (struct sockaddr_pup *)&(rp->rcb_socket->so_addr);
- pup->pup_sport = spup->spup_addr;
- /* for now, assume user generates PUP checksum. */
- spup = (struct sockaddr_pup *)&rp->rcb_addr;
- pup->pup_dport = spup->spup_addr;
-
+ /* assume user generates PUP checksum. */
+ dst = (struct sockaddr_pup *)&rp->rcb_faddr;
+ pup->pup_dport = dst->spup_addr;
ifp = if_ifonnetof(pup->pup_dnet);
ifp = if_ifonnetof(pup->pup_dnet);
- if (ifp == 0)
- goto bad;
- return ((*ifp->if_output)(ifp, m, (struct sockaddr *)spup));
+ if (ifp) {
+ if (rp->rcb_flags & RAW_LADDR) {
+ register struct sockaddr_pup *src;
+ src = (struct sockaddr_pup *)&rp->rcb_laddr;
+ pup->pup_sport = src->spup_addr;
+ } else {
+ pup->pup_snet = ifp->if_net;
+ pup->pup_shost = ifp->if_host[0];
+ /* socket is specified by user */
+ }
+ return ((*ifp->if_output)(ifp, m, (struct sockaddr *)dst));
+ }
+ error = ENETUNREACH;
-/* raw_cb.c 4.6 82/03/28 */
+/* raw_cb.c 4.7 82/04/10 */
#include "../h/param.h"
#include "../h/systm.h"
#include "../h/param.h"
#include "../h/systm.h"
struct sockaddr_in inpup;
bzero((caddr_t)&inpup, sizeof(inpup));
struct sockaddr_in inpup;
bzero((caddr_t)&inpup, sizeof(inpup));
+ inpup.sin_family = AF_INET;
inpup.sin_addr.s_net = spup->sp_net;
inpup.sin_addr.s_impno = spup->sp_host;
if (inpup.sin_addr.s_addr &&
inpup.sin_addr.s_net = spup->sp_net;
inpup.sin_addr.s_impno = spup->sp_host;
if (inpup.sin_addr.s_addr &&
so->so_pcb = (caddr_t)rp;
rp->rcb_pcb = 0;
if (addr)
so->so_pcb = (caddr_t)rp;
rp->rcb_pcb = 0;
if (addr)
- bcopy((caddr_t)addr, (caddr_t)&so->so_addr, sizeof(*addr));
+ bcopy((caddr_t)addr, (caddr_t)&rp->rcb_laddr, sizeof(*addr));
+ rp->rcb_flags |= RAW_LADDR;
return (0);
bad2:
sbrelease(&so->so_snd);
return (0);
bad2:
sbrelease(&so->so_snd);
struct rawcb *rp;
{
COUNT(RAW_DISCONNECT);
struct rawcb *rp;
{
COUNT(RAW_DISCONNECT);
- rp->rcb_flags &= ~RAW_ADDR;
+ rp->rcb_flags &= ~RAW_FADDR;
if (rp->rcb_socket->so_state & SS_USERGONE)
raw_detach(rp);
}
if (rp->rcb_socket->so_state & SS_USERGONE)
raw_detach(rp);
}
struct sockaddr *addr;
{
COUNT(RAW_CONNADDR);
struct sockaddr *addr;
{
COUNT(RAW_CONNADDR);
- bcopy((caddr_t)addr, (caddr_t)&rp->rcb_addr, sizeof(*addr));
- rp->rcb_flags |= RAW_ADDR;
+ bcopy((caddr_t)addr, (caddr_t)&rp->rcb_faddr, sizeof(*addr));
+ rp->rcb_flags |= RAW_FADDR;
-/* raw_cb.h 4.3 82/02/02 */
+/* raw_cb.h 4.4 82/04/10 */
/*
* Raw protocol interface control block. Used
/*
* Raw protocol interface control block. Used
struct rawcb *rcb_next; /* doubly linked list */
struct rawcb *rcb_prev;
struct socket *rcb_socket; /* back pointer to socket */
struct rawcb *rcb_next; /* doubly linked list */
struct rawcb *rcb_prev;
struct socket *rcb_socket; /* back pointer to socket */
- struct sockaddr rcb_addr; /* destination address */
+ struct sockaddr rcb_faddr; /* destination address */
+ struct sockaddr rcb_laddr; /* socket's address */
caddr_t rcb_pcb; /* protocol specific stuff */
short rcb_flags;
};
caddr_t rcb_pcb; /* protocol specific stuff */
short rcb_flags;
};
* Since we can't interpret canonical addresses,
* we mark an address present in the flags field.
*/
* Since we can't interpret canonical addresses,
* we mark an address present in the flags field.
*/
-#define RAW_ADDR 01 /* got an address */
+#define RAW_LADDR 01
+#define RAW_FADDR 02
#define sotorawcb(so) ((struct rawcb *)(so)->so_pcb)
#define sotorawcb(so) ((struct rawcb *)(so)->so_pcb)
* input routine.
*/
struct raw_header {
* input routine.
*/
struct raw_header {
- struct sockproto raw_protocol; /* format of packet */
+ struct sockproto raw_proto; /* format of packet */
struct sockaddr raw_dst; /* dst address for rawintr */
struct sockaddr raw_src; /* src address for sbappendaddr */
};
struct sockaddr raw_dst; /* dst address for rawintr */
struct sockaddr raw_src; /* src address for sbappendaddr */
};
-/* raw_usrreq.c 4.12 82/04/10 */
+/* raw_usrreq.c 4.13 82/04/10 */
#include "../h/param.h"
#include "../h/mbuf.h"
#include "../h/param.h"
#include "../h/mbuf.h"
#include "../net/in_systm.h"
#include "../net/if.h"
#include "../net/raw_cb.h"
#include "../net/in_systm.h"
#include "../net/if.h"
#include "../net/raw_cb.h"
int rawqmaxlen = IFQ_MAXLEN;
int rawqmaxlen = IFQ_MAXLEN;
/*
* Raw protocol interface.
*/
/*
* Raw protocol interface.
*/
-raw_input(m0, pf, daf, saf)
+raw_input(m0, proto, dst, src)
- struct sockproto *pf;
- struct sockaddr *daf, *saf;
+ struct sockproto *proto;
+ struct sockaddr *dst, *src;
{
register struct mbuf *m;
struct raw_header *rh;
{
register struct mbuf *m;
struct raw_header *rh;
m->m_off = MMINOFF;
m->m_len = sizeof(struct raw_header);
rh = mtod(m, struct raw_header *);
m->m_off = MMINOFF;
m->m_len = sizeof(struct raw_header);
rh = mtod(m, struct raw_header *);
- rh->raw_dst = *daf;
- rh->raw_src = *saf;
- rh->raw_protocol = *pf;
+ rh->raw_dst = *dst;
+ rh->raw_src = *src;
+ rh->raw_proto = *proto;
/*
* Header now contains enough info to decide
/*
* Header now contains enough info to decide
int s;
struct mbuf *m;
register struct rawcb *rp;
int s;
struct mbuf *m;
register struct rawcb *rp;
- register struct socket *so;
- register struct protosw *pr;
- register struct sockproto *sp;
- register struct sockaddr *sa;
- struct raw_header *rawp;
+ register struct sockaddr *laddr;
+ register struct protosw *lproto;
+ struct raw_header *rh;
struct socket *last;
COUNT(RAWINTR);
struct socket *last;
COUNT(RAWINTR);
splx(s);
if (m == 0)
return;
splx(s);
if (m == 0)
return;
- rawp = mtod(m, struct raw_header *);
- sp = &rawp->raw_protocol;
- sa = &rawp->raw_dst;
+ rh = mtod(m, struct raw_header *);
/*
* Find the appropriate socket(s) in which to place this
/*
* Find the appropriate socket(s) in which to place this
*/
last = 0;
for (rp = rawcb.rcb_next; rp != &rawcb; rp = rp->rcb_next) {
*/
last = 0;
for (rp = rawcb.rcb_next; rp != &rawcb; rp = rp->rcb_next) {
- so = rp->rcb_socket;
- pr = so->so_proto;
- if (pr->pr_family != sp->sp_family ||
- (pr->pr_protocol && pr->pr_protocol != sp->sp_protocol))
+ lproto = rp->rcb_socket->so_proto;
+ if (lproto->pr_family != rh->raw_proto.sp_family)
- if (so->so_addr.sa_family &&
- sa->sa_family != so->so_addr.sa_family)
+ if (lproto->pr_protocol &&
+ lproto->pr_protocol != rh->raw_proto.sp_protocol)
+ continue;
+ laddr = &rp->rcb_laddr;
+ if (laddr->sa_family &&
+ laddr->sa_family != rh->raw_dst.sa_family)
continue;
/*
* We assume the lower level routines have
* placed the address in a canonical format
continue;
/*
* We assume the lower level routines have
* placed the address in a canonical format
- * suitable for a structure comparison. Packets
- * are duplicated for each receiving socket.
- *
- * SHOULD HAVE A NUMBER OF MECHANISMS FOR
- * MATCHING BASED ON rcb_flags
+ * suitable for a structure comparison.
- if ((rp->rcb_flags & RAW_ADDR) &&
- bcmp(sa->sa_data, so->so_addr.sa_data, 14) != 0)
+ if ((rp->rcb_flags & RAW_LADDR) &&
+ bcmp(laddr->sa_data, rh->raw_dst.sa_data, 14) != 0)
+ continue;
+ if ((rp->rcb_flags & RAW_FADDR) &&
+ bcmp(rp->rcb_faddr.sa_data, rh->raw_src.sa_data, 14) != 0)
continue;
/*
* To avoid extraneous packet copies, we keep
continue;
/*
* To avoid extraneous packet copies, we keep
if (n = m_copy(m->m_next, 0, (int)M_COPYALL))
goto nospace;
if (n = m_copy(m->m_next, 0, (int)M_COPYALL))
goto nospace;
- if (sbappendaddr(&last->so_rcv, &rawp->raw_src, n) == 0) {
- /*
- * Should drop notification of lost packet
- * into this guy's queue, but...
- */
+ if (sbappendaddr(&last->so_rcv, &rh->raw_src, n)==0) {
+ /* should notify about lost packet */
m_freem(n);
goto nospace;
}
sorwakeup(last);
}
nospace:
m_freem(n);
goto nospace;
}
sorwakeup(last);
}
nospace:
}
if (last == 0)
goto drop;
}
if (last == 0)
goto drop;
- if (sbappendaddr(&last->so_rcv, &rawp->raw_src, m->m_next) == 0)
-{
-printf("rawintr: sbappendaddr failed\n");
+ m = m_free(m); /* header */
+ if (sbappendaddr(&last->so_rcv, &rh->raw_src, m) == 0)
-}
- (void) m_free(m); /* generic header */
sorwakeup(last);
goto next;
drop:
sorwakeup(last);
goto next;
drop:
* nothing else around it should go to).
*/
case PRU_CONNECT:
* nothing else around it should go to).
*/
case PRU_CONNECT:
- if (rp->rcb_flags & RAW_ADDR)
+ if (rp->rcb_flags & RAW_FADDR)
return (EISCONN);
raw_connaddr(rp, (struct sockaddr *)addr);
soisconnected(so);
break;
case PRU_DISCONNECT:
return (EISCONN);
raw_connaddr(rp, (struct sockaddr *)addr);
soisconnected(so);
break;
case PRU_DISCONNECT:
- if ((rp->rcb_flags & RAW_ADDR) == 0)
+ if ((rp->rcb_flags & RAW_FADDR) == 0)
return (ENOTCONN);
raw_disconnect(rp);
soisdisconnected(so);
return (ENOTCONN);
raw_disconnect(rp);
soisdisconnected(so);
*/
case PRU_SEND:
if (addr) {
*/
case PRU_SEND:
if (addr) {
- if (rp->rcb_flags & RAW_ADDR)
+ if (rp->rcb_flags & RAW_FADDR)
return (EISCONN);
raw_connaddr(rp, (struct sockaddr *)addr);
return (EISCONN);
raw_connaddr(rp, (struct sockaddr *)addr);
- } else if ((rp->rcb_flags & RAW_ADDR) == 0)
+ } else if ((rp->rcb_flags & RAW_FADDR) == 0)
return (ENOTCONN);
error = (*so->so_proto->pr_output)(m, so);
if (addr)
return (ENOTCONN);
error = (*so->so_proto->pr_output)(m, so);
if (addr)
- rp->rcb_flags &= ~RAW_ADDR;
+ rp->rcb_flags &= ~RAW_FADDR;
error = EOPNOTSUPP;
break;
error = EOPNOTSUPP;
break;
+ case PRU_SOCKADDR:
+ bcopy(addr, (caddr_t)&rp->rcb_laddr, sizeof (struct sockaddr));
+ break;
+
default:
panic("raw_usrreq");
}
default:
panic("raw_usrreq");
}
-/* in_pcb.c 4.24 82/03/30 */
+/* in_pcb.c 4.25 82/04/10 */
#include "../h/param.h"
#include "../h/systm.h"
#include "../h/param.h"
#include "../h/systm.h"
inp->inp_socket = so;
insque(inp, head);
so->so_pcb = (caddr_t)inp;
inp->inp_socket = so;
insque(inp, head);
so->so_pcb = (caddr_t)inp;
return (0);
bad2:
sbrelease(&so->so_snd);
return (0);
bad2:
sbrelease(&so->so_snd);
inp->inp_lport,
0))
return (EADDRINUSE);
inp->inp_lport,
0))
return (EADDRINUSE);
- if (inp->inp_laddr.s_addr == 0) {
- struct sockaddr_in *sin2 =
- (struct sockaddr_in *)&inp->inp_socket->so_addr;
-
+ if (inp->inp_laddr.s_addr == 0)
inp->inp_laddr = ifaddr->sin_addr;
inp->inp_laddr = ifaddr->sin_addr;
- sin2->sin_addr = inp->inp_laddr;
- }
inp->inp_faddr = sin->sin_addr;
inp->inp_fport = sin->sin_port;
return (0);
}
inp->inp_faddr = sin->sin_addr;
inp->inp_fport = sin->sin_port;
return (0);
}
-in_setsockaddr(inp)
- struct inpcb *inp;
-{
- register struct sockaddr_in *sin =
- (struct sockaddr_in *)&inp->inp_socket->so_addr;
-
- sin->sin_family = AF_INET;
- sin->sin_addr = inp->inp_laddr;
- sin->sin_port = inp->inp_lport;
-}
-
in_pcbdisconnect(inp)
struct inpcb *inp;
{
in_pcbdisconnect(inp)
struct inpcb *inp;
{
(void) m_free(dtom(inp));
}
(void) m_free(dtom(inp));
}
+in_setsockaddr(sin, inp)
+ register struct sockaddr_in *sin;
+ register struct inpcb *inp;
+{
+ if (sin == 0 || inp == 0)
+ panic("setsockaddr_in");
+ bzero((caddr_t)sin, sizeof (*sin));
+ sin->sin_family = AF_INET;
+ sin->sin_port = inp->inp_lport;
+ sin->sin_addr = inp->inp_laddr;
+}
+
/*
* SHOULD ALLOW MATCH ON MULTI-HOMING ONLY
*/
/*
* SHOULD ALLOW MATCH ON MULTI-HOMING ONLY
*/
-/* raw_ip.c 4.9 82/03/28 */
+/* raw_ip.c 4.10 82/04/10 */
#include "../h/param.h"
#include "../h/mbuf.h"
#include "../h/socket.h"
#include "../h/protosw.h"
#include "../h/socketvar.h"
#include "../h/param.h"
#include "../h/mbuf.h"
#include "../h/socket.h"
#include "../h/protosw.h"
#include "../h/socketvar.h"
#include "../net/in.h"
#include "../net/in_systm.h"
#include "../net/ip.h"
#include "../net/ip_var.h"
#include "../net/raw_cb.h"
#include "../net/in.h"
#include "../net/in_systm.h"
#include "../net/ip.h"
#include "../net/ip_var.h"
#include "../net/raw_cb.h"
/*
* Raw interface to IP protocol.
/*
* Raw interface to IP protocol.
static struct sockaddr_in ripdst = { AF_INET };
static struct sockaddr_in ripsrc = { AF_INET };
static struct sockproto ripproto = { PF_INET };
static struct sockaddr_in ripdst = { AF_INET };
static struct sockaddr_in ripsrc = { AF_INET };
static struct sockproto ripproto = { PF_INET };
/*
* Setup generic address and protocol structures
* for raw_input routine, then pass them along with
/*
* Setup generic address and protocol structures
* for raw_input routine, then pass them along with
{
register struct mbuf *m;
register struct ip *ip;
{
register struct mbuf *m;
register struct ip *ip;
- register int len = 0;
- register struct rawcb *rp = sotorawcb(so);
+ int len = 0, error;
+ struct rawcb *rp = sotorawcb(so);
+ struct ifnet *ifp;
+ struct sockaddr_in *src;
len += m->m_len;
m = m_get(M_DONTWAIT);
if (m == 0) {
len += m->m_len;
m = m_get(M_DONTWAIT);
if (m == 0) {
- m_freem(m);
- return (0);
+ error = ENOBUFS;
+ goto bad;
ip = mtod(m, struct ip *);
ip->ip_p = so->so_proto->pr_protocol;
ip->ip_len = sizeof(struct ip) + len;
ip = mtod(m, struct ip *);
ip->ip_p = so->so_proto->pr_protocol;
ip->ip_len = sizeof(struct ip) + len;
- ip->ip_dst =
- ((struct sockaddr_in *)&rp->rcb_addr)->sin_addr;
- ip->ip_src =
- ((struct sockaddr_in *)&so->so_addr)->sin_addr;
+ ip->ip_dst = ((struct sockaddr_in *)&rp->rcb_faddr)->sin_addr;
+ /* local address may not be specified -- XXX */
+ ifp = if_ifonnetof(ip->ip_dst.s_net);
+ if (ifp == 0) {
+ error = ENETUNREACH;
+ goto bad;
+ }
+ if (rp->rcb_flags & RAW_LADDR)
+ src = (struct sockaddr_in *)&rp->rcb_laddr;
+ else {
+ if (ifp->if_addr.sa_family != AF_INET) {
+ error = EAFNOSUPPORT;
+ goto bad;
+ }
+ src = (struct sockaddr_in *)&ifp->if_addr;
+ }
+ ip->ip_src = src->sin_addr;
ip->ip_ttl = MAXTTL;
return (ip_output(m, (struct mbuf *)0, 0, 1));
ip->ip_ttl = MAXTTL;
return (ip_output(m, (struct mbuf *)0, 0, 1));
+bad:
+ m_freem(m);
+ return (error);
-/* tcp_input.c 1.66 82/04/01 */
+/* tcp_input.c 1.67 82/04/10 */
#include "../h/param.h"
#include "../h/systm.h"
#include "../h/param.h"
#include "../h/systm.h"
tp->iss = tcp_iss; tcp_iss += TCP_ISSINCR/2;
tp->irs = ti->ti_seq;
tcp_sendseqinit(tp);
tp->iss = tcp_iss; tcp_iss += TCP_ISSINCR/2;
tp->irs = ti->ti_seq;
tcp_sendseqinit(tp);
-/* tcp_usrreq.c 1.55 82/04/10 */
+/* tcp_usrreq.c 1.56 82/04/10 */
#include "../h/param.h"
#include "../h/systm.h"
#include "../h/param.h"
#include "../h/systm.h"
+ case PRU_SOCKADDR:
+ in_setsockaddr((struct sockaddr_in *)addr, inp);
+ break;
+
/*
* TCP slow timer went off; going through this
* routine for tracing's sake.
/*
* TCP slow timer went off; going through this
* routine for tracing's sake.
-/* udp_usrreq.c 4.25 82/04/10 */
+/* udp_usrreq.c 4.26 82/04/10 */
#include "../h/param.h"
#include "../h/dir.h"
#include "../h/param.h"
#include "../h/dir.h"
if (addr) {
in_pcbdisconnect(inp);
inp->inp_laddr = laddr;
if (addr) {
in_pcbdisconnect(inp);
inp->inp_laddr = laddr;
case PRU_CONTROL:
return (EOPNOTSUPP);
case PRU_CONTROL:
return (EOPNOTSUPP);
+ case PRU_SOCKADDR:
+ in_setsockaddr((struct sockaddr_in *)addr, inp);
+ break;
+
default:
panic("udp_usrreq");
}
default:
panic("udp_usrreq");
}