X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fnetifd.git;a=blobdiff_plain;f=bridge.c;h=d29c3c0ccc49d061b71a9adb76711e0477e329ee;hp=1725162a5c62f9d3689898a4105e78aeaaf2aae8;hb=01a947355e7e063ef89ce4f037d0584b686999f0;hpb=7db45fcc1faa7c62541b762aa7ba2e99b1bc6342;ds=sidebyside diff --git a/bridge.c b/bridge.c index 1725162..d29c3c0 100644 --- a/bridge.c +++ b/bridge.c @@ -102,13 +102,24 @@ bridge_reset_primary(struct bridge_state *bst) { struct bridge_member *bm; + if (!bst->primary_port && + (bst->dev.settings.flags & DEV_OPT_MACADDR)) + return; + bst->primary_port = NULL; + bst->dev.settings.flags &= ~DEV_OPT_MACADDR; vlist_for_each_element(&bst->members, bm, node) { + uint8_t *macaddr; + if (!bm->present) continue; bst->primary_port = bm; - memcpy(bst->dev.settings.macaddr, bm->dev.dev->settings.macaddr, 6); + if (bm->dev.dev->settings.flags & DEV_OPT_MACADDR) + macaddr = bm->dev.dev->settings.macaddr; + else + macaddr = bm->dev.dev->orig_settings.macaddr; + memcpy(bst->dev.settings.macaddr, macaddr, 6); bst->dev.settings.flags |= DEV_OPT_MACADDR; return; }