From: Hugo Landau Date: Wed, 24 Apr 2024 12:17:06 +0000 (+0100) Subject: QUIC: Document SSL_new_domain, etc. X-Git-Tag: openssl-3.5.0-alpha1~374 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2dae861fe062e28b5e87fc321ce6e66910feeb2d;p=thirdparty%2Fopenssl.git QUIC: Document SSL_new_domain, etc. Reviewed-by: Matt Caswell Reviewed-by: Neil Horman (Merged from https://github.com/openssl/openssl/pull/24971) --- diff --git a/doc/man3/SSL_new_domain.pod b/doc/man3/SSL_new_domain.pod new file mode 100644 index 00000000000..7a2233b0f25 --- /dev/null +++ b/doc/man3/SSL_new_domain.pod @@ -0,0 +1,156 @@ +=pod + +=head1 NAME + +SSL_new_domain, +SSL_is_domain, +SSL_get0_domain, +SSL_get_domain_flags, +SSL_CTX_set_domain_flags, +SSL_CTX_get_domain_flags, +SSL_DOMAIN_FLAG_SINGLE_THREAD, +SSL_DOMAIN_FLAG_MULTI_THREAD, +SSL_DOMAIN_FLAG_THREAD_ASSISTED, +SSL_DOMAIN_FLAG_BLOCKING, +SSL_DOMAIN_FLAG_LEGACY_BLOCKING - SSL object interface for managing QUIC event domains + +=head1 SYNOPSIS + + #include + + int SSL_CTX_set_domain_flags(SSL_CTX *ctx, uint64_t domain_flags); + int SSL_CTX_get_domain_flags(SSL_CTX *ctx, uint64_t *domain_flags); + + SSL *SSL_new_domain(SSL_CTX *ctx, uint64_t flags); + + int SSL_is_domain(SSL *ssl); + SSL *SSL_get0_domain(SSL *ssl); + + int SSL_get_domain_flags(SSL *ssl, uint64_t *domain_flags); + + #define SSL_DOMAIN_FLAG_SINGLE_THREAD + #define SSL_DOMAIN_FLAG_MULTI_THREAD + #define SSL_DOMAIN_FLAG_THREAD_ASSISTED + #define SSL_DOMAIN_FLAG_BLOCKING + #define SSL_DOMAIN_FLAG_LEGACY_BLOCKING + +=head1 DESCRIPTION + +The SSL_new_domain() function creates a new QUIC event domain, represented as an +SSL object. This is known as a QUIC domain SSL object (QDSO). The concept of a +QUIC event domain is discussed in detail in L. + +A QUIC domain SSL object can be managed in the same way as any other SSL object, +in that it can be refcounted and freed normally. A QUIC domain SSL object is the +parent of a number of child objects such as QUIC listener SSL objects. Once a +QUIC domain SSL object has been created, a listener can be created under it +using L. + +SSL_is_domain() returns 1 if a SSL object is a QUIC domain SSL object. + +SSL_get0_domain() obtains a pointer to the QUIC domain SSL object in a SSL +object hierarchy (if any). + +=head2 Domain Flags + +Domain flags are a set of flags which configure the concurrency model used by +the OpenSSL QUIC implementation. For more information, including the meanings of +the B values, see L. + +SSL_CTX_set_domain_flags() and SSL_CTX_get_domain_flags() can be used to set and +get the domain flags configured on a B which is using a QUIC +B. + +A default set of domain flags are configured on a B when it is +constructed, and these can be determined by calling SSL_CTX_get_domain_flags() +immediately after constructing a B. + +The flags configured on a B are used when an SSL object (such as a QUIC +domain SSL object) is created from an B. Subsequent to the domain flags +on a B do not affect SSL objects which have already been created. + +When calling SSL_new_domain(), if the I argument to +SSL_new_domain() does not specify one of the flags +B, B or +B, the domain flags configured on the +B are used as a default. Otherwise, the domain flags in I +are used. + +All SSL objects in a QUIC event domain use the same domain flags, and the domain +flags for a QUIC domain cannot be changed after construction. + +SSL_get_domain_flags() outputs the effective domain flags being used on any +given QUIC SSL object. + +=head2 Supported Operations + +A QUIC domain SSL object exists to contain other QUIC SSL objects and provide +unified event handling. As such, it supports only the following operations: + +=over 4 + +=item + +Standard reference counting and free operations, such as L and +L; + +=item + +Event processing and polling enablement APIs such as L, +and L. + +=item + +Creating listeners under the domain using L. + +=back + +The basic workflow of using a domain object is as follows: + +=over 4 + +=item + +Create a new domain object using SSL_new_domain() using a B which uses +a supported B (such as L); + +=item + +Create listeners under the domain using L. + +=back + +Refer to L for details on using listeners. + +Currently, domain SSL objects are only supported for QUIC usage via any QUIC +B. + +=head1 RETURN VALUES + +SSL_new_domain() returns a new domain SSL object or NULL on failure. + +SSL_is_domain() returns 0 or 1 depending on the type of the SSL object on +which it is called. + +SSL_get0_domain() returns an SSL object pointer (potentially to the same object +on which it is called) or NULL. + +=head1 SEE ALSO + +L, L, +L + +=head1 HISTORY + +These functions were added in OpenSSL @VERSION_QUIC_SERVER@. + +=head1 COPYRIGHT + +Copyright 2024 The OpenSSL Project Authors. All Rights Reserved. + +Licensed under the Apache License 2.0 (the "License"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file LICENSE in the source distribution or at +L. + +=cut