* @version 1.0
* @since 2016-06-16
*/
-public class IoTMaster {
+public final class IoTMaster {
/**
* IoTMaster class properties
private static String STR_LANGUAGE_CONTROLLER;
private static String STR_SKEL_CLASS_SUFFIX;
private static String STR_STUB_CLASS_SUFFIX;
+ private static String STR_ACTIVATE_SANDBOXING;
+ private static String STR_POLICY_ON;
+ private static String STR_MAC_TO_IP_TRANSLATION;
private static boolean BOOL_VERBOSE;
/**
private static final String STR_INT_STUB_CLS_CFG = "INTERFACE_STUB_CLASS";
private static final String STR_FILE_TRF_CFG = "ADDITIONAL_ZIP_FILE";
private static final String STR_LANGUAGE = "LANGUAGE";
+ private static final String STR_ADD_MAC_POL = "ADDITIONAL_MAC_POLICY";
private static final String STR_YES = "Yes";
private static final String STR_NO = "No";
private static final String STR_JAVA = "Java";
private static final String STR_SHELL_HEADER = "#!/bin/sh";
private static final String STR_JAVA_PATH = "/usr/bin/java";
private static final String STR_MAC_POL_PATH = "tomoyo/";
+ private static final String STR_TMP = "tmp";
+ private static final String STR_ARP = "arp";
private static int INT_SIZE = 4; // send length in the size of integer (4 bytes)
+ private static final int INT_DNS_PORT = 53;
/**
* Runtime class name constants - not to be configured by users
STR_JVM_INIT_HEAP_SIZE = null;
STR_JVM_MAX_HEAP_SIZE = null;
STR_LANGUAGE_CONTROLLER = null;
+ STR_ACTIVATE_SANDBOXING = null;
+ STR_POLICY_ON = null;
+ STR_MAC_TO_IP_TRANSLATION = null;
BOOL_VERBOSE = false;
}
lbIoT = new LoadBalancer(BOOL_VERBOSE);
lbIoT.setupLoadBalancer();
routerConfig = new RouterConfig();
- routerConfig.getAddressList(STR_ROUTER_ADD);
+ // Get MAC to IP translation either from /tmp/dhcp.leases or arp command
+ if (STR_MAC_TO_IP_TRANSLATION.equals(STR_TMP))
+ routerConfig.getAddressListTmp(STR_ROUTER_ADD);
+ else if (STR_MAC_TO_IP_TRANSLATION.equals(STR_ARP))
+ routerConfig.getAddressListArp(STR_ROUTER_ADD);
+ else
+ throw new Error("IoTMaster: Unknown value for STR_MAC_TO_IP_TRANSLATION: " + STR_MAC_TO_IP_TRANSLATION);
processJailConfig = new ProcessJailConfig();
- //processJailConfig.setAddressListObject(routerConfig.getAddressListObject());
objInitHand = new ObjectInitHandler(BOOL_VERBOSE);
objAddInitHand = new ObjectAddressInitHandler(BOOL_VERBOSE);
mapClassNameToCrim = new HashMap<String,Object>();
STR_JVM_MAX_HEAP_SIZE = prop.getProperty("JVM_MAX_HEAP_SIZE");
STR_SKEL_CLASS_SUFFIX = prop.getProperty("SKEL_CLASS_SUFFIX");
STR_STUB_CLASS_SUFFIX = prop.getProperty("STUB_CLASS_SUFFIX");
+ STR_ACTIVATE_SANDBOXING = prop.getProperty("ACTIVATE_SANDBOXING");
+ STR_POLICY_ON = prop.getProperty("POLICY_ON");
+ STR_MAC_TO_IP_TRANSLATION = prop.getProperty("MAC_TO_IP_TRANSLATION");
if(prop.getProperty("VERBOSE").equals(STR_YES)) {
BOOL_VERBOSE = true;
}
RuntimeOutput.print("STR_JVM_MAX_HEAP_SIZE=" + STR_JVM_MAX_HEAP_SIZE, BOOL_VERBOSE);
RuntimeOutput.print("STR_SKEL_CLASS_SUFFIX=" + STR_SKEL_CLASS_SUFFIX, BOOL_VERBOSE);
RuntimeOutput.print("STR_STUB_CLASS_SUFFIX=" + STR_STUB_CLASS_SUFFIX, BOOL_VERBOSE);
+ RuntimeOutput.print("STR_ACTIVATE_SANDBOXING=" + STR_ACTIVATE_SANDBOXING, BOOL_VERBOSE);
+ RuntimeOutput.print("STR_POLICY_ON=" + STR_POLICY_ON, BOOL_VERBOSE);
+ RuntimeOutput.print("STR_MAC_TO_IP_TRANSLATION=" + STR_MAC_TO_IP_TRANSLATION, BOOL_VERBOSE);
RuntimeOutput.print("BOOL_VERBOSE=" + BOOL_VERBOSE, BOOL_VERBOSE);
RuntimeOutput.print("IoTMaster: Information extracted successfully!", BOOL_VERBOSE);
}
System.out.println("IoTMaster: Error reading config file: " + strCfgFileName);
ex.printStackTrace();
}
- System.out.println("IoTMaster: Reading " + strCfgField +
+ RuntimeOutput.print("IoTMaster: Reading " + strCfgField +
" from config file: " + strCfgFileName + " with value: " +
- prop.getProperty(strCfgField, null));
+ prop.getProperty(strCfgField, null), BOOL_VERBOSE);
// NULL is returned if the property isn't found
return prop.getProperty(strCfgField, null);
}
* @params strFieldName String field name
* @params strIoTSlaveObjectHostAdd String slave host address
* @params inStream ObjectInputStream communication
- * @params inStream ObjectOutputStream communication
+ * @params outStream ObjectOutputStream communication
* @params strLanguage String language
* @return void
*/
// Get information from the set
List<Object[]> listObject = objAddInitHand.getFields(strFieldIdentifier);
+ RuntimeOutput.print("IoTMaster: DEBUG: Getting into instrumentIoTSetDevice!", BOOL_VERBOSE);
// Create a new IoTSet
if(strLanguage.equals(STR_JAVA)) {
Message msgCrtIoTSet = new MessageCreateSetRelation(IoTCommCode.CREATE_NEW_IOTSET, strFieldName);
if (commHan.getComPort(strDeviceAddressKey) == null) {
commHan.addPortConnection(strIoTSlaveObjectHostAdd, strDeviceAddressKey);
}
-
- // TODO: DEBUG!!!
- System.out.println("\n\n DEBUG: InstrumentSetDevice: Object Name: " + strObjName);
- System.out.println("DEBUG: InstrumentSetDevice: Port number: " + commHan.getComPort(strDeviceAddressKey));
- System.out.println("DEBUG: InstrumentSetDevice: Device address: " + strDeviceAddressKey + "\n\n");
-
// Send address one by one
if(strLanguage.equals(STR_JAVA)) {
Message msgGetIoTSetObj = null;
}
int iRows = setInstrumenter.numberOfRows();
RuntimeOutput.print("IoTMaster: Number of rows for IoTZigbeeAddress: " + iRows, BOOL_VERBOSE);
-
- // TODO: DEBUG!!!
- System.out.println("\n\nDEBUG: InstrumentZigbeeDevice: Object Name: " + strObjName);
- System.out.println("DEBUG: InstrumentZigbeeDevice: Port number: " + commHan.getComPort(strZigbeeGWAddressKey));
- System.out.println("DEBUG: InstrumentZigbeeDevice: Device address: " + strZigbeeGWAddress + "\n\n");
-
// Transfer the address
for(int iRow=0; iRow<iRows; iRow++) {
arrFieldValues = setInstrumenter.fieldValues(iRow);
// Extract the interface name for RMI
// e.g. ProximitySensorInterface, TempSensorInterface, etc.
-
String strObjCfgFile = STR_IOT_CODE_PATH + strObjClassName + "/" + strObjClassName + STR_CFG_FILE_EXT;
strObjClassInterfaceName = parseConfigFile(strObjCfgFile, STR_INTERFACE_CLS_CFG);
strObjStubClsIntfaceName = parseConfigFile(strObjCfgFile, STR_INT_STUB_CLS_CFG);
} else {
// If this is a new object ... then create one
// Get host address for IoTSlave from LoadBalancer
- //strIoTSlaveObjectHostAdd = lbIoT.selectHost();
strIoTSlaveObjectHostAdd = routerConfig.getIPFromMACAddress(lbIoT.selectHost());
if (strIoTSlaveControllerHostAdd == null)
throw new Error("IoTMaster: Could not translate MAC to IP address! Please check the router's /tmp/dhcp.leases!");
routerConfig.configureHostMainPolicies(strIoTSlaveObjectHostAdd, strIoTSlaveControllerHostAdd,
strIoTSlaveObjectHostAdd, STR_TCP_PROTOCOL);
// Configure MAC policies for objects
- //String strFileName = STR_MAC_POL_PATH + strObjClassName + STR_MAC_POLICY_EXT;
String strFileName = STR_MAC_POL_PATH + STR_JAVA + STR_MAC_POLICY_EXT;
- processJailConfig.configureProcessJailDeviceDriverPolicies(strIoTSlaveObjectHostAdd, strObjName, strObjClassName,
- strFileName, strIoTMasterHostAdd, commHan.getComPort(strObjName), commHan.getRMIRegPort(strObjName),
- commHan.getRMIStubPort(strObjName));
- processJailConfig.configureProcessJailContRMIPolicies(strObjControllerName, strIoTSlaveObjectHostAdd,
- commHan.getRMIRegPort(strObjName), commHan.getRMIStubPort(strObjName));
+ if (STR_ACTIVATE_SANDBOXING.equals("Yes")) {
+ processJailConfig.configureProcessJailDeviceDriverPolicies(strIoTSlaveObjectHostAdd, strObjName, strObjClassName,
+ strFileName, strIoTMasterHostAdd, commHan.getComPort(strObjName), commHan.getRMIRegPort(strObjName),
+ commHan.getRMIStubPort(strObjName));
+ // Check for additional MAC policy
+ String strMACConfigPath = STR_IOT_CODE_PATH + strObjClassName + "/";
+ String strCfgFile = strMACConfigPath + strObjClassName + STR_CFG_FILE_EXT;
+ String strAddMACPolicy = parseConfigFile(strCfgFile, STR_ADD_MAC_POL);
+ if (strAddMACPolicy != null && strAddMACPolicy.equals("Yes"))
+ processJailConfig.combineAdditionalMACPolicy(strMACConfigPath, strObjClassName, strIoTSlaveObjectHostAdd);
+ processJailConfig.configureProcessJailContRMIPolicies(strObjControllerName, strIoTSlaveObjectHostAdd,
+ commHan.getRMIRegPort(strObjName), commHan.getRMIStubPort(strObjName));
+ }
// Instrument the IoTSet declarations inside the class file
instrumentObjectIoTSet(strFieldObjectID, strLanguage);
}
commHan.addAdditionalPort(strUniqueDev);
}
}
-
- // TODO: DEBUG!!!
- System.out.println("\n\n DEBUG: InstrumentPolicySetDevice: Object Name: " + strObjName);
- System.out.println("DEBUG: InstrumentPolicySetDevice: Port number: " + commHan.getComPort(strDeviceAddressKey));
- System.out.println("DEBUG: InstrumentPolicySetDevice: Device address: " + strDeviceAddressKey + "\n\n");
-
// Send routing policy to router for device drivers and devices
// ROUTING POLICY: RMI communication - RMI registry and stub ports
if((iDestDeviceDriverPort == -1) && (!strProtocol.equals(STR_NO_PROTOCOL))) {
routerConfig.configureHostMainPolicies(strIoTSlaveObjectHostAdd, strIoTSlaveObjectHostAdd, strDeviceAddress, STR_TCP_PROTOCOL, iDestDeviceDriverPort);
routerConfig.configureRouterHTTPPolicies(STR_ROUTER_ADD, strIoTSlaveObjectHostAdd, strDeviceAddress);
routerConfig.configureHostHTTPPolicies(strIoTSlaveObjectHostAdd, strIoTSlaveObjectHostAdd, strDeviceAddress);
+ // Configure MAC policies
+ if (STR_ACTIVATE_SANDBOXING.equals("Yes"))
+ processJailConfig.configureProcessJailGWDevicePolicies(strIoTSlaveObjectHostAdd, STR_ROUTER_ADD, strDeviceAddress, INT_DNS_PORT);
} else {
// Other port numbers...
commHan.addDevicePort(iDestDeviceDriverPort);
routerConfig.configureHostMainPolicies(strIoTSlaveObjectHostAdd, strIoTSlaveObjectHostAdd, strDeviceAddress, strProtocol,
commHan.getComPort(strDeviceAddressKey), iDestDeviceDriverPort);
// Configure MAC policies
- processJailConfig.configureProcessJailDevicePolicies(strIoTSlaveObjectHostAdd, strProtocol,
- commHan.getComPort(strDeviceAddressKey), strDeviceAddress, iDestDeviceDriverPort);
+ if (STR_ACTIVATE_SANDBOXING.equals("Yes"))
+ processJailConfig.configureProcessJailDevicePolicies(strIoTSlaveObjectHostAdd, strProtocol,
+ commHan.getComPort(strDeviceAddressKey), strDeviceAddress, iDestDeviceDriverPort);
}
}
}
* @return void
*/
private void setRouterPolicyIoTSetAddress(String strFieldIdentifier, Map.Entry<String,Object> map,
- String strHostAddress) {
+ String strHostAddress, String strControllerName) {
// Get information from the set
SetInstrumenter setInstrumenter = (SetInstrumenter) map.getValue();
// Get device address
String strAddress = (String) arrFieldValues[0];
// Setting up router policies for HTTP/HTTPs
+ if (STR_ACTIVATE_SANDBOXING.equals("Yes")) {
+ if (strControllerName != null) {
+ processJailConfig.configureProcessJailInetAddressPolicies(strControllerName, STR_ROUTER_ADD, strAddress);
+ } else {
+ processJailConfig.configureProcessJailInetAddressPolicies(strHostAddress, STR_ROUTER_ADD, strAddress);
+ }
+ }
routerConfig.configureRouterHTTPPolicies(STR_ROUTER_ADD, strHostAddress, strAddress);
routerConfig.configureHostHTTPPolicies(strHostAddress, strHostAddress, strAddress);
}
setRouterPolicyIoTSetDevice(strFieldIdentifier, map, strIoTSlaveObjectHostAdd);
} else if(setInstrumenter.getObjTableName().equals(STR_IOT_ADD_CLS)) {
// Instrument the IoTAddress
- setRouterPolicyIoTSetAddress(strFieldIdentifier, map, strIoTSlaveObjectHostAdd);
+ setRouterPolicyIoTSetAddress(strFieldIdentifier, map, strIoTSlaveObjectHostAdd, null);
} else if(setInstrumenter.getObjTableName().equals(STR_IOT_ZB_ADD_CLS)) {
// Instrument the IoTZigbeeAddress - special feature for Zigbee device support
RuntimeOutput.print("IoTMaster: IoTZigbeeAddress found! No router policy is set here..",
private String getCmdJavaDriverIoTSlave(String strIoTMasterHostAdd, String strIoTSlaveObjectHostAdd, String strObjName) {
// Create an Shell executable
- String strJavaCommand = STR_SHELL_HEADER + "\nexec " + STR_JAVA_PATH + " " + STR_CLS_PATH + " " + STR_RMI_PATH + " " +
+ String strJavaCommand = STR_SHELL_HEADER + "\nexec sudo " + STR_JAVA_PATH + " " + STR_CLS_PATH + " " + STR_RMI_PATH + " " +
STR_RMI_HOSTNAME + strIoTSlaveObjectHostAdd + " " + STR_IOT_SLAVE_CLS + " " + strIoTMasterHostAdd + " " +
commHan.getComPort(strObjName) + " " + commHan.getRMIRegPort(strObjName) + " " +
commHan.getRMIStubPort(strObjName) + " > " + STR_LOG_FILE_PATH + strObjName + ".log &";
// Send the file to the compute node
String strCmdSend = "scp " + shellFile + " " + STR_USERNAME + strIoTSlaveObjectHostAdd + ":" + STR_RUNTIME_DIR;
runCommand(strCmdSend);
- System.out.println("IoTMaster: Sending shell file: " + strCmdSend);
+ RuntimeOutput.print("IoTMaster: Sending shell file: " + strCmdSend, BOOL_VERBOSE);
return STR_SSH + " " + STR_USERNAME + strIoTSlaveObjectHostAdd + " cd " + STR_RUNTIME_DIR + " " + shellFile;
}
strLanguageDriver = parseConfigFile(sCfgFile, STR_LANGUAGE);
if(strLanguageDriver == null) // Check nullness for the second time - report if it is still null
throw new Error("IoTMaster: Language specification missing in config file: " + sCfgFile);
- // PROFILING
- long start = 0;
- long result = 0;
- // PROFILING
- start = System.currentTimeMillis();
-
// Construct ssh command line
// e.g. ssh rtrimana@dw-2.eecs.uci.edu cd <path>;
// java -cp $CLASSPATH:./*.jar
else
throw new Error("IoTMaster: Language specification not recognized: " + strLanguageDriver);
RuntimeOutput.print("IoTMaster: Language for " + strObjName + " is " + strLanguageDriver, BOOL_VERBOSE);
-
RuntimeOutput.print(strSSHCommand, BOOL_VERBOSE);
// Start a new thread to start a new JVM
createThread(strSSHCommand);
outStream = new BufferedOutputStream(socket.getOutputStream());
recvAck(inStream);
}
-
- // PROFILING
- result = System.currentTimeMillis()-start;
- System.out.println("\n\n ==> Time needed to start JVM for " + strObjName + ": " + result + "\n\n");
-
- // PROFILING
- start = System.currentTimeMillis();
-
if(strLanguageDriver.equals(STR_JAVA)) {
sendFileToJavaSlaveDriver(serverSocket, inStream, outStream, strObjName,
strObjClassName, strObjClassInterfaceName, strObjStubClsIntfaceName,
commHan.getRMIRegPort(strObjName), commHan.getRMIStubPort(strObjName), arrFieldValues, arrFieldClasses,
outStream, inStream);
}
-
- // PROFILING
- result = System.currentTimeMillis()-start;
- System.out.println("\n\n ==> Time needed to send JAR file for " + strObjName + ": " + result + "\n\n");
-
- // PROFILING
- start = System.currentTimeMillis();
-
// Instrument the class source code and look for IoTSet for device addresses
// e.g. @config private IoTSet<IoTDeviceAddress> lb_addresses;
RuntimeOutput.print("IoTMaster: Instantiating for " + strObjClassName + " with objectID " + strFieldObjectID, BOOL_VERBOSE);
if(setInstrumenter.getObjTableName().equals(STR_IOT_DEV_ADD_CLS)) {
// Instrument the normal IoTDeviceAddress
synchronized(this) {
+ //RuntimeOutput.print("IoTMaster: DEBUG: Processing " + STR_IOT_DEV_ADD_CLS + "!", BOOL_VERBOSE);
instrumentIoTSetDevice(strFieldIdentifier, strObjName, strFieldName, strIoTSlaveObjectHostAdd, inStream, outStream, strLanguageDriver);
}
} else if(setInstrumenter.getObjTableName().equals(STR_IOT_ZB_ADD_CLS)) {
createDriverObjectCpp(outStream, inStream);
//endSessionCpp(outStream);
}
-
- // PROFILING
- result = System.currentTimeMillis()-start;
- System.out.println("\n\n ==> Time needed to create object " + strObjName + " and instrument IoTDeviceAddress: " + result + "\n\n");
-
// Closing streams
outStream.close();
inStream.close();
reinitializeIoTSetFieldCpp(outStream, inStream);
} else if (iotcommMsg == IoTCommCode.CREATE_NEW_IOTRELATION) {
// == COMMUNICATION WITH IOTSLAVE CONTROLLER TO CREATE IOTRELATION
- // TODO: createNewIoTRelation needs to be created here!
createNewIoTRelationCpp(str, outStream, inStream);
List<ObjectInitInfo> listObject = objInitHand.getListObjectInitInfo(str);
List<ObjectInitInfo> listSecondObject = objInitHand.getSecondObjectInitInfo(str);
private void setRouterBasicPolicies(String strRouter) {
String strMonitorHost = routerConfig.getIPFromMACAddress(STR_MONITORING_HOST);
+ routerConfig.initMainPolicy(strRouter);
+ routerConfig.combineRouterPolicies(strRouter);
routerConfig.configureRouterICMPPolicies(strRouter, strMonitorHost);
routerConfig.configureRouterDHCPPolicies(strRouter);
routerConfig.configureRouterDNSPolicies(strRouter);
private void setHostBasicPolicies(String strHost) {
String strMonitorHost = routerConfig.getIPFromMACAddress(STR_MONITORING_HOST);
+ routerConfig.initMainPolicy(strHost);
+ routerConfig.combineRouterPolicies(strHost);
routerConfig.configureHostDHCPPolicies(strHost);
routerConfig.configureHostDNSPolicies(strHost);
if (strHost.equals(strMonitorHost)) {
try {
// Extract hostname for this IoTMaster from MySQL DB
strIoTMasterHostAdd = routerConfig.getIPFromMACAddress(STR_MASTER_MAC_ADD);
+ // Assign a new list of PrintWriter objects
+ routerConfig.renewPrintWriter();
+ HashSet<String> setAddresses = null;
// Loop as we can still find controller/device classes
for(int i=0; i<strObjectNames.length; i++) {
// PROFILING
start = System.currentTimeMillis();
-
- // Assign a new list of PrintWriter objects
- routerConfig.renewPrintWriter();
+ // Assign a new list of main PrintWriter objects
+ routerConfig.renewMainPrintWriter();
// Get controller names one by one
String strObjControllerName = strObjectNames[i];
// Use LoadBalancer to assign a host address
recvAck(inStream);
}
RuntimeOutput.print("IoTMaster: Communication established!", BOOL_VERBOSE);
-
- // PROFILING
- result = System.currentTimeMillis()-start;
- System.out.println("\n\n ==> From start until after SSH for main controller: " + result);
- // PROFILING
- start = System.currentTimeMillis();
-
// Send files for every controller class
// e.g. AcmeProximity.jar and AcmeProximity.zip
String strControllerClassName = strObjControllerName + STR_CLS_FILE_EXT;
}
// Write basic MAC policies for controller
//String strFileName = STR_MAC_POL_PATH + strObjControllerName + STR_MAC_POLICY_EXT;
- String strFileName = STR_MAC_POL_PATH + STR_JAVA + STR_MAC_POLICY_EXT;
- processJailConfig.configureProcessJailControllerPolicies(strObjControllerName, strFileName,
- strIoTMasterHostAdd, commHan.getComPort(strObjControllerName));
- // PROFILING
- result = System.currentTimeMillis()-start;
- System.out.println("\n\n ==> From IoTSlave start until main controller object is created: " + result);
- System.out.println(" ==> Including file transfer times!\n\n");
- // PROFILING
- start = System.currentTimeMillis();
-
+ if (STR_ACTIVATE_SANDBOXING.equals("Yes")) {
+ String strFileName = STR_MAC_POL_PATH + STR_JAVA + STR_MAC_POLICY_EXT;
+ processJailConfig.configureProcessJailControllerPolicies(strObjControllerName, strFileName,
+ strIoTMasterHostAdd, commHan.getComPort(strObjControllerName));
+ // Whether or not we need additional Tomoyo policy?
+ String strAddMACPolicy = parseConfigFile(strControllerCfg, STR_ADD_MAC_POL);
+ if (strAddMACPolicy != null && strAddMACPolicy.equals("Yes")) {
+ String strContMACCfg = STR_CONT_PATH + strObjControllerName + "/";
+ processJailConfig.combineAdditionalMACPolicy(strContMACCfg, strObjControllerName, strObjControllerName);
+ }
+ }
// == END INITIALIZING CONTROLLER/DEVICE IOTSLAVE ==
// Instrumenting one file
RuntimeOutput.print("IoTMaster: Opening class file: " + strControllerClassName, BOOL_VERBOSE);
throw new Error(strErrMsg);
} else if(setInstrumenter.getObjTableName().equals(STR_IOT_ADD_CLS)) {
// Instrument the IoTAddress
- setRouterPolicyIoTSetAddress(strFieldName, map, strIoTSlaveControllerHostAdd);
+ setRouterPolicyIoTSetAddress(strFieldName, map, strIoTSlaveControllerHostAdd, strObjControllerName);
instrumentIoTSetAddress(strFieldName, strFieldName, inStream, outStream, STR_LANGUAGE_CONTROLLER);
} else {
// Any other cases
// Combine controller MAC policies with the main policy file for the host
String strTempFileName = "./" + strObjControllerName + STR_MAC_POLICY_EXT;
processJailConfig.combineControllerMACPolicies(strIoTSlaveControllerHostAdd, strObjControllerName, strTempFileName);
- processJailConfig.close();
-
- // PROFILING
- result = System.currentTimeMillis()-start;
- System.out.println("\n\n ==> Time needed to instrument device driver objects: " + result + "\n\n");
- System.out.println(" ==> #Objects: " + commHan.getActiveControllerObjectList().size() + "\n\n");
-
- // PROFILING
- start = System.currentTimeMillis();
-
- // ROUTING POLICY: Deploy basic policies if this is the last controller
- if (i == strObjectNames.length-1) {
- // ROUTING POLICY: implement basic policies to reject all other irrelevant traffics
- for(String s: commHan.getHosts()) {
- setHostBasicPolicies(s);
- }
- // We retain all the basic policies for router,
- // but we delete the initial allowance policies for internal all TCP and UDP communications
- setRouterBasicPolicies(STR_ROUTER_ADD);
+ processJailConfig.flush();
+ // ROUTING POLICY: implement basic policies to reject all other irrelevant traffics
+ for(String s: commHan.getHosts()) {
+ setHostBasicPolicies(s);
}
- // Close access to policy files and deploy policies
- routerConfig.close();
+ // We retain all the basic policies for router,
+ // but we delete the initial allowance policies for internal all TCP and UDP communications
+ setRouterBasicPolicies(STR_ROUTER_ADD);
+ routerConfig.closeMain();
// Deploy the policy
- HashSet<String> setAddresses = new HashSet<String>(commHan.getHosts());
+ setAddresses = new HashSet<String>(commHan.getHosts());
setAddresses.add(strIoTMasterHostAdd);
- createPolicyThreads(STR_ROUTER_ADD, setAddresses);
-
- // PROFILING
- result = System.currentTimeMillis()-start;
- System.out.println("\n\n ==> Time needed to send policy files and deploy them : " + result + "\n\n");
-
- // PROFILING
- start = System.currentTimeMillis();
-
+ // See if firewall policy is configured to be "on" or "off"
+ if (STR_POLICY_ON.equals(STR_YES))
+ createPolicyThreads(STR_ROUTER_ADD, setAddresses);
// Separating object creations and Set/Relation initializations
createDriverObjects();
-
- // PROFILING
- result = System.currentTimeMillis()-start;
- System.out.println("\n\n ==> Time needed to instantiate objects: " + result + "\n\n");
- // PROFILING
- start = System.currentTimeMillis();
-
// Sets and relations initializations
if(STR_LANGUAGE_CONTROLLER.equals(STR_JAVA))
initializeSetsAndRelationsJava(inStream, outStream);
else
initializeSetsAndRelationsCpp(inStream, outStream);;
-
- // PROFILING
- result = System.currentTimeMillis()-start;
- System.out.println("\n\n ==> Time needed to initialize sets and relations: " + result + "\n\n");
-
if(STR_LANGUAGE_CONTROLLER.equals(STR_JAVA))
// == COMMUNICATION WITH IOTSLAVE CONTROLLER TO EXECUTE INIT METHOD
commMasterToSlave(new MessageSimple(IoTCommCode.INVOKE_INIT_METHOD), "Invoke init() method!", inStream, outStream);
inStream.close();
socket.close();
serverSocket.close();
+ objInitHand.clearObjectInitHandler();
commHan.printLists();
+ commHan.clearCommunicationHandler();
lbIoT.printHostInfo();
- createMACPolicyThreads(setAddresses);
}
+ // Close access to policy files and deploy policies
+ routerConfig.close();
+ processJailConfig.close();
+ if (STR_ACTIVATE_SANDBOXING.equals("Yes"))
+ createMACPolicyThreads(setAddresses);
} catch (IOException |
InterruptedException |