mirror of
				https://github.com/Telecominfraproject/wlan-cloud-opensync-controller.git
				synced 2025-11-03 20:17:53 +00:00 
			
		
		
		
	Compare commits
	
		
			1 Commits
		
	
	
		
			WIFI-6721-
			...
			release/v1
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					af604289cc | 
@@ -1,9 +1,27 @@
 | 
			
		||||
package com.telecominfraproject.wlan.opensync.ovsdb.dao;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.HashSet;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
import java.util.concurrent.CompletableFuture;
 | 
			
		||||
import java.util.concurrent.ExecutionException;
 | 
			
		||||
import java.util.concurrent.TimeUnit;
 | 
			
		||||
import java.util.concurrent.TimeoutException;
 | 
			
		||||
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.stereotype.Component;
 | 
			
		||||
 | 
			
		||||
import com.telecominfraproject.wlan.core.model.equipment.ChannelBandwidth;
 | 
			
		||||
import com.telecominfraproject.wlan.core.model.equipment.RadioType;
 | 
			
		||||
import com.telecominfraproject.wlan.core.model.equipment.SourceType;
 | 
			
		||||
import com.telecominfraproject.wlan.equipment.models.*;
 | 
			
		||||
import com.telecominfraproject.wlan.equipment.models.ApElementConfiguration;
 | 
			
		||||
import com.telecominfraproject.wlan.equipment.models.ElementRadioConfiguration;
 | 
			
		||||
import com.telecominfraproject.wlan.equipment.models.MimoMode;
 | 
			
		||||
import com.telecominfraproject.wlan.equipment.models.RadioConfiguration;
 | 
			
		||||
import com.telecominfraproject.wlan.equipment.models.StateSetting;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPConfig;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.ovsdb.dao.models.WifiRadioConfigInfo;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.ovsdb.dao.models.WifiVifConfigInfo;
 | 
			
		||||
@@ -12,19 +30,15 @@ import com.telecominfraproject.wlan.profile.rf.models.RfElementConfiguration;
 | 
			
		||||
import com.vmware.ovsdb.exception.OvsdbClientException;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.Operation;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.Update;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.notation.*;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.notation.Atom;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.notation.Condition;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.notation.Function;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.notation.Row;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.notation.Uuid;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.notation.Value;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.result.OperationResult;
 | 
			
		||||
import com.vmware.ovsdb.protocol.schema.DatabaseSchema;
 | 
			
		||||
import com.vmware.ovsdb.service.OvsdbClient;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.stereotype.Component;
 | 
			
		||||
 | 
			
		||||
import java.util.*;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
import java.util.concurrent.CompletableFuture;
 | 
			
		||||
import java.util.concurrent.ExecutionException;
 | 
			
		||||
import java.util.concurrent.TimeUnit;
 | 
			
		||||
import java.util.concurrent.TimeoutException;
 | 
			
		||||
 | 
			
		||||
@Component
 | 
			
		||||
public class OvsdbRadioConfig extends OvsdbDaoBase {
 | 
			
		||||
@@ -40,75 +54,80 @@ public class OvsdbRadioConfig extends OvsdbDaoBase {
 | 
			
		||||
        Map<String, WifiRadioConfigInfo> provisionedRadioConfigs = ovsdbGet.getProvisionedWifiRadioConfigs(ovsdbClient);
 | 
			
		||||
        Map<String, WifiVifConfigInfo> vifConfigs = ovsdbGet.getProvisionedWifiVifConfigs(ovsdbClient);
 | 
			
		||||
        List<Operation> operations = new ArrayList<>();
 | 
			
		||||
        for (RadioType radioType : apElementConfiguration.getRadioMap().keySet()) {
 | 
			
		||||
            Map<String, String> hwConfig = new HashMap<>();
 | 
			
		||||
            ElementRadioConfiguration elementRadioConfig = apElementConfiguration.getRadioMap().get(radioType);
 | 
			
		||||
            RfElementConfiguration rfElementConfig = rfConfig.getRfConfig(radioType);
 | 
			
		||||
            boolean autoChannelSelection = rfElementConfig.getAutoChannelSelection();
 | 
			
		||||
            int channel = elementRadioConfig.getActiveChannel(autoChannelSelection);
 | 
			
		||||
            LOG.debug("configureWifiRadios autoChannelSelection {} activeChannel {} getChannelNumber {} ",
 | 
			
		||||
                    autoChannelSelection, channel, elementRadioConfig.getChannelNumber());
 | 
			
		||||
            ChannelBandwidth bandwidth = rfElementConfig.getChannelBandwidth();
 | 
			
		||||
            String ht_mode = getBandwidth(bandwidth);
 | 
			
		||||
            RadioConfiguration radioConfig = apElementConfiguration.getAdvancedRadioMap().get(radioType);
 | 
			
		||||
            int beaconInterval = rfElementConfig.getBeaconInterval();
 | 
			
		||||
            boolean enabled = radioConfig.getRadioAdminState().equals(StateSetting.enabled);
 | 
			
		||||
            int txPower;
 | 
			
		||||
            if (elementRadioConfig.getEirpTxPower().getSource() == SourceType.profile) {
 | 
			
		||||
                txPower = rfElementConfig.getEirpTxPower();
 | 
			
		||||
            } else {
 | 
			
		||||
                txPower = elementRadioConfig.getEirpTxPower().getValue();
 | 
			
		||||
            }
 | 
			
		||||
            String hwMode = getHwMode(rfElementConfig);
 | 
			
		||||
            String freqBand = getHwConfigAndFreq(radioType, hwConfig);
 | 
			
		||||
            String radioName = null;
 | 
			
		||||
            for (String key : provisionedRadioConfigs.keySet()) {
 | 
			
		||||
                if (provisionedRadioConfigs.get(key).freqBand.equals(freqBand)) {
 | 
			
		||||
                    radioName = key;
 | 
			
		||||
                    break;
 | 
			
		||||
        try {
 | 
			
		||||
            CompletableFuture<DatabaseSchema> cfDatabaseSchema = ovsdbClient.getSchema(ovsdbName);
 | 
			
		||||
            DatabaseSchema databaseSchema = cfDatabaseSchema.get();
 | 
			
		||||
            Set<String> columnNames = databaseSchema.getTables().get(wifiRadioConfigDbTable).getColumns().keySet();
 | 
			
		||||
 | 
			
		||||
            for (RadioType radioType : apElementConfiguration.getRadioMap().keySet()) {
 | 
			
		||||
                Map<String, String> hwConfig = new HashMap<>();
 | 
			
		||||
                ElementRadioConfiguration elementRadioConfig = apElementConfiguration.getRadioMap().get(radioType);
 | 
			
		||||
                RfElementConfiguration rfElementConfig = rfConfig.getRfConfig(radioType);
 | 
			
		||||
                boolean autoChannelSelection = rfElementConfig.getAutoChannelSelection();
 | 
			
		||||
                int channel = elementRadioConfig.getActiveChannel(autoChannelSelection);
 | 
			
		||||
                LOG.debug("configureWifiRadios autoChannelSelection {} activeChannel {} getChannelNumber {} ",
 | 
			
		||||
                        autoChannelSelection, channel, elementRadioConfig.getChannelNumber());
 | 
			
		||||
                ChannelBandwidth bandwidth = rfElementConfig.getChannelBandwidth();
 | 
			
		||||
                String ht_mode = getBandwidth(bandwidth);
 | 
			
		||||
                RadioConfiguration radioConfig = apElementConfiguration.getAdvancedRadioMap().get(radioType);
 | 
			
		||||
                int beaconInterval = rfElementConfig.getBeaconInterval();
 | 
			
		||||
                boolean enabled = radioConfig.getRadioAdminState().equals(StateSetting.enabled);
 | 
			
		||||
                int txPower;
 | 
			
		||||
                if (elementRadioConfig.getEirpTxPower().getSource() == SourceType.profile) {
 | 
			
		||||
                    txPower = rfElementConfig.getEirpTxPower();
 | 
			
		||||
                } else {
 | 
			
		||||
                    txPower = elementRadioConfig.getEirpTxPower().getValue();
 | 
			
		||||
                }
 | 
			
		||||
                String hwMode = getHwMode(rfElementConfig);
 | 
			
		||||
                String freqBand = getHwConfigAndFreq(radioType, hwConfig);
 | 
			
		||||
                String radioName = null;
 | 
			
		||||
                for (String key : provisionedRadioConfigs.keySet()) {
 | 
			
		||||
                    if (provisionedRadioConfigs.get(key).freqBand.equals(freqBand)) {
 | 
			
		||||
                        radioName = key;
 | 
			
		||||
                        break;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                if (radioName == null) continue;
 | 
			
		||||
                String ifName = null; // for vifConfigs
 | 
			
		||||
                if (radioName.equals(radio0)) {
 | 
			
		||||
                    ifName = defaultRadio0;
 | 
			
		||||
                } else if (radioName.equals(radio1)) {
 | 
			
		||||
                    ifName = defaultRadio1;
 | 
			
		||||
                } else if (radioName.equals(radio2)) {
 | 
			
		||||
                    ifName = defaultRadio2;
 | 
			
		||||
                }
 | 
			
		||||
                if (ifName == null) continue;
 | 
			
		||||
                Set<Uuid> vifUuidsForRadio = new HashSet<>();
 | 
			
		||||
                for (String key : vifConfigs.keySet()) {
 | 
			
		||||
                    if (key.contains(ifName))
 | 
			
		||||
                        vifUuidsForRadio.add(vifConfigs.get(key).uuid);
 | 
			
		||||
                }
 | 
			
		||||
                int mimoMode = MimoMode.none.getId();
 | 
			
		||||
                if (rfElementConfig.getMimoMode() != null) {
 | 
			
		||||
                    mimoMode = rfElementConfig.getMimoMode().getId();
 | 
			
		||||
                }           
 | 
			
		||||
                int maxNumClients = 0;          
 | 
			
		||||
                if (rfElementConfig.getMaxNumClients() != null) {
 | 
			
		||||
                    maxNumClients = rfElementConfig.getMaxNumClients();
 | 
			
		||||
                }
 | 
			
		||||
                try {
 | 
			
		||||
                    configureWifiRadios(freqBand, channel, hwConfig, country.toUpperCase(), beaconInterval,
 | 
			
		||||
                            enabled, hwMode, ht_mode, txPower, mimoMode, vifUuidsForRadio, operations, maxNumClients,columnNames);
 | 
			
		||||
                } catch (OvsdbClientException e) {
 | 
			
		||||
                    LOG.error("ConfigureWifiRadios failed with OvsdbClient exception.", e);
 | 
			
		||||
                    throw new RuntimeException(e);
 | 
			
		||||
                } catch (TimeoutException e) {
 | 
			
		||||
                    LOG.error("ConfigureWifiRadios failed with Timeout.", e);
 | 
			
		||||
                    throw new RuntimeException(e);
 | 
			
		||||
                } catch (ExecutionException e) {
 | 
			
		||||
                    LOG.error("ConfigureWifiRadios excecution failed.", e);
 | 
			
		||||
                    throw new RuntimeException(e);
 | 
			
		||||
                } catch (InterruptedException e) {
 | 
			
		||||
                    LOG.error("ConfigureWifiRadios interrupted.", e);
 | 
			
		||||
                    throw new RuntimeException(e);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            if (radioName == null) continue;
 | 
			
		||||
            String ifName = null; // for vifConfigs
 | 
			
		||||
            if (radioName.equals(radio0)) {
 | 
			
		||||
                ifName = defaultRadio0;
 | 
			
		||||
            } else if (radioName.equals(radio1)) {
 | 
			
		||||
                ifName = defaultRadio1;
 | 
			
		||||
            } else if (radioName.equals(radio2)) {
 | 
			
		||||
                ifName = defaultRadio2;
 | 
			
		||||
            }
 | 
			
		||||
            if (ifName == null) continue;
 | 
			
		||||
            Set<Uuid> vifUuidsForRadio = new HashSet<>();
 | 
			
		||||
            for (String key : vifConfigs.keySet()) {
 | 
			
		||||
                if (key.contains(ifName))
 | 
			
		||||
                    vifUuidsForRadio.add(vifConfigs.get(key).uuid);
 | 
			
		||||
            }
 | 
			
		||||
            int mimoMode = MimoMode.none.getId();
 | 
			
		||||
            if (rfElementConfig.getMimoMode() != null) {
 | 
			
		||||
                mimoMode = rfElementConfig.getMimoMode().getId();
 | 
			
		||||
            }           
 | 
			
		||||
            int maxNumClients = 0;          
 | 
			
		||||
            if (rfElementConfig.getMaxNumClients() != null) {
 | 
			
		||||
                maxNumClients = rfElementConfig.getMaxNumClients();
 | 
			
		||||
            }
 | 
			
		||||
            try {
 | 
			
		||||
                configureWifiRadios(freqBand, channel, hwConfig, country.toUpperCase(), beaconInterval,
 | 
			
		||||
                        enabled, hwMode, ht_mode, txPower, mimoMode, vifUuidsForRadio, operations, maxNumClients);
 | 
			
		||||
            } catch (OvsdbClientException e) {
 | 
			
		||||
                LOG.error("ConfigureWifiRadios failed with OvsdbClient exception.", e);
 | 
			
		||||
                throw new RuntimeException(e);
 | 
			
		||||
            } catch (TimeoutException e) {
 | 
			
		||||
                LOG.error("ConfigureWifiRadios failed with Timeout.", e);
 | 
			
		||||
                throw new RuntimeException(e);
 | 
			
		||||
            } catch (ExecutionException e) {
 | 
			
		||||
                LOG.error("ConfigureWifiRadios excecution failed.", e);
 | 
			
		||||
                throw new RuntimeException(e);
 | 
			
		||||
            } catch (InterruptedException e) {
 | 
			
		||||
                LOG.error("ConfigureWifiRadios interrupted.", e);
 | 
			
		||||
                throw new RuntimeException(e);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        try {
 | 
			
		||||
 | 
			
		||||
            CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations);
 | 
			
		||||
            OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
 | 
			
		||||
            for (OperationResult res : result) {
 | 
			
		||||
@@ -217,7 +236,7 @@ public class OvsdbRadioConfig extends OvsdbDaoBase {
 | 
			
		||||
 | 
			
		||||
    void configureWifiRadios(String freqBand, int channel, Map<String, String> hwConfig,
 | 
			
		||||
                             String country, int beaconInterval, boolean enabled, String hwMode, String ht_mode, int txPower,
 | 
			
		||||
                             int mimoMode, Set<Uuid> vifUuidsForRadio, List<Operation> operations, int maxNumClients) throws OvsdbClientException, TimeoutException, ExecutionException, InterruptedException {
 | 
			
		||||
                             int mimoMode, Set<Uuid> vifUuidsForRadio, List<Operation> operations, int maxNumClients, Set<String> tableColumns) throws OvsdbClientException, TimeoutException, ExecutionException, InterruptedException {
 | 
			
		||||
        Map<String, Value> updateColumns = new HashMap<>();
 | 
			
		||||
        List<Condition> conditions = new ArrayList<>();
 | 
			
		||||
        conditions.add(new Condition("freq_band", Function.EQUALS, new Atom<>(freqBand)));
 | 
			
		||||
@@ -243,7 +262,7 @@ public class OvsdbRadioConfig extends OvsdbDaoBase {
 | 
			
		||||
            updateColumns.put("hw_mode", new Atom<>(hwMode));
 | 
			
		||||
        }
 | 
			
		||||
        configureCustomOptionsMap(maxNumClients, updateColumns);
 | 
			
		||||
        setTxAndRxChainmask(mimoMode, updateColumns);
 | 
			
		||||
        setTxAndRxChainmask(mimoMode, updateColumns,tableColumns);
 | 
			
		||||
        if (vifUuidsForRadio.size() > 0) {
 | 
			
		||||
            com.vmware.ovsdb.protocol.operation.notation.Set vifConfigUuids = com.vmware.ovsdb.protocol.operation.notation.Set
 | 
			
		||||
                    .of(vifUuidsForRadio);
 | 
			
		||||
@@ -262,23 +281,29 @@ public class OvsdbRadioConfig extends OvsdbDaoBase {
 | 
			
		||||
        updateColumns.put("custom_options", customOptionsMap);           
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void setTxAndRxChainmask(int mimoMode, Map<String, Value> updateColumns) {
 | 
			
		||||
    void setTxAndRxChainmask(int mimoMode, Map<String, Value> updateColumns, Set<String> tableColumns) {
 | 
			
		||||
        /*
 | 
			
		||||
         * Chainmask is a bitmask, so map mimo mode values accordingly
 | 
			
		||||
         * Note values 0, 1 remain unchanged 
 | 
			
		||||
         * Note values 0, 1 remain unchanged
 | 
			
		||||
         * 
 | 
			
		||||
         * mimoMode  bitmask 
 | 
			
		||||
         *    0         0 
 | 
			
		||||
         *    1         1 
 | 
			
		||||
         *    2         3 
 | 
			
		||||
         *    3         7 
 | 
			
		||||
         *    4        15
 | 
			
		||||
         * mimoMode bitmask
 | 
			
		||||
         * 0 0
 | 
			
		||||
         * 1 1
 | 
			
		||||
         * 2 3
 | 
			
		||||
         * 3 7
 | 
			
		||||
         * 4 15
 | 
			
		||||
         */
 | 
			
		||||
        if (mimoMode == 2) {mimoMode = 3;}
 | 
			
		||||
        else if (mimoMode == 3) {mimoMode = 7;}
 | 
			
		||||
        else if (mimoMode == 4) {mimoMode = 15;}
 | 
			
		||||
        if (mimoMode == 2) {
 | 
			
		||||
            mimoMode = 3;
 | 
			
		||||
        } else if (mimoMode == 3) {
 | 
			
		||||
            mimoMode = 7;
 | 
			
		||||
        } else if (mimoMode == 4) {
 | 
			
		||||
            mimoMode = 15;
 | 
			
		||||
        }
 | 
			
		||||
        updateColumns.put("tx_chainmask", new Atom<>(mimoMode));
 | 
			
		||||
        updateColumns.put("rx_chainmask", new Atom<>(mimoMode));       
 | 
			
		||||
        if (tableColumns.contains("rx_chainmask")) {
 | 
			
		||||
            updateColumns.put("rx_chainmask", new Atom<>(mimoMode));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -4,6 +4,7 @@ import java.util.ArrayList;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
import java.util.concurrent.CompletableFuture;
 | 
			
		||||
import java.util.concurrent.ExecutionException;
 | 
			
		||||
import java.util.concurrent.TimeUnit;
 | 
			
		||||
@@ -39,6 +40,7 @@ import com.vmware.ovsdb.protocol.operation.result.ErrorResult;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.result.InsertResult;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.result.OperationResult;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.result.UpdateResult;
 | 
			
		||||
import com.vmware.ovsdb.protocol.schema.DatabaseSchema;
 | 
			
		||||
import com.vmware.ovsdb.service.OvsdbClient;
 | 
			
		||||
 | 
			
		||||
@Component
 | 
			
		||||
@@ -138,60 +140,70 @@ public class OvsdbRrmConfig extends OvsdbDaoBase {
 | 
			
		||||
    void configureWifiRrm(OvsdbClient ovsdbClient, String freqBand, int backupChannel,
 | 
			
		||||
            AutoOrManualValue probeResponseThreshold, AutoOrManualValue clientDisconnectThreshold,
 | 
			
		||||
            ManagementRate managementRate, RadioBestApSettings bestApSettings, MulticastRate multicastRate)
 | 
			
		||||
            throws OvsdbClientException, TimeoutException, ExecutionException, InterruptedException {
 | 
			
		||||
                    throws OvsdbClientException, TimeoutException, ExecutionException, InterruptedException {
 | 
			
		||||
 | 
			
		||||
        CompletableFuture<DatabaseSchema> cfDatabaseSchema = ovsdbClient.getSchema(ovsdbName);
 | 
			
		||||
        DatabaseSchema databaseSchema = cfDatabaseSchema.get();
 | 
			
		||||
        Set<String> columnNames = databaseSchema.getTables().get(wifiRrmConfigDbTable).getColumns().keySet();
 | 
			
		||||
 | 
			
		||||
        List<Operation> operations = new ArrayList<>();
 | 
			
		||||
        Map<String, Value> updateColumns = new HashMap<>();
 | 
			
		||||
 | 
			
		||||
        updateColumns.put("freq_band", new Atom<>(freqBand));
 | 
			
		||||
        updateColumns.put("backup_channel", new Atom<>(backupChannel));
 | 
			
		||||
 | 
			
		||||
        if (multicastRate == null || multicastRate == MulticastRate.auto) {
 | 
			
		||||
            updateColumns.put("mcast_rate", new Atom<>(0));
 | 
			
		||||
        } else {
 | 
			
		||||
            updateColumns.put("mcast_rate", new Atom<>(managementRate.getId()));
 | 
			
		||||
        if (columnNames.contains("freq_band")) updateColumns.put("freq_band", new Atom<>(freqBand));
 | 
			
		||||
        if (columnNames.contains("backup_channel")) updateColumns.put("backup_channel", new Atom<>(backupChannel));
 | 
			
		||||
        if (columnNames.contains("mcast_rate")) {
 | 
			
		||||
            if (multicastRate == null || multicastRate == MulticastRate.auto) {
 | 
			
		||||
                updateColumns.put("mcast_rate", new Atom<>(0));
 | 
			
		||||
            } else {
 | 
			
		||||
                updateColumns.put("mcast_rate", new Atom<>(managementRate.getId()));
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (probeResponseThreshold == null || probeResponseThreshold.isAuto()) {
 | 
			
		||||
            updateColumns.put("probe_resp_threshold", new com.vmware.ovsdb.protocol.operation.notation.Set());
 | 
			
		||||
        } else {
 | 
			
		||||
            updateColumns.put("probe_resp_threshold", new Atom<>(probeResponseThreshold.getValue()));
 | 
			
		||||
        if (columnNames.contains("probe_resp_threshold")) {
 | 
			
		||||
            if (probeResponseThreshold == null || probeResponseThreshold.isAuto()) {
 | 
			
		||||
                updateColumns.put("probe_resp_threshold", new com.vmware.ovsdb.protocol.operation.notation.Set());
 | 
			
		||||
            } else {
 | 
			
		||||
                updateColumns.put("probe_resp_threshold", new Atom<>(probeResponseThreshold.getValue()));
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (clientDisconnectThreshold == null || clientDisconnectThreshold.isAuto()) {
 | 
			
		||||
            updateColumns.put("client_disconnect_threshold", new com.vmware.ovsdb.protocol.operation.notation.Set());
 | 
			
		||||
        } else {
 | 
			
		||||
            updateColumns.put("client_disconnect_threshold", new Atom<>(clientDisconnectThreshold.getValue()));
 | 
			
		||||
        if (columnNames.contains("client_disconnect_threshold")) {
 | 
			
		||||
            if (clientDisconnectThreshold == null || clientDisconnectThreshold.isAuto()) {
 | 
			
		||||
                updateColumns.put("client_disconnect_threshold", new com.vmware.ovsdb.protocol.operation.notation.Set());
 | 
			
		||||
            } else {
 | 
			
		||||
                updateColumns.put("client_disconnect_threshold", new Atom<>(clientDisconnectThreshold.getValue()));
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (managementRate == null || managementRate == ManagementRate.auto) {
 | 
			
		||||
            updateColumns.put("beacon_rate", new Atom<>(0));
 | 
			
		||||
        } else {
 | 
			
		||||
            updateColumns.put("beacon_rate", new Atom<>(managementRate.getId() * 10));
 | 
			
		||||
        if (columnNames.contains("beacon_rate")) {
 | 
			
		||||
            if (managementRate == null || managementRate == ManagementRate.auto) {
 | 
			
		||||
                updateColumns.put("beacon_rate", new Atom<>(0));
 | 
			
		||||
            } else {
 | 
			
		||||
                updateColumns.put("beacon_rate", new Atom<>(managementRate.getId() * 10));
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (bestApSettings == null) {
 | 
			
		||||
            updateColumns.put("min_load", new com.vmware.ovsdb.protocol.operation.notation.Set());
 | 
			
		||||
            updateColumns.put("snr_percentage_drop", new com.vmware.ovsdb.protocol.operation.notation.Set());
 | 
			
		||||
        } else {
 | 
			
		||||
            if (bestApSettings.getDropInSnrPercentage() == null) {
 | 
			
		||||
        if (columnNames.contains("min_load") && columnNames.contains("snr_percentage_drop")) {
 | 
			
		||||
            if (bestApSettings == null) {
 | 
			
		||||
                updateColumns.put("min_load", new com.vmware.ovsdb.protocol.operation.notation.Set());
 | 
			
		||||
                updateColumns.put("snr_percentage_drop", new com.vmware.ovsdb.protocol.operation.notation.Set());
 | 
			
		||||
            } else {
 | 
			
		||||
                updateColumns.put("snr_percentage_drop", new Atom<>(bestApSettings.getDropInSnrPercentage()));
 | 
			
		||||
            }
 | 
			
		||||
            if (bestApSettings.getMinLoadFactor() == null) {
 | 
			
		||||
                updateColumns.put("min_load", new com.vmware.ovsdb.protocol.operation.notation.Set());
 | 
			
		||||
            } else {
 | 
			
		||||
                updateColumns.put("min_load", new Atom<>(bestApSettings.getMinLoadFactor()));
 | 
			
		||||
                if (bestApSettings.getDropInSnrPercentage() == null) {
 | 
			
		||||
                    updateColumns.put("snr_percentage_drop", new com.vmware.ovsdb.protocol.operation.notation.Set());
 | 
			
		||||
                } else {
 | 
			
		||||
                    updateColumns.put("snr_percentage_drop", new Atom<>(bestApSettings.getDropInSnrPercentage()));
 | 
			
		||||
                }
 | 
			
		||||
                if (bestApSettings.getMinLoadFactor() == null) {
 | 
			
		||||
                    updateColumns.put("min_load", new com.vmware.ovsdb.protocol.operation.notation.Set());
 | 
			
		||||
                } else {
 | 
			
		||||
                    updateColumns.put("min_load", new Atom<>(bestApSettings.getMinLoadFactor()));
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        Row row = new Row(updateColumns);
 | 
			
		||||
        operations.add(new Insert(wifiRrmConfigDbTable, row));
 | 
			
		||||
 | 
			
		||||
        CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations);
 | 
			
		||||
        OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        LOG.debug("Provisioned rrm config with multicastRate {} Mbps for {}", multicastRate, freqBand);
 | 
			
		||||
 | 
			
		||||
        for (OperationResult res : result) {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user