Calling `uci.set()` with an empty array yields an invalid argument error,
make sure to pass `null` instead in this case.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
The jsmin minifier incorrectly transforms the expression `/\*/.test(...)`
into `/\* /.test(...)`, causing the VLAN filter dialog to not recognize
PVID settings in the configuration.
Work around the issue by using an equivalent `\x2a` escape sequence instead.
Ref: https://forum.openwrt.org/t/x/99222/28
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
The previous code naively looked for a `t` in the entire port spec,
wrongly matching untagged ports having a `t` in their name, such
as `eth0`.
Rework the logic to be more strict when parsing the port member
specification to avoid this issue.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Since all netifd device types inherit generic device settings, we can
simplify various aspects of the device configuration ui and drop unused
code while we're at it.
- Remove setIfActive() helper, superseded by commit
f3f74bd0fe ("luci-base: form.js: consider aliased options in AbstractValue.remove()")
- Remove most dependency constraints to make all generic device settings
available for all device types
- Add MTU value validation to disallow exceeding parent device MTU for
VLAN interfaces
- Dynamically update placeholder values when changing base or parent
device options
- Undo VLAN network config hack since all options are available now.
Reverts commit
3c6b59504a ("luci-mod-interfaces: simplify configuring MAC address of 802.1q devices")
- Do not suggest inactive wireless networks as existing device or base
device choices
- Disallow specifying names of already existing network devices when
creating new device settings
- Fix a number of multicast dependency specifications
- Drop now unused functions
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
In case multiple bridges with bridge vlans are declared, LuCI did not
correctly filter the VLANs to show only the ones belonging to the
bridge being configured currently.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Ensure that the overflow styles are reapplied after a redraw. This also
simplifies the code as a side-effect.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
It is legal to have two device sections referring to the same netdev if one
section is a declaration (a section setting option type) and the other is
a configuration (a section not specifying a type but matching an existing
netdev).
Support this case in LuCI since it might be required for some complex
device setups.
Additionally, fix the device type determination for device configuration
sections without type, those should be treated as ethernet (a.k.a.
simple device) configuration instead of falling back to the underlying
netdev device type.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
The old way of defining bridge (L2) as part of interface (L3) is
deprecated. All such configs should be migrated to define bridge as L3
UCI section type "device".
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
Ensure that device sections are only automatically removed after all
related options have been parsed, to avoid prematurely deleting sections.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Introduce a `migrate` properties which selectively allows disabling the
`config interface` to `config device` migration logic for single options.
Use the new flag to disable migration of the "ipv6" option which has
different semantics in interface and device sections.
Ref: https://forum.openwrt.org/t/pppoe-disable-ipv6/92548
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Only disable legacy bridging if an existing network.device section with type
bridge is found, ignore non-type sections since those do not declare a
bridge but set attributes on top of an existing one.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
The existing logic only handled removing the last remaining device section
option (which results in the deletion of the entire section) but failed to
actually unset single options.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
When setting bridge and device specific options such 'stp' or
'igmp_snooping', LuCI so far transparently created or reused a
`config device` section and set the corresponding option there.
In the case of bridges, this triggers multiple problems:
- When implicitely creating a `config device` section referring to the
bridge device, the legacy bridge configuration of the corresponding
interface is disabled, causing a broken configuration on subsequent
save operations
- Netifd does not appear to properly merge bridge settings from config
device and config interface sections, leading to an incoherent
configuration state
In order to avoid that issue, do not automatically migrate bridge specific
options.
Fixes: #4948
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
- Disable interface-level bridging if a corresponding br-$name bridge
already exists as device declaration
- Exempt wireless interfaces from bridge port configuration, they can only
be attached indirectly through "option network"
- Consider bridge ports from both "option ifname" in interface/device
sections and from "option ports" in bridge-vlan ones
- Small fixes for rendering quirks
Signed-off-by: Jo-Philipp Wich <jo@mein.io>