ICMPv6 - Internet Control Message Protocol Version 6
What is ICMPv6?
ICMPv6 stands for Internet Control Message Protocol for IPv6. It is the version of ICMP designed specifically for IPv6 networks, used to report errors, perform diagnostics, and support essential IPv6 functions like Neighbor Discovery and Multicast Listener Discovery.
Why is ICMPv6 useful?
Reports errors and unreachable destinations
Supports ping and traceroute for IPv6
Enables Neighbor Discovery Protocol (NDP), which replaces ARP in IPv6
Helps manage router discovery, address autoconfiguration, and duplicate address detection
How it works?
Device sends a message – For example, a ping using ICMPv6 Echo Request.
Target responds – The destination replies with an Echo Reply if reachable.
Routers and hosts use it – To send messages like Destination Unreachable or Packet Too Big.
Neighbor Discovery – Devices use ICMPv6 to find each other and configure addresses automatically.
Where is ICMPv6 used?
IPv6 diagnostics – Tools like ping6 and traceroute6.
Router discovery – Devices find routers on the network.
Address configuration – Stateless address autoconfiguration (SLAAC).
Network troubleshooting – Identifying connectivity and routing issues.
Which OSI layer does this protocol belong to?
Works closely with the IPv6 protocol.
Handles routing, error reporting, and neighbor discovery.
Operates below the transport and application layers.
Topics in this section,
In this section, you are going to learn
Terminology
Version Info
Version & RFC Details |
|||
---|---|---|---|
ICMPv6 Version |
RFC Version |
Year |
Core Idea / Contribution |
ICMPv6 |
|||
RFC 1885 |
1995 |
Original specification of ICMPv6 (now obsolete). |
|
RFC 2463 |
1998 |
Updated ICMPv6 specification (also obsolete). |
|
RFC 4443 |
2006 |
Current base specification of ICMPv6. Defines message formats, types, and codes for error reporting and diagnostics. Obsoletes RFC 2463. |
|
RFC 4861 |
2007 |
Defines Neighbor Discovery Protocol (NDP), which uses ICMPv6 for router discovery, address resolution, and reachability detection. |
|
RFC 4890 |
2007 |
Provides firewall filtering recommendations for ICMPv6 to balance functionality and security. |
|
RFC 6275 |
2011 |
Specifies Mobile IPv6, including ICMPv6 messages for home agent discovery and mobile prefix advertisement. |
|
RFC 6550 |
2012 |
Introduces RPL (Routing Protocol for Low-Power and Lossy Networks), which uses ICMPv6 for control messages. |
|
RFC 8335 |
2018 |
Defines Extended Echo Request/Reply messages for enhanced diagnostics. |
|
RFC 8883 |
2020 |
Adds new ICMPv6 codes for extension header errors and header chain issues. |
Testcase 1: Basic IPv6 Ping Test
Step-1 : Launch GNS3 and Create Network Topology
Note
Use GNS3 to simulate two Ubuntu virtual machines.
Connect both VMs using a virtual Ethernet cable.
Open GNS3
Add two Ubuntu VMs to the canvas
Connect the VMs using an Ethernet link
Start both virtual machines
Step-2 : Assign Static IPv6 Addresses
VM1:~$ sudo ip -6 addr add 2001:db8:1::10/64 dev enp0s8 VM1:~$ sudo ip link set enp0s8 up VM2:~$ sudo ip -6 addr add 2001:db8:1::20/64 dev enp0s8 VM2:~$ sudo ip link set enp0s8 upNote
Replace enp0s8 with your actual interface name (check using ip a)
Both machines must be on the same IPv6 subnet (2001:db8:1::/64)
Step-3 : Verify Interface Configuration
VM1:~$ ip -6 addr show dev enp0s8 VM2:~$ ip -6 addr show dev enp0s8
expected output :
inet6 2001:db8:1::10/64 (on VM1)
inet6 2001:db8:1::20/64 (on VM2)
Step-4 : Start Wireshark Capture in GNS3
Right-click the Ethernet link between VM1 and VM2
Click Start Capture
Step-5 : ICMPv6 Ping Test
VM2:~$ ping6 2001:db8:1::10 PING 2001:db8:1::10(2001:db8:1::10) 56 data bytes 64 bytes from 2001:db8:1::10: icmp_seq=1 ttl=64 time=0.425 ms 64 bytes from 2001:db8:1::10: icmp_seq=2 ttl=64 time=0.410 ms 64 bytes from 2001:db8:1::10: icmp_seq=3 ttl=64 time=0.417 ms 64 bytes from 2001:db8:1::10: icmp_seq=4 ttl=64 time=0.408 ms 64 bytes from 2001:db8:1::10: icmp_seq=5 ttl=64 time=0.405 ms --- 2001:db8:1::10 ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4004ms rtt min/avg/max/mdev = 0.405/0.413/0.425/0.008 msNote
This test verifies ICMPv6 Echo Request/Reply over static IPv6.
Successful ping indicates end-to-end IPv6 connectivity.
You should observe:
ICMPv6 Echo Request from VM2 (2001:db8:1::20) to VM1 (2001:db8:1::10)
ICMPv6 Echo Reply from VM1 to VM2
Wireshark Capture
Testcase 2: Jumbo Packet Ping Test (ICMPv6)
Step-1 : Launch GNS3 and Create Network Topology
Note
Use GNS3 to simulate two Ubuntu virtual machines.
Connect both VMs using a virtual Ethernet cable.
Open GNS3
Add two Ubuntu VMs to the canvas
Connect the VMs using an Ethernet link
Start both virtual machines
Step-2 : Assign Static IPv6 Addresses
VM1:~$ sudo ip -6 addr add 2001:db8:1::10/64 dev enp0s8 VM1:~$ sudo ip link set enp0s8 up VM2:~$ sudo ip -6 addr add 2001:db8:1::20/64 dev enp0s8 VM2:~$ sudo ip link set enp0s8 upNote
Replace enp0s8 with your actual interface name.
Both machines must belong to the same IPv6 subnet.
Step-3 : Verify Interface Configuration
VM1:~$ ip -6 addr show dev enp0s8 VM2:~$ ip -6 addr show dev enp0s8
expected output :
inet6 2001:db8:1::10/64 (on VM1)
inet6 2001:db8:1::20/64 (on VM2)
Step-4 : Start Wireshark Capture in GNS3
Right-click the Ethernet link between VM1 and VM2
Click Start Capture
Step-5 : ICMPv6 Jumbo Packet Ping Test
VM2:~$ ping6 -s 4000 2001:db8:1::10 PING 2001:db8:1::10(2001:db8:1::10) 4000 data bytes 4008 bytes from 2001:db8:1::10: icmp_seq=1 ttl=64 time=0.890 ms 4008 bytes from 2001:db8:1::10: icmp_seq=2 ttl=64 time=0.856 ms 4008 bytes from 2001:db8:1::10: icmp_seq=3 ttl=64 time=0.849 ms 4008 bytes from 2001:db8:1::10: icmp_seq=4 ttl=64 time=0.832 ms 4008 bytes from 2001:db8:1::10: icmp_seq=5 ttl=64 time=0.828 ms 4008 bytes from 2001:db8:1::10: icmp_seq=6 ttl=64 time=0.825 ms --- 2001:db8:1::10 ping statistics --- 6 packets transmitted, 6 received, 0% packet loss, time 5007ms rtt min/avg/max/mdev = 0.825/0.846/0.890/0.023 msNote
-s 4000 sends an ICMPv6 Echo Request with 4000 bytes of payload.
This exceeds the standard Ethernet MTU (1500 bytes), so fragmentation occurs.
IPv6 requires source-host fragmentation (not router-based).
You should observe the following in Wireshark:
Two IPv6 fragments with Fragment Headers (Next Header = 44)
ICMPv6 Echo Request reconstructed at the destination
Echo Reply may also be fragmented, depending on payload size
This test validates fragmentation, reassembly, and large payload delivery.
Wireshark Capture
Testcase 3: Neighbor Solicitation / Advertisement (NDP)
Step-1 : Launch GNS3 and Create Network Topology
Note
Use GNS3 to simulate two Ubuntu virtual machines.
Connect both VMs using a virtual Ethernet cable.
Open GNS3
Add two Ubuntu VMs to the canvas
Connect the VMs using an Ethernet link
Start both virtual machines
Step-2 : Assign Static IPv6 Addresses
VM1:~$ sudo ip -6 addr add 2001:db8:1::10/64 dev enp0s8 VM1:~$ sudo ip link set enp0s8 up VM2:~$ sudo ip -6 addr add 2001:db8:1::20/64 dev enp0s8 VM2:~$ sudo ip link set enp0s8 upNote
Replace enp0s8 with the actual interface name on your VMs.
Both systems must be within the same IPv6 subnet.
Step-3 : Start Wireshark Capture in GNS3
Right-click on the Ethernet link between VM1 and VM2
Select Start Capture
Step-4 : Trigger Neighbor Discovery Protocol (NDP)
VM2:~$ ping6 2001:db8:1::10 PING 2001:db8:1::10(2001:db8:1::10) 56 data bytes 64 bytes from 2001:db8:1::10: icmp_seq=1 ttl=64 time=0.429 ms 64 bytes from 2001:db8:1::10: icmp_seq=2 ttl=64 time=0.420 ms 64 bytes from 2001:db8:1::10: icmp_seq=3 ttl=64 time=0.417 ms 64 bytes from 2001:db8:1::10: icmp_seq=4 ttl=64 time=0.409 ms --- 2001:db8:1::10 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3012ms rtt min/avg/max/mdev = 0.409/0.418/0.429/0.007 msNote
This test triggers Neighbor Discovery Protocol (NDP) as part of the first ping.
NDP is used to resolve the IPv6 address of the destination to its MAC address (similar to ARP in IPv4).
The NDP exchange consists of:
Neighbor Solicitation (NS): Sent by VM2 to find the MAC of VM1.
Neighbor Advertisement (NA): Response from VM1 providing its MAC.
Followed by ICMPv6 Echo Request/Reply.
Note
You will observe the following packet sequence:
ICMPv6 Neighbor Solicitation from VM2 to ff02::1:ff00:10
ICMPv6 Neighbor Advertisement from VM1 to VM2
ICMPv6 Echo Request from VM2 to VM1
ICMPv6 Echo Reply from VM1 to VM2
Wireshark Capture
Testcase 4: Router Solicitation / Advertisement (RS/RA)
Step-1 : Launch GNS3 and Create Network Topology
Note
Use GNS3 to simulate two Ubuntu virtual machines.
Connect both VMs using a virtual Ethernet cable.
Open GNS3
Add two Ubuntu VMs to the canvas
Connect the VMs using an Ethernet link
Start both virtual machines
Step-2 : Configure Router Advertisement Daemon on VM1
VM1:~$ sudo apt update VM1:~$ sudo apt install radvd VM1:~$ sudo nano /etc/radvd.confinterface enp0s8 { AdvSendAdvert on; prefix 2001:db8:1::/64 { AdvOnLink on; AdvAutonomous on; }; };VM1:~$ sudo systemctl enable radvd VM1:~$ sudo systemctl restart radvdNote
This config enables IPv6 Router Advertisements from VM1 on interface enp0s8
The prefix 2001:db8:1::/64 will be advertised for SLAAC (Stateless Address Auto Configuration)
Step-3 : Trigger Router Solicitation on VM2
VM2:~$ sudo ip -6 addr flush dev enp0s8 VM2:~$ sudo ifconfig enp0s8 down VM2:~$ sudo ifconfig enp0s8 upNote
These steps reset the IPv6 configuration on VM2, prompting it to send a Router Solicitation (RS)
Step-4 : Start Wireshark Capture in GNS3
Right-click on the Ethernet link between VM1 and VM2
Select Start Capture
Step-5 : Test IPv6 Connectivity Using SLAAC Address
VM2:~$ ping6 2001:db8:1::10 PING 2001:db8:1::10(2001:db8:1::10) 56 data bytes 64 bytes from 2001:db8:1::10: icmp_seq=1 ttl=64 time=0.430 ms 64 bytes from 2001:db8:1::10: icmp_seq=2 ttl=64 time=0.426 ms 64 bytes from 2001:db8:1::10: icmp_seq=3 ttl=64 time=0.420 ms 64 bytes from 2001:db8:1::10: icmp_seq=4 ttl=64 time=0.418 ms 64 bytes from 2001:db8:1::10: icmp_seq=5 ttl=64 time=0.416 ms 64 bytes from 2001:db8:1::10: icmp_seq=6 ttl=64 time=0.413 ms --- 2001:db8:1::10 ping statistics --- 6 packets transmitted, 6 received, 0% packet loss, time 5010ms rtt min/avg/max/mdev = 0.413/0.420/0.430/0.006 msNote
This test demonstrates dynamic IPv6 address assignment via Router Advertisement (RA)
VM2 sends Router Solicitation (Type 133) to ff02::2 (all-routers multicast)
VM1 responds with Router Advertisement (Type 134) containing prefix 2001:db8:1::/64
VM2 autoconfigures its IPv6 address using SLAAC
Then, it successfully pings VM1 using the assigned global IPv6 address
Note
You will observe the following packet sequence:
ICMPv6 Router Solicitation (Type 133) from VM2 to ff02::2
ICMPv6 Router Advertisement (Type 134) from VM1 with prefix information
ICMPv6 Echo Request from VM2 to VM1
ICMPv6 Echo Reply from VM1 to VM2
Wireshark Capture
Testcase 5: ICMPv6 Flood Ping Test
Step-1 : Launch GNS3 and Create Network Topology
Note
Use GNS3 to simulate two Ubuntu virtual machines.
Connect both VMs using a virtual Ethernet cable.
Open GNS3
Add two Ubuntu VMs to the canvas
Connect the VMs using an Ethernet link
Start both virtual machines
Step-2 : Assign Static IPv6 Addresses
VM1:~$ sudo ip -6 addr add 2001:db8:1::10/64 dev enp0s8 VM1:~$ sudo ip link set enp0s8 up VM2:~$ sudo ip -6 addr add 2001:db8:1::20/64 dev enp0s8 VM2:~$ sudo ip link set enp0s8 upNote
Replace enp0s8 with the actual network interface name.
Ensure both VMs are in the same IPv6 subnet.
Step-3 : Verify Interface Configuration
VM1:~$ ip -6 addr show dev enp0s8 VM2:~$ ip -6 addr show dev enp0s8
expected output :
inet6 2001:db8:1::10/64 (on VM1)
inet6 2001:db8:1::20/64 (on VM2)
Step-4 : Start Wireshark Capture in GNS3
Right-click the Ethernet link between VM1 and VM2
Click Start Capture
Step-5 : ICMPv6 Flood Ping Test (Rate Limiting Observation)
VM2:~$ ping6 -f 2001:db8:1::10 PING 2001:db8:1::10(2001:db8:1::10) 56 data bytes ........................................................... --- 2001:db8:1::10 ping statistics --- 19730 packets transmitted, 19730 received, 0% packet loss, time 10001msNote
-f enables flood ping mode, sending ICMPv6 Echo Requests as fast as possible.
This test is used for stress testing and observing ICMPv6 rate limiting behavior.
If the target (VM1) has rate limiting enabled, ICMPv6 replies may slow down or get dropped temporarily.
Despite high rate, no packet loss observed indicates a stable local link.
Note
You will observe the following:
High-frequency ICMPv6 Echo Requests from VM2 (2001:db8:1::20) to VM1 (2001:db8:1::10)
Corresponding ICMPv6 Echo Replies from VM1 back to VM2
Short inter-packet gap (IPG), low round-trip times
Possible signs of rate limiting if capture duration is extended
Wireshark Capture
Testcase 6: ICMPv6 Multicast Echo Request
Step-1 : Launch GNS3 and Create Network Topology
Note
Use GNS3 to simulate two Ubuntu virtual machines.
Connect both VMs using a virtual Ethernet cable.
Open GNS3
Add two Ubuntu VMs to the canvas
Connect the VMs using an Ethernet link
Start both virtual machines
Step-2 : Assign Static IPv6 Addresses
VM1:~$ sudo ip -6 addr add 2001:db8:1::10/64 dev enp0s8 VM1:~$ sudo ip link set enp0s8 up VM2:~$ sudo ip -6 addr add 2001:db8:1::20/64 dev enp0s8 VM2:~$ sudo ip link set enp0s8 upNote
Replace enp0s8 with the correct interface name.
Ensure both VMs are in the same IPv6 subnet and have link-local addresses configured automatically.
Step-3 : Verify IPv6 and Link-Local Addresses
VM1:~$ ip -6 addr show dev enp0s8 VM2:~$ ip -6 addr show dev enp0s8
expected output :
inet6 2001:db8:1::10/64 (on VM1)
inet6 fe80::xxxx:xxxx:xxxx:xxxx/64 (link-local)
inet6 2001:db8:1::20/64 (on VM2)
inet6 fe80::xxxx:xxxx:xxxx:xxxx/64 (link-local)
Step-4 : Start Wireshark Capture in GNS3
Right-click the Ethernet link between VM1 and VM2
Click Start Capture
Step-5 : ICMPv6 Multicast Ping Test
VM2:~$ ping6 ff02::1%enp0s8 PING ff02::1%enp0s8(ff02::1%enp0s8) 56 data bytes 64 bytes from fe80::a00:27ff:fe87:a121%enp0s8: icmp_seq=1 ttl=64 time=0.420 ms 64 bytes from fe80::a00:27ff:fe48:8f52%enp0s8: icmp_seq=1 ttl=64 time=0.421 ms 64 bytes from fe80::a00:27ff:fe87:a121%enp0s8: icmp_seq=2 ttl=64 time=0.419 ms 64 bytes from fe80::a00:27ff:fe48:8f52%enp0s8: icmp_seq=2 ttl=64 time=0.418 ms 64 bytes from fe80::a00:27ff:fe87:a121%enp0s8: icmp_seq=3 ttl=64 time=0.418 ms 64 bytes from fe80::a00:27ff:fe48:8f52%enp0s8: icmp_seq=3 ttl=64 time=0.417 ms --- ff02::1%enp0s8 ping statistics --- 6 packets transmitted, 6 received, +6 duplicates, 0% packet loss rtt min/avg/max/mdev = 0.417/0.419/0.421/0.002 msNote
ff02::1 is the all-nodes IPv6 multicast address (link-local scope).
%enp0s8 specifies the interface on which to send the multicast request.
All active IPv6 hosts on the link should respond.
This test validates basic multicast reachability and ICMPv6 support.
Note
You will observe:
ICMPv6 Echo Request to multicast address ff02::1
ICMPv6 Echo Replies from each host with a valid link-local address
Source addresses of replies are of the form fe80::xxxx:xxxx:xxxx:xxxx
May see duplicate responses per sequence due to multiple hosts replying
Wireshark Capture
ICMPv6 Destination Unreachable Packet
S.No |
Protocol Packets |
Description |
Size(bytes) |
---|---|---|---|
1 |
Destination Unreachable Message |
Routing or delivery failure |
|
Type |
Set to 1 for Destination Unreachable |
1 |
|
Code |
Specifies the reason for the error |
1 |
|
Checksum |
Error-checking for the ICMP message |
2 |
|
Unused |
Reserved, must be zero |
4 |
ICMPv6 Packet Too Big Packet
S.No |
Protocol Packets |
Description |
Size(bytes) |
---|---|---|---|
2 |
Packet Too Big |
MTU exceeded |
|
Type |
Set to 2 for Packet Too Big |
1 |
|
Code |
Always 0 for this message type |
1 |
|
Checksum |
Error-checking for the ICMP message |
2 |
|
Unused |
Maximum Transmission Unit of the next-hop link |
4 |
|
Data |
As much of the original packet as possible (without exceeding the minimum |
variable |
|
IPv6 MTU of 1280 bytes) |
ICMPv6 Time Exceeded Packet
S.No |
Protocol Packets |
Description |
Size(bytes) |
---|---|---|---|
3 |
Time Exceeded |
TTL expired |
|
Type |
Set to 3 for Time Exceeded |
1 |
|
Code |
Indicates the specific reason |
1 |
|
Checksum |
Error-checking for the ICMP message |
2 |
|
Unused |
Reserved, must be zero |
4 |
|
Data |
As much of the original packet as possible (without exceeding the minimum |
variable |
|
IPv6 MTU of 1280 bytes) |
ICMPv6 Echo Request Packet
S.No |
Protocol Packets |
Description |
Size(bytes) |
---|---|---|---|
4 |
Echo Request |
Ping request |
|
Type |
Set to 128 for Echo Request |
1 |
|
Code |
Always 0 |
1 |
|
Checksum |
Error-checking for the ICMP message |
2 |
|
Identifier |
Used to match requests and replies |
2 |
|
Sequence Number |
Used to track the order of messages |
2 |
|
Data |
Optional payload data (e.g., timestamp, pattern) |
variable |
ICMPv6 Echo Reply Packet
S.No |
Protocol Packets |
Description |
Size(bytes) |
---|---|---|---|
5 |
Echo Reply |
Ping response |
|
Type |
Set to 129 for Echo Reply |
1 |
|
Code |
Always 0 |
1 |
|
Checksum |
Error-checking for the ICMP message |
2 |
|
Identifier |
Matches the request to the reply |
2 |
|
Sequence Number |
Matches the request to the reply |
2 |
|
Data |
Optional payload (copied from the Echo Request) |
variable |
ICMPv6 Router Solicitation Packet
S.No |
Protocol Packets |
Description |
Size(bytes) |
---|---|---|---|
6 |
Router Solicitation |
Request for router advertisement |
|
Type |
Set to 133 for Router Solicitation |
1 |
|
Code |
Always 0 |
1 |
|
Checksum |
Error-checking for the ICMP message |
2 |
|
Reserved |
Must be zero |
4 |
|
Options |
Optional link-layer address of the sender (e.g., Source Link-Layer |
variable |
|
Address option) |
ICMPv6 Router Advertisement Packet
S.No |
Protocol Packets |
Description |
Size(bytes) |
---|---|---|---|
7 |
Router Advertisement |
Router info broadcast |
|
Type |
Set to 134 for Router Advertisement |
1 |
|
Code |
Always 0 |
1 |
|
Checksum |
Error-checking for the ICMP message |
2 |
|
Cur Hop Limit |
Suggested Hop Limit for outgoing packets |
1 |
|
M/O Flags |
Managed (M) and Other (O) configuration flags |
1 |
|
Router Lifetime |
Time (in seconds) this router is a default router |
2 |
|
Reachable Time |
Time (ms) a node assumes a neighbor is reachable |
4 |
|
Retrans Timer |
Time (ms) between retransmitted NS messages |
4 |
|
Options |
Includes Prefix Info, MTU, Source Link-Layer Address, etc. |
variable |
ICMPv6 Neighbor Solicitation Packet
S.No |
Protocol Packets |
Description |
Size(bytes) |
---|---|---|---|
8 |
Neighbor Solicitation |
Address resolution (like ARP) |
|
Type |
Set to 135 for Neighbor Solicitation |
1 |
|
Code |
Always 0 |
1 |
|
Checksum |
Error-checking for the ICMP message |
2 |
|
Reserved |
Must be zero |
4 |
|
Target Address |
IPv6 address of the target node |
32 |
|
Options |
Typically includes the Source Link-Layer Address option |
variable |
ICMPv6 Neighbor Advertisement Packet
S.No |
Protocol Packets |
Description |
Size(bytes) |
---|---|---|---|
9 |
Neighbor Advertisement |
Response to solicitation |
|
Type |
Set to 136 for Neighbor Advertisement |
1 |
|
Code |
Always 0 |
1 |
|
Checksum |
Error-checking for the ICMP message |
2 |
|
Flags |
R (Router), S (Solicited), O (Override) |
4 |
|
Target Address |
IPv6 address of the node sending the advertisement |
32 |
|
Options |
Typically includes the Target Link-Layer Address option |
variable |
ICMPv6 - Use Cases |
||
---|---|---|
S.no |
Use Case |
Description |
1 |
Error Reporting |
ICMPv6 reports issues like unreachable destinations, packet too big, or time exceeded, helping diagnose network problems. |
2 |
Path MTU Discovery |
Uses “Packet Too Big” messages to determine the maximum packet size that can be sent without fragmentation. |
3 |
Neighbor Discovery Protocol (NDP) |
Replaces ARP in IPv6. ICMPv6 is used for address resolution, router discovery, and reachability detection. |
4 |
Router Discovery |
Hosts use ICMPv6 to discover routers on the local network via Router Advertisement and Solicitation messages. |
5 |
Duplicate Address Detection (DAD) |
Ensures no two devices on the same network use the same IPv6 address. |
6 |
Redirect Messages |
Routers use ICMPv6 to inform hosts of a better next-hop address for a destination. |
7 |
Mobile IPv6 Support |
ICMPv6 supports mobility features like home agent discovery and mobile prefix advertisement. |
8 |
Multicast Listener Discovery (MLD) |
Used by IPv6 routers to discover multicast listeners on a directly attached link. |
9 |
Extended Echo for Diagnostics |
Enhanced echo request/reply messages (RFC 8335) provide more detailed network diagnostics. |
ICMPv6 - Basic Features |
||
---|---|---|
S.no |
Features |
Description |
1 |
Integrated with IPv6 |
ICMPv6 is a core part of the IPv6 protocol suite, unlike ICMPv4 which is more standalone. |
2 |
Supports NDP |
Enables critical IPv6 functions like address resolution, router discovery, and prefix advertisement. |
3 |
Error and Informational Messages |
Includes both error messages (e.g., Destination Unreachable) and informational messages (e.g., Echo Request/Reply). |
4 |
Multicast-Based Communication |
Uses multicast instead of broadcast for efficiency and scalability in IPv6 networks. |
5 |
Security-Aware Design |
Designed to work with IPsec for secure communication and message authentication. |
6 |
Extensible Message Format |
Supports future extensions and new message types without breaking compatibility. |
7 |
No Fragmentation Support |
ICMPv6 helps manage MTU issues since IPv6 routers do not fragment packets. |
8 |
Rate Limiting |
ICMPv6 messages are rate-limited to prevent abuse and denial-of-service attacks. |
Integrated with IPv6 - Testcases
Integrated with IPv6 - Test Cases |
|||
---|---|---|---|
# |
Test Case |
Description |
Expected Result |
1 |
ICMPv6 Echo Request |
Send ICMPv6 Type 128 |
Echo Reply (Type 129) received |
2 |
ICMPv6 Echo Reply |
Receive ICMPv6 Type 129 |
Matches Echo Request |
3 |
Destination Unreachable |
ICMPv6 Type 1 |
Error message received |
4 |
Packet Too Big |
ICMPv6 Type 2 |
MTU info received |
5 |
Time Exceeded |
ICMPv6 Type 3 |
TTL expired message received |
6 |
Parameter Problem |
ICMPv6 Type 4 |
Header issue reported |
7 |
Neighbor Solicitation |
ICMPv6 Type 135 |
Target receives solicitation |
8 |
Neighbor Advertisement |
ICMPv6 Type 136 |
Solicitor receives advertisement |
9 |
Router Solicitation |
ICMPv6 Type 133 |
Router responds with advertisement |
10 |
Router Advertisement |
ICMPv6 Type 134 |
Host receives router info |
11 |
Redirect Message |
ICMPv6 Type 137 |
Host updates route |
12 |
Multicast Listener Query |
ICMPv6 Type 130 |
Host responds if subscribed |
13 |
Multicast Listener Report |
ICMPv6 Type 131 |
Sent by host to join group |
14 |
Multicast Listener Done |
ICMPv6 Type 132 |
Sent by host to leave group |
15 |
Duplicate Address Detection |
Use NS/NA |
Conflicting address detected |
16 |
Stateless Address Autoconfiguration |
Use RA |
Host configures IPv6 address |
17 |
Path MTU Discovery |
Receive Packet Too Big |
Host adjusts MTU |
18 |
Hop Limit Exceeded |
TTL = 0 |
Time Exceeded message received |
19 |
Header Field Error |
Send malformed header |
Parameter Problem received |
20 |
Unrecognized Next Header |
Use unknown protocol |
Parameter Problem received |
21 |
Unreachable No Route |
Send to unreachable prefix |
Destination Unreachable received |
22 |
Unreachable Admin Prohibited |
Blocked by policy |
Destination Unreachable received |
23 |
Unreachable Beyond Scope |
Send to link-local from global |
Destination Unreachable received |
24 |
Unreachable Address |
Send to unused address |
Destination Unreachable received |
25 |
Unreachable Port |
Send to closed UDP port |
Destination Unreachable received |
26 |
Echo Request with Payload |
Send with data |
Echo Reply includes same data |
27 |
Echo Request to Multicast |
Send to ff02::1 |
Replies from all reachable nodes |
28 |
Echo Request to Link-Local |
Send to fe80::/10 |
Reply from local node |
29 |
Echo Request with Flow Label |
Set flow label |
Echo Reply received |
30 |
Echo Request with Extension Header |
Add EH |
Echo Reply received |
31 |
Echo Request with Fragment Header |
Fragmented packet |
Echo Reply received |
32 |
Echo Request with Authentication Header |
Use AH |
Echo Reply received if valid |
33 |
Echo Request with ESP |
Use ESP |
Echo Reply received if decrypted |
34 |
Echo Request with Hop-by-Hop Options |
Add HBH |
Echo Reply received |
35 |
Echo Request with Routing Header |
Add RH |
Echo Reply received |
36 |
Echo Request with Jumbo Payload |
Send > 1500 bytes |
Echo Reply received or error |
37 |
Echo Request with Invalid Checksum |
Corrupt checksum |
Packet discarded |
38 |
Echo Request with Invalid Type |
Use undefined type |
Packet discarded |
39 |
Echo Request with Invalid Code |
Use undefined code |
Packet discarded |
40 |
Echo Request with Truncated Header |
Incomplete header |
Packet discarded |
41 |
Echo Request with Spoofed Source |
Use fake source IP |
Reply sent to spoofed address |
42 |
Neighbor Discovery with Spoofed MAC |
Use fake MAC |
Host may update cache incorrectly |
43 |
Router Advertisement with Invalid Prefix |
Use invalid prefix |
Host ignores prefix |
44 |
Router Advertisement with High Lifetime |
Set max lifetime |
Host accepts if valid |
45 |
Router Advertisement with Multiple Prefixes |
Advertise multiple |
Host configures multiple addresses |
46 |
Router Advertisement with MTU Option |
Include MTU |
Host updates MTU |
47 |
Router Advertisement with RDNSS Option |
Include DNS info |
Host updates DNS settings |
48 |
Redirect with Invalid Target |
Use unreachable target |
Host ignores redirect |
49 |
Redirect with Valid Target |
Use reachable target |
Host updates route |
50 |
ICMPv6 Filtering |
Block ICMPv6 |
IPv6 functions like ND fail |
Supports NDP - Testcases
Supports NDP - Test Cases |
|||
---|---|---|---|
# |
Test Case |
Description |
Expected Result |
1 |
Send Neighbor Solicitation |
ICMPv6 Type 135 |
Target receives solicitation |
2 |
Receive Neighbor Advertisement |
ICMPv6 Type 136 |
Solicitor receives advertisement |
3 |
Send Router Solicitation |
ICMPv6 Type 133 |
Router responds with advertisement |
4 |
Receive Router Advertisement |
ICMPv6 Type 134 |
Host receives router info |
5 |
Send Redirect Message |
ICMPv6 Type 137 |
Host updates route |
6 |
Duplicate Address Detection |
Send NS for own address |
Conflict detected if address in use |
7 |
Stateless Address Autoconfiguration |
Use RA with prefix |
Host configures IPv6 address |
8 |
Prefix Discovery |
RA includes prefix info |
Host adds prefix to routing table |
9 |
MTU Discovery via RA |
RA includes MTU option |
Host updates MTU |
10 |
Default Router Discovery |
RA includes router lifetime |
Host sets default gateway |
11 |
RDNSS Option in RA |
RA includes DNS info |
Host updates DNS settings |
12 |
DNSSL Option in RA |
RA includes search list |
Host updates domain search list |
13 |
NS with SLLAO |
Include Source Link-Layer Address Option |
Target updates neighbor cache |
14 |
NA with TLLAO |
Include Target Link-Layer Address Option |
Solicitor updates neighbor cache |
15 |
NS without SLLAO |
Omit SLLAO |
Target may not update cache |
16 |
NA with Override Flag |
Set O flag |
Cache entry replaced |
17 |
NA with Router Flag |
Set R flag |
Entry marked as router |
18 |
NA with Solicited Flag |
Set S flag |
Confirms reachability |
19 |
NS to Multicast Address |
Send to solicited-node multicast |
Target responds with NA |
20 |
NS to Unicast Address |
Send directly to target |
Target responds with NA |
21 |
NA to Multicast Address |
Send unsolicited NA |
All nodes update cache |
22 |
NA to Unicast Address |
Send solicited NA |
Solicitor updates cache |
23 |
RS to All-Routers Multicast |
Send to ff02::2 |
Routers respond with RA |
24 |
RA to All-Nodes Multicast |
Send to ff02::1 |
All hosts receive RA |
25 |
RA with Multiple Prefixes |
Include multiple PIOs |
Host configures multiple addresses |
26 |
RA with On-Link Flag |
Set L flag in PIO |
Prefix treated as on-link |
27 |
RA with Autonomous Flag |
Set A flag in PIO |
Prefix used for SLAAC |
28 |
RA with Zero Lifetime |
Set router lifetime to 0 |
Host removes default route |
29 |
RA with High Lifetime |
Set long router lifetime |
Host retains default route |
30 |
Redirect with Valid Target |
Target is reachable |
Host updates route |
31 |
Redirect with Invalid Target |
Target unreachable |
Host ignores redirect |
32 |
NS with Invalid Checksum |
Corrupt checksum |
Packet discarded |
33 |
NA with Invalid Target |
Target address mismatch |
Packet ignored |
34 |
RS with Invalid Source |
Source not link-local |
Packet discarded |
35 |
RA with Invalid Prefix |
Prefix length > 128 |
Prefix ignored |
36 |
RA with Invalid MTU |
MTU < 1280 |
MTU option ignored |
37 |
RA with Invalid Lifetime |
Lifetime > 9000s |
Lifetime capped or ignored |
38 |
NS with Spoofed MAC |
Use fake MAC address |
Target may update cache incorrectly |
39 |
NA with Spoofed IP |
Use fake IP address |
Host may update cache incorrectly |
40 |
RA with Spoofed Router |
Fake router advertises prefix |
Host may accept if not secured |
41 |
Redirect with Spoofed Gateway |
Use fake gateway |
Host may update route incorrectly |
42 |
NS Rate Limiting |
Send many NS packets |
Host rate-limits responses |
43 |
NA Rate Limiting |
Send many NA packets |
Host rate-limits updates |
44 |
RA Rate Limiting |
Send frequent RAs |
Host processes within limits |
45 |
Redirect Rate Limiting |
Send frequent redirects |
Host limits updates |
46 |
NDP Cache Timeout |
Wait for entry to expire |
Entry removed from cache |
47 |
NDP Cache Refresh |
Send NS before timeout |
Entry refreshed |
48 |
NDP Cache Overwrite |
Send NA with override |
Entry updated |
49 |
NDP with VLAN |
Send over VLAN |
NDP functions correctly |
50 |
NDP with VRF |
Send in VRF context |
NDP scoped to VRF |
Error and Informational Messages - Testcases
Error and Informational Messages - Test Cases |
|||
---|---|---|---|
# |
Test Case |
Description |
Expected Result |
1 |
Echo Request |
Send ICMPv6 Type 128 |
Echo Reply (Type 129) received |
2 |
Echo Reply |
Receive ICMPv6 Type 129 |
Matches Echo Request |
3 |
Destination Unreachable - No Route |
ICMPv6 Type 1 Code 0 |
Error message received |
4 |
Destination Unreachable - Admin Prohibited |
ICMPv6 Type 1 Code 1 |
Error message received |
5 |
Destination Unreachable - Beyond Scope |
ICMPv6 Type 1 Code 2 |
Error message received |
6 |
Destination Unreachable - Address Unreachable |
ICMPv6 Type 1 Code 3 |
Error message received |
7 |
Destination Unreachable - Port Unreachable |
ICMPv6 Type 1 Code 4 |
Error message received |
8 |
Packet Too Big |
ICMPv6 Type 2 |
MTU info received |
9 |
Time Exceeded - Hop Limit |
ICMPv6 Type 3 Code 0 |
TTL expired message received |
10 |
Time Exceeded - Fragment Reassembly |
ICMPv6 Type 3 Code 1 |
Reassembly timeout message |
11 |
Parameter Problem - Erroneous Header |
ICMPv6 Type 4 Code 0 |
Header issue reported |
12 |
Parameter Problem - Unknown Next Header |
ICMPv6 Type 4 Code 1 |
Error message received |
13 |
Parameter Problem - Unrecognized Option |
ICMPv6 Type 4 Code 2 |
Error message received |
14 |
Echo Request with Payload |
Send with data |
Echo Reply includes same data |
15 |
Echo Request to Multicast |
Send to ff02::1 |
Replies from reachable nodes |
16 |
Echo Request to Link-Local |
Send to fe80::/10 |
Reply from local node |
17 |
Echo Request with Flow Label |
Set flow label |
Echo Reply received |
18 |
Echo Request with Extension Header |
Add EH |
Echo Reply received |
19 |
Echo Request with Fragment Header |
Fragmented packet |
Echo Reply received |
20 |
Echo Request with Jumbo Payload |
Send > 1500 bytes |
Echo Reply or error |
21 |
Echo Request with Invalid Checksum |
Corrupt checksum |
Packet discarded |
22 |
Echo Request with Invalid Type |
Use undefined type |
Packet discarded |
23 |
Echo Request with Invalid Code |
Use undefined code |
Packet discarded |
24 |
Echo Request with Truncated Header |
Incomplete header |
Packet discarded |
25 |
Echo Request with Spoofed Source |
Use fake source IP |
Reply sent to spoofed address |
26 |
Destination Unreachable with UDP |
Send to closed port |
Port Unreachable received |
27 |
Destination Unreachable with TCP |
Send to unreachable host |
Address Unreachable received |
28 |
Packet Too Big with DF Set |
Send large packet |
MTU info received |
29 |
Time Exceeded with TTL = 1 |
TTL expires |
Time Exceeded message |
30 |
Parameter Problem with Unknown Header |
Use unsupported header |
Error message received |
31 |
Parameter Problem with Invalid Option |
Use malformed option |
Error message received |
32 |
Echo Request with Hop-by-Hop Options |
Add HBH |
Echo Reply received |
33 |
Echo Request with Routing Header |
Add RH |
Echo Reply received |
34 |
Echo Request with Authentication Header |
Use AH |
Echo Reply received if valid |
35 |
Echo Request with ESP |
Use ESP |
Echo Reply received if decrypted |
36 |
Echo Request with Jumbo Option |
Use jumbo payload option |
Echo Reply received |
37 |
Echo Request with Invalid MTU |
MTU < 1280 |
Packet Too Big generated |
38 |
Echo Request with Invalid Source |
Use multicast source |
Packet discarded |
39 |
Echo Request with Invalid Destination |
Use invalid address |
Destination Unreachable |
40 |
Echo Request with Loopback |
Send to ::1 |
Reply received locally |
41 |
Echo Request with Broadcast |
Send to all-nodes multicast |
Replies from all nodes |
42 |
Echo Request with VLAN |
Send over VLAN |
Echo Reply received |
43 |
Echo Request with VRF |
Send in VRF |
Echo Reply scoped to VRF |
44 |
Echo Request with NAT66 |
Send through NAT66 |
Echo Reply translated |
45 |
Echo Request with Firewall |
ICMPv6 allowed |
Echo Reply received |
46 |
Echo Request with ACL |
ICMPv6 blocked |
No reply received |
47 |
Echo Request with Logging |
Enable logging |
ICMPv6 events logged |
48 |
Echo Request with SNMP Monitoring |
Monitor ICMPv6 |
Stats updated |
49 |
Echo Request with Rate Limiting |
Send many requests |
Excess packets dropped |
50 |
Echo Request with Packet Capture |
Use Wireshark |
ICMPv6 packets visible |
Multicast-Based Communication - Testcases
Multicast-Based Communication - Test Cases |
|||
---|---|---|---|
# |
Test Case |
Description |
Expected Result |
1 |
NS to Solicited-Node Multicast |
Send NS to ff02::1:ffXX:XXXX |
Target responds with NA |
2 |
NA to Unicast |
Send NA to soliciting node |
Solicitor updates neighbor cache |
3 |
RS to All-Routers Multicast |
Send RS to ff02::2 |
Routers respond with RA |
4 |
RA to All-Nodes Multicast |
Send RA to ff02::1 |
All hosts receive RA |
5 |
Redirect to Unicast |
Send redirect to host |
Host updates route |
6 |
Echo Request to Multicast |
Send to ff02::1 |
Replies from all reachable nodes |
7 |
Echo Request to ff02::2 |
Send to all routers |
Routers respond |
8 |
MLD Query to ff02::1 |
Send MLD query |
Hosts respond with reports |
9 |
MLD Report to ff02::16 |
Send report |
Routers update group membership |
10 |
MLD Done to ff02::2 |
Send done message |
Routers prune group |
11 |
NS with SLLAO |
Include Source Link-Layer Address Option |
Target updates cache |
12 |
NA with TLLAO |
Include Target Link-Layer Address Option |
Solicitor updates cache |
13 |
RA with Prefix Info |
Include PIO |
Hosts configure address |
14 |
RA with MTU Option |
Include MTU |
Hosts update MTU |
15 |
RA with RDNSS Option |
Include DNS info |
Hosts update DNS settings |
16 |
RA with DNSSL Option |
Include search list |
Hosts update domain search list |
17 |
Multicast Scope - Link-Local |
Use ff02::1 |
Only link-local nodes respond |
18 |
Multicast Scope - Site-Local |
Use ff05::1 |
Site-local nodes respond |
19 |
Multicast Scope - Organization |
Use ff08::1 |
Org-wide nodes respond |
20 |
Multicast Scope - Global |
Use ff0e::1 |
Global nodes respond (if allowed) |
21 |
NS to Multicast with Invalid MAC |
Use wrong MAC |
No NA received |
22 |
NA to Multicast |
Send unsolicited NA |
All nodes update cache |
23 |
RS to Multicast with Invalid Source |
Use non-link-local source |
Packet discarded |
24 |
RA to Multicast with Invalid Prefix |
Use invalid prefix |
Hosts ignore prefix |
25 |
MLD Query with Invalid Group |
Use invalid group address |
Hosts ignore query |
26 |
MLD Report with Invalid Scope |
Use invalid scope |
Routers ignore report |
27 |
MLD Done with No Membership |
Send done without join |
Routers ignore |
28 |
Multicast Join via MLD |
Host joins group |
MLD report sent |
29 |
Multicast Leave via MLD |
Host leaves group |
MLD done sent |
30 |
Multicast Listener Discovery |
Enable MLDv2 |
Group membership tracked |
31 |
Multicast with VLAN |
Send over VLAN |
Multicast functions correctly |
32 |
Multicast with VRF |
Send in VRF |
Scoped to VRF |
33 |
Multicast with QoS |
Set DSCP bits |
QoS preserved |
34 |
Multicast with Fragmentation |
Send large packet |
Reassembled correctly |
35 |
Multicast with Extension Headers |
Add EH |
Packet processed correctly |
36 |
Multicast with Hop-by-Hop Options |
Add HBH |
Packet processed correctly |
37 |
Multicast with Routing Header |
Add RH |
Packet processed correctly |
38 |
Multicast with Authentication Header |
Add AH |
Packet accepted if valid |
39 |
Multicast with ESP |
Add ESP |
Packet decrypted if valid |
40 |
Multicast with Invalid Checksum |
Corrupt checksum |
Packet discarded |
41 |
Multicast with Invalid Type |
Use undefined type |
Packet discarded |
42 |
Multicast with Invalid Code |
Use undefined code |
Packet discarded |
43 |
Multicast with Truncated Header |
Incomplete header |
Packet discarded |
44 |
Multicast with Spoofed Source |
Use fake source IP |
Replies sent to spoofed address |
45 |
Multicast Flooding |
Send excessive multicast |
Host rate-limits processing |
46 |
Multicast Filtering |
Block multicast in firewall |
No packets received |
47 |
Multicast Logging |
Enable logging |
Multicast events logged |
48 |
Multicast with Packet Capture |
Use Wireshark |
Multicast packets visible |
49 |
Multicast with SNMP Monitoring |
Monitor ICMPv6 |
Multicast stats visible |
50 |
Multicast with Rate Limiting |
Apply ICMPv6 rate limit |
Excess multicast packets dropped |
Security-Aware Design - Testcases
Security-Aware Design - Test Cases |
|||
---|---|---|---|
# |
Test Case |
Description |
Expected Result |
1 |
Validate ICMPv6 Checksum |
Send packet with invalid checksum |
Packet discarded |
2 |
Validate Message Type |
Use undefined ICMPv6 type |
Packet discarded |
3 |
Validate Message Code |
Use undefined code |
Packet discarded |
4 |
Validate Header Length |
Send truncated header |
Packet discarded |
5 |
Validate Payload Length |
Send oversized payload |
Packet discarded |
6 |
Validate Source Address |
Use multicast source |
Packet discarded |
7 |
Validate Destination Address |
Use invalid destination |
Packet discarded |
8 |
Validate Scope of Multicast |
Use global scope for local message |
Packet discarded |
9 |
Validate Router Solicitation Source |
Use non-link-local source |
RS discarded |
10 |
Validate Router Advertisement Prefix |
Use invalid prefix length |
Prefix ignored |
11 |
Validate MTU Option |
Use MTU < 1280 |
MTU option ignored |
12 |
Validate Redirect Target |
Use unreachable target |
Redirect ignored |
13 |
Validate NS with SLLAO |
Use invalid MAC address |
Target ignores NS |
14 |
Validate NA with TLLAO |
Use spoofed MAC address |
Host ignores NA |
15 |
Validate NA Flags |
Use invalid flag combination |
NA ignored |
16 |
Validate RA Lifetime |
Use excessive router lifetime |
Lifetime capped |
17 |
Validate RA Prefix Lifetime |
Use invalid prefix lifetime |
Prefix ignored |
18 |
Validate RDNSS Option |
Use invalid DNS address |
Option ignored |
19 |
Validate DNSSL Option |
Use malformed domain list |
Option ignored |
20 |
Validate Fragment Header |
Use invalid offset |
Packet discarded |
21 |
Validate Routing Header |
Use deprecated RH type |
Packet discarded |
22 |
Validate Hop-by-Hop Options |
Use malformed HBH |
Packet discarded |
23 |
Validate Authentication Header |
Use invalid AH |
Packet discarded |
24 |
Validate ESP Header |
Use invalid ESP |
Packet discarded |
25 |
Validate Jumbo Payload Option |
Use invalid jumbo length |
Packet discarded |
26 |
Validate ICMPv6 Rate Limit |
Send excessive messages |
Excess packets dropped |
27 |
Validate NS Rate Limit |
Send frequent NS |
Host rate-limits responses |
28 |
Validate NA Rate Limit |
Send frequent NA |
Host rate-limits updates |
29 |
Validate RA Rate Limit |
Send frequent RA |
Host rate-limits processing |
30 |
Validate Redirect Rate Limit |
Send frequent redirects |
Host limits updates |
31 |
Validate MLD Query Rate |
Send frequent MLD queries |
Hosts limit responses |
32 |
Validate MLD Report Rate |
Send frequent reports |
Routers limit processing |
33 |
Validate MLD Done Rate |
Send frequent done messages |
Routers ignore excess |
34 |
Validate Duplicate Address Detection |
Send NS for own address |
Conflict detected securely |
35 |
Validate SLAAC Prefix |
Use unauthorized prefix |
Host ignores prefix |
36 |
Validate RA Source |
Use unauthorized router |
Host ignores RA |
37 |
Validate Redirect Source |
Use unauthorized gateway |
Host ignores redirect |
38 |
Validate NS Spoofing |
Use spoofed source IP |
Host ignores NS |
39 |
Validate NA Spoofing |
Use spoofed target IP |
Host ignores NA |
40 |
Validate RA Spoofing |
Use fake router info |
Host ignores RA |
41 |
Validate Redirect Spoofing |
Use fake redirect |
Host ignores redirect |
42 |
Validate Replay Protection |
Replay old ICMPv6 messages |
Host ignores duplicates |
43 |
Validate Message Integrity |
Use tampered message |
Host discards packet |
44 |
Validate IPsec Integration |
Use IPsec with ICMPv6 |
Message authenticated |
45 |
Validate Firewall Filtering |
Block ICMPv6 types |
Messages dropped securely |
46 |
Validate ACL Enforcement |
Apply access control |
ICMPv6 filtered as per policy |
47 |
Validate VRF Isolation |
Send in VRF |
ICMPv6 scoped to VRF |
48 |
Validate VLAN Isolation |
Send over VLAN |
ICMPv6 scoped to VLAN |
49 |
Validate Logging |
Enable logging |
ICMPv6 events recorded |
50 |
Validate SNMP Monitoring |
Monitor ICMPv6 stats |
Alerts on anomalies |
Extensible Message Format - Testcases
Extensible Message Format - Test Cases |
|||
---|---|---|---|
# |
Test Case |
Description |
Expected Result |
1 |
Validate EMF header presence |
Send ICMPv6 packet with EMF |
EMF header is correctly identified |
2 |
Validate EMF header absence |
Send ICMPv6 packet without EMF |
EMF header is not present |
3 |
Validate EMF version field |
Send EMF with version = 1 |
Version field is parsed as 1 |
4 |
Invalid EMF version |
Send EMF with version = 255 |
Packet is dropped or flagged |
5 |
Validate EMF length field |
Send EMF with correct length |
Length is parsed correctly |
6 |
Invalid EMF length |
Send EMF with incorrect length |
Packet is rejected |
7 |
Validate EMF checksum |
Send EMF with valid checksum |
Checksum is verified |
8 |
Invalid EMF checksum |
Send EMF with corrupted checksum |
Packet is discarded |
9 |
Validate multiple TLVs |
Send EMF with multiple TLVs |
All TLVs are parsed correctly |
10 |
Validate unknown TLV type |
Send EMF with unknown TLV |
TLV is ignored, rest processed |
11 |
Validate TLV length mismatch |
TLV length doesn’t match data |
Packet is flagged |
12 |
Validate nested TLVs |
Send nested TLVs in EMF |
Nested TLVs are parsed |
13 |
Validate TLV padding |
Send TLVs with padding |
Padding is ignored |
14 |
Validate TLV alignment |
Send misaligned TLVs |
Packet is flagged |
15 |
Validate TLV order |
Send TLVs in random order |
Order is preserved |
16 |
Validate TLV duplication |
Duplicate TLVs in EMF |
All instances are parsed |
17 |
Validate TLV truncation |
Truncated TLV in EMF |
Packet is dropped |
18 |
Validate TLV overflow |
TLV length exceeds EMF length |
Packet is rejected |
19 |
Validate TLV underflow |
TLV length less than actual |
Packet is flagged |
20 |
Validate TLV with zero length |
TLV with length = 0 |
TLV is ignored |
21 |
Validate TLV with max length |
TLV with max allowed length |
TLV is accepted |
22 |
Validate EMF with no TLVs |
EMF header only |
Packet is accepted |
23 |
Validate EMF with invalid type |
EMF type not recognized |
Packet is dropped |
24 |
Validate EMF with reserved fields |
Reserved fields set |
Packet is flagged |
25 |
Validate EMF with future version |
Version > current |
Packet is ignored or logged |
26 |
Validate EMF in Echo Request |
Send Echo Request with EMF |
EMF is parsed |
27 |
Validate EMF in Echo Reply |
Send Echo Reply with EMF |
EMF is parsed |
28 |
Validate EMF in Router Solicitation |
Send RS with EMF |
EMF is parsed |
29 |
Validate EMF in Router Advertisement |
Send RA with EMF |
EMF is parsed |
30 |
Validate EMF in Neighbor Solicitation |
Send NS with EMF |
EMF is parsed |
31 |
Validate EMF in Neighbor Advertisement |
Send NA with EMF |
EMF is parsed |
32 |
Validate EMF in Redirect |
Send Redirect with EMF |
EMF is parsed |
33 |
Validate EMF in Parameter Problem |
Send Parameter Problem with EMF |
EMF is parsed |
34 |
Validate EMF in Time Exceeded |
Send Time Exceeded with EMF |
EMF is parsed |
35 |
Validate EMF in Packet Too Big |
Send Packet Too Big with EMF |
EMF is parsed |
36 |
Validate EMF with extension headers |
EMF after extension headers |
EMF is parsed correctly |
37 |
Validate EMF with fragmentation |
Fragmented packet with EMF |
EMF is reassembled and parsed |
38 |
Validate EMF with jumbo payload |
Jumbo payload with EMF |
EMF is parsed |
39 |
Validate EMF with encryption |
Encrypted payload with EMF |
EMF is not parsed (encrypted) |
40 |
Validate EMF with authentication |
Authenticated packet with EMF |
EMF is parsed post-authentication |
41 |
Validate EMF with malformed TLV |
Corrupted TLV structure |
Packet is dropped |
42 |
Validate EMF with unsupported TLV |
TLV type not implemented |
TLV is ignored |
43 |
Validate EMF with vendor-specific TLV |
Custom TLV type |
TLV is parsed if supported |
44 |
Validate EMF with experimental TLV |
Experimental TLV type |
TLV is parsed or ignored |
45 |
Validate EMF with duplicate headers |
Two EMF headers |
Packet is dropped |
46 |
Validate EMF with trailing data |
Extra data after TLVs |
Data is ignored |
47 |
Validate EMF with compressed TLVs |
Compressed TLV format |
TLVs are decompressed and parsed |
48 |
Validate EMF with invalid encoding |
Non-UTF8 TLV data |
Packet is flagged |
49 |
Validate EMF with large number of TLVs |
100+ TLVs in EMF |
All TLVs are parsed |
50 |
Validate EMF performance |
High throughput EMF traffic |
No packet loss or delay |
No Fragmentation Support - Testcases
No Fragmentation Support - Test Cases |
|||
---|---|---|---|
# |
Test Case |
Description |
Expected Result |
1 |
Send oversized IPv6 packet |
Send a packet larger than MTU without fragmentation |
Packet dropped, ICMPv6 “Packet Too Big” sent |
2 |
Send packet equal to MTU |
Send a packet exactly equal to MTU |
Packet delivered successfully |
3 |
Send packet smaller than MTU |
Send a small packet |
Packet delivered successfully |
4 |
Fragmented packet from sender |
Send a fragmented packet |
Packet dropped, ICMPv6 error generated |
5 |
Intermediate router fragmentation |
Router attempts to fragment |
Packet dropped, ICMPv6 error sent |
6 |
Verify ICMPv6 “Packet Too Big” code |
Check ICMPv6 error code correctness |
Code is 2 (Packet Too Big) |
7 |
Verify MTU in ICMPv6 message |
Check MTU field in ICMPv6 message |
MTU field correctly populated |
8 |
Send packet with DF bit set |
Send packet with Don’t Fragment bit |
Packet dropped, ICMPv6 error sent |
9 |
Send packet with DF bit unset |
DF bit ignored in IPv6 |
Packet processed normally |
10 |
Send packet with extension headers |
Include headers that increase size |
Packet dropped if size > MTU |
11 |
Test with tunnel encapsulation |
Encapsulate IPv6 in IPv6 |
Outer packet size checked |
12 |
Test with IPsec ESP |
Use IPsec ESP headers |
Packet dropped if size > MTU |
13 |
Test with IPsec AH |
Use IPsec AH headers |
Packet dropped if size > MTU |
14 |
Send packet with jumbo payload |
Use jumbo payload option |
Packet dropped if unsupported |
15 |
Send packet to unreachable MTU path |
Path MTU < packet size |
ICMPv6 “Packet Too Big” sent |
16 |
Path MTU discovery |
Trigger PMTUD |
ICMPv6 message received |
17 |
PMTUD with ICMPv6 filtering |
Block ICMPv6 messages |
PMTUD fails, connection stalls |
18 |
PMTUD with ICMPv6 allowed |
Allow ICMPv6 |
PMTUD succeeds |
19 |
Send packet with hop-by-hop header |
Add hop-by-hop header |
Packet dropped if size > MTU |
20 |
Send packet with routing header |
Add routing header |
Packet dropped if size > MTU |
21 |
Send packet with destination options |
Add destination options |
Packet dropped if size > MTU |
22 |
Send packet with unknown extension |
Use unknown header |
Packet dropped |
23 |
Send packet with multiple headers |
Combine headers |
Packet dropped if size > MTU |
24 |
Send packet with padding |
Add padding to exceed MTU |
Packet dropped |
25 |
Send packet with compressed header |
Use header compression |
Packet delivered if size ? MTU |
26 |
Send packet with fragmented UDP payload |
Fragment UDP manually |
Packet dropped |
27 |
Send packet with fragmented TCP payload |
Fragment TCP manually |
Packet dropped |
28 |
Send packet with fragmented ICMPv6 payload |
Fragment ICMPv6 |
Packet dropped |
29 |
Send packet with fragmented SCTP payload |
Fragment SCTP |
Packet dropped |
30 |
Send packet with fragmented GRE tunnel |
Fragment GRE |
Packet dropped |
31 |
Send packet with fragmented MPLS |
Fragment MPLS |
Packet dropped |
32 |
Send packet with fragmented L2TP |
Fragment L2TP |
Packet dropped |
33 |
Send packet with fragmented VXLAN |
Fragment VXLAN |
Packet dropped |
34 |
Send packet with fragmented GTP |
Fragment GTP |
Packet dropped |
35 |
Send packet with fragmented DNS payload |
Fragment DNS |
Packet dropped |
36 |
Send packet with fragmented HTTP payload |
Fragment HTTP |
Packet dropped |
37 |
Send packet with fragmented HTTPS payload |
Fragment HTTPS |
Packet dropped |
38 |
Send packet with fragmented FTP payload |
Fragment FTP |
Packet dropped |
39 |
Send packet with fragmented SMTP payload |
Fragment SMTP |
Packet dropped |
40 |
Send packet with fragmented SNMP payload |
Fragment SNMP |
Packet dropped |
41 |
Send packet with fragmented VoIP payload |
Fragment VoIP |
Packet dropped |
42 |
Send packet with fragmented video stream |
Fragment video |
Packet dropped |
43 |
Send packet with fragmented audio stream |
Fragment audio |
Packet dropped |
44 |
Send packet with fragmented gaming traffic |
Fragment game data |
Packet dropped |
45 |
Send packet with fragmented IoT data |
Fragment IoT packet |
Packet dropped |
46 |
Send packet with fragmented telemetry |
Fragment telemetry |
Packet dropped |
47 |
Send packet with fragmented syslog |
Fragment syslog |
Packet dropped |
48 |
Send packet with fragmented NetFlow |
Fragment NetFlow |
Packet dropped |
49 |
Send packet with fragmented sFlow |
Fragment sFlow |
Packet dropped |
50 |
Send packet with fragmented BGP update |
Fragment BGP |
Packet dropped |
Rate Limiting - Testcases
Rate Limiting - Test Cases |
|||
---|---|---|---|
# |
Test Case |
Description |
Expected Result |
1 |
Basic Echo Request |
Send a single ICMPv6 Echo Request |
Echo Reply received |
2 |
Burst Echo Requests |
Send 100 Echo Requests in 1 second |
Some replies dropped due to rate limiting |
3 |
Sustained Echo Requests |
Send 10 Echo Requests per second for 1 minute |
Replies throttled after threshold |
4 |
Echo Request from Multiple Sources |
Send Echo Requests from 5 different IPs |
Rate limiting applied per source |
5 |
Echo Request to Multiple Destinations |
Send Echo Requests to 5 different destinations |
Rate limiting applied per destination |
6 |
Fragmented ICMPv6 Packets |
Send fragmented Echo Requests |
Rate limiting still applies |
7 |
Malformed ICMPv6 Packet |
Send malformed ICMPv6 packet |
Packet dropped, no reply |
8 |
ICMPv6 Redirect Flood |
Send 100 Redirect messages in 1 second |
Most redirects dropped |
9 |
ICMPv6 Parameter Problem Flood |
Send 100 Parameter Problem messages |
Rate limiting enforced |
10 |
ICMPv6 Packet Too Big Flood |
Send 100 Packet Too Big messages |
Rate limiting enforced |
11 |
ICMPv6 Time Exceeded Flood |
Send 100 Time Exceeded messages |
Rate limiting enforced |
12 |
Rate Limit Recovery |
Send burst, wait, then send again |
Replies resume after cooldown |
13 |
Rate Limit Logging |
Check logs after flood |
Logs show rate limiting events |
14 |
Rate Limit Threshold Test |
Send just below threshold |
All replies received |
15 |
Rate Limit Threshold Breach |
Send just above threshold |
Some replies dropped |
16 |
ICMPv6 Rate Limit Config Check |
Verify system config |
Rate limit values match expected |
17 |
ICMPv6 Rate Limit Disabled |
Disable rate limiting |
All packets replied |
18 |
ICMPv6 Rate Limit Enabled |
Enable rate limiting |
Excess packets dropped |
19 |
ICMPv6 Rate Limit per Interface |
Test on multiple interfaces |
Rate limiting per interface |
20 |
ICMPv6 Rate Limit per Protocol Type |
Test Echo vs Redirect |
Separate limits enforced |
21 |
ICMPv6 Rate Limit with QoS |
Apply QoS to ICMPv6 |
High-priority packets still limited |
22 |
ICMPv6 Rate Limit with Firewall |
Enable firewall |
Rate limiting still applies |
23 |
ICMPv6 Rate Limit with NAT |
Test behind NAT |
Rate limiting applies to internal IPs |
24 |
ICMPv6 Rate Limit with VPN |
Test over VPN tunnel |
Rate limiting applies |
25 |
ICMPv6 Rate Limit with IPv4 Tunnel |
ICMPv6 over IPv4 tunnel |
Rate limiting applies |
26 |
ICMPv6 Rate Limit with IPv6 Tunnel |
ICMPv6 over IPv6 tunnel |
Rate limiting applies |
27 |
ICMPv6 Rate Limit with Extension Headers |
Add headers |
Rate limiting still applies |
28 |
ICMPv6 Rate Limit with Jumbo Frames |
Send large packets |
Rate limiting applies |
29 |
ICMPv6 Rate Limit with Multicast |
Send to multicast address |
Rate limiting applies |
30 |
ICMPv6 Rate Limit with Broadcast |
Send to all-nodes address |
Rate limiting applies |
31 |
ICMPv6 Rate Limit with SLAAC |
Trigger SLAAC messages |
Rate limiting applies |
32 |
ICMPv6 Rate Limit with Router Advertisements |
Send RAs rapidly |
Rate limiting enforced |
33 |
ICMPv6 Rate Limit with Router Solicitations |
Send RS rapidly |
Rate limiting enforced |
34 |
ICMPv6 Rate Limit with Neighbor Solicitation |
Send NS rapidly |
Rate limiting enforced |
35 |
ICMPv6 Rate Limit with Neighbor Advertisement |
Send NA rapidly |
Rate limiting enforced |
36 |
ICMPv6 Rate Limit with Duplicate Address Detection |
Trigger DAD |
Rate limiting does not interfere |
37 |
ICMPv6 Rate Limit with Link-Local Address |
Use link-local source |
Rate limiting applies |
38 |
ICMPv6 Rate Limit with Global Address |
Use global source |
Rate limiting applies |
39 |
ICMPv6 Rate Limit with Unspecified Address |
Use :: as source |
Packet dropped |
40 |
ICMPv6 Rate Limit with Loopback Address |
Use ::1 |
Rate limiting applies |
41 |
ICMPv6 Rate Limit with Hop Limit = 1 |
Send with low hop limit |
Packet dropped before rate limiting |
42 |
ICMPv6 Rate Limit with Hop Limit = 255 |
Send with max hop limit |
Rate limiting applies |
43 |
ICMPv6 Rate Limit with DSCP Marking |
Mark packets |
Rate limiting applies regardless |
44 |
ICMPv6 Rate Limit with Fragmentation Attack |
Send overlapping fragments |
Packet dropped |
45 |
ICMPv6 Rate Limit with Replay Attack |
Replay old packets |
Rate limiting applies |
46 |
ICMPv6 Rate Limit with Spoofed Source |
Use fake IPs |
Rate limiting applies |
47 |
ICMPv6 Rate Limit with Legitimate Traffic |
Mix good and bad traffic |
Only excess ICMPv6 dropped |
48 |
ICMPv6 Rate Limit with CPU Load |
High CPU load |
Rate limiting still enforced |
49 |
ICMPv6 Rate Limit with Memory Pressure |
Low memory |
Rate limiting still enforced |
50 |
ICMPv6 Rate Limit with System Reboot |
Reboot system |
Rate limiting resets |
Reference links