shared_ptr<Port> ThriftConfigApplier::updatePort(const shared_ptr<Port>& orig, const cfg::Port* cfg) { CHECK_EQ(orig->getID(), cfg->logicalID); auto vlans = portVlans_[orig->getID()]; if (cfg->state == orig->getState() && VlanID(cfg->ingressVlan) == orig->getIngressVlan() && vlans == orig->getVlans() && cfg->speed == orig->getSpeed() && (cfg->name.empty() || cfg->name == orig->getName())) { return nullptr; } auto newPort = orig->clone(); newPort->setState(cfg->state); newPort->setIngressVlan(VlanID(cfg->ingressVlan)); newPort->setVlans(vlans); newPort->setSpeed(cfg->speed); // If the port name isn't set in the config (it's optional), // leave it with the default value. if (!cfg->name.empty()) { newPort->setName(cfg->name); } return newPort; }
void BcmPort::program(const shared_ptr<Port>& port) { setIngressVlan(port); setSpeed(port); setPause(port); // Update FEC settings if needed. Note this is not only // on speed change as the port's default speed (say on a // cold boot) maybe what is desired by the config. But we // may still need to enable FEC setFEC(port); // Update Tx Setting if needed. setTxSetting(port); setSflowRates(port); }
void BcmPort::program(const shared_ptr<Port>& port) { setIngressVlan(port); setSpeed(port); }