diff --git a/src/types/view-devices/vRouter.ts b/src/types/view-devices/vRouter.ts index f8ca52d6..918b533c 100644 --- a/src/types/view-devices/vRouter.ts +++ b/src/types/view-devices/vRouter.ts @@ -176,12 +176,14 @@ export class ViewRouter extends ViewNetworkDevice { addPacketToQueue(datagram: IPv4Packet) { const wasEmpty = this.packetQueue.isEmpty(); + datagram.timeToLive -= 1; + if (datagram.timeToLive <= 0) { + console.debug(`Device ${this.id} dropped packet with TTL 0`); + this.dropPacket(datagram); + } if (!this.packetQueue.enqueue(datagram)) { console.debug("Packet queue full, dropping packet"); - // dummy values - const dummyMac = this.interfaces[0].mac; - const frame = new EthernetFrame(dummyMac, dummyMac, datagram); - dropPacket(this.viewgraph, this.id, frame); + this.dropPacket(datagram); return; } if (wasEmpty) { @@ -189,6 +191,13 @@ export class ViewRouter extends ViewNetworkDevice { } } + dropPacket(datagram: IPv4Packet) { + // dummy values + const dummyMac = this.interfaces[0].mac; + const frame = new EthernetFrame(dummyMac, dummyMac, datagram); + dropPacket(this.viewgraph, this.id, frame); + } + processPacket(ticker: Ticker) { const elapsedTime = ticker.deltaMS * this.viewgraph.getSpeed(); const datagram = this.getPacketsToProcess(elapsedTime); @@ -239,7 +248,7 @@ export class ViewRouter extends ViewNetworkDevice { routePacket(datagram: IPv4Packet): number { console.debug( - `Device ${this.id} va a rutear el datagram con origen ${datagram.sourceAddress.toString()} y destino ${datagram.destinationAddress.toString()}`, + `Device ${this.id} will route datagram of origin ${datagram.sourceAddress.toString()} and destination ${datagram.destinationAddress.toString()}`, ); const device = this.viewgraph.getDataGraph().getDevice(this.id); if (!device || !(device instanceof DataRouter)) {