formatting pick-picks from chris torek@maryland.
SCCS-vsn: sys/netns/spp_usrreq.c 6.8
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
*
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
*
- * @(#)spp_usrreq.c 6.7 (Berkeley) %G%
+ * @(#)spp_usrreq.c 6.8 (Berkeley) %G%
panic("No nspcb in spp_input\n");
return;
}
panic("No nspcb in spp_input\n");
return;
}
if (cb == 0) goto bad;
if (m->m_len < sizeof(*si)) {
if (cb == 0) goto bad;
if (m->m_len < sizeof(*si)) {
- if ((m = m_pullup(m, sizeof(*si)))==0) {
+ if ((m = m_pullup(m, sizeof(*si))) == 0) {
spp_istat.hdrops++;
return;
}
spp_istat.hdrops++;
return;
}
- if (cb==0 || cb->s_nspcb->nsp_socket->so_options & SO_DEBUG || traceallspps)
+ if (cb == 0 || cb->s_nspcb->nsp_socket->so_options & SO_DEBUG || traceallspps)
spp_trace(SA_DROP, (u_char)ostate, cb, &spp_savesi, 0);
m_freem(m);
}
spp_trace(SA_DROP, (u_char)ostate, cb, &spp_savesi, 0);
m_freem(m);
}
goto present;
/*
* Update our news from them.
goto present;
/*
* Update our news from them.
*/
if (SSEQ_LT(si->si_seq,cb->s_ack)) {
spp_istat.bdreas++;
*/
if (SSEQ_LT(si->si_seq,cb->s_ack)) {
spp_istat.bdreas++;
- if (si->si_seq==cb->s_ack-1)
+ if (si->si_seq == cb->s_ack-1)
spp_istat.lstdup++;
return (1);
}
spp_istat.lstdup++;
return (1);
}
*/
for (q = cb->s_q.si_next; q!=&cb->s_q; q = q->si_next) {
*/
for (q = cb->s_q.si_next; q!=&cb->s_q; q = q->si_next) {
- if (si->si_seq==SI(q)->si_seq) return (1); /*duplicate */
+ if (si->si_seq == SI(q)->si_seq) return (1); /*duplicate */
if (SSEQ_LT(si->si_seq,SI(q)->si_seq)) break;
}
insque(si,q->si_prev);
if (SSEQ_LT(si->si_seq,SI(q)->si_seq)) break;
}
insque(si,q->si_prev);
* If in packet interface mode, show packet headers.
*/
for (q = cb->s_q.si_next; q!=&cb->s_q; q = q->si_next) {
* If in packet interface mode, show packet headers.
*/
for (q = cb->s_q.si_next; q!=&cb->s_q; q = q->si_next) {
- if (SI(q)->si_seq==cb->s_ack) {
+ if (SI(q)->si_seq == cb->s_ack) {
cb->s_ack++;
m = dtom(q);
if (SI(q)->si_cc & SP_OB) {
cb->s_ack++;
m = dtom(q);
if (SI(q)->si_cc & SP_OB) {
if (si->si_seq == badseq)
break;
}
if (si->si_seq == badseq)
break;
}
firstbad = m;
/*for (;;) {*/
/* calculate length */
firstbad = m;
/*for (;;) {*/
/* calculate length */
register struct sockbuf *sb = &(so->so_snd);
register int len = 0;
int mtu = cb->s_mtu;
register struct sockbuf *sb = &(so->so_snd);
register int len = 0;
int mtu = cb->s_mtu;
- int error = 0; u_short lookfor = 0;
+ int error = 0;
+ u_short lookfor = 0;
struct mbuf *mprev;
extern int idpcksum;
struct mbuf *mprev;
extern int idpcksum;
for (m = m0; m ; m = m->m_next) {
mprev = m;
len += m->m_len;
for (m = m0; m ; m = m->m_next) {
mprev = m;
len += m->m_len;
int off = 0;
while (len > mtu) {
m = m_copy(m0, off, mtu);
int off = 0;
while (len > mtu) {
m = m_copy(m0, off, mtu);
m_freem(m0);
return (ENOBUFS);
}
m_freem(m0);
return (ENOBUFS);
}
+ /*
+ * Force length even, by adding a "garbage byte" if
+ * necessary.
+ */
if (len & 1) {
m = mprev;
if (len & 1) {
m = mprev;
- if (m->m_len + m->m_off < MMAXOFF) {
+ if (m->m_len + m->m_off < MMAXOFF)
struct mbuf *m1 = m_get(M_DONTWAIT, MT_DATA);
if (m1 == 0) {
struct mbuf *m1 = m_get(M_DONTWAIT, MT_DATA);
if (m1 == 0) {
}
m1->m_len = 1;
m1->m_off = MMAXOFF - 1;
}
m1->m_len = 1;
m1->m_off = MMAXOFF - 1;
}
}
m = m_get(M_DONTWAIT, MT_HEADER);
}
}
m = m_get(M_DONTWAIT, MT_HEADER);
si = mtod(m, struct spidp *);
*si = cb->s_shdr;
if ((cb->s_flags & SF_PI) && (cb->s_flags & SF_HO)) {
si = mtod(m, struct spidp *);
*si = cb->s_shdr;
if ((cb->s_flags & SF_PI) && (cb->s_flags & SF_HO)) {
- register struct sphdr *sh = mtod(m0, struct sphdr *);
+ register struct sphdr *sh;
+ if (m0->m_len < sizeof (*sh)) {
+ if((m0 = m_pullup(m0, sizeof(*sh))) == NULL) {
+ (void) m_free(m);
+ m_freem(m0);
+ return (EINVAL);
+ }
+ m->m_next = m0;
+ }
+ sh = mtod(m0, struct sphdr *);
si->si_dt = sh->sp_dt;
si->si_cc |= sh->sp_cc & SP_EM;
m0->m_len -= sizeof (*sh);
si->si_dt = sh->sp_dt;
si->si_cc |= sh->sp_cc & SP_EM;
m0->m_len -= sizeof (*sh);
* have already guaranted there to be at least
* one garbage byte for the checksum, and
* extra bytes shouldn't hurt!
* have already guaranted there to be at least
* one garbage byte for the checksum, and
* extra bytes shouldn't hurt!
*/
if (len > sizeof(*si)) {
si->si_cc |= SP_OB;
*/
if (len > sizeof(*si)) {
si->si_cc |= SP_OB;
int credit = ((sb2->sb_mbmax - sb2->sb_mbcnt) / cb->s_mtu);
int alo = cb->s_ack + credit;
int credit = ((sb2->sb_mbmax - sb2->sb_mbcnt) / cb->s_mtu);
int alo = cb->s_ack + credit;
- if (cb->s_alo < alo) cb->s_alo = alo;
+ if (cb->s_alo < alo)
+ cb->s_alo = alo;
}
if (cb->s_oobflags & SF_SOOB) {
}
if (cb->s_oobflags & SF_SOOB) {
*/
if (SSEQ_LT(cb->s_snt, cb->s_ralo))
lookfor = cb->s_snt + 1;
*/
if (SSEQ_LT(cb->s_snt, cb->s_ralo))
lookfor = cb->s_snt + 1;
- else if (cb->s_force==(1+TCPT_REXMT)) {
+ else if (cb->s_force == (1+TCPT_REXMT)) {
lookfor = cb->s_rack;
} else if (SSEQ_LT(cb->s_ralo, cb->s_seq)) {
lookfor = 0;
lookfor = cb->s_rack;
} else if (SSEQ_LT(cb->s_ralo, cb->s_seq)) {
lookfor = 0;
- if (cb->s_timer[TCPT_PERSIST]==0) {
+ if (cb->s_timer[TCPT_PERSIST] == 0) {
+ /* tcp has cb->s_rxtshift = 0; here */
si = mtod(m, struct spidp *);
m = m->m_act;
if (SSEQ_LT(si->si_seq, cb->s_rack)) {
si = mtod(m, struct spidp *);
m = m->m_act;
if (SSEQ_LT(si->si_seq, cb->s_rack)) {
- if (si && (si->si_seq != lookfor)) si = 0;
+ if (si && (si->si_seq != lookfor))
+ si = 0;
* must make a copy of this packet for
* idp_output to monkey with
*/
* must make a copy of this packet for
* idp_output to monkey with
*/
- m = dtom(si);
- m = m_copy(m, 0, (int)M_COPYALL);
- if (m==NULL)
+ m = m_copy(dtom(si), 0, (int)M_COPYALL);
+ if (m == NULL)
return (ENOBUFS);
m0 = m;
si = mtod(m, struct spidp *);
return (ENOBUFS);
m0 = m;
si = mtod(m, struct spidp *);
* or one of the timers has gone off
* request an ack.
*/
* or one of the timers has gone off
* request an ack.
*/
- if (SSEQ_GEQ(cb->s_seq,cb->s_ralo))
+ if (SSEQ_GEQ(cb->s_seq, cb->s_ralo))
si->si_cc |= SP_SA;
if (cb->s_force) {
si->si_cc |= SP_SA;
cb->s_force = 0;
}
si->si_cc |= SP_SA;
if (cb->s_force) {
si->si_cc |= SP_SA;
cb->s_force = 0;
}
- /* If this is a new packet (and not a system packet),
+ /*
+ * If this is a new packet (and not a system packet),
* and we are not currently timing anything,
* time this one and ask for an ack.
*/
* and we are not currently timing anything,
* time this one and ask for an ack.
*/
- if (SSEQ_LT(cb->s_snt,si->si_seq) &&
- (!(si->si_cc & SP_SP))) {
+ if (SSEQ_LT(cb->s_snt, si->si_seq) && (!(si->si_cc & SP_SP))) {
cb->s_rtseq = si->si_seq;
cb->s_rtt = 1;
si->si_cc |= SP_SA;
cb->s_rtseq = si->si_seq;
cb->s_rtt = 1;
si->si_cc |= SP_SA;
* and this is a real packet
* then start the retransmit timer
*/
* and this is a real packet
* then start the retransmit timer
*/
- if (cb->s_timer[TCPT_REXMT]==0) {
+ if (cb->s_timer[TCPT_REXMT] == 0) {
TCPT_RANGESET(cb->s_timer[TCPT_REXMT],
tcp_beta * cb->s_srtt, TCPTV_MIN,
TCPTV_MAX);
TCPT_RANGESET(cb->s_timer[TCPT_REXMT],
tcp_beta * cb->s_srtt, TCPTV_MIN,
TCPTV_MAX);
if (idpcksum) {
si->si_sum = 0;
len = ntohs(si->si_len);
if (idpcksum) {
si->si_sum = 0;
len = ntohs(si->si_len);
- len = ((len - 1) | 1) + 1;
si->si_sum = ns_cksum(dtom(si), len);
} else
si->si_sum = 0xffff;
si->si_sum = ns_cksum(dtom(si), len);
} else
si->si_sum = 0xffff;
switch (req) {
case PRCO_GETOPT:
switch (req) {
case PRCO_GETOPT:
return (EINVAL);
m = m_get(M_DONTWAIT, MT_DATA);
return (EINVAL);
m = m_get(M_DONTWAIT, MT_DATA);
return (ENOBUFS);
switch (name) {
return (ENOBUFS);
switch (name) {
{
struct mbuf *mm = m_getclr(M_DONTWAIT,MT_PCB);
{
struct mbuf *mm = m_getclr(M_DONTWAIT,MT_PCB);
error = ENOBUFS;
break;
}
error = ENOBUFS;
break;
}
{
int error = spp_usrreq(so, req, m, nam, rights);
{
int error = spp_usrreq(so, req, m, nam, rights);
- if (req==PRU_ATTACH && error==0) {
+ if (req == PRU_ATTACH && error == 0) {
struct nspcb *nsp = sotonspcb(so);
((struct sppcb *)nsp->nsp_pcb)->s_flags |=
(SF_HI | SF_HO | SF_PI);
struct nspcb *nsp = sotonspcb(so);
((struct sppcb *)nsp->nsp_pcb)->s_flags |=
(SF_HI | SF_HO | SF_PI);