EdgeRouter X: Kein Netz an Ethernetports #205
Labels
No Label
RFC
RFT
WIP
blocked
bsp
bug
build/scripts/tools
duplicate
feature
fixed
layer3
mantis
more details required
needs changes
node
packages/fff
rejected
security
trivial
upstream
No Milestone
No Assignees
1 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: freifunk-franken/firmware#205
Loading…
Reference in New Issue
No description provided.
Delete Branch "%!s(<nil>)"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Seit Firmware 20211224 steht bei EdgeRouter X kein Clientnetz vom Gateway mehr an den Clientports zur Verfügung. Konfiguration und Verbindung mit fdff::1 ist aber möglich. Die Ursache für dieses Verhalten ist unklar.
Ein manuelles Rekonfigurieren des master devices des switch0.1 (VLAN 1 auf CPU-Port der DSA Bridge) löst das Problem bis zum nächsten Neustart:
Das Problem scheint auch mit einem aktuelleren Kernel (OpenWrt master, Linux 5.10.90) aufzutreten.
Es scheint sich hierbei um einen Kernelbug zu handeln, der bei Verwendung gestapelten Bridges auftritt, wobei die untere Bridge mit DSA Hardware Offloading arbeitet.
Interessant ist dabei das Flag
skb->offload_fwd_mark
, welches für auf dem CPU-Port der DSA Bridge eingehende Frames gesetzt wird, wenn dieses von einem Switch-User-Port kommt, der die Bridge offloaded. Dadurch wird in der DSA Bridge sichergestellt, dass selbiger Frame nicht erneut auf einen der Ports gesendet wird, der bereits in Hardware bedient wurde (e.g. broadcast, multicast, flooding, ..).Problematisch wird es, wenn der Frame an die darüberliegende Bridge (br-client) weitergegeben wird. In diesem Fall scheint das
offload_fwd_mark
erhalten zu bleiben, löst dann einen WARN_ON_ONCE im br_handle_frame_finsh der oberen Bridge aus und wird dann wohl nicht mehr richtig auf die anderen Ports der oberen Bridge weitergeleitet.Das resultierende Kernel Warning:
Siehe auch:
5e5502e012
bea7907837
Hierbei vielleicht Interessant: Gestapelte Bridges scheinen im Kernel nicht vorgesehen zu sein. Eine Bridge kann nicht direkt als Slave einer anderen Bridge verwendet werden: https://elixir.bootlin.com/linux/latest/source/net/bridge/br_if.c#L594
Unsere Konfiguration umgeht diesen Check, da zwischendrin noch ein VLAN Interface ist.
Ein möglicher Workaround wäre das offload_fwd_mark zu entfernen, wenn ein Frame weiter nach oben gereicht wird, was in
br_pass_frame_up
passiert. Allerdings kenne ich mich hier zu wenig aus um einschätzen zu können, was das für Nebeneffekte haben könnte.So könnte das aussehen:
52ae3e8d4b