diff --git a/src/main/java/ui/GTURTLEModeling.java b/src/main/java/ui/GTURTLEModeling.java index a79ded25710534d1bfd562468f204a02a7d9c9d9..ec035b63bf3ffe836e8f08883808338e3a286c46 100644 --- a/src/main/java/ui/GTURTLEModeling.java +++ b/src/main/java/ui/GTURTLEModeling.java @@ -740,7 +740,7 @@ outerloop: } public boolean pathExists(TMLMapping<TGComponent> map, HwBridge firewallNode, TMLTask t1){ - System.out.println("Checking path " + firewallNode.getName() + t1.getName()); + //System.out.println("Checking path " + firewallNode.getName() + t1.getName()); List<HwLink> links = map.getTMLArchitecture().getHwLinks(); List<HwNode> found = new ArrayList<HwNode>(); List<HwNode> done = new ArrayList<HwNode>(); @@ -755,7 +755,6 @@ outerloop: } } while (found.size() > 0) { - System.out.println("found " + found); HwNode curr = found.remove(0); for (HwLink link : links) { //System.out.println("LINK " + link.hwnode.getName() + " " + link.bus.getName()); @@ -775,7 +774,7 @@ outerloop: } done.add(curr); } - System.out.println("!pathExists " + t1.getName() + " " + firewallNode); + return false; } @@ -816,7 +815,7 @@ outerloop: } for (HwBridge firewallNode : map.getTMLArchitecture().getFirewalls()) { - + List<String> chansToRemove= new ArrayList<String>(); TraceManager.addDev("Found firewall " + firewallNode.getName()); TMLCPrimitiveComponent firewallComp = null; TMLADStartState adStart = null; @@ -834,6 +833,8 @@ outerloop: //Add a single connection to update rules boolean updateRulesAdded=false; + + int links = map.getArch().getLinkByHwNode(firewallNode).size(); TraceManager.addDev("Links " + links); @@ -909,7 +910,6 @@ outerloop: //Build requests between every connected task and firewall task for (TMLTask task: map.getTMLModeling().getTasks()){ - TMLCPrimitiveComponent taskcomp =null; for (TGComponent tg : tcdp.getComponentList()) { if (tg instanceof TMLCPrimitiveComponent) { @@ -917,6 +917,7 @@ outerloop: taskcomp =((TMLCPrimitiveComponent) tg); break; } + } else if (tg instanceof TMLCCompositeComponent) { TMLCCompositeComponent cc = (TMLCCompositeComponent) tg; @@ -928,12 +929,15 @@ outerloop: } } } + } + if (taskcomp==null){ continue; } + if (pathExists(map, firewallNode, task)){ //Add Request Ports @@ -977,6 +981,8 @@ outerloop: newtcdp.addComponent(originPort, taskcomp.getX(), taskcomp.getY(), true, true); newtcdp.addComponent(destPort, firewallComp.getX(), firewallComp.getY(), true, true); updateRulesAdded=true; + + } } @@ -996,12 +1002,12 @@ outerloop: toAdd.add(chan); continue; } - - channelIndexMap.put(chan.getName(), index); + chansToRemove.add(chan.getName().split("__")[1]); + channelIndexMap.put(chan.getName().split("__")[1], index); index++; TMLPort origPort = chan.getOriginPort(); TMLPort destPort = chan.getDestinationPort(); - TMLChannel wr = new TMLChannel(chan.getName() + "_firewallIn", chan.getReferenceObject()); + TMLChannel wr = new TMLChannel(chan.getName().split("__")[1] + "_firewallIn", chan.getReferenceObject()); //Specify new channel attributes wr.setSize(chan.getSize()); wr.setMax(chan.getMax()); @@ -1009,7 +1015,7 @@ outerloop: wr.setType(TMLChannel.BRBW); wr.setPriority(chan.getPriority()); wr.setTasks(orig, firewall); - TMLChannel rd = new TMLChannel(chan.getName() + "_firewallOut", chan.getReferenceObject()); + TMLChannel rd = new TMLChannel(chan.getName().split("__")[1] + "_firewallOut", chan.getReferenceObject()); rd.setTasks(firewall, dest); rd.setSize(chan.getSize()); rd.setMax(chan.getMax()); @@ -1027,12 +1033,29 @@ outerloop: } - tmlm.removeAllChannels(); - for (TMLChannel c : toAdd) { - tmlm.addChannel(c); - } + List<TGComponent> tmpRemove = new ArrayList<TGComponent>(); + for (TGComponent tg : newtcdp.getComponentList()) { + if (tg instanceof TMLCPrimitiveComponent) { + TMLCPrimitiveComponent taskcomp =(TMLCPrimitiveComponent) tg; + for (TMLCPrimitivePort port: taskcomp.getAllChannelsOriginPorts()){ + //System.out.println("chantoremove " + chansToRemove + " " + port.getPortName()); + if (chansToRemove.contains(port.getPortName())){ + //System.out.println("Removing " + port); + tmpRemove.add(port); + } + } + for (TMLCPrimitivePort port: taskcomp.getAllChannelsDestinationPorts()){ + if (chansToRemove.contains(port.getPortName())){ + tmpRemove.add(port); + } + } + } + } + for (TGComponent tg: tmpRemove){ + newtcdp.removeComponent(tg); + } //Build activity diagram //Get start state @@ -1134,7 +1157,7 @@ outerloop: firewallADP.addComponent(tmp, action.getX(), action.getY(), false, true); - adChoiceRules.setGuard("[channelIndex=="+ channelIndexMap.get(chan.getName())+"]",i-1); + adChoiceRules.setGuard("[channelIndex=="+ channelIndexMap.get(chan.getName().split("__")[1])+"]",i-1); //add stop state adStop = new TMLADStopState(100*i, 600, firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null, firewallADP); @@ -1147,7 +1170,7 @@ outerloop: - index++; + i++; } for (TMLChannel chan : inChans.keySet()) { @@ -1203,28 +1226,29 @@ outerloop: tcp.tmlctdp.addComponent(conn, 0, 0, false, true); i++; } - int xpos = 500; + int xpos = 700; + int ypos= 100; i = 1; for (TMLChannel chan : inChans.keySet()) { if (i>3){ break; } - adChoice.setGuard("[index=="+channelIndexMap.get(chan.getName())+"]",i-1); + adChoice.setGuard("[index=="+channelIndexMap.get(chan.getName().split("__")[1])+"]",i-1); TMLChannel newChan = inChans.get(chan); - adRC = new TMLADReadChannel(xpos, 350, firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null, firewallADP); + adRC = new TMLADReadChannel(xpos, 450, firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null, firewallADP); adRC.setChannelName(newChan.getName()); adRC.setSamples("1"); tmp = new TGConnectorTMLAD(adRC.getX(), adRC.getY(), firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null, firewallADP, adChoice.getTGConnectingPointAtIndex(i), adRC.getTGConnectingPointAtIndex(0), new Vector<Point>()); firewallADP.addComponent(tmp, adRC.getX(), adRC.getY(), false, true); - firewallADP.addComponent(adRC, xpos, 350, false, true); + firewallADP.addComponent(adRC, xpos, 450, false, true); //Execute for latency value - exec = new TMLADExecI(xpos, 400, firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null, firewallADP); + exec = new TMLADExecI(xpos, 500, firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null, firewallADP); exec.setDelayValue(Integer.toString(firewallNode.latency)); - firewallADP.addComponent(exec, xpos, 400, false, true); + firewallADP.addComponent(exec, xpos, 500, false, true); tmp = new TGConnectorTMLAD(exec.getX(), exec.getY(), firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null, firewallADP, adRC.getTGConnectingPointAtIndex(1), exec.getTGConnectingPointAtIndex(0), new Vector<Point>()); firewallADP.addComponent(tmp, exec.getX(), exec.getY(), false, true); @@ -1232,37 +1256,36 @@ outerloop: - adChoice2 = new TMLADChoice(xpos, 500, firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null, firewallADP); - firewallADP.addComponent(adChoice2, 500, 300, false, true); + adChoice2 = new TMLADChoice(xpos, 550, firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null, firewallADP); + firewallADP.addComponent(adChoice2, 550, 300, false, true); tmp = new TGConnectorTMLAD(exec.getX(), exec.getY(), firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null, firewallADP, exec.getTGConnectingPointAtIndex(1), adChoice2.getTGConnectingPointAtIndex(0), new Vector<Point>()); firewallADP.addComponent(tmp, exec.getX(), exec.getY(), false, true); - // if (channelAllowed(map, chan)) { TMLChannel wrChan = outChans.get(chan); - adWC = new TMLADWriteChannel(xpos, 600, firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null, firewallADP); + adWC = new TMLADWriteChannel(xpos-50, 600, firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null, firewallADP); adWC.setChannelName(wrChan.getName()); adWC.setSamples("1"); - firewallADP.addComponent(adWC, xpos, 600, false, true); + firewallADP.addComponent(adWC, xpos-50, 600, false, true); tmp = new TGConnectorTMLAD(exec.getX(), exec.getY(), firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null, firewallADP, adChoice2.getTGConnectingPointAtIndex(1), adWC.getTGConnectingPointAtIndex(0), new Vector<Point>()); firewallADP.addComponent(tmp, exec.getX(), exec.getY(), false, true); - adStop = new TMLADStopState(xpos, 650, firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null, firewallADP); - firewallADP.addComponent(adStop, xpos, 650, false, true); + adStop = new TMLADStopState(xpos-50, 650, firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null, firewallADP); + firewallADP.addComponent(adStop, xpos-50, 650, false, true); tmp = new TGConnectorTMLAD(adStop.getX(), adStop.getY(), firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null, firewallADP, adWC.getTGConnectingPointAtIndex(1), adStop.getTGConnectingPointAtIndex(0), new Vector<Point>()); firewallADP.addComponent(tmp, adStop.getX(), adStop.getY(), false, true); // } else { - adStop2 = new TMLADStopState(xpos, 650, firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null, firewallADP); - firewallADP.addComponent(adStop2, xpos, 650, false, true); + adStop2 = new TMLADStopState(xpos+50, 650, firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null, firewallADP); + firewallADP.addComponent(adStop2, xpos+50, 650, false, true); tmp = new TGConnectorTMLAD(adStop.getX(), adStop.getY(), firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null, firewallADP, adChoice2.getTGConnectingPointAtIndex(2), adStop2.getTGConnectingPointAtIndex(0), new Vector<Point>()); firewallADP.addComponent(tmp, adStop.getX(), adStop.getY(), false, true); // } - xpos += 100; + xpos += 200; i++; } @@ -1272,44 +1295,85 @@ outerloop: map.getCorrespondanceList().addCor(start, adStart); - - - - - - } - - //Replace channel operator with new firewallIn and firewallOut operators - for (TMLTask task: map.getTMLModeling().getTasks()){ - //Get activity diagram - TMLActivityDiagramPanel tad = tcp.getTMLActivityDiagramPanel(task.getName()); - TGConnector fromStart = new TGConnectorTMLAD(0, 0, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>()); + //Replace channel operator with new firewallIn and firewallOut operators + for (TMLTask task: map.getTMLModeling().getTasks()){ + if (!pathExists(map, firewallNode, task)){ + continue; + } + //Get activity diagram + TMLActivityDiagramPanel tad = tcp.getTMLActivityDiagramPanel(task.getName()); + TGConnector fromStart = new TGConnectorTMLAD(0, 0, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>()); - List<TGComponent> wrChans = new ArrayList<TGComponent>(); + List<TMLADWriteChannel> wrChans = new ArrayList<TMLADWriteChannel>(); - List<TGComponent> rdChans = new ArrayList<TGComponent>(); + List<TMLADReadChannel> rdChans = new ArrayList<TMLADReadChannel>(); - for (TGComponent tg : tad.getComponentList()) { - if (tg instanceof TMLADWriteChannel) { - TMLADWriteChannel writeChannel = (TMLADWriteChannel) tg; - if (fromStart != null) { - wrChans.add(tg); - } - } - if (tg instanceof TMLADReadChannel) { - TMLADReadChannel readChannel = (TMLADReadChannel) tg; - if (fromStart != null) { - rdChans.add(tg); + for (TGComponent tg : tad.getComponentList()) { + if (tg instanceof TMLADWriteChannel) { + TMLADWriteChannel writeChannel = (TMLADWriteChannel) tg; + if (fromStart != null) { + wrChans.add(writeChannel); + } + } + if (tg instanceof TMLADReadChannel) { + TMLADReadChannel readChannel = (TMLADReadChannel) tg; + if (fromStart != null) { + rdChans.add(readChannel); + } + } + } + //For each writeChannel, add request operator, rename channel + + + + for (TMLADWriteChannel wr: wrChans){ + + String chanName = wr.getChannelName(); + + xpos = wr.getX(); + ypos = wr.getY(); + fromStart = tad.findTGConnectorEndingAt(wr.getTGConnectingPointAtIndex(0)); + TGConnectingPoint point = fromStart.getTGConnectingPointP2(); + int yShift = 50; + + TMLADSendRequest sendreq = new TMLADSendRequest(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad); + sendreq.setRequestName("req" + firewallNode.getName()); + + sendreq.setParam(0, Integer.toString(channelIndexMap.get(chanName))); + sendreq.makeValue(); + + tad.addComponent(sendreq, xpos, ypos, false, true); + //Re-route connector to sendreq + fromStart.setP2(sendreq.getTGConnectingPointAtIndex(0)); + + + //Add connector between sendreq and writechannel + fromStart = new TGConnectorTMLAD(wr.getX(), wr.getY(), tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, sendreq.getTGConnectingPointAtIndex(1), wr.getTGConnectingPointAtIndex(0), new Vector<Point>()); + tad.addComponent(fromStart, xpos, ypos, false, true); + + wr.setChannelName(chanName + "_firewallIn"); + wr.makeValue(); + + //Shift everything below sendreq down + for (TGComponent tg : tad.getComponentList()) { + if (tg.getY() >= ypos && tg!=sendreq) { + tg.setCd(tg.getX(), tg.getY() + yShift); + } } - } - } - //For each writeChannel, add request operator, rename channel - - - //for each readchannel, rename channel + } + //for each readchannel, rename channel + for (TMLADReadChannel rd: rdChans){ + String chanName = rd.getChannelName(); + rd.setChannelName(chanName + "_firewallOut"); + rd.makeValue(); + } + + } + //Remove old channel ports + } diff --git a/src/main/java/ui/SecurityGeneration.java b/src/main/java/ui/SecurityGeneration.java index 94cd6fdc1544aaaa7517f81cc36a00a9a4ec4dcd..583c9197609d57a3b4fb6b0379fbc8db4dc0551d 100644 --- a/src/main/java/ui/SecurityGeneration.java +++ b/src/main/java/ui/SecurityGeneration.java @@ -1000,6 +1000,7 @@ public class SecurityGeneration implements Runnable { wr = new TMLADWriteChannel(xpos, ypos + yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad); wr.setChannelName("data_" + chanName + "_" + task.getName().split("__")[1]); wr.setSecurityContext(channelSecMap.get(chanName)); + wr.makeValue(); tad.addComponent(wr, xpos, ypos + yShift, false, true); //Add connector between request and write