Пример #1
0
std::shared_ptr<InterfaceMap> ThriftConfigApplier::updateInterfaces() {
    auto origIntfs = orig_->getInterfaces();
    InterfaceMap::NodeContainer newIntfs;
    bool changed = false;

    // Process all supplied interface configs
    size_t numExistingProcessed = 0;

    for (const auto& interfaceCfg : cfg_->interfaces) {
        InterfaceID id(interfaceCfg.intfID);
        auto origIntf = origIntfs->getInterfaceIf(id);
        shared_ptr<Interface> newIntf;
        auto newAddrs = getInterfaceAddresses(&interfaceCfg);
        if (origIntf) {
            newIntf = updateInterface(origIntf, &interfaceCfg, newAddrs);
            ++numExistingProcessed;
        } else {
            newIntf = createInterface(&interfaceCfg, newAddrs);
        }
        updateVlanInterfaces(newIntf ? newIntf.get() : origIntf.get());
        changed |= updateMap(&newIntfs, origIntf, newIntf);
    }

    if (numExistingProcessed != origIntfs->size()) {
        // Some existing interfaces were removed.
        CHECK_LT(numExistingProcessed, origIntfs->size());
        changed = true;
    }

    if (!changed) {
        return nullptr;
    }

    return origIntfs->clone(std::move(newIntfs));
}
Пример #2
0
void UdpNetwork::broadcastConnection( int32_t device_index /*=-1*/ )
{
	crap::interface_adresses addresses[ 100 ];
	uint32_t number = getInterfaceAddresses( _connection.socket(), addresses, 100 );

	if( device_index == -1 )
	{
		for( uint32_t i=0; i< number; ++i )
			_connection.connect( addresses[i].broadcast, _connection.listenPort() );
	}
	else if( device_index >=0 && device_index < number )
		_connection.connect( addresses[device_index].broadcast, _connection.listenPort() );
}