mirror of
https://github.com/opnsense/src.git
synced 2026-06-10 17:22:46 -04:00
When receiving an SCTP/UDP packet and the interface performed
the UDP checksum computation and signals that it was OK, clear this bit when passing the packet to SCTP. Since the bits indicating a valid UDP checksum and a valid SCTP checksum are the same, the SCTP stack would assume that also an SCTP checksum check has been performed. MFC after: 1 week
This commit is contained in:
parent
3ec75a6ccf
commit
52f175be70
1 changed files with 12 additions and 0 deletions
|
|
@ -6957,6 +6957,18 @@ sctp_recv_udp_tunneled_packet(struct mbuf *m, int off, struct inpcb *inp,
|
|||
for (last = m; last->m_next; last = last->m_next);
|
||||
last->m_next = sp;
|
||||
m->m_pkthdr.len += sp->m_pkthdr.len;
|
||||
/*
|
||||
* The CSUM_DATA_VALID flags indicates that the HW checked the UDP
|
||||
* checksum and it was valid. Since CSUM_DATA_VALID ==
|
||||
* CSUM_SCTP_VALID this would imply that the HW also verified the
|
||||
* SCTP checksum. Therefore, clear the bit.
|
||||
*/
|
||||
SCTPDBG(SCTP_DEBUG_CRCOFFLOAD,
|
||||
"sctp_recv_udp_tunneled_packet(): Packet of length %d received on %s with csum_flags 0x%b.\n",
|
||||
m->m_pkthdr.len,
|
||||
if_name(m->m_pkthdr.rcvif),
|
||||
(int)m->m_pkthdr.csum_flags, CSUM_BITS);
|
||||
m->m_pkthdr.csum_flags &= ~CSUM_DATA_VALID;
|
||||
iph = mtod(m, struct ip *);
|
||||
switch (iph->ip_v) {
|
||||
#ifdef INET
|
||||
|
|
|
|||
Loading…
Reference in a new issue