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;