bind interfaces subdirective #7343
Draft
+849
−518
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Assistance Disclosure
No AI was used.
Adds an
interfacessubdirective tobindto implement #7256 without changing how addresses are parsed:in the example above, the site is bound to at least six addresses and served with two protocols. This way the
tcp6/udp6/andip6:networks can be used instead of a new version mode syntax, and the port is read from the site block again instead of the directive arguments.Only one address is bound per prefix for interfaces assigned a cidr. This is preferable to composing or selecting multiple addresses to emulate a bind to device syscall; a socket manager can do that natively without the overhead of opening 2^n listeners at once, or the unreliability of trying to open the first one available iteratively. e.g. for linux, the user could apply #7342 with systemd.socket and BindToDevice/FreeBind.
Tests are todo, ideally we will mock the value of
net.InterfaceByNameand parse a caddyfile.