[PATCH 6 of 6] Stream: the "setfib" parameter of the "listen" directive

Roman Arutyunyan arut at nginx.com
Thu Jan 11 12:45:54 UTC 2024


Hi,

On Fri, Dec 15, 2023 at 07:37:49PM +0400, Sergey Kandaurov wrote:
> # HG changeset patch
> # User Sergey Kandaurov <pluknet at nginx.com>
> # Date 1702651328 -14400
> #      Fri Dec 15 18:42:08 2023 +0400
> # Node ID 219662ea1613ab68d4d5d4085394bba75993ae42
> # Parent  9be627b7a3a35c00be13332f553e2d3b778877ae
> Stream: the "setfib" parameter of the "listen" directive.
> 
> The FreeBSD SO_SETFIB support.
> 
> diff --git a/src/stream/ngx_stream.c b/src/stream/ngx_stream.c
> --- a/src/stream/ngx_stream.c
> +++ b/src/stream/ngx_stream.c
> @@ -1033,6 +1033,10 @@ ngx_stream_add_listening(ngx_conf_t *cf,
>      ls->ipv6only = addr->opt.ipv6only;
>  #endif
>  
> +#if (NGX_HAVE_SETFIB)
> +    ls->setfib = addr->opt.setfib;
> +#endif
> +
>  #if (NGX_HAVE_TCP_FASTOPEN)
>      ls->fastopen = addr->opt.fastopen;
>  #endif
> diff --git a/src/stream/ngx_stream.h b/src/stream/ngx_stream.h
> --- a/src/stream/ngx_stream.h
> +++ b/src/stream/ngx_stream.h
> @@ -62,6 +62,9 @@ typedef struct {
>      int                            rcvbuf;
>      int                            sndbuf;
>      int                            type;
> +#if (NGX_HAVE_SETFIB)
> +    int                            setfib;
> +#endif
>  #if (NGX_HAVE_TCP_FASTOPEN)
>      int                            fastopen;
>  #endif
> diff --git a/src/stream/ngx_stream_core_module.c b/src/stream/ngx_stream_core_module.c
> --- a/src/stream/ngx_stream_core_module.c
> +++ b/src/stream/ngx_stream_core_module.c
> @@ -892,6 +892,9 @@ ngx_stream_core_listen(ngx_conf_t *cf, n
>      lsopt.type = SOCK_STREAM;
>      lsopt.rcvbuf = -1;
>      lsopt.sndbuf = -1;
> +#if (NGX_HAVE_SETFIB)
> +    lsopt.setfib = -1;
> +#endif
>  #if (NGX_HAVE_TCP_FASTOPEN)
>      lsopt.fastopen = -1;
>  #endif
> @@ -921,6 +924,22 @@ ngx_stream_core_listen(ngx_conf_t *cf, n
>              continue;
>          }
>  
> +#if (NGX_HAVE_SETFIB)
> +        if (ngx_strncmp(value[i].data, "setfib=", 7) == 0) {
> +            lsopt.setfib = ngx_atoi(value[i].data + 7, value[i].len - 7);
> +            lsopt.set = 1;
> +            lsopt.bind = 1;
> +
> +            if (lsopt.setfib == NGX_ERROR) {
> +                ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
> +                                   "invalid setfib \"%V\"", &value[i]);
> +                return NGX_CONF_ERROR;
> +            }
> +
> +            continue;
> +        }
> +#endif
> +
>  #if (NGX_HAVE_TCP_FASTOPEN)
>          if (ngx_strncmp(value[i].data, "fastopen=", 9) == 0) {
>              lsopt.fastopen = ngx_atoi(value[i].data + 9, value[i].len - 9);

Looks good except possible UDP restriction.

--
Roman Arutyunyan


More information about the nginx-devel mailing list