CDRouter Test Summaries (Full)

Test Case Descriptions

  • Modules: 63
  • Test Cases: 784

Below is a full description of the testcases in each module


basic.tcl

Initial connectivity tests to verify ARP and DHCP client are connected

Test Name Synopsis
Router responds to ARP request on LAN interface cdrouter_basic_1 Router responds to ARP request on LAN interface


    step 1. Send an ARP request to LAN client's default gateway
    step 2. Verify that a valid ARP response is received
Test Name Synopsis
Router responds to ARP request on WAN interface cdrouter_basic_2 Router responds to ARP request on WAN interface


    step 1. Send an ARP request for router's WAN IP address
    step 2. Verify that a valid ARP reply is received
    step 3. Verify that the MAC address in the ARP reply matches expected MAC
            address of the DUT's WAN interface

    NOTE: This test is only run if the WAN interface mode supports ARP. This
    test is skipped for wanMode PPPoE.

    NOTE: To configure the expected MAC address of the DUT's WAN interface,
    configure the testvar "wanDutMac". If this testvar is not defined, Step 3
    will be skipped.
Test Name Synopsis
Verify LAN DHCP clients receive gateway/DNS configuration from WAN side cdrouter_basic_10 Verify LAN DHCP clients receive gateway/DNS configuration from WAN side


    step 1. Start new DHCP client on LAN interface
    step 2. Verify the received DHCP options match the WAN configuration
    step 3. Verify network mask matches configured network mask
    step 4. Verify gateway is router's LAN IP address
    step 5. Verify DNS server is one of the following values:

            a. WAN ISP DNS server, if the testvar DNStoDHCP is set to 'yes'
            b. A user defined DNS server if the testvar lanDnsServer is enabled
               and the testvar DNStoDHCP is set to 'no'
            c. The DUT's LAN IP if the testvar lanDnsServer is disabled and the
              testvar DNStoDHCP is set to 'no'

    step 6. If the WAN is running DHCP, verify domain is WAN ISP domain name
Test Name Synopsis
Outbound packets use specified/cloned source MAC address cdrouter_basic_20 Outbound packets use specified/cloned source MAC address


    step 1. Send an ICMP Echo Request from the LAN to the remote host IPv4
    step 2. Verify that an ICMP Echo Request is received on the WAN
    step 3. Verify that the source MAC address in the ICMP Echo Request received
            on the WAN matches the expected MAC address of DUT's WAN interface

    NOTE: To configure the expected MAC address of the DUT's WAN interface,
    configure the testvar "wanDutMac". If this testvar is not defined, this test
    case will be skipped.

connectivity.tcl

Device connectivity tests to verify link, reboot, and other diagnostics

Test Name Synopsis
Execute and validate DUT Reboot Function cdrouter_connectivity_1 Execute and validate DUT Reboot Function


    step 1. Reboot the DUT
    step 2. Verify that WAN is fully online
    step 3. Verify that LAN is fully online

    NOTE: To run this test, configure the testvar RestartDut and cpeRebootMode.
    If not defined, this test case will be skipped. Additionally, configure
    startTimeout and RestartDutDelay testvars as needed to accomodate DUT reboot
    time.
Test Name Synopsis
Validate connectivity of WAN interface while disabling and enabling link layer cdrouter_connectivity_2 Validate connectivity of WAN interface while disabling and enabling link layer


    step 1. Confirm connectivity between LAN client and host on WAN
    step 2. Set link DOWN on CDRouter's WAN interface.
    step 3. Confirm lost connectivity between LAN client and host on WAN
    step 4. Set link UP on CDRouter's WAN interface.
    step 5. Confirm connectivity restored between LAN client and host on WAN

    This test brings the link layer of CDRouter's WAN interface DOWN and
    validates loss of connectivity. Then the test brings the link layer back UP
    and validates connectivity is restored.
Test Name Synopsis
Validate connectivity of LAN interface while disabling and enabling link layer cdrouter_connectivity_3 Validate connectivity of LAN interface while disabling and enabling link layer


    step 1. Confirm connectivity between LAN client and host on WAN
    step 2. Set link DOWN on CDRouter's LAN interface.
    step 3. Confirm lost connectivity between LAN client and host on WAN
    step 4. Set link UP on CDRouter's LAN interface.
    step 5. Confirm connectivity restored between LAN client and host on WAN

    This test brings the link layer of CDRouter's LAN interface DOWN and
    validates loss of connectivity. Then the test brings the link layer back UP
    and validates connectivity is restored.
Test Name Synopsis
Execute simple connectivity check only cdrouter_connectivity_4 Execute simple connectivity check only


    step 1. Confirm connectivity between LAN client and host on WAN

dhcp-c.tcl

DHCP client tests for the WAN side of the router

Test Name Synopsis
DHCP client renews lease when current lease expires cdrouter_dhcp_1 DHCP client renews lease when current lease expires


    step 1. Wait for DHCP lease to expire
    step 2. Verify WAN client sends DHCPREQUEST for same IP address
    step 3. Reassign the same IP address
Test Name Synopsis
DHCP client resends DHCPREQUEST packet if server does not respond cdrouter_dhcp_2 DHCP client resends DHCPREQUEST packet if server does not respond


    step 1. Wait for DHCP lease to expire
    step 2. Verify WAN client sends DHCPREQUEST for same IP address
    step 3. Do not respond to request
    step 4. Verify WAN client resends DHCPREQUEST for same IP address
    step 5. Respond to request
Test Name Synopsis
DHCP client drops back into DISCOVERY mode if original server stops responding cdrouter_dhcp_3 DHCP client drops back into DISCOVERY mode if original server stops responding


        step 1. Disable DHCP server
        step 2. Wait for DHCP lease to expire for WAN DHCP client
        step 3. Verify WAN client sends DHCPREQUEST for same IP address
        step 4. Do not respond to request
        step 5. Verify WAN client resends DHCPREQUEST for same IP address
        step 6. Verify WAN client eventually sends DHCPDISCOVER

    
Test Name Synopsis
DHCP client drops back into DISCOVERY mode if server sends a DHCPNAK cdrouter_dhcp_4 DHCP client drops back into DISCOVERY mode if server sends a DHCPNAK


        step 1. Configure DHCP server to respond to all DHCP requests with
        DHCPNAK
        step 2. Wait for DHCP lease to expire for WAN DHCP client
        step 3. Verify WAN client sends DHCPREQUEST for same IP address
        step 4. Send DHCPNAK to WAN client
        step 5. Verify WAN client restarts DHCP and eventually sends DHCPDISCOVER
        before any other DHCP message
        step 6. Restore DHCP server's original behavior


    References:

    IETF RFC 2131 "Dynamic Host Configuration Protocol" Section 3.2: Client-server interaction - reusing a previously allocated network address

    If the client receives a DHCPNAK message, it cannot reuse its
    remembered network address.  It must instead request a new
    address by restarting the configuration process, this time
    using the (non-abbreviated) procedure described in section
    3.1.  This action also corresponds to the client moving to
    the INIT state in the DHCP state diagram.

    https://tools.ietf.org/html/rfc2131#section-3.2
Test Name Synopsis
DHCP client remains in DISCOVERY mode if server sends a DHCPNAK cdrouter_dhcp_5 DHCP client remains in DISCOVERY mode if server sends a DHCPNAK


        step  1. Configure DHCP server to respond to all DHCP requests with
        DHCPNAK
        step  2. Wait for DHCP lease to expire for WAN DHCP client
        step  3. Send DHCPNAK to WAN client
        step  4. Verify WAN client restarts DHCP and eventually sends DHCPDISCOVER
        step  5. Send DHCPOFFER to WAN client
        step  6. Verify WAN client sends a broadcast DHCPREQUEST
        step  7. Send DHCPNAK to WAN client
        step  8. Verify WAN client restarts DHCP and eventually sends DHCPDISCOVER
        before any other DHCP message
        step  9. Restore DHCP server's original behavior
        step 10. Verify WAN client is assigned an IP address


    References:

    IETF RFC 2131 "Dynamic Host Configuration Protocol" Section 3.1: Client-server interaction - allocating a network address

    If the client receives a DHCPNAK message, the client restarts the
    configuration process.

    https://tools.ietf.org/html/rfc2131#section-3.1
Test Name Synopsis
DHCP client ignores site-specific DHCP options cdrouter_dhcp_10 DHCP client ignores site-specific DHCP options


        step 1. Disable DHCP server to force client back to DISCOVERY mode
        step 2. Wait for DHCP lease to expire for WAN DHCP client
        step 3. Verify WAN client sends DHCPREQUEST for same IP address
        step 4. Do not respond to request
        step 5. Verify WAN client resends DHCPREQUEST for same IP address
        step 6. Verify WAN client eventually sends DHCPDISCOVER
        step 7. Enable DHCP server with site specific options
        step 8. Verify DHCP client is able to obtain new IP address

    
Test Name Synopsis
Verify DHCP client handles server option with length 0 cdrouter_dhcp_11 Verify DHCP client handles server option with length 0


        step 1. Disable DHCP server to force client back to DISCOVERY mode
        step 2. Wait for WAN DHCP client lease to expire
        step 3. Verify WAN client sends DHCPREQUEST for same IP address
        step 4. Do not respond to request
        step 5. Verify WAN client resends DHCPREQUEST for same IP address
        step 6. Verify WAN client eventually sends DHCPDISCOVER
        step 7. Enable DHCP server
        step 8. Add site specific option with length 0
        step 9. Verify client is able to obtain new IP address

    
Test Name Synopsis
DHCP client ignores DHCP packets with corrupt UDP checksum cdrouter_dhcp_20 DHCP client ignores DHCP packets with corrupt UDP checksum


        step 1. Configure DHCP server to send DHCP packets with corrupt UDP checksum
        step 2. Wait for WAN client DHCP lease to expire
        step 3. Verify WAN client sends DHCPREQUEST
        step 4. Verify server responds with invalid UDP checksum
        step 5. Verify WAN client eventually sends DHCPDISCOVER
        step 6. Verify WAN client sends a second DHCPDISCOVER
        step 7. Configure DHCP server to send valid UDP checksums
        step 8. Verify WAN client can now obtain an IP address

    
Test Name Synopsis
DHCP client includes vendor defined options cdrouter_dhcp_30 DHCP client includes vendor defined options


        step 1. Wait for DHCP lease to expire
        step 2. Verify WAN client sends DHCPREQUEST for same IP address
        step 3. Reassign the same IP address
        step 4. Search DHCPREQUEST for expected options

        The testvars wanDhcpClientOptionCode and wanDhcpClientOptionData can
        be used to configure a list of DHCP options that the client should
        include in requests sent to the DHCP server.

    
Test Name Synopsis
Verify client supports DHCP Rapid Commit option cdrouter_dhcp_31 Verify client supports DHCP Rapid Commit option


        step 1. Disable DHCP server
        step 2. Wait for DHCP lease to expire for WAN DHCP client
        step 3. Verify WAN client sends DHCPREQUEST
        step 4. Do not respond to request
        step 5. Verify WAN client eventually sends DHCPDISCOVER
        step 6. Verify DHCPDISCOVER contains Rapid Commit option


    References:

    IETF RFC 4039 "Rapid Commit Option for the Dynamic Host Configuration Protocol version 4 (DHCPv4)" Section 3.1: Client/Server Operation

    https://tools.ietf.org/html/rfc4039#section-3.1
Test Name Synopsis
Verify client supports DHCP Forcerenew Nonce Authentication cdrouter_dhcp_32 Verify client supports DHCP Forcerenew Nonce Authentication


        step 1. Verify DHCP Forcerenew Authentication nonce for WAN client
        exists
        step 2. Send DHCPFORCERENEW using client nonce
        step 3. Verify WAN client sends DHCPREQUEST packet


    References:

    IETF RFC 3203 "DHCP reconfigure extension" Section 2.2: Force renew procedures

    https://tools.ietf.org/html/rfc3203#section-2.2

    IETF RFC 6704 "Forcerenew Nonce Authentication" Section 3.1.4: Client Considerations for Forcerenew Nonce Authentication

    https://tools.ietf.org/html/rfc6704#section-3.1.4
Test Name Synopsis
Verify client ignores DHCPFORCERENEW without Authentication option cdrouter_dhcp_33 Verify client ignores DHCPFORCERENEW without Authentication option


        step 1. Verify DHCP Forcerenew Authentication nonce for WAN client
        exists
        step 2. Send DHCPFORCERENEW using client nonce without
        Authentication option
        step 3. Verify WAN client does not send DHCPREQUEST packet


    References:

    IETF RFC 6704 "Forcerenew Nonce Authentication" Section 3.1.4: Client Considerations for Forcerenew Nonce Authentication

    https://tools.ietf.org/html/rfc6704#section-3.1.4

    IETF RFC 6704 "Forcerenew Nonce Authentication" Section 5: Security Considerations

    https://tools.ietf.org/html/rfc6704#section-5
Test Name Synopsis
Verify client ignores DHCPFORCERENEW authenticated with incorrect nonce cdrouter_dhcp_34 Verify client ignores DHCPFORCERENEW authenticated with incorrect nonce


        step 1. Verify DHCP Forcerenew Authentication nonce for WAN client
        exists
        step 2. Send DHCPFORCERENEW using incorrect client nonce
        step 3. Verify WAN client does not send DHCPREQUEST packet

        Reference:

        IETF RFC 6704 Section 3.1.4 "Client Considerations for Forcerenew Nonce Authentication"
        IETF RFC 6704 Section 5 "Security Considerations"


    References:

    IETF RFC 6704 "Forcerenew Nonce Authentication" Section 3.1.4: Client Considerations for Forcerenew Nonce Authentication

    https://tools.ietf.org/html/rfc6704#section-3.1.4

    IETF RFC 6704 "Forcerenew Nonce Authentication" Section 5: Security Considerations

    https://tools.ietf.org/html/rfc6704#section-5
Test Name Synopsis
Verify client ignores DHCPFORCERENEW messages on port 67 cdrouter_dhcp_35 Verify client ignores DHCPFORCERENEW messages on port 67


    step 1. Verify DHCP Forcerenew Authentication nonce for WAN client
            exists
    step 2. Send DHCPFORCERENEW to the client on port 67
    step 3. Verify WAN client does not send DHCPREQUEST packet


    References:

    IETF RFC 6704 "Forcerenew Nonce Authentication" Section 3.1.4: Client Considerations for Forcerenew Nonce Authentication

    https://tools.ietf.org/html/rfc6704#section-3.1.4

    IETF RFC 6704 "Forcerenew Nonce Authentication" Section 5: Security Considerations

    https://tools.ietf.org/html/rfc6704#section-5
Test Name Synopsis
Verify client ignores DHCPOFFER messages on port 67 cdrouter_dhcp_36 Verify client ignores DHCPOFFER messages on port 67


    step 1. Wait for the DHCP lease to expire on the DUT
    step 2. Configure the DHCP server to send a DHCPNACK
    step 3. Wait for the DUT to send a DHCPDISCOVER
    step 4. Send a DHCPOFFER to port 67
    step 5. Verify the DUT doesn't respond with a DHCPREQUEST


    References:

    IETF RFC 2131 "Dynamic Host Configuration Protocol" Section 4: Constructing and sending DHCP messages

    https://tools.ietf.org/html/rfc2131#section-4
Test Name Synopsis
Verify client requests same parameters in all subsequent DHCP messages cdrouter_dhcp_40 Verify client requests same parameters in all subsequent DHCP messages


    step 1.  Disable DHCP server
    step 2.  Wait for DHCP lease to expire for WAN DHCP client
    step 3.  Verify WAN client eventually sends DHCPDISCOVER
    step 4.  Record the DHCP Parameter Request List option in DHCPDISCOVER
    step 5.  Enable DHCP server
    step 6.  Verify WAN client sends DHCPREQUEST
    step 7.  Record the DHCP Parameter Request List in DHCPREQUEST
    step 8.  Verify WAN client sends DHCPREQUEST to renew lease
    step 9.  Record the DHCP Parameter Request List in DHCPREQUEST sent during
             renewal
    step 10. Verify DHCP Parameter Request List option contents are consistent
             across DHCP messages (verify that the steps 4, 7, and 9)


    References:

    IETF RFC 2131 "Dynamic Host Configuration Protocol" Section 4.3.2: DHCPREQUEST message

    If the client included a list of requested parameters in a DHCPDISCOVER
    message, it MUST include that list in all subsequent messages.

    https://tools.ietf.org/html/rfc2131#section-4.3.2
Test Name Synopsis
Verify client uses same Client ID in all subsequent DHCP messages cdrouter_dhcp_41 Verify client uses same Client ID in all subsequent DHCP messages


    step 1. Disable DHCP server
    step 2. Wait for DHCP lease to expire for WAN DHCP client
    step 3. Verify WAN client eventually sends DHCPDISCOVER
    step 4. Record the DHCP ClientID
    step 5. Enable DHCP server
    step 6. Verify WAN client sends DHCPREQUEST
    step 7. Record the DHCP ClientID
    step 8. Verify WAN client sends DHCPREQUEST for renewal
    step 9. Record the DHCP ClientID
    step 10. Verify DHCP ClientID is consistent across DHCP messages


    References:

    IETF RFC 2131 "Dynamic Host Configuration Protocol" Section 2: Protocol Summary

    If the client uses a 'client identifier' in one message, it MUST use that
    same identifier in all subsequent messages, to ensure that all servers
    correctly identify the client.

    If the client does not use the DHCP Client ID option 61, the client ID will
    be the src MAC address.

    https://tools.ietf.org/html/rfc2131#section-2
Test Name Synopsis
Verify client uses a randomized exponential backoff algorithm for DHCPDISCOVER retransmissions cdrouter_dhcp_50 Verify client uses a randomized exponential backoff algorithm for DHCPDISCOVER retransmissions


    step 1. Disable DHCP server
    step 2. Wait for DHCP lease to expire for WAN DHCP client
    step 3. Verify WAN client sends DHCPREQUEST
    step 4. Do not respond to request
    step 5. Verify WAN client eventually sends DHCPDISCOVER
    step 6. Do not respond to discover
    step 7. Verify WAN client continues to retransmit DHCPDISCOVER
            using a randomized exponential backoff algorithm


    References:

    IETF RFC 2131 "Dynamic Host Configuration Protocol" Section 4.1: Constructing and sending DHCP messages

    DHCP clients are responsible for all message retransmission.  The
    client MUST adopt a retransmission strategy that incorporates a
    randomized exponential backoff algorithm to determine the delay
    between retransmissions.  The delay between retransmissions SHOULD be
    chosen to allow sufficient time for replies from the server to be
    delivered based on the characteristics of the internetwork between
    the client and the server.  For example, in a 10Mb/sec Ethernet
    internetwork, the delay before the first retransmission SHOULD be 4
    seconds randomized by the value of a uniform random number chosen
    from the range -1 to +1.  Clients with clocks that provide resolution
    granularity of less than one second may choose a non-integer
    randomization value.  The delay before the next retransmission SHOULD
    be 8 seconds randomized by the value of a uniform number chosen from
    the range -1 to +1.  The retransmission delay SHOULD be doubled with
    subsequent retransmissions up to a maximum of 64 seconds.  The client
    MAY provide an indication of retransmission attempts to the user as
    an indication of the progress of the configuration process.

    https://tools.ietf.org/html/rfc2131#section-4.1
Test Name Synopsis
Verify client uses an exponential backoff algorithm for DHCP Request retransmissions in state RENEW cdrouter_dhcp_51 Verify client uses an exponential backoff algorithm for DHCP Request retransmissions in state RENEW


    step 1. Wait for WAN DHCP client to renew DHCP lease
    step 2. DHCP server sets lease time to 1200 seconds
    step 3. Disable DHCP server
    step 4. Wait for time T1 which is .5 of the lease time
    step 5. Verify WAN client sends unicast DHCPREQUEST at time T1
    step 6. Do not respond to request
    step 7. Wait for 50% of time between T1 & T2
    step 8. Verify WAN client retransmits unicast DHCPREQUEST
    step 9. Repeat steps 7 & 8 until time is less than 60 seconds
    step 10. Wait for time T2 which is 87.5% of lease time
    step 11. Verify WAN client sends broadcast DHCPREQUEST
    step 12. Do not respond to request
    step 13. Wait for 50% of time between T2 and lease expiration
    step 14. Verify WAN client retransmits broadcast DHCPREQUEST
    step 15. Repeat steps 13 & 14 until time is less than 60 seconds
    step 16. Wait for lease to expire
    step 17. Verify WAN client sends DHCPDISCOVER

    NOTE: This test case takes approximately 30 minutes to run succesfully


    References:

    IETF RFC 2131 "Dynamic Host Configuration Protocol" Section 4.4.5: Reacquisition and expiration

    In both RENEWING and REBINDING states, if the client receives no
    response to its DHCPREQUEST message, the client SHOULD wait one-half
    of the remaining time until T2 (in RENEWING state) and one-half of
    the remaining lease time (in REBINDING state), down to a minimum of
    60 seconds, before retransmitting the DHCPREQUEST message.

    https://tools.ietf.org/html/rfc2131#section-4.4.5
Test Name Synopsis
DHCP client obtains lease when server delays responses cdrouter_dhcp_60 DHCP client obtains lease when server delays responses


        step 1. Disable DHCP server
        step 2. Wait for DHCP lease to expire for WAN DHCP client
        step 3. Verify WAN client sends DHCPREQUEST for same IP address
        step 4. Do not respond to request
        step 5. Verify WAN client eventually sends DHCPDISCOVER
        step 6. Do not respond to request
        step 7. Configure DHCP server to delay all responses
        step 8. Verify WAN client sends a second DHCPDISCOVER
        step 9. Verify WAN client can now obtain an IP address

        NOTE: The testvar dhcpServerResponseDelay can be used to
        specify the delay used by CDRouter's DHCP server on the WAN
        for this testcase.

    
Test Name Synopsis
DHCP client is able to rebind to alternate DHCP server cdrouter_dhcp_70 DHCP client is able to rebind to alternate DHCP server


        step 1.  Disable the DHCP server
        step 2.  Wait for the DUT to send a DHCPREQUEST to renew its lease
        step 3.  Ignore the DUT's requests and allow it to enter the REBINDING state
        step 4.  Verify that the DUT is in the REBIND state by checking that it
                 is broadcasting DHCPREQUESTs
        step 5.  Reconfigure the DHCP server to a new IP address and enable it
        step 6.  Allow the DHCP server to respond with an DHCPACK to the client
        step 7.  Send an ARP request to the client
        step 8.  Verify it was able to renew its original address by responding
                 to the ARP request
        step 9.  If a LAN client is configured ping a remote host from a LAN client
        step 10. Verify that traffic is correctly transmitted and the DUT is using
                 the new gateway
        step 11. Wait for another address renew from the DUT
        step 12. Verify the DUT has learned the new DHCP server address
        step 13. Verify that at no point did the DUT fall back into the INIT
                 state and broadcast DISCOVERY messages

        NOTE: steps 9 and 10 are optional and only performed if there
              is a LAN client configured.

    
    References:

    IETF RFC 2131 "Dynamic Host Configuration Protocol" Section 4.3.2: DHCPREQUEST message

    DHCPREQUEST generated during REBINDING state:

    In this situation, the client is completely
    configured, and is trying to extend its lease. This message MUST
    be broadcast to the 0xffffffff IP broadcast address.  The DHCP
    server SHOULD check 'ciaddr' for correctness before replying to
    the DHCPREQUEST.

    The DHCPREQUEST from a REBINDING client is intended to accommodate
    sites that have multiple DHCP servers and a mechanism for
    maintaining consistency among leases managed by multiple servers.
    A DHCP server MAY extend a client's lease only if it has local
    administrative authority to do so.

    https://tools.ietf.org/html/rfc2131#section-4.3.2

pppoe-c.tcl

PPPoE client tests for the WAN side of the router

Test Name Synopsis
PPPoE client restarts PPPoE Discovery when PPP LCP Echo-Requests fail cdrouter_pppoe_client_1 PPPoE client restarts PPPoE Discovery when PPP LCP Echo-Requests fail


    step 1. Turn off PPP LCP Echo-Reply on PPPoE server
    step 2. PPP client should send an LCP Echo-Request
    step 3. PPP client will not receive an LCP Echo-Reply
    step 4. Verify WAN PPPoE client sends PADI to restart PPPoE Discovery
            (wait up to 5 minutes for LCP to failover)
    step 5. Verify PPPoE client brings new PPPoE session up

    NOTE: Most PPPoE clients will terminate the existing PPPoE session after
    several LCP Echo-Requests have failed. However, some routers will
    simply initiate a new PPPoE session without sending a PADT. This
    test case does not FAIL the test if the existing PPPoE session is not
    terminated before starting a new PPPoE session. However, a warning
    will be issued.

    NOTE: The amount of time the test waits to recover the PPP based
    link can be configured by adjusting the testvar pppRestartTimeout.
    This variable contains the number of milliseconds to wait for
    PPP based protocols to recover. The default is 300000 (300 seconds).

    NOTE: By default, CDRouter will still respond to ICMP Echo
    Requests during this test. This allows the test to verify failure
    occurs because of PPP and not the ICMP Echo Replies. However, you
    can configure CDRouter to also ignore ICMP Echo Requests during
    this test by setting the testvar pppFailUsesICMP to yes.
Test Name Synopsis
PPPoE client restarts PPPoE Discovery when PPP LCP terminates PPP link cdrouter_pppoe_client_10 PPPoE client restarts PPPoE Discovery when PPP LCP terminates PPP link


    step 1. Check the current PPPoE session is established
    step 2. Terminate the current PPP session using LCP Terminate
    step 3. Verify WAN PPPoE client sends PADI to restart PPPoE Discovery
    step 4. Verify PPPoE client brings new PPPoE session up

    NOTE: The amount of time the test waits to recover the PPP based
    link can be configured by adjusting the testvar pppRestartTimeout.
    This variable contains the number of milliseconds to wait for
    PPP based protocols to recover. The default is 300000 (300 seconds).
Test Name Synopsis
PPPoE PPP client replies to LCP Echo-Requests cdrouter_pppoe_client_50 PPPoE PPP client replies to LCP Echo-Requests


    step 1. Send 5 LCP Echo-Requests
    step 2. Verify LCP Echo-Replies are received
    step 3. Verify LCP Echo-Request data is echoed back in response
Test Name Synopsis
PPPoE PPP client maintains LCP Magic Number during session cdrouter_pppoe_client_60 PPPoE PPP client maintains LCP Magic Number during session


    step 1. Terminate the current PPP session using LCP Terminate
    step 2. Check for Magic Number in LCP Configure Request
    step 3. Wait for LCP Echo Request and verify Magic Number is the same
    step 4. Send LCP Echo Request
    step 5. Verify Magic Number in LCP Echo Response is the same

    NOTE: CDRouter does not fail this test if the PPPoE PPP client
    does not send an LCP Echo Request. Some clients do not
    use LCP Echo Requests automtically.


    References:

    IETF RFC 1548 "The Point-to-Point Protocol (PPP)" Section 5.8: Echo-Request and Echo-Reply

    https://tools.ietf.org/html/rfc1548#section-5.8
Test Name Synopsis
PPPoE/PPP restarts if PPP authentication fails cdrouter_pppoe_client_200 PPPoE/PPP restarts if PPP authentication fails


    step 1. Terminate the current PPP session using LCP Terminate
    step 2. Verify WAN PPPoE client sends PADI to restart PPPoE Discovery
    step 3. Verify PPPoE client brings new PPPoE session up
    step 4. Reject any PAP or CHAP authentication attempts
    step 5. Wait 60 seconds, continuing to reject PPP authentication
    step 6. Accept PPP authentication after 60 seconds
    step 7. Send pings from LAN side to WAN side to force link to reestablish
    step 8. Verify PPP link is reestablished in 300 seconds (pppRestartTimeout)

    NOTE: This test supports PAP, CHAP, and MSCHAP authentication.

    NOTE: The amount of time the test waits to recover the PPP based
    link can be configured by adjusting the testvar pppRestartTimeout.
    This variable contains the number of milliseconds to wait for
    PPP based protocols to recover. The default is 300000 (300 seconds).
Test Name Synopsis
PPPoE/PPP can recover if LCP renegotiation is attempted cdrouter_pppoe_client_210 PPPoE/PPP can recover if LCP renegotiation is attempted


    step 1. Send LCP Configure-Request to PPP peer
    step 2. Verify peer resends LCP configuration
    step 3. Verify the configuration is the same
    step 4. If the PPPoE link is terminated, issue ping to reestablish link
    step 5. Verify ping succeeds from LAN to WAN

    NOTE: Renegotiating LCP can cause some PPP implementations to terminate
    the PPP link or the PPPoE link. This test does not fail the DUT if this
    happens, but it does issue a warning if the PPPoE session is restarted.

    NOTE: The amount of time the test waits to recover the PPP based
    link can be configured by adjusting the testvar pppRestartTimeout.
    This variable contains the number of milliseconds to wait for
    PPP based protocols to recover. The default is 300000 (300 seconds).
Test Name Synopsis
PPPoE/PPP can recover if LCP Echo-Request contains bad length cdrouter_pppoe_client_230 PPPoE/PPP can recover if LCP Echo-Request contains bad length


    step 1. Send out LCP Echo-Request with length 4096, but no data
    step 2. Peer may respond or drop LCP Echo-Request
    step 3. Verify PPP is still functioning using ICMP Echo

    NOTE: This test checks that the device under test behaves gracefully
    when it receives PPP options with a bad length. Some devices may
    still respond to the LCP Echo-Request, but it is not considered a failure if
    the device does not respond.
Test Name Synopsis
PPPoE client recovers if PPPoE server drops PADR from PPPoE client cdrouter_pppoe_client_300 PPPoE client recovers if PPPoE server drops PADR from PPPoE client


    step 1. Terminate the current PPP session using LCP Terminate
    step 2. Verify WAN PPPoE client sends PADI to restart PPPoE Discovery
    step 3. Do not respond to the PADR packet from client
    step 4. Continue to ignore any PPPoE packets from the client until
            the client sends a new PADI packet
    step 5. Restore PPPoE server to normal operation
    step 6. Verify PPPoE client session recovers

    NOTE: The amount of time the test waits to recover the PPP based
    link can be configured by adjusting the testvar pppRestartTimeout.
    This variable contains the number of milliseconds to wait for
    PPP based protocols to recover. The default is 300000 (300 seconds).


    References:

    IETF RFC 2516 "A Method for Transmitting PPP Over Ethernet (PPPoE)" Section 8: Other Considerations

    If the Host is waiting to receive a PADS packet, a similar timeout
    mechanism SHOULD be used, with the Host re-sending the PADR.  After
    a specified number of retries, the Host SHOULD then resend a PADI
    packet.

    https://tools.ietf.org/html/rfc2516#section-8
Test Name Synopsis
PPPoE client returns AC-Cookie in PADR when server sends AC-Cookie in PADO cdrouter_pppoe_client_310 PPPoE client returns AC-Cookie in PADR when server sends AC-Cookie in PADO


    step 1. Configure PPPoE server to use AC-Cookie Tag in PADO responses
    step 2. Terminate the current PPP session using LCP Terminate
    step 3. Verify WAN PPPoE client sends PADI to restart PPPoE Discovery
    step 4. Send AC-Cookie Tag in PADO
    step 5. Verify PADR from client contains AC-Cookie with the same cookie data


    References:

    IETF RFC 2516 "A Method for Transmitting PPP Over Ethernet (PPPoE)" Section A: AC-Cookie

    If a Host receives this TAG, it MUST return the TAG
    unmodified in the following PADR.

    https://tools.ietf.org/html/rfc2516
Test Name Synopsis
PPPoE client maintains Relay-Session-Id during PPPoE session establishment cdrouter_pppoe_client_320 PPPoE client maintains Relay-Session-Id during PPPoE session establishment


    step 1. Configure PPPoE server to use Relay-Session-Id in PADO responses
    step 2. Terminate the current PPP session using LCP Terminate
    step 3. Verify WAN PPPoE client sends PADI to restart PPPoE Discovery
    step 4. If the PADI already contains a Relay-Session-Id from an actual
            PPPoE Relay server, configure the PPPoE server to use the same
            tag value
    step 5. Send Relay-Session-Id Tag in PADO
    step 6. Verify PADR from client contains Relay-Session-Id tag with the same cookie data

    NOTE: Normally, CDRouter does not expect a PPPoE relay server to be present
    between the PPPoE client and CDRouter. However, this test does check for
    an existing Relay-Session-Id in the PADI and will use this tag value
    for the test instead of generating a unique value. This allows the test
    to work with an existing PPPoE relay server on the WAN.


    References:

    IETF RFC 2516 "A Method for Transmitting PPP Over Ethernet (PPPoE)" Section A: Relay-Session-Id

    If either the Host or Access Concentrator receives this TAG they
    MUST include it unmodified in any discovery packet they send as a response.

    https://tools.ietf.org/html/rfc2516
Test Name Synopsis
PPPoE client sends PADT packet after idle timeout elapses cdrouter_pppoe_client_330 PPPoE client sends PADT packet after idle timeout elapses


    step 1. Ping from LAN to WAN to refresh idle timeout
    step 2. Disable LAN client to prevent LAN to WAN traffic
    step 3. Verify PPPoE client sends PADT packet after a configured
            period of inactivity

    NOTE: The amount of time the test waits to for the PADT packet can
    be configured by adjusting the testvar pppoeIdleTimeout.  This
    variable contains the number of seconds to wait for PPPoE
    connections to timeout when idling. The default is 60 seconds.

    NOTE: This test is skipped if the testvar pppoeConnectOnDemand is
    set to no.
Test Name Synopsis
Verify PPPoE client sends correct PPP-Max-Payload tag in PADI packets cdrouter_pppoe_client_400 Verify PPPoE client sends correct PPP-Max-Payload tag in PADI packets


    step 1. Turn off PPP LCP Echo-Reply on PPPoE server
    step 2. PPP client should send an LCP Echo-Request
    step 3. PPP client will not receive an LCP Echo-Reply
    step 4. Verify WAN PPPoE client sends PADI to restart PPPoE Discovery
            (wait up to 5 minutes for LCP to failover)
    step 5. Verify the PADI contains a PPP-Max-Payload tag whose value
            matches that of the testvar pppoeMaxPayload.
    step 6. Verify PPPoE client brings new PPPoE session up


    References:

    IETF RFC 4638 "Accommodating a Maximum Transit Unit/Maximum Receive Unit (MTU/MRU) Greater Than 1492 in the Point-to-Point Protocol over Ethernet (PPPoE)"

    https://tools.ietf.org/html/rfc4638

pptp-c.tcl

PPTP client tests for the WAN side of the router

Test Name Synopsis
PPTP client restarts PPTP connection when PPTP Echo Requests fail cdrouter_pptp_5 PPTP client restarts PPTP connection when PPTP Echo Requests fail


    step 1. Turn off PPTP Echo Replies on PPTP server
    step 2. Verify WAN PPTP client closes PPTP TCP connection
            (wait up to 5 minutes for PPTP to failover)
    step 3. Continue to send data from LAN to WAN to initiate new connection
    step 4. Verify PPTP client establishes new PPTP control session
    step 5. Verify PPTP client establishes new PPTP outbound call session
    step 6. Verify LAN side can reach WAN using new PPTP call id

    NOTE: By default, CDRouter will still respond to ICMP Echo
    Requests during this test. This allows the test to verify failure
    occures because of PPP and not the ICMP Echo Replies. However, you
    can configure CDRouter to also ignore ICMP Echo Requests during
    this test by setting the testvar pppFailUsesICMP to yes:


    References:

    IETF RFC 2637 "Point-to-Point Tunneling Protocol (PPTP)" Section 3.1.4: Keep Alives and Timers

    https://tools.ietf.org/html/rfc2637#section-3.1.4
Test Name Synopsis
PPTP client restarts PPTP connection when PPP LCP terminates PPP link cdrouter_pptp_10 PPTP client restarts PPTP connection when PPP LCP terminates PPP link


    step 1. Terminate the current PPP session using LCP Terminate
    step 2. Verify WAN PPTP client closes PPTP TCP session
    step 3. Continue to send data from LAN to WAN to initiate new connection
    step 4. Verify PPTP client establishes new PPTP control session
    step 5. Verify PPTP client establishes new PPTP outbound call session
    step 6. Verify LAN side can reach WAN using new PPTP call id


    References:

    IETF RFC 2637 "Point-to-Point Tunneling Protocol (PPTP)"

    https://tools.ietf.org/html/rfc2637
Test Name Synopsis
PPTP client restarts PPTP connection when TCP control session is closed cdrouter_pptp_20 PPTP client restarts PPTP connection when TCP control session is closed


    step 1. Initiate TCP close on PPTP control session by sending TCP FIN
    step 2. Verify WAN PPTP client closes PPTP TCP connection
    step 3. Continue to send data from LAN to WAN to initiate new connection
    step 4. Verify PPTP client establishes new PPTP control session
    step 5. Verify PPTP client establishes new PPTP outbound call session
    step 6. Verify LAN side can reach WAN using new PPTP call id

    NOTE: The behavior of the router when the PPTP TCP control session is
    lost is not well defined by RFC 2637. On some implementations, this
    causes the PPTP client to restart its control session. In the worst
    case, the PPTP client should detect a dead connection through PPTP
    Echo Request failires. At this point, the PPTP control session should
    be restarted.


    References:

    IETF RFC 2637 "Point-to-Point Tunneling Protocol (PPTP)" Section 3.1.4: Keep Alives and Timers

    https://tools.ietf.org/html/rfc2637#section-3.1.4
Test Name Synopsis
PPTP client restarts PPTP connection when TCP control session is reset cdrouter_pptp_25 PPTP client restarts PPTP connection when TCP control session is reset


    step 1. Send TCP RST for PPTP control session
    step 2. Continue to send data from LAN to WAN to initiate new connection
    step 3. Verify PPTP client establishes new PPTP control session
    step 4. Verify PPTP client establishes new PPTP outbound call session
    step 5. Verify LAN side can reach WAN using new PPTP call id

    NOTE: The behavior of the router when the PPTP TCP control session is
    lost is not well defined by RFC 2637. On some implementations, this
    causes the PPTP client to restart its control session. In the worst
    case, the PPTP client should detect a dead connection through PPTP
    Echo Request failires. At this point, the PPTP control session should
    be restarted.


    References:

    IETF RFC 2637 "Point-to-Point Tunneling Protocol (PPTP)" Section 3.1.4: Keep Alives and Timers

    https://tools.ietf.org/html/rfc2637#section-3.1.4
Test Name Synopsis
PPTP client initiates new call after a PPTP Call-Disconnect-Notify cdrouter_pptp_30 PPTP client initiates new call after a PPTP Call-Disconnect-Notify


    step 1. Send PPTP Call-Disconnect-Notify for existing Call ID
    step 2. Continue to send data from LAN to WAN to initiate new call
    step 3. Verify PPTP client establishes new PPTP outbound call
    step 4. Verify LAN side can reach WAN using new PPTP call id

    NOTE: Some implementations may close the PPTP control session if
    the PPTP call is disconnected. This test does not consider this a
    failure as long as a valid PPTP outbound call is reestablished.


    References:

    IETF RFC 2637 "Point-to-Point Tunneling Protocol (PPTP)"

    https://tools.ietf.org/html/rfc2637
Test Name Synopsis
PPTP PPP client replies to LCP Echo Requests cdrouter_pptp_50 PPTP PPP client replies to LCP Echo Requests


    step 1. Send 5 LCP Echo Requests
    step 2. Verify LCP Echo Replies are received
    step 3. Verify LCP Echo Request data is echoed back in response
Test Name Synopsis
PPTP PPP client maintains LCP Magic Number during session cdrouter_pptp_60 PPTP PPP client maintains LCP Magic Number during session


    step 1. Terminate the current PPP session using LCP Terminate
    step 2. Check for Magic Number in LCP Configure Request
    step 3. Wait for LCP Echo Request and verify Magic Number is the same
    step 4. Send LCP Echo Request
    step 5. Verify Magic Number in LCP Echo Response is the same

    RFC 1548 The Point-to-Point Protocol
    5.8 Echo-Request and Echo-Reply

    NOTE: CDRouter does not fail this test if the PPTP PPP client
    does not send an LCP Echo Request. Some clients do not
    use LCP Echo Requests automtically.
Test Name Synopsis
PPTP/PPP restarts if PPP authentication fails cdrouter_pptp_200 PPTP/PPP restarts if PPP authentication fails


    step 1. Terminate the current PPP session using LCP Terminate
    step 2. Verify PPTP client closes current PPTP control session
    step 3. Continue to send data from LAN to WAN
    step 4. Reject any PAP or CHAP authentication attempts
    step 5. Wait 60 seconds, continuing to reject PPP authentication
    step 6. Accept PPP authentication after 60 seconds
    step 7. Verify PPP link is reestablished in 120 seconds

    Note: This test supports PAP and CHAP authentication.
Test Name Synopsis
PPTP/PPP can recover if LCP renegotiation is attempted cdrouter_pptp_210 PPTP/PPP can recover if LCP renegotiation is attempted


    step 1. Send out LCP Configure-Request to PPP peer
    step 2. Verify peer resends LCP configuration
    step 3. Verify the configuration is the same
    step 4. Verify ping succeeds from LAN to WAN

    NOTE: Renegotiating LCP has can cause some PPP implementations to terminate
    the PPP link or the PPTP link. This test does not fail the DUT if this
    happens, but it does issue a warning if the PPTP session is restarted.
Test Name Synopsis
PPTP/PPP can recover if LCP Echo Request contains bad length cdrouter_pptp_230 PPTP/PPP can recover if LCP Echo Request contains bad length


    step 1. Send LCP Echo Request with length 4096, but no data
    step 2. Peer may respond or drop LCP Echo Request
    step 3. Verify PPP is still functioning using ICMP echo

    NOTE: This test checks that the device under test behaves gracefully
    when it receives PPP options with a bad length. Some devices may
    still respond to the LCP Echo Request, but its not considered a failure if
    the device does not respond.

l2tp-c.tcl

L2TP client tests for WAN side of the router

Test Name Synopsis
L2TP client restarts L2TP connection when L2TP Hello Requests are unanswered cdrouter_l2tp_5 L2TP client restarts L2TP connection when L2TP Hello Requests are unanswered


    step 1. Turn off L2TP Hello Replies on L2TP server
    step 2. Halt traffic on the L2TP tunnel
    step 3. Verify the L2TP client sends L2TP Hello Requests to the server
    step 4. Verify WAN L2TP client closes L2TP tunnel
    step 5. Continue to send data from LAN to WAN to initiate new connection
    step 6. Verify L2TP client establishes new L2TP session
    step 7. Verify LAN side can reach WAN using new L2TP session


    References:

    IETF RFC 2661 "Layer Two Tunneling Protocol "L2TP""

    https://tools.ietf.org/html/rfc2661
Test Name Synopsis
L2TP client restarts L2TP connection when PPP LCP terminates PPP link cdrouter_l2tp_10 L2TP client restarts L2TP connection when PPP LCP terminates PPP link


    step 1. Terminate the current PPP session using LCP Terminate
    step 2. Verify WAN L2TP client closes L2TP TCP session
    step 3. Continue to send data from LAN to WAN to initiate new connection
    step 4. Verify L2TP client establishes new L2TP session
    step 5. Verify LAN side can reach WAN using new L2TP call id


    References:

    IETF RFC 2661 "Layer Two Tunneling Protocol "L2TP""

    https://tools.ietf.org/html/rfc2661
Test Name Synopsis
L2TP client initiates new L2TP connection after closing tunnel with StopCCN cdrouter_l2tp_20 L2TP client initiates new L2TP connection after closing tunnel with StopCCN


    step 1.  Send the StopCCN command to close the active L2TP tunnel
    step 2.  Continue to send data from the LAN to WAN to initiate a new tunnel
    step 3.  Verify L2TP client establishes a new L2TP tunnel
    step 4.  Verify LAN side can reach WAN using new L2TP tunnel


    References:

    IETF RFC 2661 "Layer Two Tunneling Protocol "L2TP""

    https://tools.ietf.org/html/rfc2661
Test Name Synopsis
L2TP client initiates new L2TP tunnel after receiving CDN and StopCCN cdrouter_l2tp_30 L2TP client initiates new L2TP tunnel after receiving CDN and StopCCN


    step 1. Send Call-Disconnect-Notify for the L2TP session
    step 2. Send StopCCN for L2TP tunnel
    step 3. Continue to send data from LAN to WAN to initiate new tunnel
    step 4. Verify L2TP client establishes new L2TP tunnel
    step 5. Verify LAN side can reach WAN using new L2TP tunnel


    References:

    IETF RFC 2661 "Layer Two Tunneling Protocol "L2TP""

    https://tools.ietf.org/html/rfc2661
Test Name Synopsis
L2TP client sends HELLO after period of inactivity cdrouter_l2tp_40 L2TP client sends HELLO after period of inactivity


    step 1. Stop PPP from passing traffic to the WAN
    step 2. Continue to send data from LAN to WAN
    step 3. Verify L2TP sends HELLO message to L2TP server
    step 4. Respond to HELLO
    step 5. Reestablish PPP traffic from WAN
    step 6. Verify LAN-WAN communication resumes


    References:

    IETF RFC 2661 "Layer Two Tunneling Protocol "L2TP""

    https://tools.ietf.org/html/rfc2661
Test Name Synopsis
L2TP PPP client replies to LCP Echo Requests cdrouter_l2tp_50 L2TP PPP client replies to LCP Echo Requests


    step 1. Send 5 LCP Echo Requests
    step 2. Verify LCP Echo Replies are received
    step 3. Verify LCP Echo Request data is echoed back in reply


    References:

    IETF RFC 2661 "Layer Two Tunneling Protocol "L2TP""

    https://tools.ietf.org/html/rfc2661
Test Name Synopsis
L2TP PPP client maintains LCP Magic Number during session cdrouter_l2tp_60 L2TP PPP client maintains LCP Magic Number during session


    step 1. Terminate the current PPP session using LCP Terminate
    step 2. Check for Magic Number in LCP Configure Request
    step 3. Wait for LCP Echo Request and verify Magic Number is the same
    step 4. Send LCP Echo Request
    step 5. Verify Magic Number in LCP Echo Response is the same

    RFC 1548 The Point-to-Point Protocol
    5.8 Echo-Request and Echo-Reply

    NOTE: CDRouter does not fail this test if the L2TP PPP client
    does not send an LCP Echo Request. Some clients do not
    use LCP Echo Requests automatically.

    References:

    IETF RFC 2661 "Layer Two Tunneling Protocol "L2TP""

    https://tools.ietf.org/html/rfc2661
Test Name Synopsis
L2TP/PPP restarts if PPP authentication fails cdrouter_l2tp_200 L2TP/PPP restarts if PPP authentication fails


    step 1. Terminate the current PPP session using LCP Terminate
    step 2. Verify L2TP client closes current L2TP control session
    step 3. Continue to send data from LAN to WAN
    step 4. Reject any PAP or CHAP authentication attempts
    step 5. Wait 60 seconds, continuing to reject PPP authentication
    step 6. Accept PPP authentication after 60 seconds
    step 7. Verify PPP link is reestablished in 120 seconds

    Note: This test supports PAP and CHAP authentication.


    References:

    IETF RFC 2661 "Layer Two Tunneling Protocol "L2TP""

    https://tools.ietf.org/html/rfc2661
Test Name Synopsis
L2TP/PPP can recover if LCP renegotiation is attempted cdrouter_l2tp_210 L2TP/PPP can recover if LCP renegotiation is attempted


    step 1. Send LCP config request to PPP peer
    step 2. Verify peer resends LCP configuration
    step 3. Verify the configuration is the same
    step 4. Verify ping succeeds from LAN to WAN

    NOTE: Renegotiating LCP has can cause some PPP implementations to terminate
    the PPP link or the L2TP link. This test does not fail the DUT if this
    happens, but it does issue a warning if the L2TP session is restarted.


    References:

    IETF RFC 2661 "Layer Two Tunneling Protocol "L2TP""

    https://tools.ietf.org/html/rfc2661
Test Name Synopsis
L2TP/PPP can recover if LCP Echo Request contains bad length cdrouter_l2tp_230 L2TP/PPP can recover if LCP Echo Request contains bad length


    step 1. Send LCP Echo Request with length 4096, but no data
    step 2. Peer may respond or drop LCP Echo Request
    step 3. Verify PPP is still functioning using ICMP Echo Request

    NOTE: This test checks that the device under test behaves gracefully
    when it receives PPP options with a bad length. Some devices may
    still respond to the LCP Echo Request, but its not considered a failure if
    the device does not respond.


    References:

    IETF RFC 2661 "Layer Two Tunneling Protocol "L2TP""

    https://tools.ietf.org/html/rfc2661

chap.tcl

PPP CHAP tests for PPP based protocols on the WAN (PPPoE and PPTP)

Test Name Synopsis
PPP CHAP authentication with various size key lengths cdrouter_chap_10 PPP CHAP authentication with various size key lengths


    step 1. Terminate the current PPP session using LCP Terminate
    step 2. Set the new CHAP secret length to a new value (24 37 78 112 255)
    step 3. Verify PPPoE, PPTP, or L2TP client restarts the link
    step 4. Once LCP is up, send a new CHAP Challenge to peer
    step 5. Verify correct CHAP Response is received
    step 6. Repeat for each key length generating a new secret each time


    References:

    IETF RFC 1994 "PPP Challenge Handshake Authentication Protocol (CHAP)"

    https://tools.ietf.org/html/rfc1994
Test Name Synopsis
Verify PPP client will reauthenticate using CHAP during active connection cdrouter_chap_20 Verify PPP client will reauthenticate using CHAP during active connection


    step 1. Send CHAP Challenge to PPP client
    step 2. Verify CHAP Response is received in 10 seconds
    step 3. Repeat for 30 CHAP Challenges will link remains active


    References:

    IETF RFC 1994 "PPP Challenge Handshake Authentication Protocol (CHAP)"

    https://tools.ietf.org/html/rfc1994

dhcp-s.tcl

DHCP server tests for the LAN side of the router

Test Name Synopsis
Verify DHCP server returns same IP address when client renews cdrouter_dhcp_server_1 Verify DHCP server returns same IP address when client renews


    step 1. Send a DHCPREQUEST for the current IP address
    step 2. Verify DHCP server sends DHCPACK


    References:

    IETF RFC 2131 "Dynamic Host Configuration Protocol" Section 4.3.2: DHCPREQUEST message

    https://tools.ietf.org/html/rfc2131#section-4.3.2
Test Name Synopsis
Verify DHCP server rejects DHCPREQUESTS with non-offered IP address cdrouter_dhcp_server_2 Verify DHCP server rejects DHCPREQUESTS with non-offered IP address


    step 1. Send DHCPRELEASE to release DHCP client address on LAN
    step 2. Configure DHCP client on LAN to include invalid 'Requested IP
            Address' option
    step 3. Restart DHCP client on LAN
    step 4. Wait for DHCPOFFER from DHCP server and send DHCPREQUEST with
            invalid 'Requested IP Address' option configured in step 2
    step 5. Verify DHCP server sends DHCPNAK
    step 6. Restore original behavior
    step 7. Restart DHCP client on LAN and verify that client receives a
            valid address


    References:

    IETF RFC 2131 "Dynamic Host Configuration Protocol" Section 3.5: Client parameters in DHCP

    https://tools.ietf.org/html/rfc2131#section-3.5

    IETF RFC 2131 "Dynamic Host Configuration Protocol" Section 4.3.2: DHCPREQUEST message

    https://tools.ietf.org/html/rfc2131#section-4.3.2
Test Name Synopsis
Verify DHCP server address reservations cdrouter_dhcp_server_3 Verify DHCP server address reservations


    step 1. Build a list of DHCP address reservations
    step 2. Start new DHCP client on LAN interface using reserved client MAC
    step 3. Verify DHCP client obtains expected reserved IP address
    step 4. Repeat for each DHCP address reservation identified in step 1

    NOTE: Many DHCP server implementations allow addresses within the DHCP pool
    to be reserved for specific clients based on the client's MAC address. This
    test verifies that the DHCP server honors any configured client MAC to IP
    address reservations as defined by the testvars 'dhcpClientReservedIp'
    and 'dhcpClientReservedMac'.

    Example for two reserved addresses:

    testvar dhcpClientReservedIp1   192.168.1.10
    testvar dhcpClientReservedMac1  00:11:22:33:33:44

    testvar dhcpClientReservedIp2   192.168.1.15
    testvar dhcpClientReservedMac2  00:11:22:33:33:55
Test Name Synopsis
Verify DHCP server returns IP address within configured pool cdrouter_dhcp_server_4 Verify DHCP server returns IP address within configured pool


    step 1. Send DHCPRELEASE to release DHCP client address on LAN
    step 2. Restart DHCP client on LAN
    step 3. Verify DHCP client receives an address from within the configured
            DHCP pool

    Note: The DHCP pool is configured using the testvars dhcpClientStart and
    dhcpClientEnd. These testvars must match the DHCP pool settings on the
    DUT.


    References:

    IETF RFC 2131 "Dynamic Host Configuration Protocol"

    https://tools.ietf.org/html/rfc2131
Test Name Synopsis
Verify DHCP server returns IP address with expected lease time cdrouter_dhcp_server_5 Verify DHCP server returns IP address with expected lease time


    step 1. Send DHCPRELEASE to release DHCP client address on LAN
    step 2. Restart DHCP client on LAN
    step 3. Verify DHCP client receives an address with the expected lease time

    Note: The expected DHCP lease time is configured using the testvar
    dhcpClientLeaseTime. This testvar should match the value configured on the
    DUT's DHCP server.


    References:

    IETF RFC 2131 "Dynamic Host Configuration Protocol"

    https://tools.ietf.org/html/rfc2131
Test Name Synopsis
Verify DHCP server returns same IP address when client restarts cdrouter_dhcp_server_6 Verify DHCP server returns same IP address when client restarts


    step 1. Send DHCPDISCOVER to restart DHCP client on LAN
    step 2. Verify DHCP client receives the same IP address


    References:

    IETF RFC 2131 "Dynamic Host Configuration Protocol" Section 4.3.1: DHCPDISCOVER message

    When a server receives a DHCPDISCOVER message from a client, the
    server chooses a network address for the requesting client.  If no
    address is available, the server may choose to report the problem to
    the system administrator. If an address is available, the new address
    SHOULD be chosen as follows:

      * The client's current address as recorded in the client's current
        binding, ELSE

      * The client's previous address as recorded in the client's (now
        expired or released) binding, if that address is in the server's
        pool of available addresses and not already allocated, ELSE

      * The address requested in the 'Requested IP Address' option, if that
        address is valid and not already allocated, ELSE

      * A new address allocated from the server's pool of available
        addresses; the address is selected based on the subnet from which
        the message was received (if 'giaddr' is 0) or on the address of
        the relay agent that forwarded the message ('giaddr' when not 0).

    https://tools.ietf.org/html/rfc2131#section-4.3.1
Test Name Synopsis
Verify DHCP server returns same IP address when client releases then restarts cdrouter_dhcp_server_7 Verify DHCP server returns same IP address when client releases then restarts


    step 1. Send DHCPRELEASE to release DHCP client address on LAN
    step 2. Send DHCPDISCOVER to restart DHCP client on LAN
    step 3. Verify DHCP client receives the same IP address


    References:

    IETF RFC 2131 "Dynamic Host Configuration Protocol" Section 4.3.1: DHCPDISCOVER message

    When a server receives a DHCPDISCOVER message from a client, the
    server chooses a network address for the requesting client.  If no
    address is available, the server may choose to report the problem to
    the system administrator. If an address is available, the new address
    SHOULD be chosen as follows:

      * The client's current address as recorded in the client's current
        binding, ELSE

      * The client's previous address as recorded in the client's (now
        expired or released) binding, if that address is in the server's
        pool of available addresses and not already allocated, ELSE

      * The address requested in the 'Requested IP Address' option, if that
        address is valid and not already allocated, ELSE

      * A new address allocated from the server's pool of available
        addresses; the address is selected based on the subnet from which
        the message was received (if 'giaddr' is 0) or on the address of
        the relay agent that forwarded the message ('giaddr' when not 0).

    https://tools.ietf.org/html/rfc2131#section-4.3.1
Test Name Synopsis
Verify DHCP server returns same IP address when client restarts using Requested IP Address option cdrouter_dhcp_server_8 Verify DHCP server returns same IP address when client restarts using Requested IP Address option


    step 1. Configure DHCP client to use Requested IP Address option (DHCP
            option 50) with current IP address as value
    step 2. Send DHCPDISCOVER to restart DHCP client on LAN
    step 3. Verify DHCP client receives the same IP address


    References:

    IETF RFC 2131 "Dynamic Host Configuration Protocol" Section 4.3.1: DHCPDISCOVER message

    When a server receives a DHCPDISCOVER message from a client, the
    server chooses a network address for the requesting client.  If no
    address is available, the server may choose to report the problem to
    the system administrator. If an address is available, the new address
    SHOULD be chosen as follows:

      * The client's current address as recorded in the client's current
        binding, ELSE

      * The client's previous address as recorded in the client's (now
        expired or released) binding, if that address is in the server's
        pool of available addresses and not already allocated, ELSE

      * The address requested in the 'Requested IP Address' option, if that
        address is valid and not already allocated, ELSE

      * A new address allocated from the server's pool of available
        addresses; the address is selected based on the subnet from which
        the message was received (if 'giaddr' is 0) or on the address of
        the relay agent that forwarded the message ('giaddr' when not 0).

    https://tools.ietf.org/html/rfc2131#section-4.3.1
Test Name Synopsis
Verify DHCP server returns same IP address when client releases and restarts using Requested IP Address option cdrouter_dhcp_server_9 Verify DHCP server returns same IP address when client releases and restarts using Requested IP Address option


    step 1. Configure DHCP client to use Requested IP Address option (DHCP
            option 50) with current IP address as value
    step 2. Send DHCPRELEASE to release DHCP client address on LAN
    step 3. Send DHCPDISCOVER to restart DHCP client on LAN using Requested IP
            Address option in DHCPDISCOVER
    step 4. Verify DHCP client receives the same IP address


    References:

    IETF RFC 2131 "Dynamic Host Configuration Protocol" Section 4.3.1: DHCPDISCOVER message

    When a server receives a DHCPDISCOVER message from a client, the
    server chooses a network address for the requesting client.  If no
    address is available, the server may choose to report the problem to
    the system administrator. If an address is available, the new address
    SHOULD be chosen as follows:

      * The client's current address as recorded in the client's current
        binding, ELSE

      * The client's previous address as recorded in the client's (now
        expired or released) binding, if that address is in the server's
        pool of available addresses and not already allocated, ELSE

      * The address requested in the 'Requested IP Address' option, if that
        address is valid and not already allocated, ELSE

      * A new address allocated from the server's pool of available
        addresses; the address is selected based on the subnet from which
        the message was received (if 'giaddr' is 0) or on the address of
        the relay agent that forwarded the message ('giaddr' when not 0).

    https://tools.ietf.org/html/rfc2131#section-4.3.1
Test Name Synopsis
Verify DHCP server returns requested IP address when new client uses Requested IP Address option cdrouter_dhcp_server_10 Verify DHCP server returns requested IP address when new client uses Requested IP Address option


    step 1. Create a new host with a unique MAC address on the LAN
    step 2. Configure new host to use Requested IP Address option (DHCP option
            50) with a valid, unallocated address from within the configured LAN
            DHCP pool
    step 3. Start DHCP client on new host
    step 4. Verify DHCP client receives the address included in the Requested
            IP Address option


    References:

    IETF RFC 2131 "Dynamic Host Configuration Protocol" Section 4.3.1: DHCPDISCOVER message

    When a server receives a DHCPDISCOVER message from a client, the
    server chooses a network address for the requesting client.  If no
    address is available, the server may choose to report the problem to
    the system administrator. If an address is available, the new address
    SHOULD be chosen as follows:

      * The client's current address as recorded in the client's current
        binding, ELSE

      * The client's previous address as recorded in the client's (now
        expired or released) binding, if that address is in the server's
        pool of available addresses and not already allocated, ELSE

      * The address requested in the 'Requested IP Address' option, if that
        address is valid and not already allocated, ELSE

      * A new address allocated from the server's pool of available
        addresses; the address is selected based on the subnet from which
        the message was received (if 'giaddr' is 0) or on the address of
        the relay agent that forwarded the message ('giaddr' when not 0).

    https://tools.ietf.org/html/rfc2131#section-4.3.1
Test Name Synopsis
Verify DHCP server does not return an address when invalid Requested IP Address option is used cdrouter_dhcp_server_11 Verify DHCP server does not return an address when invalid Requested IP Address option is used


    step 1. Create a new host with a unique MAC address on the LAN
    step 2. Configure new host to use Requested IP Address option (DHCP option
            50) with the IP address of the existing LAN interface
    step 3. Start DHCP client on new host
    step 4. Verify DHCP client does not receive the address included in the
            Requested IP Address option since it has already been allocated


    References:

    IETF RFC 2131 "Dynamic Host Configuration Protocol" Section 4.3.1: DHCPDISCOVER message

    When a server receives a DHCPDISCOVER message from a client, the
    server chooses a network address for the requesting client.  If no
    address is available, the server may choose to report the problem to
    the system administrator. If an address is available, the new address
    SHOULD be chosen as follows:

      * The client's current address as recorded in the client's current
        binding, ELSE

      * The client's previous address as recorded in the client's (now
        expired or released) binding, if that address is in the server's
        pool of available addresses and not already allocated, ELSE

      * The address requested in the 'Requested IP Address' option, if that
        address is valid and not already allocated, ELSE

      * A new address allocated from the server's pool of available
        addresses; the address is selected based on the subnet from which
        the message was received (if 'giaddr' is 0) or on the address of
        the relay agent that forwarded the message ('giaddr' when not 0).

    https://tools.ietf.org/html/rfc2131#section-4.3.1
Test Name Synopsis
DHCP server includes vendor defined options cdrouter_dhcp_server_30 DHCP server includes vendor defined options


    step 1. Send DHCPRELEASE to release DHCP client address on LAN
    step 2. Send DHCPDISCOVER to restart DHCP client on LAN
    step 3. Verify DHCP client receives the expected options

    The testvars lanDhcpClientOptionCode and lanDhcpClientOptionData can
    be used to configure a list of DHCP options that the client should
    receive from the DHCP server.
Test Name Synopsis
Verify server supports DHCP Rapid Commit option cdrouter_dhcp_server_31 Verify server supports DHCP Rapid Commit option


    step 1. Send DHCPRELEASE to release DHCP client address on LAN
    step 2. Configure DHCP client on LAN to use the Rapid Commit option
    step 3. Restart DHCP client on LAN
    step 4. Wait for DHCPACK from DHCP server
    step 5. Verify DHCP server sends DHCPACK including Rapid Commit option
    step 6. Verify DHCP client receives a valid address
    step 7. Restore original behavior
    step 8. Restart DHCP client on LAN and verify that client receives a
            valid address


    References:

    IETF RFC 4039 "Rapid Commit Option for the Dynamic Host Configuration Protocol version 4 (DHCPv4)" Section 3.1: Client/Server Operation

    https://tools.ietf.org/html/rfc4039#section-3.1
Test Name Synopsis
Verify DHCP server ignores DHCPDISCOVER messages on port 68 cdrouter_dhcp_server_35 Verify DHCP server ignores DHCPDISCOVER messages on port 68


    step 1. Send DHCPRELEASE to release DHCP client address on LAN
    step 2. Send DHCPDISCOVER to LAN DHCP server using port 68
    step 3. Verify DHCP server ignores the DHCPDISCOVER.
    step 4. Restart DHCP client on LAN allowing the client to obtain an address


    References:

    IETF RFC 2131 "Dynamic Host Configuration Protocol" Section 4.1: Constructing and sending DHCP messages

    https://tools.ietf.org/html/rfc2131#section-4.1
Test Name Synopsis
Verify DHCP server accepts DHCP client packets with IPv4 length less than 576 cdrouter_dhcp_server_100 Verify DHCP server accepts DHCP client packets with IPv4 length less than 576


    step 1. Send DHCPRELEASE to release DHCP client address on LAN
    step 2. Configure DHCP client on LAN to not use minimum size DHCP packets
    step 3. Restart DHCP client on LAN
    step 4. Verify DHCP client receives a valid address
    step 5. Restore original behavior
    step 6. Restart DHCP client on LAN and verify that client receives a
            valid address

    NOTE: RFC 2131 allows clients to send DHCP packets that are not padded
    out to a minimum length. Older servers based on RFC 1541 may require
    a minimum IP length of 576 for DHCP packets. This test verifies that the
    DHCP server will interoperate with newer clients based on RFC 2131.


    References:

    IETF RFC 2131 "Dynamic Host Configuration Protocol" Section 2: Protocol Summary

    https://tools.ietf.org/html/rfc2131#section-2
Test Name Synopsis
Verify DHCP server rejects DHCPREQUESTS with IP address of other clients cdrouter_dhcp_server_200 Verify DHCP server rejects DHCPREQUESTS with IP address of other clients


    step 1. Create a new DHCP client on LAN
    step 2. Verify new client obtains a valid IP address
    step 3. Attempt to renew the new client's lease using the IP address of
            another client in 'Client IP Address' option
    step 4. Verify DHCP server sends DHCPNAK
    step 5. Remove DHCP client created in step 1 from LAN


    References:

    IETF RFC 2131 "Dynamic Host Configuration Protocol" Section 3.5: Client parameters in DHCP

    https://tools.ietf.org/html/rfc2131#section-3.5

    IETF RFC 2131 "Dynamic Host Configuration Protocol" Section 4.3.2: DHCPREQUEST message

    https://tools.ietf.org/html/rfc2131#section-4.3.2
Test Name Synopsis
Verify DHCP server ignores site-specific DHCP options cdrouter_dhcp_server_300 Verify DHCP server ignores site-specific DHCP options


    step 1. Send DHCPRELEASE to release DHCP client address on LAN
    step 2. Configure DHCP client on LAN to include site specific options
    step 3. Restart DHCP client on LAN
    step 4. Verify DHCP client receives a valid address
    step 5. Restore original behavior
    step 6. Restart DHCP client on LAN and verify that client receives a
            valid address


    References:

    IETF RFC 2131 "Dynamic Host Configuration Protocol" Section 3.5: Client parameters in DHCP

    https://tools.ietf.org/html/rfc2131#section-3.5
Test Name Synopsis
Verify DHCP server handles client option with length 0 cdrouter_dhcp_server_301 Verify DHCP server handles client option with length 0


    step 1. Send DHCPRELEASE to release DHCP client address on LAN
    step 2. Configure DHCP client on LAN to include a 0 length option
    step 3. Restart DHCP client on LAN
    step 4. Verify DHCP client receives a valid address
    step 5. Restore original behavior
    step 6. Restart DHCP client on LAN and verify that client receives a
            valid address


    References:

    IETF RFC 2131 "Dynamic Host Configuration Protocol" Section 3.5: Client parameters in DHCP

    https://tools.ietf.org/html/rfc2131#section-3.5
Test Name Synopsis
Verify DHCP server ignores DHCP packets with an invalid UDP checksum cdrouter_dhcp_server_401 Verify DHCP server ignores DHCP packets with an invalid UDP checksum


    step 1. Send DHCPRELEASE to release DHCP client address on LAN
    step 2. Configure DHCP client on LAN to send corrupted UDP checksums
    step 3. Restart DHCP client on LAN
    step 4. Verify DHCP client does not receive a valid address
    step 5. Restore original behavior
    step 6. Restart DHCP client on LAN and verify that client receives a
            valid address
Test Name Synopsis
Verify DHCP server allows multiple DHCP clients with same name (DHCP option 12) cdrouter_dhcp_server_501 Verify DHCP server allows multiple DHCP clients with same name (DHCP option 12)


    step 1. Create a new DHCP client on LAN
    step 2. Configure new client with the same hostname as the primary LAN client
    step 3. Verify new client obtains a valid IP address
    step 4. Remove DHCP client created in step 1 from LAN

    Note: This test checks that two DHCP clients configured with the same
    hostname can still receive a DHCP address. The hostname is set using
    DHCP Option 12.
Test Name Synopsis
Verify DHCP server uses IPv4 broadcast when DHCP client sets broadcast flag cdrouter_dhcp_server_520 Verify DHCP server uses IPv4 broadcast when DHCP client sets broadcast flag


    step 1. Send DHCPRELEASE to release DHCP client address on LAN
    step 2. Configure DHCP client on LAN to set the broadcast bit in
            its DHCPDISCOVER message
    step 3. Restart DHCP client on LAN
    step 4. Verify DHCP client receives a valid address
    step 5. Restore original behavior
    step 6. Restart DHCP client on LAN and verify that client receives a
            valid address


    References:

    IETF RFC 2131 "Dynamic Host Configuration Protocol" Section 2: Protocol Summary

    https://tools.ietf.org/html/rfc2131#section-2

    IETF RFC 2131 "Dynamic Host Configuration Protocol" Section 4.1: Constructing and sending DHCP messages

    https://tools.ietf.org/html/rfc2131#section-4.1
Test Name Synopsis
Verify DHCP server probes IPv4 client address before assigning cdrouter_dhcp_server_540 Verify DHCP server probes IPv4 client address before assigning


    step 1. Create a new DHCP client on LAN
    step 2. Watch all ARP and ICMP Echo requests from the router's LAN interface
    step 3. Verify DHCP client receives a valid address
    step 4. Verify router and/or DHCP server sends ARP or ICMP Echo request
            for DHCP client's address before assigning it
    step 5. Remove DHCP client created in step 1 from LAN

    NOTE: Each DHCP server may use a different technique to probe
    an IPv4 address before assigning it to a client. For example,
    send an ARP Request, ICMP ping, etc. This test verifies that
    the router attempts to resolve an ARP Request for the IPv4
    address or send an ICMP Echo Request before the address is
    assigned to a DHCP client.

    NOTE: In most cases the default router and DHCP server will be the same
    IPv4 address. However, this test allows them to be different.


    References:

    IETF RFC 2131 "Dynamic Host Configuration Protocol" Section 3.1: Client-Server Interaction

    https://tools.ietf.org/html/rfc2131#section-3.1
Test Name Synopsis
Verify DHCP server returns correct WINS server(s) cdrouter_dhcp_server_600 Verify DHCP server returns correct WINS server(s)


    step 1. Send DHCPRELEASE to release DHCP client address on LAN
    step 2. Configure DHCP client on LAN to request WINS server option
    step 3. Restart DHCP client on LAN
    step 4. Verify DHCP client receives a valid address that includes the WINS
            server option
    step 5. Verify WINS server address(es) provided by the DHCP server match
            the expected value(s)
    step 6. Restore original behavior
    step 7. Restart DHCP client on LAN and verify that client receives a
            valid address
Test Name Synopsis
Verify DHCP server returns correct NTP server(s) cdrouter_dhcp_server_610 Verify DHCP server returns correct NTP server(s)


    step 1. Send DHCPRELEASE to release DHCP client address on LAN
    step 2. Configure DHCP client on LAN to request NTP server option
    step 3. Restart DHCP client on LAN
    step 4. Verify DHCP client receives a valid address that includes the NTP
            server option
    step 5. Verify NTP server address(es) provided by the DHCP server match
            the expected value(s)
    step 6. Restore original behavior
    step 7. Restart DHCP client on LAN and verify that client receives a
            valid address

    NOTE: CDRouter automatically announces ntpServer1 and ntpServer2
    via DHCP on the WAN. This test verifies that the NTP server(s)
    received via DHCP on the LAN match the ntpServer1 and ntpServer2
    addresses. If both ntpServer1 and ntpServer2 are configured, this
    test will verify that the LAN client received both addresses. If
    only one NTP server is configured, this test will verify that the
    LAN client received only the expected address. This test is only
    run if the testvar 'dhcpClientRequestNtp' is set to 'yes'.
Test Name Synopsis
Verify DHCP server returns correct client identifier option cdrouter_dhcp_server_620 Verify DHCP server returns correct client identifier option


    step 1. Send DHCPRELEASE to release DHCP client address on LAN
    step 2. Configure DHCP client on LAN to request the 'client identifier'
            option
    step 3. Restart DHCP client on LAN
    step 4. Verify DHCP client receives client identifier option in all
            DHCP response packets from the server
    step 5. Verify client identifier option contains client's MAC address
    step 6. Verify DHCP client receives IP address

    If the 'client identifier' option is present in a message received
    from a client, the server MUST return the 'client identifier' option,
    unaltered, in its response message.


    References:

    IETF RFC 6842 "Client Identifier Option in DHCP Server Replies" Section 3: Modification to RFC 2131

    https://tools.ietf.org/html/rfc6842#section-3
Test Name Synopsis
Verify DHCP server returns correct DNS server(s) cdrouter_dhcp_server_630 Verify DHCP server returns correct DNS server(s)


    step 1. Send DHCPRELEASE to release DHCP client address on LAN
    step 2. Configure DHCP client on LAN to request DNS server option
    step 3. Restart DHCP client on LAN
    step 4. Verify DHCP client receives a valid address that includes the DNS
            server option
    step 5. Verify DNS server address(es) provided by the DHCP server match
            the expected value(s)

    NOTE: CDRouter automatically announces wanDnsServer, wanBackupDnsServer, and
    optionally wanBackupDnsServer2 and wanBackupDnsServer3 via DHCP on the WAN.
    If the testvar “DNStoDHCP“ is set to “yes”, CDRouter will verify that its
    LAN DHCP client receives the same DNS servers that have either been learned
    dynamically by the DUT on the WAN or configured manually on the DUT. If the
    testvar “DNStoDHCP” is set to “no”, CDRouter will verify that its LAN DHCP
    client receives the DNS server specified by the testvar “lanDnsServer”
    instead.
Test Name Synopsis
Verify DHCP server responds to unicast and broadcast DHCPINFORM messages cdrouter_dhcp_server_700 Verify DHCP server responds to unicast and broadcast DHCPINFORM messages


    step 1. Send a unicast DHCPINFORM message to the DHCP server
            including DNS Servers (Option 6) and Domain Name (Option 15)
            in the parameter request list
    step 2. Verify DHCP server sends DHCPACK
    step 3. Verify the DHCPACK does not contain a lease time
    step 4. Verify the DHCPACK contains the correct DNS servers (Option 6)
    step 5. Verify the DHCPACK contains the correct domain name (Option 15)
            NOTE: Domain Name is only checked when the wanMode is DHCP
                  and if the testvar lanDomainName is not set to 'none'.
    step 6. Repeat test by sending broadcast DHCPINFOM message

    NOTE: If your DUT does not respond with the Domain Name DHCP option (15),
    then ensure that the testvar lanDomainName is set to the keyword 'none'.


    References:

    IETF RFC 2131 "Dynamic Host Configuration Protocol" Section 3.4: Obtaining parameters with externally configured network address

    https://tools.ietf.org/html/rfc2131#section-3.4
Test Name Synopsis
Verify DHCP server handles clients using V-I Vendor-Specific Information option cdrouter_dhcp_server_710 Verify DHCP server handles clients using V-I Vendor-Specific Information option


    step 1. Send DHCPRELEASE to release DHCP client address on LAN
    step 2. Configure DHCP client on LAN to request V-I Vendor-Specific
            Information option
    step 3. Restart DHCP client on LAN
    step 4. Verify DHCP client receives a valid address
    step 5. Restore original behavior
    step 6. Restart DHCP client on LAN and verify that client receives a
            valid address

    NOTE: This test verifies that new LAN side CPE devices with TR-111 support
    can still operate behind an IGD device that may not support TR-069. The IGD
    device should ignore the unknown DHCP options if they are not supported.


    References:

    IETF RFC 3925 "Vendor-Identifying Vendor Options for Dynamic Host Configuration Protocol version 4 (DHCPv4)"

    https://tools.ietf.org/html/rfc3925
Test Name Synopsis
Verify DHCP server handles clients using V-I Vendor Class option cdrouter_dhcp_server_720 Verify DHCP server handles clients using V-I Vendor Class option


    step 1. Send DHCPRELEASE to release DHCP client address on LAN
    step 2. Configure DHCP client on LAN to request V-I Vendor Class option
    step 3. Restart DHCP client on LAN
    step 4. Verify DHCP client receives a valid address
    step 5. Restore original behavior
    step 6. Restart DHCP client on LAN and verify that client receives a
            valid address

    NOTE: This test verifies that new LAN side CPE devices using Vendor Class
    options to identify themselves can still operate behind an IGD device
    that may not recognize Vendor Class options.


    References:

    IETF RFC 3925 "Vendor-Identifying Vendor Options for Dynamic Host Configuration Protocol version 4 (DHCPv4)"

    https://tools.ietf.org/html/rfc3925
Test Name Synopsis
Verify DHCP server does not become exhausted after a large number of DHCP restarts cdrouter_dhcp_server_800 Verify DHCP server does not become exhausted after a large number of DHCP restarts


    step 1. Send DHCPDISCOVER to restart DHCP client on LAN
    step 2. Verify DHCP client receives an address from within the configured
            DHCP pool
    step 3. Repeat steps 1 and 2 N times, where N is equal to 2 times the DHCP
            pool size

    Note: The DHCP pool is configured using the testvars dhcpClientStart and
    dhcpClientEnd. These testvars must match the DHCP pool settings on the
    DUT.


    References:

    IETF RFC 2131 "Dynamic Host Configuration Protocol"

    https://tools.ietf.org/html/rfc2131
Test Name Synopsis
Verify DHCP server does not become exhausted after a large number of DHCP release then restarts cdrouter_dhcp_server_801 Verify DHCP server does not become exhausted after a large number of DHCP release then restarts


    step 1. Send DHCPRELEASE to release DHCP client address on LAN
    step 2. Send DHCPDISCOVER to restart DHCP client on LAN
    step 3. Verify DHCP client receives an address from within the configured
            DHCP pool
    step 4. Repeat steps 1 through 3 N times, where N is equal to 2 times the
            DHCP pool size

    Note: The DHCP pool is configured using the testvars dhcpClientStart and
    dhcpClientEnd. These testvars must match the DHCP pool settings on the
    DUT.


    References:

    IETF RFC 2131 "Dynamic Host Configuration Protocol"

    https://tools.ietf.org/html/rfc2131

nat.tcl

NAPT tests for TCP, UDP, and ICMP

Test Name Synopsis
Outbound TCP connections use NAPT cdrouter_nat_1 Outbound TCP connections use NAPT


    step 1. Initiate an outbound TCP connection to HTTP server
    step 2. Verify the connection is established
    step 3. Send HTTP GET request to server
    step 4. Verify HTTP response is received
    step 5. Verify the IPv4 source address on the WAN side is the router's address
    step 6. Close TCP connection from LAN side


    References:

    IETF RFC 3022 "Traditional IP Network Address Translator (Traditional NAT)"

    https://tools.ietf.org/html/rfc3022
Test Name Synopsis
Outbound UDP connections use NAPT cdrouter_nat_2 Outbound UDP connections use NAPT


    step 1. Initiate an outbound UDP connection (UDP Echo)
    step 2. Verify the udp is received on WAN side
    step 3. Verify the IPv4 source address on the WAN side is the router's address
    step 4. Send a return response back to LAN
    step 5. Verify return packet is received on the LAN


    References:

    IETF RFC 3022 "Traditional IP Network Address Translator (Traditional NAT)"

    https://tools.ietf.org/html/rfc3022
Test Name Synopsis
Maximum number of TCP connections with single LAN host cdrouter_nat_100 Maximum number of TCP connections with single LAN host


    step 1. Initiate an outbound TCP connection
    step 2. Verify the connection is established
    step 3. Send HTTP GET on TCP connection
    step 4. Verify the source address on the WAN side is the router's address
    step 5. Continue creating sessions up to the maximum number supported


    References:

    IETF RFC 3022 "Traditional IP Network Address Translator (Traditional NAT)"

    https://tools.ietf.org/html/rfc3022
Test Name Synopsis
NAPT with multiple LAN hosts using the same TCP source port cdrouter_nat_101 NAPT with multiple LAN hosts using the same TCP source port


    step 1. Configure additional LAN host
    step 2. Configure the new LAN host so that its TCP source ports will be the
            same as the original LAN host
    step 3. Initiate outbound TCP connections for both LAN hosts
    step 4. Verify the connections are established
    step 5. Continue to create up to 10 connections per host


    References:

    IETF RFC 3022 "Traditional IP Network Address Translator (Traditional NAT)"

    https://tools.ietf.org/html/rfc3022
Test Name Synopsis
NAPT with a TCP and UDP connection using the same source port cdrouter_nat_120 NAPT with a TCP and UDP connection using the same source port


    step 1. Initiate an outbound TCP connection to HTTP server
    step 2. Verify the connection is established
    step 3. Verify the IPv4 source address on the WAN side is the router's address
    step 4. Initiate an outbound UDP connection using same source port (UDP Echo)
    step 5. Verify the UDP packet is received on the WAN
    step 6. Send a return UDP packet back to the LAN host
    step 7. Verify return UDP packet is received on the LAN
    step 8. Close TCP connection from LAN side


    References:

    IETF RFC 3022 "Traditional IP Network Address Translator (Traditional NAT)"

    https://tools.ietf.org/html/rfc3022
Test Name Synopsis
Verify NAPT with outbound TCP connections using high and low source ports cdrouter_nat_130 Verify NAPT with outbound TCP connections using high and low source ports


    step 1. Set the next TCP source port to 65535
    step 2. Initiate an outbound TCP connection to HTTP server
    step 3. Verify the connection is established
    step 4. Verify the IPv4 source address on the WAN side is the router's address
    step 5. Send HTTP GET request to server
    step 6. Verify HTTP response is received
    step 7. Close TCP connection from LAN side
    step 8. Repeat using TCP source ports 65534, 0, 1, and 2


    References:

    IETF RFC 3022 "Traditional IP Network Address Translator (Traditional NAT)"

    https://tools.ietf.org/html/rfc3022
Test Name Synopsis
Verify TCP source port can be reused after a passive close behind NAPT cdrouter_nat_150 Verify TCP source port can be reused after a passive close behind NAPT


    step 1. Initiate an outbound TCP connection to TCP server
    step 2. Verify the connection is established and operational
    step 3. Initiate a TCP active close from the WAN side
    step 4. Initiate a TCP passive close from the LAN side
    step 5. Initiate a new outbound TCP connection using the same TCP source port
    step 6. Verify the connection is established and operational

    NOTES: The NAPT implementation should allow new TCP connections to reuse the
    same source port if the TCP connection on the LAN side is closed through
    a passive TCP close operation.

    The amount of time to wait before attempting to resue the Tcp port can
    be configured using testvar 'natTcpPortDelay'. It defaults to 1 second. Setting
    this value too high may defeat the test since the port mapping may be
    deleted before the port is reused.


    References:

    IETF RFC 3022 "Traditional IP Network Address Translator (Traditional NAT)"

    https://tools.ietf.org/html/rfc3022
Test Name Synopsis
Maximum number of UDP connections with single LAN host cdrouter_nat_200 Maximum number of UDP connections with single LAN host


    step 1. Initiate an outbound UDP connection
    step 2. Verify the the UDP packet is received on the WAN
    step 3. Verify the source address on the WAN side is the router's address
    step 4. Send return UDP packet back to the LAN
    step 5. Verify the return UDP packet is received on the LAN
    step 6. Continue creating sessions up to the maximum number supported
    step 7. Once all sessions are established, loop through each session
            again and forward a UDP packet from the WAN to the LAN using
            the port mappings that were established for each connection
    step 8. Verify that each UDP connection is still forwarding traffic
            from WAN to LAN.


    References:

    IETF RFC 3022 "Traditional IP Network Address Translator (Traditional NAT)"

    https://tools.ietf.org/html/rfc3022
Test Name Synopsis
NAPT with multiple LAN hosts using the same UDP source port cdrouter_nat_201 NAPT with multiple LAN hosts using the same UDP source port


    step 1. Configure additional LAN host
    step 2. Configure the new LAN host so that its UDP source ports will be the
            same as the original LAN host
    step 3. Initiate outbound UDP connections for both LAN hosts (UDP Echo)
    step 4. Verify the UDP Echo requests are answered
    step 5. Continue to create up to 10 UDP connections per host


    References:

    IETF RFC 3022 "Traditional IP Network Address Translator (Traditional NAT)"

    https://tools.ietf.org/html/rfc3022
Test Name Synopsis
Verify NAPT checks source IP address of inbound UDP packets cdrouter_nat_300 Verify NAPT checks source IP address of inbound UDP packets


    step 1. Forward a UDP packet from a LAN client to the WAN
    step 2. Forward a packet back from the WAN to the same LAN client
    step 3. Verify packet is received
    step 4. Forward a packet using a different source IP address to LAN
    step 5. Verify the packet is not forwarded onto the LAN or if
            the natType or dsliteFirewallMode is full-cone, verify
            the packet is forwarded to the LAN.

    NOTE: The exact behavior of this test depends on the type of NAT that
    is implemented by the device. The testvar natMode can be used to
    configure either full-cone, address-restricted, or port-restricted NAT.

    NOTE: When DS-Lite is enabled, NAT is not normally applied on the CPE.
    The CPE may still apply a firewall. The mode of the firewall can be
    configured using the dsliteFirewallMode testvar.


    References:

    IETF RFC 3022 "Traditional IP Network Address Translator (Traditional NAT)"

    https://tools.ietf.org/html/rfc3022
Test Name Synopsis
UDP headers with a checksum equal to 0 should not be modified cdrouter_nat_320 UDP headers with a checksum equal to 0 should not be modified


    step 1. Forward a UDP packet from a LAN client to the WAN with
            UDP checksum equal to 0
    step 2. Verify packet is received
    step 3. Verify received UDP checksum on WAN side is 0


    References:

    IETF RFC 3022 "Traditional IP Network Address Translator (Traditional NAT)" Section 4.1: IP, TCP, UDP and ICMP Header Manipulations

    https://tools.ietf.org/html/rfc3022#section-4.1
Test Name Synopsis
Outbound TCP connection using IPv4 options cdrouter_nat_330 Outbound TCP connection using IPv4 options


    step 1. Enable LAN client and remote host to include the router alert
            IP option in every IPv4 packet
    step 2. Initiate an outbound TCP connection to HTTP server
    step 3. Verify the connection is established
    step 4. Verify the IPv4 source address on the WAN side is the router's address
    step 5. Send HTTP GET request to server
    step 6. Verify HTTP response is received
    step 7. Close TCP connection from LAN side


    References:

    IETF RFC 3022 "Traditional IP Network Address Translator (Traditional NAT)"

    https://tools.ietf.org/html/rfc3022
Test Name Synopsis
Outbound UDP connection using IPv4 options cdrouter_nat_340 Outbound UDP connection using IPv4 options


    step 1. Enable LAN client and remote host to include the router alert
            IP option every IPv4 packet
    step 2. Initiate an outbound UDP connection (UDP Echo)
    step 3. Verify the UDP is received on WAN side
    step 4. Verify the IPv4 source address on the WAN side is the router's address
    step 5. Send a return response back to LAN
    step 6. Verify return packet is received on the LAN


    References:

    IETF RFC 3022 "Traditional IP Network Address Translator (Traditional NAT)"

    https://tools.ietf.org/html/rfc3022
Test Name Synopsis
Verify NAPT uses port parity preservation cdrouter_nat_350 Verify NAPT uses port parity preservation


    step 1. Send UDP packet from LAN to WAN
    step 2. Verify UDP packet is received on the WAN
    step 3. Verify source port on WAN matches the parity of original LAN port
    step 4. Repeat for incremental ports

    If port parity is not supported, this test can be skipped by configuring
    the testvar 'natPortParity' to 'no'. The default is yes.


    References:

    IETF RFC 4787 "Network Address Translation (NAT) Behavioral Requirements for Unicast UDP" Section 4.2.2: Port Parity

    https://tools.ietf.org/html/rfc4787#section-4.2.2
Test Name Synopsis
Verify ICMP Destination Unreachable message from WAN does not destroy NAT UDP mapping cdrouter_nat_360 Verify ICMP Destination Unreachable message from WAN does not destroy NAT UDP mapping


    step 1. Send UDP packet from LAN to WAN
    step 2. Verify UDP packet is received on the WAN and return an ICMP Destination Unreachable message
    step 3. Verify ICMP Destination Unreachable message is received on the LAN
    step 4. Send UDP response from WAN to LAN
    step 5. Verify UDP response is received on LAN since NAPT mapping is still working

    NOTE: Receipt of any sort of ICMP message must not destroy the NAT mapping.
    This is REQ-12 from RFC 4787.


    References:

    IETF RFC 4787 "Network Address Translation (NAT) Behavioral Requirements for Unicast UDP" Section 9: ICMP Destination Unreachable Behavior

    https://tools.ietf.org/html/rfc4787#section-9
Test Name Synopsis
Verify ICMP Destination Unreachable message from WAN does not destroy NAT TCP mapping cdrouter_nat_361 Verify ICMP Destination Unreachable message from WAN does not destroy NAT TCP mapping


    step 1. Establish TCP connection from LAN to WAN
    step 2. Send an ICMP Destination Unreachable message from the WAN for the connection
    step 3. Verify ICMP Destination Unreachable message is received on the LAN
    step 4. Send TCP data segment from WAN to LAN for the session
    step 5. Verify TCP data segment is received on LAN since NAPT mapping is still working


    References:

    IETF RFC 5382 "NAT Behavioral Requirements for TCP" Section 7.3: ICMP Responses to TCP Packets

    REQ-10:  Receipt of any sort of ICMP message MUST NOT terminate the
       NAT mapping or TCP connection for which the ICMP was generated.

    Justification:  This is necessary for reliably performing TCP
       simultaneous-open where a remote NAT may temporarily signal an
       ICMP error.

    https://tools.ietf.org/html/rfc5382#section-7.3
Test Name Synopsis
Verify basic MSS Clamping for TCP sessions cdrouter_nat_400 Verify basic MSS Clamping for TCP sessions


    step 1. Set the TCP MSS size to 1460
    step 2. Initiate an outbound TCP connection to HTTP server
    step 3. Verify the received MSS on the LAN and WAN matches
            the expected MSS size
    step 4. Verify the IPv4 source address on the WAN side is the router's address
    step 5. Send HTTP GET request to server
    step 6. Verify HTTP response is received
    step 7. Close TCP connection from LAN side

    NOTE: The expected MSS size for MSS clamping can be configured
    using the testvar 'mssClampingValue'. If the inbound direction is
    different than the outbound direction for MSS clamping, the inbound
    direction can be adjusted using the testvar mssClampingInValue.

    NOTE: The TCP port used for the MSS clamping test defaults to
    port 8096. This can be changed using the testvar mssClampingTestPort.
Test Name Synopsis
Verify MSS Clamping with TCP options from different clients cdrouter_nat_401 Verify MSS Clamping with TCP options from different clients


    step 1. Set the TCP options to resemble a Windows TCP client
    step 2. Initiate an outbound TCP connection to HTTP server
    step 3. Verify the received MSS on the LAN and WAN matches
            the expected MSS size
    step 4. Verify the IPv4 source address on the WAN side is the router's address
    step 5. Send HTTP GET request to server
    step 6. Verify HTTP response is received
    step 7. Close TCP connection from LAN side
    step 8. Repeat testing using TCP options for a Linux TCP client
    step 9. Repeat testing using TCP options for a Mac OS X TCP client

    NOTE: The expected MSS size for MSS clamping can be configured
    using the testvar 'mssClampingValue'. If the inbound direction is
    different than the outbound direction for MSS clamping, the inbound
    direction can be adjusted using the testvar mssClampingInValue.

    NOTE: The TCP port used for the MSS clamping test defaults to
    port 8096. This can be changed using the testvar mssClampingTestPort.
Test Name Synopsis
Verify MSS Clamping does not modify smaller MSS values cdrouter_nat_410 Verify MSS Clamping does not modify smaller MSS values


    step 1. Set the TCP MSS size to 512
    step 2. Initiate an outbound TCP connection to HTTP server
    step 3. Verify the received MSS on the LAN and WAN is stil 512
    step 4. Verify the IPv4 source address on the WAN side is the router's address
    step 5. Send HTTP GET request to server
    step 6. Verify HTTP response is received
    step 7. Close TCP connection from LAN side

    NOTE: In order to pass this test, the router's expected MSS Clamping value
    must be greater than 512. When the router detects a MSS value smaller than its
    own MSS clamping value, it should leave the MSS unchanged. The expected MSS
    size for MSS clamping can be configured using the testvar 'mssClampingValue'.

    NOTE: The TCP port used for the MSS clamping test defaults to
    port 8096. This can be changed using the testvar mssClampingTestPort.
Test Name Synopsis
NAT uses single binding for TCP session with same source IP and source port cdrouter_nat_500 NAT uses single binding for TCP session with same source IP and source port


    step 1. Initiate an outbound TCP connection to server 1 on the WAN
    step 2. Initiate a second outbound TCP connection to server 2 on the WAN
    step 3. Verify outgoing source port on the WAN side is the same for both connections
    step 4. Close both connections

    RFC 3022 Section 3.1 states that NAT implementations may use the same
    binding for TCP or UDP sessions when the source IP and port are the same.
    This technique is used by peer-to-peer applications to establish a
    connection through NAT. This is also known as Cone NAT.

    NOTE: IETF draft-ford-midcom-p2p-03.txt
    Section 5.1. Deprecate the use of symmetric NATs

    This test is only run when the testvar 'natSupportsP2P' is set to yes.


    References:

    IETF RFC 3022 "Traditional IP Network Address Translator (Traditional NAT)" Section 3.1: Address binding

    https://tools.ietf.org/html/rfc3022#section-3.1

    IETF Internet-Draft draft-ford-midcom-p2p-03 "Peer-to-Peer(P2P) communication across Network Address Translators(NATs)" Section 5.1: Deprecate the use of symmetric NATs

    https://tools.ietf.org/html/draft-ford-midcom-p2p-03#section-5.1
Test Name Synopsis
NAT uses single binding for UDP session with same source IP and source port cdrouter_nat_501 NAT uses single binding for UDP session with same source IP and source port


    step 1. Initiate an outbound UDP connection to server 1 on the WAN
    step 2. Initiate a second outbound UDP connection to server 2 on the WAN
    step 3. Verify outgoing source port on the WAN side is the same for both connections

    RFC 3022 Section 3.1 states that NAT implementations may use the same
    binding for TCP or UDP sessions when the source IP and port are the same.
    This technique is used by peer-to-peer applications to establish a
    connection through NAT. This is also known as Cone NAT.

    NOTE: IETF draft-ford-midcom-p2p-03.txt
    Section 5.1. Deprecate the use of symmetric NATs

    This test is only run when the testvar 'natSupportsP2P' is set to yes.


    References:

    IETF RFC 3022 "Traditional IP Network Address Translator (Traditional NAT)" Section 3.1: Address binding

    https://tools.ietf.org/html/rfc3022#section-3.1

    IETF Internet-Draft draft-ford-midcom-p2p-03 "Peer-to-Peer(P2P) communication across Network Address Translators(NATs)" Section 5.1: Deprecate the use of symmetric NATs

    https://tools.ietf.org/html/draft-ford-midcom-p2p-03#section-5.1
Test Name Synopsis
NAT performs hairpin translation for LAN side TCP connections cdrouter_nat_510 NAT performs hairpin translation for LAN side TCP connections


    step 1. Initiate an outbound TCP connection to server 1 from LAN source port A
    step 2. Initiate a second outbound TCP connection to server 1 from LAN source port B
    step 3. Detect public IP and source port for both TCP connections
    step 4. Send TCP SYN from LAN source port A to public IP and source port for connection 2
    step 5. Send TCP SYN from LAN source port B to public IP and source port for connection 1

    step 6. Send TCP SYN from LAN source port A to public IP and source port for connection 2
            ** NOTE: This step is required for Restricted and Port Restricted
            Cone NATs. These types of NATs require an existing outgoing session
            before allowing incoming packets. The test will pass packets in both
            directions before trying to verify the hairpin behavior.

    step 7. Verify packet is received at LAN source port B
    step 8. Verify source IPv4 address and TCP port are translated to public IPv4 and port
            ** NOTE: The test only issues a warning if the TCP source port is not preserved.

    step 9. Send TCP SYN-ACK from LAN source port B to public IP and source port for connection 1
            ** NOTE: The source port is taken from the TCP SYN packet to work with implementations
            that do not preserve the TCP source port.

    step 10. Verify packet is received at LAN source port A
    step 11. Verify source IPv4 address and TCP port are translated to public IPv4 and port

    NOTES: This test scenario should work for all Cone NAT implementations - Full
    Cone NAT, Restricted Cone NAT, and Port Restricted Cone NAT. For a discussion
    of each type of Cone NAT, please see RFC 3489.

    This test is only run when the testvar 'natSupportsP2P' is set to yes.


    References:

    IETF RFC 5382 "NAT Behavioral Requirements for TCP" Section 7.2: Hairpinning behavior

    https://tools.ietf.org/html/rfc5382#section-7.2
Test Name Synopsis
NAT performs hairpin translation for LAN side UDP connections cdrouter_nat_511 NAT performs hairpin translation for LAN side UDP connections


    step 1. Initiate an outbound UDP connection to server 1 from LAN source port A
    step 2. Initiate a second outbound UDP connection to server 1 from LAN source port B
    step 3. Detect public IP and source port for both UDP connections
    step 4. Send UDP from LAN source port A to public IP and source port for connection 2
    step 5. Send UDP from LAN source port B to public IP and source port for connection 1

    step 6. Send UDP from LAN source port A to public IP and source port for connection 2
            ** NOTE: This step is required for Restricted and Port Restricted
            Cone NATs. These types of NATs require an existing outgoing session
            before allowing incoming packets. The test will pass packets in both
            directions before trying to verify the hairpin behavior.

    step 7. Verify packet is received at LAN source port B
    step 8. Verify source IPv4 address and UDP port are translated to public IPv4 and port
            ** NOTE: The test only issues a warning if the UDP source port is not preserved.

    step 9. Send UDP from LAN source port B to public IP and source port for connection 1
            ** NOTE: The source port is taken from the incoming UDP packet to work with
            implementations that do not preserve the UDP source port.

    step 10. Verify packet is received at LAN source port A
    step 11. Verify source IPv4 address and UDP port are translated to public IPv4 and port

    NOTES: This test scenario should work for all Cone NAT implementations - Full
    Cone NAT, Restricted Cone NAT, and Port Restricted Cone NAT. For a discussion
    of each type of Cone NAT, please see RFC 3489.

    This test is only run when the testvar 'natSupportsP2P' is set to yes.


    References:

    IETF RFC 4787 "Network Address Translation (NAT) Behavioral Requirements for Unicast UDP" Section 6: Hairpinning Behavior

    https://tools.ietf.org/html/rfc4787#section-6
Test Name Synopsis
Verify Port-Restricted, Address-Restricted, or Full-Cone NAPT for UDP connections cdrouter_nat_520 Verify Port-Restricted, Address-Restricted, or Full-Cone NAPT for UDP connections


    step 1. Forward a UDP packet from a LAN client to the WAN
    step 2. Verify packet is received
    step 3. Follow the steps below based on the value of the natMode testvar:

    For Full-Cone NAT
    step 4. Forward a packet using a different source port but same IP address from the WAN
    step 5. Verify the packet is forwarded to the LAN
    step 6. Forward a packet using a different IPv4 address and same source port
    step 7. Verify the packet is forwarded to the LAN
    step 8. Forward a packet using the same IPv4 address and same source port
    step 9. Verify the packet is forwarded to the LAN

    For Address-Restricted NAT
    step 4. Forward a packet using a different source port but same IP address from the WAN
    step 5. Verify the packet is forwarded to the LAN
    step 6. Forward a packet using a different IPv4 address and same source port
    step 7. Verify the packet is not forwarded to the LAN
    step 8. Forward a packet using the same IPv4 address and same source port
    step 9. Verify the packet is forwarded to the LAN

    For Port-Restricted NAT
    step 4. Forward a packet using a different source port but same IP address from the WAN
    step 5. Verify the packet is not forwarded to the LAN
    step 6. Forward a packet using a different IPv4 address and same source port
    step 7. Verify the packet is not forwarded to the LAN
    step 8. Forward a packet using the same IPv4 address and same source port
    step 9. Verify the packet is forwarded to the LAN

    NOTE: Most NAPT routers use either Port-Restricted NAT, Address-Restricted NAT,
    or Full-Cone NAT. By default, CDRouter assumes Port-Restricted NAT, but the type
    of NAPT in use can be configured using the testvar 'natMode'.


    References:

    IETF RFC 3022 "Traditional IP Network Address Translator (Traditional NAT)"

    https://tools.ietf.org/html/rfc3022
Test Name Synopsis
Verify TCP connections using TCP window scale option through NAT cdrouter_nat_530 Verify TCP connections using TCP window scale option through NAT


    step 1. Configure a LAN client to set the TCP window scale option using value '4'
            and a TCP window size of 65535
    step 2. Configure a WAN server to set the TCP window scale option using value '4'
            and a TCP window size of 65535
    step 3. Initiate a outbound TCP connection from the LAN client to the WAN client
    step 4. Verify both TCP connections received the same TCP window scale option
            with the same scaling factor '4'. The TCP window scale option should
            not be modified. Stop the test here if the window scale option is modified.
    step 5. Send a data block from the LAN to the WAN at the start of the data sequence
    step 6. Move the sequence ahead (65535 * 3) so that it would be outside of the
            current window if TCP window scaling is not being applied
    step 7. Send a new data block from the LAN to the WAN and verify the WAN server
            can echo back the data block.
    step 8. Repeat the Steps 5 and 6 until 5 data blocks have been sent
    step 9. Send a data block from the WAN to the LAN using current data sequence
    step 10. Move the sequence ahead (65535 * 3) so that it would be outside of the
             current window if TCP window scaling is not being applied
    step 11. Send a new data block from the WAN to the LAN and verify the LAN client
             can echo back the data block.
    step 12. Repeat the Steps 9 and 10 until 5 data blocks have been sent
    step 13. Close the TCP connection

    NOTE: If a firewall/NAT device is tracking the sequence number of TCP data, it
    needs to understand the TCP window scale option. This test is designed to find
    issues with devices that are not applying the TCP window scale factor to the
    the TCP window. If a device is not maintaining any TCP sequence number state,
    the TCP connection should not experience any problems.


    References:

    IETF RFC 1323 "TCP Extensions for High Performance"

    https://tools.ietf.org/html/rfc1323
Test Name Synopsis
Verify TCP Fast Open cookie request through NAT cdrouter_nat_600 Verify TCP Fast Open cookie request through NAT


    step 1. Configure a LAN client to enable TCP Fast Open support
    step 2. Configure WAN server to enable TCP Fast Open support
    step 3. Initiate an outbound TCP connection from the LAN client to
            the WAN server.  Client includes a TCP Fast Open cookie
            request option in its initial SYN packet.
    step 4. Verify LAN client received a TCP Fast Open cookie option
            in the SYN+ACK from the WAN server during the normal TCP
            three-way handshake.
    step 5. Verify TCP connection was established successfully.
    step 6. Close the TCP connection

    NOTE: TCP Fast Open does not currently have an officially assigned
    IANA TCP option value.  Therefore, this test uses the experimental
    TCP option value 0xfe and prepends the magic value 0xf989 to each
    cookie in order to distinguish TFO cookie request/TFO cookie
    options from other experimental TCP options.  The fact that these
    are not official IANA values should not be a factor in this
    NAT-style test since CDRouter is acting as both the client and
    server.


    References:

    IETF Internet-Draft draft-ietf-tcpm-fastopen "TCP Fast Open"

    https://tools.ietf.org/html/draft-ietf-tcpm-fastopen
Test Name Synopsis
Verify TCP connections using TCP Fast Open option through NAT cdrouter_nat_610 Verify TCP connections using TCP Fast Open option through NAT


    step 1. Configure a LAN client to enable TCP Fast Open support
    step 2. Configure WAN server to enable TCP Fast Open support
    step 3. Initiate an outbound TCP connection from the LAN client to
            the WAN server.  Client includes a TCP Fast Open cookie
            request option in its initial SYN packet.
    step 4. Verify LAN client received a TCP Fast Open cookie option
            in the SYN+ACK from the WAN server during the normal TCP
            three-way handshake.
    step 5. Verify TCP connection was established successfully.
    step 6. Close the TCP connection
    step 7. Initiate an outbound TCP connection from the LAN client to
            the WAN server, client includes data along with the TCP
            Fast Open cookie from step 4 in its SYN packet.
    step 8. WAN server sends its response data in an extra ACK between
            the server's SYN+ACK and the client's ACK during the
            normal TCP three-way handshake.
    step 9. Verify TCP connection was established successfully
    step 10. Verify LAN client received expected server data
    step 11. Verify WAN server received expected client data
    step 12. Close the TCP connection

    NOTE: TCP Fast Open does not currently have an officially assigned
    IANA TCP option value.  Therefore, this test uses the experimental
    TCP option value 0xfe and prepends the magic value 0xf989 to each
    cookie in order to distinguish TFO cookie request/TFO cookie
    options from other experimental TCP options.  The fact that these
    are not official IANA values should not be a factor in this
    NAT-style test since CDRouter is acting as both the client and
    server.


    References:

    IETF Internet-Draft draft-ietf-tcpm-fastopen "TCP Fast Open"

    https://tools.ietf.org/html/draft-ietf-tcpm-fastopen

nat-timeout.tcl

NAPT tests for session timers

Test Name Synopsis
Verify NAT TCP session timeout after FIN close cdrouter_nat_timeout_1 Verify NAT TCP session timeout after FIN close


    step 1. Initiate an outbound TCP connection to next TCP port
    step 2. Verify the connection is established
    step 3. Close the TCP connection using FIN from WAN
    step 4. Wait for natFinTimeout to expire
    step 5. Retransmit the last TCP segment from the WAN to LAN
    step 6. Verify TCP packet from the WAN is not forwarded to LAN
    step 7. Initiate a second outbound TCP connection to same TCP port
    step 8. Verify the connection is established
    step 9. Close the TCP connection using FIN from WAN
    step 10. Wait for natFinTimeout - 5 seconds
    step 11. Retransmit the last TCP segment from the WAN to LAN
    step 12. Verify TCP packet from the WAN is forwarded to LAN

    NOTE: This test verifies that the router maintains a NAT entry for a
    TCP connection that has been closed for 'natFinTimeout' seconds. The
    natFinTimeout setting is configured in the configuration file
    using the testvar natFinTimeout.

    NOTE: There are two mains types of implementations of the natFinTimeout
    timer. Some implementations delete the NAT entry after a FIN event
    occurs and the natFinTimeout occurs. Other implementations reset the
    timeout each time a packet is seen. This test case uses 2 TCP sessions
    to verify the behavior since sending TCP data to verify the timeout can
    cause some implementations to reset the timeout.

    NOTE: If the CPE is not designed to immediately delete expired NAT 
    mappings, the 'natLagTime' testvar should be set to force CDRouter to 
    wait a fixed number of seconds before verifying that the mapping has 
    been deleted.


    References:

    IETF RFC 2663 "NAT Terminology and Considerations" Section 2.6: End of session for TCP, UDP and others

    https://tools.ietf.org/html/rfc2663#section-2.6
Test Name Synopsis
Verify NAT TCP session timeout after RST close cdrouter_nat_timeout_2 Verify NAT TCP session timeout after RST close


    step 1. Initiate an outbound TCP connection to next TCP port
    step 2. Verify the connection is established
    step 3. Close the TCP connection using RST from LAN
    step 4. Wait for natRstTimeout to expire
    step 5. Retransmit the last TCP segment from the WAN to LAN
    step 6. Verify TCP packet from the WAN is not forwarded to LAN
    step 7. Initiate a second outbound TCP connection to same TCP port
    step 8. Verify the connection is established
    step 9. Close the TCP connection using RST from LAN
    step 10. Wait for natRstTimeout - 5 seconds
    step 11. Retransmit the last TCP segment from the WAN to LAN
    step 12. Verify TCP packet from the WAN is forwarded to LAN

    NOTE: This test verifies that the router maintains a NAT entry for a
    TCP connection that has been closed for 'natRstTimeout' seconds. The
    natRstTimeout setting is configured in the configuration file
    using the testvar natRstTimeout.

    NOTE: There are two mains types of implementations of the natRstTimeout
    timer. Some implementations delete the NAT entry after an RST event
    occurs and the natRstTimeout occurs. Other implementations reset the
    timeout each time a packet is seen. This test case uses 2 TCP sessions
    to verify the behavior since sending TCP data to verify the timeout can
    cause some implementations to reset the timeout.

    NOTE: If the CPE is not designed to immediately delete expired NAT 
    mappings, the 'natLagTime' testvar should be set to force CDRouter to 
    wait a fixed number of seconds before verifying that the mapping has 
    been deleted.


    References:

    IETF RFC 2663 "NAT Terminology and Considerations" Section 2.6: End of session for TCP, UDP and others

    https://tools.ietf.org/html/rfc2663#section-2.6
Test Name Synopsis
Verify NAT TCP session timeout for established session cdrouter_nat_timeout_10 Verify NAT TCP session timeout for established session


    step 1. Initiate an outbound TCP connection to next TCP port
    step 2. Verify the connection is established
    step 3. Wait for natTcpTimeout to expire
    step 4. Retransmit the last TCP segment from the WAN to LAN
    step 5. Verify TCP packet from the WAN is not forwarded to LAN
    step 6. Initiate a second outbound TCP connection to same TCP port
    step 7. Verify the connection is established
    step 8. Wait for natTcpTimeout - 5 seconds
    step 9. Retransmit the last TCP segment from the WAN to LAN
    step 10. Verify TCP packet from the WAN is forwarded to LAN

    NOTE: This test verifies that the router deletes the NAT entry
    for a TCP session that has been inactive for 'natTcpTimeout'
    seconds. The natTcpTimeout can be configured using the testvar
    natTcpTimeout.

    NOTE: The default natTcpTimeout on most NAT devices can be quite long.
    Some devices default to 24 hours (86400). This test can be quite
    time consuming with long timeout values.

    NOTE: If the CPE is not designed to immediately delete expired NAT 
    mappings, the 'natLagTime' testvar should be set to force CDRouter to 
    wait a fixed number of seconds before verifying that the mapping has 
    been deleted.


    References:

    IETF RFC 2663 "NAT Terminology and Considerations" Section 2.6: End of session for TCP, UDP and others

    https://tools.ietf.org/html/rfc2663#section-2.6
Test Name Synopsis
Verify NAT TCP SYN session timeout cdrouter_nat_timeout_11 Verify NAT TCP SYN session timeout


    step 1. Send outbound TCP SYN to next TCP port
    step 2. Wait for natSynTimeout to expire
    step 3. Send TCP SYN-ACK from WAN back to LAN host
    step 4. Verify TCP packet from the WAN is not forwarded to LAN
    step 5. Send a second outbound TCP SYN to same TCP port
    step 6. Wait for natSynTimeout - 5 seconds
    step 7. Send TCP SYN-ACK from WAN back to LAN host
    step 8. Verify TCP packet from the WAN is forwarded to LAN

    NOTE: This test verifies that the router maintains a NAT entry for a
    partially open TCP connection for 'natSynTimeout' seconds. The
    natSynTimeout setting is configured in the configuration file
    using the testvar natSynTimeout.

    NOTE: If the CPE is not designed to immediately delete expired NAT 
    mappings, the 'natLagTime' testvar should be set to force CDRouter to 
    wait a fixed number of seconds before verifying that the mapping has 
    been deleted.


    References:

    IETF RFC 2663 "NAT Terminology and Considerations" Section 2.6: End of session for TCP, UDP and others

    https://tools.ietf.org/html/rfc2663#section-2.6
Test Name Synopsis
Verify NAT UDP session timeout cdrouter_nat_timeout_20 Verify NAT UDP session timeout


    step 1. Initiate an outbound UDP Echo
    step 2. Verify the UDP packet is received on the WAN
    step 3. Wait for natUdpTimeout seconds
    step 4. Transmit the UDP response from the WAN to LAN
    step 5. Verify UDP packet from the WAN is not forwarded to LAN
    step 6. Initiate a second outbound UDP Echo
    step 7. Verify the packet is received on the WAN
    step 8. Wait for natUdpTimeout - 5 seconds
    step 9. Transmit the UDP response from the WAN to LAN
    step 10. Verify UDP packet from the WAN is forwarded to LAN

    NOTE: This test verifies that the router maintains a NAT entry for a
    UDP connections for 'natUdpTimeout' seconds. The natUdpTimeout
    setting is configured in the configuration file using the testvar
    natUdpTimeout.

    NOTE: If the CPE is not designed to immediately delete expired NAT 
    mappings, the 'natLagTime' testvar should be set to force CDRouter to 
    wait a fixed number of seconds before verifying that the mapping has 
    been deleted.


    References:

    IETF RFC 2663 "NAT Terminology and Considerations" Section 2.6: End of session for TCP, UDP and others

    https://tools.ietf.org/html/rfc2663#section-2.6
Test Name Synopsis
Verify NAT DNS session timeout cdrouter_nat_timeout_25 Verify NAT DNS session timeout


    step 1. Initiate an outbound DNS query
    step 2. Verify the DNS packet is received on the WAN
    step 3. Wait for natDnsTimeout seconds
    step 4. Transmit the DNS response from the WAN to LAN
    step 5. Verify DNS packet from the WAN is not forwarded to LAN
    step 6. Initiate a second outbound DNS query
    step 7. Verify the packet is received on the WAN
    step 8. Wait for natDnsTimeout - 5 seconds
    step 9. Transmit the DNS response from the WAN to LAN
    step 10. Verify DNS packet from the WAN is forwarded to LAN

    NOTE: This test verifies that the router maintains a NAT entry for
    a DNS connection for 'natDnsTimeout' seconds. The natDnsTimeout
    setting is configured in the configuration file using the testvar
    natDnsTimeout. If the implementation does not make any
    distintiction between DNS and generic UDP, this timeout should be
    set to the same value as the natUdpTimeout.

    NOTE: If the CPE is not designed to immediately delete expired NAT 
    mappings, the 'natLagTime' testvar should be set to force CDRouter to 
    wait a fixed number of seconds before verifying that the mapping has 
    been deleted.


    References:

    IETF RFC 2663 "NAT Terminology and Considerations" Section 2.6: End of session for TCP, UDP and others

    https://tools.ietf.org/html/rfc2663#section-2.6
Test Name Synopsis
Verify NAT ICMP session timeout cdrouter_nat_timeout_30 Verify NAT ICMP session timeout


    step 1. Initiate an outbound ICMP Echo Request
    step 2. Verify the packet is received on the WAN
    step 3. Wait for natIcmpTimeout seconds
    step 4. Transmit the Echo Reply from the WAN to LAN
    step 5. Verify ICMP packet from the WAN is not forwarded to LAN
    step 6. Initiate a second outbound ICMP Echo Request
    step 7. Verify the packet is received on the WAN
    step 8. Wait for natIcmpTimeout - 5 seconds
    step 9. Transmit the Echo Reply from the WAN to LAN
    step 10. Verify ICMP packet from the WAN is forwarded to LAN

    NOTE: This test verifies that the router maintains a NAT entry for a
    ICMP connections for 'natIcmpTimeout' seconds. The
    natIcmpTimeout setting is configured in the configuration file
    using the testvar natIcmpTimeout.

    NOTE: If the CPE is not designed to immediately delete expired NAT 
    mappings, the 'natLagTime' testvar should be set to force CDRouter to 
    wait a fixed number of seconds before verifying that the mapping has 
    been deleted.


    References:

    IETF RFC 2663 "NAT Terminology and Considerations" Section 2.6: End of session for TCP, UDP and others

    https://tools.ietf.org/html/rfc2663#section-2.6
Test Name Synopsis
Verify RTSP session timeout for established session cdrouter_nat_timeout_40 Verify RTSP session timeout for established session


    step 1. Initiate an outbound RTSP connection
    step 2. Verify the connection is established
    step 3. Wait for natRtspTimeout to expire
    step 4. Verify RTP and RTCP packets from the WAN are not forwarded to LAN
    step 5. Initiate a second outbound RTSP connection
    step 6. Verify the connection is established
    step 7. Wait for natRtspTimeout - 5 seconds
    step 8. Verify RTP and RTCP packets from the WAN are forwarded to LAN

    NOTE: This test verifies that the router deletes the RTSP entry
    for a RTSP session that has been inactive for 'natRtspTimeout'
    seconds. The natRtspTimeout can be configured using the testvar
    natRtspTimeout.

    NOTE: If the CPE is not designed to immediately delete expired NAT 
    mappings, the 'natLagTime' testvar should be set to force CDRouter to 
    wait a fixed number of seconds before verifying that the mapping has 
    been deleted.

nat-frag.tcl

NAPT tests for IPv4 fragmentation

Test Name Synopsis
Verify NAT with TCP IPv4 fragments nat_frag_1 Verify NAT with TCP IPv4 fragments


    step 1. Initiate an outbound TCP connection
    step 2. Set outgoing MTU to 108 bytes to force fragmentation
    step 3. Send a fragmented TCP data segment
    step 4. Verify the TCP data is received on WAN side
    step 5. Send a return response back to LAN
    step 6. Verify return packet is received on the LAN
    step 7. Repeat for multiple packet sizes


    References:

    IETF RFC 3022 "Traditional IP Network Address Translator (Traditional NAT)"

    https://tools.ietf.org/html/rfc3022

    IETF RFC 8900 "IP Fragmentation Considered Fragile" Section 3.3: Network Address Translation (NAT)

    IP fragmentation causes problems for Network Address Translation
    (NAT) devices.  When a NAT device detects a new, outbound flow, it
    maps that flow's source port and IP address to another source port
    and IP address.  Having created that mapping, the NAT device
    translates:

    *  The source IP address and source port on each outbound packet.

    *  The destination IP address and destination port on each inbound
       packet.

    A+P [RFC6346] and Carrier Grade NAT (CGN) [RFC6888] are two common
    NAT strategies.  In both approaches, the NAT device must virtually
    reassemble fragmented packets in order to translate and forward each
    fragment.

    https://tools.ietf.org/html/rfc8900#section-3.3
Test Name Synopsis
Verify NAT with TCP IPv4 out-of-order fragments nat_frag_2 Verify NAT with TCP IPv4 out-of-order fragments


    step 1. Initiate an outbound TCP connection
    step 2. Set outgoing MTU to 108 bytes to force fragmentation
    step 3. Send a fragmented TCP data segment with fragments in reverse order
    step 4. Verify the TCP data is received on WAN side
    step 5. Send a return response back to LAN
    step 6. Verify return packet is received on the LAN
    step 7. Repeat for multiple packet sizes


    References:

    IETF RFC 3022 "Traditional IP Network Address Translator (Traditional NAT)"

    https://tools.ietf.org/html/rfc3022

    IETF RFC 8900 "IP Fragmentation Considered Fragile" Section 3.3: Network Address Translation (NAT)

    IP fragmentation causes problems for Network Address Translation
    (NAT) devices.  When a NAT device detects a new, outbound flow, it
    maps that flow's source port and IP address to another source port
    and IP address.  Having created that mapping, the NAT device
    translates:

    *  The source IP address and source port on each outbound packet.

    *  The destination IP address and destination port on each inbound
       packet.

    A+P [RFC6346] and Carrier Grade NAT (CGN) [RFC6888] are two common
    NAT strategies.  In both approaches, the NAT device must virtually
    reassemble fragmented packets in order to translate and forward each
    fragment.

    https://tools.ietf.org/html/rfc8900#section-3.3
Test Name Synopsis
Verify NAT with UDP IPv4 fragments nat_frag_11 Verify NAT with UDP IPv4 fragments


    step 1. Initiate an outbound UDP connection (UDP Echo) with large fragmented packet
    step 2. Verify the udp is received on WAN side
    step 3. Send a return response back to LAN
    step 4. Verify return packet is received on the LAN
    step 5. Repeat for multiple packet sizes


    References:

    IETF RFC 3022 "Traditional IP Network Address Translator (Traditional NAT)"

    https://tools.ietf.org/html/rfc3022

    IETF RFC 8900 "IP Fragmentation Considered Fragile" Section 3.3: Network Address Translation (NAT)

    IP fragmentation causes problems for Network Address Translation
    (NAT) devices.  When a NAT device detects a new, outbound flow, it
    maps that flow's source port and IP address to another source port
    and IP address.  Having created that mapping, the NAT device
    translates:

    *  The source IP address and source port on each outbound packet.

    *  The destination IP address and destination port on each inbound
       packet.

    A+P [RFC6346] and Carrier Grade NAT (CGN) [RFC6888] are two common
    NAT strategies.  In both approaches, the NAT device must virtually
    reassemble fragmented packets in order to translate and forward each
    fragment.

    https://tools.ietf.org/html/rfc8900#section-3.3
Test Name Synopsis
Verify NAT with UDP IPv4 out-of-order fragments nat_frag_12 Verify NAT with UDP IPv4 out-of-order fragments


    step 1. Initiate an outbound UDP connection (UDP Echo) with large fragmented packet
    step 2. Send fragments in reverse order
    step 3. Verify the udp is received on WAN side
    step 4. Send a return response back to LAN
    step 5. Verify return packet is received on the LAN
    step 6. Repeat for multiple packet sizes


    References:

    IETF RFC 3022 "Traditional IP Network Address Translator (Traditional NAT)"

    https://tools.ietf.org/html/rfc3022

    IETF RFC 8900 "IP Fragmentation Considered Fragile" Section 3.3: Network Address Translation (NAT)

    IP fragmentation causes problems for Network Address Translation
    (NAT) devices.  When a NAT device detects a new, outbound flow, it
    maps that flow's source port and IP address to another source port
    and IP address.  Having created that mapping, the NAT device
    translates:

    *  The source IP address and source port on each outbound packet.

    *  The destination IP address and destination port on each inbound
       packet.

    A+P [RFC6346] and Carrier Grade NAT (CGN) [RFC6888] are two common
    NAT strategies.  In both approaches, the NAT device must virtually
    reassemble fragmented packets in order to translate and forward each
    fragment.

    https://tools.ietf.org/html/rfc8900#section-3.3
Test Name Synopsis
Verify NAT with ICMP IPv4 fragments nat_frag_21 Verify NAT with ICMP IPv4 fragments


    step 1. Initiate an outbound ICMP request with large fragmented packet
    step 2. Verify the udp is received on WAN side
    step 3. Send a return response back to LAN
    step 4. Verify return packet is received on the LAN
    step 5. Repeat for multiple packet sizes


    References:

    IETF RFC 3022 "Traditional IP Network Address Translator (Traditional NAT)"

    https://tools.ietf.org/html/rfc3022

    IETF RFC 8900 "IP Fragmentation Considered Fragile" Section 3.3: Network Address Translation (NAT)

    IP fragmentation causes problems for Network Address Translation
    (NAT) devices.  When a NAT device detects a new, outbound flow, it
    maps that flow's source port and IP address to another source port
    and IP address.  Having created that mapping, the NAT device
    translates:

    *  The source IP address and source port on each outbound packet.

    *  The destination IP address and destination port on each inbound
       packet.

    A+P [RFC6346] and Carrier Grade NAT (CGN) [RFC6888] are two common
    NAT strategies.  In both approaches, the NAT device must virtually
    reassemble fragmented packets in order to translate and forward each
    fragment.

    https://tools.ietf.org/html/rfc8900#section-3.3
Test Name Synopsis
Verify NAT with ICMP IPv4 out-of-order fragments nat_frag_22 Verify NAT with ICMP IPv4 out-of-order fragments


    step 1. Initiate an outbound ICMP request with large fragmented packet
    step 2. Send fragments in reverse order
    step 3. Verify the ICMP is received on WAN side
    step 4. Send a return response back to LAN
    step 5. Verify return packet is received on the LAN
    step 6. Repeat for multiple packet sizes


    References:

    IETF RFC 3022 "Traditional IP Network Address Translator (Traditional NAT)"

    https://tools.ietf.org/html/rfc3022

    IETF RFC 8900 "IP Fragmentation Considered Fragile" Section 3.3: Network Address Translation (NAT)

    IP fragmentation causes problems for Network Address Translation
    (NAT) devices.  When a NAT device detects a new, outbound flow, it
    maps that flow's source port and IP address to another source port
    and IP address.  Having created that mapping, the NAT device
    translates:

    *  The source IP address and source port on each outbound packet.

    *  The destination IP address and destination port on each inbound
       packet.

    A+P [RFC6346] and Carrier Grade NAT (CGN) [RFC6888] are two common
    NAT strategies.  In both approaches, the NAT device must virtually
    reassemble fragmented packets in order to translate and forward each
    fragment.

    https://tools.ietf.org/html/rfc8900#section-3.3

renum-dhcp.tcl

WAN side renumbering tests with DHCP on the WAN

Test Name Synopsis
Verify WAN client learns new IP address when WAN server renumbers cdrouter_renumber_1 Verify WAN client learns new IP address when WAN server renumbers


     step 1.  Change the wanIspAssignIp address to a new address
     step 2.  Wait for DHCP lease to expire on WAN interface
     step 3.  Verify WAN client sends DHCPREQUEST for same IP address
     step 4.  Send DHCPNAK for that address
     step 5.  Verify DHCP WAN client restarts DHCPDISCOVERY and learns new IP
     step 6.  Verify new address responds to ping from LAN
     step 7.  Verify the old address no longer responds to ping from LAN
     step 8.  Verify new address responds to ARP request from WAN
     step 9.  Verify LAN client can ping remote host using new address
     step 10. Restore original IP address
     step 11. Verify LAN client can ping remote host

     NOTE: Step 8 will be skipped if testvar IPv4HopCount > 1 or testvar
     wanIspAssignGateway is defined as this indicates that the WAN client and
     WAN server are not on the same subnet.


    References:

    IETF RFC 2131 "Dynamic Host Configuration Protocol"

    https://tools.ietf.org/html/rfc2131
Test Name Synopsis
Verify existing TCP connections can be reestablished after WAN renumber cdrouter_renumber_2 Verify existing TCP connections can be reestablished after WAN renumber


    step 1. Initiate TCP connection from LAN to WAN
    step 2. Change the wanIspAssignIp address to a new address
    step 3. Wait for DHCP lease to expire on WAN interface
    step 4. Verify WAN client sends DHCPREQUEST for same IP address
    step 5. Send DHCPNAK for that address
    step 6. Verify DHCP WAN client restarts DHCPDISCOVERY and learns new IP
    step 7. Verify new address responds to ping from LAN
    step 8. Verify the old address no longer responds to ping from LAN
    step 9. Initiate same TCP connection from LAN to WAN
    step 10. Verify TCP connection works
    step 11. Reset wanIspAssignIp to its original value and wait for a DHCP renew
    step 12. Verify the remoteHost responds to ping from the LAN


    References:

    IETF RFC 2131 "Dynamic Host Configuration Protocol"

    https://tools.ietf.org/html/rfc2131
Test Name Synopsis
Verify LAN clients learn new DNS server during LAN side renew cdrouter_renumber_3 Verify LAN clients learn new DNS server during LAN side renew


    step 1. Change the DNS server address
    step 2. Wait for WAN client to renew lease and learn new DNS Server
    step 3. Initiate LAN client renew
    step 4. Verify LAN client receives new DNS server address
    step 5. Reset the WAN client's DNS server address
    step 6. Verify the LAN client can ping a remote host


    References:

    IETF RFC 2131 "Dynamic Host Configuration Protocol"

    https://tools.ietf.org/html/rfc2131
Test Name Synopsis
Verify LAN clients learn new longer domain name during LAN side renew cdrouter_renumber_4 Verify LAN clients learn new longer domain name during LAN side renew


    step 1. Change the DNS domain name to a longer domain name
    step 2. Wait for WAN client to renew lease and learn new domain name
    step 3. Initiate LAN client renew
    step 4. Verify LAN client receives new domain name
    step 5. Reset the WAN client's DNS domain name
    step 6. Verify the LAN client can ping a remote host
    
    This test checks that the router correctly handles changes to the domain
    when it is modified. QACafe has seen cases where domain names passed on to
    DHCP clients were corrupted when changed after the WAN side renewed its DHCP
    lease.


    References:

    IETF RFC 2131 "Dynamic Host Configuration Protocol"

    https://tools.ietf.org/html/rfc2131
Test Name Synopsis
Verify LAN clients learn new shorter domain name during LAN side renew cdrouter_renumber_5 Verify LAN clients learn new shorter domain name during LAN side renew


    step 1. Change the DNS domain name to a shorter name
    step 2. Wait for WAN client to renew lease and learn new domain name
    step 3. Initiate LAN client renew
    step 4. Verify LAN client receives new domain name
    step 5. Reset the WAN client's DNS domain name
    step 6. Verify the LAN client can ping a remote host

    This test checks that the router correctly handles changes to the domain
    when it is modified. QACafe has seen cases where domain names passed on to
    DHCP clients were corrupted when changed after the WAN side renewed its DHCP
    lease.


    References:

    IETF RFC 2131 "Dynamic Host Configuration Protocol"

    https://tools.ietf.org/html/rfc2131
Test Name Synopsis
Verify WAN side switches to new gateway after renumber cdrouter_renumber_6 Verify WAN side switches to new gateway after renumber


    step 1. Change the default gateway that the DHCP server will assign
            to a new IPv4 address based on testvar wanIspNextIp
    step 2. Wait for DHCP lease to expire on WAN interface
    step 3. Verify WAN client sends DHCPREQUEST for same IP address
    step 4. Send DHCPACK that contains the new IP gateway
    step 5. Wait 5 seconds for CPE to update the default gateway
    step 6. Initiate TCP connection from LAN to WAN
    step 7. Verify TCP connection works using the new gateway
    step 8. Reset the WAN client's default gateway
    step 9. Verify the LAN client can ping a remote host

    NOTE: By default, this test case will wait 5 seconds after the DHCP client
    has updated before checking that the new gateway is working. This time
    interval can be adjusted using the testvar dhcpGatewayCache.


    References:

    IETF RFC 2131 "Dynamic Host Configuration Protocol"

    https://tools.ietf.org/html/rfc2131
Test Name Synopsis
Verify LAN clients learn additional DNS servers cdrouter_renumber_50 Verify LAN clients learn additional DNS servers


    step 1. Add two more DNS servers to WAN side DHCP server
    step 2. Wait for WAN client to renew lease and learn new DNS servers
    step 3. Initiate LAN client renew
    step 4. Verify LAN client receives two new DNS servers

    NOTE: The router under test must support at least three DNS servers in order
    to pass this test. Some routers will only include one or two DNS servers in
    the DHCP DNS option offered to DHCP clients.


    References:

    IETF RFC 2131 "Dynamic Host Configuration Protocol"

    https://tools.ietf.org/html/rfc2131

renum-pppoe.tcl

WAN side renumbering tests with PPPoE on the WAN

Test Name Synopsis
Verify WAN PPPoE client learns new IP address when WAN server renumbers cdrouter_renum_pppoe_1 Verify WAN PPPoE client learns new IP address when WAN server renumbers


    step 1. Change the wanIspAssignIp address to a new address
    step 2. Terminate the current PPPoE session with the client
    step 3. Verify WAN attempts to establish new PPPoE session
    step 4. Verify LAN client can ping remote host using new address
    step 5. Reset the WAN configuration to original IP address
    step 6. Verify the original PPPoE session has been reestablished

    NOTE: The amount of time the test waits to recover the PPP based
    link can be configured by adjusting the testvar pppRestartTimeout.
    This variable contains the number of milliseconds to wait for
    PPP based protocols to recover. The default is 300000 (300 seconds).


    References:

    IETF RFC 2516 "A Method for Transmitting PPP Over Ethernet (PPPoE)"

    https://tools.ietf.org/html/rfc2516
Test Name Synopsis
Verify existing TCP connections can be reestablished after WAN renumber cdrouter_renum_pppoe_2 Verify existing TCP connections can be reestablished after WAN renumber


    step 1. Initiate TCP connection from LAN to WAN
    step 2. Change the wanIspAssignIp address to a new address
    step 3. Terminate the current PPPoE session with the client
    step 4. Verify WAN attempts to establish new PPPoE session
    step 5. Initiate same TCP connection from LAN to WAN
    step 6. Verify TCP connection works
    step 7. Reset the WAN configuration to original IP address
    step 8. Verify the original PPPoE session has been reestablished

    NOTE: The amount of time the test waits to recover the PPP based
    link can be configured by adjusting the testvar pppRestartTimeout.
    This variable contains the number of milliseconds to wait for
    PPP based protocols to recover. The default is 300000 (300 seconds).


    References:

    IETF RFC 2516 "A Method for Transmitting PPP Over Ethernet (PPPoE)"

    https://tools.ietf.org/html/rfc2516
Test Name Synopsis
Verify LAN clients learn new DNS server during LAN side renew cdrouter_renum_pppoe_3 Verify LAN clients learn new DNS server during LAN side renew


    step 1. Change the DNS server address
    step 2. Terminate PPPoE session
    step 3. Verify PPPoE client starts new session
    step 4. Initiate LAN client renew
    step 5. Verify LAN client receives new DNS server address
    step 6. Reset the WAN configuration
    step 7. Verify the original PPPoE session has been reestablished


    References:

    IETF RFC 2516 "A Method for Transmitting PPP Over Ethernet (PPPoE)"

    https://tools.ietf.org/html/rfc2516
Test Name Synopsis
Verify WAN side switches to new gateway after renumber cdrouter_renum_pppoe_6 Verify WAN side switches to new gateway after renumber


    step 1. Change the wanIspIp address to a new IP address
    step 2. Terminate PPPoE session on WAN interface
    step 3. Verify PPPoE client starts new session
    step 4. Initiate same TCP connection from LAN to WAN
    step 5. Verify TCP connection works
    step 6. Close TCP connection
    step 7. Change the wanIspIp to the original IP address
    step 8. Reset the WAN interface
    step 9. Verify the original PPPoE session has been reestablished


    References:

    IETF RFC 2516 "A Method for Transmitting PPP Over Ethernet (PPPoE)"

    https://tools.ietf.org/html/rfc2516
Test Name Synopsis
Verify LAN clients learn additional DNS server cdrouter_renum_pppoe_50 Verify LAN clients learn additional DNS server


    step 1. Change secondary DNS servers on WAN side
    step 2. Terminate existing PPPoE session
    step 3. Verify PPPoE client starts new PPPoE session
    step 3. Initiate LAN client renew
    step 4. Verify LAN client receives new DNS server
    step 9. Reset the WAN configuration to original IP address
    step 10. Verify the original PPPoE session has been reestablished

    NOTE: The router under test must support at least two DNS servers in order
    to pass this test.


    References:

    IETF RFC 2516 "A Method for Transmitting PPP Over Ethernet (PPPoE)"

    https://tools.ietf.org/html/rfc2516

renum-pptp.tcl

WAN side renumbering tests with PPTP on the WAN

Test Name Synopsis
Verify WAN PPTP client learns new IP address when WAN server renumbers cdrouter_renum_pptp_1 Verify WAN PPTP client learns new IP address when WAN server renumbers


    step 1. Change the wanIspAssignIp address to a new address
    step 2. Terminate the current PPP session with the client
    step 3. Verify WAN attempts to establish new PPP session
    step 4. Verify LAN client can ping remote host using new address
    step 5. Resetting the WAN configuration to original IP address
    step 6. Verify the original PPPTP session has been reestablished

    NOTE: The amount of time the test waits to recover the PPP based
    link can be configured by adjusting the testvar 'pppRestartTimeout'.
    This variable contains the number of milliseconds to wait for
    PPP based protocols to recover. The default is 300000 (300 seconds).


    References:

    IETF RFC 2637 "Point-to-Point Tunneling Protocol (PPTP)"

    https://tools.ietf.org/html/rfc2637
Test Name Synopsis
Verify existing TCP connections can be reestablished after WAN renumber cdrouter_renum_pptp_2 Verify existing TCP connections can be reestablished after WAN renumber


    step 1. Initiate TCP connection from LAN to WAN
    step 2. Change the wanIspAssignIp address to a new address
    step 3. Terminate the current PPP session with the client
    step 4. Verify WAN attempts to establish new PPP session
    step 5. Initiate same TCP connection from LAN to WAN
    step 6. Verify TCP connection works
    step 7. Resetting the WAN configuration to original IP address
    step 8. Verify the original PPPTP session has been reestablished

    NOTE: The amount of time the test waits to recover the PPP based
    link can be configured by adjusting the testvar 'pppRestartTimeout'.
    This variable contains the number of milliseconds to wait for
    PPP based protocols to recover. The default is 300000 (300 seconds).


    References:

    IETF RFC 2637 "Point-to-Point Tunneling Protocol (PPTP)"

    https://tools.ietf.org/html/rfc2637
Test Name Synopsis
Verify LAN clients learn new DNS server during LAN side renew cdrouter_renum_pptp_3 Verify LAN clients learn new DNS server during LAN side renew


    step 1. Change the DNS server address
    step 2. Terminate PPP session
    step 3. Verify PPP client starts new session
    step 4. Initiate LAN client renew
    step 5. Verify LAN client receives new DNS server address
    step 6. Resetting the WAN configuration to original IP address
    step 7. Verify the original PPPTP session has been reestablished


    References:

    IETF RFC 2637 "Point-to-Point Tunneling Protocol (PPTP)"

    https://tools.ietf.org/html/rfc2637
Test Name Synopsis
Verify WAN side switches to new gateway after renumber cdrouter_renum_pptp_6 Verify WAN side switches to new gateway after renumber


    step 1. Initiate TCP connection from LAN to WAN
    step 2. Change the wanIspAssignIp address to a new address
    step 3. Terminate PPP session on WAN interface
    step 4. Verify PPP client starts new session
    step 5. Initiate same TCP connection from LAN to WAN
    step 6. Verify TCP connection works
    step 7. Resetting the WAN configuration to original IP address
    step 8. Verify the original PPPTP session has been reestablished


    References:

    IETF RFC 2637 "Point-to-Point Tunneling Protocol (PPTP)"

    https://tools.ietf.org/html/rfc2637
Test Name Synopsis
Verify LAN clients learn additional DNS server cdrouter_renum_pptp_50 Verify LAN clients learn additional DNS server


    step 1. Change secondary DNS servers on WAN side
    step 2. Terminate existing PPP session
    step 3. Verify PPP client starts new PPP session
    step 3. Initiate LAN client renew
    step 4. Verify LAN client receives new DNS server
    step 5. Resetting the WAN configuration
    step 6. Verify the original PPPTP session has been reestablished

    NOTE: The router under test must support at least two DNS servers in order
    to pass this test.

    References:

    IETF RFC 2637 "Point-to-Point Tunneling Protocol (PPTP)"

    https://tools.ietf.org/html/rfc2637

renum-l2tp.tcl

WAN side renumbering tests with L2TP on the WAN

Test Name Synopsis
Verify WAN L2TP client learns new IP address when WAN server renumbers cdrouter_renum_l2tp_1 Verify WAN L2TP client learns new IP address when WAN server renumbers


    step 1. Change the WanIspAssignIp address to a new address
    step 2. Terminate the current PPP session with the client
    step 3. Verify WAN attempts to establish new PPP session
    step 4. Verify LAN client can ping remote host using new address
    step 5. Reset the WAN configuration back to original IP address
    step 6. Verify the original PPP session has been reestablished

    NOTE: The amount of time the test waits to recover the PPP based
    link can be configured by adjusting the testvar 'pppRestartTimeout'.
    This variable contains the number of milliseconds to wait for
    PPP based protocols to recover. The default is 300000 (300 seconds).


    References:

    IETF RFC 2661 "Layer Two Tunneling Protocol "L2TP""

    https://tools.ietf.org/html/rfc2661
Test Name Synopsis
Verify existing TCP connections can be reestablished after WAN renumber cdrouter_renum_l2tp_2 Verify existing TCP connections can be reestablished after WAN renumber


    step 1. Initiate TCP connection from LAN to WAN
    step 2. Change the wanIspAssignIp address to a new address
    step 3. Terminate the current PPP session with the client
    step 4. Verify WAN attempts to establish new PPP session
    step 5. Initiate same TCP connection from LAN to WAN
    step 6. Verify TCP connection works
    step 7. Reset the WAN configuration back to original IP address
    step 8. Verify the original PPP session has been reestablished

    NOTE: The amount of time the test waits to recover the PPP based
    link can be configured by adjusting the testvar 'pppRestartTimeout'.
    This variable contains the number of milliseconds to wait for
    PPP based protocols to recover. The default is 300000 (300 seconds).


    References:

    IETF RFC 2661 "Layer Two Tunneling Protocol "L2TP""

    https://tools.ietf.org/html/rfc2661
Test Name Synopsis
Verify LAN clients learn new DNS server during LAN side renew cdrouter_renum_l2tp_3 Verify LAN clients learn new DNS server during LAN side renew


    step 1. Change the DNS server address
    step 2. Terminate PPP session
    step 3. Verify PPP client starts new session
    step 4. Initiate LAN client renew
    step 5. Verify LAN client receives new DNS server address
    step 6. Reset the WAN configuration
    step 7. Verify the original PPP session has been reestablished


    References:

    IETF RFC 2661 "Layer Two Tunneling Protocol "L2TP""

    https://tools.ietf.org/html/rfc2661
Test Name Synopsis
Verify WAN side switches to new gateway after renumber cdrouter_renum_l2tp_6 Verify WAN side switches to new gateway after renumber


    step 1. Initiate TCP connection from LAN to WAN
    step 2. Change the wanIspAssignIp address to a new address
    step 3. Terminate PPP session on WAN interface
    step 4. Verify PPP client starts new session
    step 5. Initiate same TCP connection from LAN to WAN
    step 6. Verify TCP connection works
    step 7. Reset the WAN configuration back to original IP address
    step 8. Verify the original PPP session has been reestablished


    References:

    IETF RFC 2661 "Layer Two Tunneling Protocol "L2TP""

    https://tools.ietf.org/html/rfc2661
Test Name Synopsis
Verify LAN clients learn additional DNS server cdrouter_renum_l2tp_50 Verify LAN clients learn additional DNS server


    step 1. Change secondary DNS servers on WAN side
    step 2. Terminate existing PPP session
    step 3. Verify PPP client starts new PPP session
    step 3. Initiate LAN client renew
    step 4. Verify LAN client receives new DNS server
    step 5. Reset the WAN configuration back to original IP address
    step 6. Verify the original PPP session has been reestablished

    NOTE: The cable/dsl router must support at least 2 DNS servers inorder
    to pass this test.


    References:

    IETF RFC 2661 "Layer Two Tunneling Protocol "L2TP""

    https://tools.ietf.org/html/rfc2661

icmp.tcl

ICMP tests for generating various ICMP packets and NAPT of ICMP data

Test Name Synopsis
Verify ICMP Echo Requests (ping) work through router cdrouter_icmp_1 Verify ICMP Echo Requests (ping) work through router


    step 1. Initiate an outbound ICMP Echo Request (ping) to a WAN destination
    step 2. Verify ICMP Echo Reply (ping response) is received
Test Name Synopsis
Verify ICMP Echo Requests from multiple LAN clients work through router cdrouter_icmp_2 Verify ICMP Echo Requests from multiple LAN clients work through router


    step 1. Configure additional lan host
    step 2. Initiate an outbound ICMP Echo Request to a WAN destination from host 1
    step 3. Verify ICMP Echo Reply is received
    step 4. Initiate an outbound ICMP Echo Request to a WAN destination from host 2
    step 5. Verify ICMP Echo Reply is received
Test Name Synopsis
Verify ICMP Echo Requests to router's LAN side IP address from the LAN cdrouter_icmp_5 Verify ICMP Echo Requests to router’s LAN side IP address from the LAN


    step 1. Initiate an outbound ICMP Echo Request to the router's LAN side IP address
    step 2. Verify ICMP Echo Reply is received
Test Name Synopsis
Verify ICMP Echo Requests to router's WAN side IP address from the LAN cdrouter_icmp_6 Verify ICMP Echo Requests to router’s WAN side IP address from the LAN


    step 1. Initiate an outbound ICMP Echo Request to the router's WAN side IP address
    step 2. Verify ICMP Echo Reply is received
Test Name Synopsis
Verify ICMP Echo Requests to router's WAN side IP address from the WAN cdrouter_icmp_7 Verify ICMP Echo Requests to router’s WAN side IP address from the WAN


    step 1. Initiate an outbound ICMP Echo Request to the router's WAN side IP
            address from the WAN
    step 2. Verify ICMP Echo Reply is received

    Note: the testvar wanPingRespond is used to determine if pinging the
    WAN-side of the DUT is expected to work or not.  It defaults to "no" which
    signifies that the device will not respond to pings on its WAN interface.
Test Name Synopsis
Verify ICMP Time Exceeded packet is sent when incoming UDP TTL is 1 cdrouter_icmp_10 Verify ICMP Time Exceeded packet is sent when incoming UDP TTL is 1


    step 1. Set the IP TTL of outbound packets to 1
    step 2. Forward an UDP packet from a LAN client to the WAN
    step 3. Verify ICMP Time Exceeded packet is sent to initial LAN host
    step 4. Verify the ICMP Time Exceeded packet contains the IP header of the
            original packet


    References:

    IETF RFC 792 "INTERNET CONTROL MESSAGE PROTOCOL"

    https://tools.ietf.org/html/rfc792
Test Name Synopsis
Verify NAT translates IP address in ICMP Time Exceeded packet cdrouter_icmp_11 Verify NAT translates IP address in ICMP Time Exceeded packet


    step 1. Forward a UDP packet from a LAN client to the WAN
    step 2. Verify packet is received on WAN side
    step 3. Send ICMP Time Exceeded packet with original UDP packet as data
    step 4. Verify ICMP Time Exceeded packet is received by LAN host
    step 5. Verify that the contents of the original IP packet included
            in the ICMP Time Exceeded packet are properly translated by NAT
    step 6. The following fields are verified:

            IP length                    (length should not change)
            IP ID                        (unchanged)
            IP source address            (translated by NAT)
            IP destination address       (unchanged)
            IP checksum                  (recomputed by NAT)
            UDP source port              (translated by NAT)
            UDP destination port         (unchanged)

    NOTE: If an implementation changes the IPv4 ID field of an outgoing
    IPv4 packet, the returned IP header may contain a different ID field
    than the original packet. The IP header ID field verification can be
    skipped by configuring:


    References:

    IETF RFC 1631 "The IP Network Address Translator (NAT)" Section 3.3: Header Manipulations

    If an ICMP message is passed through NAT, it may require two address
    modifications and three checksum modifications. This is because most ICMP
    messages contain part of the original IP packet in the body.

    https://tools.ietf.org/html/rfc1631#section-3.3
Test Name Synopsis
Verify NAT translates IP address in ICMP Destination Unreachable with code port unreachable cdrouter_icmp_12 Verify NAT translates IP address in ICMP Destination Unreachable with code port unreachable


    step 1. Forward a UDP packet from a LAN client to the WAN
    step 2. Verify packet is received on WAN side
    step 3. Send ICMP Destination Unreachable packet with original UDP packet as data
    step 4. Verify ICMP Destination Unreachable is received by LAN host
    step 5. Verify that the contents of the original IP packet included
            in the ICMP Destination Unreachable message are translated by NAT
    step 6. The following fields are verified:

            IP length                    (length should not change)
            IP ID                        (unchanged)
            IP source address            (translated by NAT)
            IP destination address       (unchanged)
            IP checksum                  (recomputed by NAT)
            UDP source port              (translated by NAT)
            UDP destination port         (unchanged)

    NOTE: If an implementation changes the IPv4 ID field of an outgoing
    IPv4 packet, the returned IP header may contain a different ID field
    than the original packet. The IP header ID field verification can be
    skipped by configuring:


    References:

    IETF RFC 1631 "The IP Network Address Translator (NAT)" Section 3.3: Header Manipulations

    If an ICMP message is passed through NAT, it may require two address
    modifications and three checksum modifications. This is because most ICMP
    messages contain part of the original IP packet in the body.

    https://tools.ietf.org/html/rfc1631#section-3.3
Test Name Synopsis
Verify NAT translates IP address in ICMP Destination Unreachable with code fragmentation needed cdrouter_icmp_13 Verify NAT translates IP address in ICMP Destination Unreachable with code fragmentation needed


    step 1. Forward a UDP packet from a LAN client to the WAN with IPv4 DF=1
    step 2. Verify packet is received on WAN side
    step 3. Send ICMP Destination Unreachable with code 4 Fragmentation needed and
            DF set packet with original UDP packet as data
    step 4. Verify ICMP Destination Unreachable is received by LAN host
    step 5. Verify that the contents of the original IP packet included
            in the ICMP Destination Unreachable message are translated by NAT
    step 6. The following fields are verified:

            IP length                    (length should not change)
            IP ID                        (unchanged)
            IP source address            (translated by NAT)
            IP destination address       (unchanged)
            IP checksum                  (recomputed by NAT)
            UDP source port              (translated by NAT)
            UDP destination port         (unchanged)

    NOTE: If an implementation changes the IPv4 ID field of an outgoing
    IPv4 packet, the returned IP header may contain a different ID field
    than the original packet. The IP header ID field verification can be
    skipped by configuring:


    References:

    IETF RFC 1631 "The IP Network Address Translator (NAT)" Section 3.3: Header Manipulations

    If an ICMP message is passed through NAT, it may require two address
    modifications and three checksum modifications. This is because most ICMP
    messages contain part of the original IP packet in the body.

    https://tools.ietf.org/html/rfc1631#section-3.3
Test Name Synopsis
Verify NAT translates IP address in outbound ICMP Destination Unreachable with code port unreachable cdrouter_icmp_14 Verify NAT translates IP address in outbound ICMP Destination Unreachable with code port unreachable


    step 1. Forward a UDP packet from LAN client to the WAN
    step 2. Verify packet is received on WAN side
    step 3. Forward a UDP packet from the WAN to the LAN client
    step 4. Send ICMP Destination Unreachable packet with original UDP packet as data
    step 5. Verify ICMP Destination Unreachable is received by WAN host
    step 6. Verify that the contents of the original IP packet included
            in the ICMP Destination Unreachable message are translated by NAT
    step 7. The following fields are verified:

            IP length                    (length should not change)
            IP ID                        (unchanged)
            IP source address            (unchanged)
            IP destination address       (translated by NAT)
            IP checksum                  (recomputed by NAT)
            UDP source port              (unchanged)
            UDP destination port         (translated by NAT)

    NOTE: If an implementation changes the IPv4 ID field of an outgoing
    IPv4 packet, the returned IP header may contain a different ID field
    than the original packet. The IP header ID field verification can be
    skipped by configuring:


    References:

    IETF RFC 1631 "The IP Network Address Translator (NAT)" Section 3.3: Header Manipulations

    If an ICMP message is passed through NAT, it may require two address
    modifications and three checksum modifications. This is because most ICMP
    messages contain part of the original IP packet in the body.

    https://tools.ietf.org/html/rfc1631#section-3.3
Test Name Synopsis
Verify router supports Path MTU Discovery over WAN interface cdrouter_icmp_20 Verify router supports Path MTU Discovery over WAN interface


    step 1. Send 1500 byte UDP packet with IP Don't Fragment Flag = 1
    step 2. Check for an ICMP Destination Unreachable packet with code = 4
    step 3. Repeat process 2 more times until until an ICMP Destination
            Unreachable packet is received, or all 3 packets are sent
    step 4. If an ICMP Destination Unreachable packet was sent, verify that
            the code value is 4 and verify the MTU value in the ICMP header
    step 5. Reduce the UDP packet size by 1 byte and repeat the process
            until no ICMP Destination Unreachable packet is sent
    step 6. When a packet size is found that does not generate an
            ICMP Destination Unreachable message, verify packets can be
            forwarded using this packet size
    step 7. Verify the final MTU size is the same as the MTU size
            reported in the ICMP Destination Unreachable packet

    NOTE: This test starts with an initial MTU of 1500. If the WAN interface
    already supports this MTU (DHCP), then this test will pass without
    exercising the real part of Path MTU Discovery.

    NOTE: Some devices rate limit the number of ICMP packets that may be sent.
    This test will send 3 UDP packets over a 15 second window in order to
    generate an ICMP Destination Unreachable packet. If the router under test
    uses rate limiting on ICMP packets, it must allow at least one ICMP packet
    every 10 seconds.


    References:

    IETF RFC 1191 "Path MTU Discovery"

    https://tools.ietf.org/html/rfc1191
Test Name Synopsis
Verify ICMP Time Exceeded packet is sent when incoming TCP TTL is 1 cdrouter_icmp_30 Verify ICMP Time Exceeded packet is sent when incoming TCP TTL is 1


    step 1. Set the IP TTL of outbound packets to 1
    step 2. Forward a TCP Syn packet from a LAN client to the WAN
    step 3. Verify ICMP Time Exceeded packet is sent to initial LAN host
    step 4. Verify the ICMP Time Exceeded packet contains the IP header of the
            original packet

    Additional Information on TCP Traceroute:

    https://www.freebsd.org/cgi/man.cgi?query=tcptraceroute


    References:

    IETF RFC 792 "INTERNET CONTROL MESSAGE PROTOCOL"

    https://tools.ietf.org/html/rfc792

firewall.tcl

Firewall tests including port scans

Test Name Synopsis
Inbound TCP connections to public side HTTP port are blocked cdrouter_firewall_1 Inbound TCP connections to public side HTTP port are blocked


    step 1. Initiate a WAN TCP connection to the router's public IP at port 80
    step 2. Verify the connection is not established
    step 3. Initiate a WAN TCP connection to the router's private IP at port 80
    step 4. Verify the connection is not established
    step 5. Initiate a LAN TCP connection to the router's private IP at port 80
    step 6. Verify the connection is established
Test Name Synopsis
Inbound TCP connections to LAN hosts are blocked cdrouter_firewall_2 Inbound TCP connections to LAN hosts are blocked


    step 1. Initiate a WAN TCP connection to a LAN client address
    step 2. Verify that the TCP connection is not established and that the DUT
            drops the initial TCP Syn packet
Test Name Synopsis
DHCP server ignores DHCP client request from the WAN cdrouter_firewall_10 DHCP server ignores DHCP client request from the WAN


    step 1. Start new DHCP client on WAN interface
    step 2. Verify new client does not obtain lease for IP address
Test Name Synopsis
DNS requests from the WAN are ignored by DNS proxy or relay cdrouter_firewall_12 DNS requests from the WAN are ignored by DNS proxy or relay


    step 1. Initiate a DNS request from the LAN client to a known host
    step 2. Verify a valid DNS response is received
    step 3. Initiate a DNS request from remoteHost to the router's WAN IP
            for the same host name
    step 4. Verify that a DNS response is not received

    NOTE: This test case will be skipped if the router has a UDP
    virtual service configured on the DNS port 53.
Test Name Synopsis
Perform TCP port scan test on router's public WAN IP address cdrouter_firewall_100 Perform TCP port scan test on router’s public WAN IP address


    step 1. Send ARP Replies for all LAN hosts and static LAN hosts
    step 2. Send TCP SYN packets from WAN to each port in the port scan range
    step 3. Verify packets are not forwarded to LAN
    step 4. Verify the router does not accept the TCP connection or
            send a RST for the TCP connection unless the port has
            been configured as an open or closed port
    step 5. Do not flag ports that have port forwarding configured

    NOTE: The speed of the scan can be adjusted using the 'portScanDelay'
    testvar. By default, it is set to 1. The value indicates the number of
    milliseconds to wait in between the sending of each packet:

    testvar portScanDelay 100

    NOTE: The list of closed and open ports can be configured using the
    'firewallTcpClosedPorts' and 'firewallTcpOpenPorts' testvars:

    testvar firewallTcpClosedPorts "2323"
    testvar firewallTcpOpenPorts "22 443"
Test Name Synopsis
Perform UDP port scan test on router's public WAN IP address cdrouter_firewall_101 Perform UDP port scan test on router’s public WAN IP address


    step 1. Send ARP replys for all LAN hosts and static LAN hosts
    step 2. Send UDP packets from WAN to each port in the port scan range
    step 3. Verify packets are not forwarded to LAN
    step 4. Verify no ICMP Destination Unreachable messages or UDP Echo Replies
            are received unless UDP port is configured as an open or close port
    step 5. Do not flag ports that have port forwarding configured

    NOTE: A warning will still be issued if a packet is forwarded if
    it has been configured as a virtual service.

    NOTE: The speed of the scan can be adjusted using the 'portScanDelay'
    testvar. By default, it is set to 1. The value indicates the number of
    milliseconds to wait in between the sending of each packet:

    testvar portScanDelay 100

    NOTE: The list of closed and open ports can be configured using the
    'firewallUdpClosedPorts' and 'firewallUdpOpenPorts' testvars:

    testvar firewallUdpClosedPorts "2323"
    testvar firewallUdpOpenPorts "22 443"
Test Name Synopsis
Perform TCP fragmentation port scan test on router's public WAN IP address cdrouter_firewall_110 Perform TCP fragmentation port scan test on router’s public WAN IP address


    step 1. Send ARP Replies for all LAN hosts and static LAN hosts
    step 2. Set the IPv4 fragmentation size to 28 bytes
    step 3. Send TCP SYN packets from WAN to each port in the port scan range
    step 4. Verify packets are not forwarded to LAN
    step 5. Verify the router does not accept the TCP connection or
            send a RST for the TCP connection unless the port has
            been configured as an open or closed port
    step 6. Do not flag ports that have port forwarding configured

    NOTE: A warning will still be issued if a packet is forwarded if
    it has been configured as a virtual service.

    NOTE: The speed of the scan can be adjusted using the 'portScanDelay'
    testvar. By default, it is set to 1. The value indicates the number of
    milliseconds to wait in between the sending of each packet:

    testvar portScanDelay 100

    NOTE: The list of closed and open ports can be configured using the
    'firewallTcpClosedPorts' and 'firewallTclOpenPorts' testvars:

    testvar firewallTcpClosedPorts "2323"
    testvar firewallTcpOpenPorts "22 443"
Test Name Synopsis
Verify firewall blocks/accepts piggyback TCP SYN connections from WAN cdrouter_firewall_301 Verify firewall blocks/accepts piggyback TCP SYN connections from WAN


    step 1. Send a TCP SYN from LAN host to IP address on WAN
    step 2. Send a TCP SYN from the WAN host to the original LAN host
            using the same TCP source port
    step 3. If the router blocks simultaneous TCP SYNs through NAT
            (testvar 'natSimultaneousTcp' is set to no), verify the TCP
            SYN from the WAN is dropped

            OR

            If the router supports simultaneous TCP SYN through NAT
            (testvar 'natSimultaneousTcp' is set to yes), verify the TCP
            SYN from the WAN is forwarded to the LAN

    step 4. Repeat step 1 using new TCP port numbers
    step 5. Send a TCP SYN from the WAN host to the original LAN host
            using a new TCP source port
    step 6. Verify the TCP SYN from the WAN is dropped

    NOTE: This test verifies that the firewall only allows TCP packets
    for established TCP sessions. If simultaneous TCP open is supported through
    NAT, this test will verify that TCP SYN packets from the WAN are forwarded
    to the LAN. If simultaneous TCP open through NAT is not supported, the
    test will verify that no TCP SYN packets are allowed from the WAN to the
    LAN for sessions that have been initiated from the LAN.

    NOTE: This test also verifies that the NAT implementation is
    Port Restricted and that returning packets must have the same TCP
    source used to created the NAT binding.

    NOTE: Steps 4-6 of this test will be skipped if natMode is not
    "port-restricted".
Test Name Synopsis
Verify outbound packets are not forwarded if the source address is not a prefix of the interior network cdrouter_firewall_508 Verify outbound packets are not forwarded if the source address is not a prefix of the interior network


    step 1. Create a new LAN client
    step 2. Assign an address outside of lanIp/lanMask
    step 3. Send traffic to the WAN from the martian source address
    step 4. Verify traffic is not forwarded
    step 5. Assign an address from the private-use address block outside lanIp/lanMask
    step 6. Send traffic to the WAN from the martian source address
    step 7. Verify traffic is not forwarded

    NOTE: This test ensures that the random martian address assigned
    to the LAN client in step 2 is outside of lanIp/lanMask, does not
    match any static routes configured with staticRouteLanNetwork and
    is not within any of the following reserved IP ranges: 0.0.0.0/8,
    127.0.0.0/8, 169.254.0.0/16, 192.88.99.0/24, 224.0.0.0/4,
    240.0.0.0/4, 255.255.255.255/32.


    References:

    IETF RFC 3704 "Ingress Filtering for Multihomed Networks"

    https://tools.ietf.org/html/rfc3704

firewall-out.tcl

Firewall tests for limiting outbound access to services

Test Name Synopsis
Verify CPE does not forward outbound TCP packets to ports that have been administratively blocked cdrouter_firewall_outbound_1 Verify CPE does not forward outbound TCP packets to ports that have been administratively blocked


    step 1. Configure the DUT to block outbound access from the LAN to specific TCP ports
    step 2. Send a TCP SYN packet from the LAN to each blocked port
    step 3. Verify the DUT does not forward TCP packets to any of the blocked ports

    The firewallOutBlockedTcpPorts testvar is used to determine the list of TCP ports
    that the DUT has been configured to block access to.
Test Name Synopsis
Verify CPE does not forward outbound UDP packets to ports that have been administratively blocked cdrouter_firewall_outbound_2 Verify CPE does not forward outbound UDP packets to ports that have been administratively blocked


    step 1. Configure the DUT to block outbound access from the LAN to specific UDP ports
    step 2. Send a UDP packet from the LAN to each blocked port
    step 3. Verify the DUT does not forward UDP packets to any of the blocked ports

    The firewallOutBlockedUdpPorts testvar is used to determine the list of UDP ports
    that the DUT has been configured to block access to.
Test Name Synopsis
Verify CPE does not forward outbound IP packets for protocols that have been administratively blocked cdrouter_firewall_outbound_3 Verify CPE does not forward outbound IP packets for protocols that have been administratively blocked


    step 1. Configure the DUT to block outbound access from the LAN to specific IP Protocol types
    step 2. Send an IP packet from the LAN to the WAN for each blocked IP protocol
    step 3. Verify the DUT does not forward any of the blocked IP protocols

    The firewallOutBlockedIpProtos testvar is used to determine the list of IP Protocol types
    that the DUT has been configured to block access to.

apps.tcl

Application layer gateway (ALG) tests for FTP, DNS, TFTP, SMTP, POP3, MSN, RTSP and others

Test Name Synopsis
Verify router supports the active mode FTP PORT command cdrouter_app_2 Verify router supports the active mode FTP PORT command


    step 1. Initiate an outbound tcp connection to FTP server port
    step 2. Verify the connection is established
    step 3. Send the FTP port command using all upper case letters
    step 4. Verify router translates port command using router's address
    step 5. Initiate inbound TCP connection for FTP data connection
    step 6. Verify inbound TCP connection is established
    step 7. Close both connections


    References:

    IETF RFC 959 "FILE TRANSFER PROTOCOL (FTP)" Section 5.3: COMMANDS

    https://tools.ietf.org/html/rfc959#section-5.3
Test Name Synopsis
Multiple FTP connections using the same source port cdrouter_app_3 Multiple FTP connections using the same source port


    step 1. Set up second host using same source ports as original host
    step 2. Initiate an outbound TCP connection to FTP server port
    step 3. Verify the connection is established
    step 4. Build the FTP PORT command for the LAN client
    step 5. Start up second host on LAN
    step 6. Initate outbound connection from second LAN host to FTP server
            using same source port as FTP PORT command
    step 7. Send the FTP PORT command on first connection
    step 8. Verify router translates FTP PORT command using router's address
    step 9. Initiate inbound TCP connection for FTP data connection
    step 10. Verify inbound TCP connection is established
    step 11. Close both connections


    References:

    IETF RFC 959 "FILE TRANSFER PROTOCOL (FTP)" Section 5.3: COMMANDS

    https://tools.ietf.org/html/rfc959#section-5.3
Test Name Synopsis
Connections opened for FTP PORT command check for correct IPv4 address cdrouter_app_10 Connections opened for FTP PORT command check for correct IPv4 address


    step 1. Initiate an outbound FTP connection to FTP server port
    step 2. Verify the connection is established
    step 3. Send the FTP port command
    step 4. Verify router translates port command using router's address
    step 5. From new host, attempt inbound TCP connection for FTP data connection
    step 6. Verify inbound TCP connection is not established
    step 7. Close both connections


    References:

    IETF RFC 959 "FILE TRANSFER PROTOCOL (FTP)" Section 5.3: COMMANDS

    https://tools.ietf.org/html/rfc959#section-5.3
Test Name Synopsis
Verify FTP PORT command succeeds when TCP segment is retransmitted cdrouter_app_11 Verify FTP PORT command succeeds when TCP segment is retransmitted


    step 1. Initiate an outbound TCP connection to FTP server port
    step 2. Verify the connection is established
    step 3. Configure WAN side server to ignore TCP packets
    step 4. Send the FTP PORT command using all upper case letters
    step 5. Wait five seconds and retransmit last TCP segment
    step 6. Verify router translates port command using router's address
    step 5. Initiate inbound TCP connection for FTP data connection
    step 7. Verify inbound TCP connection is established
    step 8. Close both connections


    References:

    IETF RFC 959 "FILE TRANSFER PROTOCOL (FTP)" Section 5.3: COMMANDS

    https://tools.ietf.org/html/rfc959#section-5.3
Test Name Synopsis
Verify FTP PORT translation stays the same when TCP segment is retransmitted cdrouter_app_12 Verify FTP PORT translation stays the same when TCP segment is retransmitted


    step 1. Initiate an outbound TCP connection to FTP server port
    step 2. Verify the connection is established
    step 3. Configure WAN side server to ignore TCP packets
    step 4. Send the FTP port command
    step 5. Verify the FTP PORT command is translated
    step 6. Wait five seconds and retransmit last TCP segment
    step 7. Verify the FTP PORT command is translated to the same ports
    step 8. Initiate inbound TCP connection for FTP data connection
    step 9. Verify inbound TCP connection is established
    step 10. Close both connections


    References:

    IETF RFC 959 "FILE TRANSFER PROTOCOL (FTP)" Section 5.3: COMMANDS

    https://tools.ietf.org/html/rfc959#section-5.3
Test Name Synopsis
Verify router closes public ports opened with the FTP PORT command cdrouter_app_14 Verify router closes public ports opened with the FTP PORT command


    step 1. Initiate an outbound TCP connection to FTP server port
    step 2. Verify the connection is established
    step 3. Send the FTP PORT command using all upper case letters
    step 4. Verify router translates FTP PORT command using router's address
    step 5. Close the outbound TCP connection
    step 6. Wait ftpPortTimeout seconds for inbound port to be closed
    step 7. Initiate inbound TCP connection for FTP data connection
    step 8. Verify inbound TCP connection is blocked

    NOTE: The FTP PORT command will cause the router to open inbound ports for
    incoming FTP data connections. When the FTP control session is closed, the
    router should also close any inbound ports that have been opened.

    NOTE: The FTP PORT clean up interval can be configued using the
    ftpPortTimeout testvar.


    References:

    IETF RFC 959 "FILE TRANSFER PROTOCOL (FTP)" Section 5.3: COMMANDS

    https://tools.ietf.org/html/rfc959#section-5.3
Test Name Synopsis
Verify router supports the active mode FTP EPRT command cdrouter_app_15 Verify router supports the active mode FTP EPRT command


    step 1. Initiate an outbound TCP connection to FTP server port
    step 2. Verify the connection is established
    step 3. Send the FTP EPRT command using all upper case letters
    step 4. Verify router translates EPRT command using router's address
    step 5. Initiate inbound TCP connection for FTP data connection
    step 6. Verify inbound TCP connection is established
    step 7. Close both connections


    References:

    IETF RFC 2428 "FTP Extensions for IPv6 and NATs" Section 2: The EPRT Command

    https://tools.ietf.org/html/rfc2428#section-2
Test Name Synopsis
Verify translation of EPRT command accepts non default delimiters cdrouter_app_16 Verify translation of EPRT command accepts non default delimiters


    step 1. Initiate an outbound TCP connection to FTP server port
    step 2. Verify the connection is established
    step 3. Send the FTP EPRT command using delimiter character '~'
    step 4. Verify router translates EPRT command using router's address
    step 5. Initiate inbound TCP connection for FTP data connection
    step 6. Verify inbound TCP connection is established
    step 7. Close both connections

    NOTE: The FTP ALG on the device may change the delimiter back to the
    default delimiter character '|'.


    References:

    IETF RFC 2428 "FTP Extensions for IPv6 and NATs" Section 2: The EPRT Command

    https://tools.ietf.org/html/rfc2428#section-2
Test Name Synopsis
Verify router supports the passive mode FTP PASV command cdrouter_app_17 Verify router supports the passive mode FTP PASV command


    step 1. Initiate an outbound tcp connection to FTP server port
    step 2. Verify the connection is established
    step 3. Send the FTP PASV command using all upper case letters
    step 4. Verify PASV command is received on the WAN
    step 5. Send PASV response that includes server IP and port
    step 6. Verify the server IP and port is not translated on the LAN
    step 7. Initiate outbound TCP connection for FTP data connection
    step 8. Verify inbound TCP connection is established
    step 9. Close both connections


    References:

    IETF RFC 959 "FILE TRANSFER PROTOCOL (FTP)" Section 5.3: COMMANDS

    https://tools.ietf.org/html/rfc959#section-5.3

    IETF RFC 1123 "Requirements for Internet Hosts -- Application and Support" Section 4.1.2.6: PASV Command: RFC-959 Section 4.1.2

    A server-FTP MUST implement the PASV command.

    If multiple third-party transfers are to be executed during
    the same session, a new PASV command MUST be issued before
    each transfer command, to obtain a unique port pair.

    IMPLEMENTATION:
         The format of the 227 reply to a PASV command is not
         well standardized.  In particular, an FTP client cannot
         assume that the parentheses shown on page 40 of RFC 959
         will be present (and in fact, Figure 3 on page 43 omits
         them).  Therefore, a User-FTP program that interprets
         the PASV reply must scan the reply for the first digit
         of the host and port numbers.

         Note that the host number h1,h2,h3,h4 is the IP address
         of the server host that is sending the reply, and that
         p1,p2 is a non-default data transfer port that PASV has
         assigned.

    https://tools.ietf.org/html/rfc1123#section-4.1.2.6
Test Name Synopsis
Verify router supports the passive mode FTP EPSV command cdrouter_app_18 Verify router supports the passive mode FTP EPSV command


    step 1. Initiate an outbound tcp connection to FTP server port
    step 2. Verify the connection is established
    step 3. Send the FTP EPSV command using all upper case letters
    step 4. Verify EPSV command is received on the WAN
    step 5. Send EPSV response that includes server IP and port
    step 6. Verify the server IP and port is not translated on the LAN
    step 7. Initiate outbound TCP connection for FTP data connection
    step 8. Verify inbound TCP connection is established
    step 9. Close both connections


    References:

    IETF RFC 2428 "FTP Extensions for IPv6 and NATs"

    https://tools.ietf.org/html/rfc2428
Test Name Synopsis
Verify DNS queries to router are forwarded to real DNS server cdrouter_app_20 Verify DNS queries to router are forwarded to real DNS server


    step 1. Initiate a DNS query to the router's LAN ip address
    step 2. Verify the query is received by real DNS server on the WAN side
    step 3. The query may be received by the primary or backup DNS server
    step 4. Send a return response back to LAN
    step 5. Verify the response is received by the LAN client

    NOTE: The router must support some type of DNS relay or proxy to pass this
    test case.
Test Name Synopsis
Verify DNS queries sent to primary DNS server cdrouter_app_21 Verify DNS queries sent to primary DNS server


    step 1. Initiate a DNS query to the primary DNS server from the LAN
    step 2. Verify the query is received by real DNS server on the WAN side
    step 3. Depending on the implementation, the query may be received by
            the primary or backup DNS server
    step 4. Send a response to the LAN
    step 5. Verify the response is received by the LAN client
Test Name Synopsis
Verify DNS queries sent to backup DNS server cdrouter_app_22 Verify DNS queries sent to backup DNS server


    step 1. Initiate a DNS query to the backup DNS server from the LAN
    step 2. Verify the query is received by real DNS server on the WAN side
    step 3. Depending on the implementation, the query may be received by
            the primary or backup DNS server
    step 4. Send a response to the LAN
    step 5. Verify the response is received by the LAN client.
Test Name Synopsis
Verify DNS relay on router fails over to backup DNS server cdrouter_app_25 Verify DNS relay on router fails over to backup DNS server


    step 1. Configure the primary DNS server to ignore all DNS requests
    step 2. Initiate a DNS query to the router's LAN ip address
    step 3. Verify the query is received by the backup DNS server on the WAN side
    step 4. Send a response back to the LAN
    step 5. Verify the response is received by the LAN client

    NOTE: Some routers will alternate sending DNS queries between the configured
    or learned DNS servers. Other routers will send queries to all of the
    configured or learned DNS servers at the same time. This test will continue
    to send DNS queries for up to 120 seconds by default. This time interval may
    be changed by configuring the testvar dnsRelayFailover to the number of
    seconds to wait before failover should happen.
Test Name Synopsis
Verify DNS relay on router fails over to backup DNS server (using same ID for retransmissions) cdrouter_app_26 Verify DNS relay on router fails over to backup DNS server (using same ID for retransmissions)


    step 1. Configure the primary DNS server to ignore all DNS requests
    step 2. Initiate a DNS query to the router's LAN ip address
    step 3. Verify the query is received by the backup DNS server on the WAN side
    step 4. Send a response back to the LAN
    step 5. Verify the response is received by the LAN client

    NOTE: Some routers will alternate sending DNS queries between the configured
    or learned DNS servers. Other routers will send queries to all of the
    configured or learned DNS servers at the same time. This test will continue
    to send DNS queries for up to 120 seconds by default. This time interval may
    be changed by configuring the testvar dnsRelayFailover to the number of
    seconds to wait before failover should happen.

    NOTE: For this test, the LAN client will use the same DNS transaction ID for
    all DNS query retransmissions.
Test Name Synopsis
Verify DNS relay on router fails over to third DNS server cdrouter_app_27 Verify DNS relay on router fails over to third DNS server


    step 1. Configure the primary and secondary DNS servers to ignore all DNS requests
    step 2. Initiate a DNS query to the router's LAN ip address
    step 3. Verify the query is received by the third DNS server on the WAN side
    step 4. Send a response back to the LAN
    step 5. Verify the response is received by the LAN client

    NOTE: Some routers will alternate sending DNS queries between the configured
    or learned DNS servers. Other routers will send queries to all of the
    configured or learned DNS servers at the same time. This test will continue
    to send DNS queries for up to 120 seconds by default. This time interval may
    be changed by configuring the testvar dnsRelayFailover to the number of
    seconds to wait before failover should happen.
Test Name Synopsis
Verify DNS relay on router fails over to third DNS server (using same ID for retransmissions) cdrouter_app_28 Verify DNS relay on router fails over to third DNS server (using same ID for retransmissions)


    step 1. Configure the primary and secondary DNS server to ignore all DNS requests
    step 2. Initiate a DNS query to the router's LAN ip address
    step 3. Verify the query is received by the backup DNS server on the WAN side
    step 4. Send a response back to the LAN
    step 5. Verify the response is received by the LAN client

    NOTE: Some routers will alternate sending DNS queries between the configured
    or learned DNS servers. Other routers will send queries to all of the
    configured or learned DNS servers at the same time. This test will continue
    to send DNS queries for up to 120 seconds by default. This time interval may
    be changed by configuring the testvar dnsRelayFailover to the number of
    seconds to wait before failover should happen.

    NOTE: For this test, the LAN client will use the same DNS transaction ID for
    all DNS query retransmissions.
Test Name Synopsis
Verify DNS queries sent directly to a 3rd party DNS server cdrouter_app_30 Verify DNS queries sent directly to a 3rd party DNS server


    step 1. Create a new DNS server on the WAN with a unique IP address
    step 2. Initiate a DNS query to to the new DNS server
    step 3. Verify the query is received by the DNS server on the WAN side
    step 4. Send a response back to the LAN
    step 5. Verify the response is received by the LAN client

    NOTE: This test verifies that DNS clients and DNS tools running on a LAN
    client can initiate DNS queries to a third party DNS server that has not
    been configured on the router nor learned by the router.

    NOTE: If the testvar dnsCaptive is set to yes, the test will expect DNS
    queries to be sent to the original WAN side DNS servers and not the 3rd
    party DNS server.
Test Name Synopsis
Verify router supports wrapping of TCP sequence number for FTP transfers cdrouter_app_100 Verify router supports wrapping of TCP sequence number for FTP transfers


    step 1. Set the initial TCP sequence number to 0xfffffffc
    step 2. Initiate an outbound TCP connection to FTP server port
    step 3. Verify the connection is established
    step 4. Send the FTP PORT command using all upper case letters
    step 5. Verify router translates FTP PORT command using router's address
    step 6. Verify the sequence number has correctly wrapped
    step 7. Initiate inbound TCP connection for FTP data connection
    step 8. Verify inbound TCP connection is established
    step 9. Close both connections
    step 10. Repeat for initial TCP sequence numbers 0xfffffffc - 0x00000001
Test Name Synopsis
Verify HTTPS session through the router cdrouter_app_110 Verify HTTPS session through the router


    step 1. Initiate an outbound TCP connection to HTTPS server
    step 2. Verify the TCP connection is established
    step 3. Verify the IPv4 source address on the WAN side is the router's address
    step 4. Verify the TLS session is established
    step 5. Send HTTPS GET request to server
    step 6. Verify HTTPS response is received
    step 7. Close TCP connection from LAN side
Test Name Synopsis
Verify SMTP session through the router cdrouter_app_120 Verify SMTP session through the router


    step 1. Initiate an outbound TCP connection to SMTP server
    step 2. Send email message using SMTP server
    step 3. Verify SMTP server correctly receives email message
    step 4. Close SMTP session from LAN side


    References:

    IETF RFC 821 "SIMPLE MAIL TRANSFER PROTOCOL"

    https://tools.ietf.org/html/rfc821
Test Name Synopsis
Verify POP3 session through the router cdrouter_app_122 Verify POP3 session through the router


    step 1. Initiate an outbound TCP connection to POP3 server
    step 2. Retreive email messages using POP3 protocol
    step 3. Verify POP3 server correctly returns email messages
    step 4. Close POP3 session from LAN side


    References:

    IETF RFC 1939 "Post Office Protocol - Version 3"

    https://tools.ietf.org/html/rfc1939
Test Name Synopsis
Verify TFTP session through the router cdrouter_app_124 Verify TFTP session through the router


    step 1. Startup a TFTP server on the WAN
    step 2. Initiate an outbound TFTP connection to TFTP server from LAN
    step 3. Send TFTP GET to receive file via TFTP
    step 4. Verify TFTP server correctly returns file via TFTP
    step 5. Close TFTP session from LAN side


    References:

    IETF RFC 1350 "THE TFTP PROTOCOL (REVISION 2)"

    https://tools.ietf.org/html/rfc1350
Test Name Synopsis
Verify NTP session through the router cdrouter_app_126 Verify NTP session through the router


    step 1. Initiate an outbound NTP connection to NTP server
    step 2. Verify NTP request is sent to the WAN
    step 3. Verify NTP response is sent to LAN client
Test Name Synopsis
Verify STUN session through the router cdrouter_app_130 Verify STUN session through the router


    step 1. Initiate an outbound STUN Binding Request to remoteHost
    step 2. Verify STUN Binding Response is received
    step 3. Verify the STUN MAPPED-ADDRESS matches the expected NAT Address


    References:

    IETF RFC 3489 "STUN - Simple Traversal of User Datagram Protocol (UDP) Through Network Address Translators (NATs)"

    https://tools.ietf.org/html/rfc3489
Test Name Synopsis
Verify authenticated STUN session through the router cdrouter_app_131 Verify authenticated STUN session through the router


    step 1. Configure STUN server and client to use authentication
    step 2. Initiate an outbound STUN Binding Request to remoteHost
    step 3. STUN server should sent back a 401 Binding Error Response
    step 4. STUN client retransmits Binding Request using message-integrity attribute
    step 5. Verify STUN Binding Response is received
    step 6. Verify the STUN MAPPED-ADDRESS matches the expected NAT Address


    References:

    IETF RFC 3489 "STUN - Simple Traversal of User Datagram Protocol (UDP) Through Network Address Translators (NATs)"

    https://tools.ietf.org/html/rfc3489
Test Name Synopsis
Verify IPv4 L2GRE session through the router cdrouter_app_140 Verify IPv4 L2GRE session through the router


    step 1. Enable L2GRE endpoint on the LAN client
    step 2. Create a new IPv4 address on the WAN for the other L2GRE endpoint
    step 3. Initiate an ICMP ping from LAN to WAN using L2GRE tunnel
    step 4. Verify the ICMP is successful


    References:

    IETF RFC 2784 "Generic Routing Encapsulation (GRE)"

    https://tools.ietf.org/html/rfc2784
Test Name Synopsis
Verify router translates MSN File Transfer Invite messages cdrouter_app_302 Verify router translates MSN File Transfer Invite messages


    step 1. Open a TCP connection to the MSN Dispatch Server at port 1863
    step 2. After login, look for XFR command to MSN Notification Server
    step 3. Open a TCP connection to the MSN Notification Server
    step 4. Login and send XFR command for MSN Switchboard Server
    step 5. Look for XFR command to MSN Switchboard Server
    step 6. Open a TCP connection from LAN client to MSN Switchboard Server on WAN
    step 7. Send a MSN Invite message for a file transfer application
    step 8. Send a MSN Accept message with LAN side IP address and port
    step 9. Verify the MSN Accept message is received on the WAN side
    step 10. Verify the IP address has been NAT translated
    step 11. Verify an inbound TCP connection can be created to the LAN
             client using the NAT translated IP and port number
Test Name Synopsis
Verify router translates MSN Voice Invite messages cdrouter_app_305 Verify router translates MSN Voice Invite messages


    step 1. Open a TCP connection to the MSN Dispatch Server at port 1863
    step 2. After login, look for XFR command to MSN Notification Server
    step 3. Open a TCP connection to the MSN Notification Server
    step 4. Login and send XFR command for MSN Switchboard Server
    step 5. Look for XFR command to MSN Switchboard Server
    step 6. Open a TCP connection from LAN client to MSN Switchbaord Server on WAN
    step 7. Send a MSN Invite message for a voice application
    step 8. Send a MSN Accept message with LAN side IP address and port
    step 9. Verify the MSN accept message is received on the WAN side
    step 10. Verify the IP address has been NAT translated
Test Name Synopsis
Verify router does not modify MSN fields related to NAT detection cdrouter_app_310 Verify router does not modify MSN fields related to NAT detection


    step 1. Open a TCP connection to the MSN Dispatch Server at port 1863
    step 2. After login, look for XFR command to MSN Notification Server
    step 3. Open a TCP connection to the MSN Notification Server
    step 4. Login and send XFR command for MSN Switchboard Server
    step 5. Look for XFR command to MSN Switchboard Server
    step 6. Open a TCP connection from LAN client to MSN Switchbaord Server on WAN
    step 7. Send a MSN Invite message for a file transfer application
    step 8. Send a MSN Accept message with LAN side IP address and port
            Include IP-Address-Internal and PortX-Internal fields in MSN
            Invite message
    step 9. Verify the MSN Invite message is received on the WAN side
    step 10. Verify the IP address has been NAT translated
    step 11. Verify the IP-Address-Internal and PortX-Internal fields are not
             translated by the MSN ALG
    step 12. Verify an inbound TCP connection can be created to the LAN
             client using the NAT translated IP and port number
Test Name Synopsis
Verify basic RTSP session with UDP transport cdrouter_rtsp_1 Verify basic RTSP session with UDP transport


    step 1. Establish TCP session from LAN client to RTSP server at port 554
    step 2. Send a RTSP DESCRIBE for URL from client to server
    step 3. Verify server response to client is code 200
    step 4. Allocate 2 UDP ports on client for transport
    step 5. Send a RTSP SETUP for URL from client to server using Transport
    step 6. Verify RTSP server receives transport with port translations
    step 7. Verify server response to client is code 200
    step 8. Verify UDP forwarding from WAN to LAN for each AVP port in RTSP transport
    step 9. Send RTSP TEARDOWN and close TCP session from LAN client

    NOTE: The NAT ALG must handle translating the Transport field included in
    the RTSP SETUP from the client.


    References:

    IETF RFC 2326 "Real Time Streaming Protocol (RTSP)"

    https://tools.ietf.org/html/rfc2326
Test Name Synopsis
Verify basic RTSP session with UDP transport for multiple LAN hosts cdrouter_rtsp_2 Verify basic RTSP session with UDP transport for multiple LAN hosts


    step 1. Create a second DHCP host on the LAN
    step 2. Setup RTSP transport for each client using the same src ports
    step 3. For each client, verify UDP forwarding from WAN to LAN for each
            AVP port in RTSP transport
    step 4. For each client, send RTSP TEARDOWN and close TCP session from
            LAN client

    NOTE: The NAT ALG must handle translating the Transport field included in
    the RTSP SETUP from the client.


    References:

    IETF RFC 2326 "Real Time Streaming Protocol (RTSP)"

    https://tools.ietf.org/html/rfc2326
Test Name Synopsis
Verify RTSP transport is translated in both outbound and inbound directions cdrouter_rtsp_10 Verify RTSP transport is translated in both outbound and inbound directions


    step 1. Establish RTSP session to remoteHost on WAN
    step 2. Send a RTSP DESCRIBE, SETUP, and PLAY to establish the transport
    step 3. Verify the client port values are translated in the outbound direction
    step 4. Verify the client port values are translated in the inbound direction
    step 5. Verify UDP forwarding from WAN to LAN for each AVP port in RTSP transport
    step 6. Send RTSP TEARDOWN and close TCP session from LAN client


    References:

    IETF RFC 2326 "Real Time Streaming Protocol (RTSP)"

    https://tools.ietf.org/html/rfc2326
Test Name Synopsis
Verify RTSP port mapping is deleted after TEARDOWN and TCP close cdrouter_rtsp_20 Verify RTSP port mapping is deleted after TEARDOWN and TCP close


    step 1. Establish RTSP session to a remote host on the WAN
    step 2. Send a RTSP DESCRIBE, SETUP, and PLAY to establish the transport
    step 3. Verify UDP forwarding from WAN to LAN for each AVP port in RTSP transport
    step 4. Send TEARDOWN from client and close TCP connection
    step 5. Verify UDP forwarding fails from WAN to LAN for each AVP port in RTSP transport

    Note: The amount of time between the RTSP TEARDOWN and the verification of
    the port mappings can be adjusted using the testvar rtspTeardownDelay. This
    defaults to 5 seconds.


    References:

    IETF RFC 2326 "Real Time Streaming Protocol (RTSP)"

    https://tools.ietf.org/html/rfc2326
Test Name Synopsis
Verify RTSP port mapping is deleted after TEARDOWN and without TCP close cdrouter_rtsp_21 Verify RTSP port mapping is deleted after TEARDOWN and without TCP close


    step 1. Establish RTSP session to a remote host on the WAN
    step 2. Send a RTSP DESCRIBE, SETUP, and PLAY to establish the transport
    step 3. Verify UDP forwarding from WAN to LAN for each AVP port in RTSP transport
    step 4. Send TEARDOWN from client
    step 5. Do not close the TCP session from client to RTSP server
    step 6. Verify UDP forwarding fails from WAN to LAN for each AVP port in RTSP transport

    Note: RTSP clients are allowed to maintain persistent connections to the
    RTSP server. They are not required to close the TCP session when a RTSP
    session is ended.

    Note: The amount of time between the RTSP TEARDOWN and the verification of
    the port mappings can be adjusted using the testvar rtspTeardownDelay. This
    defaults to 5 seconds.


    References:

    IETF RFC 2326 "Real Time Streaming Protocol (RTSP)"

    https://tools.ietf.org/html/rfc2326
Test Name Synopsis
Verify RTSP port mappings still work when TCP connection is closed cdrouter_rtsp_22 Verify RTSP port mappings still work when TCP connection is closed


    step 1. Establish RTSP session to a remote host on the WAN
    step 2. Send a RTSP DESCRIBE, SETUP, and PLAY to establish the transport
    step 3. Verify UDP forwarding from WAN to LAN for each AVP port in RTSP transport
    step 4. Do not send TEARDOWN from client to end the RTSP session
    step 5. Close the TCP session from client to RTSP server
    step 6. Verify UDP forwarding succeeds from WAN to LAN for each AVP port in RTSP transport


    References:

    IETF RFC 2326 "Real Time Streaming Protocol (RTSP)"

    https://tools.ietf.org/html/rfc2326
Test Name Synopsis
Verify IPv4 destination in client transport SETUP is translated to public IP cdrouter_rtsp_30 Verify IPv4 destination in client transport SETUP is translated to public IP


    step 1. Establish TCP session from LAN client to RTSP server at port 554
    step 2. Send a RTSP DESCRIBE for URL from client to server
    step 3. Verify server response to client is code 200
    step 4. Allocate 2 UDP ports on client for transport
    step 5. Send a RTSP SETUP with transport that includes destination field
    step 6. Verify server receives transport with transport IP address in destination field
    step 7. Verify UDP forwarding from WAN to LAN for each AVP port in RTSP transport
    step 8. Send RTSP TEARDOWN and close TCP session from LAN client


    References:

    IETF RFC 2326 "Real Time Streaming Protocol (RTSP)"

    https://tools.ietf.org/html/rfc2326
Test Name Synopsis
Verify RTSP ALG supports persistent TCP connections cdrouter_rtsp_50 Verify RTSP ALG supports persistent TCP connections


    step 1. Establish RTSP session to remoteHost on WAN
    step 2. Send a RTSP DESCRIBE, SETUP, and PLAY to establish the transport
    step 3. Using the same TCP connection, setup a second RTSP session
    step 4. Verify UDP forwarding from WAN to LAN for first session
    step 5. Verify UDP forwarding from WAN to LAN for second session
    step 6. Send RTSP TEARDOWN for first session
    step 7. Send RTSP TEARDOWN for second session
    step 8. Close TCP session from LAN client


    References:

    IETF RFC 2326 "Real Time Streaming Protocol (RTSP)" Section 1.1: Purpose

    https://tools.ietf.org/html/rfc2326#section-1.1

    IETF Internet-Draft draft-ietf-mmusic-2326bis-05 "TCP Fast Open"

    https://tools.ietf.org/html/draft-ietf-mmusic-rfc2326bis-05
Test Name Synopsis
Verify RTSP session with different IPv4 address for RTP media server cdrouter_rtsp_60 Verify RTSP session with different IPv4 address for RTP media server


    step 1. Create a new server on the WAN for the RTP media source
    step 2. Establish TCP session from LAN client to RTSP server at port 554
    step 3. Send a RTSP DESCRIBE for URL from client to server
    step 4. Verify server response to client is code 200
    step 5. Allocate 2 UDP ports on client for transport
    step 6. Send a RTSP SETUP for URL from client to server using Transport
    step 7. Verify RTSP server receives transport with port translations
    step 8. Verify server response to client is code 200 along with
            Transport: header that specifies a source IPv4 address
            that is different from the RTSP server
    step 9. Verify UDP forwarding from WAN to LAN for each AVP port in RTSP transport
            using the IPv4 source address of the RTP media
    step 10. Send RTSP TEARDOWN and close TCP session from LAN client

    NOTE: The NAT ALG must handle translating the Transport field included in
    the RTSP SETUP from the client.


    References:

    IETF RFC 2326 "Real Time Streaming Protocol (RTSP)"

    https://tools.ietf.org/html/rfc2326
Test Name Synopsis
Verify RTSP session timeout for established session cdrouter_rtsp_70 Verify RTSP session timeout for established session


    step 1. Initiate an outbound RTSP connection
    step 2. Verify the connection is established
    step 3. Verify RTP and RTCP packets from the WAN are forwarded to LAN
    step 4. Send RTSP PAUSE message from LAN to WAN
    step 5. Send keep-alive RTSP GET_PARAMETER messages from LAN to
            WAN every rtspGetParameterInterval seconds until natRtspTimeout
            seconds elapses
    step 6. Send RTSP PLAY message from LAN to WAN
    step 7. Verify RTP and RTCP packets from the WAN are forwarded to LAN
    step 8. Send RTSP TEARDOWN and close TCP session from LAN client


    References:

    IETF RFC 2326 "Real Time Streaming Protocol (RTSP)"

    https://tools.ietf.org/html/rfc2326
Test Name Synopsis
Verify a Multipath TCP connection can be opened cdrouter_mptcp_1 Verify a Multipath TCP connection can be opened


        step 1. Initiate MPTCP connection from LAN client to WAN server
        step 2. Verify MPTCP connection is established
        step 3. Verify MPTCP connection attributes on LAN client and
                WAN server match
        step 4. Close MPTCP connection


    References:

    IETF RFC 8684 "TCP Extensions for Multipath Operation with Multiple Addresses"

    https://tools.ietf.org/html/rfc8684
Test Name Synopsis
Verify a Multipath TCP connection with two subflows can be opened cdrouter_mptcp_2 Verify a Multipath TCP connection with two subflows can be opened


        step 1. Initiate MPTCP connection from LAN client to WAN server
        step 2. Verify MPTCP connection is established
        step 3. Verify MPTCP connection attributes on LAN client and
                WAN server match
        step 4. Transmit data on MPTCP connection from LAN client
        step 5. Verify data is received by WAN server
        step 6. Initiate new MPTCP subflow on MPTCP connection from
                step 1
        step 7. Verify new MPTCP subflow is established
        step 8. Verify MPTCP subflow attributes on LAN client and WAN
                server match
        step 9. Transmit data on MPTCP connection from LAN client
        step 10. Verify data is received by WAN server
        step 11. Close MPTCP connection


    References:

    IETF RFC 8684 "TCP Extensions for Multipath Operation with Multiple Addresses"

    https://tools.ietf.org/html/rfc8684

ipsecpt.tcl

IPSEC based VPN pass through from the LAN to the WAN

Test Name Synopsis
Verify IKE packets pass through router on UDP port 500 cdrouter_ipsecpt_1 Verify IKE packets pass through router on UDP port 500


    step 1. Forward an IPSEC IKE packet from LAN to WAN
    step 2. Verify packets are passed in both directions
Test Name Synopsis
Verify tunnel mode IPSEC packets pass through router cdrouter_ipsecpt_2 Verify tunnel mode IPSEC packets pass through router


    step 1. Forward an IPSEC packet from LAN to WAN
            Note: Tunnel mode IPSEC packets are sent as IPv4 protocol 50
    step 2. Verify the packet is received on the WAN
    step 3. Send a tunnel mode IPSEC packet from the WAN side to LAN
    step 4. Verify the packet is received on the LAN

    Note: The testvar alwaysUseIke can be used to initiate an IKE connection
    prior to sending tunnel mode IPSEC packets.
Test Name Synopsis
Fragmented tunnel mode IPSEC packets are forwarded between LAN and WAN cdrouter_ipsecpt_3 Fragmented tunnel mode IPSEC packets are forwarded between LAN and WAN


    step 1. Forward a fragmented IPSEC packet from LAN to WAN
            Note: Tunnel mode IPSEC packets are sent as IPv4 protocol 50
    step 2. Verify all IPv4 fragments are received on the WAN
    step 3. Send an IPSEC packet from the WAN side to the router's public IPv4 address
    step 4. Verify all IPv4 fragments are received on the LAN

    NOTE: If the wanMode for this test is PPPoE, the MTU on both stacks is set
          to 1492. Otherwise, the MTU is set to 1500. The test tries to send
          1500 bytes of IPv4 data to resemble an IPSEC tunnel with a 1500 byte
          payload.

    Note: The testvar alwaysUseIke can be used to initiate an IKE connection
    prior to sending tunnel mode IPSEC packets.
Test Name Synopsis
Verify unknown IPv4 protocol types using the pass through mechanism cdrouter_ipsecpt_30 Verify unknown IPv4 protocol types using the pass through mechanism


    step 1. Forward an IPv4 packet with protocol 52
    step 2. Check for packet on WAN side of router
    step 3. Forward the IPv4 protocol packet back to router's public IPv4 address
    step 4. By default, the packet should not be received on the LAN
    step 5. If the testvar 'unknownPassthrough' is set to yes, the packet should
            be received on the LAN

    By default, this test verifies that unknown IPv4 protocol packets are
    forwarded by the router. However, if the router does not handle pass
    through packets for all IPv4 protocol types, the testvar
    'unknownPassthrough' should be set to 'no'. It defaults to 'yes'
Test Name Synopsis
Verify the maximum number of IPSEC pass through connections for a single LAN host cdrouter_ipsecpt_100 Verify the maximum number of IPSEC pass through connections for a single LAN host


    step 1. Forward a tunnel mode IPSEC packet from LAN to unique WAN IPv4 address
            Note: Tunnel mode IPSEC packets are sent as IPv4 protocol 50
    step 2. Verify the packet is received on the WAN
    step 3. Send a tunnel mode IPSEC packet from the WAN side to LAN
    step 4. Verify the packet is received on the LAN
    step 5. Repeat up to the ipsecMaxTunnels value

    Note: Each IPSEC tunnel uses a unique IPv4 destination address.

    Note: The testvar alwaysUseIke can be used to initiate an IKE connection
    prior to sending tunnel mode IPSEC packets.
Test Name Synopsis
Verify IPSEC pass through with multiple LAN clients using same VPN server cdrouter_ipsecpt_110 Verify IPSEC pass through with multiple LAN clients using same VPN server


    step 1. Start new DHCP client on the LAN interface
    step 2. Forward an IPSEC packet from host 1 to VPN server on WAN
    step 3. Forward an IPSEC packet from host 2 to VPN server on WAN
    step 4. Verify both packets are received by the VPN server
    step 5. Send a return IPSEC packet to each LAN host using unique SPI
    step 6. Verify each LAN host receives IPSEC packet with correct SPI

    Note: Each LAN client sends a IPSEC packet to the same VPN server
          using unique SPI values in the ESP header. IPSEC packets
          sent back from the WAN use the SPI value.

    Note: This test is only supported by routers using SPI tracking
          features to build NAPT mappings for return IPSEC/ESP traffic.
          There is no reliable technique for a router to know the return
          SPI value. However, some routers attempt to serialize the
          return connections and associate incoming SPIs with outgoing
          connections. While this does not work if packets are
          reordered or lost, some routers do use this technique to allow
          multiple LAN clients to use the same VPN server.

    Note: The testvar alwaysUseIke can be used to initiate an IKE connection
    prior to sending tunnel mode IPSEC packets.
Test Name Synopsis
Verify IKE with multiple LAN clients using same VPN server cdrouter_ipsecpt_120 Verify IKE with multiple LAN clients using same VPN server


    step 1. Start new DHCP client on the LAN interface
    step 2. Forward an IPSEC IKE packet from host1 to VPN server on WAN
    step 3. Forward an IPSEC IKE packet from host2 to VPN server on WAN
    step 4. Verify both packets are received by the VPN server
    step 5. Send return IKE/ISAKMP packets to LAN clients
    step 6. Verify each LAN client receives correct IKE packet

    Note: Each LAN client uses a unique ISAKMP cookie for the initiator and
    responder cookies. There are two common techniques used to multiplex
    multiple IKE connections all originating from port 500. Some routers will
    change the IKE source port to another UDP port. This solution does not work
    for all VPN servers which may not accept IKE traffic if the UDP source port
    is not 500. Other routers will track the initiator and responder cookies in
    the ISAKMP messages in order to demultiplex incoming IKE packets. This test
    will succeed if either technique is used.
Test Name Synopsis
IPSEC pass through without NAT-T based IPSEC client cdrouter_ipsecpt_200 IPSEC pass through without NAT-T based IPSEC client


    step 1. Create new IPSEC VPN server on the WAN
    step 2. Start the CDRouter IKE client on the LAN without using NAT-T
    step 3. Verify IPSEC pass through allows IKE session to establish
    step 4. Verify data traffic over the IPSEC tunnel
Test Name Synopsis
IPSEC pass through with NAT-T based IPSEC client cdrouter_ipsecpt_210 IPSEC pass through with NAT-T based IPSEC client


    step 1. Create new IPSEC VPN server on the WAN
    step 2. Start the CDRouter IKE client on the LAN using NAT-T
    step 3. Verify IPSEC pass through allows IKE session to establish
    step 4. Verify data traffic over the IPSEC tunnel

forward.tcl

Forwarding tests with different packet sizes and directions

Test Name Synopsis
Verify IPv4 TTL is decremented for forwarded packets cdrouter_forward_1 Verify IPv4 TTL is decremented for forwarded packets

    step 1. Forward an IP packet from a LAN client to the WAN
    step 2. Verify the TTL of the packet is decremented by 1
Test Name Synopsis
Verify packet is not forwarded when IPv4 TTL is 1 cdrouter_forward_2 Verify packet is not forwarded when IPv4 TTL is 1

    step 1. Set the IP TTL of outbound packets to 1
    step 2. Forward an IP packet from a LAN client to the WAN
    step 3. Verify the packet is not forwarded
Test Name Synopsis
Verify packet can be forwarded back through incoming LAN interface cdrouter_forward_3 Verify packet can be forwarded back through incoming LAN interface

    step 1. Forward an IP packet from a LAN client to another LAN client
    step 2. Forward packet using router's MAC address
    step 3. Verify packet is forwarded back out the LAN interface

    NOTE: The router may send an ICMP Redirect back to the originator.
Test Name Synopsis
Verify packet is not forwarded if IPv4 checksum is corrupt cdrouter_forward_4 Verify packet is not forwarded if IPv4 checksum is corrupt

    step 1. Configure the LAN host to send corrupt IPv4 checksums
    step 2. Forward an IP packet from a LAN client to the WAN
    step 3. Verify the packet is not forwarded
    step 4. If the packet is forwarded, see if the checksum is valid


    References:

    IETF RFC 1812 "Requirements for IP Version 4 Routers" Section 4.2.2.5: Header Checksum: RFC 791 Section 3.1

    As stated in Section [5.2.2], a router MUST verify the IP checksum of any
    packet that is received, and MUST discard messages containing invalid
    checksums. The router MUST NOT provide a means to disable this checksum
    verification.

    https://tools.ietf.org/html/rfc1812#section-4.2.2.5
Test Name Synopsis
Forward UDP packets with various packet lengths (LAN to WAN) cdrouter_forward_10 Forward UDP packets with various packet lengths (LAN to WAN)

    step 1. Initiate an outbound UDP connection with UDP data length of 4
    step 2. Verify packets are received on the WAN interface
    step 3. If wanMode is PPPoE,
               continue forwarding until UDP data length is 1464 (1492 max IP len)
            else if wanMode is PPTP or L2TP
               continue forwarding until UDP data length is 1432 (1460 max IP len)
            else for DHCP and static wanModes
               continue forwarding until UDP data length is 1472 (1500 max IP len)

    NOTE: Some routers will stop forwarding IP traffic while they renew their
    WAN side IP address. This can cause this test to fail.

    NOTE: Some routers allow static configuration of the MTU size. This may
    default to 1492 even for routers running DHCP on the WAN side.

    NOTE: This test will stop if the number of max failures is reached. This
    value may be configured using testvar forwardingMaxFailures. Setting this
    value to 0 will test each packet size regardles of the result.

    testvar forwardingMaxFailures 20
Test Name Synopsis
Forward UDP packets with various packet lengths (WAN to LAN) cdrouter_forward_11 Forward UDP packets with various packet lengths (WAN to LAN)

    step 1. Initiate an outbound UDP connection with UDP data length of 4
    step 2. Verify packet is received on the WAN interface
    step 3. Forward a return packet from the WAN to the LAN
    step 4. Verify packets are received on the LAN interface
    step 5. If wanMode is PPPoE,
               continue forwarding until UDP data length is 1464 (1492 max IP len)
            else if wanMode is PPTP
               continue forwarding until UDP data length is 1432 (1460 max IP len)
            else for DHCP and static wanModes
               continue forwarding until UDP data length is 1472 (1500 max IP len)

    NOTE: Some routers will stop forwarding IP traffic while they renew their
    WAN side IP address. This can cause this test to fail.

    NOTE: Some routers allow static configuration of the MTU size. This may
    default to 1492 even for routers running DHCP on the WAN side.

    NOTE: This test will stop if the number of max failures is reached. This
    value may be configured using testvar forwardingMaxFailures. Setting this
    value to 0 will test each packet size regardles of the result.

    testvar forwardingMaxFailures 20
Test Name Synopsis
No packets are forwarded if WAN lease expires cdrouter_forward_20 No packets are forwarded if WAN lease expires

    step 1. Disable the DHCP server and any ICMP or ARP responses
    step 2. Wait for the WAN lease to expire
    step 3. Forward packets from LAN client to WAN destination
    step 4. Verify the packets are not forwarded out the WAN interface
    step 5. Enable DHCP, ICMP, and ARP

    NOTE: ARP/ICMP responses are also disabled on the WAN interface for this
    test. Some routers use ARP or ICMP to verify that the WAN is still
    operational.

jumbo.tcl

Jumbo MTU forwarding tests with different packet sizes and directions

Test Name Synopsis
Verify IPv4 TTL is decremented for forwarded jumbo MTU packets cdrouter_jumbo_1 Verify IPv4 TTL is decremented for forwarded jumbo MTU packets

    step 1. Forward an IP packet from a LAN client to the WAN that utilizes the
            maximum supported jumbo mtu of both interfaces
    step 2. Verify the TTL of the packet is decremented by 1

    NOTE: The maximum jumbo packet size is configured using the testvar
    jumboMtu.
Test Name Synopsis
Verify jumbo MTU packet is not forwarded when IPv4 TTL is 1 cdrouter_jumbo_2 Verify jumbo MTU packet is not forwarded when IPv4 TTL is 1

    step 1. Set the IP TTL of outbound packets to 1
    step 2. Forward an IP packet from a LAN client to the WAN that utilizes the
            maximum supported jumbo mtu of both interfaces
    step 3. Verify the packet is not forwarded

    NOTE: The maximum jumbo packet size is configured using the testvar
    jumboMtu.
Test Name Synopsis
Verify jumbo MTU packet can be forwarded back through incoming LAN interface cdrouter_jumbo_3 Verify jumbo MTU packet can be forwarded back through incoming LAN interface

    step 1. Forward an IP packet from a LAN client to another LAN client that
            utilizes the maximum supported jumbo mtu of both interfaces
    step 2. Forward packet using router's MAC address
    step 3. Verify packet is forwarded back out the LAN interface

    NOTE: The router may send an ICMP Redirect back to the originator.

    NOTE: The maximum jumbo packet size is configured using the testvar
    jumboMtu.
Test Name Synopsis
Verify jumbo MTU packet is not forwarded if IPv4 checksum is corrupt cdrouter_jumbo_4 Verify jumbo MTU packet is not forwarded if IPv4 checksum is corrupt

    step 1. Configure the LAN host to send corrupt IPv4 checksums
    step 2. Forward an IP packet from a LAN client to the WAN that utilizes the
            maximum supported jumbo mtu of both interfaces
    step 3. Verify the packet is not forwarded
    step 4. If the packet is forwarded, see if the checksum is valid

    NOTE: The maximum jumbo packet size is configured using the testvar
    jumboMtu.


    References:

    IETF RFC 1812 "Requirements for IP Version 4 Routers" Section 4.2.2.5: Header Checksum: RFC 791 Section 3.1

    As stated in Section [5.2.2], a router MUST verify the IP checksum of any
    packet that is received, and MUST discard messages containing invalid
    checksums. The router MUST NOT provide a means to disable this checksum
    verification.

    https://tools.ietf.org/html/rfc1812#section-4.2.2.5
Test Name Synopsis
Forward jumbo MTU UDP packets with various packet lengths (LAN to WAN) cdrouter_jumbo_10 Forward jumbo MTU UDP packets with various packet lengths (LAN to WAN)

    step 1. Initiate an outbound UDP connection with UDP packet that utilizes
            the maximum supported standard mtu of both interfaces
    step 2. Verify packets are received on the WAN interface
    step 3. Continue forwarding until the UDP packet utilizes the maximum
            supported jumbo mtu of both interfaces

    NOTE: Some routers will stop forwarding IP traffic while they renew their
    WAN side IP address. This can cause this test to fail.

    NOTE: The maximum jumbo packet size is configured using the testvar
    jumboMtu.

    NOTE: This test will stop if the number of max failures is reached. This
    value may be configured using testvar forwardingMaxFailures. Setting this
    value to 0 will test each packet size regardles of the result.

    testvar forwardingMaxFailures 20
Test Name Synopsis
Forward jumbo MTU UDP packets with various packet lengths (WAN to LAN) cdrouter_jumbo_11 Forward jumbo MTU UDP packets with various packet lengths (WAN to LAN)

    step 1. Initiate an outbound UDP connection with UDP packet that utilizes
            the maximum supported standard mtu of both interfaces
    step 2. Verify packet is received on the WAN interface
    step 3. Forward a return packet from the WAN to the LAN that utilizes the
            maximum supported standard mtu of both interfaces
    step 4. Verify packets are received on the LAN interface
    step 5. Continue forwarding until the UDP packet utilizes the maximum
            supported jumbo mtu of both interfaces

    NOTE: Some routers will stop forwarding IP traffic while they renew
    their WAN side IP address. This can cause this test to fail.

    NOTE: The maximum jumbo packet size is configured using the testvar
    jumboMtu.

    NOTE: This test will stop if the number of max failures is reached. This
    value may be configured using testvar forwardingMaxFailures. Setting this
    value to 0 will test each packet size regardles of the result.

    testvar forwardingMaxFailures 20

rip.tcl

RIPv1/v2 tests for LAN side of the router

Test Name Synopsis
Verify router sends RIPv1/v2 update on LAN side cdrouter_rip_1 Verify router sends RIPv1/v2 update on LAN side


    step 1. Listen for RIP reply from LAN side IP address of router
    step 2. Verify RIP version
    step 3. Verify source address of RIP reply

    NOTE: This test is only run if the 'ripSupported' configuration is
    set to 'yes'. The RIP version used for the test can be configured
    using the 'ripVersion' variable in your configuration file.


    References:

    IETF RFC 1058 "Routing Information Protocol"

    https://tools.ietf.org/html/rfc1058

    IETF RFC 2453 "RIP Version 2"

    https://tools.ietf.org/html/rfc2453
Test Name Synopsis
Verify router learns new RIP routes from LAN side RIP router (v1 or v2) cdrouter_rip_2 Verify router learns new RIP routes from LAN side RIP router (v1 or v2)


    step 1. Start new DHCP client on LAN interface
    step 2. Announce new RIPv1/v2 route with metric 1 from new DHCP client
    step 3. Forward from original LAN client to IP address within the
            new RIPv1/v2 route range
    step 4. Verify the packet is forwarded to the new DHCP client


    References:

    IETF RFC 1058 "Routing Information Protocol"

    https://tools.ietf.org/html/rfc1058

    IETF RFC 2453 "RIP Version 2"

    https://tools.ietf.org/html/rfc2453
Test Name Synopsis
Verify router responds to RIP requests on LAN interface cdrouter_rip_5 Verify router responds to RIP requests on LAN interface


    step 1. Send RIP Request from new UDP src port to RIP destination address
    step 2. Verify router returns a RIP response
    step 3. Verify the response is sent to the correct UDP port
    step 4. Verify the response is sent using unicast IP destination

    References:

    IETF RFC 1058 "Routing Information Protocol"

    https://tools.ietf.org/html/rfc1058

    IETF RFC 2453 "RIP Version 2"

    https://tools.ietf.org/html/rfc2453
Test Name Synopsis
Verify router selects RIP route with lowest metric (v1 or v2) cdrouter_rip_10 Verify router selects RIP route with lowest metric (v1 or v2)


    step 1. Start 2 new DHCP clienst on LAN interface (R1 and R2)
    step 2. Announce new RIPv1/v2 route with metric 10 from R1
    step 3. Announce same RIPv1/v2 route with metric 9 from R2

    step 5. Forward from original LAN client to IP address within the
            new RIPv1/v2 route range
    step 6. Verify the packet is forwarded to R2


    References:

    IETF RFC 1058 "Routing Information Protocol"

    https://tools.ietf.org/html/rfc1058

    IETF RFC 2453 "RIP Version 2"

    https://tools.ietf.org/html/rfc2453
Test Name Synopsis
Verify router ignores routes with a metric of 16 cdrouter_rip_12 Verify router ignores routes with a metric of 16


    step 1. Start new DHCP client on LAN interface
    step 2. Announce new RIPv1/v2 route with metric 16 from new DHCP client
    step 3. Forward from original LAN client to IP address within the
            new RIPv1/v2 route range
    step 4. Verify the packet is not forwarded to the new DHCP client
    step 5. Verify the packet is forwarded to WAN side


    References:

    IETF RFC 1058 "Routing Information Protocol"

    https://tools.ietf.org/html/rfc1058

    IETF RFC 2453 "RIP Version 2"

    https://tools.ietf.org/html/rfc2453
Test Name Synopsis
Verify router uses split horizon or poison reverse for learned RIP routes cdrouter_rip_20 Verify router uses split horizon or poison reverse for learned RIP routes


    step 1. Start new DHCP client on LAN interface
    step 2. Announce new RIPv1/v2 route with metric 1 from new DHCP client
    step 3. Wait for new RIP update
    step 4. Verify route is not announced (split horizon) or announced as
            unreachable (poison reverse)


    References:

    IETF RFC 1058 "Routing Information Protocol"

    https://tools.ietf.org/html/rfc1058

    IETF RFC 2453 "RIP Version 2"

    https://tools.ietf.org/html/rfc2453
Test Name Synopsis
Verify router announces default route on LAN side cdrouter_rip_30 Verify router announces default route on LAN side


    step 1. Listen for RIP updates for 1 minute
    step 2. Verify default route (0.0.0.0) is announced as reachable


    References:

    IETF RFC 1058 "Routing Information Protocol"

    https://tools.ietf.org/html/rfc1058

    IETF RFC 2453 "RIP Version 2"

    https://tools.ietf.org/html/rfc2453
Test Name Synopsis
Verify the maximum number of RIP routes supported cdrouter_rip_100 Verify the maximum number of RIP routes supported


    step 1. Start a new DHCP client on LAN interface
    step 2. Announce new RIPv1/v2 routes with metric 1 from new DHCP client

            NOTE: The 'ripMaxRoutes' variable in your configuration file
            determines the number of RIPv1/v2 routes that are announced.

    step 3. Forward from original LAN client to IP address within the
            each new route range
    step 4. Verify packets are forwarded for each new route


    References:

    IETF RFC 1058 "Routing Information Protocol"

    https://tools.ietf.org/html/rfc1058

    IETF RFC 2453 "RIP Version 2"

    https://tools.ietf.org/html/rfc2453
Test Name Synopsis
Verify router learns new RIP routes from WAN side RIP router (v1 or v2) cdrouter_rip_200 Verify router learns new RIP routes from WAN side RIP router (v1 or v2)


    step 1. Announce new RIPv1/v2 route with metric 1 from WAN side
    step 2. Wait for new RIP update on the LAN
    step 3. Verify new route is announced on the LAN
    step 4. Forward packet from LAN to new IP destination
    step 5. Verify packet is forwarded to WAN side

    NOTE: This test is only enabled when testvar ripAcceptWanUpdate
          is set to yes. The default is no.

          testvar ripAcceptWanUpdate yes

    References:

    IETF RFC 1058 "Routing Information Protocol"

    https://tools.ietf.org/html/rfc1058

    IETF RFC 2453 "RIP Version 2"

    https://tools.ietf.org/html/rfc2453

scaling.tcl

Scaling tests for maximum number of DHCP clients and connections (TCP, HTTP, VPN)

Test Name Synopsis
Verify all DHCP clients are operational cdrouter_scale_1 Verify all DHCP clients are operational


    step 1. Determine the size of the IPv4 LAN address pool
    step 2. Create a DHCP client for each available IP address
    step 3. Verify each client obtains an IP address within the range
    step 4. Verify there are no address conflicts
    step 5. Verify each client can establish an outbound HTTP connection to the
            remote host on the WAN
    step 6. Verify each client can send/receive data over the HTTP connection
    step 7. Close each TCP connection
    step 8. Release all new DHCP client leases

    NOTE: The DHCP address pool size is set in your configuration file using
    the 'dhcpClientStart' and 'dhcpClientEnd' testvars. These values must
    match the values set on the DUT. The pool size used in the test may be
    reduced if the testvar 'ipv4MaxLanClients' is defined with a value in your
    configuration.

    One of the addresses remains in use through the test run for a host on the
    LAN side. This test will attempt to create clients for the pool size - 1.
    If you are using multiple LAN interfaces, the number of DHCP clients from
    each interface will also be subtracted from the DHCP pool size.

    NOTE: All DHCP clients created during this test will use unique MAC
    addresses that do not conflict with any DHCP reservations that may be
    defined. This test will also verify that all clients receive valid DHCP
    addresses from the dynamic pool. A failure will be generated if any client
    receives an invalid address from the DHCP server. Invalid addresses are
    defined as:

       * Addresses outside of the configured DHCP pool range
       * Excluded addresses defined by the 'dhcpClientExclude' testvar
       * Reserved addresses defined by the 'dhcpClientReservedIp[x]' and
         'dhcpClientReservedMac[x]' testvars


    References:

    IETF RFC 2131 "Dynamic Host Configuration Protocol"

    https://tools.ietf.org/html/rfc2131
Test Name Synopsis
Verify all DHCP clients with multiple TCP connections cdrouter_scale_2 Verify all DHCP clients with multiple TCP connections


    step 1. Determine the size of the IPv4 LAN address pool.
    step 2. Create a DHCP client for each available IP address for a
            total of <num_hosts> DHCP clients.
    step 3. Verify each client obtains an IP address within the range.
    step 4. Verify there are no address conflicts.
    step 5. Determine <num_conns>, the number of TCP connections to
            create across all <num_hosts> DHCP clients, from the
            testvar scaleTcpConns.
    step 6. Determine <conns_per_host>, the number of TCP connections
            to create for each DHCP client by evenly dividing all
            <num_conns> connections across all <num_hosts> DHCP
            clients.
    step 7. Determine <num_web_servers>, the number of WAN HTTP
            servers to create, by selecting the smaller of
            <conns_per_host>, the size of the free network range and
            a maximum limit of 25 servers.
    step 8. Verify all <num_hosts> DHCP clients can establish
            <conns_per_host> outbound HTTP connections made to
            <num_web_servers> WAN HTTP servers on port 80 for a total
            of <num_conns> connections; each new connection is made to
            a different WAN HTTP server in a round-robin fashion.
    step 9. Verify each client can send/receive data over each connection.
    step 10. Close each TCP connection.
    step 11. Release all new DHCP client leases.

    NOTE: If the deprecated testvar scaleTcpConnsPerHost is not set to
    "auto", the value of the scaleTcpConns testvar is ignored and the
    this test behaves similarly to how it did prior to CDRouter 13.12
    before scaleTcpConns was introduced.  Namely, <conns_per_host> is
    set to the smaller of scaleTcpConnsPerHost and the size of the
    free network range, <num_web_servers> is set to <conns_per_host>,
    and <num_conns> is set to <conns_per_host> multiplied by
    <num_hosts>.  This backwards compatibility functionality will be
    removed in a future release.  Users should migrate to the
    scaleTcpConns testvar as soon as possible by setting
    scaleTcpConnsPerHost to the special value "auto" and then setting
    scaleTcpConns to the maximum number of TCP connections which
    should be created across all DHCP clients during the scaling
    tests.

    NOTE: The DHCP address pool size is set in your configuration file using
    the 'dhcpClientStart' and 'dhcpClientEnd' testvars. These values must
    match the values set on the DUT. The pool size used in the test may be
    reduced if the testvar 'ipv4MaxLanClients' is defined with a value in your
    configuration.

    One of the addresses remains in use through the test run for a host on the
    LAN side. This test will attempt to create clients for the pool size - 1.
    If you are using multiple LAN interfaces, the number of DHCP clients from
    each interface will also be subtracted from the DHCP pool size.

    NOTE: All DHCP clients created during this test will use unique MAC
    addresses that do not conflict with any DHCP reservations that may be
    defined. This test will also verify that all clients receive valid DHCP
    addresses from the dynamic pool. A failure will be generated if any client
    receives an invalid address from the DHCP server. Invalid addresses are
    defined as:

       * Addresses outside of the configured DHCP pool range
       * Excluded addresses defined by the 'dhcpClientExclude' testvar
       * Reserved addresses defined by the 'dhcpClientReservedIp[x]' and
         'dhcpClientReservedMac[x]' testvars


    References:

    IETF RFC 2131 "Dynamic Host Configuration Protocol"

    https://tools.ietf.org/html/rfc2131
Test Name Synopsis
Verify all DHCP clients with single UDP connection cdrouter_scale_3 Verify all DHCP clients with single UDP connection


    step 1. Determine the size of the IPv4 LAN address pool
    step 2. Determine the maximum number of UDP connections to create for
            each DHCP client
    step 3. Create a DHCP client for each available IP address within the pool
    step 4. Verify each client obtains an IP address within the range
    step 5. Verify there are no address conflicts
    step 6. Verify each client can establish one outbound UDP connection
    step 7. Verify each client can send/receive data over each connection
    step 8. Release all new DHCP client leases

    NOTE: The DHCP address pool size is set in your configuration file using
    the 'dhcpClientStart' and 'dhcpClientEnd' testvars. These values must
    match the values set on the DUT. The pool size used in the test may be
    reduced if the testvar 'ipv4MaxLanClients' is defined with a value in your
    configuration.

    One of the addresses remains in use through the test run for a host on the
    LAN side. This test will attempt to create clients for the pool size - 1.
    If you are using multiple LAN interfaces, the number of DHCP clients from
    each interface will also be subtracted from the DHCP pool size.

    NOTE: All DHCP clients created during this test will use unique MAC
    addresses that do not conflict with any DHCP reservations that may be
    defined. This test will also verify that all clients receive valid DHCP
    addresses from the dynamic pool. A failure will be generated if any client
    receives an invalid address from the DHCP server. Invalid addresses are
    defined as:

       * Addresses outside of the configured DHCP pool range
       * Excluded addresses defined by the 'dhcpClientExclude' testvar
       * Reserved addresses defined by the 'dhcpClientReservedIp[x]' and
         'dhcpClientReservedMac[x]' testvars


    References:

    IETF RFC 2131 "Dynamic Host Configuration Protocol"

    https://tools.ietf.org/html/rfc2131
Test Name Synopsis
Verify no duplicate IP addresses are assigned when DHCP address pool is exhausted cdrouter_scale_10 Verify no duplicate IP addresses are assigned when DHCP address pool is exhausted


    step 1. Determine the size of the IPv4 LAN address pool
    step 2. Create a DHCP client for each available IP address
    step 3. Verify each client obtains an IP address within the range
    step 4. Verify there are no address conflicts
    step 5. Attempt to create one additional DHCP client
    step 6. Verify that the DHCP client in step 5 does not obtain an IP address
    step 7. Release all DHCP client leases

    NOTE: The DHCP address pool size is set in your configuration file using
    the 'dhcpClientStart' and 'dhcpClientEnd' testvars. One of the addresses
    remains in use through the test run for a host on the LAN side. This test
    will attempt to create clients for the pool size - 1. If you are using
    multiple LAN interfaces, the number of DHCP clients from each interface
    will also be subtracted from the DHCP pool size.

    NOTE: All DHCP clients created during this test will use unique MAC
    addresses that do not conflict with any DHCP reservations that may be
    defined. This test will also verify that all clients receive valid DHCP
    addresses from the dynamic pool. A failure will be generated if any client
    receives an invalid address from the DHCP server. Invalid addresses are
    defined as:

       * Addresses outside of the configured DHCP pool range
       * Excluded addresses defined by the 'dhcpClientExclude' testvar
       * Reserved addresses defined by the 'dhcpClientReservedIp[x]' and
         'dhcpClientReservedMac[x]' testvars


    References:

    IETF RFC 2131 "Dynamic Host Configuration Protocol"

    https://tools.ietf.org/html/rfc2131
Test Name Synopsis
Verify all DHCP clients can create an IPSEC tunnel cdrouter_scale_15 Verify all DHCP clients can create an IPSEC tunnel


    step 1. Determine the number of IPSEC tunnels to create based on the value
            of the ipsecMaxTunnels testvar
    step 2. Create one DHCP client per IPSEC tunnel
    step 3. Verify the client obtains an IP address within the range
    step 4. Verify there are no address conflicts
    step53. Verify each client can establish an outbound IPSEC tunnel to a
            unique IP destination address on the WAN side
    step 6. Verify IKE session is established
    step 7. Verify IPSEC/ESP packets pass through
    step 8. Release all new DHCP client leases

    NOTE: This test is only supported by routers using SPI tracking
    features to build NAPT mappings for return IPSEC/ESP traffic.
    There is no reliable technique for a router to know the return
    SPI value. However, some routers attempt to serialize the
    return connections and associate incoming SPIs with outgoing
    connections. While this does not work if packets are
    reordered or lost, some routers do use this technique to allow
    multiple LAN clients to use the same VPN server.

    NOTE: The DHCP address pool size is set in your configuration file using
    the 'dhcpClientStart' and 'dhcpClientEnd' testvars. These values must
    match the values set on the DUT. The pool size used in the test may be
    reduced if the testvar 'ipv4MaxLanClients' is defined with a value in your
    configuration.

    NOTE: If the maximum number of IPSEC tunnels supported is less than
    the DHCP address pool size, not all DHCP clients will be used. The
    maximum number of IPSEC tunnels is configured using the
    'ipsecMaxTunnels' testvar.

    NOTE: All DHCP clients created during this test will use unique MAC
    addresses that do not conflict with any DHCP reservations that may be
    defined. This test will also verify that all clients receive valid DHCP
    addresses from the dynamic pool. A failure will be generated if any client
    receives an invalid address from the DHCP server. Invalid addresses are
    defined as:

       * Addresses outside of the configured DHCP pool range
       * Excluded addresses defined by the 'dhcpClientExclude' testvar
       * Reserved addresses defined by the 'dhcpClientReservedIp[x]' and
         'dhcpClientReservedMac[x]' testvars


    References:

    IETF RFC 2131 "Dynamic Host Configuration Protocol"

    https://tools.ietf.org/html/rfc2131
Test Name Synopsis
Verify all DHCP clients can create a PPTP tunnel cdrouter_scale_20 Verify all DHCP clients can create a PPTP tunnel


    step 1. Determine the number of PPTP tunnels to create based on the value
            of the pptpMaxTunnels testvar
    step 2. Create one DHCP client per PPTP tunnel
    step 3. Verify the client obtains an IP address within the range
    step 4. Verify there are no address conflicts
    step 5. Verify each client can establish an outbound PPTP tunnel
            to a unique IP destination address on the WAN side
    step 6. Release all new DHCP client leases

    NOTE: The DHCP address pool size is set in your configuration file using
    the 'dhcpClientStart' and 'dhcpClientEnd' testvars. These values must
    match the values set on the DUT. The pool size used in the test may be
    reduced if the testvar 'ipv4MaxLanClients' is defined with a value in your
    configuration.

    NOTE: If the maximum number of PPTP tunnels supported is less than
    the DHCP address pool size, not all DHCP clients will be used. The
    maximum number of PPTP tunnels is configured using the
    pptpMaxTunnels variable.

    NOTE: All DHCP clients created during this test will use unique MAC
    addresses that do not conflict with any DHCP reservations that may be
    defined. This test will also verify that all clients receive valid DHCP
    addresses from the dynamic pool. A failure will be generated if any client
    receives an invalid address from the DHCP server. Invalid addresses are
    defined as:

       * Addresses outside of the configured DHCP pool range
       * Excluded addresses defined by the 'dhcpClientExclude' testvar
       * Reserved addresses defined by the 'dhcpClientReservedIp[x]' and
         'dhcpClientReservedMac[x]' testvars


    References:

    IETF RFC 2131 "Dynamic Host Configuration Protocol"

    https://tools.ietf.org/html/rfc2131
Test Name Synopsis
Verify all DHCP clients can create a L2TP/IPSEC tunnel cdrouter_scale_30 Verify all DHCP clients can create a L2TP/IPSEC tunnel


    step 1. Determine the number of L2TP tunnels to create based on the value
            of the l2tpMaxTunnels testvar
    step 2. Create one DHCP client per L2TP tunnel
    step 3. Verify the client obtains an IP address within the range
    step 4. Verify there are no address conflicts
    step 5. Verify each client can establish an outbound L2TP/IPSEC tunnel
            to a unique IP destination address on the WAN side
    step 6. Release all new DHCP client leases

    NOTE: The DHCP address pool size is set in your configuration file using
    the 'dhcpClientStart' and 'dhcpClientEnd' testvars. These values must
    match the values set on the DUT. The pool size used in the test may be
    reduced if the testvar 'ipv4MaxLanClients' is defined with a value in your
    configuration.

    NOTE: If the maximum number of L2TP tunnels supported is less than
    the DHCP address pool size, not all DHCP clients will be used. The
    maximum number of L2TP tunnels is configured using the
    l2tpMaxTunnels variable.

    NOTE: All DHCP clients created during this test will use unique MAC
    addresses that do not conflict with any DHCP reservations that may be
    defined. This test will also verify that all clients receive valid DHCP
    addresses from the dynamic pool. A failure will be generated if any client
    receives an invalid address from the DHCP server. Invalid addresses are
    defined as:

       * Addresses outside of the configured DHCP pool range
       * Excluded addresses defined by the 'dhcpClientExclude' testvar
       * Reserved addresses defined by the 'dhcpClientReservedIp[x]' and
         'dhcpClientReservedMac[x]' testvars


    References:

    IETF RFC 2131 "Dynamic Host Configuration Protocol"

    https://tools.ietf.org/html/rfc2131
Test Name Synopsis
Verify all DHCP clients can create a L2TP/IPSEC tunnel with NAT-T cdrouter_scale_40 Verify all DHCP clients can create a L2TP/IPSEC tunnel with NAT-T


    step 1. Determine the number of L2TP tunnels to create based on the value
            of the l2tpMaxTunnels testvar
    step 2. Create one DHCP client per L2TP tunnel
    step 3. Verify the client obtains an IP address within the range
    step 4. Verify there are no address conflicts
    step 5. Verify each client can establish an outbound L2TP/IPSEC tunnel
            to a unique IP destination address on the WAN side using NAT-T
    step 6. Release all new DHCP client leases

    NOTE: The DHCP address pool size is set in your configuration file using
    the 'dhcpClientStart' and 'dhcpClientEnd' testvars. These values must
    match the values set on the DUT. The pool size used in the test may be
    reduced if the testvar 'ipv4MaxLanClients' is defined with a value in your
    configuration.

    NOTE: If the maximum number of L2TP tunnels supported is less than
    the DHCP address pool size, not all DHCP clients will be used. The
    maximum number of L2TP tunnels is configured using the
    l2tpMaxTunnels variable.

    NOTE: All DHCP clients created during this test will use unique MAC
    addresses that do not conflict with any DHCP reservations that may be
    defined. This test will also verify that all clients receive valid DHCP
    addresses from the dynamic pool. A failure will be generated if any client
    receives an invalid address from the DHCP server. Invalid addresses are
    defined as:

       * Addresses outside of the configured DHCP pool range
       * Excluded addresses defined by the 'dhcpClientExclude' testvar
       * Reserved addresses defined by the 'dhcpClientReservedIp[x]' and
         'dhcpClientReservedMac[x]' testvars


    References:

    IETF RFC 2131 "Dynamic Host Configuration Protocol"

    https://tools.ietf.org/html/rfc2131

vservice.tcl

Port forwarding tests to verify configured virtual services on the router

Test Name Synopsis
Verify each configured TCP virtual service cdrouter_vservice_10 Verify each configured TCP virtual service


    step 1. Read all the configured virtual services for TCP
    step 2. For each service, initiate a TCP connection from the WAN
            to the router's WAN side IP address and specified TCP port
    step 3. Verify the TCP session is established
    step 4. Verify the TCP session is forwarded to the correct LAN host
    step 5. Close the TCP session
    step 6. Repeat for each TCP service

    NOTE: Up to 4096 virtual services can be configured in your configuration
    file using the virtualTcpService* entries. For example,

    testvar virtualTcpServicePort1        23
    testvar virtualTcpServiceHost1        192.168.1.200
    testvar virtualTcpServiceName1        telnet
    testvar virtualTcpServiceLanPort1     23

    testvar virtualTcpServicePort2        25
    testvar virtualTcpServiceHost2        192.168.1.201
    testvar virtualTcpServiceName2        smtp
    testvar virtualTcpServiceLanPort2     25

    The IP address on the LAN side for each virtual serivce must be on the
    same network as the "lanIp" address. You may also configure a different
    LAN port using the *LanPort* entries. By default, the LAN port for the
    service is the same as the WAN and does not need to be configured.

    NOTE: The expected IP source address of packets forwarded using the
    virtual service can be configured using the testvar 'virtualWANTransType'.
    This value can be set to "none", "public" or "private". When set to "none"
    (default), no IP address translation should be done on the IP source
    address of a packet incoming from the WAN to a configured virtual service.
    When set to "public", the router should use the WAN side IP address as the
    source address for all packets originating on the WAN that are forwarded
    to a virtual services port. When set to "private", the router should use
    the LAN side IP address as the source address for all packets originating
    on the WAN that are forwarded to a virtual service port.
Test Name Synopsis
Verify each configured UDP virtual service cdrouter_vservice_20 Verify each configured UDP virtual service


    step 1. Read all the configured virtual services for UDP
    step 2. For each service, send a UDP packet from the WAN
            to the router's WAN side IP address and specified UDP port
    step 3. Verify the UDP packet is forwarded to the correct LAN host
    step 4. Send a return UDP packet from the LAN host to the WAN originator
    step 5. Verify the UDP packet is forwarded back to the WAN
    step 6. Repeat for each UDP service

    NOTE: Up to 4096 virtual services can be configured in your configuration
    file using the virtualUdpService* entries. For example,

    testvar virtualUdpServicePort1        23
    testvar virtualUdpServiceHost1        192.168.1.200
    testvar virtualUdpServiceName1        telnet

    testvar virtualUdpServicePort2        25
    testvar virtualUdpServiceHost2        192.168.1.201
    testvar virtualUdpServiceName2        smtp

    The IP address on the LAN side for each virtual serivce must be on the
    same network as the "lanIp" address.
Test Name Synopsis
Verify TCP virtual services are reachable from the LAN side cdrouter_vservice_30 Verify TCP virtual services are reachable from the LAN side


    step 1. Read all the configured virtual services for TCP
    step 2. For each service, initiate a TCP connection from the LAN
            to the router's WAN side IP address and specified TCP port
    step 3. Verify the TCP session is established
    step 4. Verify the TCP session is forwarded to the correct LAN host
    step 5. Close the TCP session
    step 6. Repeat for each TCP service

    NOTE: Up to 4096 virtual services can be configured in your configuration
    file using the virtualTcpService* entries. For example,

    testvar virtualTcpServicePort1        23
    testvar virtualTcpServiceHost1        192.168.1.200
    testvar virtualTcpServiceName1        telnet

    testvar virtualTcpServicePort2        25
    testvar virtualTcpServiceHost2        192.168.1.201
    testvar virtualTcpServiceName2        smtp

    The IP address on the LAN side for each virtual serivce must be on the
    same network as the "lanIp" address.

    NOTE: The expected IP source address of packets forwarded using the
    virtual service can be configured using the testvar 'virtualLANTransType'.
    This value can be set to "public" or "private". When set to "public",
    the router should use the WAN side IP address as the source address for
    all packets originating on the LAN that are forwarded to a virtual services
    port. When set to "private", the router should use the LAN side IP address
    as the source address for all packets originating on the LAN that are
    forwarded to a virtual service port.
Test Name Synopsis
Verify UDP virtual services are reachable from the LAN side cdrouter_vservice_40 Verify UDP virtual services are reachable from the LAN side


    step 1. Read all the configured virtual services for UDP
    step 2. For each service, send a UDP packet from the LAN
            to the router's WAN side IP address and specified UDP port
    step 3. Verify the UDP packet is forwarded to the correct LAN host
    step 4. Send a return UDP packet from the LAN host to the LAN originator
    step 5. Verify the UDP packet is forwarded back to the LAN
    step 6. Repeat for each UDP service

    NOTE: Up to 4096 virtual services can be configured in your configuration
    file using the virtualUdpService* entries. For example,

    testvar virtualUdpServicePort1        23
    testvar virtualUdpServiceHost1        192.168.1.200
    testvar virtualUdpServiceName1        telnet

    testvar virtualUdpServicePort2        25
    testvar virtualUdpServiceHost2        192.168.1.201
    testvar virtualUdpServiceName2        smtp

    The IP address on the LAN side for each virtual serivce must be on the
    same network as the "lanIp" address.

    NOTE: The expected IP source address of packets forwarded using the
    virtual service can be configured using the testvar 'virtualLANTransType'.
    This value can be set to "public" or "private". When set to "public",
    the router should use the WAN side IP address as the source address for
    all packets originating on the LAN that are forwarded to a virtual services
    port. When set to "private", the router should use the LAN side IP address
    as the source address for all packets originating on the LAN that are
    forwarded to a virtual service port.

url-filter.tcl

URL filtering tests for LAN side HTTP clients

Test Name Synopsis
Verify HTTP GETs to filtered URLs are blocked cdrouter_urlfilter_10 Verify HTTP GETs to filtered URLs are blocked


    step 1. Set up new web server on WAN side using free network address
    step 2. Resolve domain address using DNS from LAN client
    step 3. Initiate TCP connection to web server from LAN client
    step 4. Verify TCP connection is opened
    step 5. Send HTTP GET from LAN client to new server for requested URL
    step 6. URL is considered blocked if one of the following occurs:
              a. The LAN client does not receive a page from the webserver
              b. The LAN client receives a page from the webserver, but
                 the HTTP status code is not 200 "OK"
              c. The LAN client receives a page from the webserver with
                 an HTTP status code of 200, but the returned page contains
                 text indicating that the page was administratively blocked,
                 as defined by the testvar 'urlFilterBlockedText'
    step 7. Repeat for each configured filtered URL
    step 8. Verify that each configured non-filtered URL returns a valid
            webpage

    NOTE: This test is only performed if the testvar 'urlFilterSupported'
    is set to "yes". The testvars 'filtered-urls' and 'non-filtered-urls'
    are used to specify which URLs are used during this test.

    NOTE: This test allows the CPE to block a URL by preventing establishment
    of the TCP connection in step 4, using a proxy to return a non-200 HTTP
    status code in step 6, or using a proxy to return a 200 HTTP status code
    in step 6 with alternate webpage text indicating that the page was
    admninistratively blocked. The testvar 'urlFilterBlockedText' should be
    configured with a portion of the expected text returned when a page is
    blocked by the CPE.
Test Name Synopsis
Verify HTTP GETs to filtered URLs are blocked without DNS lookups cdrouter_urlfilter_12 Verify HTTP GETs to filtered URLs are blocked without DNS lookups


    step 1. Set up new web server on WAN side using free network address
    step 2. Resolve only domain addresses for non-filtered URLs from LAN client
    step 3. Initiate TCP connection to web server from LAN client
    step 4. Verify TCP connection is opened
    step 5. Send HTTP GET from LAN client to new server for requested URL
    step 6. URL is considered blocked if one of the following occurs:
              a. The LAN client does not receive a page from the webserver
              b. The LAN client receives a page from the webserver, but
                 the HTTP status code is not 200 "OK"
              c. The LAN client receives a page from the webserver with
                 an HTTP status code of 200, but the returned page contains
                 text indicating that the page was administratively blocked,
                 as defined by the testvar 'urlFilterBlockedText'
    step 7. Repeat for each configured filtered URL
    step 8. Verify that each configured non-filtered URL returns a valid
            webpage

    NOTE: This test is only performed if the testvar 'urlFilterSupported'
    is set to "yes". The testvars 'filtered-urls' and 'non-filtered-urls'
    are used to specify which URLs are used during this test.

    NOTE: This test allows the CPE to block a URL by preventing establishment
    of the TCP connection in step 4, using a proxy to return a non-200 HTTP
    status code in step 6, or using a proxy to return a 200 HTTP status code
    in step 6 with alternate webpage text indicating that the page was
    admninistratively blocked. The testvar 'urlFilterBlockedText' should be
    configured with a portion of the expected text returned when a page is
    blocked by the CPE.
Test Name Synopsis
Verify HTTP HEADs to filtered URLs are blocked cdrouter_urlfilter_15 Verify HTTP HEADs to filtered URLs are blocked


    step 1. Set up new web server on WAN side using free network address
    step 2. Resolve domain address using DNS from LAN client
    step 3. Initiate TCP connection to web server from LAN client
    step 4. Verify TCP connection is opened
    step 5. Send HTTP HEAD from LAN client to new server for requested URL
    step 6. URL is considered blocked if one of the following occurs:
              a. The LAN client does not receive a page from the webserver
              b. The LAN client receives a page from the webserver, but
                 the HTTP status code is not 200 "OK"
              c. The LAN client receives a page from the webserver with
                 an HTTP status code of 200, but the returned page contains
                 text indicating that the page was administratively blocked,
                 as defined by the testvar 'urlFilterBlockedText'
    step 7. Repeat for each configured filtered URL
    step 8. Verify that each configured non-filtered URL returns a valid
            webpage

    NOTE: This test is only performed if the testvar 'urlFilterSupported'
    is set to "yes". The testvars 'filtered-urls' and 'non-filtered-urls'
    are used to specify which URLs are used during this test.

    NOTE: This test allows the CPE to block a URL by preventing establishment
    of the TCP connection in step 4, using a proxy to return a non-200 HTTP
    status code in step 6, or using a proxy to return a 200 HTTP status code
    in step 6 with alternate webpage text indicating that the page was
    admninistratively blocked. The testvar 'urlFilterBlockedText' should be
    configured with a portion of the expected text returned when a page is
    blocked by the CPE.
Test Name Synopsis
Verify HTTP POSTs to filtered URLs are blocked cdrouter_urlfilter_20 Verify HTTP POSTs to filtered URLs are blocked


    step 1. Set up new web server on WAN side using free network address
    step 2. Resolve domain address using DNS from LAN client
    step 3. Initiate TCP connection to web server from LAN client
    step 4. Verify TCP connection is opened
    step 5. Send HTTP POST from LAN client to new server for requested URL
    step 6. URL is considered blocked if one of the following occurs:
              a. The LAN client does not receive a page from the webserver
              b. The LAN client receives a page from the webserver, but
                 the HTTP status code is not 200 "OK"
              c. The LAN client receives a page from the webserver with
                 an HTTP status code of 200, but the returned page contains
                 text indicating that the page was administratively blocked,
                 as defined by the testvar 'urlFilterBlockedText'
    step 7. Repeat for each configured filtered URL
    step 8. Verify that each configured non-filtered URL returns a valid
            webpage

    NOTE: This test is only performed if the testvar 'urlFilterSupported'
    is set to "yes". The testvars 'filtered-urls' and 'non-filtered-urls'
    are used to specify which URLs are used during this test.

    NOTE: This test allows the CPE to block a URL by preventing establishment
    of the TCP connection in step 4, using a proxy to return a non-200 HTTP
    status code in step 6, or using a proxy to return a 200 HTTP status code
    in step 6 with alternate webpage text indicating that the page was
    admninistratively blocked. The testvar 'urlFilterBlockedText' should be
    configured with a portion of the expected text returned when a page is
    blocked by the CPE.
Test Name Synopsis
Verify URL filtering does not look at Cookie data cdrouter_urlfilter_30 Verify URL filtering does not look at Cookie data


    step 1. Set up new web server on WAN side using free network address
    step 2. Resolve domain address using DNS from LAN client
    step 3. Initiate TCP connection to web server from LAN client
    step 4. Verify TCP connection is opened
    step 5. Send HTTP GET from LAN client to new server for requested URL
    step 6. Use one of the filtered URLs as the cookie data
    step 7. Verify webserver does return a response
    step 8. Repeat for each configured allowed URL

    NOTE: This test is only performed if the testvar 'urlFilterSupported'
    is set to "yes". The testvars 'filtered-urls' and 'non-filtered-urls'
    are used to specify which URLs are used during this test.
Test Name Synopsis
Verify HTTPS GETs to filtered URLs are blocked cdrouter_urlfilter_40 Verify HTTPS GETs to filtered URLs are blocked


    step 1.  Set up new HTTPS server on WAN side using free network address
    step 2.  Resolve domain address using DNS from LAN client
    step 3.  Initiate TCP connection to web server from LAN client
    step 4.  If TCP connection is not established, skip to step 9
    step 5.  Verify TCP connection is opened
    step 6.  Establish SSL connection to server
    step 7.  Send HTTPS GET from LAN client to new server for requested URL
    step 8.  URL is considered blocked if one of the following occurs:
              a. The LAN client does not receive a page from the webserver
              b. The LAN client receives a page from the webserver, but
                 the HTTP status code is not 200 "OK"
              c. The LAN client receives a page from the webserver with
                 an HTTP status code of 200, but the returned page contains
                 text indicating that the page was administratively blocked,
                 as defined by the testvar 'urlFilterBlockedText'
    step 9.  Repeat for each configured filtered URL
    step 10. Verify that each configured non-filtered URL returns a valid
             webpage

    NOTE: This test is only performed if the testvar 'urlFilterSupported'
    is set to "yes". The testvars 'filtered-urls' and 'non-filtered-urls'
    are used to specify which URLs are used during this test.

    NOTE: This test allows the CPE to block a URL by preventing establishment
    of the TCP connection in step 4, using a proxy to return a non-200 HTTP
    status code in step 8, or using a proxy to return a 200 HTTP status code
    in step 8 with alternate webpage text indicating that the page was
    admninistratively blocked. The testvar 'urlFilterBlockedText' should be
    configured with a portion of the expected text returned when a page is
    blocked by the CPE.

triggerp.tcl

Tests to verify configured trigger ports on the router

Test Name Synopsis
Verify basic case for each configured trigger port application cdrouter_tport_10 Verify basic case for each configured trigger port application


    step 1. Read all the configured trigger ports
    step 2. For each port, verify that none of the public triggered ports
            are currently open on the WAN side.
    step 3. Initiate a TCP or UDP session from the LAN to the WAN side
            using the triggered port as the destination port.
    step 4. Verify the TCP or UDP session is created
    step 5. For each public port that should now be triggered, open
            a connection from the WAN to the LAN using the public
            port as the destination port and the router's nat IP address
            as the destination IP address
    step 5. Verify a connection can be estabished for each public port
    step 6. Close down each public port
    step 7. Close down the original LAN side connection used for the trigger
    step 8. Repeat for each configured port trigger

    NOTE: Up to 4096 trigger ports can be configured in your configuration
    file. For example,

    testvar triggerName1                  net2phone-1
    testvar triggerPort1                  6801
    testvar triggerType1                  udp
    testvar triggerPublic1                30000
    testvar triggerPublicType1            both

    testvar triggerName2                  app1
    testvar triggerPort2                  20000
    testvar triggerType2                  udp
    testvar triggerPublic2                20001-20010
    testvar triggerPublicType2            udp

    NOTE: Many routers will not time out the triggered port connection once
    it is open. This will cause this test to fail if it is executed more
    than once.

    The PublicType may be either "tcp", "udp", or "both". If "both" is used,
    the test case will verify both a TCP and UDP connection for each port
    in the Public range.

    A delay can be configured between each trigger port. This is sometimes
    required for port trigger implementations using Smart ALGs. To configure
    the delay, configure the testvar 'portTriggerDelay' with the number of
    milliseconds.

    A delay can also be configured before a trigger port is verified as being
    open with WAN to LAN traffic. This is sometimes required for
    implemenatations that have a delay associated with processing the outbound
    trigger packet. To configure the delay, configure the testvar
    'portTriggerOpenDelay' with the number of milliseconds.

    Examples:

    testvar portTriggerDelay 5000
    testvar portTriggerOpenDelay 1000
Test Name Synopsis
Verify multiple LAN hosts can use trigger ports after mappings are aged out cdrouter_tport_30 Verify multiple LAN hosts can use trigger ports after mappings are aged out


    step 1. Read all the configured trigger ports
    step 2. Create a second DHCP LAN client
    step 3. Initiate a TCP or UDP session from the LAN to the WAN side
            using the triggered port as the destination port
    step 4. Verify the TCP or UDP session is created
    step 5. For each public port that should now be triggered, open
            a connection from the WAN to the LAN using the public
            port as the destination port and the router's nat IP address
            as the destination IP address.
    step 6. Verify a connection can be estabished for each public port
    step 7. Close down each public port
    step 8. Close down the original LAN side connection used for the trigger
    step 9. Wait for port mappings to be aged out
    step 10. Repeat from step 2. using the second LAN client
    step 11. Repeat for each configured port trigger

    NOTE: The port mapping aging time for trigger ports is configured
    using the portTriggerTimeout variable in your config file. Your
    router must support the aging of trigger ports in order to run this
    test.

    NOTE: Up to 4096 trigger ports can be configured in your configuration
    file. For example,

    testvar triggerName1                  net2phone-1
    testvar triggerPort1                  6801
    testvar triggerType1                  udp
    testvar triggerPublic1                30000
    testvar triggerPublicType1            both

    NOTE: Many routers will not time out the triggered port connection once
    it is open. This will cause this test to fail if it is executed more
    than once.

    The PublicType may be either tcp, udp, or both. If "both" is used,
    the test case will verify both a TCP and UDP connection for each port
    in the Public range.

    A delay can be configured between each trigger port. This is sometimes
    required for port trigger implementations using Smart ALGs. To configure
    the delay, configure the testvar 'portTriggerDelay' with the number of
    milliseconds.

    A delay can also be configured before a trigger port is verified as being
    open with WAN to LAN traffic. This is sometimes required for
    implemenatations that have a delay associated with processing the outbound
    trigger packet. To configure the delay, configure the testvar
    'portTriggerOpenDelay' with the number of milliseconds.

    Examples:

    testvar portTriggerDelay 5000
    testvar portTriggerOpenDelay 1000

upnp.tcl

UPnP tests for routers that support IGDv1/IGDv2 devices

Test Name Synopsis
Verify UPnP router responds to SSDP Discovery Requests on LAN cdrouter_ssdp_1 Verify UPnP router responds to SSDP Discovery Requests on LAN


    step 1. Build a SSDP M-SEARCH request for search target "ssdp:all"
    step 2. Send M-SEARCH request using unique UDP source port
    step 3. Wait up to 5 seconds for all responses sent to UDP source port
    step 4. For each response, verify the required headers are included


    References:

    UPnP Device Architecture 1.1 Section 1: Discovery

    http://www.upnp.org/specs/arch/UPnP-arch-DeviceArchitecture-v1.1.pdf1
Test Name Synopsis
Verify UPnP router does not respond to SSDP Discovery Requests on WAN cdrouter_ssdp_2 Verify UPnP router does not respond to SSDP Discovery Requests on WAN


    step 1. Build a SSDP M-SEARCH request for search target "ssdp:all"
    step 2. Send M-SEARCH request on WAN side of router
    step 3. Wait up to 5 seconds for all responses sent
    step 4. Verify no responses are received


    References:

    UPnP Device Architecture 1.1 Section 1: Discovery

    http://www.upnp.org/specs/arch/UPnP-arch-DeviceArchitecture-v1.1.pdf1
Test Name Synopsis
Verify UPnP router supports discovery of required IGD devices and services cdrouter_ssdp_3 Verify UPnP router supports discovery of required IGD devices and services


    step 1. Build a M-SEARCH request for search for each required device/service
    step 2. Send M-SEARCH request using unique UDP source port
    step 3. Wait up to 5 seconds for all responses sent to UDP source port
    step 4. For each response, verify the required headers are included

    Required device and service URNs:

      urn:schemas-upnp-org:device:InternetGatewayDevice:1
      urn:schemas-upnp-org:device:WANDevice:1
      urn:schemas-upnp-org:device:WANConnectionDevice:1
      urn:schemas-upnp-org:device:LANDevice:1

      urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1
      urn:schemas-upnp-org:service:WANPPPConnection:1 (PPP based WAN only)
      urn:schemas-upnp-org:service:WANIPConnection:1  (not required for PPP)

    NOTE: Support for UPnP LANDevice:1 template is now configurable. If
    the router under test does not support the LANDevice:1
    template, the 'upnpLANDevice' testvar should be configured to
    no. If LANDevice is supported, the testvar should be configured
    to yes.


    References:

    InternetGatewayDevice:1 Device Template Version 1.01

    http://upnp.org/specs/gw/UPnP-gw-InternetGatewayDevice-v1-Device.pdf

    WANIPConnection:1 Service Template Version 1.01

    http://upnp.org/specs/gw/UPnP-gw-WANIPConnection-v1-Service.pdf

    WANIPConnection:2 Service Template Version 1.01

    http://upnp.org/specs/gw/UPnP-gw-WANIPConnection-v2-Service.pdf
Test Name Synopsis
Verify UPnP router does not respond to SSDP Discovery Requests without MX header cdrouter_ssdp_4 Verify UPnP router does not respond to SSDP Discovery Requests without MX header


    step 1. Build a SSDP M-SEARCH request for search target "ssdp:all"
            that does not include an MX header
    step 2. Send M-SEARCH request on LAN side of router
    step 3. Wait up to 5 seconds for all responses sent
    step 4. Verify no responses are received


    References:

    UPnP Device Architecture 1.1 Section 1.3.3: Search response

    http://www.upnp.org/specs/arch/UPnP-arch-DeviceArchitecture-v1.1.pdf1.3.3
Test Name Synopsis
Verify UPnP router responds to unicast SSDP Discovery Requests on LAN cdrouter_ssdp_5 Verify UPnP router responds to unicast SSDP Discovery Requests on LAN


    step 1. Build a SSDP M-SEARCH request for search target "ssdp:all"
    step 2. Send a unicast M-SEARCH request using unique UDP source port
    step 3. Wait up to 5 seconds for all responses sent to UDP source port
    step 4. For each response, verify the required headers are included


    References:

    UPnP Device Architecture 1.1 Section 1: Discovery

    http://www.upnp.org/specs/arch/UPnP-arch-DeviceArchitecture-v1.1.pdf1
Test Name Synopsis
Verify required headers of M-SEARCH responses on LAN cdrouter_ssdp_6 Verify required headers of M-SEARCH responses on LAN


    step 1. Build a SSDP M-SEARCH request for search target "ssdp:all"
    step 2. Send M-SEARCH request using unique UDP source port
    step 3. Wait up to 5 seconds for all responses sent to UDP source port
    step 4. For each response, verify the required headers are included


    References:

    UPnP Device Architecture 1.1 Section 1: Discovery

    http://www.upnp.org/specs/arch/UPnP-arch-DeviceArchitecture-v1.1.pdf1
Test Name Synopsis
Verify XML description of IGD root device can be parsed cdrouter_upnp_10 Verify XML description of IGD root device can be parsed


    step 1. Find the description URL for the root device using SSDP
    step 2. Send HTTP GET to load description URL
    step 3. Verify the response can be parsed using XML parser

    Required root device:

      urn:schemas-upnp-org:device:InternetGatewayDevice:1


    References:

    InternetGatewayDevice:1 Device Template Version 1.01

    http://upnp.org/specs/gw/UPnP-gw-InternetGatewayDevice-v1-Device.pdf
Test Name Synopsis
Verify XML descriptions cannot be loaded from the WAN side of router cdrouter_upnp_12 Verify XML descriptions cannot be loaded from the WAN side of router


    step 1. Find the description URL for the root device using SSDP on LAN
    step 2. Send HTTP GET from the WAN side to load description URL
    step 3. Send HTTP GET using router's WAN side public IP and private IP
    step 4. Verify description cannot be loaded using HTTP


    References:

    UPnP Device Architecture 1.1 Section 1: Discovery

    http://www.upnp.org/specs/arch/UPnP-arch-DeviceArchitecture-v1.1.pdf1
Test Name Synopsis
Verify XML description for WANIPConnection or WANPPPConnection service can be parsed cdrouter_upnp_20 Verify XML description for WANIPConnection or WANPPPConnection service can be parsed


    step 1. Find the description URL for the WANIPConnection or
            WANPPPConnection service using SSDP
    step 2. Send HTTP GET to load description URL
    step 3. Verify the response can be parsed using XML parser

    Required service name:

    urn:schemas-upnp-org:service:WANIPConnection:1
    urn:schemas-upnp-org:service:WANPPPConnection:1

    NOTE: The testvar 'upnpWANPPPConnection' is used to configure the test case
    to use the WANPPPConnection service. Otherwise, CDRouter will test for the
    WANIPConnection service.


    References:

    InternetGatewayDevice:1 Device Template Version 1.01

    http://upnp.org/specs/gw/UPnP-gw-InternetGatewayDevice-v1-Device.pdf
Test Name Synopsis
Verify router responds to UPnP Query for ConnectionStatus cdrouter_upnp_25 Verify router responds to UPnP Query for ConnectionStatus


    step 1. Find Control URL for WANIPConnection service
    step 2. Send UPnP Query for ConnectionStatus via SOAP POST
    step 3. Verify ConnectionStatus variable is returned in SOAP response

    NOTE: The QueryStateVariable action has been deprecated by the UPnP Forum.
    This test should be skipped if the device does not support the
    QueryStateVariable action.


    References:

    UPnP Device Architecture 1.0 Section 3.3.1: Control: Query: Invoke

    http://www.upnp.org/specs/arch/UPnP-arch-DeviceArchitecture-v1.0-20080424.pdf3.3.1
Test Name Synopsis
Verify UPnP GetExternalIPAddress Action returns WAN IP address cdrouter_upnp_30 Verify UPnP GetExternalIPAddress Action returns WAN IP address


    step 1. Find Control URL for WANIPConnection or WANPPPConnection service
    step 2. Send UPnP Action for GetExternalIPAddress
    step 3. Verify Action succeeds with HTTP return code 200
    step 4. Verify IP address returned in the NewExternalIPAddress
            attribute is the correct WAN IP address


    References:

    WANIPConnection:1 Service Template Version 1.01 Section 2.4.18: GetExternalIPAddress

    http://upnp.org/specs/gw/UPnP-gw-WANIPConnection-v1-Service.pdf2.4.18
Test Name Synopsis
Verify UPnP GetStatusInfo Action returns correct ConnectionStatus information cdrouter_upnp_31 Verify UPnP GetStatusInfo Action returns correct ConnectionStatus information


    step 1. Find Control URL for WANIPConnection or WANPPPConnection service
    step 2. Send UPnP Action for GetStatusInfo
    step 3. Verify Action succeeds with HTTP return code 200
    step 4. Verify returned ConnectionStatus is in the 'Connected' state


    References:

    WANIPConnection:1 Service Template Version 1.01 Section 2.4.9: GetStatusInfo

    http://upnp.org/specs/gw/UPnP-gw-WANIPConnection-v1-Service.pdf2.4.9
Test Name Synopsis
Verify UPnP GetStatusInfo Action returns increasing Uptime value cdrouter_upnp_32 Verify UPnP GetStatusInfo Action returns increasing Uptime value


    step 1. Find Control URL for WANIPConnection or WANPPPConnection service
    step 2. Send UPnP Action for GetStatusInfo
    step 3. Verify Action succeeds with HTTP return code 200
    step 4. Save the current Uptime
    step 5. Wait 10 seconds
    step 6. Send UPnP Action for GetStatusInfo
    step 7. Verify Action succeeds with HTTP return code 200
    step 8. Verify Uptime has increased by at least 10 seconds


    References:

    WANIPConnection:1 Service Template Version 1.01 Section 2.4.9: GetStatusInfo

    http://upnp.org/specs/gw/UPnP-gw-WANIPConnection-v1-Service.pdf2.4.9
Test Name Synopsis
Add/delete dynamic UPnP TCP port mapping for wildcard IP source address cdrouter_upnp_35 Add/delete dynamic UPnP TCP port mapping for wildcard IP source address


    step 1. Find Control URL for WANIPConnection or WANPPPConnection service
    step 2. Send UPnP Action for AddPortMapping with wildcard
            for NewRemoteHost ("") and NewLeaseDuration of 0
    step 3. Verify Action returns HTTP 200 status code
    step 4. Initiate inbound TCP connection to new port mapping
    step 5. Verify TCP connection is established
    step 6. Initiate second inbound TCP connection from different IP
            source address on the WAN side
    step 7. Verify 2nd TCP connection is established
    step 8. Close both TCP connections
    step 9. Delete port mapping using DeletePortMapping Action
    step 10. Wait 5 seconds for port mapping to be deleted
    step 11. Initiate inbound TCP connection for port mapping from WAN side
    step 12. Verify inbound TCP connection is blocked


    References:

    WANIPConnection:1 Service Template Version 1.01 Section 2.4.16: AddPortMapping

    http://upnp.org/specs/gw/UPnP-gw-WANIPConnection-v1-Service.pdf2.4.16

    WANIPConnection:1 Service Template Version 1.01 Section 2.4.17: DeletePortMapping

    http://upnp.org/specs/gw/UPnP-gw-WANIPConnection-v1-Service.pdf2.4.17
Test Name Synopsis
Add/delete dynamic UPnP TCP port mapping for specific IP source address cdrouter_upnp_36 Add/delete dynamic UPnP TCP port mapping for specific IP source address


    step 1. Find Control URL for WANIPConnection or WANPPPConnection service
    step 2. Send UPnP Action for AddPortMapping with specific IP address (A)
            for NewRemoteHost ("") and NewLeaseDuration of 0
    step 3. Verify Action returns HTTP 200 status code
    step 4. Initiate inbound TCP connection from specific IP address (A)
            to new port mapping
    step 5. Verify TCP connection is established
    step 6. Initiate second inbound TCP connection from different IP
            source address (B) on the WAN side
    step 7. Verify 2nd TCP connection is blocked
    step 8. Close both TCP connections
    step 9. Delete port mapping using DeletePortMapping Action
    step 10. Wait 5 seconds for port mapping to be deleted
    step 11. Initiate inbound TCP connection for port mapping from WAN side
             from specific ip address (A)
    step 12. Verify inbound TCP connection is blocked


    References:

    WANIPConnection:1 Service Template Version 1.01 Section 2.4.16: AddPortMapping

    http://upnp.org/specs/gw/UPnP-gw-WANIPConnection-v1-Service.pdf2.4.16

    WANIPConnection:1 Service Template Version 1.01 Section 2.4.17: DeletePortMapping

    http://upnp.org/specs/gw/UPnP-gw-WANIPConnection-v1-Service.pdf2.4.17
Test Name Synopsis
Add/delete dynamic UPnP UDP port mapping for wildcard IP source address cdrouter_upnp_40 Add/delete dynamic UPnP UDP port mapping for wildcard IP source address


    step 1. Find Control URL for WANIPConnection or WANPPPConnection service
    step 2. Send UPnP Action for AddPortMapping with wildcard
            for NewRemoteHost (""), NewProtocol UDP and NewLeaseDuration of 0
    step 3. Verify Action returns HTTP 200 status code
    step 4. Initiate inbound UDP connection to new port mapping
    step 5. Verify UDP connection is established
    step 6. Initiate second inbound UDP connection from different IP
            source address on the WAN side
    step 7. Verify 2nd UDP connection is established
    step 8. Delete port mapping using DeletePortMapping Action
    step 9. Wait 5 seconds for port mapping to be deleted
    step 10. Initiate inbound UDP connection for port mapping from WAN side
    step 11. Verify inbound UDP connection is blocked


    References:

    WANIPConnection:1 Service Template Version 1.01 Section 2.4.16: AddPortMapping

    http://upnp.org/specs/gw/UPnP-gw-WANIPConnection-v1-Service.pdf2.4.16

    WANIPConnection:1 Service Template Version 1.01 Section 2.4.17: DeletePortMapping

    http://upnp.org/specs/gw/UPnP-gw-WANIPConnection-v1-Service.pdf2.4.17
Test Name Synopsis
Add/delete dynamic UPnP UDP port mapping for specific IP source address cdrouter_upnp_41 Add/delete dynamic UPnP UDP port mapping for specific IP source address


    step 1. Find Control URL for WANIPConnection or WANPPPConnection service
    step 2. Send UPnP Action for AddPortMapping with specific IP address (A)
            for NewRemoteHost (""), NewProtocol UDP and NewLeaseDuration of 0
    step 3. Verify Action returns HTTP 200 status code
    step 4. Initiate inbound UDP connection from specific IP address (A)
            to new port mapping
    step 5. Verify UDP connection is established
    step 6. Initiate second inbound UDP connection from different IP
            source address (B) on the WAN side
    step 7. Verify 2nd UDP connection is blocked
    step 8. Delete port mapping using DeletePortMapping Action
    step 9. Wait 5 seconds for port mapping to be deleted
    step 10. Initiate inbound UDP connection for port mapping from WAN side
             from specific ip address (A)
    step 11. Verify inbound UDP connection is blocked


    References:

    WANIPConnection:1 Service Template Version 1.01 Section 2.4.16: AddPortMapping

    http://upnp.org/specs/gw/UPnP-gw-WANIPConnection-v1-Service.pdf2.4.16

    WANIPConnection:1 Service Template Version 1.01 Section 2.4.17: DeletePortMapping

    http://upnp.org/specs/gw/UPnP-gw-WANIPConnection-v1-Service.pdf2.4.17
Test Name Synopsis
Verify UPnP Router rejects new port mappings that conflict cdrouter_upnp_45 Verify UPnP Router rejects new port mappings that conflict


    step 1. Start second client on LAN interface
    step 2. Find Control URL for WANIPConnection or WANPPPConnection service
    step 3. Send UPnP Action for AddPortMapping from the first DHCP client
    step 4. Verify Action returns HTTP 200 status code
    step 5. Send 2nd UPnP Action for AddPortMapping from the second client
            using the same external port number and protocol
    step 6. Verify AddPortMapping Action fails
    step 7. Delete port mapping using DeletePortMapping Action


    References:

    WANIPConnection:1 Service Template Version 1.01 Section 2.4.16: AddPortMapping

    http://upnp.org/specs/gw/UPnP-gw-WANIPConnection-v1-Service.pdf2.4.16
Test Name Synopsis
Verify dynamic UPnP port mapping is deleted when lease expires cdrouter_upnp_50 Verify dynamic UPnP port mapping is deleted when lease expires


    step 1. Find Control URL for WANIPConnection or WANPPPConnection service
    step 2. Send UPnP Action for AddPortMapping with lease of 30 seconds
    step 3. Verify Action returns HTTP 200 status code
    step 4. Initiate inbound TCP connection to new port mapping
    step 5. Verify TCP connection is established
    step 6. Close TCP connection
    step 7. Wait 45 seconds for lease to be deleted
    step 8. Initiate inbound TCP connection to new port mapping
    step 9. Verify TCP connection is blocked


    References:

    WANIPConnection:1 Service Template Version 1.01 Section 2.4.16: AddPortMapping

    http://upnp.org/specs/gw/UPnP-gw-WANIPConnection-v1-Service.pdf2.4.16

    WANIPConnection:1 Service Template Version 1.01 Section 2.4.17: DeletePortMapping

    http://upnp.org/specs/gw/UPnP-gw-WANIPConnection-v1-Service.pdf2.4.17
Test Name Synopsis
Maximum number of UPnP TCP dynamic port mappings cdrouter_upnp_100 Maximum number of UPnP TCP dynamic port mappings


    step 1. Determine the maximum number of UPnP TCP port mappings

    NOTE: This is configured in your configuration file using  the
    the testvar 'upnpMaxTcpMappings'.

    step 2. Create a unique port mapping using the AddPortMapping Action
            up to the maximum number supported
    step 3. For each mapping, establish an inbound TCP connection
    step 4. Verify each TCP connection can be established
    step 5. Delete each port mapping using the DeletePortMapping Action


    References:

    WANIPConnection:1 Service Template Version 1.01 Section 2.4.16: AddPortMapping

    http://upnp.org/specs/gw/UPnP-gw-WANIPConnection-v1-Service.pdf2.4.16

    WANIPConnection:1 Service Template Version 1.01 Section 2.4.17: DeletePortMapping

    http://upnp.org/specs/gw/UPnP-gw-WANIPConnection-v1-Service.pdf2.4.17
Test Name Synopsis
Verify UPnP clients can subscribe/unsubcribe to events for WANIPConnection or WANPPPConnection cdrouter_upnp_200 Verify UPnP clients can subscribe/unsubcribe to events for WANIPConnection or WANPPPConnection


    step 1. Find Control URL for WANIPConnection or WANPPPConnection service
    step 2. Send SUBSCRIBE for eventSubURL
    step 3. Verify SUBSCRIBE returns HTTP 200 OK response
    step 4. Wait for initial NOTIFY event
    step 5. Send UNSUBSCRIBE for eventSubURL
    step 6. Verify UNSUBSCRIBE returns HTTP 200 OK response


    References:

    UPnP Device Architecture 1.1 Section 4.0: Eventing

    http://www.upnp.org/specs/arch/UPnP-arch-DeviceArchitecture-v1.1.pdf4.0
Test Name Synopsis
Verify UPnP clients can subscribe to events with infinite subscription time cdrouter_upnp_201 Verify UPnP clients can subscribe to events with infinite subscription time


    step 1. Find Control URL for WANIPConnection or WANPPPConnection service
    step 2. Send SUBSCRIBE for eventSubURL using Timeout of infinite
    step 3. Verify SUBSCRIBE returns HTTP 200 OK response
    step 4. Wait for initial NOTIFY event
    step 5. Send UNSUBSCRIBE for eventSubURL
    step 6. Verify UNSUBSCRIBE returns HTTP 200 OK response


    References:

    UPnP Device Architecture 1.1 Section 4.0: Eventing

    http://www.upnp.org/specs/arch/UPnP-arch-DeviceArchitecture-v1.1.pdf4.0
Test Name Synopsis
Verify UPnP clients can renew NOTIFY events for WANIPConnection or WANPPPConnection cdrouter_upnp_202 Verify UPnP clients can renew NOTIFY events for WANIPConnection or WANPPPConnection


    step 1. Find Control URL for WANIPConnection or WANPPPConnection service
    step 2. Send SUBSCRIBE for eventSubURL
    step 3. Verify SUBSCRIBE returns HTTP 200 OK response
    step 4. Wait for initial NOTIFY event
    step 5. Send SUBSCRIBE renewal for NOTIFY events
    step 6. Verify SUBSCRIBE renewal returns HTTP 200 OK response
    step 7. Send UNSUBSCRIBE for eventSubURL
    step 8. Verify UNSUBSCRIBE returns HTTP 200 OK response


    References:

    UPnP Device Architecture 1.1 Section 4.0: Eventing

    http://www.upnp.org/specs/arch/UPnP-arch-DeviceArchitecture-v1.1.pdf4.0
Test Name Synopsis
Verify router sends UPnP NOTIFY events for ConnectionStatus cdrouter_upnp_203 Verify router sends UPnP NOTIFY events for ConnectionStatus


    step 1. Find Control URL for WANIPConnection or WANPPPConnection service
    step 2. Send SUBSCRIBE for eventSubURL
    step 3. Verify SUBSCRIBE returns HTTP 200 OK response
    step 4. Wait for initial NOTIFY event
    step 5. Verify ConnectionStatus is 'Connected'
    step 6. Bring down WAN link
    step 7. Wait for NOTIFY event with new ConnectionStatus
    step 8. Verify ConnectionStatus is not 'Connected'
    step 9. Bring up WAN link
    step 10. Wait for NOTIFY event with new ConnectionStatus
    step 11. Verify ConnectionStatus is 'Connected'
    step 12. Send UNSUBSCRIBE for eventSubURL
    step 13. Verify UNSUBSCRIBE returns HTTP 200 OK response

    NOTE: This test is not supported when the wanMode is static.


    References:

    UPnP Device Architecture 1.1 Section 4.0: Eventing

    http://www.upnp.org/specs/arch/UPnP-arch-DeviceArchitecture-v1.1.pdf4.0
Test Name Synopsis
Verify router sends UPnP NOTIFY events with updated ExternalIPAddress cdrouter_upnp_204 Verify router sends UPnP NOTIFY events with updated ExternalIPAddress


    step 1. Find Control URL for WANIPConnection or WANPPPConnection service
    step 2. Send SUBSCRIBE for eventSubURL
    step 3. Verify SUBSCRIBE returns HTTP 200 OK response
    step 4. Wait for initial NOTIFY event
    step 5. Verify ExternalIPAddress matches current assigned WAN IP
    step 6. Bring down WAN link
    step 7. Bring up WAN link with new external IP address
    step 8. Wait for NOTIFY event with new ExternalIPAddress
    step 9. Verify ExternalIPAddress is new IP address
    step 10. Bring down WAN link
    step 11. Bring up WAN link with new original IP address
    step 12. Wait for NOTIFY event with new ExternalIPAddress
    step 13. Verify ExternalIPAddress is original IP address
    step 14. Send UNSUBSCRIBE for eventSubURL
    step 15. Verify UNSUBSCRIBE returns HTTP 200 OK response


    References:

    UPnP Device Architecture 1.1 Section 4.0: Eventing

    http://www.upnp.org/specs/arch/UPnP-arch-DeviceArchitecture-v1.1.pdf4.0
Test Name Synopsis
Verify router stops sending NOTIFY events when subscription expires cdrouter_upnp_210 Verify router stops sending NOTIFY events when subscription expires


    step 1. Find Control URL for WANIPConnection or WANPPPConnection service
    step 2. Send SUBSCRIBE for eventSubURL using minimum subscriber timeout
    step 3. Verify SUBSCRIBE returns HTTP 200 OK response
    step 4. Wait for initial NOTIFY event
    step 5. Verify ConnectionStatus is 'Connected'
    step 6. Wait minimum subscriber timeout seconds for subscription to expire
    step 7. Bring down WAN link
    step 8. Wait for NOTIFY event
    step 9. Verify NOTIFY event is not received
    step 10. Bring up WAN link
    step 11. Wait for NOTIFY event
    step 12. Verify NOTIFY event is not received
    step 13. Do not UNSUBSCRIBE since subscription should be expired


    References:

    UPnP Device Architecture 1.1 Section 4.0: Eventing

    http://www.upnp.org/specs/arch/UPnP-arch-DeviceArchitecture-v1.1.pdf4.0
Test Name Synopsis
Verify the maximum number of UPnP event subscriptions that can be created cdrouter_upnp_220 Verify the maximum number of UPnP event subscriptions that can be created


    step 1. Find Control URL for WANIPConnection or WANPPPConnection service
    step 2. For each event client, send SUBSCRIBE for eventSubURL
    step 3. Verify SUBSCRIBE returns HTTP 200 OK response
    step 4. For each event client, wait for initial NOTIFY event
    step 5. Verify ConnectionStatus is 'Connected'
    step 6. Bring down WAN link
    step 7. For each event client, wait for NOTIFY event with new ConnectionStatus
    step 8. For each event client, verify ConnectionStatus is not 'Connected'
    step 9. Bring up WAN link
    step 10. For each event client, wait for NOTIFY event with new ConnectionStatus
    step 11. For each event client, verify ConnectionStatus is 'Connected'
    step 12. For each event client, send UNSUBSCRIBE for eventSubURL
    step 13. For each event client, verify UNSUBSCRIBE returns HTTP 200 OK response

    NOTE: The number of UPnP subscribers can be configured using the testvar
    upnpMaxSubClients. If not configured, the default is 10 subscribers.


    References:

    UPnP Device Architecture 1.1 Section 4.0: Eventing

    http://www.upnp.org/specs/arch/UPnP-arch-DeviceArchitecture-v1.1.pdf4.0
Test Name Synopsis
Check for UPnP format string vulnerability used by BCMPUPnP_Hunter malware cdrouter_upnp_400 Check for UPnP format string vulnerability used by BCMPUPnP_Hunter malware


    step 1. Find Control URL for WANIPConnection or WANPPPConnection service
    step 2. Send UPnP Action for SetConnectionType with string format
    step 3. Verify Action does not return HTTP 200 status code
    step 4. Send UPnP Action for GetConnectionTypeInfo to trigger exploit


    References:

    Broadcom UPnP Remote Preauth Code Execution Vulnerability

    https://www.defensecode.com/public/DefenseCode_Broadcom_Security_Advisory.pdf/

    From Zero to ZeroDay Journey: Router Hacking (WRT54GL Linksys Case)

    https://defensecode.com/whitepapers/From_Zero_To_ZeroDay_Network_Devices_Exploitation.txt
Test Name Synopsis
Verify UPnP router supports discovery of required devices and services (IGD2) cdrouter_ssdp_igd2_3 Verify UPnP router supports discovery of required devices and services (IGD2)


    step 1. Build a M-SEARCH request for search for each required device/service
    step 2. Send M-SEARCH request using unique UDP source port
    step 3. Wait up to 5 seconds for all responses sent to UDP source port
    step 4. For each response, verify the required headers are included

    Required device and service URNs:

      urn:schemas-upnp-org:device:InternetGatewayDevice:2
      urn:schemas-upnp-org:device:WANDevice:2
      urn:schemas-upnp-org:device:WANConnectionDevice:2
      urn:schemas-upnp-org:device:LANDevice:1

      urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1
      urn:schemas-upnp-org:service:WANPPPConnection:1 (PPP based WAN only)
      urn:schemas-upnp-org:service:WANIPConnection:2  (not required for PPP)

    NOTE: Support for UPnP LANDevice:1 template is now configurable. If the
    router under test does not support the LANDevice:1 template, the
    'upnpLANDevice' testvar should be configured to no. If LANDevice is
    supported, the testvar should be configured to yes.


    References:

    InternetGatewayDevice:2 Device Template Version 1.01

    http://upnp.org/specs/gw/UPnP-gw-InternetGatewayDevice-v2-Device.pdf
Test Name Synopsis
Verify XML description of IGD root device can be parsed (IGD2) cdrouter_upnp_igd2_10 Verify XML description of IGD root device can be parsed (IGD2)


    step 1. Find the description URL for the root device using SSDP
    step 2. Send HTTP GET to load description URL
    step 3. Verify the response can be parsed using XML parser

    Required root device:

      urn:schemas-upnp-org:device:InternetGatewayDevice:2


    References:

    InternetGatewayDevice:2 Device Template Version 1.01

    http://upnp.org/specs/gw/UPnP-gw-InternetGatewayDevice-v2-Device.pdf
Test Name Synopsis
Verify XML descriptions cannot be loaded from the WAN side of router (IGD2) cdrouter_upnp_igd2_12 Verify XML descriptions cannot be loaded from the WAN side of router (IGD2)


    step 1. Find the description URL for the root device using SSDP on LAN
    step 2. Send HTTP GET from the WAN side to load description URL
    step 3. Send HTTP GET using router's WAN side public IP and private IP
    step 4. Verify description cannot be loaded using HTTP


    References:

    InternetGatewayDevice:2 Device Template Version 1.01

    http://upnp.org/specs/gw/UPnP-gw-InternetGatewayDevice-v2-Device.pdf
Test Name Synopsis
Verify XML description for WANIPConnection or WANPPPConnection service can be parsed (IGD2) cdrouter_upnp_igd2_20 Verify XML description for WANIPConnection or WANPPPConnection service can be parsed (IGD2)


    step 1. Find the description URL for the WANIPConnection:2 or
            WANPPPConnection:1 service using SSDP
    step 2. Send HTTP GET to load description URL
    step 3. Verify the response can be parsed using XML parser

    Required service name:

    urn:schemas-upnp-org:service:WANIPConnection:2
    urn:schemas-upnp-org:service:WANPPPConnection:1

    NOTE: The testvar 'upnpWANPPPConnection' is used to configure the
    test case to use the WANPPPConnection service. Otherwise, the
    router uses the WANIPConnection service.


    References:

    WANIPConnection:2 Service Template Version 2.00

    http://upnp.org/specs/gw/UPnP-gw-WANIPConnection-v2-Service.pdf

    WANIPConnection:2 Service Template Version 1.01

    http://upnp.org/specs/gw/UPnP-gw-WANIPConnection-v2-Service.pdf
Test Name Synopsis
Verify router responds to UPnP Query for ConnectionStatus (IGD2) cdrouter_upnp_igd2_25 Verify router responds to UPnP Query for ConnectionStatus (IGD2)


    step 1. Find Control URL for WANIPConnection:2 service
    step 2. Send UPnP Query for ConnectionStatus via SOAP POST
    step 3. Verify ConnectionStatus variable is returned in SOAP response

    NOTE: The QueryStateVariable action has been deprecated by the UPnP Forum.
    This test should be skipped if the device does not support the
    QueryStateVariable action.


    References:

    UPnP Device Architecture 1.0 Section 3.3.1: Control: Query: Invoke

    http://www.upnp.org/specs/arch/UPnP-arch-DeviceArchitecture-v1.0-20080424.pdf3.3.1
Test Name Synopsis
Verify UPnP GetExternalIPAddress Action returns WAN IP address (IGD2) cdrouter_upnp_igd2_30 Verify UPnP GetExternalIPAddress Action returns WAN IP address (IGD2)


    step 1. Find Control URL for WANIPConnection:2 or WANPPPConnection:1 service
    step 2. Send UPnP Action for GetExternalIPAddress
    step 3. Verify Action succeeds with HTTP return code 200
    step 4. Verify IP address returned in the NewExternalIPAddress
            attribute is the correct WAN IP address


    References:

    WANIPConnection:2 Service Template Version 2.00 Section 2.5.20: GetExternalIPAddress

    http://upnp.org/specs/gw/UPnP-gw-WANIPConnection-v2-Service.pdf2.5.20
Test Name Synopsis
Verify UPnP GetStatusInfo Action returns correct ConnectionStatus information (IGD2) cdrouter_upnp_igd2_31 Verify UPnP GetStatusInfo Action returns correct ConnectionStatus information (IGD2)


    step 1. Find Control URL for WANIPConnection:2 or WANPPPConnection:1 service
    step 2. Send UPnP Action for GetStatusInfo
    step 3. Verify Action succeeds with HTTP return code 200
    step 4. Verify returned ConnectionStatus is in the 'Connected' state


    References:

    WANIPConnection:2 Service Template Version 2.00 Section 2.5.9: GetStatusInfo

    http://upnp.org/specs/gw/UPnP-gw-WANIPConnection-v2-Service.pdf2.5.9
Test Name Synopsis
Verify UPnP GetStatusInfo Action returns increasing Uptime value (IGD2) cdrouter_upnp_igd2_32 Verify UPnP GetStatusInfo Action returns increasing Uptime value (IGD2)


    step 1. Find Control URL for WANIPConnection:2 or WANPPPConnection:1 service
    step 2. Send UPnP Action for GetStatusInfo
    step 3. Verify Action succeeds with HTTP return code 200
    step 4. Save the current Uptime
    step 5. Wait 10 seconds
    step 6. Send UPnP Action for GetStatusInfo
    step 7. Verify Action succeeds with HTTP return code 200
    step 8. Verify Uptime has increased by at least 10 seconds


    References:

    WANIPConnection:2 Service Template Version 2.00 Section 2.5.9: GetStatusInfo

    http://upnp.org/specs/gw/UPnP-gw-WANIPConnection-v2-Service.pdf2.5.9
Test Name Synopsis
Add/delete dynamic UPnP TCP port mapping for wildcard IP source address (IGD2) cdrouter_upnp_igd2_35 Add/delete dynamic UPnP TCP port mapping for wildcard IP source address (IGD2)


    step 1. Find Control URL for WANIPConnection:2 or WANPPPConnection:1 service
    step 2. Send UPnP Action for AddPortMapping with wildcard
            for NewRemoteHost ("") and NewLeaseDuration of 0
    step 3. Verify Action returns HTTP 200 status code
    step 4. Initiate inbound TCP connection to new port mapping
    step 5. Verify TCP connection is established
    step 6. Initiate second inbound TCP connection from different IP
            source address on the WAN side
    step 7. Verify 2nd TCP connection is established
    step 8. Close both TCP connections
    step 9. Delete port mapping using DeletePortMapping Action
    step 10. Wait 5 seconds for port mapping to be deleted
    step 11. Initiate inbound TCP connection for port mapping from WAN side
    step 12. Verify inbound TCP connection is blocked


    References:

    WANIPConnection:2 Service Template Version 2.00 Section 2.5.16: AddPortMapping

    http://upnp.org/specs/gw/UPnP-gw-WANIPConnection-v2-Service.pdf2.5.16

    WANIPConnection:2 Service Template Version 2.00 Section 2.5.18: DeletePortMapping

    http://upnp.org/specs/gw/UPnP-gw-WANIPConnection-v2-Service.pdf2.5.18
Test Name Synopsis
Add/delete dynamic UPnP TCP port mapping for specific IP source address (IGD2) cdrouter_upnp_igd2_36 Add/delete dynamic UPnP TCP port mapping for specific IP source address (IGD2)


    step 1. Find Control URL for WANIPConnection:2 or WANPPPConnection:1 service
    step 2. Send UPnP Action for AddPortMapping with specific IP address (A)
            for NewRemoteHost ("") and NewLeaseDuration of 0
    step 3. Verify Action returns HTTP 200 status code
    step 4. Initiate inbound TCP connection from specific IP address (A)
            to new port mapping
    step 5. Verify TCP connection is established
    step 6. Initiate second inbound TCP connection from different IP
            source address (B) on the WAN side
    step 7. Verify 2nd TCP connection is blocked
    step 8. Close both TCP connections
    step 9. Delete port mapping using DeletePortMapping Action
    step 10. Wait 5 seconds for port mapping to be deleted
    step 11. Initiate inbound TCP connection for port mapping from WAN side
             from specific ip address (A)
    step 12. Verify inbound TCP connection is blocked


    References:

    WANIPConnection:2 Service Template Version 2.00 Section 2.5.16: AddPortMapping

    http://upnp.org/specs/gw/UPnP-gw-WANIPConnection-v2-Service.pdf2.5.16

    WANIPConnection:2 Service Template Version 2.00 Section 2.5.18: DeletePortMapping

    http://upnp.org/specs/gw/UPnP-gw-WANIPConnection-v2-Service.pdf2.5.18
Test Name Synopsis
Add/delete dynamic UPnP UDP port mapping for wildcard IP source address (IGD2) cdrouter_upnp_igd2_40 Add/delete dynamic UPnP UDP port mapping for wildcard IP source address (IGD2)


    step 1. Find Control URL for WANIPConnection:2 or WANPPPConnection:1 service
    step 2. Send UPnP Action for AddPortMapping with wildcard
            for NewRemoteHost (""), NewProtocol UDP and NewLeaseDuration of 0
    step 3. Verify Action returns HTTP 200 status code
    step 4. Initiate inbound UDP connection to new port mapping
    step 5. Verify UDP connection is established
    step 6. Initiate second inbound UDP connection from different IP
            source address on the WAN side
    step 7. Verify 2nd UDP connection is established
    step 8. Delete port mapping using DeletePortMapping Action
    step 9. Wait 5 seconds for port mapping to be deleted
    step 10. Initiate inbound UDP connection for port mapping from WAN side
    step 11. Verify inbound UDP connection is blocked


    References:

    WANIPConnection:2 Service Template Version 2.00 Section 2.5.16: AddPortMapping

    http://upnp.org/specs/gw/UPnP-gw-WANIPConnection-v2-Service.pdf2.5.16

    WANIPConnection:2 Service Template Version 2.00 Section 2.5.18: DeletePortMapping

    http://upnp.org/specs/gw/UPnP-gw-WANIPConnection-v2-Service.pdf2.5.18
Test Name Synopsis
Add/delete dynamic UPnP UDP port mapping for specific IP source address (IGD2) cdrouter_upnp_igd2_41 Add/delete dynamic UPnP UDP port mapping for specific IP source address (IGD2)


    step 1. Find Control URL for WANIPConnection:2 or WANPPPConnection:1 service
    step 2. Send UPnP Action for AddPortMapping with specific IP address (A)
            for NewRemoteHost (""), NewProtocol UDP and NewLeaseDuration of 0
    step 3. Verify Action returns HTTP 200 status code
    step 4. Initiate inbound UDP connection from specific IP address (A)
            to new port mapping
    step 5. Verify UDP connection is established
    step 6. Initiate second inbound UDP connection from different IP
            source address (B) on the WAN side
    step 7. Verify 2nd UDP connection is blocked
    step 8. Delete port mapping using DeletePortMapping Action
    step 9. Wait 5 seconds for port mapping to be deleted
    step 10. Initiate inbound UDP connection for port mapping from WAN side
             from specific ip address (A)
    step 11. Verify inbound UDP connection is blocked


    References:

    WANIPConnection:2 Service Template Version 2.00 Section 2.5.16: AddPortMapping

    http://upnp.org/specs/gw/UPnP-gw-WANIPConnection-v2-Service.pdf2.5.16

    WANIPConnection:2 Service Template Version 2.00 Section 2.5.18: DeletePortMapping

    http://upnp.org/specs/gw/UPnP-gw-WANIPConnection-v2-Service.pdf2.5.18
Test Name Synopsis
Verify UPnP Router rejects new port mappings that conflict (IGD2) cdrouter_upnp_igd2_45 Verify UPnP Router rejects new port mappings that conflict (IGD2)


    step 1. Start second client on LAN interface
    step 2. Find Control URL for WANIPConnection:2 or WANPPPConnection:1 service
    step 3. Send UPnP Action for AddPortMapping from the first DHCP client
    step 4. Verify Action returns HTTP 200 status code
    step 5. Send 2nd UPnP Action for AddPortMapping from the second client
            using the same external port number and protocol
    step 6. Verify AddPortMapping Action fails
    step 7. Delete port mapping using DeletePortMapping Action


    References:

    WANIPConnection:2 Service Template Version 2.00 Section 2.5.16: AddPortMapping

    http://upnp.org/specs/gw/UPnP-gw-WANIPConnection-v2-Service.pdf2.5.16
Test Name Synopsis
Verify dynamic UPnP port mapping is deleted when lease expires (IGD2) cdrouter_upnp_igd2_50 Verify dynamic UPnP port mapping is deleted when lease expires (IGD2)


    step 1. Find Control URL for WANIPConnection:2 or WANPPPConnection:1 service
    step 2. Send UPnP Action for AddPortMapping with lease of 30 seconds
    step 3. Verify Action returns HTTP 200 status code
    step 4. Initiate inbound TCP connection to new port mapping
    step 5. Verify TCP connection is established
    step 6. Close TCP connection
    step 7. Wait 45 seconds for lease to be deleted
    step 8. Initiate inbound TCP connection to new port mapping
    step 9. Verify TCP connection is blocked


    References:

    WANIPConnection:2 Service Template Version 2.00 Section 2.5.16: AddPortMapping

    http://upnp.org/specs/gw/UPnP-gw-WANIPConnection-v2-Service.pdf2.5.16
Test Name Synopsis
Maximum number of UPnP TCP dynamic port mappings (IGD2) cdrouter_upnp_igd2_100 Maximum number of UPnP TCP dynamic port mappings (IGD2)


    step 1. Determine the maximum number of UPnP TCP port mappings

    NOTE: This is configured in your configuration file using  the
    the testvar 'upnpMaxTcpMappings'.

    step 2. Create a unique port mapping using the AddPortMapping Action
            up to the maximum number supported
    step 3. For each mapping, establish an inbound TCP connection
    step 4. Verify each TCP connection can be established
    step 5. Delete each port mapping using the DeletePortMapping Action


    References:

    WANIPConnection:2 Service Template Version 2.00 Section 2.5.16: AddPortMapping

    http://upnp.org/specs/gw/UPnP-gw-WANIPConnection-v2-Service.pdf2.5.16

    WANIPConnection:2 Service Template Version 2.00 Section 2.5.18: DeletePortMapping

    http://upnp.org/specs/gw/UPnP-gw-WANIPConnection-v2-Service.pdf2.5.18
Test Name Synopsis
Verify UPnP clients can subscribe/unsubcribe to events for WANIPConnection or WANPPPConnection (IGD2) cdrouter_upnp_igd2_200 Verify UPnP clients can subscribe/unsubcribe to events for WANIPConnection or WANPPPConnection (IGD2)


    step 1. Find Control URL for WANIPConnection:2 or WANPPPConnection:1 service
    step 2. Send SUBSCRIBE for eventSubURL
    step 3. Verify SUBSCRIBE returns HTTP 200 OK response
    step 4. Wait for initial NOTIFY event
    step 5. Send UNSUBSCRIBE for eventSubURL
    step 6. Verify UNSUBSCRIBE returns HTTP 200 OK response


    References:

    UPnP Device Architecture 1.1 Section 4.0: Eventing

    http://www.upnp.org/specs/arch/UPnP-arch-DeviceArchitecture-v1.1.pdf4.0
Test Name Synopsis
Verify UPnP clients can subscribe to events with infinite subscription time (IGD2) cdrouter_upnp_igd2_201 Verify UPnP clients can subscribe to events with infinite subscription time (IGD2)


    step 1. Find Control URL for WANIPConnection:2 or WANPPPConnection:1 service
    step 2. Send SUBSCRIBE for eventSubURL using Timeout of infinite
    step 3. Verify SUBSCRIBE returns HTTP 200 OK response
    step 4. Wait for initial NOTIFY event
    step 5. Send UNSUBSCRIBE for eventSubURL
    step 6. Verify UNSUBSCRIBE returns HTTP 200 OK response


    References:

    UPnP Device Architecture 1.1 Section 4.0: Eventing

    http://www.upnp.org/specs/arch/UPnP-arch-DeviceArchitecture-v1.1.pdf4.0
Test Name Synopsis
Verify UPnP clients can renew NOTIFY events for WANIPConnection or WANPPPConnection (IGD2) cdrouter_upnp_igd2_202 Verify UPnP clients can renew NOTIFY events for WANIPConnection or WANPPPConnection (IGD2)


    step 1. Find Control URL for WANIPConnection:2 or WANPPPConnection:1 service
    step 2. Send SUBSCRIBE for eventSubURL
    step 3. Verify SUBSCRIBE returns HTTP 200 OK response
    step 4. Wait for initial NOTIFY event
    step 5. Send SUBSCRIBE renewal for NOTIFY events
    step 6. Verify SUBSCRIBE renewal returns HTTP 200 OK response
    step 7. Send UNSUBSCRIBE for eventSubURL
    step 8. Verify UNSUBSCRIBE returns HTTP 200 OK response


    References:

    UPnP Device Architecture 1.1 Section 4.0: Eventing

    http://www.upnp.org/specs/arch/UPnP-arch-DeviceArchitecture-v1.1.pdf4.0
Test Name Synopsis
Verify router sends UPnP NOTIFY events for ConnectionStatus (IGD2) cdrouter_upnp_igd2_203 Verify router sends UPnP NOTIFY events for ConnectionStatus (IGD2)


    step 1. Find Control URL for WANIPConnection:2 or WANPPPConnection:1 service
    step 2. Send SUBSCRIBE for eventSubURL
    step 3. Verify SUBSCRIBE returns HTTP 200 OK response
    step 4. Wait for initial NOTIFY event
    step 5. Verify ConnectionStatus is 'Connected'
    step 6. Bring down WAN link
    step 7. Wait for NOTIFY event with new ConnectionStatus
    step 8. Verify ConnectionStatus is not 'Connected'
    step 9. Bring up WAN link
    step 10. Wait for NOTIFY event with new ConnectionStatus
    step 11. Verify ConnectionStatus is 'Connected'
    step 12. Send UNSUBSCRIBE for eventSubURL
    step 13. Verify UNSUBSCRIBE returns HTTP 200 OK response

    NOTE: This test is not supported when the wanMode is static.


    References:

    UPnP Device Architecture 1.1 Section 4.0: Eventing

    http://www.upnp.org/specs/arch/UPnP-arch-DeviceArchitecture-v1.1.pdf4.0
Test Name Synopsis
Verify router sends UPnP NOTIFY events with updated ExternalIPAddress (IGD2) cdrouter_upnp_igd2_204 Verify router sends UPnP NOTIFY events with updated ExternalIPAddress (IGD2)


    step 1. Find Control URL for WANIPConnection:2 or WANPPPConnection:1 service
    step 2. Send SUBSCRIBE for eventSubURL
    step 3. Verify SUBSCRIBE returns HTTP 200 OK response
    step 4. Wait for initial NOTIFY event
    step 5. Verify ExternalIPAddress matches current assigned WAN IP
    step 6. Bring down WAN link
    step 7. Bring up WAN link with new external IP address
    step 8. Wait for NOTIFY event with new ExternalIPAddress
    step 9. Verify ExternalIPAddress is new IP address
    step 10. Bring down WAN link
    step 11. Bring up WAN link with new original IP address
    step 12. Wait for NOTIFY event with new ExternalIPAddress
    step 13. Verify ExternalIPAddress is original IP address
    step 14. Send UNSUBSCRIBE for eventSubURL
    step 15. Verify UNSUBSCRIBE returns HTTP 200 OK response


    References:

    UPnP Device Architecture 1.1 Section 4.0: Eventing

    http://www.upnp.org/specs/arch/UPnP-arch-DeviceArchitecture-v1.1.pdf4.0
Test Name Synopsis
Verify router stops sending NOTIFY events when subscription expires (IGD2) cdrouter_upnp_igd2_210 Verify router stops sending NOTIFY events when subscription expires (IGD2)


    step 1. Find Control URL for WANIPConnection:2 or WANPPPConnection:1 service
    step 2. Send SUBSCRIBE for eventSubURL using minimum subscriber timeout
    step 3. Verify SUBSCRIBE returns HTTP 200 OK response
    step 4. Wait for initial NOTIFY event
    step 5. Verify ConnectionStatus is 'Connected'
    step 6. Wait minimum subscriber timeout seconds for subscription to expire
    step 7. Bring down WAN link
    step 8. Wait for NOTIFY event
    step 9. Verify NOTIFY event is not received
    step 10. Bring up WAN link
    step 11. Wait for NOTIFY event
    step 12. Verify NOTIFY event is not received
    step 13. Do not UNSUBSCRIBE since subscription should be expired


    References:

    UPnP Device Architecture 1.1 Section 4.0: Eventing

    http://www.upnp.org/specs/arch/UPnP-arch-DeviceArchitecture-v1.1.pdf4.0
Test Name Synopsis
Verify the maximum number of UPnP event subscriptions that can be created (IGD2) cdrouter_upnp_igd2_220 Verify the maximum number of UPnP event subscriptions that can be created (IGD2)


    step 1. Find Control URL for WANIPConnection:2 or WANPPPConnection:1 service
    step 2. For each event client, send SUBSCRIBE for eventSubURL
    step 3. Verify SUBSCRIBE returns HTTP 200 OK response
    step 4. For each event client, wait for initial NOTIFY event
    step 5. Verify ConnectionStatus is 'Connected'
    step 6. Bring down WAN link
    step 7. For each event client, wait for NOTIFY event with new ConnectionStatus
    step 8. For each event client, verify ConnectionStatus is not 'Connected'
    step 9. Bring up WAN link
    step 10. For each event client, wait for NOTIFY event with new ConnectionStatus
    step 11. For each event client, verify ConnectionStatus is 'Connected'
    step 12. For each event client, send UNSUBSCRIBE for eventSubURL
    step 13. For each event client, verify UNSUBSCRIBE returns HTTP 200 OK response

    NOTE: The number of UPnP subscribers can be configured using the testvar
    upnpMaxSubClients. If not configured, the default is 10 subscribers.


    References:

    UPnP Device Architecture 1.1 Section 4.0: Eventing

    http://www.upnp.org/specs/arch/UPnP-arch-DeviceArchitecture-v1.1.pdf4.0
Test Name Synopsis
Check for UPnP format string vulnerability used by BCMPUPnP_Hunter malware cdrouter_upnp_igd2_400 Check for UPnP format string vulnerability used by BCMPUPnP_Hunter malware


    step 1. Find Control URL for WANIPConnection or WANPPPConnection service
    step 2. Send UPnP Action for SetConnectionType with string format
    step 3. Verify Action does not return HTTP 200 status code
    step 4. Send UPnP Action for GetConnectionTypeInfo to trigger exploit


    References:

    Broadcom UPnP Remote Preauth Code Execution Vulnerability

    https://www.defensecode.com/public/DefenseCode_Broadcom_Security_Advisory.pdf/

    From Zero to ZeroDay Journey: Router Hacking (WRT54GL Linksys Case)

    https://defensecode.com/whitepapers/From_Zero_To_ZeroDay_Network_Devices_Exploitation.txt

pptp-pt.tcl

PPTP based VPN pass through from the LAN to the WAN

Test Name Synopsis
PPTP control session can be established at port 1723 cdrouter_pptppt_1 PPTP control session can be established at port 1723


    step 1. Create PPTP sever on WAN side of the router
    step 2. Initiate TCP session from LAN to port 1723 on PPTP server
    step 3. Verify TCP session can be established
    step 4. Initiate PPTP control session
    step 5. Initiate new outbound PPTP call from LAN side
    step 6. Verify PPTP call is established
    step 7. Close TCP session from LAN side


    References:

    IETF RFC 2637 "Point-to-Point Tunneling Protocol (PPTP)"

    https://tools.ietf.org/html/rfc2637
Test Name Synopsis
Tunneled PPTP data packets pass through router (PPP over GRE) cdrouter_pptppt_2 Tunneled PPTP data packets pass through router (PPP over GRE)


    step 1. Initiate outbound PPTP call using unique PPTP tunnel endpoint
    step 2. Verify PPTP control session is established and call is accepted
    step 3. Initiate an ICMP Echo Request on the LAN host through a PPTP tunnel
    step 4. Send the ICMP packet as a tunneled PPP over GRE packet
    step 5. Verify the tunneled PPP over GRE packet is received on the WAN host
    step 6. Respond to the ICMP Echo Request on the WAN side
    step 7. Send the ICMP Echo Reply as a tunneled PPP over GRE packet


    References:

    IETF RFC 2637 "Point-to-Point Tunneling Protocol (PPTP)"

    https://tools.ietf.org/html/rfc2637
Test Name Synopsis
Verify the max number of PPTP pass through connections for a single LAN host cdrouter_pptppt_100 Verify the max number of PPTP pass through connections for a single LAN host


    step 1. Initiate outbound PPTP call using unique PPTP tunnel endpoint
    step 2. Verify PPTP control session is established and call is accepted
    step 3. Forward an ICMP Echo Request from LAN to unique WAN IP address using
            a unique PPTP tunnel endpoint IP address
    step 4. Verify the packet is received on the WAN
    step 5. Send an ICMP Echo Reply to LAN using PPTP tunnel
    step 6. Verify the ICMP Echo Reply is received on the LAN
    step 7. Repeat up to the pptpMaxTunnels value

    Note: Each PPTP tunnel uses a unique IP address as its PPTP tunnel
    endpoint. The ICMP Echo Request is also sent to a unique IP destination
    address that is routed over the PPTP tunnel on the LAN.

    References:

    IETF RFC 2637 "Point-to-Point Tunneling Protocol (PPTP)"

    https://tools.ietf.org/html/rfc2637

l2tp-pt.tcl

L2TP based VPN pass through from the LAN to the WAN

Test Name Synopsis
Verify L2TP session passes through router cdrouter_l2tppt_1 Verify L2TP session passes through router


    step 1. Initiate outbound L2TP tunnel to L2TP server
    step 2. Verify L2TP session is established
    step 3. Initiate PPP session over L2TP tunnel
    step 4. Verify ICMP echo across tunnel

    NOTE: This test case uses L2TP directly over UDP without IPSEC. L2TP clients
    from Microsoft normally run L2TP over IPSEC. L2TP over IPSEC pass through
    is covered by test case cdrouter_l2tppt_2.


    References:

    IETF RFC 2661 "Layer Two Tunneling Protocol "L2TP""

    https://tools.ietf.org/html/rfc2661
Test Name Synopsis
Verify L2TP over IPSEC session passes through router cdrouter_l2tppt_2 Verify L2TP over IPSEC session passes through router


    step 1. Initiate IKE transport mode tunnel to L2TP server
    step 2. Initiate outbound L2TP call to L2TP server
    step 3. Verify L2TP tunnel is established
    step 4. Initiate PPP session over L2TP tunnel
    step 5. Verify ICMP echo across tunnel


    References:

    IETF RFC 2661 "Layer Two Tunneling Protocol "L2TP""

    https://tools.ietf.org/html/rfc2661
Test Name Synopsis
Verify L2TP over IPSEC with NAT-T passes through router cdrouter_l2tppt_10 Verify L2TP over IPSEC with NAT-T passes through router


    step 1. Initiate IKE transport mode tunnel with NAT-T to L2TP server
    step 2. Initiate outbound L2TP call to L2TP server
    step 3. Verify L2TP tunnel is established
    step 4. Initiate PPP session over L2TP tunnel
    step 5. Verify ICMP echo across tunnel


    References:

    IETF RFC 2661 "Layer Two Tunneling Protocol "L2TP""

    https://tools.ietf.org/html/rfc2661

eapol.tcl

Basic EAPOL tests for all types of EAP

Test Name Synopsis
Authenticator sends EAPOL packets to correct MAC address cdrouter_eapol_1 Authenticator sends EAPOL packets to correct MAC address


    step 1. Unauthorize the supplicant interface
    step 2. Start authentication on the supplicant interface
    step 3. Wait for EAPOL packet from authenticator (up to txWhen seconds)
    step 4. For wireless supplicants, verify that the destination MAC address
            of the packet received in step 3 is the supplicant's unicast MAC
            address; for wired supplicants, verify that the destination MAC
            address is the supplicant's unicast MAC address or the PAE group
            address 01:80:C2:00:00:03

    NOTE: The authenticator should be in the CONNECTING state after the
    EAPOL-Logoff/EAPOL-Start packets are sent by the supplicant.


    References:

    IEEE 802.1X-2001 "IEEE Standard for Port Based Network Access Control" Section 7.8: EAPOL Addressing

    https://standards.ieee.org/standard/802_1X-2001.html
Test Name Synopsis
Basic case of authenticator initiated authentication cdrouter_eapol_2 Basic case of authenticator initiated authentication


    step 1. Send EAPOL-Logoff to place controlled port in unauthorized state
    step 2. Initiate ping on LAN port to remote WAN host
    step 3. Continue ping attempts for 120 seconds
    step 4. Verify authentication occurs for the configured type
    step 5. Verify ping is received by remote host on the WAN


    References:

    IEEE 802.1X-2001 "IEEE Standard for Port Based Network Access Control" Section 8.4.2.1: Authenticator Initiation

    https://standards.ieee.org/standard/802_1X-2001.html
Test Name Synopsis
Basic case of supplicant initiated authentication cdrouter_eapol_3 Basic case of supplicant initiated authentication


    step 1. Unauthorize supplicant interface
    step 2. Start authentication on supplicant interface
    step 3. Verify authentication occurs for the configured type
    step 4. Verify ping to remote host on the WAN


    References:

    IEEE 802.1X-2001 "IEEE Standard for Port Based Network Access Control" Section 8.4.2.2: Supplicant Initiation

    https://standards.ieee.org/standard/802_1X-2001.html
Test Name Synopsis
Authenticator sends EAP Failure after supplicant sends EAPOL-Logoff cdrouter_eapol_6 Authenticator sends EAP Failure after supplicant sends EAPOL-Logoff


    step 1. Send EAPOL-Logoff to place controlled port in unauthorized state
    step 2. Wait up to 15 seconds for EAP Failure packet from Authenticator


    References:

    IEEE 802.1X-2001 "IEEE Standard for Port Based Network Access Control" Section 8.5.4.4: Disconnected

    https://standards.ieee.org/standard/802_1X-2001.html
Test Name Synopsis
Authenticator sends EAP Failure if identity is unknown cdrouter_eapol_8 Authenticator sends EAP Failure if identity is unknown


    step 1. Configure the supplicant to use unknown identity
    step 2. Start authentication on supplicant interface
    step 3. Wait for EAP Identity Request
    step 4. Respond with unknown identity
    step 5. Verify an EAP Failure is received

    NOTE: This test uses the Identity 'badUserName' which must not be a valid
    user name on your back-end authentication server.


    References:

    IEEE 802.1X-2001 "IEEE Standard for Port Based Network Access Control" Section 8.5.8.6: FAIL

    https://standards.ieee.org/standard/802_1X-2001.html
Test Name Synopsis
Authenticator sends EAP Failure if authentication challenge fails cdrouter_eapol_9 Authenticator sends EAP Failure if authentication challenge fails


    step 1. Configure the supplicant to use known identity
    step 2. Start authentication on supplicant interface
    step 3. Wait for EAP Identity Request
    step 4. Respond with known identity
    step 5. Wait for EAP authentication challenge (MD5, TLS, PEAP, SIM, etc)
    step 6. Respond with authentication data that fails challenge
    step 7. Verify an EAP Failure is received


    References:

    IEEE 802.1X-2001 "IEEE Standard for Port Based Network Access Control" Section 8.5.8.6: FAIL

    https://standards.ieee.org/standard/802_1X-2001.html
Test Name Synopsis
Authenticator retransmits EAP Identity Request if no response is received cdrouter_eapol_20 Authenticator retransmits EAP Identity Request if no response is received


    step 1. Unauthorize supplicant interface
    step 2. Start authentication on supplicant interface
    step 3. Wait txWhen seconds for EAP Identity Request
    step 4. Do not respond
    step 5. Wait txWhen seconds for EAP Identity Request
    step 6. Repeat up to reAuthMax attempts


    References:

    IEEE 802.1X-2001 "IEEE Standard for Port Based Network Access Control" Section 8.5.4.5: Connecting

    https://standards.ieee.org/standard/802_1X-2001.html
Test Name Synopsis
Authenticator uses same EAP identifier for each retransmitted identity request cdrouter_eapol_21 Authenticator uses same EAP identifier for each retransmitted identity request


    step 1. Unauthorize supplicant interface
    step 2. Start authentication on supplicant interface
    step 3. Wait txWhen seconds for EAP Identity Request
    step 4. Do not respond
    step 5. Wait txWhen seconds for EAP Identity Request
    step 6. Verify the EAP identifier does not change
    step 7. Repeat up to reAuthMax attempts

    NOTE: After the authenticator enters the Disconnected state, it should
    transition back to the Connecting state. Once in the Connecting state, the
    authenticator should reuse the current ID each time the EAP Idenitity
    request is retransmitted.

    NOTE: The test checks that identifier does not change. It is possible that
    some EAP Identity packets are not received during the disassociate and
    reconnect process.


    References:

    IEEE 802.1X-2001 "IEEE Standard for Port Based Network Access Control" Section 8.5.4.4: Disconnected

    https://standards.ieee.org/standard/802_1X-2001.html

    IEEE 802.1X-2001 "IEEE Standard for Port Based Network Access Control" Section 8.5.4.5: Connecting

    https://standards.ieee.org/standard/802_1X-2001.html
Test Name Synopsis
Authenticator ignores EAP Identity Responses with unknown id field cdrouter_eapol_23 Authenticator ignores EAP Identity Responses with unknown id field


    step 1. Unauthorize supplicant interface
    step 2. Start authentication on supplicant interface
    step 3. Wait txWhen seconds for EAP RetryIdentity Request
    step 4. Respond with EAP Identity Response with mismatched Id field
    step 5. Verify Authenticator resends EAP Identity Request
    step 6. Verify the EAP identifier does not change
    step 7. Repeat up to reAuthMax attempts


    References:

    IEEE 802.1X-2001 "IEEE Standard for Port Based Network Access Control" Section 8.5.4.5: Connecting

    https://standards.ieee.org/standard/802_1X-2001.html
Test Name Synopsis
Authenticator enters the held state after authentication is rejected cdrouter_eapol_24 Authenticator enters the held state after authentication is rejected


    step 1. Configure the supplicant with bad authentication data (password/cert)
    step 2. Send EAPOL-Start
    step 3. Wait for EAP Identity Request
    step 4. Respond with identity
    step 5. Wait for authentication challenge
    step 6. Send bad authentication data (bad md5, invalid cert, etc)
    step 5. Verify an EAP Failure is received
    step 6. Authenticator should move to the HELD state
    step 7. Continue to send EAPOL-Start packets
    step 8. Verify no EAP Identity Request is received under the quietWhile
            timer expires


    References:

    IEEE 802.1X-2001 "IEEE Standard for Port Based Network Access Control" Section 8.5.4.6: Authenticating

    https://standards.ieee.org/standard/802_1X-2001.html

    IEEE 802.1X-2001 "IEEE Standard for Port Based Network Access Control" Section 8.5.4.9: Held

    https://standards.ieee.org/standard/802_1X-2001.html
Test Name Synopsis
No packets are forwarded/processed when port is in unauthorized state cdrouter_eapol_100 No packets are forwarded/processed when port is in unauthorized state


    step 1. Unauthorize supplicant interface
    step 2. Send ARP request for router's LAN IP address
    step 3. Verify no response is received
    step 4. Send ping to remoteHost on WAN using PAE group MAC address
    step 5. Verify ping is not forwarded to WAN
    step 6. Send ping to remoteHost on LAN using broadcast MAC address
    step 7. Verify ping is not forwarded to WAN
    step 8. Bring authenticator to the CONNECTING state
    step 9. Repeat forwarding tests and verify no packets are forwarded
    step 10. Bring authenticator to the AUTHENTICATING state
    step 11. Repeat forwarding tests and verify no packets are forwarded


    References:

    IEEE 802.1X-2001 "IEEE Standard for Port Based Network Access Control" Section 8.1: Purpose

    https://standards.ieee.org/standard/802_1X-2001.html
Test Name Synopsis
Inbound traffic is blocked when port is in unauthorized state cdrouter_eapol_105 Inbound traffic is blocked when port is in unauthorized state


    step 1. Bring port to authenticated state
    step 2. Initiate traffic to remote host on WAN
    step 3. Verify packet is received on the WAN
    step 4. Initiate traffic from WAN host back to LAN host
    step 5. Verify packet is received on the LAN
    step 6. Unauthorize controlled port
    step 7. Do not respond to any EAP request
    step 8. Initiate traffic from WAN host back to LAN host
    step 9. Verify traffic is not forwarded to LAN


    References:

    IEEE 802.1X-2001 "IEEE Standard for Port Based Network Access Control" Section 8.1: Purpose

    https://standards.ieee.org/standard/802_1X-2001.html
Test Name Synopsis
Packets are forwarded during reauthentication if port is in authenticated state cdrouter_eapol_110 Packets are forwarded during reauthentication if port is in authenticated state


    step 1. Send EAPOL-Logoff to place controlled port in unauthorized state
    step 2. Bring port to authenticated state
    step 3. Send EAPOL-Start to initiate reauthentication process
    step 4. Send ARP request for router's LAN IP address
    step 5. Verify ARP response is received
    step 6. Send ping to remoteHost on WAN
    step 7. Verify ping response is received on LAN


    References:

    IEEE 802.1X-2001 "IEEE Standard for Port Based Network Access Control" Section 8.5.4.5: Connecting

    https://standards.ieee.org/standard/802_1X-2001.html
Test Name Synopsis
Port is placed in unauthenticated state if reauthentication fails (bad identity) cdrouter_eapol_112 Port is placed in unauthenticated state if reauthentication fails (bad identity)


    step 1. Unauthorize supplicant interface
    step 2. Start authentication with valid identity
    step 3. Verify authentication succeeds
    step 4. Restart authentication using an unknown identity
    step 5. Verify authentication fails
    step 6. Send ARP request for router's LAN IP address
    step 7. Verify no response is received
    step 8. Send UDP packet to remoteHost on WAN
    step 9. Verify UDP packet is not forwarded to LAN


    References:

    IEEE 802.1X-2001 "IEEE Standard for Port Based Network Access Control" Section 8.5.4.6: Authenticating

    https://standards.ieee.org/standard/802_1X-2001.html
Test Name Synopsis
Port is placed in unauthorized state if reauthentication fails (bad auth) cdrouter_eapol_113 Port is placed in unauthorized state if reauthentication fails (bad auth)


    step 1. Unauthorize supplicant interface
    step 2. Start authentication with valid identity
    step 3. Verify authentication succeeds
    step 4. Restart authentication using an bad authentication data (md5/tls)
    step 5. Verify authentication fails
    step 6. Send UDP packet to remoteHost on WAN
    step 7. Verify UDP packet is not forwarded to LAN


    References:

    IEEE 802.1X-2001 "IEEE Standard for Port Based Network Access Control" Section 8.5.4.6: Authenticating

    https://standards.ieee.org/standard/802_1X-2001.html
Test Name Synopsis
Port becomes unauthorized if no response to EAP Identity request is received cdrouter_eapol_115 Port becomes unauthorized if no response to EAP Identity request is received


    step 1. Unauthorize supplicant interface
    step 2. Start authentication on supplicant interface
    step 3. Verify authentication succeeds
    step 4. Restart authentication on supplicant interface
    step 5. Do not respond to any EAP packets
    step 6. Wait for all EAP Identity Requests to timeout
    step 7. Verify port is not in unauthorized state


    References:

    IEEE 802.1X-2001 "IEEE Standard for Port Based Network Access Control" Section 8.5.4.5: Connecting

    https://standards.ieee.org/standard/802_1X-2001.html

    IEEE 802.1X-2001 "IEEE Standard for Port Based Network Access Control" Section 8.5.8.7: Timeout

    https://standards.ieee.org/standard/802_1X-2001.html
Test Name Synopsis
EAP Success packets from supplicant do not authorize port cdrouter_eapol_117 EAP Success packets from supplicant do not authorize port


    step 1. Unauthorize supplicant interface
    step 2. Start authentication on supplicant interface
    step 3. Respond to identity request
    step 4. Wait for EAP Request to begin authenticating process
    step 5. Send EAP Success using ID from EAP Request
    step 6. Send ARP request to LAN interface of router
    step 7. Verify no ARP response is received
    step 8. Send ping to remoteHost on WAN
    step 9. Verify ping is not forwarded to WAN

    NOTE: The Authenticator should not authorize the port when an EAP-Success
    packet is received from the supplicant. This packet is normally relayed to
    the Back-end to process. Some implementations will reject the relayed
    EAP-Success as an invalid packet and send an EAP-Failure.


    References:

    IEEE 802.1X-2001 "IEEE Standard for Port Based Network Access Control" Section 8.4.7: Relaying EAP Frames

    https://standards.ieee.org/standard/802_1X-2001.html
Test Name Synopsis
Authenticator initiates reauthentication with supplicant every reAuthPeriod cdrouter_eapol_130 Authenticator initiates reauthentication with supplicant every reAuthPeriod


    step 1. Unauthorize supplicant interface
    step 2. Initiate EAP authentication
    step 3. Verify authentication succeeds
    step 4. Wait up to reAuthPeriod seconds for authenticator to reauthenticate
    step 5. Verify reauthentication occurs within reAuthPeriod

    NOTE: The EAP reAuthPeriod interval is configured using the
    'eapReAuthPeriod' testvar. The default interval is 3600 seconds. If the
    'eapReAuthPeriod' testvar is set to 0, this test will be skipped.


    References:

    IEEE 802.1X-2001 "IEEE Standard for Port Based Network Access Control" Section 8.5.7: Reauthentication Timer state machine

    https://standards.ieee.org/standard/802_1X-2001.html
Test Name Synopsis
Port is placed in unauthorized state if 802.11 layer is reinitialized cdrouter_eapol_140 Port is placed in unauthorized state if 802.11 layer is reinitialized


    step 1. Unauthorize supplicant interface
    step 2. Start authentication with valid identity
    step 3. Verify authentication succeeds
    step 4. Reassociate to AP with out performing authentication.
            (This will cause the 802.11 layer to reset)
    step 5. Do not respond to any EAP requests
    step 6. Send ping to remote host on WAN
    step 7. Verify the ping fails
    step 8. Start authentication on supplicant interface
    step 9. Verify authentication succeeds
    step 10. Send ping to remote host on WAN
    step 11. Verify the ping succeeds


    References:

    IEEE 802.1X-2001 "IEEE Standard for Port Based Network Access Control" Section 8.4.2: Authentication initiation

    https://standards.ieee.org/standard/802_1X-2001.html
Test Name Synopsis
Verify supplicant can login using all configured Identities cdrouter_eapol_300 Verify supplicant can login using all configured Identities


    step 1. Unauthorize supplicant interface
    step 2. For each configured EAP Identity
    step 3. Configure the supplicant to use the next Identity
    step 4. Start authentication on supplicant interface
    step 5. Verify successful authentication occurs


    References:

    IEEE 802.1X-2001 "IEEE Standard for Port Based Network Access Control" Section 8.4: Protocol Operation

    https://standards.ieee.org/standard/802_1X-2001.html
Test Name Synopsis
Authenticator handles EAP Start flood DoS attack cdrouter_eapol_500 Authenticator handles EAP Start flood DoS attack


    step 1. Flood 100 EAPOL-Start packets
    step 2. Send ping to host on the WAN to verify port is operational
    step 3. Verify ping is received


    References:

    IEEE 802.1X-2001 "IEEE Standard for Port Based Network Access Control"

    https://standards.ieee.org/standard/802_1X-2001.html
Test Name Synopsis
Authenticator handles EAP Logoff flood DoS attack cdrouter_eapol_501 Authenticator handles EAP Logoff flood DoS attack


    step 1. Flood 100 EAPOL-Logoff packets
    step 2. Send ping to host on the WAN to verify port is operational
    step 3. Verify ping is received


    References:

    IEEE 802.1X-2001 "IEEE Standard for Port Based Network Access Control"

    https://standards.ieee.org/standard/802_1X-2001.html
Test Name Synopsis
Authenticator handles EAP-of-Death DoS attack cdrouter_eapol_502 Authenticator handles EAP-of-Death DoS attack


    step 1. Start authentication on supplicant interface
    step 2. Wait for EAP Request Identity packet
    step 3. Respond with EAP Identity Reply with length field = 0xffff
    step 4. Repeat step 2 and 3
    step 5. Start authentication on supplicant interface with normal behavior
    step 6. Verify normal authentication occurs
    step 7. Verify LAN port can ping remote host on WAN

    NOTE: The length field for an EAP packet is 2 bytes. This allows
    a maximum EAP packet size of 0xffff. However, EAPOL can only carry
    EAP packets with a length less than the Ethernet MTU. This test
    verifies that the authenticator handles these invalid packets
    gracefully.


    References:

    IEEE 802.1X-2001 "IEEE Standard for Port Based Network Access Control"

    https://standards.ieee.org/standard/802_1X-2001.html

    IETF RFC 2284 "PPP Extensible Authentication Protocol (EAP)"

    https://tools.ietf.org/html/rfc2284
Test Name Synopsis
Back-end flood DoS attack cdrouter_eapol_503 Back-end flood DoS attack


    step 1. Unauthorize supplicant interface
    step 2. Start authentication on supplicant interface
    step 3. Respond to identity request
    step 4. Wait for EAP Request to begin authenticating process
    step 5. Flood back-end with 100 EAP Responses with invalid authentication data
    step 6. Start authentication on supplicant interface with normal behavior
    step 7. Verify normal authentication occurs
    step 8. Verify LAN port can ping remote host on WAN

    NOTE: This test trys to exploit the EAP relay beahvior of the authenticator.
    Once the EAP session reaches the authentication stage, the supplicant will
    flood the back-end with EAP Response which should be handled gracefully by
    the Authenticator and back-end.


    References:

    IEEE 802.1X-2001 "IEEE Standard for Port Based Network Access Control"

    https://standards.ieee.org/standard/802_1X-2001.html

eap-md5.tcl

EAPOL tests specific to EAP-MD5

Test Name Synopsis
Authenticator sends EAP Failure if MD5 Challenge Response is invalid cdrouter_eapmd5_10 Authenticator sends EAP Failure if MD5 Challenge Response is invalid


    step 1. Send EAPOL-Start
    step 2. Wait for EAP Identity Request
    step 3. Respond with known identity
    step 4. Wait for EAP authentication MD5 Challenge Request
    step 5. Respond with valid authentication value, but include different
            EAP Identity after the MD5 Challenge Response
    step 6. Verify an EAP Failure is received


    References:

    IEEE 802.1X-2001 "IEEE Standard for Port Based Network Access Control" Section 8.5.8.6: FAIL

    https://standards.ieee.org/standard/802_1X-2001.html
Test Name Synopsis
Authenticator sends EAP Failure if no response to EAP MD5 Challenge Request is received cdrouter_eapmd5_20 Authenticator sends EAP Failure if no response to EAP MD5 Challenge Request is received


    step 1. Send EAPOL-Logoff to place controlled port in unauthorized state
    step 2. Bring authenticator to the AUTHENTICATING state
    step 3. Wait txWhen seconds for EAP MD5 Challenge Request
    step 4. Do not respond
    step 5. Verify authenticator sends an EAP Failure


    References:

    IEEE 802.1X-2001 "IEEE Standard for Port Based Network Access Control" Section 8.5.8.7: Timeout

    https://standards.ieee.org/standard/802_1X-2001.html
Test Name Synopsis
Authenticator ignores EAP MD5 Responses with unknown id field cdrouter_eapmd5_23 Authenticator ignores EAP MD5 Responses with unknown id field


    step 1. Send EAPOL-Logoff to place controlled port in unauthorized state
    step 2. Bring authenticator to the AUTHENTICATING state
    step 3. Wait txWhen seconds for EAP MD5 Challenge Request
    step 4. Respond with EAP MD5 Challenge Response with mismatched Id field
    step 5. Verify Authenticator does not send EAP Success

    NOTE: This test verifies that the Backend Authentication State machine
    checks the EAP Challenge Response identifier to verify that it matches the
    request identifier. Some implementations will silently ignore a mismatch and
    eventually trigger a TIMEOUT. Other implementations will generate an EAP
    Failure message. This test only verifies that the Backend does not generate
    an EAP Success.


    References:

    IEEE 802.1X-2001 "IEEE Standard for Port Based Network Access Control" Section 8.5.8.3: REQUEST

    https://standards.ieee.org/standard/802_1X-2001.html
Test Name Synopsis
Authenticator handles EAP MD5 Challenge Request DoS attack cdrouter_eapmd5_500 Authenticator handles EAP MD5 Challenge Request DoS attack


    step 1. Send EAPOL-Start
    step 2. Wait for EAP Identity request
    step 3. Respond with known identity
    step 4. Wait for EAP authentication MD5 Challenge Request
    step 5. Respond with bad authentication length
    step 6. Repeat for 200 MD5 Challenge Requests

    Reference: IEEE Std 802.1X-2001

    NOTE: In this DoS attach, the MD5 Challenge Response is returned with a
    value length of 255. However, only 16 bytes of the actual MD5 value are
    included. The Backend Authentication server must handle the parsing failure
    of the packet.


    References:

    IEEE 802.1X-2001 "IEEE Standard for Port Based Network Access Control"

    https://standards.ieee.org/standard/802_1X-2001.html

eap-tls.tcl

EAPOL tests specific to EAP-TLS

Test Name Synopsis
Authenticator sends EAP Failure when TLS client fails to authenticate server cdrouter_eaptls_10 Authenticator sends EAP Failure when TLS client fails to authenticate server


    step 1. Start authentication on supplicant interface
    step 2. Wait for EAP Identity Request
    step 3. Respond with known identity
    step 4. Wait for EAP-TLS Start
    step 5. Complete TLS session using invalid root CA certificate
    step 6. Verify an EAP Failure is received


    References:

    IEEE 802.1X-2001 "IEEE Standard for Port Based Network Access Control" Section 8.5.8.6: FAIL

    https://standards.ieee.org/standard/802_1X-2001.html

    IETF RFC 2716 "PPP EAP TLS Authentication Protocol" Section 3.1: Overview of the EAP-TLS conversation

    https://tools.ietf.org/html/rfc2716#section-3.1
Test Name Synopsis
Authenticator sends EAP Failure when TLS server fails to authenticate client cdrouter_eaptls_12 Authenticator sends EAP Failure when TLS server fails to authenticate client


    step 1. Start authentication on supplicant interface
    step 2. Wait for EAP Identity Request
    step 3. Respond with known identity
    step 4. Wait for EAP-TLS Start
    step 5. Complete TLS session using invalid client certificate
    step 6. Verify an EAP Failure is received


    References:

    IEEE 802.1X-2001 "IEEE Standard for Port Based Network Access Control" Section 8.5.8.6: FAIL

    https://standards.ieee.org/standard/802_1X-2001.html

    IETF RFC 2716 "PPP EAP TLS Authentication Protocol" Section 3.1: Overview of the EAP-TLS conversation

    https://tools.ietf.org/html/rfc2716#section-3.1
Test Name Synopsis
Port becomes unauthorized if no response to EAP-TLS Start request is received cdrouter_eaptls_20 Port becomes unauthorized if no response to EAP-TLS Start request is received


    step 1. Unauthorize supplicant interface
    step 2. Bring authenticator to the AUTHENTICATING state
    step 3. Wait txWhen seconds for EAP-TLS Start request
    step 4. Do not respond
    step 5. Wait for EAP-TLS Start to be retransmitted up to
            eapReAuthMax times
    step 6. Verify port is not in unauthorized state


    References:

    IEEE 802.1X-2001 "IEEE Standard for Port Based Network Access Control" Section 8.5.8.7: Timeout

    https://standards.ieee.org/standard/802_1X-2001.html
Test Name Synopsis
Authenticator ignores EAP-TLS Response with unknown id field cdrouter_eaptls_23 Authenticator ignores EAP-TLS Response with unknown id field


    step 1. Unauthorize supplicant interface
    step 2. Bring authenticator to the AUTHENTICATING state
    step 3. Wait txWhen seconds for EAP-TLS Request
    step 4. Respond with EAP-TLS Response with mismatched Id field
    step 5. Verify Authenticator does not send EAP Success

    NOTE: This test verifies that the Backend Authentication State machine
    checks the EAP Response identifier to verify that it matches the request
    identifier. Some implementations will silently ignore a mismatch and
    eventually trigger a TIMEOUT. Other implementations will generate an EAP
    Failure message. This test only verifies that the Backend does not generate
    an EAP Success.


    References:

    IEEE 802.1X-2001 "IEEE Standard for Port Based Network Access Control" Section 8.5.8.3: REQUEST

    https://standards.ieee.org/standard/802_1X-2001.html
Test Name Synopsis
Backend sends TLS Alert if supplicant fails server TLS authentication cdrouter_eaptls_40 Backend sends TLS Alert if supplicant fails server TLS authentication


    step 1. Unauthorize supplicant interface
    step 2. Start authentication on supplicant interface
    step 3. Send invalid user certification during TLS exchange
    step 4. Verify TLS server returns TLS Alert
    step 5. Verify Backend returns an EAP-Failure
    step 6. Send ping to remote host on WAN
    step 7. Verify ping is not forwarded to WAN


    References:

    IETF RFC 2716 "PPP EAP TLS Authentication Protocol" Section 3.1: Overview of the EAP-TLS conversation

    https://tools.ietf.org/html/rfc2716#section-3.1
Test Name Synopsis
Port becomes unauthorized if TLS session times out cdrouter_eaptls_115 Port becomes unauthorized if TLS session times out


    step 1. Unauthorize supplicant interface
    step 2. Start authentication on supplicant interface
    step 3. Verify authentication succeeds
    step 4. Restart authentication
    step 5. Do not respond to TLS after receiving server certificate
    step 6. Wait for all EAP TLS Requests to timeout
    step 7. Verify port is not in unauthorized state


    References:

    IEEE 802.1X-2001 "IEEE Standard for Port Based Network Access Control" Section 8.5.4.5: Connecting

    https://standards.ieee.org/standard/802_1X-2001.html

    IEEE 802.1X-2001 "IEEE Standard for Port Based Network Access Control" Section 8.5.8.7: Timeout

    https://standards.ieee.org/standard/802_1X-2001.html
Test Name Synopsis
EAP-TLS authenticator/backend ignores duplicate EAP-TLS packets cdrouter_eaptls_300 EAP-TLS authenticator/backend ignores duplicate EAP-TLS packets


    step 1. Configure supplicant to send duplicate EAP packets
    step 2. Unauthorize supplicant interface
    step 3. Start authentication on supplicant interface
    step 4. Verify EAP-TLS authentication succeeds


    References:

    IETF RFC 2716 "PPP EAP TLS Authentication Protocol" Section 3.2: Retry behavior

    https://tools.ietf.org/html/rfc2716#section-3.2
Test Name Synopsis
EAP-TLS authentication using small EAP Fragment sizes cdrouter_eaptls_400 EAP-TLS authentication using small EAP Fragment sizes


    step 1. Unauthorize supplicant interface
    step 2. Start authentication on supplicant interface
    step 3. Set the EAP Fragment size to 10
    step 4. Verify EAP-TLS Authentication succeeds
    step 5. Repeat for EAP Fragment sizes 9,8,7,6

    NOTE: Some Backend servers and internal authentication implementations will
    timeout with small EAP Fragment sizes such as 1. With this size, the
    authentication server is not able to read an entire EAP-TLS message before
    the txWhen timer fires on the server. The server then restarts the TLS
    session with a EAP Request/TLS-Start. This test starts with an EAP Fragment
    size of 10 and attempts to lower the fragment size to 6 bytes.


    References:

    IETF RFC 2716 "PPP EAP TLS Authentication Protocol" Section 3.3: Fragmentation

    https://tools.ietf.org/html/rfc2716#section-3.3
Test Name Synopsis
EAP-TLS backend accepts EAP packets without EAP-TLS Message Length field cdrouter_eaptls_410 EAP-TLS backend accepts EAP packets without EAP-TLS Message Length field


    step 1. Unauthorize supplicant interface
    step 2. Start authentication on supplicant interface
    step 3. Configure supplicant to not send EAP-TLS message length for
            EAP-TLS packets smaller than the EAP-TLS fragmentation setting
    step 4. Wait for EAP-TLS Start
    step 5. Send initial EAP-TLS packets without including message length
    step 6. Verify EAP-TLS authentication succeeds

    NOTE: For EAP-TLS packets that are less than the EAP fragment size, the
    EAP-TLS Message Length field is optional.


    References:

    IETF RFC 2716 "PPP EAP TLS Authentication Protocol" Section 3.3: Fragmentation

    https://tools.ietf.org/html/rfc2716#section-3.3
Test Name Synopsis
Authenticator handles EAP-TLS bad length DoS attack cdrouter_eaptls_500 Authenticator handles EAP-TLS bad length DoS attack


    step 1. Unauthorize supplicant interface
    step 2. Start authentication on supplicant interface
    step 3. Wait for EAP Identity request
    step 4. Respond with known identity
    step 5. Wait for EAP-TLS Start Request
    step 6. Respond with bad TLS message (Flags 0xc0 with no length or data)
    step 7. Repeat for 10 EAP-TLS Start Requests


    References:

    IETF RFC 2716 "PPP EAP TLS Authentication Protocol" Section 3.3: Fragmentation

    https://tools.ietf.org/html/rfc2716#section-3.3

    IETF RFC 2716 "PPP EAP TLS Authentication Protocol" Section 4.3: EAP-TLS Response Packet

    https://tools.ietf.org/html/rfc2716#section-4.3

eap-radius.tcl

RADIUS client tests for EAP based authentication (802.1X)

Test Name Synopsis
Verify authenticator sends EAP-Success after receiving Access-Accept eapradius_1 Verify authenticator sends EAP-Success after receiving Access-Accept


    step 1. Unauthorize supplicant interface
    step 2. Start authentication on supplicant interface
    step 3. Wait for RADIUS packet sent to authentication server
    step 4. Respond with Access-Accept message that includes an EAP-Success
            packet as the EAP Message
    step 5. Verify supplicant receives EAP-Success packet

    Note: This test does use any specific type of EAP authentication. The RADIUS
    server immediately returns an EAP-Success packet to the authenticator without
    going through the request for a specific EAP type.


    References:

    IEEE 802.1X-2001 "IEEE Standard for Port Based Network Access Control" Section 8.5.8.4: Response

    https://standards.ieee.org/standard/802_1X-2001.html

    IEEE 802.1X-2001 "IEEE Standard for Port Based Network Access Control" Section 8.5.8.5: Success

    https://standards.ieee.org/standard/802_1X-2001.html
Test Name Synopsis
Verify authenticator sends EAP-Failure after Access-Reject eapradius_2 Verify authenticator sends EAP-Failure after Access-Reject


    step 1. Unauthorize supplicant interface
    step 2. Start authentication on supplicant interface
    step 3. Wait for RADIUS packet sent to authentication server
    step 4. Respond with Access-Reject message that includes an EAP-Failure
            packet as the EAP Message
    step 5. Wait 60 seconds for supplicant to receive EAP Failure

    Note: This test does use any specific type of EAP authentication. The RADIUS
    server immediately returns an EAP-Failure packet to the authenticator without
    going through the request for a specific EAP type.


    References:

    IEEE 802.1X-2001 "IEEE Standard for Port Based Network Access Control" Section 8.5.8.4: Response

    https://standards.ieee.org/standard/802_1X-2001.html

    IEEE 802.1X-2001 "IEEE Standard for Port Based Network Access Control" Section 8.5.8.6: Fail

    https://standards.ieee.org/standard/802_1X-2001.html
Test Name Synopsis
Validate common RADIUS attributes sent from authenticator eapradius_5 Validate common RADIUS attributes sent from authenticator


    step 1. Start authentication on supplicant interface
    step 2. Wait for RADIUS packet sent to authentication server
    step 3. Verify the Calling-Station-Id attribute is correct
    step 4. Verify the Called-Station-Id attribute is present (WARNING only)
    step 5. Verify the Message-Authenticator attribute is present
    step 6. Verify the NAS-Identifier is present (WARNING only)
    step 7. Verify the NAS-Port-Type is present (WARNING only)


    References:

    IEEE 802.1X-2001 "IEEE Standard for Port Based Network Access Control" Section D.3: RADIUS authentication

    https://standards.ieee.org/standard/802_1X-2001.html
Test Name Synopsis
Verify authentication fails if RADIUS secret is invalid eapradius_6 Verify authentication fails if RADIUS secret is invalid


    step 1. Start authentication on supplicant interface
    step 2. Configure RADIUS server to send packets with invalid RADIUS secret.
            The Message-Authenticator attribute will still be calculated using
            the original shared secret.
    step 3. Verify authentication does not succeed


    References:

    IETF RFC 2138 "Remote Authentication Dial In User Service (RADIUS)" Section 2: Operation

    https://tools.ietf.org/html/rfc2138#section-2
Test Name Synopsis
Verify authentication fails if Message-Authenticator attribute is invalid eapradius_7 Verify authentication fails if Message-Authenticator attribute is invalid


    step 1. Start authentication on supplicant interface
    step 2. Configure RADIUS server to send packets with invalid
            Message-Authenticator attribute. The RADIUS authenticator
            will still be calculated using the original shared secret.
    step 3. Verify authentication does not succeed


    References:

    IETF RFC 2138 "Remote Authentication Dial In User Service (RADIUS)" Section 2: Operation

    https://tools.ietf.org/html/rfc2138#section-2
Test Name Synopsis
Verify ID and authenticator are unique for each new Access-Request eapradius_8 Verify ID and authenticator are unique for each new Access-Request


    step 1. Start authentication on supplicant interface
    step 2. Save RADIUS request ID and request authenticator from each RADIUS
            Access-Request packet
    step 3. Verify authentication succeeds
    step 4. Verify the ID in each RADIUS Request is unique
    step 5. Verify the Request authenticator in also unique


    References:

    IETF RFC 2138 "Remote Authentication Dial In User Service (RADIUS)" Section 4.1: Access-Request

    https://tools.ietf.org/html/rfc2138#section-4.1
Test Name Synopsis
Verify authenticator sends EAP-Failure when no response from RADIUS in unauthenticated state eapradius_9 Verify authenticator sends EAP-Failure when no response from RADIUS in unauthenticated state


    step 1. Unauthorize supplicant interface
    step 2. Start authentication on supplicant interface
    step 3. Wait for RADIUS packet sent to authentication server
    step 4. Do not response
    step 5. Verify EAP-Failure is sent to supplicant


    References:

    IEEE 802.1X-2001 "IEEE Standard for Port Based Network Access Control" Section 8.5.8.4: Response

    https://standards.ieee.org/standard/802_1X-2001.html
Test Name Synopsis
Verify authenticator can reassemble EAP packets from many RADIUS eapMessage attributes eapradius_10 Verify authenticator can reassemble EAP packets from many RADIUS eapMessage attributes


    step 1. Start authentication on supplicant interface
    step 2. Configure Authentication server to send 10 bytes of a
            EAP message in each RADIUS eapMessage attribute resulting
            in many EAP Message attributes in each RADIUS packet
    step 3. Verify authentication succeeds


    References:

    IETF RFC 2869 "RADIUS Extensions" Section 5.13: EAP-Message

    https://tools.ietf.org/html/rfc2869#section-5.13
Test Name Synopsis
Verify authenticator ignores RADIUS messages with invalid attribute list eapradius_12 Verify authenticator ignores RADIUS messages with invalid attribute list


    step 1. Unauthorize supplicant interface
    step 2. Start authentication on supplicant interface
    step 3. Wait for RADIUS packet sent to authentication server
    step 4. Respond with invalid attribute list containing bad eapMessage and
            additional attribute with no length or data
    step 5. Restart authentication on supplicant
    step 6. Verify authentication succeeds

    NOTE: This test verifies that the authenticator can recover after
    it receives a RADIUS packet with a bad attribute list. Some devices
    have experience a fault when they attempt to parse the bad
    RADIUS attribute list.


    References:

    IETF RFC 2869 "RADIUS Extensions" Section 5.13: EAP-Message

    https://tools.ietf.org/html/rfc2869#section-5.13
Test Name Synopsis
Verify authenticator ignores RADIUS messages without a Message-Authenticator attribute eapradius_14 Verify authenticator ignores RADIUS messages without a Message-Authenticator attribute


    step 1. Start authentication on supplicant interface
    step 2. Configure Authentication server so that the
            Message-Authenticator attribute will not be sent in any
            RADIUS replies
    step 3. Verify authentication fails

    NOTE: RFC 2869 recommends that the RADIUS client SHOULD silently
    drop packets from the RADIUS server containing EAP-Message attribute
    if the Message-Authenticator attribute is not included.


    References:

    IETF RFC 2869 "RADIUS Extensions" Section 5.13: EAP-Message

    https://tools.ietf.org/html/rfc2869#section-5.13
Test Name Synopsis
Verify authenticator sends canned EAP-Failure message when Access-Reject is received eapradius_20 Verify authenticator sends canned EAP-Failure message when Access-Reject is received


    step 1. Unauthorize supplicant interface
    step 2. Start authentication on supplicant interface
    step 3. Wait for RADIUS packet sent to authentication server
    step 4. Respond with Access-Reject message that includes an EAP-Success
            packet as the EAP Message
    step 5. Verify supplicant receives EAP Failure


    References:

    IEEE 802.1X-2001 "IEEE Standard for Port Based Network Access Control" Section D.4: Security considerations

    https://standards.ieee.org/standard/802_1X-2001.html
Test Name Synopsis
Verify authenticator sends canned EAP-Success message when Access-Accept is received eapradius_21 Verify authenticator sends canned EAP-Success message when Access-Accept is received


    step 1. Unauthorize supplicant interface
    step 2. Start authentication on supplicant interface
    step 3. Wait for RADIUS packet sent to authentication server
    step 4. Respond with Access-Accept message that includes an EAP-Failure
            packet as the EAP Message
    step 5. Verify supplicant receives EAP-Success


    References:

    IEEE 802.1X-2001 "IEEE Standard for Port Based Network Access Control" Section D.4: Security considerations

    https://standards.ieee.org/standard/802_1X-2001.html

pppoe-pt.tcl

PPPoE pass through from PPPoE client on LAN to WAN side PPPoE server

Test Name Synopsis
Verify basic case of PPPoE pass through with LAN PPPoE client cdrouter_pppoept_1 Verify basic case of PPPoE pass through with LAN PPPoE client


    step 1. Start a new PPPoE server on the WAN
    step 2. Initiate a PPPoE client session from a host on the LAN
    step 3. Verify the PPPoE client can establish a PPPoE session
    step 4. Verify the PPPoE client can bring up the PPP link
    step 5. Close the PPP and PPPoE session

    NOTE: In order to pass this test, the device must support PPPoE
    pass through for PPPoE clients on the LAN.


    References:

    IETF RFC 2516 "A Method for Transmitting PPP Over Ethernet (PPPoE)"

    https://tools.ietf.org/html/rfc2516
Test Name Synopsis
Verify PPPoE packets to unknown MAC address do not use PPPoE pass through cdrouter_pppoept_2 Verify PPPoE packets to unknown MAC address do not use PPPoE pass through


    step 1. Start a new PPPoE server on the WAN
    step 2. Initiate a PPPoE client session from a host on the LAN
    step 3. Verify the PPPoE client can establish a PPPoE session
    step 4. Verify the PPPoE client can bring up the PPP link
    step 5. Send PPPoE packet from WAN to LAN using an unknown MAC address
    step 6. Verify the PPPoE packet is not forwarded onto the LAN
    step 7. Close the PPP and PPPoE session for the existing PPPoE session

    NOTE: In order to pass this test, the device must support PPPoE
    pass through for PPPoE clients on the LAN.


    References:

    IETF RFC 2516 "A Method for Transmitting PPP Over Ethernet (PPPoE)"

    https://tools.ietf.org/html/rfc2516
Test Name Synopsis
Verify basic case of PPPoE pass through with LAN PPPoE client using random session ID's cdrouter_pppoept_3 Verify basic case of PPPoE pass through with LAN PPPoE client using random session ID’s


    step 1. Start a new PPPoE server on the WAN configured to use random session ID's
    step 2. Initiate a PPPoE client session from a host on the LAN
    step 3. Verify the PPPoE client can establish a PPPoE session
    step 4. Verify the PPPoE client can bring up the PPP link
    step 5. Close the PPP and PPPoE session

    NOTE: In order to pass this test, the device must support PPPoE
    pass through for PPPoE clients on the LAN.


    References:

    IETF RFC 2516 "A Method for Transmitting PPP Over Ethernet (PPPoE)"

    https://tools.ietf.org/html/rfc2516

ipsec-esp.tcl

IPSEC ESP tests for IPSEC based VPNs

Test Name Synopsis
Verify the ESP header sequence number increases with each new IPv4 IPSEC ESP packet cdrouter_esp_1 Verify the ESP header sequence number increases with each new IPv4 IPSEC ESP packet


    step 1. Initiate 100 outbound ICMP Echo Requests to the remote VPN host
    step 2. Outbound traffic should be sent through IPSEC tunnel
    step 3. Verify the sequence number in the IPSEC ESP header increments by 1


    References:

    IETF RFC 2406 "IP Encapsulating Security Payload (ESP)" Section 2.2: Sequence Number

    https://tools.ietf.org/html/rfc2406#section-2.2
Test Name Synopsis
Verify manual IPSEC keys continue to work after ESP sequence number wraps cdrouter_esp_3 Verify manual IPSEC keys continue to work after ESP sequence number wraps


    step 1. Set the current sequence number for the outbound SA to 0xfffffffe
    step 2. Initiate 10 outbound ICMP Echo Requests to the remote VPN host
    step 3. Outbound traffic should be sent through IPSEC tunnel
    step 4. Verify all packets are received as IPSEC ESP sequence number wraps


    References:

    IETF RFC 2406 "IP Encapsulating Security Payload (ESP)" Section 5: Conformance Requirements

    https://tools.ietf.org/html/rfc2406#section-5
Test Name Synopsis
Verify no anti-relay techniques are used with manual IPSEC keys cdrouter_esp_5 Verify no anti-relay techniques are used with manual IPSEC keys


    step 1. Initiate 10 outbound ICMP Echo Requests to the remote host
    step 2. Before each packet is sent, reset the ESP sequence number
            to 11221122 so that all outbound packets have the same
            sequence number.
    step 3. Outbound traffic should be sent through IPSEC tunnel
    step 4. Verify all packets are sent and received with no errors


    References:

    IETF RFC 2406 "IP Encapsulating Security Payload (ESP)" Section 5: Conformance Requirements

    https://tools.ietf.org/html/rfc2406#section-5
Test Name Synopsis
Verify inner IPv4 TTL is decremented for IPSEC tunneled packet cdrouter_esp_8 Verify inner IPv4 TTL is decremented for IPSEC tunneled packet


    step 1. Forward an IP packet from a LAN client to the WAN
    step 2. Verify the TTL of the tunneled packet is decremented by 1


    References:

    IETF RFC 2401 "Security Architecture for the Internet Protocol" Section 5.1.2: Header Construction for Tunnel Mode

    https://tools.ietf.org/html/rfc2401#section-5.1.2
Test Name Synopsis
Verify packets with wrong ESP authentication are dropped cdrouter_esp_10 Verify packets with wrong ESP authentication are dropped


    step 1. Initiate an outbound ICMP Echo Request to a WAN destination
    step 2. Verify ICMP Echo Reply is received
    step 3. Configure outbound SA with invalid authentication key
    step 4. Repeat outbound ICMP Echo Request
    step 5. Verify return ICMP Echo Reply is dropped
    step 6. Reconfigure original ESP authentication key
    step 7. Verify outbound ICMP Echo Request now succeeds

    NOTE: This test is only run when the configured IPSEC tunnel has
    authentication enabled.


    References:

    IETF RFC 2406 "IP Encapsulating Security Payload (ESP)" Section 3.4.5: Packet Decryption

    https://tools.ietf.org/html/rfc2406#section-3.4.5
Test Name Synopsis
Verify Incoming IP fragments for ESP tunnel are reassembled cdrouter_esp_20 Verify Incoming IP fragments for ESP tunnel are reassembled


    step 1. Set the MTU on the IPSEC tunnel endpoint to 108
    step 2. Send a 1000 byte UDP packet from the LAN to the WAN
    step 3. Send a return 1000 byte UDP packet from the WAN to the LAN
            over the IPSEC tunnel. The IPSEC packet will be fragmented
            based on the MTU size.
    step 4. Verify router reassembled all IP fragments and forwards UDP
            packet to the LAN host
    step 5. Add 8 to the MTU size and repeat the test until the MTU is 996


    References:

    IETF RFC 791 "INTERNET PROTOCOL" Section 3.2: Fragmentation and Reassembly

    https://tools.ietf.org/html/rfc791#section-3.2

    IETF RFC 2401 "Security Architecture for the Internet Protocol" Section 5.2: Processing Inbound IP Traffic

    https://tools.ietf.org/html/rfc2401#section-5.2

    IETF RFC 2406 "IP Encapsulating Security Payload (ESP)" Section 3.1: ESP Header Location

    https://tools.ietf.org/html/rfc2406#section-3.1
Test Name Synopsis
Verify out-of-order IP fragments for ESP tunnel are reassembled cdrouter_esp_21 Verify out-of-order IP fragments for ESP tunnel are reassembled


    step 1. Set the MTU on the IPSEC tunnel endpoint to 108
    step 2. Send a 1000 byte UDP packet from the LAN to the WAN
    step 3. Send a return 1000 byte UDP packet from the WAN to the LAN
            over the IPSEC tunnel using out of order IP fragments
    step 4. Verify router reassembled all out-of-order IP fragments
            and forwards UDP packet to the LAN host


    References:

    IETF RFC 791 "INTERNET PROTOCOL" Section 3.2: Fragmentation and Reassembly

    https://tools.ietf.org/html/rfc791#section-3.2

    IETF RFC 2406 "IP Encapsulating Security Payload (ESP)" Section 3.1: ESP Header Location

    https://tools.ietf.org/html/rfc2406#section-3.1
Test Name Synopsis
Verify router fragments large IP packets before sending over IPSEC tunnel cdrouter_esp_22 Verify router fragments large IP packets before sending over IPSEC tunnel


    step 1. Forward UDP packet from LAN host to WAN using 1500 byte packet
    step 2. Verify packet is forwarded over IPSEC tunnel
    step 3. In order to forward the packet over the tunnel, the router must
            fragment the packet.
    step 4. Send a return UDP packet with the same packet size from the WAN
            to the LAN.
    step 5. Reduce the packet size by 1 byte and repeat until the packet size
            is >= 1408.

    NOTE: The router may fragment the inner IP packet before ESP encapsulation
    and send 2 or more ESP packets or the router may fragment the outer ESP
    packet and send IP fragments. The first approach is more NAT friendly since
    IP fragments are not used and this allows other NAT routers in the path
    to use SPI tracking for IPSEC pass through connections. This test case
    supports both implementations.


    References:

    IETF RFC 2406 "IP Encapsulating Security Payload (ESP)" Section 3.3.5: Fragmentation

    https://tools.ietf.org/html/rfc2406#section-3.3.5
Test Name Synopsis
Verify router supports PMTU discovery for packets sent over IPSEC tunnel cdrouter_esp_100 Verify router supports PMTU discovery for packets sent over IPSEC tunnel


    step 1. Send 1500 byte UDP packet with IP Don't Fragment Flag = 1 to the
            remoteVpn host over the IPSEC tunnel
    step 2. Check for an ICMP Destination Unreachable packet with code = 4
    step 3. Repeat process two more times until until an ICMP Destination
            Unreachable is received, or all 3 packets are sent
    step 4. If an ICMP Destination Unreachable was sent, verify the
            the code value is 4 and verify MTU value in the ICMP header
    step 5. Reduce the UDP packet size by 1 byte and repeat the process
            until no ICMP Destination Unreachable is sent
    step 6. When a packet size is found that does not generate an
            ICMP Destination Unreachable, verify packets can be forwarded over
            IPSEC tunnel using this packet size
    step 7. Verify the final MTU size is the same as the MTU size
            reported in the ICMP Destination Unreachable packet

    NOTE: Some devices rate limit the number of ICMP packets that may be sent.
    This test will sent 3 UDP packets over a 15 second window in order to
    generate an ICMP unreachable packet. If your device uses rate limiting on
    ICMP packets, it must allow at least 1 ICMP packet every 10 seconds.


    References:

    IETF RFC 2401 "Security Architecture for the Internet Protocol" Section 6.1: PMTU/DF Processing

    https://tools.ietf.org/html/rfc2401#section-6.1

    IETF RFC 1191 "Path MTU Discovery"

    https://tools.ietf.org/html/rfc1191
Test Name Synopsis
Verify DF bit from original packet is copied to encapsulation header cdrouter_esp_101 Verify DF bit from original packet is copied to encapsulation header


    step 1. Send ICMP Echo packet to the remoteVpn with the DF flag set to 1
    step 2. Wait for ESP packet on the WAN for this IPSEC tunnel
    step 3. Verify the DF flag in the ESP header is 1

    NOTE: In order to pass this test, the router may need to configure the
    treatment of the DF bit. The router should be configured to copy the value
    of the DF bit from the inner IP packet. This allows the PMTU behavior to
    work for packets that have been tunneled.


    References:

    IETF RFC 2401 "Security Architecture for the Internet Protocol" Section 6.1: PMTU/DF Processing

    https://tools.ietf.org/html/rfc2401#section-6.1
Test Name Synopsis
Verify return traffic that does not use IPSEC/ESP is dropped cdrouter_esp_200 Verify return traffic that does not use IPSEC/ESP is dropped


    step 1. Forward UDP packet from LAN to remote VPN host
    step 2. Verify packet is forwarded over IPSEC tunnel to remote VPN host
    step 3. Send a return UDP packet from the remote VPN host without
            encapsulating the packet with an ESP header
    step 4. Verify the packet is not forwarded back to the LAN


    References:

    IETF RFC 2401 "Security Architecture for the Internet Protocol" Section 4.4.1: The Security Policy Database (SPD)

    https://tools.ietf.org/html/rfc2401#section-4.4.1
Test Name Synopsis
Verify all configured IPv4 IPSEC tunnels are operational cdrouter_esp_400 Verify all configured IPv4 IPSEC tunnels are operational


    step 1. Configure SAs for all IPSEC tunnels defined in the configuration file
    step 2. For each tunnel, verify a TCP connection can be established
            from the LAN host to a remote host over the IPSEC tunnel
    step 3. Close all TCP connections

dmz.tcl

Test cases for DMZ configurations

Test Name Synopsis
Inbound TCP connections to public side HTTP port are forwarded to DMZ host cdrouter_dmz_1 Inbound TCP connections to public side HTTP port are forwarded to DMZ host


    step 1. Ping the router's LAN IP address from the DMZ host
    step 2. Initiate a WAN TCP connection to the router's public IP at port 80
    step 3. Verify the connection is forwarded to the DMZ host
    step 4. Initiate a WAN TCP connection to the router's private IP at port 80
    step 5. Verify the connection is not established
Test Name Synopsis
Inbound TCP packets are sent to DMZ host for all ports cdrouter_dmz_100 Inbound TCP packets are sent to DMZ host for all ports


    step 1. Ping the router's LAN IP address from the DMZ host
    step 2. Send TCP SYN packets from WAN to each port in the port scan range
    step 3. Verify packets are forwarded to DMZ host
    step 4. Do not test ports that have port forwarding configured

    NOTE: The port scan range can be configured using the 'portScanStart' and
    'portScanStop' testvars. You can also specify any exceptions to the port
    range using the testvar 'lanDmzTcpPortExceptions'.

    Example:

    testvar portScanStart 0
    testvar portScanStop  65535
Test Name Synopsis
Inbound UDP packets are sent to DMZ host for all ports cdrouter_dmz_101 Inbound UDP packets are sent to DMZ host for all ports


    step 1. Ping the router's LAN IP address from the DMZ host
    step 2. Send UDP packets from WAN to each port in the port scan range
    step 3. Verify packets are forwarded to DMZ host
    step 4. Do not test ports that have port forwarding configured

    NOTE: The port scan range can be configured using the 'portScanStart' and
    'portScanStop' testvars. You can also specify any exceptions to the port
    range using the testvar 'lanDmzUdpPortExceptions'.

    Example:

    testvar portScanStart 0
    testvar portScanStop  65535
Test Name Synopsis
ICMP Echo packets are forwarded to DMZ host cdrouter_dmz_110 ICMP Echo packets are forwarded to DMZ host


    step 1. Initiate an inbound ICMP Echo Request from the WAN to router's public IP
    step 2. Verify ICMP Echo Request is received by DMZ host

    NOTE: Some routers do not support sending unassociated ICMP packets to
    the DMZ host. Instead, they may locally process the ICMP packet or drop the
    packet. If the router does not support this functionality, the
    'lanDmzSupportsIcmp' testvar should be set to no.

    Example:

    testvar lanDmzSupportsIcmp no
Test Name Synopsis
Non ICMP, TCP, UDP, or SCTP protocol types are forwarded to DMZ host cdrouter_dmz_200 Non ICMP, TCP, UDP, or SCTP protocol types are forwarded to DMZ host


    step 1. Send packet with IP protocol type 0 from  WAN to router's public IP
    step 2. Verify IP packet is forwarded to DMZ host
    step 3. Repeat for IP protocol types up to 255, skipping protocol types 1
            (ICMP), 6 (TCP), 17 (UDP), and 132 (SCTP) which are all transport
            protocols
    step 4. Verify each protocol type is forwarded to the DMZ host

    NOTE: The DMZ may not forward certain protocols that may be terminated
    locally on the router. For example, it may not be possible to have IGMP
    packets pass through the DMZ. You may configure a list of specific IP
    protocol types that should be skipped for this test using the testvar
    'lanDmzIpProtoExceptions'. This list should contain a comma separated
    list of ports.

    For example:

    testvar lanDmzIpProtoExceptions "2,47"

mcast.tcl

IGMPv2/v3 and multicast data tests for IGMP proxy or pass through

Test Name Synopsis
IGMP packets from LAN are forwarded/proxied to WAN interface cdrouter_mcast_1 IGMP packets from LAN are forwarded/proxied to WAN interface


    step 1. Send an IGMPv2/3 Query on the WAN to allow device to detect IGMP version
    step 2. Send an IGMPv2/3 Membership Report packet on the LAN interface
    step 3. Verify an IGMPv2/3 Membership Report packet is received on the WAN interface
    step 4. For IGMPv3, verify group record is CHANGE_TO_EXCLUDE_MODE for the group
            with an empty source list.
    step 5. Repeat test using an IGMPv2 Leave packet or IGMPv3 Memebership Report
            to leave the multicast group
    step 6. For IGMPv3, verify group record is CHANGE_TO_INCLUDE_MODE for the group
            with an empty source list.

    NOTE: This test will work with either a multicast pass through implementation
    or a multicast proxy implementation.

    NOTE: Some routers may send an IGMP query on the LAN interface after the
    IGMP Leave from the LAN client. The IGMP Leave may not be sent on the
    WAN interface until the LAN side has made multiple queries.

    The amount of time this test case should wait before expecting the
    IGMP Leave on the WAN interface may be configured by setting the
    testvar 'multicastCacheTimeout'.


    References:

    IETF RFC 2236 "Internet Group Management Protocol, Version 2"

    https://tools.ietf.org/html/rfc2236

    IETF RFC 3376 "Internet Group Management Protocol, Version 3"

    https://tools.ietf.org/html/rfc3376
Test Name Synopsis
Verify IPv4 TTL is decremented for multicast packets cdrouter_mcast_2 Verify IPv4 TTL is decremented for multicast packets


    step 1. Send an IGMPv2/3 Query on the WAN to allow device to detect IGMP version
    step 2. Join a multicast group on the LAN interface
    step 3. Send a UDP packet to the multicast group from the WAN
    step 4. Verify the multicast packet is received on the LAN
    step 5. Verify the TTL is decremented by the expected IP hop count

    NOTE: This test will work with either a multicast pass through implementation
    or a multicast proxy implementation.

    NOTE: The number of expected IP hops can be configured using the testvar
    'IPv4HopCount'. The default is 1 IP hop. If the device is using bridge
    mode, the expected IPv4HopCount is 0.

    NOTE: The testvar multicastJoinDelay can be used to control how long
    the test waits to verify the multicast traffic after receiving the
    IGMP report. The default value is 2 seconds.


    References:

    IETF RFC 2236 "Internet Group Management Protocol, Version 2"

    https://tools.ietf.org/html/rfc2236

    IETF RFC 3376 "Internet Group Management Protocol, Version 3"

    https://tools.ietf.org/html/rfc3376
Test Name Synopsis
Forward Multicast UDP packets with various packet lengths (LAN to WAN) cdrouter_mcast_11 Forward Multicast UDP packets with various packet lengths (LAN to WAN)


    step 1. Send an IGMPv2/3 Query on the WAN to allow device to detect IGMP version
    step 2. Join a multicast group on the WAN interface
    step 3. Forward a multicast UDP packet from the LAN with UDP length 4
    step 4. Verify the packet is received on the WAN interface
    step 5. Repeat for all packet sizes up to the max MTU

    NOTE: This test will work with either a multicast pass through implementation
    or a multicast proxy implementation.

    NOTE: The testvar multicastJoinDelay can be used to control how long
    the test waits to verify the multicast traffic after receiving the
    IGMP report. The default value is 2 seconds.

    NOTE: If the device does not support forwarding multiast traffic
    through NAT to the WAN, this test case may be skipped by setting
    the testvar supportsMulticastOut to no.


    References:

    IETF RFC 2236 "Internet Group Management Protocol, Version 2"

    https://tools.ietf.org/html/rfc2236

    IETF RFC 3376 "Internet Group Management Protocol, Version 3"

    https://tools.ietf.org/html/rfc3376
Test Name Synopsis
Forward Multicast UDP packets with various packet lengths (WAN to LAN) cdrouter_mcast_12 Forward Multicast UDP packets with various packet lengths (WAN to LAN)


    step 1. Send an IGMPv2/3 Query on the WAN to allow device to detect IGMP version
    step 2. Join a multicast group on the LAN interface
    step 3. Forward a multicast UDP packet from the WAN with UDP length 4
    step 4. Verify the packet is received on the LAN interface
    step 5. Repeat for all packet sizes up to the max MTU

    NOTE: This test will work with either a multicast pass through implementation
    or a multicast proxy implementation.

    NOTE: The testvar multicastJoinDelay can be used to control how long
    the test waits to verify the multicast traffic after receiving the
    IGMP report. The default value is 2 seconds.


    References:

    IETF RFC 2236 "Internet Group Management Protocol, Version 2"

    https://tools.ietf.org/html/rfc2236

    IETF RFC 3376 "Internet Group Management Protocol, Version 3"

    https://tools.ietf.org/html/rfc3376
Test Name Synopsis
Verify IGMP router periodically sends general IGMP Query on LAN interface cdrouter_mcast_20 Verify IGMP router periodically sends general IGMP Query on LAN interface


    step 1. Send an IGMPv2/3 Query on the WAN to allow device to detect IGMP version
    step 2. Wait up to igmpQueryInterval seconds for a general IGMP Query on the LAN
    step 3. Repeat for 2 queries

    NOTE: This test will work with a multicast proxy implementation only.


    References:

    IETF RFC 2236 "Internet Group Management Protocol, Version 2"

    https://tools.ietf.org/html/rfc2236

    IETF RFC 3376 "Internet Group Management Protocol, Version 3"

    https://tools.ietf.org/html/rfc3376
Test Name Synopsis
Multicast streams are not forwarded if no group members exist cdrouter_mcast_50 Multicast streams are not forwarded if no group members exist


    step 1. Send an IGMPv2/3 Query on the WAN to allow device to detect IGMP version
    step 2. Allocate a multicast group that has no members on the LAN
    step 3. Forward UDP multicast packet from WAN to LAN using group
    step 4. Verify the packet is not received on the LAN

    NOTE: This test will work with a multicast proxy implementation only.


    References:

    IETF RFC 2236 "Internet Group Management Protocol, Version 2"

    https://tools.ietf.org/html/rfc2236

    IETF RFC 3376 "Internet Group Management Protocol, Version 3"

    https://tools.ietf.org/html/rfc3376
Test Name Synopsis
Multicast streams are not forwarded after last member leaves group cdrouter_mcast_51 Multicast streams are not forwarded after last member leaves group


    step 1. Send an IGMPv2/3 Query on the WAN to allow device to detect IGMP version
    step 2. Join a multicast group on the LAN interface
    step 3. Send a UDP packet to the multicast group from the WAN
    step 4. Verify the multicast packet is received on the LAN
    step 5. Send a IGMP Leave packet on the LAN interface for group
    step 6. Wait for the multicast cache to expire
    step 7. Forward UDP multicast packet from WAN to LAN using group
    step 8. Verify the packet is not received on the LAN

    NOTE: This test will work with a multicast proxy implementation only.


    References:

    IETF RFC 2236 "Internet Group Management Protocol, Version 2"

    https://tools.ietf.org/html/rfc2236

    IETF RFC 3376 "Internet Group Management Protocol, Version 3"

    https://tools.ietf.org/html/rfc3376
Test Name Synopsis
Multicast streams are not forwarded after last member ages out cdrouter_mcast_52 Multicast streams are not forwarded after last member ages out


    step 1. Send an IGMPv2/3 Query on the WAN to allow device to detect IGMP version
    step 2. Join a multicast group on the LAN interface
    step 3. Send a UDP packet to the multicast group from the WAN
    step 4. Verify the multicast packet is received on the LAN
    step 5. Wait for the multicast group to expire
    step 6. Forward UDP multicast packet from WAN to LAN using group
    step 7. Verify the packet is not received on the LAN

    NOTE: This test will work with a multicast proxy implementation only.

    NOTE: The amount of time it takes the multicast group to expire is
    based on the igmpQueryInterval, igmpRobustnessVariable, and
    igmpQueryResponseInterval. These can all be configured using the
    following testvars:

      testvar igmpQueryInterval 125
      testvar igmpRobustnessVariable 2
      testvar igmpQueryResponseInterval 10


    References:

    IETF RFC 2236 "Internet Group Management Protocol, Version 2"

    https://tools.ietf.org/html/rfc2236

    IETF RFC 3376 "Internet Group Management Protocol, Version 3"

    https://tools.ietf.org/html/rfc3376
Test Name Synopsis
IGMP proxy interface answers IGMP general query requests cdrouter_mcast_53 IGMP proxy interface answers IGMP general query requests


    step 1. Send an IGMPv2/3 Query on the WAN to allow device to detect IGMP version
    step 2. Join a multicast group on the LAN interface
    step 3. Wait up to 20 seconds for IGMP membership report on the WAN
    step 4. Issue an IGMP Membership query to 224.0.0.1 on WAN for group address 0.0.0.0
    step 5. Verify router's WAN side responds with IGMP membership report for
            the multicast group

    NOTE: This test will work with a multicast proxy implementation only.


    References:

    IETF RFC 2236 "Internet Group Management Protocol, Version 2"

    https://tools.ietf.org/html/rfc2236

    IETF RFC 3376 "Internet Group Management Protocol, Version 3"

    https://tools.ietf.org/html/rfc3376
Test Name Synopsis
IGMP proxy interface answers IGMP specific query requests cdrouter_mcast_54 IGMP proxy interface answers IGMP specific query requests


    step 1. Send an IGMPv2/3 Query on the WAN to allow device to detect IGMP version
    step 2. Join a multicast group on the LAN interface
    step 3. Wait up to 20 seconds for IGMP membership report on the WAN
    step 4. Issue an IGMP Membership query to 224.0.0.1 on WAN for specific group address
    step 5. Verify router's WAN side responds with IGMP membership report for
            the multicast group

    NOTE: This test will work with a multicast proxy implementation only.


    References:

    IETF RFC 2236 "Internet Group Management Protocol, Version 2"

    https://tools.ietf.org/html/rfc2236

    IETF RFC 3376 "Internet Group Management Protocol, Version 3"

    https://tools.ietf.org/html/rfc3376
Test Name Synopsis
Verify IGMP router sends IGMP Group Specific Query after last member leaves group cdrouter_mcast_60 Verify IGMP router sends IGMP Group Specific Query after last member leaves group


    step 1. Send an IGMPv2/3 Query on the WAN to allow device to detect IGMP version
    step 2. Send an IGMPv2/3 Membership Report packet on the LAN interface
    step 3. Send an IGMPv2 Leave or IGMPv3 Memebership packet on the LAN interface
            to leave the multicast group
    step 4. Verify an IGMPv2/3 Query packet is sent on the LAN interface
            to the specific multicast group. If igmpFastLeave is set
            to yes, verify that no IGMP Query is sent.

    NOTE: This test will work with a multicast proxy implementation only.

    NOTE: If the device supports IGMP Fast Leave, the testvar igmpFastLeave
    should be set to yes. In this case, the test case will verify that
    no group specific IGMP query is sent after the IGMP Leave.

    References:

    IETF RFC 2236 "Internet Group Management Protocol, Version 2"

    https://tools.ietf.org/html/rfc2236

    IETF RFC 3376 "Internet Group Management Protocol, Version 3"

    https://tools.ietf.org/html/rfc3376
Test Name Synopsis
Verify IGMP router sends IGMP Leave after last group member ages out cdrouter_mcast_70 Verify IGMP router sends IGMP Leave after last group member ages out


    step 1. Send an IGMPv2/3 Query on the WAN to allow device to detect IGMP version
    step 2. Send an IGMPv2/3 Membership Report packet on the LAN interface
    step 3. Verify an IGMPv2/3 Membership Report packet is received on the WAN interface
    step 4. For IGMPv3, verify group record is CHANGE_TO_EXCLUDE_MODE for the group
            with an empty source list.
    step 5. Let group member on the LAN age out. No responses will sent to IGMP
            queries and no IGMP Leave will be sent.
    step 6. Verify IGMP leave or IGMPv3 membership report is received for the group
            on the WAN interface
    step 7. For IGMPv3, verify group record is CHANGE_TO_INCLUDE_MODE for the group
            with an empty source list.

    NOTE: This test will work with either a multicast pass through implementation
    or a multicast proxy implementation.

    NOTE: The amount of time it takes the multicast group to expire is
    based on the igmpQueryInterval, igmpRobustnessVariable, and
    igmpQueryResponseInterval. These can all be configured using the
    following testvars:

      testvar igmpQueryInterval 125
      testvar igmpRobustnessVariable 2
      testvar igmpQueryResponseInterval 10

    References:

    IETF RFC 2236 "Internet Group Management Protocol, Version 2"

    https://tools.ietf.org/html/rfc2236

    IETF RFC 3376 "Internet Group Management Protocol, Version 3"

    https://tools.ietf.org/html/rfc3376
Test Name Synopsis
Verify IGMP router accepts reports with unspecified source address cdrouter_mcast_80 Verify IGMP router accepts reports with unspecified source address


    step 1. Send an IGMPv2/3 Query on the WAN to allow device to detect IGMP version
    step 2. Send an IGMPv2/3 Membership Report packet on the LAN interface using
            the unspecified src address 0.0.0.0.
    step 3. Verify an IGMPv2/3 Membership Report packet is received on the WAN interface
    step 4. For IGMPv3, verify group record is CHANGE_TO_EXCLUDE_MODE for the group
            with an empty source list.
    step 5. Repeat test using an IGMPv2 Leave packet or IGMPv3 Memebership Report
            to leave the multicast group
    step 6. For IGMPv3, verify group record is CHANGE_TO_INCLUDE_MODE for the group
            with an empty source list.

    NOTE: This test will work with either a multicast pass through implementation
    or a multicast proxy implementation.

    NOTE: Some routers may send an IGMP query on the LAN interface after the
    IGMP Leave from the LAN client. The IGMP Leave may not be sent on the
    WAN interface until the LAN side has made multiple queries.

    The amount of time this test case should wait before expecting the
    IGMP Leave on the WAN interface may be configured by setting the
    testvar 'multicastCacheTimeout'.


    References:

    IETF RFC 2236 "Internet Group Management Protocol, Version 2"

    https://tools.ietf.org/html/rfc2236

    IETF RFC 3376 "Internet Group Management Protocol, Version 3"

    https://tools.ietf.org/html/rfc3376

    IETF RFC 4541 "Considerations for Internet Group Management Protocol (IGMP) and Multicast Listener Discovery (MLD) Snooping Switches"

    https://tools.ietf.org/html/rfc4541
Test Name Synopsis
Verify IGMP snooping switch scenario with unspecified source address cdrouter_mcast_81 Verify IGMP snooping switch scenario with unspecified source address


    step 1. Send an IGMPv2/3 Query on the WAN to allow device to detect IGMP version
    step 2. Join a multicast group on the LAN interface using src address 0.0.0.0
    step 3. Send a UDP packet to the multicast group from the WAN
    step 4. Verify the multicast packet is received on the LAN
    step 5. Verify the TTL is decremented by the expected IP hop count

    NOTE: This test will work with either a multicast pass through implementation
    or a multicast proxy implementation.

    NOTE: The number of expected IP hops can be configured using the testvar
    'IPv4HopCount'. The default is 1 IP hop.

    NOTE: The testvar multicastJoinDelay can be used to control how long
    the test waits to verify the multicast traffic after receiving the
    IGMP report. The default value is 2 seconds.


    References:

    IETF RFC 2236 "Internet Group Management Protocol, Version 2"

    https://tools.ietf.org/html/rfc2236

    IETF RFC 3376 "Internet Group Management Protocol, Version 3"

    https://tools.ietf.org/html/rfc3376

    IETF RFC 4541 "Considerations for Internet Group Management Protocol (IGMP) and Multicast Listener Discovery (MLD) Snooping Switches"

    https://tools.ietf.org/html/rfc4541
Test Name Synopsis
Verify IGMP proxy interface answers general IGMP query requests with unspecified source address cdrouter_mcast_82 Verify IGMP proxy interface answers general IGMP query requests with unspecified source address


    step 1. Send an IGMPv2/3 Query on the WAN to allow device to detect IGMP version
    step 2. Join a multicast group on the LAN interface
    step 3. Wait up to 20 seconds for IGMP membership report on the WAN
    step 4. Issue an IGMP Membership query to 224.0.0.1 on WAN for group address 0.0.0.0
            using src address 0.0.0.0
    step 5. Verify router's WAN side responds with IGMP membership report for
            the multicast group

    NOTE: This test will work with a multicast proxy implementation only.

    An IGMP snooping switch may send an IGMP query with a 0.0.0.0 IP Source Address.
    IGMP does not specifically prevent IGMP queries using an unspecified
    src address while RFC 3590 does not allow this for MLD.


    References:

    IETF RFC 2236 "Internet Group Management Protocol, Version 2"

    https://tools.ietf.org/html/rfc2236

    IETF RFC 3376 "Internet Group Management Protocol, Version 3"

    https://tools.ietf.org/html/rfc3376

    IETF RFC 4541 "Considerations for Internet Group Management Protocol (IGMP) and Multicast Listener Discovery (MLD) Snooping Switches"

    https://tools.ietf.org/html/rfc4541
Test Name Synopsis
Verify IGMP proxy interface answers specific IGMP query requests with unspecified source address cdrouter_mcast_83 Verify IGMP proxy interface answers specific IGMP query requests with unspecified source address


    step 1. Send an IGMPv2/3 Query on the WAN to allow device to detect IGMP version
    step 2. Join a multicast group on the LAN interface
    step 3. Wait up to 20 seconds for IGMP membership report on the WAN
    step 4. Issue an IGMP Membership query to 224.0.0.1 on WAN for specific group address
            using src address 0.0.0.0
    step 5. Verify router's WAN side responds with IGMP membership report for
            the multicast group

    NOTE: This test will work with a multicast proxy implementation only.

    An IGMP snooping switch may send an IGMP query with a 0.0.0.0 IP Source Address.
    IGMP does not specifically prevent IGMP queries using an unspecified
    src address while RFC 3590 does not allow this for MLD.


    References:

    IETF RFC 2236 "Internet Group Management Protocol, Version 2"

    https://tools.ietf.org/html/rfc2236

    IETF RFC 3376 "Internet Group Management Protocol, Version 3"

    https://tools.ietf.org/html/rfc3376

    IETF RFC 4541 "Considerations for Internet Group Management Protocol (IGMP) and Multicast Listener Discovery (MLD) Snooping Switches"

    https://tools.ietf.org/html/rfc4541
Test Name Synopsis
Verify the maximum number of multicast groups received on the LAN cdrouter_mcast_100 Verify the maximum number of multicast groups received on the LAN


    step 1. Send an IGMPv2/3 Query on the WAN to allow device to detect IGMP version
    step 2. Join igmpMaxGroups multicast groups on the LAN interface
    step 3. Forward a multicast UDP packet from the WAN to each group
    step 4. Verify each group is received on the LAN interface
    step 5. Send a IGMP Leave for each multicast group

    NOTE: This test will work with either a multicast pass through implementation
    or a multicast proxy implementation.

    NOTE: You can slow down the rate at which CDRouter will join each group
    by configuring the testvar multicastScaleDelay. It defaults to 1
    millisecond.


    References:

    IETF RFC 2236 "Internet Group Management Protocol, Version 2"

    https://tools.ietf.org/html/rfc2236

    IETF RFC 3376 "Internet Group Management Protocol, Version 3"

    https://tools.ietf.org/html/rfc3376
Test Name Synopsis
Verify IPTV channel change test scenario 1 (no overlap) cdrouter_mcast_110 Verify IPTV channel change test scenario 1 (no overlap)


    step 1. Send an IGMPv2/3 Query on the WAN to allow device to detect IGMP version
    step 2. Check the testvar iptvChannelRange to determine the number of channels
    step 3. For each channel, join the multicast group on the LAN
    step 4. Verify the IGMPv2 or IGMPv3 report is received in the WAN
    step 5. Start sending multicast data on the WAN for the new group
    step 6. Verify the LAN side starts to receive the multicast data
    step 7. Wait for a small delay determined by testvar iptvChannelChangeDelay
    step 8. Leave the multicast group on the LAN using IGMPv2/3
    step 9. Switch to the next channel or exit if too many failures have
            occurred

    NOTE: There are a few test variables that can control the number of channels
    and speed of this test.

    The testvar iptvChannelChangeDelay specifies a delay in milliseconds to wait
    between each channel change.

    The testvar iptvChannelRange specifies the total number of channel changes to
    attempt.

    The testvar iptvMaxFailures is used to stop the test after a specific number
    of failures. When testing a large number of channels, it can be useful
    to stop the test early if many channels start failing.


    References:

    IETF RFC 2236 "Internet Group Management Protocol, Version 2"

    https://tools.ietf.org/html/rfc2236

    IETF RFC 3376 "Internet Group Management Protocol, Version 3"

    https://tools.ietf.org/html/rfc3376
Test Name Synopsis
Verify IPTV channel change test scenario 2 (overlap) cdrouter_mcast_120 Verify IPTV channel change test scenario 2 (overlap)


    step 1. Send an IGMPv2/3 Query on the WAN to allow device to detect IGMP version
    step 2. Check the testvar iptvChannelRange to determine the number of channels
    step 3. For each channel, join the multicast group on the LAN
    step 4. Verify the IGMPv2 or IGMPv3 report is received in the WAN
    step 5. Leave any previous multicast group for the last channel
    step 6. Start sending multicast data on the WAN for the new group
    step 7. Verify the LAN side starts to receive the multicast data
    step 8. Wait for a small delay determined by testvar iptvChannelChangeDelay
    step 9. Switch to the next channel or exit if too many failures have
            occurred

    NOTE: There are a few test variables that can control the number of channels
    and speed of this test.

    The testvar iptvChannelChangeDelay specifies a delay in milliseconds to wait
    between each channel change.

    The testvar iptvChannelRange specifies the total number of channel changes to
    attempt.

    The testvar iptvMaxFailures is used to stop the test after a specific number
    of failures. When testing a large number of channels, it can be useful
    to stop the test early if many channels start failing.


    References:

    IETF RFC 2236 "Internet Group Management Protocol, Version 2"

    https://tools.ietf.org/html/rfc2236

    IETF RFC 3376 "Internet Group Management Protocol, Version 3"

    https://tools.ietf.org/html/rfc3376
Test Name Synopsis
Verify IGMPv3 membership with source specific ALLOW_NEW_SOURCES/BLOCK_OLD_SOURCES cdrouter_mcast_200 Verify IGMPv3 membership with source specific ALLOW_NEW_SOURCES/BLOCK_OLD_SOURCES


    step 1. Send an IGMPv3 Query on the WAN to allow device to detect IGMP version
    step 2. Send an IGMPv3 Membership Report packet on the LAN interface
            with ALLOW_NEW_SOURCES record containing specific source
    step 3. Verify an IGMPv3 Membership Report packet is received on the WAN interface
    step 4. Verify group record is ALLOW_NEW_SOURCES for the group
            with a matching source list.
    step 5. Verify multicast forwarding from WAN to LAN for new group using
            the specific source address.
    step 6. Continue test using an IGMPv3 BLOCK_OLD_SOURCES to leave the multicast group
    step 7. Verify group record is BLOCK_OLD_SOURCES for the group
            with a matching source list.


    References:

    IETF RFC 2236 "Internet Group Management Protocol, Version 2"

    https://tools.ietf.org/html/rfc2236

    IETF RFC 3376 "Internet Group Management Protocol, Version 3"

    https://tools.ietf.org/html/rfc3376
Test Name Synopsis
Verify IGMPv3 router blocks incoming multicast sources that do not match the source list cdrouter_mcast_210 Verify IGMPv3 router blocks incoming multicast sources that do not match the source list


    step 1. Send an IGMPv3 Query on the WAN to allow device to detect IGMP version
    step 2. Send an IGMPv3 Membership Report packet on the LAN interface
            with ALLOW_NEW_SOURCES record containing specific source
    step 3. Verify an IGMPv3 Membership Report packet is received on the WAN interface
    step 4. Verify group record is ALLOW_NEW_SOURCES for the group
            with a matching source list.
    step 5. Verify multicast forwarding fails from WAN to LAN for new group using
            the different source address.
    step 6. Continue test using an IGMPv3 BLOCK_OLD_SOURCES to leave the multicast group
    step 7. Verify group record is BLOCK_OLD_SOURCES for the group
            with a matching source list.


    References:

    IETF RFC 2236 "Internet Group Management Protocol, Version 2"

    https://tools.ietf.org/html/rfc2236

    IETF RFC 3376 "Internet Group Management Protocol, Version 3"

    https://tools.ietf.org/html/rfc3376
Test Name Synopsis
Verify IGMPv3 router blocks incoming sources on a per group basis cdrouter_mcast_220 Verify IGMPv3 router blocks incoming sources on a per group basis


    step 1. Send an IGMPv3 Query on the WAN to allow device to detect IGMP version
    step 2. Send an IGMPv3 Membership Report packet on the LAN interface
            with ALLOW_NEW_SOURCES record containing specific source
    step 3. Verify an IGMPv3 Membership Report packet is received on the WAN interface
    step 4. Verify group record is ALLOW_NEW_SOURCES for the group
            with a matching source list.
    step 5. Verify multicast forwarding from WAN to LAN for new group using
            the specific source address.
    step 6. Verify multicast forwarding fails from WAN to LAN for a different group
            using the same specific source address.
    step 7. Continue test using an IGMPv3 BLOCK_OLD_SOURCES to leave the multicast group
    step 8. Verify group record is BLOCK_OLD_SOURCES for the group
            with a matching source list.


    References:

    IETF RFC 2236 "Internet Group Management Protocol, Version 2"

    https://tools.ietf.org/html/rfc2236

    IETF RFC 3376 "Internet Group Management Protocol, Version 3"

    https://tools.ietf.org/html/rfc3376
Test Name Synopsis
Verify IGMPv3 source specific group with multiple sources cdrouter_mcast_230 Verify IGMPv3 source specific group with multiple sources


    step 1. Send an IGMPv3 Query on the WAN to allow device to detect IGMP version
    step 2. Create a new server on the WAN for a multicast source
    step 3. Send an IGMPv3 Membership Report packet on the LAN interface
            with ALLOW_NEW_SOURCES record containing multiple specific sources
    step 4. Verify an IGMPv3 Membership Report packet is received on the WAN interface
    step 5. Verify group record is ALLOW_NEW_SOURCES for the group
            with a matching source list.
    step 6. Verify multicast forwarding from WAN to LAN for new group using
            the specific source address from source address 1.
    step 7. Verify multicast forwarding from WAN to LAN for new group using
            the specific source address from source address 2.
    step 8. Continue test using an IGMPv3 BLOCK_OLD_SOURCES to leave the multicast group
    step 9. Verify group record is BLOCK_OLD_SOURCES for the group