Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion ansible/group_vars/sonic/vars
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ ansible_ssh_user: admin

sonic_version: "v2"

broadcom_hwskus: [ "Force10-S6000", "Accton-AS7712-32X", "Celestica-DX010-C32", "Seastone-DX010" ]
broadcom_hwskus: [ "Force10-S6000", "Accton-AS7712-32X", "Celestica-DX010-C32", "Seastone-DX010", "Celestica-E1031-T48S4"]

mellanox_hwskus: [ 'ACS-MSN2700', 'Mellanox-SN2700', 'ACS-MSN2740', 'ACS-MSN2100', 'ACS-MSN2410', 'ACS-MSN2010' ]

Expand Down
3 changes: 3 additions & 0 deletions ansible/library/minigraph_facts.py
Original file line number Diff line number Diff line change
Expand Up @@ -528,6 +528,9 @@ def parse_xml(filename, hostname):
elif hwsku == "Seastone-DX010":
for i in range(1, 33):
port_alias_to_name_map["Eth%d" % i] = "Ethernet%d" % ((i - 1) * 4)
elif hwsku == "Celestica-E1031-T48S4":
for i in range(1, 53):
port_alias_to_name_map["etp%d" % i] = "Ethernet%d" % ((i - 1))
else:
for i in range(0, 128, 4):
port_alias_to_name_map["Ethernet%d" % i] = "Ethernet%d" % i
Expand Down
1 change: 0 additions & 1 deletion ansible/roles/eos/templates/t0-52-leaf.j2

This file was deleted.

186 changes: 186 additions & 0 deletions ansible/roles/eos/templates/t0-52-leaf.j2
Original file line number Diff line number Diff line change
@@ -0,0 +1,186 @@
{% set host = configuration[hostname] %}
{% set mgmt_ip = ansible_host %}
no schedule tech-support
!
hostname {{ hostname }}
!
vrf definition MGMT
rd 1:1
!
spanning-tree mode mstp
!
aaa root secret 0 123456
!
username admin privilege 15 role network-admin secret 0 123456
!
clock timezone UTC
!
lldp run
lldp management-address Management1
lldp management-address vrf MGMT
!
snmp-server community {{ snmp_rocommunity }} ro
snmp-server vrf MGMT
!
ip routing
ip routing vrf MGMT
ipv6 unicast-routing
!
{% if vm_mgmt_gw is defined %}
ip route vrf MGMT 0.0.0.0/0 {{ vm_mgmt_gw }}
{% else %}
ip route vrf MGMT 0.0.0.0/0 {{ mgmt_gw }}
{% endif %}
!
route-map DEFAULT_ROUTES permit
!
{# #}
{# NOTE: Using large enough values (e.g., podset_number = 200, #}
{# us to overflow the 192.168.0.0/16 private address space here. #}
{# This should be fine for internal use, but may pose an issue if used otherwise #}
{# #}
{% for podset in range(0, (props.podset_number // 10) | int) %}
{% for tor in range(0, props.tor_number) %}
{% for subnet in range(0, props.tor_subnet_number) %}
{# Skip tor 0 podset 0 #}
{% if podset != 0 or tor != 0 %}
{% set suffix = ( (podset * props.tor_number * props.max_tor_subnet_number * props.tor_subnet_size) +
(tor * props.max_tor_subnet_number * props.tor_subnet_size) +
(subnet * props.tor_subnet_size) ) %}
{% set octet2 = (168 + (suffix // (256 ** 2))) %}
{% set octet1 = (192 + (octet2 // 256)) %}
{% set octet2 = (octet2 % 256) %}
{% set octet3 = ((suffix // 256) % 256) %}
{% set octet4 = (suffix % 256) %}
{% set prefixlen_v4 = (32 - ((props.tor_subnet_size | log(2))) | int) %}
ip route {{ octet1 }}.{{ octet2 }}.{{ octet3 }}.{{ octet4 }}/{{ prefixlen_v4 }} {{ props.nhipv4 }}
ipv6 route {{ '20%02x' % octet1 }}:{{ '%02X%02X' % (octet2, octet3) }}:0:{{ '%02X' % octet4 }}::/64 {{ props.nhipv6 }}
{% endif %}
{% endfor %}
{% endfor %}
{% endfor %}
!
{% for podset in range(0, (props.podset_number // 10) | int) %}
{% for tor in range(0, props.tor_number) %}
{# Skip tor 0 podset 0 #}
{% if podset != 0 or tor != 0 %}
{% set suffix = ( (podset * props.tor_number * props.max_tor_subnet_number * props.tor_subnet_size) +
(tor * props.max_tor_subnet_number * props.tor_subnet_size) ) %}
{% set octet2 = (168 + (suffix // (256 ** 2))) %}
{% set octet1 = (192 + (octet2 // 256)) %}
{% set octet2 = (octet2 % 256) %}
{% set octet3 = ((suffix // 256) % 256) %}
{% set octet4 = (suffix % 256) %}
{% set prefixlen_v4 = (32 - (((props.max_tor_subnet_number * props.tor_subnet_size) | log(2)) | int) ) %}
{% set prefixlen_v6 = (64 - (((props.max_tor_subnet_number * props.tor_subnet_size) | log(2)) | int) ) %}
ip prefix-list test_ipv4_{{ podset}}_{{ tor }} seq 10 permit {{ octet1 }}.{{ octet2 }}.{{ octet3 }}.{{ octet4 }}/{{ prefixlen_v4 }} ge {{ prefixlen_v4 }}
ipv6 prefix-list test_ipv6_{{ podset}}_{{ tor }}
seq 10 permit {{ '20%02x' % octet1 }}:{{ '%02X%02X' % (octet2, octet3) }}:0:{{ '%02X' % octet4 }}::/{{ prefixlen_v6 }} ge {{ prefixlen_v6 }}
exit
{% endif %}
{% endfor %}
{% endfor %}
!
interface Management 1
description TO LAB MGMT SWITCH
vrf forwarding MGMT
ip address {{ mgmt_ip }}/{{ mgmt_prefixlen }}
no shutdown
!
{% for name, iface in host['interfaces'].items() %}
interface {{ name }}
{% if name.startswith('Loopback') %}
description LOOPBACK
{% else %}
no switchport
{% endif %}
{% if name.startswith('Port-Channel') %}
port-channel min-links 1
{% endif %}
{% if iface['lacp'] is defined %}
channel-group {{ iface['lacp'] }} mode active
lacp rate normal
{% endif %}
{% if iface['ipv4'] is defined %}
ip address {{ iface['ipv4'] }}
{% endif %}
{% if iface['ipv6'] is defined %}
ipv6 enable
ipv6 address {{ iface['ipv6'] }}
ipv6 nd ra suppress
{% endif %}
no shutdown
!
{% endfor %}
!
interface {{ bp_ifname }}
description backplane
no switchport
{% if host['bp_interface']['ipv4'] is defined %}
ip address {{ host['bp_interface']['ipv4'] }}
{% endif %}
{% if host['bp_interface']['ipv6'] is defined %}
ipv6 enable
ipv6 address {{ host['bp_interface']['ipv6'] }}
ipv6 nd ra suppress
{% endif %}
no shutdown
!
{% for podset in range(0, props.podset_number) %}
{% if range(0, 1000)|random() >= props.failure_rate %}
{% for tor in range(0, props.tor_number) %}
{% set leafasn = props.leaf_asn_start + podset %}
{% set torasn = props.tor_asn_start + tor %}
route-map PREPENDAS permit {{ 2 * (podset * props.tor_number + tor + 1) }}
match ip address prefix-list test_ipv4_{{ podset }}_{{ tor }}
{% if podset == 0 %}
set as-path prepend {{ torasn }}
{% else %}
set as-path prepend {{ props.spine_asn }} {{ leafasn }} {{ torasn }}
{% endif %}
!
route-map PREPENDAS permit {{ 2 * (podset * props.tor_number + tor + 1) + 1 }}
match ipv6 address prefix-list test_ipv6_{{ podset }}_{{ tor }}
{% if podset == 0 %}
set as-path prepend {{ torasn }}
{% else %}
set as-path prepend {{ props.spine_asn }} {{ leafasn }} {{ torasn }}
{% endif %}
!
{% endfor %}
{% endif %}
{% endfor %}
!
router bgp {{ host['bgp']['asn'] }}
router-id {{ host['interfaces']['Loopback0']['ipv4'] | ipaddr('address') }}
!
{% for asn, remote_ips in host['bgp']['peers'].items() %}
{% for remote_ip in remote_ips %}
neighbor {{ remote_ip }} remote-as {{ asn }}
neighbor {{ remote_ip }} description {{ asn }}
neighbor {{ remote_ip }} default-originate route-map DEFAULT_ROUTES
{% if remote_ip | ipv6 %}
address-family ipv6
neighbor {{ remote_ip }} activate
exit
{% endif %}
{% endfor %}
{% endfor %}
!
{% for name, iface in host['interfaces'].items() if name.startswith('Loopback') %}
{% if iface['ipv4'] is defined %}
network {{ iface['ipv4'] }}
{% endif %}
{% if iface['ipv6'] is defined %}
network {{ iface['ipv6'] }}
{% endif %}
{% endfor %}
redistribute static route-map PREPENDAS
!
management api http-commands
no protocol https
protocol http
no shutdown
!
end
s
2 changes: 2 additions & 0 deletions ansible/roles/test/files/ptftests/IP_decap_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,8 @@ def setUp(self):
self.src_ports = [0, 1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 36, 37, 38, 39, 40, 41, 42, 48, 52, 53, 54, 55, 56, 57, 58]
if self.test_params['testbed_type'] == 't0-116':
self.src_ports = range(0, 24) + range(32, 120)
if self.test_params['testbed_type'] == 't0-52':
self.src_ports = range(0, 52)

# which type of tunneled trafic to test (IPv4 in IPv4, IPv6 in IPv4, IPv6 in IPv4, IPv6 in IPv6)
self.test_outer_ipv4 = self.test_params.get('outer_ipv4', True)
Expand Down
2 changes: 2 additions & 0 deletions ansible/roles/test/files/ptftests/fib_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,8 @@ def setUp(self):
self.src_ports = [0, 1, 4, 5, 16, 17, 20, 21, 34, 36, 37, 38, 39, 42, 44, 45, 46, 47, 50, 52, 53, 54, 55, 58, 60, 61, 62, 63]
if self.test_params['testbed_type'] == 't0':
self.src_ports = range(1, 25) + range(28, 32)
if self.test_params['testbed_type'] == 't0-52':
self.src_ports = range(0, 52)
if self.test_params['testbed_type'] == 't0-56':
self.src_ports = [0, 1, 4, 5, 8, 9] + range(12, 18) + [20, 21, 24, 25, 28, 29, 32, 33, 36, 37] + range(40, 46) + [48, 49, 52, 53]
if self.test_params['testbed_type'] == 't0-64':
Expand Down
4 changes: 2 additions & 2 deletions ansible/roles/test/tasks/crm.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,15 @@
when: (testbed_type is not defined)

- fail: msg="Invalid testbed_type value '{{testbed_type}}'"
when: testbed_type not in ['t1', 't1-lag', 't0', 't0-56', 't0-64', 't0-116']
when: testbed_type not in ['t1', 't1-lag', 't0', 't0-52', 't0-56', 't0-64', 't0-116']

- set_fact: crm_intf="{{minigraph_interfaces[0].attachto}}"
crm_intf1="{{minigraph_interfaces[2].attachto}}"
when: testbed_type == "t1"

- set_fact: crm_intf="{{minigraph_portchannel_interfaces[0].attachto}}"
crm_intf1="{{minigraph_portchannel_interfaces[2].attachto}}"
when: testbed_type in ['t0', 't1-lag', 't0-56', 't0-64', 't0-116']
when: testbed_type in ['t0', 't1-lag', 't0-52', 't0-56', 't0-64', 't0-116']

- set_fact:
ansible_date_time: "{{ansible_date_time}}"
Expand Down
2 changes: 1 addition & 1 deletion ansible/roles/test/tasks/decap.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@

- name: Expand properties into props
set_fact: props="{{configuration_properties['common']}}"
when: testbed_type in ['t0', 't0-64', 't0-116']
when: testbed_type in ['t0', 't0-52', 't0-64', 't0-116']

- name: Expand properties into props
set_fact: props_tor="{{configuration_properties['tor']}}"
Expand Down
2 changes: 1 addition & 1 deletion ansible/roles/test/tasks/fdb.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
when: testbed_type is not defined

- fail: msg="testbed_type {{test_type}} is invalid"
when: testbed_type not in ['t0', 't0-64', 't0-116']
when: testbed_type not in ['t0', 't0-64', 't0-116', 't0-52']

- name: Gather minigraph facts about the device
minigraph_facts: host={{inventory_hostname}}
Expand Down
2 changes: 1 addition & 1 deletion ansible/roles/test/tasks/shared-fib.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

- name: Expand properties into props
set_fact: props="{{configuration_properties['common']}}"
when: testbed_type in ['t0', 't0-56', 't0-64', 't0-64-32', 't0-116']
when: testbed_type in ['t0', 't0-52', 't0-56', 't0-64', 't0-64-32', 't0-116']

- name: Expand ToR properties into props
set_fact: props_tor="{{configuration_properties['tor']}}"
Expand Down
4 changes: 2 additions & 2 deletions ansible/roles/test/templates/fib.j2
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
{% if testbed_type == 't1' %}
0.0.0.0/0 {% for ifname, v in minigraph_neighbors.iteritems() %}{% if "T2" in v.name %}{{ '[%d]' % minigraph_port_indices[ifname]}}{% if not loop.last %} {% endif %}{% endif %}{% endfor %}
::/0 {% for ifname, v in minigraph_neighbors.iteritems() %}{% if "T2" in v.name %}{{ '[%d]' % minigraph_port_indices[ifname]}}{% if not loop.last %} {% endif %}{% endif %}{% endfor %}
{% elif testbed_type == 't0' or testbed_type == 't0-64' or testbed_type == 't1-lag' or testbed_type == 't0-64-32' %}
{% elif testbed_type == 't0' or testbed_type == 't0-52'or testbed_type == 't0-64' or testbed_type == 't1-lag' or testbed_type == 't0-64-32' %}
0.0.0.0/0 {% for portchannel, v in minigraph_portchannels.iteritems() %}
::/0 {% for portchannel, v in minigraph_portchannels.iteritems() %}
[{% for member in v.members %}{{ '%d' % minigraph_port_indices[member]}}{% if not loop.last %} {% endif %}{% endfor %}]{% if not loop.last %} {% endif %}{% endfor %}
Expand Down Expand Up @@ -30,7 +30,7 @@
{% elif testbed_type == 't1-64-lag' %}
192.168.{{ podset }}.{{ tor * 16 + subnet }}/32 [0 1] [4 5] [16 17] [20 21]
20C0:A8{{ '%02X' % podset }}:0:{{ '%02X' % (tor * 16 + subnet)}}::/64 [0 1] [4 5] [16 17] [20 21]
{% elif testbed_type == 't0' or testbed_type == 't0-64' or testbed_type == 't0-64-32' %}
{% elif testbed_type == 't0' or testbed_type == 't0-52' or testbed_type == 't0-64' or testbed_type == 't0-64-32' %}
{% set suffix = ( (podset * props.tor_number * props.max_tor_subnet_number * props.tor_subnet_size) +
(tor * props.max_tor_subnet_number * props.tor_subnet_size) +
(subnet * props.tor_subnet_size) ) %}
Expand Down
18 changes: 9 additions & 9 deletions ansible/roles/test/vars/testcases.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ testcases:

bgp_fact:
filename: bgp_fact.yml
topologies: [t0, t0-16, t0-56, t0-64, t0-64-32, t0-116, t1, t1-lag, t1-64-lag]
topologies: [t0, t0-16, t0-52, t0-56, t0-64, t0-64-32, t0-116, t1, t1-lag, t1-64-lag]

bgp_gr_helper:
filename: bgp_gr_helper.yml
Expand Down Expand Up @@ -50,15 +50,15 @@ testcases:

decap:
filename: decap.yml
topologies: [t1, t1-lag, t1-64-lag, t0, t0-56, t0-64, t0-116]
topologies: [t1, t1-lag, t1-64-lag, t0, t0-52, t0-56, t0-64, t0-116]
required_vars:
ptf_host:
testbed_type:
dscp_mode:

dhcp_relay:
filename: dhcp_relay.yml
topologies: [t0, t0-16, t0-56, t0-64, t0-64-32, t0-116]
topologies: [t0, t0-16, t0-52, t0-56, t0-64, t0-64-32, t0-116]
required_vars:
ptf_host:

Expand Down Expand Up @@ -103,7 +103,7 @@ testcases:

fib:
filename: simple-fib.yml
topologies: [t0, t0-16, t0-56, t0-64, t0-64-32, t0-116, t1, t1-lag, t1-64-lag]
topologies: [t0, t0-16, t0-52, t0-56, t0-64, t0-64-32, t0-116, t1, t1-lag, t1-64-lag]
required_vars:
ptf_host:
testbed_type:
Expand All @@ -117,7 +117,7 @@ testcases:

fdb:
filename: fdb.yml
topologies: [t0, t0-16, t0-56, t0-64, t0-64-32, t0-116]
topologies: [t0, t0-16, t0-52, t0-56, t0-64, t0-64-32, t0-116]
required_vars:
ptf_host:
testbed_type:
Expand All @@ -139,18 +139,18 @@ testcases:

lag_2:
filename: lag_2.yml
topologies: [t0, t0-56, t0-64, t0-64-32, t0-116, t1-lag, t1-64-lag]
topologies: [t0, t0-52, t0-56, t0-64, t0-64-32, t0-116, t1-lag, t1-64-lag]
required_vars:
ptf_host:
testbed_type:

lldp:
filename: lldp.yml
topologies: [t0, t0-16, t0-56, t0-64, t0-116, t0-64-32, t1, t1-lag, t1-64-lag]
topologies: [t0, t0-16, t0-52, t0-56, t0-64, t0-116, t0-64-32, t1, t1-lag, t1-64-lag]

link_flap:
filename: link_flap.yml
topologies: [t0, t0-16, t0-56, t0-64, t0-64-32, t0-116, t1, t1-lag, t1-64-lag, ptf32, ptf64]
topologies: [t0, t0-16, t0-52, t0-56, t0-64, t0-64-32, t0-116, t1, t1-lag, t1-64-lag, ptf32, ptf64]

continuous_link_flap:
filename: continuous_link_flap.yml
Expand Down Expand Up @@ -238,7 +238,7 @@ testcases:

crm:
filename: crm.yml
topologies: [t1, t1-lag, t0, t0-56, t0-64, t0-116]
topologies: [t1, t1-lag, t0, t0-52, t0-56, t0-64, t0-116]

dip_sip:
filename: dip_sip.yml
Expand Down