summaryrefslogtreecommitdiff
path: root/bridge.c
Commit message (Collapse)AuthorAgeFilesLines
* 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>
* netifd: Fix node version set after freeHans Dedecker2014-05-091-1/+5
| | | | | | | | | Fixes an issue where a bridge member will be removed from the bridge upon an interface ifup as the bridge node version -1 is overwritten by vlist_add while the new created bridge member pointer is freed in bridge_member_update Signed-off-by: Hans Dedecker <dedeckeh@gmail.com>
* netifd: Add interface config support to enable/disable IPv6 in the kernel ↵Hans Dedecker2014-04-261-0/+6
| | | | | | | | per device Main use case is being able to disable IPv6 on (a) WAN interface(s) when only IPv4 connectivity is offered or 6rd is used. Signed-off-by: Hans Dedecker <dedeckeh@gmail.com>
* netifd: Reload proto on topology changeHelmut Schaa2014-03-211-0/+4
| | | | | | | | | | Introduce a new device event "topology change" that gets signaled by bridges on adding/removing members. On "topology changes" the proto handlers are requested to "renew" which is most useful for DHCP. Signed-off-by: Helmut Schaa <helmut.schaa@googlemail.com>
* netifd: Fix bridge MTU setting when a bridge member is addedHans Dedecker2014-03-111-2/+9
| | | | | | Reapply bridge mtu setting as adding a bridge member will override the bridge mtu in the kernel Signed-off-by: Hans Dedecker <dedeckeh@gmail.com>
* netifd: fix bridge reloading issueEmanuel Taube2014-03-071-2/+2
| | | | | | | Check in the right order to decide if the bridge have to be set up. Additionally we are consistent with setting it down. Signed-off-by: Emanuel Taube <emanuel.taube@gmail.com>
* netifd: Fix possible segfault in bridge codeHelmut Schaa2013-11-291-0/+3
| | | | | | Need to check calloc result. In case of failure the bridge member will be missing. Signed-off-by: Helmut Schaa <helmut.schaa@googlemail.com>
* bridge: fix stray semicolon, fixes a bug in bridge primary port resetFelix Fietkau2013-10-291-1/+1
| | | | Signed-off-by: Felix Fietkau <nbd@openwrt.org>
* bridge: fix corner case with network reloadLuka Perkov2013-08-291-5/+4
| | | | | | | | After removing all ifname options from bridge interface and executing network reload the configuration was not applied properly on the system. With this change that is no longer a issue. Signed-off-by: Luka Perkov <luka@openwrt.org>
* bridge: add bridge_empty option which allows creation of empty bridgesLuka Perkov2013-07-131-0/+14
| | | | Signed-off-by: Luka Perkov <luka@openwrt.org>
* config: use the new uci_blob library codeFelix Fietkau2013-06-101-4/+4
| | | | Signed-off-by: Felix Fietkau <nbd@openwrt.org>
* bridge: disable multicast snooping by defaultJo-Philipp Wich2013-04-271-3/+1
|
* set default bridge priority to 0x7FFFJo-Philipp Wich2013-04-231-3/+2
|
* add bridge priority optionNiels Boehm2013-04-231-0/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | [netifd] add bridge priority option Using the bridge priority (lower numbers are higher in the hierarchy), one can ensure that the router is chosen as root bridge in a setup with spanning tree protocol. For instance, one can set the priority of network lan to 32767, causing the router to win over all directly and indirectly connected nodes that have a default priority of 32768. The reason for doing that is that otherwise it has a default priority 32768 as well and any other connected node could win and get root bridge. In a home setup, those nodes are often desktop or laptop boxes and get switched off from time to time. As a consequence, root bridges vanish or new root bridges get chosen relatively often, resulting in frequent topology changes to the STP network. While the new topology has not settled, packets can get lost, causing noticeable interruptions of network traffic. Setting the router's bridge on a lower numbered priority (and thus higher in the selection hierarchy) solves the problem in the vast majority of the cases by ensuring that the device that is most likely powered on 24/7 gets chosen as root and prevents topology changes. Signed-off-by: Niels Boehm <blubberdiblub@gmail.com>
* bridge: toggle device present state after freeing a bridge member to ensure ↵Felix Fietkau2012-10-191-3/+24
| | | | that it can be reassigned to a different bridge
* bridge: fix getting the mac address from the first member deviceFelix Fietkau2012-06-271-1/+7
|
* bridge: keep existing mac address if specified in the configFelix Fietkau2012-05-241-0/+5
|
* bridge: set the mac address based on the first active memberFelix Fietkau2012-05-231-0/+22
|
* add copyright headersFelix Fietkau2012-05-041-0/+13
|