mirror of
https://github.com/Telecominfraproject/wlan-cloud-opensync-controller.git
synced 2025-11-01 19:17:52 +00:00
WIFI-415: Cloud Back End Support for Captive Portal Phase 2
Add schema check for "captive_portal" and "captive_allowlist" in Wifi_VIF_Config table, if present, set values from CaptivePortal profile if they are present. To facilitate designer testing. When the schema actually contains these in a formal Ap load, remove the check.
This commit is contained in:
@@ -79,6 +79,8 @@ 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.SelectResult;
|
||||
import com.vmware.ovsdb.protocol.schema.DatabaseSchema;
|
||||
import com.vmware.ovsdb.protocol.schema.TableSchema;
|
||||
import com.vmware.ovsdb.service.OvsdbClient;
|
||||
|
||||
@Component
|
||||
@@ -2232,7 +2234,8 @@ public class OvsdbDao {
|
||||
CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations);
|
||||
OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
|
||||
|
||||
LOG.debug("OvsdbDao::configureCommands successfully configured command {} for duration {} payload {}", command, duration, payload);
|
||||
LOG.debug("OvsdbDao::configureCommands successfully configured command {} for duration {} payload {}",
|
||||
command, duration, payload);
|
||||
|
||||
for (OperationResult res : result) {
|
||||
LOG.debug("Op Result {}", res);
|
||||
@@ -2296,7 +2299,8 @@ public class OvsdbDao {
|
||||
int mobilityDomain, boolean enable80211v, String minHwMode, boolean enabled, int keyRefresh,
|
||||
boolean uapsdEnabled, boolean apBridge, NetworkForwardMode networkForwardMode, String gateway, String inet,
|
||||
Map<String, String> dns, String ipAssignScheme, List<MacAddress> macBlockList, boolean rateLimitEnable,
|
||||
int ssidDlLimit, int ssidUlLimit, int clientDlLimit, int clientUlLimit) {
|
||||
int ssidDlLimit, int ssidUlLimit, int clientDlLimit, int clientUlLimit, Map<String, String> captiveMap,
|
||||
List<String> walledGardenAllowlist) {
|
||||
|
||||
List<Operation> operations = new ArrayList<>();
|
||||
Map<String, Value> updateColumns = new HashMap<>();
|
||||
@@ -2324,7 +2328,6 @@ public class OvsdbDao {
|
||||
bridge = vlanIfName;
|
||||
|
||||
updateColumns.put("vlan_id", new Atom<>(vlanId));
|
||||
// updateColumns.put("mode", new Atom<>("ap_vlan"));
|
||||
updateColumns.put("mode", new Atom<>("ap"));
|
||||
|
||||
} else {
|
||||
@@ -2332,6 +2335,20 @@ public class OvsdbDao {
|
||||
updateColumns.put("vlan_id", new com.vmware.ovsdb.protocol.operation.notation.Set());
|
||||
}
|
||||
|
||||
// TODO: remove when captive portal support available in AP load
|
||||
DatabaseSchema dbSchema = ovsdbClient.getSchema(ovsdbName).join();
|
||||
TableSchema tableSchema = dbSchema.getTables().get(wifiVifConfigDbTable);
|
||||
if (tableSchema.getColumns().containsKey("captive_portal")) {
|
||||
@SuppressWarnings("unchecked")
|
||||
com.vmware.ovsdb.protocol.operation.notation.Map<String, String> captivePortalMap = com.vmware.ovsdb.protocol.operation.notation.Map
|
||||
.of(captiveMap);
|
||||
updateColumns.put("captive_portal", captivePortalMap);
|
||||
}
|
||||
if (tableSchema.getColumns().containsKey("captive_allowlist")) {
|
||||
com.vmware.ovsdb.protocol.operation.notation.Set captiveAllowList = com.vmware.ovsdb.protocol.operation.notation.Set
|
||||
.of(walledGardenAllowlist);
|
||||
updateColumns.put("captive_allowlist", captiveAllowList);
|
||||
}
|
||||
|
||||
updateColumns.put("bridge", new Atom<>(bridge));
|
||||
|
||||
@@ -2770,7 +2787,7 @@ public class OvsdbDao {
|
||||
ssidConfig.getVlanId(), rrmEnabled, enable80211r, mobilityDomain, enable80211v, minHwMode,
|
||||
enabled, keyRefresh, uapsdEnabled, apBridge, ssidConfig.getForwardMode(), gateway, inet,
|
||||
dns, ipAssignScheme, macBlockList, rateLimitEnable, ssidDlLimit, ssidUlLimit, clientDlLimit,
|
||||
clientUlLimit);
|
||||
clientUlLimit, captiveMap, walledGardenAllowlist);
|
||||
|
||||
} catch (IllegalStateException e) {
|
||||
// could not provision this SSID, but still can go on
|
||||
@@ -2840,27 +2857,46 @@ public class OvsdbDao {
|
||||
|
||||
private void getRadiusConfiguration(OpensyncAPConfig opensyncApConfig, SsidConfiguration ssidConfig,
|
||||
Map<String, String> security) {
|
||||
List<Profile> radiusServiceList = new ArrayList<>();
|
||||
radiusServiceList = opensyncApConfig.getRadiusProfiles().stream().filter(new Predicate<Profile>() {
|
||||
|
||||
@Override
|
||||
public boolean test(Profile p) {
|
||||
return p.getName().equals((ssidConfig.getRadiusServiceName()));
|
||||
}
|
||||
}).collect(Collectors.toList());
|
||||
if (!radiusServiceList.isEmpty()) {
|
||||
LOG.debug("getRadiusConfiguration for ssidConfig {} from radiusProfiles {}", ssidConfig,
|
||||
opensyncApConfig.getRadiusProfiles());
|
||||
|
||||
List<Profile> radiusServiceList = opensyncApConfig.getRadiusProfiles().stream()
|
||||
.filter(new Predicate<Profile>() {
|
||||
|
||||
@Override
|
||||
public boolean test(Profile p) {
|
||||
return p.getName().equals((ssidConfig.getRadiusServiceName()));
|
||||
}
|
||||
}).collect(Collectors.toList());
|
||||
|
||||
if (radiusServiceList != null && radiusServiceList.size() > 0) {
|
||||
Profile profileRadius = radiusServiceList.get(0);
|
||||
String region = opensyncApConfig.getEquipmentLocation().getName();
|
||||
List<RadiusServer> radiusServerList = new ArrayList<>();
|
||||
RadiusProfile radiusProfileDetails = ((RadiusProfile) profileRadius.getDetails());
|
||||
RadiusServiceRegion radiusServiceRegion = radiusProfileDetails.findServiceRegion(region);
|
||||
radiusServerList = radiusServiceRegion.findServerConfiguration(ssidConfig.getRadiusServiceName());
|
||||
if (!radiusServerList.isEmpty()) {
|
||||
RadiusServer rServer = radiusServerList.get(0);
|
||||
security.put("radius_server_ip", rServer.getIpAddress().getHostAddress());
|
||||
security.put("radius_server_port", String.valueOf(rServer.getAuthPort()));
|
||||
security.put("radius_server_secret", rServer.getSecret());
|
||||
if (radiusServiceRegion != null) {
|
||||
radiusServerList = radiusServiceRegion.findServerConfiguration(ssidConfig.getRadiusServiceName());
|
||||
if (radiusServerList != null && radiusServerList.size() > 0) {
|
||||
RadiusServer rServer = radiusServerList.get(0);
|
||||
if (rServer != null) {
|
||||
security.put("radius_server_ip",
|
||||
rServer.getIpAddress() != null ? rServer.getIpAddress().getHostAddress() : null);
|
||||
security.put("radius_server_port",
|
||||
rServer.getAuthPort() != null ? String.valueOf(rServer.getAuthPort()) : null);
|
||||
security.put("radius_server_secret", rServer.getSecret());
|
||||
}
|
||||
} else {
|
||||
LOG.warn("Could not get RadiusServerConfiguration for {} from RadiusProfile {}",
|
||||
ssidConfig.getRadiusServiceName(), profileRadius);
|
||||
}
|
||||
} else {
|
||||
LOG.warn("Could not get RadiusServiceRegion {} from RadiusProfile {}", region, profileRadius);
|
||||
}
|
||||
} else {
|
||||
LOG.warn("Could not find radius profile {} in {}", ssidConfig.getRadiusServiceName(),
|
||||
opensyncApConfig.getRadiusProfiles());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user