aboutsummaryrefslogtreecommitdiffstats
path: root/resources/traffic_scripts
diff options
context:
space:
mode:
authorFangyin Hu <fangyinx.hu@intel.com>2017-04-11 00:31:33 -0700
committerTibor Frank <tifrank@cisco.com>2017-06-09 06:59:11 +0000
commit5ce772f3b2d83c31eda5c2abdcd6cc4547ecc6c8 (patch)
tree746b1f0ad5be956e3627fd8af85a69ff31e47b34 /resources/traffic_scripts
parent1e59ee6e39f0604be721ac8ebdb36be14b738bd8 (diff)
Add the NSH SFC functional test cases.
1. Proxy Inbound test with 152/256/512/1024/1280/1518 Bytes VxLAN-GPE + NSH packet 2. Proxy Outbound test with 128/256/512/1024/1280/1518 Bytes VxLAN packet 3. SFC SFF test with 152/256/512/1024/1280/1518 Bytes VxLAN-GPE + NSH packet Separate the functional test bootstrap file to another code review. Change-Id: I05cf6ab1d01c1b41c1c61044d6d31fd6219b86af Signed-off-by: Fangyin Hu <fangyinx.hu@intel.com>
Diffstat (limited to 'resources/traffic_scripts')
-rwxr-xr-xresources/traffic_scripts/send_tcp_for_classifier_test.py86
-rwxr-xr-xresources/traffic_scripts/send_vxlan_for_proxy_test.py94
-rwxr-xr-xresources/traffic_scripts/send_vxlangpe_nsh_for_proxy_test.py96
-rwxr-xr-xresources/traffic_scripts/send_vxlangpe_nsh_for_sff_test.py96
4 files changed, 372 insertions, 0 deletions
diff --git a/resources/traffic_scripts/send_tcp_for_classifier_test.py b/resources/traffic_scripts/send_tcp_for_classifier_test.py
new file mode 100755
index 0000000000..f08816eaae
--- /dev/null
+++ b/resources/traffic_scripts/send_tcp_for_classifier_test.py
@@ -0,0 +1,86 @@
+#!/usr/bin/env python
+# Copyright (c) 2017 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""
+Traffic script that sends an TCP packet
+from TG to DUT.
+"""
+import sys
+import time
+
+from scapy.layers.inet import IP, UDP, TCP
+from scapy.layers.inet6 import IPv6
+from scapy.all import Ether, Packet, Raw
+from scapy.all import sendp
+
+from resources.libraries.python.SFC.VerifyPacket import *
+from resources.libraries.python.SFC.SFCConstants import SFCConstants as sfccon
+from resources.libraries.python.TrafficScriptArg import TrafficScriptArg
+
+from robot.api import logger
+
+def main():
+ """Send TCP packet from one traffic generator interface to DUT.
+
+ :raises: If the IP address is invalid.
+ """
+ args = TrafficScriptArg(
+ ['src_mac', 'dst_mac', 'src_ip', 'dst_ip',
+ 'timeout', 'framesize', 'testtype'])
+
+ src_mac = args.get_arg('src_mac')
+ dst_mac = args.get_arg('dst_mac')
+ src_ip = args.get_arg('src_ip')
+ dst_ip = args.get_arg('dst_ip')
+ tx_if = args.get_arg('tx_if')
+ rx_if = args.get_arg('rx_if')
+ timeout = int(args.get_arg('timeout'))
+ frame_size = int(args.get_arg('framesize'))
+ test_type = args.get_arg('testtype')
+
+ protocol = TCP
+ source_port = sfccon.DEF_SRC_PORT
+ destination_port = sfccon.DEF_DST_PORT
+
+ ip_version = None
+ if valid_ipv4(src_ip) and valid_ipv4(dst_ip):
+ ip_version = IP
+ elif valid_ipv6(src_ip) and valid_ipv6(dst_ip):
+ ip_version = IPv6
+ else:
+ raise ValueError("Invalid IP version!")
+
+ pkt_header = (Ether(src=src_mac, dst=dst_mac) /
+ ip_version(src=src_ip, dst=dst_ip) /
+ protocol(sport=int(source_port), dport=int(destination_port)))
+
+ fsize_no_fcs = frame_size - 4
+ pad_len = max(0, fsize_no_fcs - len(pkt_header))
+ pad_data = "A" * pad_len
+
+ pkt_raw = pkt_header / Raw(load=pad_data)
+
+ sendp(pkt_raw, iface=tx_if, count=3)
+
+ time.sleep(timeout)
+
+ # let us begin to check the NSH SFC loopback packet
+ VerifyPacket.check_the_nsh_sfc_packet(frame_size, test_type)
+
+ # we check all the fields about the loopback packet, this test will pass
+ sys.exit(0)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/resources/traffic_scripts/send_vxlan_for_proxy_test.py b/resources/traffic_scripts/send_vxlan_for_proxy_test.py
new file mode 100755
index 0000000000..4087c7f6d8
--- /dev/null
+++ b/resources/traffic_scripts/send_vxlan_for_proxy_test.py
@@ -0,0 +1,94 @@
+#!/usr/bin/env python
+# Copyright (c) 2017 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Traffic script that sends an VxLAN packet
+from TG to DUT.
+"""
+import sys
+import time
+
+from scapy.layers.inet import IP, UDP, TCP
+from scapy.layers.inet6 import IPv6
+from scapy.all import Ether, Packet, Raw
+from scapy.all import sendp
+
+from resources.libraries.python.SFC.VerifyPacket import *
+from resources.libraries.python.SFC.SFCConstants import SFCConstants as sfccon
+from resources.libraries.python.TrafficScriptArg import TrafficScriptArg
+
+from robot.api import logger
+
+def main():
+ """Send VxLAN packet from TG to DUT.
+
+ :raises: If the IP address is invalid.
+ """
+ args = TrafficScriptArg(
+ ['src_mac', 'dst_mac', 'src_ip', 'dst_ip',
+ 'timeout', 'framesize', 'testtype'])
+
+ src_mac = args.get_arg('src_mac')
+ dst_mac = args.get_arg('dst_mac')
+ src_ip = args.get_arg('src_ip')
+ dst_ip = args.get_arg('dst_ip')
+ tx_if = args.get_arg('tx_if')
+ rx_if = args.get_arg('rx_if')
+ timeout = int(args.get_arg('timeout'))
+ frame_size = int(args.get_arg('framesize'))
+ test_type = args.get_arg('testtype')
+
+ protocol = TCP
+ source_port = sfccon.DEF_SRC_PORT
+ destination_port = sfccon.DEF_DST_PORT
+
+ ip_version = None
+ if valid_ipv4(src_ip) and valid_ipv4(dst_ip):
+ ip_version = IP
+ elif valid_ipv6(src_ip) and valid_ipv6(dst_ip):
+ ip_version = IPv6
+ else:
+ raise ValueError("Invalid IP version!")
+
+ innerpkt = (Ether(src=src_mac, dst=dst_mac) /
+ ip_version(src=src_ip, dst=dst_ip) /
+ protocol(sport=int(source_port), dport=int(destination_port)))
+
+ vxlan = '\x08\x00\x00\x00\x00\x00\x01\x00'
+
+ raw_data = vxlan + str(innerpkt)
+
+ pkt_header = (Ether(src=src_mac, dst=dst_mac) /
+ ip_version(src=src_ip, dst=dst_ip) /
+ UDP(sport=int(source_port), dport=4789) /
+ Raw(load=raw_data))
+
+ fsize_no_fcs = frame_size - 4
+ pad_len = max(0, fsize_no_fcs - len(pkt_header))
+ pad_data = "A" * pad_len
+
+ pkt_raw = pkt_header / Raw(load=pad_data)
+
+ sendp(pkt_raw, iface=tx_if, count=3)
+
+ time.sleep(timeout)
+
+ # let us begin to check the proxy outbound packet
+ VerifyPacket.check_the_nsh_sfc_packet(frame_size, test_type)
+
+ # we check all the fields about the proxy outbound, this test will pass
+ sys.exit(0)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/resources/traffic_scripts/send_vxlangpe_nsh_for_proxy_test.py b/resources/traffic_scripts/send_vxlangpe_nsh_for_proxy_test.py
new file mode 100755
index 0000000000..ea1f9b15a7
--- /dev/null
+++ b/resources/traffic_scripts/send_vxlangpe_nsh_for_proxy_test.py
@@ -0,0 +1,96 @@
+#!/usr/bin/env python
+# Copyright (c) 2017 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Traffic script that sends an VxLAN-GPE+NSH packet
+from TG to DUT.
+"""
+import sys
+import time
+
+from scapy.layers.inet import IP, UDP, TCP
+from scapy.layers.inet6 import IPv6
+from scapy.all import Ether, Packet, Raw
+from scapy.all import sendp
+
+from resources.libraries.python.SFC.VerifyPacket import *
+from resources.libraries.python.SFC.SFCConstants import SFCConstants as sfccon
+from resources.libraries.python.TrafficScriptArg import TrafficScriptArg
+
+from robot.api import logger
+
+def main():
+ """Send VxLAN-GPE+NSH packet from TG to DUT.
+
+ :raises: If the IP address is invalid.
+ """
+ args = TrafficScriptArg(
+ ['src_mac', 'dst_mac', 'src_ip', 'dst_ip',
+ 'timeout', 'framesize', 'testtype'])
+
+ src_mac = args.get_arg('src_mac')
+ dst_mac = args.get_arg('dst_mac')
+ src_ip = args.get_arg('src_ip')
+ dst_ip = args.get_arg('dst_ip')
+ tx_if = args.get_arg('tx_if')
+ rx_if = args.get_arg('rx_if')
+ timeout = int(args.get_arg('timeout'))
+ frame_size = int(args.get_arg('framesize'))
+ test_type = args.get_arg('testtype')
+
+ protocol = TCP
+ source_port = sfccon.DEF_SRC_PORT
+ destination_port = sfccon.DEF_DST_PORT
+
+ ip_version = None
+ if valid_ipv4(src_ip) and valid_ipv4(dst_ip):
+ ip_version = IP
+ elif valid_ipv6(src_ip) and valid_ipv6(dst_ip):
+ ip_version = IPv6
+ else:
+ raise ValueError("Invalid IP version!")
+
+ innerpkt = (Ether(src=src_mac, dst=dst_mac) /
+ ip_version(src=src_ip, dst=dst_ip) /
+ protocol(sport=int(source_port), dport=int(destination_port)))
+
+ vxlangpe_nsh = '\x0c\x00\x00\x04\x00\x00\x09\x00\x00\x06' \
+ '\x01\x03\x00\x00\xb9\xff\xC0\xA8\x32\x4B' \
+ '\x00\x00\x00\x09\xC0\xA8\x32\x48\x03\x00\x12\xB5'
+
+ raw_data = vxlangpe_nsh + str(innerpkt)
+
+ pkt_header = (Ether(src=src_mac, dst=dst_mac) /
+ ip_version(src=src_ip, dst=dst_ip) /
+ UDP(sport=int(source_port), dport=4790) /
+ Raw(load=raw_data))
+
+ fsize_no_fcs = frame_size - 4
+ pad_len = max(0, fsize_no_fcs - len(pkt_header))
+ pad_data = "A" * pad_len
+
+ pkt_raw = pkt_header / Raw(load=pad_data)
+
+ sendp(pkt_raw, iface=tx_if, count=3)
+
+ time.sleep(timeout)
+
+ # let us begin to check the proxy inbound packet
+ VerifyPacket.check_the_nsh_sfc_packet(frame_size, test_type)
+
+ # we check all the fields about the proxy inbound, this test will pass
+ sys.exit(0)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/resources/traffic_scripts/send_vxlangpe_nsh_for_sff_test.py b/resources/traffic_scripts/send_vxlangpe_nsh_for_sff_test.py
new file mode 100755
index 0000000000..b82e2a8938
--- /dev/null
+++ b/resources/traffic_scripts/send_vxlangpe_nsh_for_sff_test.py
@@ -0,0 +1,96 @@
+#!/usr/bin/env python
+# Copyright (c) 2017 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Traffic script that sends an VxLAN-GPE+NSH packet
+from TG to DUT.
+"""
+import sys
+import time
+
+from scapy.layers.inet import IP, UDP, TCP
+from scapy.layers.inet6 import IPv6
+from scapy.all import Ether, Packet, Raw
+from scapy.all import sendp
+
+from resources.libraries.python.SFC.VerifyPacket import *
+from resources.libraries.python.SFC.SFCConstants import SFCConstants as sfccon
+from resources.libraries.python.TrafficScriptArg import TrafficScriptArg
+
+from robot.api import logger
+
+def main():
+ """Send VxLAN-GPE+NSH packet from TG to DUT.
+
+ :raises: If the IP address is invalid.
+ """
+ args = TrafficScriptArg(
+ ['src_mac', 'dst_mac', 'src_ip', 'dst_ip',
+ 'timeout', 'framesize', 'testtype'])
+
+ src_mac = args.get_arg('src_mac')
+ dst_mac = args.get_arg('dst_mac')
+ src_ip = args.get_arg('src_ip')
+ dst_ip = args.get_arg('dst_ip')
+ tx_if = args.get_arg('tx_if')
+ rx_if = args.get_arg('rx_if')
+ timeout = int(args.get_arg('timeout'))
+ frame_size = int(args.get_arg('framesize'))
+ test_type = args.get_arg('testtype')
+
+ protocol = TCP
+ source_port = sfccon.DEF_SRC_PORT
+ destination_port = sfccon.DEF_DST_PORT
+
+ ip_version = None
+ if valid_ipv4(src_ip) and valid_ipv4(dst_ip):
+ ip_version = IP
+ elif valid_ipv6(src_ip) and valid_ipv6(dst_ip):
+ ip_version = IPv6
+ else:
+ raise ValueError("Invalid IP version!")
+
+ innerpkt = (Ether(src=src_mac, dst=dst_mac) /
+ ip_version(src=src_ip, dst=dst_ip) /
+ protocol(sport=int(source_port), dport=int(destination_port)))
+
+ vxlangpe_nsh = '\x0c\x00\x00\x04\x00\x00\x0a\x00\x00\x06' \
+ '\x01\x03\x00\x00\xb9\xff\xC0\xA8\x32\x4B' \
+ '\x00\x00\x00\x09\xC0\xA8\x32\x48\x03\x00\x12\xB5'
+
+ raw_data = vxlangpe_nsh + str(innerpkt)
+
+ pkt_header = (Ether(src=src_mac, dst=dst_mac) /
+ ip_version(src=src_ip, dst=dst_ip) /
+ UDP(sport=int(source_port), dport=4790) /
+ Raw(load=raw_data))
+
+ fsize_no_fcs = frame_size - 4
+ pad_len = max(0, fsize_no_fcs - len(pkt_header))
+ pad_data = "A" * pad_len
+
+ pkt_raw = pkt_header / Raw(load=pad_data)
+
+ sendp(pkt_raw, iface=tx_if, count=3)
+
+ time.sleep(timeout)
+
+ # let us begin to check the sfc sff packet
+ VerifyPacket.check_the_nsh_sfc_packet(frame_size, test_type)
+
+ # we check all the fields about the sfc sff, this test will pass
+ sys.exit(0)
+
+
+if __name__ == "__main__":
+ main()