def applyCountermeasure( trace, metadata ): [targetDistributionBi, targetDistributionUp, targetDistributionDown] = metadata newTrace = Trace(trace.getId()) # primary sampling timeCursor = 0 for packet in trace.getPackets(): timeCursor = packet.getTime() targetDistribution = targetDistributionDown if packet.getDirection()==Packet.UP: targetDistribution = targetDistributionUp packets = DirectTargetSampling.morphPacket( packet, targetDistribution ) for newPacket in packets: newTrace.addPacket( newPacket ) # secondary sampling while True: l1Distance = newTrace.calcL1Distance( targetDistributionBi ) if l1Distance <= DirectTargetSampling.L1_THRESHHOLD: break timeCursor += 10 newDirection, newLen = newTrace.getMostSkewedDimension( targetDistributionBi ) packet = Packet( newDirection, timeCursor, newLen ) newTrace.addPacket( packet ) return newTrace
def getTraceHerrmann(webpageId, traceIndex): if config.DATA_SOURCE == 1: datasourceId = 4 elif config.DATA_SOURCE == 2: datasourceId = 5 key = '.'.join([ 'Webpage', 'H', str(datasourceId), str(webpageId), str(traceIndex) ]) trace = mc.get(key) if ENABLE_CACHE and trace: trace = cPickle.loads(trace) else: connection = MySQLdb.connect(host=config.MYSQL_HOST, user=config.MYSQL_USER, passwd=config.MYSQL_PASSWD, db=config.MYSQL_DB) cursor = connection.cursor() command = """SELECT packets.trace_id, packets.size, ROUND(packets.abstime*1000) FROM (SELECT id FROM traces WHERE site_id = (SELECT id FROM sites WHERE dataset_id = """ + str( datasourceId) + """ ORDER BY id LIMIT """ + str( webpageId) + """,1) ORDER BY id LIMIT """ + str( traceIndex) + """,1) traces, packets WHERE traces.id = packets.trace_id ORDER BY packets.trace_id, packets.abstime""" cursor.execute(command) data = cursor.fetchall() trace = Trace(webpageId) for item in data: trace.setId(int(item[0])) direction = Packet.UP if int(item[1]) > 0: direction = Packet.DOWN time = item[2] length = int(math.fabs(item[1])) trace.addPacket(Packet(direction, time, length)) connection.close() mc.set(key, cPickle.dumps(trace, protocol=cPickle.HIGHEST_PROTOCOL)) return trace
def applyCountermeasure(trace): bsize = random.choice(range(3, 4, 1)) dsize = random.choice(range(3, 4, 1)) newTrace = Trace(trace.getId()) rand = random.choice(range(8,256,8)) count = 0 curDir = 0 for packet in trace.getPackets(): direction = packet.getDirection() length = packet.getLength() newlength = min(length + rand, Packet.MTU) time = packet.getTime() newPacket = Packet(direction, time, newlength ) if ((direction == 1 and curDir == 1) and count < bsize): count +=1 newTrace.addPacket(newPacket) elif ((direction == 1 and curDir == 1) and count == bsize): BurstClient2Server.makeDummy(newTrace, length, time, curDir, dsize) newTrace.addPacket(newPacket) count = 1 elif ((direction == 1 and curDir == 0)): newTrace.addPacket(newPacket) curDir = 1 count = 1 elif ((direction == 0 and curDir == 1)): newTrace.addPacket(newPacket) curDir = 0 count = 1 elif (direction == 0 and curDir == 0): newTrace.addPacket(newPacket) count = 1 return newTrace
def applyCountermeasure(trace): # bsize = random.choice(range(2, 10, 1)) bsize = 6 rand = 0 newTrace = Trace(trace.getId()) # rand = random.choice(range(8,256,8)) count = 0 curDir = 0 for packet in trace.getPackets(): direction = packet.getDirection() length = packet.getLength() newlength = min(length + rand, Packet.MTU) time = packet.getTime() newPacket = Packet(direction, time, newlength ) newTrace.addPacket(newPacket) if (((direction == 0 and curDir == 0) | (direction == 1 and curDir == 1)) and count < bsize): count +=1 elif (((direction == 0 and curDir == 0) | (direction == 1 and curDir == 1)) and count == bsize): BurstSize6.makeDummy(newTrace, time) count = 0 else: count = 1 if(curDir): curDir = 0 else: curDir = 1 return newTrace
def applyCountermeasure(trace): packets = [] for packet in trace.getPackets(): if packet.getDirection() == Packet.UP: x = 1 # outgoing else: x = -1 # incoming packets.append([packet.getTime(), x]) list2 = [] parameters = [""] Tamaraw.Anoa(packets, list2, parameters) list2 = sorted(list2, key=lambda list2: list2[0]) list3 = [] Tamaraw.AnoaPad(list2, list3, 100, 0) newTrace = Trace(trace.getId()) for item in list3: pDirection = Packet.UP if (item[1] < 0): pDirection = Packet.DOWN newTrace.addPacket(Packet(direction=pDirection, time=item[0], length=abs(item[1]))) return newTrace
def doCountermeasure(trace): # Median trace length in the herrmann dataset is 3500ms # Median throughput is 62000 bytes/second # 40*1500 = 60000 bytes/second newTrace = Trace(trace.getId()) latency = [] timer = 0 bufferUP = Folklore.Buffer() bufferDOWN = Folklore.Buffer() packetCursor = 0 # Terminate only if (1) our clock is up, (2) we have no more packets from the source # and (3) our buffers are empty while timer <= Folklore.MILLISECONDS_TO_RUN \ or packetCursor < trace.getPacketCount() \ or bufferUP.hasPackets() \ or bufferDOWN.hasPackets(): # calculate max latency if bufferUP.hasPackets(): earliestPacket = bufferUP.queue()[0] latency.append(timer - earliestPacket.getTime()) if bufferDOWN.hasPackets(): earliestPacket = bufferDOWN.queue()[0] latency.append(timer - earliestPacket.getTime()) # add to buffer: all packets that appeared since last clock while packetCursor < trace.getPacketCount()\ and trace.getPackets()[packetCursor].getTime()<=timer: packet = trace.getPackets()[packetCursor] if packet.getDirection() == Packet.UP: bufferUP.add(packet) elif packet.getDirection() == Packet.DOWN: bufferDOWN.add(packet) # increment position in source buffer packetCursor += 1 # check buffer UP: purge at most Packet.MTU bytes Folklore.packFromBuffer( Folklore.FIXED_PACKET_LEN - Packet.HEADER_LENGTH, bufferUP) # check buffer DOWN: purge at most Packet.MTU bytes Folklore.packFromBuffer( Folklore.FIXED_PACKET_LEN - Packet.HEADER_LENGTH, bufferDOWN) # send a byte in both directions newTrace.addPacket( Packet(Packet.DOWN, timer, Folklore.FIXED_PACKET_LEN)) newTrace.addPacket( Packet(Packet.UP, timer, Folklore.FIXED_PACKET_LEN)) # go to the next clock cycle timer += Folklore.TIMER_CLOCK_SPEED return [newTrace, latency]
def applyCountermeasure(trace): newTrace = Trace(trace.getId()) for packet in trace.getPackets(): newPacket = Packet(packet.getDirection(), packet.getTime(), PadRoundLinear.calcLength(packet.getLength())) newTrace.addPacket(newPacket) return newTrace
def applyCountermeasure(trace): newTrace = Trace(trace.getId()) for packet in trace.getPackets(): newPacket = Packet( packet.getDirection(), packet.getTime(), PadRoundExponential.calcLength(packet.getLength()) ) newTrace.addPacket(newPacket) return newTrace
def applyCountermeasure(trace): newTrace = Trace(trace.getId()) for packet in trace.getPackets(): newPacket = Packet( packet.getDirection(), packet.getTime(), MiceElephants.calcLength(packet.getLength()) ) newTrace.addPacket( newPacket ) return newTrace
def applyCountermeasure(trace): newTrace = Trace(trace.getId()) for packet in trace.getPackets(): rand = random.choice(range(8, 256, 8)) length = min(packet.getLength() + rand, Packet.MTU) newPacket = Packet(packet.getDirection(), packet.getTime(), length) newTrace.addPacket(newPacket) return newTrace
def applyCountermeasure(trace): newTrace = Trace(trace.getId()) for packet in trace.getPackets(): length = Packet.MTU if Packet.MTU - packet.getLength() > 0: length = packet.getLength() + random.choice(range(0, Packet.MTU - packet.getLength(), 8)) newPacket = Packet(packet.getDirection(), packet.getTime(), length) newTrace.addPacket(newPacket) return newTrace
def applyCountermeasure(trace): newTrace = Trace(trace.getId()) # pad all packets to the MTU for packet in trace.getPackets(): newPacket = Packet( packet.getDirection(), packet.getTime(), Packet.MTU ) newTrace.addPacket( newPacket ) return newTrace
def readEsorics16TorFile( webpageId, traceIndex ): if webpageId < 100: # 100 and more is nonMon file = os.path.join(config.PCAP_ROOT, str(webpageId)+"-"+str(traceIndex)) else: file = os.path.join(config.PCAP_ROOT, str(webpageId-100)) # as the nonMon id starts from 100 and the file names are 0, 1, 2, 3, ... fileList = Utils.readFile(file) trace = Trace(webpageId) ''' <time-stamp>\t<directed-packet-length> 1392354075.204044 -565 1392354075.20464 565 1392354075.709575 -565 1392354075.956634 -565 1392354075.981538 565 1392354076.192185 565 1392354076.36483 -565 1392354076.647188 -565 1392354076.685665 -1448 1392354076.685685 -1448 ... ''' startTime = 0 for i in range(0,len(fileList)): pArray = fileList[i].split("\t") cTime = pArray[0] if startTime == 0: startTime = float(cTime) # first packet's time as a reference cDirection = int(pArray[1]) pDirection = Packet.UP if (cDirection < 0): pDirection = Packet.DOWN # as in the pcapparser.py # delta = int(round(((ts - start) * 1000),0)) #pTime = int(round(((float(cTime) - startTime) * 1000),0)) pTime = int(round(((float(cTime) - startTime) ), 0)) pLength = abs(int(pArray[1])) pkt = Packet(pDirection, pTime, pLength) pkt.timeStr = cTime trace.addPacket(pkt) return trace
def applyCountermeasure(trace, metadata): [ targetDistributionBi, targetDistributionUp, targetDistributionDown, srcDistributionUp, srcDistributionDown, morphingMatrixUp, morphingMatrixDown ] = metadata newTrace = Trace(trace.getId()) # primary sampling timeCursor = 0 for packet in trace.getPackets(): timeCursor = packet.getLength() index = (packet.getLength() - Packet.HEADER_LENGTH) / 8 targetDistribution = None morphingColumn = None if packet.getDirection() == Packet.UP: if morphingMatrixUp: morphingColumn = morphingMatrixUp[:, index] else: targetDistribution = targetDistributionUp targetDistributionSecondary = targetDistributionUp else: if morphingMatrixDown: morphingColumn = morphingMatrixDown[:, index] else: targetDistribution = targetDistributionDown targetDistributionSecondary = targetDistributionDown if morphingColumn: targetDistribution = {} for i in range(len(morphingColumn)): key = str(packet.getDirection()) + '-' + str( i * 8 + Packet.HEADER_LENGTH) targetDistribution[key] = morphingColumn[i] packets = WrightStyleMorphing.morphPacket( packet, targetDistribution, targetDistributionSecondary) for newPacket in packets: newTrace.addPacket(newPacket) # secondary sampling while True: l1Distance = newTrace.calcL1Distance(targetDistributionBi) if l1Distance <= WrightStyleMorphing.L1_THRESHHOLD: break timeCursor += 10 newDirection, newLen = newTrace.getMostSkewedDimension( targetDistributionBi) packet = Packet(newDirection, timeCursor, newLen) newTrace.addPacket(packet) return newTrace
def applyCountermeasure(trace): newTrace = Trace(trace.getId()) for packet in trace.getPackets(): length = Packet.MTU if Packet.MTU - packet.getLength() > 0: length = packet.getLength() + random.choice( range(0, Packet.MTU - packet.getLength(), 8)) newPacket = Packet(packet.getDirection(), packet.getTime(), length) newTrace.addPacket(newPacket) return newTrace
def applyCountermeasure( trace, metadata ): [targetDistributionBi, targetDistributionUp, targetDistributionDown, srcDistributionUp, srcDistributionDown, morphingMatrixUp, morphingMatrixDown] = metadata newTrace = Trace(trace.getId()) # primary sampling timeCursor = 0 for packet in trace.getPackets(): timeCursor = packet.getLength() index = (packet.getLength()-Packet.HEADER_LENGTH)/8 targetDistribution = None morphingColumn = None if packet.getDirection()==Packet.UP: if morphingMatrixUp: morphingColumn = morphingMatrixUp[:,index] else: targetDistribution = targetDistributionUp targetDistributionSecondary = targetDistributionUp else: if morphingMatrixDown: morphingColumn = morphingMatrixDown[:,index] else: targetDistribution = targetDistributionDown targetDistributionSecondary = targetDistributionDown if morphingColumn: targetDistribution = {} for i in range(len(morphingColumn)): key = str(packet.getDirection())+'-'+str( i*8 + Packet.HEADER_LENGTH ) targetDistribution[key] = morphingColumn[i] packets = WrightStyleMorphing.morphPacket( packet, targetDistribution, targetDistributionSecondary ) for newPacket in packets: newTrace.addPacket( newPacket ) # secondary sampling while True: l1Distance = newTrace.calcL1Distance( targetDistributionBi ) if l1Distance <= WrightStyleMorphing.L1_THRESHHOLD: break timeCursor += 10 newDirection, newLen = newTrace.getMostSkewedDimension( targetDistributionBi ) packet = Packet( newDirection, timeCursor, newLen ) newTrace.addPacket( packet ) return newTrace
def getTraceHerrmann( webpageId, traceIndex ): if config.DATA_SOURCE == 1: datasourceId = 4 elif config.DATA_SOURCE == 2: datasourceId = 5 key = '.'.join(['Webpage', 'H', str(datasourceId), str(webpageId), str(traceIndex)]) trace = mc.get(key) if ENABLE_CACHE and trace: trace = cPickle.loads(trace) else: connection = MySQLdb.connect(host=config.MYSQL_HOST, user=config.MYSQL_USER, passwd=config.MYSQL_PASSWD, db=config.MYSQL_DB ) cursor = connection.cursor() command = """SELECT packets.trace_id, packets.size, ROUND(packets.abstime*1000) FROM (SELECT id FROM traces WHERE site_id = (SELECT id FROM sites WHERE dataset_id = """+str(datasourceId)+""" ORDER BY id LIMIT """+str(webpageId)+""",1) ORDER BY id LIMIT """+str(traceIndex)+""",1) traces, packets WHERE traces.id = packets.trace_id ORDER BY packets.trace_id, packets.abstime""" cursor.execute( command ) data = cursor.fetchall() trace = Trace(webpageId) for item in data: direction = Packet.UP if int(item[1])>0: direction = Packet.DOWN time = item[2] length = int(math.fabs(item[1])) trace.addPacket( Packet( direction, time, length ) ) connection.close() mc.set(key,cPickle.dumps(trace,protocol=cPickle.HIGHEST_PROTOCOL)) return trace
def applyCountermeasure(trace): rand = random.choice(range(8,512,8)) newTrace = Trace(trace.getId()) for packet in trace.getPackets(): length = min( packet.getLength()+rand, Packet.MTU ) newPacket = Packet( packet.getDirection(), packet.getTime(), length ) newTrace.addPacket( newPacket ) return newTrace
def test_readfile(self): actualTrace = pcapparser.readfile( month=3, day=14, hour=22, webpageId=8 ) expectedTrace = Trace(8) expectedTrace.addPacket( Packet( Packet.UP , 0 , 148 ) ) expectedTrace.addPacket( Packet( Packet.DOWN, 0 , 100 ) ) expectedTrace.addPacket( Packet( Packet.UP , 0 , 52 ) ) expectedTrace.addPacket( Packet( Packet.UP , 3 , 500 ) ) expectedTrace.addPacket( Packet( Packet.DOWN, 18 , 244 ) ) expectedTrace.addPacket( Packet( Packet.UP , 35 , 436 ) ) expectedTrace.addPacket( Packet( Packet.DOWN, 75 , 52 ) ) expectedTrace.addPacket( Packet( Packet.DOWN, 118, 292 ) ) expectedTrace.addPacket( Packet( Packet.UP , 158, 52 ) )
def applyCountermeasure(trace): newTrace = Trace(trace.getId()) count = 0 curDir = 0 rand = random.choice(range(8,256,8)) count = 0 for packet in trace.getPackets(): direction = packet.getDirection() length = packet.getLength() newlength = min(length + rand, Packet.MTU) time = packet.getTime() newPacket = Packet(direction, time, newlength ) if ((direction == 1 and curDir == 1)): count +=1 newTrace.addPacket(newPacket) elif (direction == 0 and curDir == 0): count = 0 newTrace.addPacket(newPacket) elif (direction == 1 and curDir == 0): curDir = 1 count = 1 newTrace.addPacket(newPacket) elif (direction == 0 and curDir == 1): BurstExpon.makeDummy(newTrace, length, time, curDir, count, rand) newTrace.addPacket(newPacket) curDir = 0 count = 0 return newTrace
def readWangTorFile( webpageId, traceIndex ): if webpageId < 100: # 100 and more is nonMon if config.DATA_SOURCE == 5: file = os.path.join(config.PCAP_ROOT, str(webpageId)+"-"+str(traceIndex)) elif config.DATA_SOURCE == 9: file = os.path.join(config.PCAP_ROOT, str(webpageId) + "-" + str(traceIndex)) + ".cell" else: if config.DATA_SOURCE == 5: file = os.path.join(config.PCAP_ROOT, str(webpageId-100)) # as the nonMon id starts from 100 and the file names are 0, 1, 2, 3, ... elif config.DATA_SOURCE == 9: file = os.path.join(config.PCAP_ROOT, str(webpageId-100)) + ".cell" # as the nonMon id starts from 100 and the file names are 0, 1, 2, 3, ... fileList = Utils.readFile(file) trace = Trace(webpageId) ''' 0.0 1 cell 0.0 1 0.116133928299 1 0.499715805054 -1 0.499715805054 -1 ... ''' for i in range(1,len(fileList)): cellArray = fileList[i].split("\t") cTime = cellArray[0] cDirection = int(cellArray[1]) pDirection = Packet.UP if (cDirection==-1): pDirection = Packet.DOWN # as in the pcapparser.py # delta = int(round(((ts - start) * 1000),0)) pTime = int(round((float(cTime) * 1000),0)) #pTime = int(round((float(cTime) * 10000), 0)) #pTime = int(round((float(cTime) * 1000000), 0)) pLength = abs(int(cellArray[1])) # sizes are only 1 and -1 trace.addPacket(Packet(pDirection, pTime, pLength)) return trace
def get_trace(cls, trace_id=None, site_id=None, dataset=2, limit=1, multi=False): if cls.conn is None: cls.conn = MySQLdb.connect(host=config.MYSQL_HOST, user=config.MYSQL_USER, passwd=config.MYSQL_PASSWD, db=config.MYSQL_DB) cur = cls.conn.cursor() if trace_id is None: cur.execute( 'SELECT id FROM traces where site_id=%s ORDER BY RAND() LIMIT {}' .format(limit), [site_id]) if limit == 1: trace_ids = [cur.fetchone()[0]] else: trace_ids = [r[0] for r in cur.fetchall()] else: trace_ids = [trace_id] # print('SEL-TRACE', trace_ids) traces = [] for trace_id in trace_ids: cur.execute( 'SELECT size, ROUND(abstime*1000) FROM packets WHERE trace_id=%s ORDER BY abstime', [trace_id]) data = cur.fetchall() trace = Trace(trace_id, webpage=site_id) for item in data: direction = Packet.UP if int(item[0]) > 0: direction = Packet.DOWN time = item[1] length = int(math.fabs(item[0])) trace.addPacket(Packet(direction, time, length)) traces.append(trace) if limit == 1 and not multi: return traces[0] if traces else None return traces
def applyCountermeasure(trace): bsize = random.choice(range(2,10,1)) newTrace = Trace(trace.getId()) count = 0 curDir = 0 rand = random.choice(range(8,256,8)) for packet in trace.getPackets(): direction = packet.getDirection() length = packet.getLength() newlength = min( packet.getLength()+rand, Packet.MTU ) time = packet.getTime() newPacket = Packet(direction, time, newlength ) if (direction == 1 and curDir == 1 and (count < bsize)): count +=1 newTrace.addPacket(newPacket) elif (direction == 1 and curDir == 1 and (count == bsize)): BurstPadAllRand.sendDummyAck(newTrace, time) newTrace.addPacket(newPacket) bsize = random.choice(range(2,10,1)) count = 1 elif (direction == 0 and curDir == 0): count = 0 newTrace.addPacket(newPacket) elif (direction == 1 and curDir == 0): curDir = 1 count = 1 newTrace.addPacket(newPacket) elif (direction == 0 and curDir == 1): BurstPadAllRand.makeDummy(newTrace, length, time, bsize, count, rand) newTrace.addPacket(newPacket) curDir = 0 count = 0 bsize = random.choice(range(2,10,1)) return newTrace
def applyCountermeasure(trace): # print "dir\tlength\ttime" bsize = random.choice(range(2, 10, 1)) newTrace = Trace(trace.getId()) count = 0 curDir = 0 count = 0 for packet in trace.getPackets(): direction = packet.getDirection() length = packet.getLength() newlength = BurstFixedRand.calcLength(length) time = packet.getTime() # print direction, "\t", length, "\t", time newPacket = Packet(direction, time, newlength ) newTrace.addPacket(newPacket) if (((direction == 0 and curDir == 0) | (direction == 1 and curDir == 1)) and count < bsize): count +=1 elif (((direction == 0 and curDir == 0) | (direction == 1 and curDir == 1)) and count == bsize): BurstFixedRand.makeDummy(newTrace, length, time, curDir) count = 0 else: count = 1 if(curDir): curDir = 0 else: curDir = 1 # for i in range(count, 3): # Burst.makeDummy(newTrace, length, time, curDir) # count = 1 # elif (count < 7): # if(curDir): # curDir = 0 # else: # curDir = 1 # for i in range(count, 7): # Burst.makeDummy(newTrace, length, time, curDir) # count = 1 # elif (count < ): # if(curDir): # curDir = 0 # else: # curDir = 1 # for i in range(count, 12): # Burst.makeDummy(newTrace, length, time, curDir) # count = 1 # else: # if(curDir): # curDir = 0 # else: # curDir = 1 # for i in range(count, 25): # Burst.makeDummy(newTrace, length, time, curDir) # count = 1 # newTrace.addPacket(newPacket) return newTrace
def applyCountermeasure(trace): bsize = random.choice(range(3000, 15000, 8)) rand = random.choice(range(8,256,8)) newTrace = Trace(trace.getId()) count = 0 curDir = 0 for packet in trace.getPackets(): direction = packet.getDirection() length = packet.getLength() newlength = min(length + rand, Packet.MTU) time = packet.getTime() newPacket = Packet(direction, time, newlength ) if (direction == 1 and curDir == 1 and (count+newlength < bsize)): count +=newlength newTrace.addPacket(newPacket) elif (direction == 1 and curDir == 1 and (count+newlength >= bsize)): pad = bsize - count packetFirstHalf = Packet(1, time, pad) newTrace.addPacket(packetFirstHalf) BurstByteLevelRand.sendDummyAck(newTrace, time) count = newlength-pad finishPacket = Packet(1, time, count) newTrace.addPacket(finishPacket) bsize = random.choice(range(3000, 15000, 8)) elif (direction == 0 and curDir == 0): count = 0 newTrace.addPacket(newPacket) elif (direction == 1 and curDir == 0): curDir = 1 count = newlength newTrace.addPacket(newPacket) elif (direction == 0 and curDir == 1): BurstByteLevelRand.makeDummy(newTrace, length, time, bsize, count, rand) newTrace.addPacket(newPacket) curDir = 0 count = 0 bsize = random.choice(range(3000, 15000, 8)) return newTrace
def applyCountermeasure(trace, metadata): [targetBursts] = metadata rndmIndx = random.randint(0, len(targetBursts) - 1) # pick a trace from target at random # burst tuple = (direction, size, number, timeDiff, burstPackets) # pick one trace randomly [(tuple), (tuple), ...] targetBurstsList = targetBursts[rndmIndx] sourceBurstsList = trace.getBurstsListWithPackets() newTrace = Trace(trace.getId()) pointer = 0 # to loop over burst tuples in src and trgt in order until one is exhausted # first packet time newPktTime = sourceBurstsList[pointer][4][0].getTime() lastSrcPktTime = 0 while True: if pointer >= len(sourceBurstsList) or pointer >= len( targetBurstsList): break sourceBurstPackets = sourceBurstsList[pointer][ 4] # list of packets for that burst targetBurstPackets = targetBurstsList[pointer][4] srcPktTimes = [] for packet in sourceBurstPackets: srcPktTimes.append(packet.getTime()) lastSrcPktTime = srcPktTimes[ -1] # for extra burst padding down below, before pop if len(sourceBurstPackets) < len(targetBurstPackets): for packet in targetBurstPackets: #-#if len(srcPktTimes) != 0: #-#newPktTime = srcPktTimes.pop(0) # remove first from the queue # eventually last src packet time is repeated # to make sure we don't exceed original burst transimission time newPktTime += 1 newPkt = Packet(packet.getDirection(), newPktTime, packet.getLength()) newTrace.addPacket(newPkt) else: for packet in sourceBurstPackets: newPktTime += 1 newPkt = Packet(packet.getDirection(), newPktTime, packet.getLength()) newTrace.addPacket(newPkt) pointer += 1 # for calculating time overhead config.TIME_ORIGINAL += lastSrcPktTime # last config.TIME_EXTRA += newPktTime #print 'source id:' + str(trace.getId()) #print 'orig. end time:' + str(config.TIME_ORIGINAL) #print 'extra end time:' + str(config.TIME_EXTRA) #print "---------" # end: for calculating time overhead while pointer < len(sourceBurstsList): sourceBurstPackets = sourceBurstsList[pointer][4] for packet in sourceBurstPackets: newPktTime += 1 newPkt = Packet(packet.getDirection(), newPktTime, packet.getLength()) newTrace.addPacket(newPkt) pointer += 1 # extra bursts tail # ''' while pointer < len(targetBurstsList): targetBurstPackets = targetBurstsList[pointer][4] for packet in targetBurstPackets: lastSrcPktTime += 1 newPkt = Packet(packet.getDirection(), lastSrcPktTime, packet.getLength()) newTrace.addPacket(newPkt) pointer += 1 # ''' #print str(trace.getId()) #print str(trace.getPacketCount()) #print str(newTrace.getPacketCount()) #print "--------------" return newTrace