mirror of
https://github.com/logicog/RTLPlayground.git
synced 2026-09-02 15:02:51 +08:00
port: let a pvid name an aggregation group
VLAN membership, PVID, egress tagging, isolation and MTU are all per physical port in this ASIC, so nothing stopped a member of a working aggregation group being given a different PVID from its peers. The group then forwards asymmetrically depending on which member the hash picks, and no part of the firmware says a word about it. port_lag_of() answers which group a port belongs to, reading the membership through the shared reader rather than a fourth private copy. port_pvid_set() expands to the whole group when the port it is given is a member, and ports outside a group keep the path they had. This is the second and third of the three steps set out in #347. I said there that the lookup would come when something needed it, which had it the wrong way round: nothing in the tree asks which group a port is in, so the lookup only earns its place alongside a caller. PVID is the smallest such caller, and the rest of the per port settings can follow the same shape once this one is agreed. Built for SWTGW218AS and KP_9000_6XHML_X2 on sdcc 4.5.0.
This commit is contained in:
@@ -62,6 +62,8 @@ void port_mirror_del(void) __banked;
|
||||
bool port_ingress_filter(__xdata uint8_t port, __xdata vlan_ingress_mode_t type) __banked;
|
||||
void port_l2_setup(void) __banked;
|
||||
uint16_t port_lag_members_get(uint8_t lag) __banked;
|
||||
#define PORT_LAG_NONE 0xff
|
||||
uint8_t port_lag_of(uint8_t port) __banked;
|
||||
void port_lag_members_set(__xdata uint8_t lag, __xdata uint16_t members) __banked;
|
||||
void port_lag_hash_set(__xdata uint8_t lag, __xdata uint8_t hash) __banked;
|
||||
void port_eee_enable_all(__xdata uint8_t speed) __banked;
|
||||
|
||||
Reference in New Issue
Block a user