shared_ptr<Interface> ThriftConfigApplier::updateInterface( const shared_ptr<Interface>& orig, const cfg::Interface* config, const Interface::Addresses& addrs) { CHECK_EQ(orig->getID(), config->intfID); cfg::NdpConfig ndp; if (config->__isset.ndp) { ndp = config->ndp; } auto name = getInterfaceName(config); auto mac = getInterfaceMac(config); auto mtu = config->__isset.mtu ? config->mtu : Interface::kDefaultMtu; if (orig->getRouterID() == RouterID(config->routerID) && orig->getVlanID() == VlanID(config->vlanID) && orig->getName() == name && orig->getMac() == mac && orig->getAddresses() == addrs && orig->getNdpConfig() == ndp && orig->getMtu() == mtu) { // No change return nullptr; } auto newIntf = orig->clone(); newIntf->setRouterID(RouterID(config->routerID)); newIntf->setVlanID(VlanID(config->vlanID)); newIntf->setName(name); newIntf->setMac(mac); newIntf->setAddresses(addrs); newIntf->setNdpConfig(ndp); newIntf->setMtu(mtu); return newIntf; }
VlanLayer::VlanLayer(const uint16_t vlanID, bool cfi, uint8_t priority, uint16_t etherType) { m_DataLen = sizeof(vlan_header); m_Data = new uint8_t[m_DataLen]; memset(m_Data, 0, m_DataLen); m_Protocol = VLAN; vlan_header* vlanHeader = getVlanHeader(); setVlanID(vlanID); setCFI(cfi); setPriority(priority); vlanHeader->etherType = htons(etherType); }
VlanLayer::VlanLayer(const uint16_t vlanID, bool cfi, uint8_t priority, uint16_t etherType) { m_DataLen = sizeof(vlan_header); m_Data = new uint8_t[m_DataLen]; memset(m_Data, 0, sizeof(m_DataLen)); m_Protocol = VLAN; vlan_header* vlanHeader = getVlanHeader(); setVlanID(vlanID); vlanHeader->cfi = cfi; vlanHeader->priority = 0x07 & priority; vlanHeader->etherType = htons(etherType); }