[PATCH] Stream pass: disabled passing from or to udp

Sergey Kandaurov pluknet at nginx.com
Fri May 3 16:24:16 UTC 2024


> On 26 Apr 2024, at 15:15, Roman Arutyunyan <arut at nginx.com> wrote:
> 
> # HG changeset patch
> # User Roman Arutyunyan <arut at nginx.com>
> # Date 1714057362 -14400
> #      Thu Apr 25 19:02:42 2024 +0400
> # Branch stable-1.26

wrong branch

> # Node ID a60cd9c99efcc1204e6d395104beb39883308c93
> # Parent  cdf74ac25b47ec928b53aa82ccc1c3d288a2f81c
> Stream pass: disabled passing from or to udp.
> 
> Passing from udp was not possible for the most part due to preread buffer
> restriction.  Passing to udp could occasionally work, but the connection would
> still be bound to the orignial listen rbtree, which prevented it from being

typo in "original"

> deleted on connection closure.
> 
> Also, passing to a QUIC listen socket is disabled by this change as well.

disabled for the same reasons?

> 
> diff --git a/src/stream/ngx_stream_pass_module.c b/src/stream/ngx_stream_pass_module.c
> --- a/src/stream/ngx_stream_pass_module.c
> +++ b/src/stream/ngx_stream_pass_module.c
> @@ -83,6 +83,11 @@ ngx_stream_pass_handler(ngx_stream_sessi
> 
>     c->log->action = "passing connection to port";
> 
> +    if (c->type == SOCK_DGRAM) {
> +        ngx_log_error(NGX_LOG_ERR, c->log, 0, "cannot pass udp connection");
> +        goto failed;
> +    }
> +
>     if (c->buffer && c->buffer->pos != c->buffer->last) {
>         ngx_log_error(NGX_LOG_ERR, c->log, 0,
>                       "cannot pass connection with preread data");
> @@ -217,6 +222,10 @@ ngx_stream_pass_cleanup(void *data)
> static ngx_int_t
> ngx_stream_pass_match(ngx_listening_t *ls, ngx_addr_t *addr)
> {
> +    if (ls->type == SOCK_DGRAM) {
> +        return NGX_DECLINED;
> +    }
> +
>     if (!ls->wildcard) {
>         return ngx_cmp_sockaddr(ls->sockaddr, ls->socklen,
>                                 addr->sockaddr, addr->socklen, 1);

The change is good.

-- 
Sergey Kandaurov


More information about the nginx-devel mailing list