NAME

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


TARGET

        Router


SYNOPSIS

        rfc2766_5.3.2_checksum_tcp_udp.seq [-tooloption ...] 
        -p rfc2766_5.3.2_checksum_tcp_udp.def


INITIALIZATION

	Before this test starts, run initialize_natpt.seq.


TEST PROCEDURE

        This test verifies that NUT adjusts header checksum for TCP/UDP 
        packets.
        
        Network Topology

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

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

        1.1.
        ===================>
        IPv6 UDP packet
                IPv6 Header
                        src address : TN LINK0 IPv4 embedded IPv6 address
                        dst address : TN LINK1 IPv4 embedded IPv6 address
                UDP packet
                        Checksum including IPv6 pseudo header
                        data = repeat(0xff,128)
        1.2.
        <<JUDGMENT>>
                                   ===================>
        IPv4 UDP packet
                IPv4 Header
                        src address : TN LINK0 IPv4 address
                        dst address : TN LINK1 IPv4 address
                        DF = 1
                UDP packet
                        Checksum including IPv4 pseudo header, or zero
                        data = repeat(0xff,128)

        2.1.
        ===================>
        IPv6 UDP packet
                IPv6 Header
                        src address : TN LINK0 IPv4 embedded IPv6 address
                        dst address : TN LINK1 IPv4 embedded IPv6 address
                Fragment Header
                        More fragments = 1
                UDP packet
                        Checksum including IPv6 pseudo header, or zero
                        data = repeat(0xff,64)
        2.2.
        <<JUDGMENT>>
                                   ===================>
        IPv4 UDP packet
                IPv4 Header
                        src address : TN LINK0 IPv4 address
                        dst address : TN LINK1 IPv4 address
                        MF = 1
                UDP packet
                        Checksum for full UDP packet, including pseudo header
                        data = repeat(0xff,64)

        3.1.
        ===================>
        IPv6 UDP packet
                IPv6 Header
                        src address : TN LINK0 IPv4 embedded IPv6 address
                        dst address : TN LINK1 IPv4 embedded IPv6 address
                Fragment Header
                        More fragments = 0
                        NextHeader = 17
                Payload
                        data = repeat(0xff,64)
        3.2.
        <<JUDGMENT>>
                                   ===================>
        IPv4 UDP packet
                IPv4 Header
                        src address : TN LINK0 IPv4 address
                        dst address : TN LINK1 IPv4 address
                        MF = 0
                        Protocol = 17
                Payload
                        data = repeat(0xff,64)

        4.1.
        ===================>
        IPv6 TCP packet
                IPv6 Header
                        src address : TN LINK0 IPv4 embedded IPv6 address
                        dst address : TN LINK1 IPv4 embedded IPv6 address
                TCP packet
                        Checksum including IPv6 pseudo header
                        data = repeat(0xff,128)
        4.2.
        <<JUDGMENT>>
                                   ===================>
        IPv4 TCP packet
                IPv4 Header
                        src address : TN LINK0 IPv4 address
                        dst address : TN LINK1 IPv4 address
                        DF = 1
                TCP packet
                        Checksum including IPv4 pseudo header
                        data = repeat(0xff,128)

        5.1.
        ===================>
        IPv6 TCP packet
                IPv6 Header
                        src address : TN LINK0 IPv4 embedded IPv6 address
                        dst address : TN LINK1 IPv4 embedded IPv6 address
                Fragment Header
                        More fragments = 1
                TCP packet
                        Checksum including IPv6 pseudo header
                        data = repeat(0xff,64)
        5.2.
        <<JUDGMENT>>
                                   ===================>
        IPv4 TCP packet
                IPv4 Header
                        src address : TN LINK0 IPv4 address
                        dst address : TN LINK1 IPv4 address
                        MF = 1
                TCP packet
                        Checksum including IPv4 pseudo header
                        data = repeat(0xff,64)

        6.1.
        ===================>
        IPv6 TCP packet
                IPv6 Header
                        src address : TN LINK0 IPv4 embedded IPv6 address
                        dst address : TN LINK1 IPv4 embedded IPv6 address
                Fragment Header
                        More fragments = 0
                Payload
                        data = repeat(0xff,64)
        6.2.
        <<JUDGMENT>>
                                   ===================>
        IPv4 TCP packet
                IPv4 Header
                        src address : TN LINK0 IPv4 address
                        dst address : TN LINK1 IPv4 address
                        MF = 0
                Payload
                        data = repeat(0xff,64)


JUDGMENT

        << PASS >>
                NUT adjusts header checksum for UDP/TCP packets.
                Optionally NUT sets checksum to zero on UDP packets.

        << FAIL >>      
                NUT send TCP/UDP packets with wrong checksum.


NOTE


REFERENCE

RFC2766

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

   TCP and UDP checksums SHOULD be recalculated to reflect the address
   change from v6 to v4. The incremental checksum adjustment algorithm
   may be borrowed from [NAT]. In the case of NAPT-PT, TCP/UDP checksums
   should be adjusted to account for the address and TCP/UDP port
   changes, going from V6 to V4 addresses. For UDP packets, optionally,
   the checksum may simply be changed to zero.


SEE ALSO

        perldoc V6evalTool