diff --git a/doc/lacp.md b/doc/lacp.md index 1b78459e..3160469a 100644 --- a/doc/lacp.md +++ b/doc/lacp.md @@ -228,4 +228,6 @@ the dead member. * No Churn Detection machines and no Marker protocol. * Coupled Mux: collecting and distributing are enabled together. * One aggregator per group. +* Selection compares the partner's system only, not its key: two aggregates + that one partner system offers on the same group land in one trunk here. * Member compatibility is not validated; see #377. diff --git a/html/app.js b/html/app.js index 4c7ed7f5..34e9713e 100644 --- a/html/app.js +++ b/html/app.js @@ -1843,6 +1843,7 @@ function buildLag(){ })(g); } var lacpCfg=[0,0,0,0,0]; +function maskPorts(m){var r=[];for(var p=1;p<=S.n;p++)if((m>>S.physToLog[p-1])&1)r.push(p);return r.length?r.join(" "):"-"} function lagLoad(){ return getJSON("/lacp.json").then(function(c){ var tb=$("lacptbl").tBodies[0]; @@ -1852,7 +1853,7 @@ function lagLoad(){ lacpCfg[g]=parseInt(lg.cfg,16); if($("lgm"+g).closest(".card").dataset.dirty)return; $("lgm"+g).value=lacpCfg[g]?"lacp":"static"; - $("lgs"+g).textContent=lacpCfg[g]?"LACP: "+t("lacp_agg")+" "+(lg.aggValid?lg.agg:"("+t("lacp_neg")+")")+", "+t("lacp_members")+" 0x"+lg.members:""; + $("lgs"+g).textContent=lacpCfg[g]?"LACP: "+t("lacp_agg")+" "+(lg.aggValid?lg.agg:"("+t("lacp_neg")+")")+", "+t("lacp_members")+" "+maskPorts(parseInt(lg.members,16)):""; }); if(c.on)c.ports.forEach(function(p){ if(p.lag===255)return; diff --git a/rtlplayground.c b/rtlplayground.c index f61140a2..38e322e7 100644 --- a/rtlplayground.c +++ b/rtlplayground.c @@ -1071,8 +1071,6 @@ void handle_rx(void) } } else if (lacpEnabled && uip_buf[5] == 0x02) { // LACPDU (slow protocols) lacp_in(); - if (uip_len) - tcpip_output(); } } else if (igmpEnabled && uip_buf[0] == 0x01 && uip_buf[1] == 0x00 && uip_buf[2] == 0x5e // IPv4-MC packet? && igmp_packet_handler()) {