From db9b3fed9a2aab0626335548887d328f46db0895 Mon Sep 17 00:00:00 2001 From: tsosunchia <59512455+tsosunchia@users.noreply.github.com> Date: Thu, 5 Oct 2023 04:30:09 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B7=B2=E7=BB=8F=E5=8F=AF=E4=BB=A5=E6=A3=80?= =?UTF-8?q?=E6=B5=8B=E5=88=B0MPLS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- trace/icmp_ipv4.go | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/trace/icmp_ipv4.go b/trace/icmp_ipv4.go index 901457c..f7c80eb 100644 --- a/trace/icmp_ipv4.go +++ b/trace/icmp_ipv4.go @@ -175,6 +175,28 @@ func (t *ICMPTracer) listenICMP() { func (t *ICMPTracer) handleICMPMessage(msg ReceivedMessage, icmpType int8, data []byte, ttl int) { t.inflightRequestRWLock.RLock() defer t.inflightRequestRWLock.RUnlock() + + extensionOffset := 20 + 8 + 52 + + if len(data) > extensionOffset { + extensionBody := data[extensionOffset:] + + if len(extensionBody) >= 8 && len(extensionBody)%8 == 0 { + log.Println("ICMP Multi-Part Extensions detected for TTL:", ttl) + //TODO: Parse MPLS extensions + //for i := 0; i < len(extensionBody); i += 4 { + // labelData := binary.BigEndian.Uint32(extensionBody[i : i+4]) + // + // label := (labelData & 0xFFFFF000) >> 12 + // tc := (labelData & 0x00000E00) >> 9 + // s := (labelData & 0x00000100) >> 8 + // mplsTTL := labelData & 0x000000FF + // + // log.Printf("MPLS for TTL %d: Lbl %d TC %d S %d TTL %d\n", ttl, label, tc, s, mplsTTL) + //} + } + } + if _, ok := t.inflightRequest[ttl]; ok { t.inflightRequest[ttl] <- Hop{ Success: true,