From 02a125bb86329726525c0dca8a9aa2976b298d42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=2E=20Mert=20Y=C4=B1ld=C4=B1ran?= Date: Mon, 22 Nov 2021 17:35:17 +0300 Subject: [PATCH] Disable IPv4 defragmentation and support IPv6 (#487) * Remove the extra negation on `nodefrag` flag's value * Support IPv4 fragmentation and IPv6 at the same time * Re-enable `nodefrag` flag --- shared/kubernetes/provider.go | 9 +++---- tap/source/tcp_packet_source.go | 42 ++++++++++++++++----------------- 2 files changed, 25 insertions(+), 26 deletions(-) diff --git a/shared/kubernetes/provider.go b/shared/kubernetes/provider.go index 0c024ab47..0f0feabdb 100644 --- a/shared/kubernetes/provider.go +++ b/shared/kubernetes/provider.go @@ -6,12 +6,16 @@ import ( "encoding/json" "errors" "fmt" + "io" + "net/url" + "path/filepath" + "regexp" + "github.com/op/go-logging" "github.com/up9inc/mizu/shared" "github.com/up9inc/mizu/shared/logger" "github.com/up9inc/mizu/shared/semver" "github.com/up9inc/mizu/tap/api" - "io" v1 "k8s.io/api/apps/v1" core "k8s.io/api/core/v1" rbac "k8s.io/api/rbac/v1" @@ -32,9 +36,6 @@ import ( "k8s.io/client-go/tools/cache" "k8s.io/client-go/tools/clientcmd" watchtools "k8s.io/client-go/tools/watch" - "net/url" - "path/filepath" - "regexp" ) type Provider struct { diff --git a/tap/source/tcp_packet_source.go b/tap/source/tcp_packet_source.go index 2ad468b38..a7c0258ad 100644 --- a/tap/source/tcp_packet_source.go +++ b/tap/source/tcp_packet_source.go @@ -121,29 +121,27 @@ func (source *tcpPacketSource) readPackets(ipdefrag bool, packets chan<- TcpPack } // defrag the IPv4 packet if required - if !ipdefrag { - ip4Layer := packet.Layer(layers.LayerTypeIPv4) - if ip4Layer == nil { - continue - } - ip4 := ip4Layer.(*layers.IPv4) - l := ip4.Length - newip4, err := source.defragger.DefragIPv4(ip4) - if err != nil { - logger.Log.Fatal("Error while de-fragmenting", err) - } else if newip4 == nil { - logger.Log.Debugf("Fragment...") - continue // packet fragment, we don't have whole packet yet. - } - if newip4.Length != l { - diagnose.InternalStats.Ipdefrag++ - logger.Log.Debugf("Decoding re-assembled packet: %s", newip4.NextLayerType()) - pb, ok := packet.(gopacket.PacketBuilder) - if !ok { - logger.Log.Panic("Not a PacketBuilder") + if ipdefrag { + if ip4Layer := packet.Layer(layers.LayerTypeIPv4); ip4Layer != nil { + ip4 := ip4Layer.(*layers.IPv4) + l := ip4.Length + newip4, err := source.defragger.DefragIPv4(ip4) + if err != nil { + logger.Log.Fatal("Error while de-fragmenting", err) + } else if newip4 == nil { + logger.Log.Debugf("Fragment...") + continue // packet fragment, we don't have whole packet yet. + } + if newip4.Length != l { + diagnose.InternalStats.Ipdefrag++ + logger.Log.Debugf("Decoding re-assembled packet: %s", newip4.NextLayerType()) + pb, ok := packet.(gopacket.PacketBuilder) + if !ok { + logger.Log.Panic("Not a PacketBuilder") + } + nextDecoder := newip4.NextLayerType() + _ = nextDecoder.Decode(newip4.Payload, pb) } - nextDecoder := newip4.NextLayerType() - _ = nextDecoder.Decode(newip4.Payload, pb) } }