From fb4c9796d42dccac749c81aa1e0ebe9c2e2fb42e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Gr=C3=BCner?= <47506558+MegaRedHand@users.noreply.github.com> Date: Sun, 1 Jun 2025 20:59:36 -0300 Subject: [PATCH] feat: decrease TTL on each hop --- src/types/view-devices/vRouter.ts | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) 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)) {