Allow plain and device-tagged listens to share a sockaddr (v0.7.1)
The previous wrapper skipped nginx's duplicate-listen check only
for listens that carried device=, so a `listen 80;` next to a
`listen 80 device=eth0 ...;` in the same server block was
rejected at config time. Under SO_BINDTODEVICE that restriction
tracked a real kernel constraint (device-tagged listens created
separate sockets, a bare listen alongside them was genuinely
ambiguous). Under the IP_PKTINFO model introduced in 450391a
the constraint no longer exists — all same-sockaddr listens
collapse to one wildcard kernel socket and attribution is a
per-connection cmsg readback — but the wrapper kept enforcing
the old rule by accident.
Extend the (cscf, sockaddr) dedup in the listen wrapper to
cover plain listens too: the first occurrence at a given
(server, sockaddr) pair calls nginx's handler and registers the
kernel socket, and every subsequent sibling — plain or
device-tagged — is accepted without tripping nginx's
duplicate-listen check. Device-tagged siblings additionally
push a binding into the attribution table as before; plain
siblings contribute only the seen-list entry. No code path
exercised by the existing 22 e2e tests changes behavior.
Update FR-1.5, the user-guide "shared port" section, the
module's top-of-function comments, and the test nginx.conf
comment to describe the relaxed rule. Bump VERSION and add a
debian/changelog entry for 0.7.1.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -8,10 +8,10 @@
|
||||
# can verify that the module can either combine or distinguish
|
||||
# families per device.
|
||||
#
|
||||
# Mgmt/direct traffic hits a separate server block on port 9180.
|
||||
# Mixing a naked `listen 8080;` or a specific-address `listen
|
||||
# 172.20.40.2:8080;` with device-tagged wildcards on the same port
|
||||
# is not supported — see docs/user-guide.md.
|
||||
# Mgmt/direct traffic hits a separate server block on port 9180 —
|
||||
# a clean port split rather than a technical requirement; plain and
|
||||
# device-tagged listens may share a port under the IP_PKTINFO model
|
||||
# (see docs/user-guide.md).
|
||||
|
||||
load_module /usr/lib/nginx/modules/ngx_http_ipng_stats_module.so;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user