NAME

        ping_siit_frag.seq - Verify IPv6 <-> IPv4 header translation in 
        accordance with RFC2765 [SIIT]


TARGET

        Router


SYNOPSIS

        ping_siit_frag.seq [-tooloption ...] -p ping_siit_frag.def


INITIALIZATION

	Before this test starts, run initialize.seq.


TEST PROCEDURE

        This test verifies that NUT translates between IPv6 (fragment hdr) 
        and IPv4 (DF=0). It also tests ICMPv6 echo <-> ICMPv4 echo 
        translation.
        
        Network Topology

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

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

        1.1.1
        ===================>
        ICMPv6 Echo Request
                IPv6 Header
                        src address : TN LINK0 IPv4 embedded IPv6 address
                        dst address : TN LINK1 IPv4 embedded IPv6 address
                Fragment Header
                        More fragments = 0
                ICMPv6 echo request

        1.1.2
        <<JUDGMENT>>
                                    ===================>
        ICMPv4 Echo request
                IPv4 Header
                        src address : TN LINK0 IPv4 address
                        dst address : TN LINK1 IPv4 address
                        Don't Fragment = 0
                        More fragments = 0
                ICMPv4 echo request

        1.2.1
                                    <===================
        ICMPv4 Echo Reply
                IPv4 Header
                        src address : TN LINK1 IPv4 address
                        dst address : TN LINK0 IPv4 address
                        Don't Fragment = 0
                        More fragments = 0
                ICMPv4 echo reply

        1.2.2
        <<JUDGMENT>>
        <===================
        ICMPv6 Echo Reply
                IPv6 Header
                        src address : TN LINK1 IPv4 embedded IPv6 address
                        dst address : TN LINK0 IPv4 embedded IPv6 address
                Fragment Header
                        More fragments = 0
                ICMPv6 echo reply


JUDGMENT

        << PASS >>
                TN (Link1) received ICMPv4 echo request, 
                with DF=0 in IPv4 header.
                TN (Link0) received ICMPv6 echo reply, 
                with a fragment header after IPv6 header.
                

        << FAIL >>      
                NUT did not translate between ICMPv6 echo and ICMPv4 echo, 
                or NUT did not translate between IPv6 fragment header 
                and IPv4 DF option.


NOTE


REFERENCE

RFC2765

3.1. Translating IPv4 Headers into IPv6 Headers

   [...] IPv4 packets with DF not set will always result in a fragment 
   header being added to the packet [...]

3.3. Translating ICMPv4 Headers into ICMPv6 Headers

        Echo and Echo Reply (Type 8 and Type 0)
           Adjust the type to 128 and 129, respectively, and adjust the
           ICMP checksum both to take the type change into account and
           to include the ICMPv6 pseudo-header.

4.1. Translating IPv6 Headers into IPv4 Headers

   If there is no IPv6 Fragment header the IPv4 header fields are set as
   follows:

   If the IPv6 packet contains a Fragment header the header fields are
   set as above with the following exceptions:

         Flags:
                 The More Fragments flag is copied from the M flag in
                 the Fragment header.  The Don't Fragments flag is set
                 to zero allowing this packet to be fragmented by IPv4
                 routers.

4.2. Translating ICMPv6 Headers into ICMPv4 Headers

        Echo Request and Echo Reply (Type 128 and 129)
           Adjust the type to 0 and 8, respectively, and adjust the ICMP
           checksum both to take the type change into account and to
           exclude the ICMPv6 pseudo-header.


SEE ALSO

        perldoc V6evalTool