NAME

        rfc2766_5.3.1_checksum_icmp.seq - Verify IPv6 <-> IPv4 header 
        translation in accordance with RFC2766 [NATPT]


TARGET

        Router


SYNOPSIS

        rfc2766_5.3.1_checksum_icmp.seq [-tooloption ...] 
        -p rfc2766_5.3.1_checksum_icmp.def


INITIALIZATION

	Before this test starts, run initialize_natpt.seq.


TEST PROCEDURE

        This test verifies that NUT adjusts header checksum for ICMP packets.
        
        Network Topology

        Link0
        --------------------------
            |               |
           TN              NUT
            |               |
        --------------------------
        Link1

        TN -- (Link0) -- NUT        NUT -- (Link1) -- TN
        
        ---------------------      ------------------------

        1.1.
                                   <===================
        IPv4 ICMP packet
                IPv4 Header
                        src address : TN LINK1 IPv4 address
                        dst address : TN LINK0 IPv4 address
                        DF = 1
                ICMPv4 Destination Unreachable
                        Type = 3
                        Code = 1
                Payload (28 bytes)
                        IPv4 Header (20 bytes)
                                src address : TN LINK0 IPv4 address
                                dst address : TN LINK1 IPv4 address
                                DF = 1
                                Protocol = 17
                        UDP packet (first 8 bytes)
                                Checksum including IPv4 pseudo header
                                data = repeat(0xff,1422)
        1.2.
        <<JUDGMENT>>
        <===================
        IPv6 ICMP packet
                IPv6 Header
                        src address : TN LINK1 IPv4 embedded IPv6 address
                        dst address : TN LINK0 IPv4 embedded IPv6 address
                ICMPv6 Destination Unreachable
                        Type = 1
                        Code = 0
                Payload (48 bytes)
                        IPv6 Header (40 bytes)
                                src address : TN LINK0 IPv4 embedded IPv6 address
                                dst address : TN LINK1 IPv4 embedded IPv6 address
                                NextHeader = 17
                        UDP packet (first 8 bytes)
                                Checksum including IPv6 pseudo header
                                data = repeat(0xff,1422)


JUDGMENT

        << PASS >>
                NUT will translate ICMPv4 Destination Unreachable
                to ICMPv6 Destination Unreachable.
                NUT will translate the inner IPv4 UDP packet to the
                equivalent IPv6 UDP packet.
                NUT will update checksums for the inner and outer
                IP headers.
                
        << FAIL >>      
                NUT does not translate correctly.


NOTE


REFERENCE

RFC2766

5.3.1 TCP/UDP/ICMP Checksum Update from IPv4 to IPv6

   ICMPv6, unlike ICMPv4, uses a pseudo-header, just like UDP and TCP
   during checksum computation. As a result, when the ICMPv6 header
   checksum is computed [SIIT], the checksum needs to be adjusted to
   account for the additional pseudo-header. Note, there may also be
   adjustments required to the checksum due to changes in the source and
   destination addresses (and changes in TCP/UDP/ICMP identifiers in the
   case of NAPT-PT) of the payload carried within ICMP.


SEE ALSO

        perldoc V6evalTool