From: Michael Tremer Date: Wed, 6 Jul 2011 19:08:28 +0000 (+0200) Subject: Merge remote-tracking branch 'upstream/master' X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=43a0ac239b23cb5c9ff12a5e39c67a4e72072d8c;p=people%2Fms%2Frstp.git Merge remote-tracking branch 'upstream/master' Conflicts: bridge_track.c --- 43a0ac239b23cb5c9ff12a5e39c67a4e72072d8c diff --cc bridge_track.c index f5efa3f,289fc41..10e13f7 --- a/bridge_track.c +++ b/bridge_track.c @@@ -249,38 -405,28 +249,41 @@@ static int stp_enabled(struct ifdata *b return enabled == 2; /* ie user mode STP */ } - void set_br_up(struct ifdata *br, int up) + static void set_br_up(struct ifdata *br, int up) { int stp_up = stp_enabled(br); - INFO("%s was %s stp was %s", br->name, br->up ? "up" : "down", br->stp_up ? "up" : "down"); + INFO("%s was %s stp was %s", br->name, + up ? "up" : "down", + br->stp_up ? "up" : "down"); INFO("Set bridge %s %s stp %s" , br->name, - up ? "up" : "down", stp_up ? "up" : "down"); + up ? "up" : "down", + stp_up ? "up" : "down"); - if (up != br->up) + int changed = 0; + + if (up != br->up) { br->up = up; + changed = 1; + } if (br->stp_up != stp_up) { - if (stp_up) - init_bridge_stp(br); - else - clear_bridge_stp(br); + br->stp_up = stp_up; + changed = 1; + } + + if (check_mac_address(br->name, br->macaddr)) { + /* MAC address changed */ + /* Notify bridge address change */ + STP_IN_set_bridge_address( + br->stp_bridge, (STP_MacAddress *)br->macaddr); } + + if (changed) + STP_IN_set_bridge_enable(br->stp_bridge, + (br->up && br->stp_up)?1:0); } - void set_if_up(struct ifdata *ifc, int up) + static void set_if_up(struct ifdata *ifc, int up) { INFO("Port %s : %s", ifc->name, (up ? "up" : "down")); int speed = -1;