Use layer five checksum flags in the mbuf packet header to pass on crypto state.
The mbuf protocol flags get cleared between layers, and also it was discovered that M_DECRYPTED conflicts with M_HASFCS when receiving ethernet patckets. Add the proper CSUM_TLS_MASK and CSUM_TLS_DECRYPTED defines, and start using these instead of M_DECRYPTED inside the TCP LRO code. This change is needed by coming TLS RX hardware offload support patches. Suggested by: kib@ Reviewed by: jhb@ MFC after: 1 week Sponsored by: NVIDIA Networking
This commit is contained in:
parent
63378c84b4
commit
10a62eb109
@ -395,7 +395,8 @@ tcp_lro_parser(struct mbuf *m, struct lro_parser *po, struct lro_parser *pi, boo
|
||||
htons(m->m_pkthdr.ether_vtag) & htons(EVL_VLID_MASK);
|
||||
}
|
||||
/* Store decrypted flag, if any. */
|
||||
if (__predict_false(m->m_flags & M_DECRYPTED))
|
||||
if (__predict_false((m->m_pkthdr.csum_flags &
|
||||
CSUM_TLS_MASK) == CSUM_TLS_DECRYPTED))
|
||||
po->data.lro_flags |= LRO_FLAG_DECRYPTED;
|
||||
}
|
||||
|
||||
@ -833,6 +834,8 @@ tcp_flush_out_entry(struct lro_ctrl *lc, struct lro_entry *le)
|
||||
le->m_head->m_pkthdr.csum_flags = CSUM_DATA_VALID |
|
||||
CSUM_PSEUDO_HDR | CSUM_IP_CHECKED | CSUM_IP_VALID;
|
||||
le->m_head->m_pkthdr.csum_data = 0xffff;
|
||||
if (__predict_false(le->outer.data.lro_flags & LRO_FLAG_DECRYPTED))
|
||||
le->m_head->m_pkthdr.csum_flags |= CSUM_TLS_DECRYPTED;
|
||||
break;
|
||||
case LRO_TYPE_IPV6_TCP:
|
||||
csum = tcp_lro_update_checksum(&le->inner, le,
|
||||
@ -844,6 +847,8 @@ tcp_flush_out_entry(struct lro_ctrl *lc, struct lro_entry *le)
|
||||
le->m_head->m_pkthdr.csum_flags = CSUM_DATA_VALID |
|
||||
CSUM_PSEUDO_HDR;
|
||||
le->m_head->m_pkthdr.csum_data = 0xffff;
|
||||
if (__predict_false(le->outer.data.lro_flags & LRO_FLAG_DECRYPTED))
|
||||
le->m_head->m_pkthdr.csum_flags |= CSUM_TLS_DECRYPTED;
|
||||
break;
|
||||
case LRO_TYPE_NONE:
|
||||
switch (le->outer.data.lro_type) {
|
||||
@ -854,6 +859,8 @@ tcp_flush_out_entry(struct lro_ctrl *lc, struct lro_entry *le)
|
||||
le->m_head->m_pkthdr.csum_flags = CSUM_DATA_VALID |
|
||||
CSUM_PSEUDO_HDR | CSUM_IP_CHECKED | CSUM_IP_VALID;
|
||||
le->m_head->m_pkthdr.csum_data = 0xffff;
|
||||
if (__predict_false(le->outer.data.lro_flags & LRO_FLAG_DECRYPTED))
|
||||
le->m_head->m_pkthdr.csum_flags |= CSUM_TLS_DECRYPTED;
|
||||
break;
|
||||
case LRO_TYPE_IPV6_TCP:
|
||||
csum = tcp_lro_update_checksum(&le->outer, le,
|
||||
@ -862,6 +869,8 @@ tcp_flush_out_entry(struct lro_ctrl *lc, struct lro_entry *le)
|
||||
le->m_head->m_pkthdr.csum_flags = CSUM_DATA_VALID |
|
||||
CSUM_PSEUDO_HDR;
|
||||
le->m_head->m_pkthdr.csum_data = 0xffff;
|
||||
if (__predict_false(le->outer.data.lro_flags & LRO_FLAG_DECRYPTED))
|
||||
le->m_head->m_pkthdr.csum_flags |= CSUM_TLS_DECRYPTED;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
@ -721,6 +721,8 @@ m_epg_pagelen(const struct mbuf *m, int pidx, int pgoff)
|
||||
#define CSUM_UDP_IPV6 CSUM_IP6_UDP
|
||||
#define CSUM_TCP_IPV6 CSUM_IP6_TCP
|
||||
#define CSUM_SCTP_IPV6 CSUM_IP6_SCTP
|
||||
#define CSUM_TLS_MASK (CSUM_L5_CALC|CSUM_L5_VALID)
|
||||
#define CSUM_TLS_DECRYPTED CSUM_L5_CALC
|
||||
|
||||
/*
|
||||
* mbuf types describing the content of the mbuf (including external storage).
|
||||
|
Loading…
Reference in New Issue
Block a user