ip6defrag

package
v1.6.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 1, 2026 License: BSD-3-Clause Imports: 3 Imported by: 0

Documentation

Overview

Package ip6defrag implements a IPv6 defragmenter

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type IPv6Defragmenter

type IPv6Defragmenter struct {
	// contains filtered or unexported fields
}

IPv6Defragmenter is a struct which embedded a map of all fragment/packet.

func NewIPv6Defragmenter

func NewIPv6Defragmenter() *IPv6Defragmenter

NewIPv6Defragmenter returns a new IPv6Defragmenter with an initialized map.

func (*IPv6Defragmenter) DefragIPv6

func (d *IPv6Defragmenter) DefragIPv6(ipv6 *layers.IPv6, fg *layers.IPv6Fragment) *layers.IPv6

DefragIPv6 takes in an IPv6 packet with a fragment payload.

It do not modify the IPv6 layer fragment in place, It returns a ready-to be used IPv6 layer.

If and we don't have all fragments, it will return nil and store whatever internal information it needs to eventually defrag the packet.

If the IPv6 fragment is the last fragment needed to reconstruct the packet, a new IPv6 layer will be returned, and will be set to the entire defragmented packet,

It use a map of all the running flows

Usage example:

var d = NewIPv6Defragmenter()

func HandlePacket(p gopacket.Packet) {
	ipv6, ok := p.NetworkLayer().(*layers.IPv6)
	if !ok {
		// ignore: not ipv6
		return
	}
	if fg, ok := p.Layer(layers.LayerTypeIPv6Fragment).(*layers.IPv6Fragment); ok {
		if fg.NextHeader != layers.IPProtocolUDP && fg.NextHeader != layers.IPProtocolTCP {
			// ignore: !TCP and !UDP fragment
			return
		}
		ipv6 = d.DefragIPv6(ipv6, fg)
		if ipv6 == nil {
			// ignore: do nothing, wait next fragment
			return
		}
	}
	// You got the ipv6 layer
}

func (*IPv6Defragmenter) DiscardOlderThan

func (d *IPv6Defragmenter) DiscardOlderThan(t time.Time) int

DiscardOlderThan forgets all packets without any activity since time t. It returns the number of FragmentList aka number of fragment packets it has discarded.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL