summaryrefslogtreecommitdiff
path: root/bridge.c
Commit message (Collapse)AuthorAgeFilesLines
* bridge: remove stray newline from device status vlan port listHEADmasterFelix Fietkau2023-05-041-1/+1
| | | | Signed-off-by: Felix Fietkau <nbd@nbd.name>
* netifd: bridge: Fix format string positionHauke Mehrtens2023-02-191-1/+1
| | | | | | | | | | This fixes the following compile error: error: format not a string literal, argument types not checked [-Werror=format-nonliteral] blobmsg_printf() has the following signature: int blobmsg_printf(struct blob_buf *buf, const char *name, const char *format, ...) Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
* netifd: rework/fix device free handlingFelix Fietkau2021-09-271-4/+0
| | | | | | | | | Instead of explicitly preventing free in specific code sections using device_lock/device_unlock, defer all device free handling via uloop timeout This avoids an entire class of lurking use-after-free bugs triggered by device event processing and simplifies the code Signed-off-by: Felix Fietkau <nbd@nbd.name>
* bridge: tune default stp parametersFelix Fietkau2021-08-241-11/+8
| | | | | | | | | | The default forwarding delay 2 is broken and makes STP non-functional by default. The kernel's default of 15 is rather long. This commit changes makes the timer settings more aggressive than the kernel's default while still being consistent and allowing proper convergence for a network diameter up to 4 Signed-off-by: Felix Fietkau <nbd@nbd.name>
* bridge: add support for an external STP daemonFelix Fietkau2021-08-241-0/+51
| | | | | | | | netifd notifies the stp daemon through the network.device object and sends STP related configuration parameters. The daemon can also trigger a STP restart in order to close the race on init Signed-off-by: Felix Fietkau <nbd@nbd.name>
* bridge: memset bst->config by default to avoid stale config valuesFelix Fietkau2021-08-241-0/+1
| | | | Signed-off-by: Felix Fietkau <nbd@nbd.name>
* bridge: fix regression in bringing up bridge portsFelix Fietkau2021-07-261-4/+5
| | | | | | | | Move the DEV_EVENT_LINK_UP case to avoid messing with a fallthrough Only restart members if the vlan check returns a positive result Fixes: 85f01c44a950 ("bridge: check bridge port vlan membership on link-up events") Signed-off-by: Felix Fietkau <nbd@nbd.name>
* bridge: check bridge port vlan membership on link-up eventsFelix Fietkau2021-07-231-5/+22
| | | | | | | | When changing to a dfs channel, hostapd can bring down wlan interfaces and reset their bridge membership. If that happens, the port loses its vlan membership settings and needs to be reconfigured by netifd. Signed-off-by: Felix Fietkau <nbd@nbd.name>
* bridge: fix hotplug vlan overwrite on big-endian systemsFelix Fietkau2021-07-131-1/+1
| | | | | | | | The avl key type for bridge vlans is uint16_t, so any lookup with a wider type is going to fail on big-endian systems This resulted in hotplug-added devices replacing configured member ports Signed-off-by: Felix Fietkau <nbd@nbd.name>
* bridge: bring up pre-existing vlans on hotplug as wellFelix Fietkau2021-06-231-5/+5
| | | | | | When adding a member to an existing VLAN, it needs to be updated as well Signed-off-by: Felix Fietkau <nbd@nbd.name>
* bridge: fix enabling hotplug-added VLANs on the bridge portFelix Fietkau2021-06-221-0/+5
| | | | Signed-off-by: Felix Fietkau <nbd@nbd.name>
* bridge: fix setting pvid for updated vlansFelix Fietkau2021-06-171-1/+18
| | | | | | defer adding back changed vlans until config processing is done Signed-off-by: Felix Fietkau <nbd@nbd.name>
* bridge: allow adding/removing VLANs to configured member ports via hotplugFelix Fietkau2021-06-041-4/+50
| | | | | | | This is useful for a dynamic VLAN setup, where extra tags need to be created on the trunking port on demand Signed-off-by: Felix Fietkau <nbd@nbd.name>
* bridge: fix dynamic delete of hotplug vlansFelix Fietkau2021-06-021-1/+3
| | | | Signed-off-by: Felix Fietkau <nbd@nbd.name>
* bridge: dynamically create vlans for hotplug membersFelix Fietkau2021-06-021-1/+28
| | | | | | This makes it possible to use dynamic tags without changing the configuration Signed-off-by: Felix Fietkau <nbd@nbd.name>
* bridge: rename "ifname" attribute to "ports"Rafał Miłecki2021-05-181-8/+8
| | | | | | | | | | | | | | Bridge aggregates multiple ports so use a more accurate name ("ports"). For backward compatibility add a temporary config translation. Config example: config interface 'lan' option type 'bridge' list ports 'lan1' list ports 'lan2' Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
* device: add support for configuring devices with external auth handlerFelix Fietkau2021-05-171-17/+41
| | | | | | | | | | | This can be used to support 802.1x on wired devices. In order to use this, the device section for each port needing authentication needs to contain the option auth 1 When set, this option prevents devices from being added to bridges or configured with IP settings by default, until the set_state ubus call on network.device sets "auth_status" to true for the device. Signed-off-by: Felix Fietkau <nbd@nbd.name>
* netifd: bridge: set default value for igmp_snoopZheng Qian2021-04-031-0/+2
| | | | | | | | | | | | | | When unchecked the igmp snoop option for a bridge by luci, it just delete the igmp_snooping key from the config file. So netifd can't change /sys/devices/virtual/net/br-lan/bridge/multicast_snooping from "1" to "0". Option multicast_querier seems no input entry in luci, but it's an related option. This patch will set a default value to false for the bridge option to fix this bug. Signed-off-by: Zheng Qian <sotux82@gmail.com>
* bridge-vlan: add support for defining aliases for vlan idsFelix Fietkau2020-11-201-0/+1
| | | | | | | | | | | | | | | When defining a bridge-vlan like this: config bridge-vlan option device 'switch0' option vlan '1' option ports 'lan1 lan2 lan3 lan4' option alias 'lan' You can use switch0.lan instead of switch0.1 to refer to the VLAN. This ensures that the VLAN ID can be kept in a single place in the config Signed-off-by: Felix Fietkau <nbd@nbd.name>
* wireless: fix passing bridge name for vlan hotplug pass-throughFelix Fietkau2020-11-181-1/+4
| | | | | | | When preparing the interface for hotplug add, pass the bridge device back to the caller, since it may not match the original device Signed-off-by: Felix Fietkau <nbd@nbd.name>
* bridge: only overwrite implicit vlan assignment if vlans are configuredFelix Fietkau2020-11-051-3/+7
| | | | | | | | | When VLAN filtering is enabled, but no vlans are defined, the implicit VLANs should stay, so that forwarding between ports still works. This is useful for setups where VLANs are assigned by external scripts instead of being configured via netifd Signed-off-by: Felix Fietkau <nbd@nbd.name>
* bridge: fix use-after-free bug on bridge member freeFelix Fietkau2020-11-051-0/+4
| | | | | | | When removing the device reference, the core might free the device. Use device_lock/unlock to keep the reference valid until it is no longer needed Signed-off-by: Felix Fietkau <nbd@nbd.name>
* bridge: preserve hotplug ports on vlan update if config is unchangedFelix Fietkau2020-11-051-1/+3
| | | | | | Fixes cleanup of port state Signed-off-by: Felix Fietkau <nbd@nbd.name>
* bridge: show vlans in device statusFelix Fietkau2020-10-281-3/+51
| | | | | | List vlans with member ports, VLAN IDs and flags Signed-off-by: Felix Fietkau <nbd@nbd.name>
* bridge: add support for defining port member vlans via hotplug opsFelix Fietkau2020-10-281-2/+103
| | | | Signed-off-by: Felix Fietkau <nbd@nbd.name>
* bridge: flush vlan list on bridge freeFelix Fietkau2020-08-071-0/+1
| | | | | | Fixes a potential memory leak Signed-off-by: Felix Fietkau <nbd@nbd.name>
* bridge: add support for VLAN filteringFelix Fietkau2020-07-191-1/+216
| | | | | | | | | | | | | | | | | VLANs can be defined using bridge-vlan sections, like the following example: config bridge-vlan option device 'switch0' option vlan '1' option ports "lan1 lan2 lan3 lan4:t*" Each member port can be confgured with optional attributes after ':' - t: member port is tagged - *: This is the primary VLAN for the port (PVID) VLAN member interfaces are automatically added as bridge members Signed-off-by: Felix Fietkau <nbd@nbd.name>
* bridge: add support for turning on vlan_filteringJohn Crispin2020-07-181-0/+6
| | | | | | | | If we want a bridge to be vlan aware we need to be able to turn on filtering. Signed-off-by: John Crispin <john@phrozen.org> Signed-off-by: Felix Fietkau <nbd@nbd.name>
* treewide: switch to C-code style commentsHans Dedecker2018-11-191-3/+5
| | | | Signed-off-by: Hans Dedecker <dedeckeh@gmail.com>
* treewide: make some functions staticHans Dedecker2018-11-191-2/+2
| | | | Signed-off-by: Hans Dedecker <dedeckeh@gmail.com>
* device: gracefully handle device names exceeding IFNAMESIZHans Dedecker2018-08-141-1/+7
| | | | | | | | | | | | Instead of truncating the device name when it exceeds IFNAMSIZ length; let device_set_ifname return an error code and do not add the device to the device list. This avoids possible issues with device names becoming identical due the truncation and as a result unexpected behavior. Further let the different device types gracefully handle the error code returned by device_init Signed-off-by: Hans Dedecker <dedeckeh@gmail.com>
* bridge: reset primary only after marking the member not presentAlex Oprea2017-05-091-3/+3
| | | | | | | | | Run the bridge_reset_primary function only after the member being removed has been marked as not present. This change prevents the bridge_reset_primary function from choosing the member being removed as the new primary member. Signed-off-by: Alex Oprea <alex.oprea@inteno.se>
* bridge: disable IGMP snooping by defaultFelix Fietkau2017-01-131-2/+0
| | | | | | | | | Lots of configurations have triggered various issues in this feature, any many people don't even need this. Let's disable it by default until it has become more stable Signed-off-by: Felix Fietkau <nbd@nbd.name>
* bridge: fix MAC address override on config reloadFelix Fietkau2016-11-221-0/+3
| | | | | | | | | When no MAC address option is given, the MAC address of bst->primary_port is used to override the bridge device address. When the config changes and a new MAC address is provided in the config, bridge_reset_primary needs to stop overriding it Signed-off-by: Felix Fietkau <nbd@nbd.name>
* bridge: Don't use device name as bridge member nameHans Dedecker2016-11-041-7/+12
| | | | | | | | | | | The bridge name is a copy of the device name; but the device name can change which is the case when an aliased interface is used as bridge member. This will result into unwanted side effects like bridge reload triggering a topology change effect after doing network reload; therefore use the configured ifname as fixed bridge member name. Also don't display bridge member devices which are hidden Signed-off-by: Hans Dedecker <dedeckeh@gmail.com>
* bridge: Make bridge_device_type staticHans Dedecker2016-09-261-1/+1
| | | | Signed-off-by: Hans Dedecker <dedeckeh@gmail.com>
* device: Move the different device type registrations to the device type fileHans Dedecker2016-09-261-0/+5
| | | | | | While at it; make device_types static if only used in the device type file Signed-off-by: Hans Dedecker <dedeckeh@gmail.com>
* device: add device handler listArne Kappen2016-08-261-0/+3
| | | | | | | | Device handlers now also declare if they have bridge capabilities and include a string to prefix device names for their types. Signed-off-by: Arne Kappen <akappen@inet.tu-berlin.de> Signed-off-by: Felix Fietkau <nbd@nbd.name> [cleanup/fixes]
* device: prepare for adding device handlers dynamicallyArne Kappen2016-08-261-5/+7
| | | | | | | | - remove const from device handler struct - pass device handler type to create function Signed-off-by: Arne Kappen <akappen@inet.tu-berlin.de> Signed-off-by: Felix Fietkau <nbd@nbd.name> [cleanup]
* bridge: multicast: Export some parameters RFCs suggest to be tunableLinus Lüssing2016-03-071-0/+32
| | | | | | | | | | | | | | | | | | | | | | | | | | | RFCs suggest some parameters of IGMP and MLD to be configurable by the administrator. With this patch the following parameters are configurable: * robustness (default: 2) * query_interval (default: 12500 [125s]) * query_response_interval (default: 1000 [10s]) * last_member_interval (default: 100 [1s]) Depending on the size and nature of the network topology administrators might want to increase or decrease these parameters. netifd will take care of configuring any other parameters which are dependant on the ones above and set them according to the formulas provided in the RFCs. These parameters of the bridge are membership_interval, querier_interval, startup_query_interval, startup_query_count and last_member_count. RFCs allow setting three more parameters to be configurable: startup_query_interval, startup_query_count and last_member_count. However this patch does not export them, as they can be indirectly tuned via the given, exported four parameters, too. Signed-off-by: Linus Lüssing <linus.luessing@c0d3.blue>
* Add mtu6 option to override IPv6 MTUSteven Barth2015-06-241-1/+1
| | | | Signed-off-by: Steven Barth <steven@midlink.org>
* bridge: allow setting hash_max valueLinus Lüssing2015-05-271-0/+6
| | | | | | | | | | | | If the number of entries in the MDB exceeds hash_max then the multicast snooping capabilities of the bridge are disabled automatically. The default value for hash_max is 512 which is already exceeded by some wireless community mesh networks. They need to be able to set a higher value. Signed-off-by: Linus Lüssing <linus.luessing@c0d3.blue>
* device: remove DEV_ATTR_IFNAME, it is unusedFelix Fietkau2015-04-171-1/+1
| | | | | | | Ensures that interfaces with only 'ifname' matching the device config don't cause iface->device_config to be set Signed-off-by: Felix Fietkau <nbd@openwrt.org>
* bridge: allow enabling or disabling the multicast querier independently of ↵Matthias Schiffer2015-03-231-1/+7
| | | | | | | | | | | | | | IGMP snooping In larger networks, especially big batman-adv meshes, it may be desirable to enable IGMP snooping on every bridge without enabling the multicast querier to specifically put the querier on a well-connected node. This patch adds a new UCI option 'multicast_querier' for bridges which allows this. The default is still the value of the 'igmp_snooping' option to maintain backwards compatiblity. Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
* netifd: Keep reference to a config copy in device type specific reload ↵Hans Dedecker2015-02-171-0/+3
| | | | | | | | | handler as the original config pointer might go stale Fixes random observed crashes in blobmsg_parse when device type specific config data is parsed. Signed-off-by: Hans Dedecker <dedeckeh@gmail.com>
* bridge: fix retrying member enable when the bridge is otherwise emptyFelix Fietkau2015-01-231-8/+40
| | | | | | Ensure that the bridge gets created before retrying Signed-off-by: Felix Fietkau <nbd@openwrt.org>
* bridge: mark tested members as present during enable retryFelix Fietkau2015-01-231-0/+1
| | | | Signed-off-by: Felix Fietkau <nbd@openwrt.org>
* bridge: release failed member devicesFelix Fietkau2015-01-231-0/+2
| | | | Signed-off-by: Felix Fietkau <nbd@openwrt.org>
* bridge: retry adding members after config reload / device startFelix Fietkau2014-11-231-0/+36
| | | | | | | | The kernel will refuse to add a vlan device to a bridge when the base device of that vlan is already a member. This can happen on config reload. Signed-off-by: Felix Fietkau <nbd@openwrt.org>
* bridge: enable IGMP snooping by defaultFelix Fietkau2014-07-171-1/+1
| | | | Signed-off-by: Felix Fietkau <nbd@openwrt.org>