mirror of
https://github.com/Telecominfraproject/wlan-cloud-opensync-controller.git
synced 2025-11-03 03:57:54 +00:00
VLAN changes per AP request to create LAN and WAN Vlan Interfaces whenever a VLAN is provisioned
This commit is contained in:
@@ -1268,7 +1268,8 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
|
||||
protocolStatus.setDetails(protocolStatusData);
|
||||
protocolStatus = statusServiceInterface.update(protocolStatus);
|
||||
LOG.info("Updated IpV4Addr for AP {} to {} from Wifi_Inet_State change for if_name {}", apId,
|
||||
((EquipmentProtocolStatusData) protocolStatus.getDetails()).getReportedIpV4Addr(), inetState.ifName);
|
||||
((EquipmentProtocolStatusData) protocolStatus.getDetails()).getReportedIpV4Addr(),
|
||||
inetState.ifName);
|
||||
LOG.debug("ProtocolStatus for AP {} updated to {}", apId, protocolStatus);
|
||||
|
||||
} catch (UnknownHostException e) {
|
||||
@@ -1279,46 +1280,61 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
|
||||
|
||||
}
|
||||
|
||||
if (inetState.getVlanId() > 1) {
|
||||
|
||||
if (!lanStatusData.getVlanStatusDataMap().containsKey(inetState.getVlanId())) {
|
||||
lanStatusData.getVlanStatusDataMap().put(inetState.getVlanId(), new VLANStatusData());
|
||||
}
|
||||
if (inetState.getIfType().equals("vlan") && inetState.parentIfName != null
|
||||
&& inetState.parentIfName.equals(defaultWanInterfaceName)) {
|
||||
|
||||
try {
|
||||
lanStatusData.getVlanStatusDataMap().get(inetState.getVlanId())
|
||||
.setGateway(InetAddress.getByName(inetState.getGateway()));
|
||||
|
||||
String primaryDns = inetState.getDns().get("primary");
|
||||
VLANStatusData vlanStatusData = new VLANStatusData();
|
||||
|
||||
if (inetState.gateway != null)
|
||||
vlanStatusData.setGateway(InetAddress.getByName(inetState.getGateway()));
|
||||
|
||||
if (inetState.dns != null) {
|
||||
String primaryDns = inetState.dns.get("primary");
|
||||
if (primaryDns != null) {
|
||||
lanStatusData.getVlanStatusDataMap().get(inetState.getVlanId())
|
||||
vlanStatusData
|
||||
.setDnsServer1(InetAddress.getByName(primaryDns));
|
||||
}
|
||||
lanStatusData.getVlanStatusDataMap().get(inetState.getVlanId())
|
||||
.setSubnetMask(InetAddress.getByName(inetState.getNetmask()));
|
||||
String secondaryDns = inetState.dns.get("secondary");
|
||||
if (secondaryDns != null) {
|
||||
vlanStatusData
|
||||
.setDnsServer2(InetAddress.getByName(secondaryDns));
|
||||
}
|
||||
}
|
||||
|
||||
String dhcpOption = inetState.getDhcpd().get("dhcp_option");
|
||||
if (inetState.netmask != null) {
|
||||
vlanStatusData
|
||||
.setSubnetMask(InetAddress.getByName(inetState.netmask));
|
||||
}
|
||||
if (inetState.dhcpd != null) {
|
||||
String dhcpOption = inetState.dhcpd.get("dhcp_option");
|
||||
if (dhcpOption != null) {
|
||||
String dhcpServer = dhcpOption.split(",")[1];
|
||||
if (dhcpServer != null) {
|
||||
lanStatusData.getVlanStatusDataMap().get(inetState.getVlanId())
|
||||
vlanStatusData
|
||||
.setDhcpServer(InetAddress.getByName(dhcpServer));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
String inetAddr = inetState.getInetAddr();
|
||||
if (inetAddr != null) {
|
||||
lanStatusData.getVlanStatusDataMap().get(inetState.getVlanId())
|
||||
vlanStatusData
|
||||
.setIpBase(InetAddress.getByName(inetAddr));
|
||||
}
|
||||
|
||||
} catch (UnknownHostException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
lanStatusData.getVlanStatusDataMap().put(inetState.vlanId, vlanStatusData);
|
||||
lanStatus.setDetails(lanStatusData);
|
||||
lanStatus = statusServiceInterface.update(lanStatus);
|
||||
|
||||
LOG.info("LANINFO updated for VLAN {}", lanStatus);
|
||||
|
||||
} catch (UnknownHostException e) {
|
||||
LOG.error("Unknown Host while configuring LANINFO", e);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -604,8 +604,9 @@ public class OvsdbDao {
|
||||
|
||||
/**
|
||||
* @param ovsdbClient
|
||||
* @return value of reporting_interval column for the stats_type=device from the
|
||||
* Wifi_Stats_Config table. If value is not provisioned then return -1.
|
||||
* @return value of reporting_interval column for the stats_type=device from
|
||||
* the Wifi_Stats_Config table. If value is not provisioned then
|
||||
* return -1.
|
||||
*/
|
||||
public long getDeviceStatsReportingInterval(OvsdbClient ovsdbClient) {
|
||||
long ret = -1;
|
||||
@@ -649,9 +650,10 @@ public class OvsdbDao {
|
||||
|
||||
/**
|
||||
* @param ovsdbClient
|
||||
* @param value of reporting_interval column for the stats_type=device
|
||||
* from the Wifi_Stats_Config table. If value is not
|
||||
* provisioned then return -1.
|
||||
* @param value
|
||||
* of reporting_interval column for the stats_type=device from
|
||||
* the Wifi_Stats_Config table. If value is not provisioned then
|
||||
* return -1.
|
||||
*/
|
||||
public void updateDeviceStatsReportingInterval(OvsdbClient ovsdbClient, long newValue) {
|
||||
try {
|
||||
@@ -2630,20 +2632,8 @@ public class OvsdbDao {
|
||||
}
|
||||
|
||||
if (vlanId > 1) {
|
||||
// vlan config, check to see if we already have the vlan in
|
||||
// question
|
||||
|
||||
Map<String, WifiInetConfigInfo> wifiInetConfigInfoMap = getProvisionedWifiInetConfigs(ovsdbClient);
|
||||
String vlanIfName = bridgeInterfaceName + "_" + vlanId;
|
||||
if (!wifiInetConfigInfoMap.containsKey(vlanIfName)) {
|
||||
// we need to make a VLAN, before we do anything else
|
||||
createInetConfigForVlan(ovsdbClient, bridgeInterfaceName, vlanIfName, vlanId, false);
|
||||
} else {
|
||||
createInetConfigForVlan(ovsdbClient, bridgeInterfaceName, vlanIfName, vlanId, true);
|
||||
}
|
||||
|
||||
createVlanNetworkInterfaces(ovsdbClient, vlanId);
|
||||
updateColumns.put("vlan_id", new Atom<>(vlanId));
|
||||
|
||||
}
|
||||
|
||||
updateColumns.put("mode", new Atom<>("ap"));
|
||||
@@ -2714,7 +2704,8 @@ public class OvsdbDao {
|
||||
customOptions.put("client_ul_limit", String.valueOf(clientUlLimit * 1000));
|
||||
customOptions.put("rts_threshold", String.valueOf(rtsCtsThreshold));
|
||||
// TODO: the frag_threshold is not supported on the AP
|
||||
// customOptions.put("frag_threshold", String.valueOf(fragThresholdBytes));
|
||||
// customOptions.put("frag_threshold",
|
||||
// String.valueOf(fragThresholdBytes));
|
||||
customOptions.put("dtim_period", String.valueOf(dtimPeriod));
|
||||
|
||||
if (enable80211k) {
|
||||
@@ -2756,9 +2747,11 @@ public class OvsdbDao {
|
||||
Map<String, WifiInetConfigInfo> inetConfigs = getProvisionedWifiInetConfigs(ovsdbClient);
|
||||
|
||||
if (inetConfigs.containsKey(vifInterfaceName)) {
|
||||
configureInetInterface(ovsdbClient, vifInterfaceName, enabled, "vif", true, (networkForwardMode == NetworkForwardMode.NAT));
|
||||
configureInetInterface(ovsdbClient, vifInterfaceName, enabled, "vif", true,
|
||||
(networkForwardMode == NetworkForwardMode.NAT));
|
||||
} else {
|
||||
configureInetInterface(ovsdbClient, vifInterfaceName, enabled, "vif", false, (networkForwardMode == NetworkForwardMode.NAT));
|
||||
configureInetInterface(ovsdbClient, vifInterfaceName, enabled, "vif", false,
|
||||
(networkForwardMode == NetworkForwardMode.NAT));
|
||||
}
|
||||
|
||||
LOG.info("Provisioned SSID {} on interface {} / {}", ssid, vifInterfaceName, radioFreqBand);
|
||||
@@ -3150,43 +3143,73 @@ public class OvsdbDao {
|
||||
|
||||
}
|
||||
|
||||
private void createInetConfigForVlan(OvsdbClient ovsdbClient, String parentIfName, String vlanIfName, int vlanId,
|
||||
boolean isUpdate) {
|
||||
private void createVlanNetworkInterfaces(OvsdbClient ovsdbClient, int vlanId) {
|
||||
try {
|
||||
|
||||
List<Operation> operations = new ArrayList<>();
|
||||
Map<String, Value> tableColumns = new HashMap<>();
|
||||
|
||||
Map<String, WifiInetConfigInfo> inetConfigMap = getProvisionedWifiInetConfigs(ovsdbClient);
|
||||
|
||||
WifiInetConfigInfo parentLanInterface = inetConfigMap.get(defaultLanInterfaceName);
|
||||
if (parentLanInterface == null)
|
||||
throw new RuntimeException(
|
||||
"Cannot get lan interface " + defaultLanInterfaceName + " for vlan " + vlanId);
|
||||
|
||||
tableColumns.put("if_type", new Atom<>("vlan"));
|
||||
tableColumns.put("vlan_id", new Atom<>(vlanId));
|
||||
tableColumns.put("if_name", new Atom<>(vlanIfName));
|
||||
tableColumns.put("parent_ifname", new Atom<>(parentIfName));
|
||||
tableColumns.put("if_name", new Atom<>(parentLanInterface.ifName + "_" + Integer.toString(vlanId)));
|
||||
tableColumns.put("parent_ifname", new Atom<>(parentLanInterface.ifName));
|
||||
tableColumns.put("enabled", new Atom<>(true));
|
||||
tableColumns.put("network", new Atom<>(true));
|
||||
tableColumns.put("dhcp_sniff", new Atom<>(true));
|
||||
|
||||
WifiInetConfigInfo parent = getProvisionedWifiInetConfigs(ovsdbClient).get(parentIfName);
|
||||
if (parent == null)
|
||||
throw new RuntimeException("Cannot get parent interface " + parentIfName + " for vlan " + vlanId);
|
||||
|
||||
tableColumns.put("ip_assign_scheme", new Atom<>(parent.ipAssignScheme));
|
||||
tableColumns.put("NAT", new Atom<>(parent.nat));
|
||||
tableColumns.put("ip_assign_scheme", new Atom<>(parentLanInterface.ipAssignScheme));
|
||||
tableColumns.put("NAT", new Atom<>(parentLanInterface.nat));
|
||||
tableColumns.put("mtu", new Atom<>(1500));
|
||||
|
||||
if (parent.ipAssignScheme.equals("static")) {
|
||||
String[] inetAddress = parent.inetAddr.split("\\.");
|
||||
String[] inetAddress = parentLanInterface.inetAddr.split("\\.");
|
||||
String vlanAddress = inetAddress[0] + "." + inetAddress[1] + "." + vlanId + "." + inetAddress[3];
|
||||
tableColumns.put("inet_addr", new Atom<>(vlanAddress));
|
||||
tableColumns.put("netmask", new Atom<>(parent.netmask));
|
||||
}
|
||||
tableColumns.put("netmask", new Atom<>(parentLanInterface.netmask));
|
||||
tableColumns.put("dhcpd", com.vmware.ovsdb.protocol.operation.notation.Map.of(parentLanInterface.dhcpd));
|
||||
|
||||
Row row = new Row(tableColumns);
|
||||
operations.clear();
|
||||
if (isUpdate) {
|
||||
List<Condition> conditions = new ArrayList<>();
|
||||
conditions.add(new Condition("if_name", Function.EQUALS, new Atom<>(vlanIfName)));
|
||||
operations.add(new Update(wifiInetConfigDbTable, conditions, row));
|
||||
|
||||
if (inetConfigMap.containsKey(parentLanInterface.ifName + "_" + Integer.toString(vlanId))) {
|
||||
List<Condition> conditions = new ArrayList<>();
|
||||
conditions.add(new Condition("vlan_id", Function.EQUALS, new Atom<>(vlanId)));
|
||||
conditions.add(new Condition("parent_ifname", Function.EQUALS, new Atom<>(parentLanInterface.ifName)));
|
||||
|
||||
operations.add(new Update(wifiInetConfigDbTable, conditions, row));
|
||||
} else {
|
||||
operations.add(new Insert(wifiInetConfigDbTable, row));
|
||||
}
|
||||
|
||||
WifiInetConfigInfo parentWanInterface = inetConfigMap.get(defaultWanInterfaceName);
|
||||
if (parentWanInterface == null)
|
||||
throw new RuntimeException(
|
||||
"Cannot get wan interface " + defaultWanInterfaceName + " for vlan " + vlanId);
|
||||
|
||||
tableColumns = new HashMap<>();
|
||||
|
||||
tableColumns.put("if_type", new Atom<>("vlan"));
|
||||
tableColumns.put("vlan_id", new Atom<>(vlanId));
|
||||
tableColumns.put("if_name", new Atom<>(parentWanInterface.ifName + "_" + Integer.toString(vlanId)));
|
||||
tableColumns.put("parent_ifname", new Atom<>(parentWanInterface.ifName));
|
||||
tableColumns.put("enabled", new Atom<>(true));
|
||||
tableColumns.put("network", new Atom<>(true));
|
||||
tableColumns.put("dhcp_sniff", new Atom<>(true));
|
||||
tableColumns.put("ip_assign_scheme", new Atom<>(parentWanInterface.ipAssignScheme));
|
||||
tableColumns.put("NAT", new Atom<>(parentWanInterface.nat));
|
||||
tableColumns.put("mtu", new Atom<>(1500));
|
||||
|
||||
row = new Row(tableColumns);
|
||||
|
||||
if (inetConfigMap.containsKey(parentWanInterface.ifName + "_" + Integer.toString(vlanId))) {
|
||||
List<Condition> conditions = new ArrayList<>();
|
||||
conditions.add(new Condition("vlan_id", Function.EQUALS, new Atom<>(vlanId)));
|
||||
conditions.add(new Condition("parent_ifname", Function.EQUALS, new Atom<>(parentWanInterface.ifName)));
|
||||
} else {
|
||||
operations.add(new Insert(wifiInetConfigDbTable, row));
|
||||
}
|
||||
@@ -3194,12 +3217,16 @@ public class OvsdbDao {
|
||||
CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations);
|
||||
OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
|
||||
|
||||
LOG.debug("Provisioned Vlan {}", vlanId);
|
||||
|
||||
for (OperationResult res : result) {
|
||||
LOG.debug("Op Result {}", res);
|
||||
}
|
||||
|
||||
inetConfigMap = getProvisionedWifiInetConfigs(ovsdbClient);
|
||||
|
||||
LOG.debug("Provisioned vlan on wan {} and lan {}",
|
||||
inetConfigMap.get(parentWanInterface.ifName + "_" + Integer.toString(vlanId)),
|
||||
inetConfigMap.get(parentLanInterface.ifName + "_" + Integer.toString(vlanId)));
|
||||
|
||||
} catch (OvsdbClientException | TimeoutException | ExecutionException | InterruptedException e) {
|
||||
LOG.error("Error in provisioning Vlan", e);
|
||||
throw new RuntimeException(e);
|
||||
|
||||
Reference in New Issue
Block a user