Move AVAILABLE_CHANNELS_BAND to UCentralUtils before adding 6G support (#100)

This commit is contained in:
RockyMandayam2
2022-10-12 15:27:11 -07:00
committed by GitHub
parent da978611d0
commit 19928e0286
6 changed files with 54 additions and 44 deletions

View File

@@ -9,6 +9,8 @@
package com.facebook.openwifi.cloudsdk; package com.facebook.openwifi.cloudsdk;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
@@ -58,8 +60,29 @@ public class UCentralUtils {
UCentralUtils.UPPER_CHANNEL_LIMIT.put(UCentralConstants.BAND_5G, 165); UCentralUtils.UPPER_CHANNEL_LIMIT.put(UCentralConstants.BAND_5G, 165);
} }
/** List of available channels per band for use. */
public static final Map<String, List<Integer>> AVAILABLE_CHANNELS_BAND = Collections
.unmodifiableMap(buildBandToChannelsMap());
// This class should not be instantiated. // This class should not be instantiated.
private UCentralUtils() {} private UCentralUtils() {}
private static Map<String, List<Integer>> buildBandToChannelsMap() {
Map<String, List<Integer>> bandToChannelsMap = new HashMap<>();
bandToChannelsMap.put(
UCentralConstants.BAND_5G,
Collections.unmodifiableList(
Arrays.asList(36, 40, 44, 48, 149, 153, 157, 161, 165)
)
);
bandToChannelsMap.put(
UCentralConstants.BAND_2G,
Collections.unmodifiableList(
Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
)
);
return bandToChannelsMap;
}
/** /**
* Parse a JSON wifi scan result into a list of WifiScanEntry objects. * Parse a JSON wifi scan result into a list of WifiScanEntry objects.

View File

@@ -39,24 +39,6 @@ public abstract class ChannelOptimizer {
/** Minimum supported channel width (MHz), inclusive. */ /** Minimum supported channel width (MHz), inclusive. */
public static final int MIN_CHANNEL_WIDTH = 20; public static final int MIN_CHANNEL_WIDTH = 20;
/** List of available channels per band for use. */
public static final Map<String, List<Integer>> AVAILABLE_CHANNELS_BAND =
new HashMap<>();
static {
AVAILABLE_CHANNELS_BAND.put(
UCentralConstants.BAND_5G,
Collections.unmodifiableList(
Arrays.asList(36, 40, 44, 48, 149, 153, 157, 161, 165)
)
);
AVAILABLE_CHANNELS_BAND.put(
UCentralConstants.BAND_2G,
Collections.unmodifiableList(
Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
)
);
}
/** Map of channel width (MHz) to available (primary) channels */ /** Map of channel width (MHz) to available (primary) channels */
protected static final Map<Integer, List<Integer>> AVAILABLE_CHANNELS_WIDTH = protected static final Map<Integer, List<Integer>> AVAILABLE_CHANNELS_WIDTH =
new HashMap<>(); new HashMap<>();
@@ -197,7 +179,7 @@ public abstract class ChannelOptimizer {
String vhtOper String vhtOper
) { ) {
if ( if (
AVAILABLE_CHANNELS_BAND.get(UCentralConstants.BAND_2G) UCentralUtils.AVAILABLE_CHANNELS_BAND.get(UCentralConstants.BAND_2G)
.contains(channel) .contains(channel)
) { ) {
// 2.4G, it only supports 20 MHz // 2.4G, it only supports 20 MHz

View File

@@ -96,7 +96,7 @@ public class LeastUsedChannelOptimizer extends ChannelOptimizer {
UCentralUtils.LOWER_CHANNEL_LIMIT.get(UCentralConstants.BAND_2G); UCentralUtils.LOWER_CHANNEL_LIMIT.get(UCentralConstants.BAND_2G);
Map<Integer, Integer> occupiedOverlapChannels = new TreeMap<>(); Map<Integer, Integer> occupiedOverlapChannels = new TreeMap<>();
for ( for (
int overlapChannel : AVAILABLE_CHANNELS_BAND int overlapChannel : UCentralUtils.AVAILABLE_CHANNELS_BAND
.get(UCentralConstants.BAND_2G) .get(UCentralConstants.BAND_2G)
) { ) {
int occupancy = 0; int occupancy = 0;
@@ -338,7 +338,7 @@ public class LeastUsedChannelOptimizer extends ChannelOptimizer {
UCentralUtils.getDeviceAvailableChannels( UCentralUtils.getDeviceAvailableChannels(
model.latestDeviceStatusRadios, model.latestDeviceStatusRadios,
model.latestDeviceCapabilities, model.latestDeviceCapabilities,
AVAILABLE_CHANNELS_BAND UCentralUtils.AVAILABLE_CHANNELS_BAND
); );
Map<String, State> latestState = Map<String, State> latestState =
@@ -372,7 +372,8 @@ public class LeastUsedChannelOptimizer extends ChannelOptimizer {
availableChannelsList == null || availableChannelsList == null ||
availableChannelsList.isEmpty() availableChannelsList.isEmpty()
) { ) {
availableChannelsList = AVAILABLE_CHANNELS_BAND.get(band); availableChannelsList =
UCentralUtils.AVAILABLE_CHANNELS_BAND.get(band);
} }
// Get current channel of the device // Get current channel of the device

View File

@@ -126,7 +126,7 @@ public class RandomChannelInitializer extends ChannelOptimizer {
UCentralUtils.getDeviceAvailableChannels( UCentralUtils.getDeviceAvailableChannels(
model.latestDeviceStatusRadios, model.latestDeviceStatusRadios,
model.latestDeviceCapabilities, model.latestDeviceCapabilities,
AVAILABLE_CHANNELS_BAND UCentralUtils.AVAILABLE_CHANNELS_BAND
); );
Map<String, State> latestState = Map<String, State> latestState =
@@ -152,7 +152,7 @@ public class RandomChannelInitializer extends ChannelOptimizer {
// to get the valid result for single channel assignment // to get the valid result for single channel assignment
// If the intersection is empty, then turn back to the default channels list // If the intersection is empty, then turn back to the default channels list
List<Integer> availableChannelsList = new ArrayList<>( List<Integer> availableChannelsList = new ArrayList<>(
AVAILABLE_CHANNELS_BAND.get(band) UCentralUtils.AVAILABLE_CHANNELS_BAND.get(band)
); );
for (String serialNumber : entry.getValue()) { for (String serialNumber : entry.getValue()) {
List<Integer> deviceChannelsList = deviceAvailableChannels List<Integer> deviceChannelsList = deviceAvailableChannels
@@ -161,14 +161,16 @@ public class RandomChannelInitializer extends ChannelOptimizer {
if ( if (
deviceChannelsList == null || deviceChannelsList.isEmpty() deviceChannelsList == null || deviceChannelsList.isEmpty()
) { ) {
deviceChannelsList = AVAILABLE_CHANNELS_BAND.get(band); deviceChannelsList =
UCentralUtils.AVAILABLE_CHANNELS_BAND.get(band);
} }
availableChannelsList.retainAll(deviceChannelsList); availableChannelsList.retainAll(deviceChannelsList);
} }
if ( if (
availableChannelsList == null || availableChannelsList.isEmpty() availableChannelsList == null || availableChannelsList.isEmpty()
) { ) {
availableChannelsList = AVAILABLE_CHANNELS_BAND.get(band); availableChannelsList =
UCentralUtils.AVAILABLE_CHANNELS_BAND.get(band);
logger.debug( logger.debug(
"The intersection of the device channels lists is empty!!! " + "The intersection of the device channels lists is empty!!! " +
"Fall back to the default channels list" "Fall back to the default channels list"

View File

@@ -21,6 +21,7 @@ import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestMethodOrder; import org.junit.jupiter.api.TestMethodOrder;
import com.facebook.openwifi.cloudsdk.UCentralConstants; import com.facebook.openwifi.cloudsdk.UCentralConstants;
import com.facebook.openwifi.cloudsdk.UCentralUtils;
import com.facebook.openwifi.rrm.DeviceConfig; import com.facebook.openwifi.rrm.DeviceConfig;
import com.facebook.openwifi.rrm.DeviceDataManager; import com.facebook.openwifi.rrm.DeviceDataManager;
import com.facebook.openwifi.rrm.modules.Modeler.DataModel; import com.facebook.openwifi.rrm.modules.Modeler.DataModel;
@@ -74,7 +75,7 @@ public class LeastUsedChannelOptimizerTest {
// B -> Assign to only free channel (165) // B -> Assign to only free channel (165)
LinkedList<Integer> channelsB = new LinkedList<>(); LinkedList<Integer> channelsB = new LinkedList<>();
channelsB.addAll(ChannelOptimizer.AVAILABLE_CHANNELS_BAND.get(band)); channelsB.addAll(UCentralUtils.AVAILABLE_CHANNELS_BAND.get(band));
int bExpectedChannel = channelsB.removeLast(); int bExpectedChannel = channelsB.removeLast();
dataModel.latestDeviceStatusRadios.put( dataModel.latestDeviceStatusRadios.put(
deviceB, deviceB,
@@ -94,8 +95,8 @@ public class LeastUsedChannelOptimizerTest {
// C -> No free channels, assign to least occupied (36) // C -> No free channels, assign to least occupied (36)
LinkedList<Integer> channelsC = new LinkedList<>(); LinkedList<Integer> channelsC = new LinkedList<>();
channelsC.addAll(ChannelOptimizer.AVAILABLE_CHANNELS_BAND.get(band)); channelsC.addAll(UCentralUtils.AVAILABLE_CHANNELS_BAND.get(band));
channelsC.addAll(ChannelOptimizer.AVAILABLE_CHANNELS_BAND.get(band)); channelsC.addAll(UCentralUtils.AVAILABLE_CHANNELS_BAND.get(band));
int cExpectedChannel = channelsC.removeFirst(); int cExpectedChannel = channelsC.removeFirst();
dataModel.latestDeviceStatusRadios.put( dataModel.latestDeviceStatusRadios.put(
deviceC, deviceC,
@@ -166,7 +167,7 @@ public class LeastUsedChannelOptimizerTest {
// B -> No free channels, assign to least occupied (11) // B -> No free channels, assign to least occupied (11)
LinkedList<Integer> channelsB = new LinkedList<>(); LinkedList<Integer> channelsB = new LinkedList<>();
channelsB.addAll(ChannelOptimizer.AVAILABLE_CHANNELS_BAND.get(band)); channelsB.addAll(UCentralUtils.AVAILABLE_CHANNELS_BAND.get(band));
int bExpectedChannel = channelsB.removeLast(); int bExpectedChannel = channelsB.removeLast();
dataModel.latestDeviceStatusRadios.put( dataModel.latestDeviceStatusRadios.put(
deviceB, deviceB,
@@ -261,7 +262,7 @@ public class LeastUsedChannelOptimizerTest {
expected.put(deviceA, radioMapA); expected.put(deviceA, radioMapA);
LinkedList<Integer> channelsB = new LinkedList<>(); LinkedList<Integer> channelsB = new LinkedList<>();
channelsB.addAll(ChannelOptimizer.AVAILABLE_CHANNELS_BAND.get(band)); channelsB.addAll(UCentralUtils.AVAILABLE_CHANNELS_BAND.get(band));
channelsB.removeLast(); channelsB.removeLast();
dataModel.latestDeviceStatusRadios.put( dataModel.latestDeviceStatusRadios.put(
deviceB, deviceB,
@@ -280,8 +281,8 @@ public class LeastUsedChannelOptimizerTest {
expected.put(deviceB, radioMapB); expected.put(deviceB, radioMapB);
LinkedList<Integer> channelsC = new LinkedList<>(); LinkedList<Integer> channelsC = new LinkedList<>();
channelsC.addAll(ChannelOptimizer.AVAILABLE_CHANNELS_BAND.get(band)); channelsC.addAll(UCentralUtils.AVAILABLE_CHANNELS_BAND.get(band));
channelsC.addAll(ChannelOptimizer.AVAILABLE_CHANNELS_BAND.get(band)); channelsC.addAll(UCentralUtils.AVAILABLE_CHANNELS_BAND.get(band));
channelsC.removeFirst(); channelsC.removeFirst();
dataModel.latestDeviceStatusRadios.put( dataModel.latestDeviceStatusRadios.put(
deviceC, deviceC,
@@ -361,7 +362,7 @@ public class LeastUsedChannelOptimizerTest {
// B -> Assign to only free channel and // B -> Assign to only free channel and
// the free channel is in allowedChannels (165) // the free channel is in allowedChannels (165)
LinkedList<Integer> channelsB = new LinkedList<>(); LinkedList<Integer> channelsB = new LinkedList<>();
channelsB.addAll(ChannelOptimizer.AVAILABLE_CHANNELS_BAND.get(band)); channelsB.addAll(UCentralUtils.AVAILABLE_CHANNELS_BAND.get(band));
channelsB.removeLast(); channelsB.removeLast();
dataModel.latestDeviceStatusRadios.put( dataModel.latestDeviceStatusRadios.put(
deviceB, deviceB,
@@ -381,8 +382,8 @@ public class LeastUsedChannelOptimizerTest {
// C -> No free channels, assign to least occupied in allowedChannels (48) // C -> No free channels, assign to least occupied in allowedChannels (48)
LinkedList<Integer> channelsC = new LinkedList<>(); LinkedList<Integer> channelsC = new LinkedList<>();
channelsC.addAll(ChannelOptimizer.AVAILABLE_CHANNELS_BAND.get(band)); channelsC.addAll(UCentralUtils.AVAILABLE_CHANNELS_BAND.get(band));
channelsC.addAll(ChannelOptimizer.AVAILABLE_CHANNELS_BAND.get(band)); channelsC.addAll(UCentralUtils.AVAILABLE_CHANNELS_BAND.get(band));
channelsC.removeFirst(); channelsC.removeFirst();
dataModel.latestDeviceStatusRadios.put( dataModel.latestDeviceStatusRadios.put(
deviceC, deviceC,
@@ -477,8 +478,8 @@ public class LeastUsedChannelOptimizerTest {
// C -> No free channels, assign to least occupied (36) // C -> No free channels, assign to least occupied (36)
LinkedList<Integer> channelsC = new LinkedList<>(); LinkedList<Integer> channelsC = new LinkedList<>();
channelsC.addAll(ChannelOptimizer.AVAILABLE_CHANNELS_BAND.get(band)); channelsC.addAll(UCentralUtils.AVAILABLE_CHANNELS_BAND.get(band));
channelsC.addAll(ChannelOptimizer.AVAILABLE_CHANNELS_BAND.get(band)); channelsC.addAll(UCentralUtils.AVAILABLE_CHANNELS_BAND.get(band));
int cExpectedChannel = channelsC.removeFirst(); int cExpectedChannel = channelsC.removeFirst();
dataModel.latestDeviceStatusRadios.put( dataModel.latestDeviceStatusRadios.put(
deviceC, deviceC,
@@ -598,8 +599,8 @@ public class LeastUsedChannelOptimizerTest {
// C -> No free channels, assign to least occupied (36) // C -> No free channels, assign to least occupied (36)
LinkedList<Integer> channelsC = new LinkedList<>(); LinkedList<Integer> channelsC = new LinkedList<>();
channelsC.addAll(ChannelOptimizer.AVAILABLE_CHANNELS_BAND.get(band)); channelsC.addAll(UCentralUtils.AVAILABLE_CHANNELS_BAND.get(band));
channelsC.addAll(ChannelOptimizer.AVAILABLE_CHANNELS_BAND.get(band)); channelsC.addAll(UCentralUtils.AVAILABLE_CHANNELS_BAND.get(band));
int cExpectedChannel = channelsC.removeFirst(); int cExpectedChannel = channelsC.removeFirst();
dataModel.latestDeviceStatusRadios.put( dataModel.latestDeviceStatusRadios.put(
deviceC, deviceC,
@@ -752,7 +753,7 @@ public class LeastUsedChannelOptimizerTest {
// C -> No free channels, assign to least occupied (36) // C -> No free channels, assign to least occupied (36)
LinkedList<Integer> channelsC1 = new LinkedList<>(); // bandwidth-agnostic LinkedList<Integer> channelsC1 = new LinkedList<>(); // bandwidth-agnostic
LinkedList<Integer> channelsC2 = new LinkedList<>(); // bandwidth-aware LinkedList<Integer> channelsC2 = new LinkedList<>(); // bandwidth-aware
channelsC1.addAll(ChannelOptimizer.AVAILABLE_CHANNELS_BAND.get(band)); channelsC1.addAll(UCentralUtils.AVAILABLE_CHANNELS_BAND.get(band));
channelsC2.addAll(Arrays.asList(36, 157, 165)); channelsC2.addAll(Arrays.asList(36, 157, 165));
int cExpectedChannel = channelsC1.removeFirst(); int cExpectedChannel = channelsC1.removeFirst();
dataModel.latestDeviceStatusRadios.put( dataModel.latestDeviceStatusRadios.put(

View File

@@ -21,6 +21,7 @@ import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestMethodOrder; import org.junit.jupiter.api.TestMethodOrder;
import com.facebook.openwifi.cloudsdk.UCentralConstants; import com.facebook.openwifi.cloudsdk.UCentralConstants;
import com.facebook.openwifi.cloudsdk.UCentralUtils;
import com.facebook.openwifi.rrm.DeviceDataManager; import com.facebook.openwifi.rrm.DeviceDataManager;
import com.facebook.openwifi.rrm.modules.Modeler.DataModel; import com.facebook.openwifi.rrm.modules.Modeler.DataModel;
import com.facebook.openwifi.rrm.optimizers.TestUtils; import com.facebook.openwifi.rrm.optimizers.TestUtils;
@@ -78,7 +79,7 @@ public class UnmanagedApAwareChannelOptimizerTest {
// B -> Assign to only free channel (165) // B -> Assign to only free channel (165)
LinkedList<Integer> channelsB = new LinkedList<>(); LinkedList<Integer> channelsB = new LinkedList<>();
channelsB.addAll(ChannelOptimizer.AVAILABLE_CHANNELS_BAND.get(band)); channelsB.addAll(UCentralUtils.AVAILABLE_CHANNELS_BAND.get(band));
int bExpectedChannel = channelsB.removeLast(); int bExpectedChannel = channelsB.removeLast();
dataModel.latestDeviceStatusRadios.put( dataModel.latestDeviceStatusRadios.put(
deviceB, deviceB,
@@ -99,7 +100,7 @@ public class UnmanagedApAwareChannelOptimizerTest {
// C -> No free channels, assign to the channel with the least weight (48) // C -> No free channels, assign to the channel with the least weight (48)
// since A is on 48, the weight of channel 48 is lower than the other channels // since A is on 48, the weight of channel 48 is lower than the other channels
LinkedList<Integer> channelsC = new LinkedList<>(); LinkedList<Integer> channelsC = new LinkedList<>();
channelsC.addAll(ChannelOptimizer.AVAILABLE_CHANNELS_BAND.get(band)); channelsC.addAll(UCentralUtils.AVAILABLE_CHANNELS_BAND.get(band));
LinkedList<String> bssidsC = new LinkedList<>( LinkedList<String> bssidsC = new LinkedList<>(
Arrays.asList( Arrays.asList(
"dd:dd:dd:dd:dd:dd", "dd:dd:dd:dd:dd:dd",
@@ -184,7 +185,7 @@ public class UnmanagedApAwareChannelOptimizerTest {
// B -> No free channels, assign to least occupied (11) // B -> No free channels, assign to least occupied (11)
LinkedList<Integer> channelsB = new LinkedList<>(); LinkedList<Integer> channelsB = new LinkedList<>();
channelsB.addAll(ChannelOptimizer.AVAILABLE_CHANNELS_BAND.get(band)); channelsB.addAll(UCentralUtils.AVAILABLE_CHANNELS_BAND.get(band));
int bExpectedChannel = channelsB.removeLast(); int bExpectedChannel = channelsB.removeLast();
dataModel.latestDeviceStatusRadios.put( dataModel.latestDeviceStatusRadios.put(
deviceB, deviceB,