Lines Matching defs:tlsp

103 static int ktls_setup_keys(struct tlspcb *tlsp,
122 struct tlspcb *tlsp;
124 tlsp = malloc(sizeof(*tlsp), M_CXGBE, M_ZERO | flags);
125 if (tlsp == NULL)
128 m_snd_tag_init(&tlsp->com, ifp, &t6_tls_tag_sw);
129 tlsp->vi = vi;
130 tlsp->sc = sc;
131 tlsp->ctrlq = &sc->sge.ctrlq[pi->port_id];
132 tlsp->tid = -1;
133 tlsp->tx_key_addr = -1;
135 return (tlsp);
150 struct tlspcb *tlsp, int atid, void *dst)
181 struct inpcb *inp, struct tlspcb *tlsp, int atid, void *dst)
216 struct inpcb *inp, struct tlspcb *tlsp, int atid)
223 tlsp->ce = t4_get_clip_entry(sc, &inp->in6p_laddr, true);
224 if (tlsp->ce == NULL)
228 wr = alloc_wrqe(ktls_act_open_cpl_size(isipv6), tlsp->ctrlq);
236 mk_ktls_act_open_req6(sc, vi, inp, tlsp, atid, wrtod(wr));
238 mk_ktls_act_open_req(sc, vi, inp, tlsp, atid, wrtod(wr));
240 tlsp->open_pending = true;
253 struct tlspcb *tlsp = lookup_atid(sc, atid);
254 struct inpcb *inp = tlsp->inp;
259 tlsp->tid = GET_TID(cpl);
262 tlsp->open_pending = false;
263 wakeup(tlsp);
276 write_set_tcb_field_ulp(struct tlspcb *tlsp, void *dst, struct sge_txq *txq,
287 V_ULP_TXPKT_CHANNELID(tlsp->vi->pi->port_id) | V_ULP_TXPKT_DEST(0) |
298 OPCODE_TID(cpl) = htobe32(MK_OPCODE_TID(CPL_SET_TCB_FIELD, tlsp->tid));
311 ktls_set_tcb_fields(struct tlspcb *tlsp, struct tcpcb *tp, struct sge_txq *txq)
325 tlsp->tid);
328 m->m_pkthdr.snd_tag = m_snd_tag_ref(&tlsp->com);
340 write_set_tcb_field_ulp(tlsp, dst, txq, W_TCB_T_FLAGS,
346 write_set_tcb_field_ulp(tlsp, dst, txq, W_TCB_SND_UNA_RAW,
352 write_set_tcb_field_ulp(tlsp, dst, txq, W_TCB_SND_MAX_RAW,
357 write_set_tcb_field_ulp(tlsp, dst, txq, W_TCB_TIMESTAMP_OFFSET,
377 struct tlspcb *tlsp;
437 tlsp = alloc_tlspcb(ifp, vi, M_WAITOK);
439 atid = alloc_atid(sc, tlsp);
452 tlsp->inline_key = true;
454 tlsp->tx_key_addr = keyid;
457 atid, tlsp->tx_key_addr);
467 tlsp->inp = inp;
471 tlsp->using_timestamps = true;
478 tlsp->using_timestamps = false;
480 error = send_ktls_act_open_req(sc, vi, inp, tlsp, atid);
489 while (tlsp->open_pending) {
494 error = rw_sleep(tlsp, &inp->inp_lock, 0, "t6tlsop", 0);
498 if (tlsp->tid < 0) {
514 tlsp->txq = txq;
516 error = ktls_set_tcb_fields(tlsp, tp, txq);
521 error = ktls_setup_keys(tlsp, tls, txq);
525 tlsp->enc_mode = t4_tls_cipher_mode(tls);
526 tlsp->tx_key_info_size = t4_tls_key_info_size(tls);
529 tlsp->scmd0.seqno_numivs = htobe32(V_SCMD_SEQ_NO_CTRL(3) |
533 V_SCMD_CIPH_MODE(tlsp->enc_mode) |
538 tlsp->scmd0.ivgen_hdrlen = V_SCMD_IV_GEN_CTRL(0) |
540 if (tlsp->inline_key)
541 tlsp->scmd0.ivgen_hdrlen |= V_SCMD_KEY_CTX_INLINE(1);
542 tlsp->scmd0.ivgen_hdrlen = htobe32(tlsp->scmd0.ivgen_hdrlen);
548 tlsp->scmd0_short.seqno_numivs = V_SCMD_SEQ_NO_CTRL(0) |
555 if (tlsp->enc_mode == SCMD_CIPH_MODE_AES_GCM)
556 tlsp->scmd0_short.seqno_numivs |=
559 tlsp->scmd0_short.seqno_numivs |=
560 V_SCMD_CIPH_MODE(tlsp->enc_mode);
561 tlsp->scmd0_short.seqno_numivs =
562 htobe32(tlsp->scmd0_short.seqno_numivs);
564 tlsp->scmd0_short.ivgen_hdrlen = V_SCMD_IV_GEN_CTRL(0) |
567 if (tlsp->inline_key)
568 tlsp->scmd0_short.ivgen_hdrlen |= V_SCMD_KEY_CTX_INLINE(1);
571 if (tlsp->enc_mode == SCMD_CIPH_MODE_AES_GCM)
576 *pt = &tlsp->com;
582 m_snd_tag_rele(&tlsp->com);
587 ktls_setup_keys(struct tlspcb *tlsp, const struct ktls_session *tls,
603 t4_tls_key_ctx(tls, KTLS_TX, &tlsp->keyctx);
604 if (tlsp->inline_key)
611 tlsp->tid);
614 m->m_pkthdr.snd_tag = m_snd_tag_ref(&tlsp->com);
619 t4_write_tlskey_wr(tls, KTLS_TX, tlsp->tid, 0, tlsp->tx_key_addr, kwr);
621 memcpy(kctx, &tlsp->keyctx, sizeof(*kctx));
633 CTR2(KTR_CXGBE, "%s: tid %d sent key WR", __func__, tlsp->tid);
638 ktls_base_wr_size(struct tlspcb *tlsp)
646 if (tlsp->inline_key)
647 wr_len += tlsp->tx_key_info_size;
658 ktls_tcp_payload_length(struct tlspcb *tlsp, struct mbuf *m_tls)
690 if (tlsp->enc_mode == SCMD_CIPH_MODE_AES_CBC &&
698 __func__, tlsp->tid, mlen, TLS_HEADER_LENGTH + plen);
709 ktls_payload_offset(struct tlspcb *tlsp, struct mbuf *m_tls)
726 if (tlsp->enc_mode == SCMD_CIPH_MODE_AES_GCM) {
756 ktls_wr_len(struct tlspcb *tlsp, struct mbuf *m, struct mbuf *m_tls,
768 tlen = ktls_tcp_payload_length(tlsp, m_tls);
780 __func__, tlsp->tid, m->m_len + m_tls->m_len);
793 offset = ktls_payload_offset(tlsp, m_tls);
798 wr_len = ktls_base_wr_size(tlsp);
890 struct tlspcb *tlsp;
909 tlsp = mst_to_tls(m->m_pkthdr.snd_tag);
913 tlsp->tid);
920 __func__, tlsp->tid);
930 __func__, tlsp->tid);
938 __func__, tlsp->tid, ip6->ip6_nxt);
946 __func__, tlsp->tid);
957 __func__, tlsp->tid, m->m_pkthdr.l2hlen,
975 wr_len = ktls_wr_len(tlsp, m, m_tls, &nsegs);
978 tlsp->tid, wr_len, nsegs);
1004 __func__, tlsp->tid, m->m_len);
1025 if (tlsp->using_timestamps)
1033 tlsp->tid, mbuf_len16(m), mbuf_nsegs(m));
1036 return (mp_ring_enqueue(tlsp->txq->r, items, 1, 256));
1314 ktls_write_tls_wr(struct tlspcb *tlsp, struct sge_txq *txq, void *dst,
1336 MPASS(tlsp->txq == txq);
1338 first_wr = (tlsp->prev_seq == 0 && tlsp->prev_ack == 0 &&
1339 tlsp->prev_win == 0);
1355 tlen = ktls_tcp_payload_length(tlsp, m_tls);
1363 __func__, tlsp->tid, (u_int)m_tls->m_epg_seqno);
1370 offset = ktls_payload_offset(tlsp, m_tls);
1373 __func__, tlsp->tid, (u_int)m_tls->m_epg_seqno, offset);
1433 if (tlsp->enc_mode == SCMD_CIPH_MODE_AES_CBC &&
1458 tlsp->tid, tlsp->l2te->idx);
1460 write_set_tcb_field_ulp(tlsp, out, txq, W_TCB_L2T_IX,
1461 V_TCB_L2T_IX(M_TCB_L2T_IX), V_TCB_L2T_IX(tlsp->l2te->idx));
1465 if (tsopt != NULL && tlsp->prev_tsecr != ntohl(tsopt[1])) {
1470 __func__, tlsp->tid);
1472 write_set_tcb_field_ulp(tlsp, out, txq, W_TCB_T_RTSEQ_RECENT,
1478 tlsp->prev_tsecr = ntohl(tsopt[1]);
1481 if (first_wr || tlsp->prev_seq != tx_max) {
1487 __func__, tlsp->tid, tx_max, tcp_seqno);
1489 write_set_tcb_field_ulp(tlsp, out, txq, W_TCB_TX_MAX,
1500 if (tlsp->prev_seq != tx_max || mtod(m_tls, vm_offset_t) != 0) {
1505 tlsp->tid);
1507 write_set_tcb_field_ulp(tlsp, out, txq, W_TCB_SND_UNA_RAW,
1518 tlsp->prev_seq = tcp_seqno + tlen;
1520 if (first_wr || tlsp->prev_ack != ntohl(tcp->th_ack)) {
1523 write_set_tcb_field_ulp(tlsp, out, txq, W_TCB_RCV_NXT,
1529 tlsp->prev_ack = ntohl(tcp->th_ack);
1532 if (first_wr || tlsp->prev_win != ntohs(tcp->th_win)) {
1535 write_set_tcb_field_ulp(tlsp, out, txq, W_TCB_RCV_WND,
1541 tlsp->prev_win = ntohs(tcp->th_win);
1552 twr_len = ktls_base_wr_size(tlsp);
1572 tlsp->sc->tlst.combo_wrs) {
1633 V_ULP_TXPKT_CHANNELID(tlsp->vi->pi->port_id) | V_ULP_TXPKT_DEST(0) |
1649 if (tlsp->inline_key)
1650 idata->len += tlsp->tx_key_info_size +
1675 sec_pdu->seqno_numivs = tlsp->scmd0_short.seqno_numivs;
1677 tlsp->scmd0_short.ivgen_hdrlen |
1692 if (tlsp->enc_mode == SCMD_CIPH_MODE_AES_GCM) {
1707 sec_pdu->seqno_numivs = tlsp->scmd0.seqno_numivs;
1708 sec_pdu->ivgen_hdrlen = tlsp->scmd0.ivgen_hdrlen;
1734 if (tlsp->inline_key) {
1735 memcpy(out, &tlsp->keyctx, tlsp->tx_key_info_size);
1736 out += tlsp->tx_key_info_size;
1742 V_ULPTX_LEN16(tlsp->tx_key_info_size >> 4));
1743 memrd->addr = htobe32(tlsp->tx_key_addr >> 5);
1756 OPCODE_TID(tx_data) = htonl(MK_OPCODE_TID(CPL_TX_DATA, tlsp->tid));
1759 tlsp->prev_mss = mss;
1760 } else if (tlsp->prev_mss != 0)
1761 mss = tlsp->prev_mss;
1763 mss = if_getmtu(tlsp->vi->ifp) -
1787 if (tlsp->enc_mode == SCMD_CIPH_MODE_AES_GCM) {
1788 memcpy(iv, tlsp->keyctx.u.txhdr.txsalt, SALT_SIZE);
1955 struct tlspcb *tlsp;
1967 tlsp = mst_to_tls(m->m_pkthdr.snd_tag);
1987 tlsp->tid);
2000 if (tlsp->l2te == NULL || tlsp->l2te->vlan != vlan_tag ||
2001 memcmp(tlsp->l2te->dmac, eh->ether_dhost, ETHER_ADDR_LEN) != 0) {
2003 if (tlsp->l2te)
2004 t4_l2t_release(tlsp->l2te);
2005 tlsp->l2te = t4_l2t_alloc_tls(tlsp->sc, txq, dst, &ndesc,
2006 vlan_tag, tlsp->vi->pi->hw_port, eh->ether_dhost);
2007 if (tlsp->l2te == NULL)
2037 if (tlsp->using_timestamps)
2041 tcp_seqno = tlsp->prev_seq;
2044 ndesc = ktls_write_tls_wr(tlsp, txq, dst, m, tcp, m_tls,
2064 tlsp->prev_seq, pidx);
2076 struct tlspcb *tlsp;
2078 tlsp = mst_to_tls(mst);
2079 sc = tlsp->sc;
2081 CTR2(KTR_CXGBE, "%s: tid %d", __func__, tlsp->tid);
2083 if (tlsp->l2te)
2084 t4_l2t_release(tlsp->l2te);
2085 if (tlsp->tid >= 0)
2086 release_tid(sc, tlsp->tid, tlsp->ctrlq);
2087 if (tlsp->ce)
2088 t4_release_clip_entry(sc, tlsp->ce);
2089 if (tlsp->tx_key_addr >= 0)
2090 t4_free_tls_keyid(sc, tlsp->tx_key_addr);
2092 zfree(tlsp, M_CXGBE);