mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-18 10:35:55 +00:00
Pass the packet length explicitly around.
MFC after: 3 days
This commit is contained in:
parent
329204ff00
commit
20cc2188f3
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=237542
@ -2762,7 +2762,7 @@ sctp_process_data(struct mbuf **mm, int iphlen, int *offset, int length,
|
||||
/*
|
||||
* we need to report rwnd overrun drops.
|
||||
*/
|
||||
sctp_send_packet_dropped(stcb, net, *mm, iphlen, 0);
|
||||
sctp_send_packet_dropped(stcb, net, *mm, length, iphlen, 0);
|
||||
}
|
||||
if (num_chunks) {
|
||||
/*
|
||||
|
@ -6013,7 +6013,7 @@ sctp_input_with_port(struct mbuf *i_pak, int off, uint16_t port)
|
||||
#endif
|
||||
}
|
||||
if ((inp) && (stcb)) {
|
||||
sctp_send_packet_dropped(stcb, net, m, iphlen, 1);
|
||||
sctp_send_packet_dropped(stcb, net, m, mlen + iphlen, iphlen, 1);
|
||||
sctp_chunk_output(inp, stcb, SCTP_OUTPUT_FROM_INPUT_ERROR, SCTP_SO_NOT_LOCKED);
|
||||
} else if ((inp != NULL) && (stcb == NULL)) {
|
||||
refcount_up = 1;
|
||||
|
@ -11312,21 +11312,15 @@ sctp_send_ecn_echo(struct sctp_tcb *stcb, struct sctp_nets *net,
|
||||
|
||||
void
|
||||
sctp_send_packet_dropped(struct sctp_tcb *stcb, struct sctp_nets *net,
|
||||
struct mbuf *m, int iphlen, int bad_crc)
|
||||
struct mbuf *m, int len, int iphlen, int bad_crc)
|
||||
{
|
||||
struct sctp_association *asoc;
|
||||
struct sctp_pktdrop_chunk *drp;
|
||||
struct sctp_tmit_chunk *chk;
|
||||
uint8_t *datap;
|
||||
int len;
|
||||
int was_trunc = 0;
|
||||
struct ip *iph;
|
||||
|
||||
#ifdef INET6
|
||||
struct ip6_hdr *ip6h;
|
||||
|
||||
#endif
|
||||
int fullsz = 0, extra = 0;
|
||||
int fullsz = 0;
|
||||
long spc;
|
||||
int offset;
|
||||
struct sctp_chunkhdr *ch, chunk_buf;
|
||||
@ -11356,23 +11350,8 @@ sctp_send_packet_dropped(struct sctp_tcb *stcb, struct sctp_nets *net,
|
||||
sctp_free_a_chunk(stcb, chk, SCTP_SO_NOT_LOCKED);
|
||||
return;
|
||||
}
|
||||
switch (iph->ip_v) {
|
||||
#ifdef INET
|
||||
case IPVERSION:
|
||||
/* IPv4 */
|
||||
len = chk->send_size = iph->ip_len;
|
||||
break;
|
||||
#endif
|
||||
#ifdef INET6
|
||||
case IPV6_VERSION >> 4:
|
||||
/* IPv6 */
|
||||
ip6h = mtod(m, struct ip6_hdr *);
|
||||
len = chk->send_size = htons(ip6h->ip6_plen);
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
return;
|
||||
}
|
||||
len -= iphlen;
|
||||
chk->send_size = len;
|
||||
/* Validate that we do not have an ABORT in here. */
|
||||
offset = iphlen + sizeof(struct sctphdr);
|
||||
ch = (struct sctp_chunkhdr *)sctp_m_getptr(m, offset,
|
||||
@ -11408,7 +11387,7 @@ sctp_send_packet_dropped(struct sctp_tcb *stcb, struct sctp_nets *net,
|
||||
/*
|
||||
* only send 1 mtu worth, trim off the excess on the end.
|
||||
*/
|
||||
fullsz = len - extra;
|
||||
fullsz = len;
|
||||
len = min(stcb->asoc.smallest_mtu, MCLBYTES) - SCTP_MAX_OVERHEAD;
|
||||
was_trunc = 1;
|
||||
}
|
||||
|
@ -162,7 +162,7 @@ void sctp_send_ecn_echo(struct sctp_tcb *, struct sctp_nets *, uint32_t);
|
||||
|
||||
void
|
||||
sctp_send_packet_dropped(struct sctp_tcb *, struct sctp_nets *, struct mbuf *,
|
||||
int, int);
|
||||
int, int, int);
|
||||
|
||||
|
||||
|
||||
|
@ -183,7 +183,7 @@ sctp6_input(struct mbuf **i_pak, int *offp, int proto)
|
||||
}
|
||||
/* in6p's ref-count increased && stcb locked */
|
||||
if ((in6p) && (stcb)) {
|
||||
sctp_send_packet_dropped(stcb, net, m, iphlen, 1);
|
||||
sctp_send_packet_dropped(stcb, net, m, pkt_len, iphlen, 1);
|
||||
sctp_chunk_output((struct sctp_inpcb *)in6p, stcb, SCTP_OUTPUT_FROM_INPUT_ERROR, SCTP_SO_NOT_LOCKED);
|
||||
} else if ((in6p != NULL) && (stcb == NULL)) {
|
||||
refcount_up = 1;
|
||||
|
Loading…
Reference in New Issue
Block a user