3.4. features

3.4.1. dhcp_client suite

3.4.1.1. Verify DHCP DISCOVER header

Check if DHCP DISCOVER message contains all required fields.

Arguments: - tg_node - TG node. Type: dictionary - interface - TG interface where listen for DHCP DISCOVER message. Type: string - src_mac - DHCP client MAC address. Type: string - hostname - DHCP client hostname (Optional, Default=””, if not specified, the hostname is not checked). Type: string

Return: - No value returned.

Example:

| Verify DHCP DISCOVER header | ${nodes[‘TG’]} | eth2 | 08:00:27:66:b8:57 | | Verify DHCP DISCOVER header | ${nodes[‘TG’]} | eth2 | 08:00:27:66:b8:57 | client-hostname |


${interface_name}=  Get interface name  ${tg_node}  ${interface}
${args}=  Catenate  --rx_if  ${interface_name}  --rx_src_mac  ${src_mac}
${args}=  Run Keyword If  "${hostname}" == ""  Set Variable  ${args}  ELSE  Catenate  ${args}  --hostname  ${hostname}
Run Traffic Script On Node  dhcp/check_dhcp_discover.py  ${tg_node}  ${args}

3.4.1.2. Verify DHCP REQUEST after OFFER

Check if DHCP REQUEST message contains all required fields. DHCP REQUEST should be send by a client after DHCP OFFER message sent by a server.

Arguments: - tg_node - TG node. Type: dictionary - tg_interface - TG interface where listen for DHCP DISCOVER, send DHCP OFFER and listen for DHCP REQUEST messages. Type: string - server_mac - DHCP server MAC address. Type: string - server_ip - DHCP server IP address. Type: string - client_mac - DHCP client MAC address. Type: string - client_ip - IP address that should be offered to client. Type: string - client_mask - IP netmask that should be offered to client. Type: string - hostname - DHCP client hostname (Optional, Default=””, if not specified, the hostname is not checked). Type: string - offer_xid - Transaction ID (Optional, Default=””, if not specified xid field in DHCP OFFER is same as in DHCP DISCOVER message). Type: integer

Return: - No value returned.

Raises: - DHCP REQUEST Rx timeout - if no DHCP REQUEST is received.

Example:

| Verify DHCP REQUEST after OFFER | ${nodes[‘TG’]} | eth2 | 08:00:27:66:b8:57 | 192.168.23.1 | 08:00:27:46:2b:4c | 192.168.23.10 | 255.255.255.0 |

| Run Keyword And Expect Error | DHCP REQUEST Rx timeout | Verify DHCP REQUEST after OFFER | ${nodes[‘TG’]} | eth2 | 08:00:27:66:b8:57 | 192.168.23.1 | 08:00:27:46:2b:4c | 192.168.23.10 | 255.255.255.0 | offer_xid=11113333 |


${tg_interface_name}=  Get interface name  ${tg_node}  ${tg_interface}
${args}=  Catenate  --rx_if  ${tg_interface_name}  --server_mac  ${server_mac}  --server_ip  ${server_ip}  --client_mac  ${client_mac}  --client_ip  ${client_ip}  --client_mask  ${client_mask}
${args}=  Run Keyword If  "${hostname}" == ""  Set Variable  ${args}  ELSE  Catenate  ${args}  --hostname  ${hostname}
${args}=  Run Keyword If  "${offer_xid}" == ""  Set Variable  ${args}  ELSE  Catenate  ${args}  --offer_xid  ${offer_xid}
Run Traffic Script On Node  dhcp/check_dhcp_request.py  ${tg_node}  ${args}

3.4.1.3. Configure IP on client via DHCP

Run script that sends IP configuration to the DHCP client.

Arguments: - tg_node - TG node. Type: dictionary - tg_interface - TG interface where listen for DHCP DISCOVER, send DHCP OFFER and DHCP ACK after DHCP REQUEST messages. Type: string - server_mac - DHCP server MAC address. Type: string - server_ip - DHCP server IP address. Type: string - client_ip - IP address that is offered to client. Type: string - client_mask - IP netmask that is offered to client. Type: string - lease_time - IP lease time in seconds. Type: integer

Return: - No value returned.

Example:

| Configure IP on client via DHCP | ${nodes[‘TG’]} | eth2 | 08:00:27:66:b8:57 | 192.168.23.1 | 192.168.23.10 | 255.255.255.0 | 86400 |


${tg_interface_name}=  Get interface name  ${tg_node}  ${tg_interface}
${args}=  Catenate  --rx_if  ${tg_interface_name}  --server_mac  ${server_mac}  --server_ip  ${server_ip}  --client_ip  ${client_ip}  --client_mask  ${client_mask}  --lease_time  ${lease_time}
Run Traffic Script On Node  dhcp/check_dhcp_request_ack.py  ${tg_node}  ${args}

3.4.2. dhcp_proxy suite

3.4.2.1. Send DHCP messages and check answer

Send and receive DHCP messages between client and server through DHCP proxy.

Arguments: - tg_node - TG node. Type: dictionary - tg_interface1 - TG interface. Type: string - tg_interface2 - TG interface. Type: string - server_ip - DHCP server IP address. Type: string - server_mac - DHCP server MAC address. Type: string - client_ip - Client IP address. Type: string - client_mac - Client MAC address. Type: string - proxy_ip - DHCP proxy IP address. Type: string

Return: - No value returned.

Example:

| Send DHCP messages and check answer | ${nodes[‘TG’]} | eth3 | eth4 | 192.168.0.100 | 08:00:27:cc:4f:54 | 172.16.0.2 | 08:00:27:64:18:d2 | 172.16.0.1 |


${tg_interface_name1}=  Get interface name  ${tg_node}  ${tg_interface1}
${tg_interface_name2}=  Get interface name  ${tg_node}  ${tg_interface2}
${args}=  Catenate  --tx_if  ${tg_interface_name1}  --rx_if  ${tg_interface_name2}  --server_ip  ${server_ip}  --server_mac  ${server_mac}  --client_ip  ${client_ip}  --client_mac  ${client_mac}  --proxy_ip  ${proxy_ip}
Run Traffic Script On Node  dhcp/send_and_check_proxy_messages.py  ${tg_node}  ${args}

3.4.2.2. Send DHCP DISCOVER and check answer

Send and receive DHCP DISCOVER.

Arguments: - tg_node - TG node. Type: dictionary - tg_interface1 - TG interface. Type: string - tg_interface2 - TG interface. Type: string - tx_src_ip - Source address of DHCP DISCOVER packet. Type: string - tx_dst_ip - Destination address of DHCP DISCOVER packet. Type: string

Return: - No value returned.

Example:

| Send DHCP DISCOVER and check answer | ${nodes[‘TG’]} | eth3 | eth4 | 0.0.0.0 | 255.255.255.255 |


${tg_interface_name1}=  Get interface name  ${tg_node}  ${tg_interface1}
${tg_interface_name2}=  Get interface name  ${tg_node}  ${tg_interface2}
${args}=  Catenate  --tx_if  ${tg_interface_name1}  --rx_if  ${tg_interface_name2}  --tx_src_ip  ${tx_src_ip}  --tx_dst_ip  ${tx_dst_ip}
Run Traffic Script On Node  dhcp/send_and_check_proxy_discover.py  ${tg_node}  ${args}

3.4.2.3. DHCP DISCOVER should fail

Send and receive DHCP DISCOVER should fail.

Arguments: - tg_node - TG node. Type: dictionary - tg_interface1 - TG interface. Type: string - tg_interface2 - TG interface. Type: string - tx_src_ip - Source address of DHCP DISCOVER packet. Type: string - tx_dst_ip - Destination address of DHCP DISCOVER packet. Type: string

Return: - No value returned.

Example:

| DHCP DISCOVER should fail | ${nodes[‘TG’]} | eth3 | eth4 | 0.0.0.0 | 255.255.255.1 |


${tg_interface_name1}=  Get interface name  ${tg_node}  ${tg_interface1}
${tg_interface_name2}=  Get interface name  ${tg_node}  ${tg_interface2}
${args}=  Catenate  --tx_if  ${tg_interface_name1}  --rx_if  ${tg_interface_name2}  --tx_src_ip  ${tx_src_ip}  --tx_dst_ip  ${tx_dst_ip}
Run Keyword And Expect Error  DHCP DISCOVER Rx timeout  Run Traffic Script On Node  dhcp/send_and_check_proxy_discover.py  ${tg_node}  ${args}

3.4.2.4. Send DHCPv6 Messages

Send and receive DHCPv6 messages between client and server through DHCPv6 proxy.

Arguments: - tg_node - TG node. Type: dictionary - tg_interface1 - TG interface. Type: string - tg_interface2 - TG interface. Type: string - proxy_ip - DHCPv6 proxy IP address. Type: string - proxy_mac - Proxy MAC address. Type: string - server_ip - DHCPv6 server IP address. Type: string - server_mac - Server MAC address. Type: string - client_mac - Client MAC address. Type: string - proxy_to_server_mac - MAC address of proxy interface connected to server. Type: string

Return: - No value returned.

Example:

| Send DHCPv6 Messages | ${nodes[‘TG’]} | eth3 | eth4 | 3ffe:62::1 | 08:00:27:54:59:f9 | 3ffe:63::2 | 08:00:27:cc:4f:54 | | 08:00:27:64:18:d2 | 08:00:27:c9:6a:d5 |


${tg_interface_name1}=  Get interface name  ${tg_node}  ${tg_interface1}
${tg_interface_name2}=  Get interface name  ${tg_node}  ${tg_interface2}
${args}=  Catenate  --tx_if  ${tg_interface_name1}  --rx_if  ${tg_interface_name2}  --proxy_ip  ${proxy_ip}  --proxy_mac  ${proxy_mac}  --server_ip  ${server_ip}  --server_mac  ${server_mac}  --client_mac  ${client_mac}  --proxy_to_server_mac  ${proxy_to_server_mac}
Run Traffic Script On Node  dhcp/send_dhcp_v6_messages.py  ${tg_node}  ${args}

3.4.3. policer suite

3.4.3.1. Configure topology for IPv4 policer test

Setup topology for IPv4 policer testing.

_NOTE:_ This KW sets following test case variables: - dut_to_tg_if1_ip - DUT first interface IP address. Type: string - dut_to_tg_if2_ip - DUT second interface IP address. Type: string - tg_to_dut_if1_ip - TG first interface IP address. Type: string - tg_to_dut_if2_ip - TG second interface IP address. Type: string


Configure path in 2-node circular topology  ${nodes['TG']}  ${nodes['DUT1']}  ${nodes['TG']}
Set interfaces in 2-node circular topology up
Set Interface Address  ${dut_node}  ${dut_to_tg_if1}  ${dut_to_tg_if1_ip4}  ${ip4_plen}
Set Interface Address  ${dut_node}  ${dut_to_tg_if2}  ${dut_to_tg_if2_ip4}  ${ip4_plen}
dut1_v4.Set ARP  ${dut_to_tg_if2}  ${tg_to_dut_if2_ip4}  ${tg_to_dut_if2_mac}
Set Test Variable  ${dut_to_tg_if1_ip}  ${dut_to_tg_if1_ip4}
Set Test Variable  ${dut_to_tg_if2_ip}  ${dut_to_tg_if2_ip4}
Set Test Variable  ${tg_to_dut_if1_ip}  ${tg_to_dut_if1_ip4}
Set Test Variable  ${tg_to_dut_if2_ip}  ${tg_to_dut_if2_ip4}

3.4.3.2. Configure topology for IPv6 policer test

Setup topology for IPv6 policer testing.

_NOTE:_ This KW sets following test case variables: - dut_to_tg_if1_ip - DUT first interface IP address. Type: string - dut_to_tg_if2_ip - DUT second interface IP address. Type: string - tg_to_dut_if1_ip - TG first interface IP address. Type: string - tg_to_dut_if2_ip - TG second interface IP address. Type: string


Configure path in 2-node circular topology  ${nodes['TG']}  ${nodes['DUT1']}  ${nodes['TG']}
Set interfaces in 2-node circular topology up
Vpp Set If IPv6 Addr  ${dut_node}  ${dut_to_tg_if1}  ${dut_to_tg_if1_ip6}  ${ip6_plen}
Vpp Set If IPv6 Addr  ${dut_node}  ${dut_to_tg_if2}  ${dut_to_tg_if2_ip6}  ${ip6_plen}
Add IP Neighbor  ${dut_node}  ${dut_to_tg_if2}  ${tg_to_dut_if2_ip6}  ${tg_to_dut_if2_mac}
Vpp All RA Suppress Link Layer  ${nodes}
Set Test Variable  ${dut_to_tg_if1_ip}  ${dut_to_tg_if1_ip6}
Set Test Variable  ${dut_to_tg_if2_ip}  ${dut_to_tg_if2_ip6}
Set Test Variable  ${tg_to_dut_if1_ip}  ${tg_to_dut_if1_ip6}
Set Test Variable  ${tg_to_dut_if2_ip}  ${tg_to_dut_if2_ip6}

3.4.3.3. Send packet and verify marking

Send packet and verify DSCP of the received packet.

Arguments: - node - TG node. Type: dictionary - tx_if - TG transmit interface. Type: string - rx_if - TG receive interface. Type: string - src_mac - Packet source MAC. Type: string - dst_mac - Packet destination MAC. Type: string - src_ip - Packet source IP address. Type: string - dst_ip - Packet destination IP address. Type: string - dscp - DSCP value to verify. Type: enum

Example: | ${dscp}= | DSCP AF22 | | Send packet and verify marking | ${nodes[‘TG’]} | eth1 | eth2 | 08:00:27:87:4d:f7 | 52:54:00:d4:d8:22 | 192.168.122.2 | 192.168.122.1 | ${dscp} |


${tx_if_name}=  Get Interface Name  ${node}  ${tx_if}
${rx_if_name}=  Get Interface Name  ${node}  ${rx_if}
${args}=  Traffic Script Gen Arg  ${rx_if_name}  ${tx_if_name}  ${src_mac}  ${dst_mac}  ${src_ip}  ${dst_ip}
${dscp_num}=  Get DSCP Num Value  ${dscp}
${args}=  Set Variable  ${args} --dscp ${dscp_num}
Run Traffic Script On Node  policer.py  ${node}  ${args}