Changeset View
Changeset View
Standalone View
Standalone View
sys/opencrypto/ktls_ocf.c
| Show First 20 Lines • Show All 70 Lines • ▼ Show 20 Lines | |||||
| SYSCTL_DECL(_kern_ipc_tls); | SYSCTL_DECL(_kern_ipc_tls); | ||||
| SYSCTL_DECL(_kern_ipc_tls_stats); | SYSCTL_DECL(_kern_ipc_tls_stats); | ||||
| static SYSCTL_NODE(_kern_ipc_tls_stats, OID_AUTO, ocf, | static SYSCTL_NODE(_kern_ipc_tls_stats, OID_AUTO, ocf, | ||||
| CTLFLAG_RD | CTLFLAG_MPSAFE, 0, | CTLFLAG_RD | CTLFLAG_MPSAFE, 0, | ||||
| "Kernel TLS offload via OCF stats"); | "Kernel TLS offload via OCF stats"); | ||||
| static COUNTER_U64_DEFINE_EARLY(ocf_tls10_cbc_crypts); | static COUNTER_U64_DEFINE_EARLY(ocf_tls10_cbc_encrypts); | ||||
| SYSCTL_COUNTER_U64(_kern_ipc_tls_stats_ocf, OID_AUTO, tls10_cbc_crypts, | SYSCTL_COUNTER_U64(_kern_ipc_tls_stats_ocf, OID_AUTO, tls10_cbc_encrypts, | ||||
| CTLFLAG_RD, &ocf_tls10_cbc_crypts, | CTLFLAG_RD, &ocf_tls10_cbc_encrypts, | ||||
| "Total number of OCF TLS 1.0 CBC encryption operations"); | "Total number of OCF TLS 1.0 CBC encryption operations"); | ||||
| static COUNTER_U64_DEFINE_EARLY(ocf_tls11_cbc_crypts); | static COUNTER_U64_DEFINE_EARLY(ocf_tls11_cbc_encrypts); | ||||
| SYSCTL_COUNTER_U64(_kern_ipc_tls_stats_ocf, OID_AUTO, tls11_cbc_crypts, | SYSCTL_COUNTER_U64(_kern_ipc_tls_stats_ocf, OID_AUTO, tls11_cbc_encrypts, | ||||
| CTLFLAG_RD, &ocf_tls11_cbc_crypts, | CTLFLAG_RD, &ocf_tls11_cbc_encrypts, | ||||
| "Total number of OCF TLS 1.1/1.2 CBC encryption operations"); | "Total number of OCF TLS 1.1/1.2 CBC encryption operations"); | ||||
| static COUNTER_U64_DEFINE_EARLY(ocf_tls12_gcm_crypts); | static COUNTER_U64_DEFINE_EARLY(ocf_tls12_gcm_decrypts); | ||||
| SYSCTL_COUNTER_U64(_kern_ipc_tls_stats_ocf, OID_AUTO, tls12_gcm_crypts, | SYSCTL_COUNTER_U64(_kern_ipc_tls_stats_ocf, OID_AUTO, tls12_gcm_decrypts, | ||||
| CTLFLAG_RD, &ocf_tls12_gcm_crypts, | CTLFLAG_RD, &ocf_tls12_gcm_decrypts, | ||||
| "Total number of OCF TLS 1.2 GCM decryption operations"); | |||||
| static COUNTER_U64_DEFINE_EARLY(ocf_tls12_gcm_encrypts); | |||||
| SYSCTL_COUNTER_U64(_kern_ipc_tls_stats_ocf, OID_AUTO, tls12_gcm_encrypts, | |||||
| CTLFLAG_RD, &ocf_tls12_gcm_encrypts, | |||||
| "Total number of OCF TLS 1.2 GCM encryption operations"); | "Total number of OCF TLS 1.2 GCM encryption operations"); | ||||
| static COUNTER_U64_DEFINE_EARLY(ocf_tls12_chacha20_crypts); | static COUNTER_U64_DEFINE_EARLY(ocf_tls12_chacha20_decrypts); | ||||
| SYSCTL_COUNTER_U64(_kern_ipc_tls_stats_ocf, OID_AUTO, tls12_chacha20_crypts, | SYSCTL_COUNTER_U64(_kern_ipc_tls_stats_ocf, OID_AUTO, tls12_chacha20_decrypts, | ||||
| CTLFLAG_RD, &ocf_tls12_chacha20_crypts, | CTLFLAG_RD, &ocf_tls12_chacha20_decrypts, | ||||
| "Total number of OCF TLS 1.2 Chacha20-Poly1305 decryption operations"); | |||||
| static COUNTER_U64_DEFINE_EARLY(ocf_tls12_chacha20_encrypts); | |||||
| SYSCTL_COUNTER_U64(_kern_ipc_tls_stats_ocf, OID_AUTO, tls12_chacha20_encrypts, | |||||
| CTLFLAG_RD, &ocf_tls12_chacha20_encrypts, | |||||
| "Total number of OCF TLS 1.2 Chacha20-Poly1305 encryption operations"); | "Total number of OCF TLS 1.2 Chacha20-Poly1305 encryption operations"); | ||||
| static COUNTER_U64_DEFINE_EARLY(ocf_tls13_gcm_crypts); | static COUNTER_U64_DEFINE_EARLY(ocf_tls13_gcm_encrypts); | ||||
| SYSCTL_COUNTER_U64(_kern_ipc_tls_stats_ocf, OID_AUTO, tls13_gcm_crypts, | SYSCTL_COUNTER_U64(_kern_ipc_tls_stats_ocf, OID_AUTO, tls13_gcm_encrypts, | ||||
| CTLFLAG_RD, &ocf_tls13_gcm_crypts, | CTLFLAG_RD, &ocf_tls13_gcm_encrypts, | ||||
| "Total number of OCF TLS 1.3 GCM encryption operations"); | "Total number of OCF TLS 1.3 GCM encryption operations"); | ||||
| static COUNTER_U64_DEFINE_EARLY(ocf_tls13_chacha20_crypts); | static COUNTER_U64_DEFINE_EARLY(ocf_tls13_chacha20_encrypts); | ||||
| SYSCTL_COUNTER_U64(_kern_ipc_tls_stats_ocf, OID_AUTO, tls13_chacha20_crypts, | SYSCTL_COUNTER_U64(_kern_ipc_tls_stats_ocf, OID_AUTO, tls13_chacha20_encrypts, | ||||
| CTLFLAG_RD, &ocf_tls13_chacha20_crypts, | CTLFLAG_RD, &ocf_tls13_chacha20_encrypts, | ||||
| "Total number of OCF TLS 1.3 Chacha20-Poly1305 encryption operations"); | "Total number of OCF TLS 1.3 Chacha20-Poly1305 encryption operations"); | ||||
| static COUNTER_U64_DEFINE_EARLY(ocf_inplace); | static COUNTER_U64_DEFINE_EARLY(ocf_inplace); | ||||
| SYSCTL_COUNTER_U64(_kern_ipc_tls_stats_ocf, OID_AUTO, inplace, | SYSCTL_COUNTER_U64(_kern_ipc_tls_stats_ocf, OID_AUTO, inplace, | ||||
| CTLFLAG_RD, &ocf_inplace, | CTLFLAG_RD, &ocf_inplace, | ||||
| "Total number of OCF in-place operations"); | "Total number of OCF in-place operations"); | ||||
| static COUNTER_U64_DEFINE_EARLY(ocf_separate_output); | static COUNTER_U64_DEFINE_EARLY(ocf_separate_output); | ||||
| ▲ Show 20 Lines • Show All 220 Lines • ▼ Show 20 Lines | if (outiov != NULL) { | ||||
| uio->uio_offset = 0; | uio->uio_offset = 0; | ||||
| uio->uio_segflg = UIO_SYSSPACE; | uio->uio_segflg = UIO_SYSSPACE; | ||||
| uio->uio_td = curthread; | uio->uio_td = curthread; | ||||
| uio->uio_resid = crp->crp_payload_length; | uio->uio_resid = crp->crp_payload_length; | ||||
| crypto_use_output_uio(crp, uio); | crypto_use_output_uio(crp, uio); | ||||
| } | } | ||||
| if (os->implicit_iv) | if (os->implicit_iv) | ||||
| counter_u64_add(ocf_tls10_cbc_crypts, 1); | counter_u64_add(ocf_tls10_cbc_encrypts, 1); | ||||
| else | else | ||||
| counter_u64_add(ocf_tls11_cbc_crypts, 1); | counter_u64_add(ocf_tls11_cbc_encrypts, 1); | ||||
| if (outiov != NULL) | if (outiov != NULL) | ||||
| counter_u64_add(ocf_separate_output, 1); | counter_u64_add(ocf_separate_output, 1); | ||||
| else | else | ||||
| counter_u64_add(ocf_inplace, 1); | counter_u64_add(ocf_inplace, 1); | ||||
| error = ktls_ocf_dispatch(os, crp); | error = ktls_ocf_dispatch(os, crp); | ||||
| crypto_destroyreq(crp); | crypto_destroyreq(crp); | ||||
| ▲ Show 20 Lines • Show All 75 Lines • ▼ Show 20 Lines | if (outiov != NULL) { | ||||
| crypto_use_output_uio(crp, uio); | crypto_use_output_uio(crp, uio); | ||||
| } else | } else | ||||
| crp->crp_digest_start = crp->crp_payload_start + | crp->crp_digest_start = crp->crp_payload_start + | ||||
| crp->crp_payload_length; | crp->crp_payload_length; | ||||
| crp->crp_op = CRYPTO_OP_ENCRYPT | CRYPTO_OP_COMPUTE_DIGEST; | crp->crp_op = CRYPTO_OP_ENCRYPT | CRYPTO_OP_COMPUTE_DIGEST; | ||||
| crp->crp_flags = CRYPTO_F_CBIMM | CRYPTO_F_IV_SEPARATE; | crp->crp_flags = CRYPTO_F_CBIMM | CRYPTO_F_IV_SEPARATE; | ||||
| if (tls->params.cipher_algorithm == CRYPTO_AES_NIST_GCM_16) | if (tls->params.cipher_algorithm == CRYPTO_AES_NIST_GCM_16) | ||||
| counter_u64_add(ocf_tls12_gcm_crypts, 1); | counter_u64_add(ocf_tls12_gcm_encrypts, 1); | ||||
| else | else | ||||
| counter_u64_add(ocf_tls12_chacha20_crypts, 1); | counter_u64_add(ocf_tls12_chacha20_encrypts, 1); | ||||
| if (outiov != NULL) | if (outiov != NULL) | ||||
| counter_u64_add(ocf_separate_output, 1); | counter_u64_add(ocf_separate_output, 1); | ||||
| else | else | ||||
| counter_u64_add(ocf_inplace, 1); | counter_u64_add(ocf_inplace, 1); | ||||
| if (tls->sync_dispatch) { | if (tls->sync_dispatch) { | ||||
| error = ktls_ocf_dispatch(os, crp); | error = ktls_ocf_dispatch(os, crp); | ||||
| crypto_destroyreq(crp); | crypto_destroyreq(crp); | ||||
| } else | } else | ||||
| ▲ Show 20 Lines • Show All 49 Lines • ▼ Show 20 Lines | ktls_ocf_tls12_aead_decrypt(struct ktls_session *tls, | ||||
| crp.crp_payload_length = tls_comp_len; | crp.crp_payload_length = tls_comp_len; | ||||
| crp.crp_digest_start = crp.crp_payload_start + crp.crp_payload_length; | crp.crp_digest_start = crp.crp_payload_start + crp.crp_payload_length; | ||||
| crp.crp_op = CRYPTO_OP_DECRYPT | CRYPTO_OP_VERIFY_DIGEST; | crp.crp_op = CRYPTO_OP_DECRYPT | CRYPTO_OP_VERIFY_DIGEST; | ||||
| crp.crp_flags = CRYPTO_F_CBIMM | CRYPTO_F_IV_SEPARATE; | crp.crp_flags = CRYPTO_F_CBIMM | CRYPTO_F_IV_SEPARATE; | ||||
| crypto_use_mbuf(&crp, m); | crypto_use_mbuf(&crp, m); | ||||
| if (tls->params.cipher_algorithm == CRYPTO_AES_NIST_GCM_16) | if (tls->params.cipher_algorithm == CRYPTO_AES_NIST_GCM_16) | ||||
| counter_u64_add(ocf_tls12_gcm_crypts, 1); | counter_u64_add(ocf_tls12_gcm_decrypts, 1); | ||||
| else | else | ||||
| counter_u64_add(ocf_tls12_chacha20_crypts, 1); | counter_u64_add(ocf_tls12_chacha20_decrypts, 1); | ||||
| error = ktls_ocf_dispatch(os, &crp); | error = ktls_ocf_dispatch(os, &crp); | ||||
| crypto_destroyreq(&crp); | crypto_destroyreq(&crp); | ||||
| *trailer_len = tls->params.tls_tlen; | *trailer_len = tls->params.tls_tlen; | ||||
| return (error); | return (error); | ||||
| } | } | ||||
| static int | static int | ||||
| ▲ Show 20 Lines • Show All 54 Lines • ▼ Show 20 Lines | crp->crp_digest_start = crp->crp_payload_start + | ||||
| crp->crp_payload_length; | crp->crp_payload_length; | ||||
| crp->crp_op = CRYPTO_OP_ENCRYPT | CRYPTO_OP_COMPUTE_DIGEST; | crp->crp_op = CRYPTO_OP_ENCRYPT | CRYPTO_OP_COMPUTE_DIGEST; | ||||
| crp->crp_flags = CRYPTO_F_CBIMM | CRYPTO_F_IV_SEPARATE; | crp->crp_flags = CRYPTO_F_CBIMM | CRYPTO_F_IV_SEPARATE; | ||||
| memcpy(crp->crp_iv, nonce, sizeof(nonce)); | memcpy(crp->crp_iv, nonce, sizeof(nonce)); | ||||
| if (tls->params.cipher_algorithm == CRYPTO_AES_NIST_GCM_16) | if (tls->params.cipher_algorithm == CRYPTO_AES_NIST_GCM_16) | ||||
| counter_u64_add(ocf_tls13_gcm_crypts, 1); | counter_u64_add(ocf_tls13_gcm_encrypts, 1); | ||||
| else | else | ||||
| counter_u64_add(ocf_tls13_chacha20_crypts, 1); | counter_u64_add(ocf_tls13_chacha20_encrypts, 1); | ||||
| if (outiov != NULL) | if (outiov != NULL) | ||||
| counter_u64_add(ocf_separate_output, 1); | counter_u64_add(ocf_separate_output, 1); | ||||
| else | else | ||||
| counter_u64_add(ocf_inplace, 1); | counter_u64_add(ocf_inplace, 1); | ||||
| if (tls->sync_dispatch) { | if (tls->sync_dispatch) { | ||||
| error = ktls_ocf_dispatch(os, crp); | error = ktls_ocf_dispatch(os, crp); | ||||
| crypto_destroyreq(crp); | crypto_destroyreq(crp); | ||||
| } else | } else | ||||
| ▲ Show 20 Lines • Show All 185 Lines • Show Last 20 Lines | |||||