[baseimage]: support building multi-asic component (#3856)

- move single instance services into their own folder
- generate Systemd templates for any multi-instance service files in slave.mk
- detect single or multi-instance platform in systemd-sonic-generator based on asic.conf platform specific file.
- update container hostname after creation instead of during creation (docker_image_ctl)
- run Docker containers in a network namespace if specified
- add a service to create a simulated multi-ASIC topology on the virtual switch platform

Signed-off-by: Lawrence Lee <t-lale@microsoft.com>
Signed-off-by: Suvarna Meenakshi <Suvarna.Meenaksh@microsoft.com>
This commit is contained in:
SuvarnaMeenakshi 2020-01-26 13:56:42 -08:00 committed by lguohan
parent 61858807ce
commit c9483796dc
83 changed files with 5781 additions and 82 deletions

View File

@ -0,0 +1 @@
NUM_ASIC=1

View File

@ -0,0 +1,3 @@
{%- set default_topo = 't1' %}
{%- include 'buffers_config.j2' %}

View File

@ -0,0 +1,45 @@
{%- set default_cable = '300m' %}
{%- macro generate_port_lists(PORT_ALL) %}
{# Generate list of ports #}
{% for port_idx in range(0,32) %}
{% if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{% endif %}
{% endfor %}
{%- endmacro %}
{%- macro generate_buffer_pool_and_profiles() %}
"BUFFER_POOL": {
"ingress_lossless_pool": {
"size": "12766208",
"type": "ingress",
"mode": "dynamic"
},
"egress_lossless_pool": {
"size": "12766208",
"type": "egress",
"mode": "static"
},
"egress_lossy_pool": {
"size": "7326924",
"type": "egress",
"mode": "dynamic"
}
},
"BUFFER_PROFILE": {
"ingress_lossy_profile": {
"pool":"[BUFFER_POOL|ingress_lossless_pool]",
"size":"0",
"dynamic_th":"3"
},
"egress_lossless_profile": {
"pool":"[BUFFER_POOL|egress_lossless_pool]",
"size":"0",
"static_th":"12766208"
},
"egress_lossy_profile": {
"pool":"[BUFFER_POOL|egress_lossy_pool]",
"size":"1518",
"dynamic_th":"3"
}
},
{%- endmacro %}

View File

@ -0,0 +1,45 @@
{%- set default_cable = '300m' %}
{%- macro generate_port_lists(PORT_ALL) %}
{# Generate list of ports #}
{% for port_idx in range(0,32) %}
{% if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{% endif %}
{% endfor %}
{%- endmacro %}
{%- macro generate_buffer_pool_and_profiles() %}
"BUFFER_POOL": {
"ingress_lossless_pool": {
"size": "12766208",
"type": "ingress",
"mode": "dynamic"
},
"egress_lossless_pool": {
"size": "12766208",
"type": "egress",
"mode": "static"
},
"egress_lossy_pool": {
"size": "7326924",
"type": "egress",
"mode": "dynamic"
}
},
"BUFFER_PROFILE": {
"ingress_lossy_profile": {
"pool":"[BUFFER_POOL|ingress_lossless_pool]",
"size":"0",
"dynamic_th":"3"
},
"egress_lossless_profile": {
"pool":"[BUFFER_POOL|egress_lossless_pool]",
"size":"0",
"static_th":"12766208"
},
"egress_lossy_profile": {
"pool":"[BUFFER_POOL|egress_lossy_pool]",
"size":"1518",
"dynamic_th":"3"
}
},
{%- endmacro %}

View File

@ -0,0 +1,45 @@
{%- set default_cable = '300m' %}
{%- macro generate_port_lists(PORT_ALL) %}
{# Generate list of ports #}
{% for port_idx in range(0,32) %}
{% if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{% endif %}
{% endfor %}
{%- endmacro %}
{%- macro generate_buffer_pool_and_profiles() %}
"BUFFER_POOL": {
"ingress_lossless_pool": {
"size": "12766208",
"type": "ingress",
"mode": "dynamic"
},
"egress_lossless_pool": {
"size": "12766208",
"type": "egress",
"mode": "static"
},
"egress_lossy_pool": {
"size": "7326924",
"type": "egress",
"mode": "dynamic"
}
},
"BUFFER_PROFILE": {
"ingress_lossy_profile": {
"pool":"[BUFFER_POOL|ingress_lossless_pool]",
"size":"0",
"dynamic_th":"3"
},
"egress_lossless_profile": {
"pool":"[BUFFER_POOL|egress_lossless_pool]",
"size":"0",
"static_th":"12766208"
},
"egress_lossy_profile": {
"pool":"[BUFFER_POOL|egress_lossy_pool]",
"size":"1518",
"dynamic_th":"3"
}
},
{%- endmacro %}

View File

@ -0,0 +1,17 @@
# PG lossless profiles.
# speed cable size xon xoff threshold xon_offset
10000 5m 56368 18432 55120 -3 2496
25000 5m 56368 18432 55120 -3 2496
40000 5m 56368 18432 55120 -3 2496
50000 5m 56368 18432 55120 -3 2496
100000 5m 56368 18432 55120 -3 2496
10000 40m 56368 18432 55120 -3 2496
25000 40m 56368 18432 55120 -3 2496
40000 40m 56368 18432 55120 -3 2496
50000 40m 56368 18432 55120 -3 2496
100000 40m 56368 18432 55120 -3 2496
10000 300m 56368 18432 55120 -3 2496
25000 300m 56368 18432 55120 -3 2496
40000 300m 56368 18432 55120 -3 2496
50000 300m 56368 18432 55120 -3 2496
100000 300m 56368 18432 55120 -3 2496

View File

@ -0,0 +1,33 @@
# name lanes alias index speed
Ethernet0 25,26,27,28 fortyGigE0/0 0 40000
Ethernet4 29,30,31,32 fortyGigE0/4 1 40000
Ethernet8 33,34,35,36 fortyGigE0/8 2 40000
Ethernet12 37,38,39,40 fortyGigE0/12 3 40000
Ethernet16 45,46,47,48 fortyGigE0/16 4 40000
Ethernet20 41,42,43,44 fortyGigE0/20 5 40000
Ethernet24 1,2,3,4 fortyGigE0/24 6 40000
Ethernet28 5,6,7,8 fortyGigE0/28 7 40000
Ethernet32 13,14,15,16 fortyGigE0/32 8 40000
Ethernet36 9,10,11,12 fortyGigE0/36 9 40000
Ethernet40 17,18,19,20 fortyGigE0/40 10 40000
Ethernet44 21,22,23,24 fortyGigE0/44 11 40000
Ethernet48 53,54,55,56 fortyGigE0/48 12 40000
Ethernet52 49,50,51,52 fortyGigE0/52 13 40000
Ethernet56 57,58,59,60 fortyGigE0/56 14 40000
Ethernet60 61,62,63,64 fortyGigE0/60 15 40000
Ethernet64 69,70,71,72 fortyGigE0/64 16 40000
Ethernet68 65,66,67,68 fortyGigE0/68 17 40000
Ethernet72 73,74,75,76 fortyGigE0/72 18 40000
Ethernet76 77,78,79,80 fortyGigE0/76 19 40000
Ethernet80 109,110,111,112 fortyGigE0/80 20 40000
Ethernet84 105,106,107,108 fortyGigE0/84 21 40000
Ethernet88 113,114,115,116 fortyGigE0/88 22 40000
Ethernet92 117,118,119,120 fortyGigE0/92 23 40000
Ethernet96 125,126,127,128 fortyGigE0/96 24 40000
Ethernet100 121,122,123,124 fortyGigE0/100 25 40000
Ethernet104 81,82,83,84 fortyGigE0/104 26 40000
Ethernet108 85,86,87,88 fortyGigE0/108 27 40000
Ethernet112 93,94,95,96 fortyGigE0/112 28 40000
Ethernet116 89,90,91,92 fortyGigE0/116 29 40000
Ethernet120 101,102,103,104 fortyGigE0/120 30 40000
Ethernet124 97,98,99,100 fortyGigE0/124 31 40000

View File

@ -0,0 +1 @@
{%- include 'qos_config.j2' %}

View File

@ -0,0 +1,2 @@
SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/td2-s6000-32x40G.config.bcm
SAI_NUM_ECMP_MEMBERS=32

View File

@ -0,0 +1,646 @@
# Old LPM only configuration
# l2_mem_entries=163840
# l3_mem_entries=90112
# l3_alpm_enable=0
# ipv6_lpm_128b_enable=0
#
# ALPM enable
l3_alpm_enable=2
ipv6_lpm_128b_enable=1
l2_mem_entries=32768
l3_mem_entries=16384
# From old config file
os=unix
higig2_hdr_mode=1
# Parity
parity_correction=1
parity_enable=1
stat_if_parity_enable=0
#
bcm_num_cos=8
bcm_stat_interval=2000000
l2xmsg_hostbuf_size=8192
l2xmsg_mode=1
lls_num_l2uc=12
max_vp_lags=0
miim_intr_enable=0
mmu_lossless=0
module_64ports=0
schan_intr_enable=0
stable_size=0x2000000
tdma_timeout_usec=5000000
pbmp_oversubscribe=0x000007fffffffffffffffffffffffffe
pbmp_xport_xe=0x000007fffffffffffffffffffffffffe
# Ports configuration
# xe0 (40G)
portmap_1=25:40
xgxs_rx_lane_map_1=0x213
xgxs_tx_lane_map_1=0x2031
phy_xaui_rx_polarity_flip_1=0xe
phy_xaui_tx_polarity_flip_1=0x2
serdes_driver_current_lane0_xe0=0x5
serdes_driver_current_lane1_xe0=0x5
serdes_driver_current_lane2_xe0=0x5
serdes_driver_current_lane3_xe0=0x5
serdes_pre_driver_current_lane0_xe0=0x5
serdes_pre_driver_current_lane1_xe0=0x5
serdes_pre_driver_current_lane2_xe0=0x5
serdes_pre_driver_current_lane3_xe0=0x5
serdes_preemphasis_lane0_xe0=0xcad0
serdes_preemphasis_lane1_xe0=0xc6e0
serdes_preemphasis_lane2_xe0=0xc6e0
serdes_preemphasis_lane3_xe0=0xd2b0
# xe1 (40G)
portmap_2=29:40
xgxs_rx_lane_map_2=0x213
xgxs_tx_lane_map_2=0x213
phy_xaui_rx_polarity_flip_2=0xc
phy_xaui_tx_polarity_flip_2=0x9
serdes_driver_current_lane0_xe1=0x6
serdes_driver_current_lane1_xe1=0x7
serdes_driver_current_lane2_xe1=0x6
serdes_driver_current_lane3_xe1=0x6
serdes_pre_driver_current_lane0_xe1=0x6
serdes_pre_driver_current_lane1_xe1=0x7
serdes_pre_driver_current_lane2_xe1=0x6
serdes_pre_driver_current_lane3_xe1=0x6
serdes_preemphasis_lane0_xe1=0xc2f0
serdes_preemphasis_lane1_xe1=0xd2b0
serdes_preemphasis_lane2_xe1=0xc6e0
serdes_preemphasis_lane3_xe1=0xc2f0
# xe2 (40G)
portmap_3=33:40
xgxs_rx_lane_map_3=0x213
xgxs_tx_lane_map_3=0x132
phy_xaui_rx_polarity_flip_3=0xe
phy_xaui_tx_polarity_flip_3=0x2
serdes_driver_current_lane0_xe2=0x4
serdes_driver_current_lane1_xe2=0x4
serdes_driver_current_lane2_xe2=0x4
serdes_driver_current_lane3_xe2=0x4
serdes_pre_driver_current_lane0_xe2=0x4
serdes_pre_driver_current_lane1_xe2=0x4
serdes_pre_driver_current_lane2_xe2=0x4
serdes_pre_driver_current_lane3_xe2=0x4
serdes_preemphasis_lane0_xe2=0xc6e0
serdes_preemphasis_lane1_xe2=0xc6e0
serdes_preemphasis_lane2_xe2=0xc6e0
serdes_preemphasis_lane3_xe2=0xc6e0
# xe3 (40G)
portmap_4=37:40
xgxs_rx_lane_map_4=0x213
xgxs_tx_lane_map_4=0x1203
phy_xaui_rx_polarity_flip_4=0x3
phy_xaui_tx_polarity_flip_4=0xe
serdes_driver_current_lane0_xe3=0x4
serdes_driver_current_lane1_xe3=0x4
serdes_driver_current_lane2_xe3=0x4
serdes_driver_current_lane3_xe3=0x4
serdes_pre_driver_current_lane0_xe3=0x4
serdes_pre_driver_current_lane1_xe3=0x4
serdes_pre_driver_current_lane2_xe3=0x4
serdes_pre_driver_current_lane3_xe3=0x4
serdes_preemphasis_lane0_xe3=0xcad0
serdes_preemphasis_lane1_xe3=0xcad0
serdes_preemphasis_lane2_xe3=0xc2f0
serdes_preemphasis_lane3_xe3=0xc2f0
# xe4 (40G)
portmap_5=45:40
xgxs_rx_lane_map_5=0x213
xgxs_tx_lane_map_5=0x213
phy_xaui_rx_polarity_flip_5=0xe
phy_xaui_tx_polarity_flip_5=0x8
serdes_driver_current_lane0_xe4=0x4
serdes_driver_current_lane1_xe4=0x4
serdes_driver_current_lane2_xe4=0x4
serdes_driver_current_lane3_xe4=0x4
serdes_pre_driver_current_lane0_xe4=0x4
serdes_pre_driver_current_lane1_xe4=0x4
serdes_pre_driver_current_lane2_xe4=0x4
serdes_pre_driver_current_lane3_xe4=0x4
serdes_preemphasis_lane0_xe4=0xc2f0
serdes_preemphasis_lane1_xe4=0xc2f0
serdes_preemphasis_lane2_xe4=0xc2f0
serdes_preemphasis_lane3_xe4=0xc2f0
# xe5 (40G)
portmap_6=41:40
xgxs_rx_lane_map_6=0x213
xgxs_tx_lane_map_6=0x3021
phy_xaui_rx_polarity_flip_6=0x3
phy_xaui_tx_polarity_flip_6=0xb
serdes_driver_current_lane0_xe5=0x4
serdes_driver_current_lane1_xe5=0x4
serdes_driver_current_lane2_xe5=0x4
serdes_driver_current_lane3_xe5=0x4
serdes_pre_driver_current_lane0_xe5=0x4
serdes_pre_driver_current_lane1_xe5=0x4
serdes_pre_driver_current_lane2_xe5=0x4
serdes_pre_driver_current_lane3_xe5=0x4
serdes_preemphasis_lane0_xe5=0xc6e0
serdes_preemphasis_lane1_xe5=0xc2f0
serdes_preemphasis_lane2_xe5=0xc2f0
serdes_preemphasis_lane3_xe5=0xcad0
# xe6 (40G)
portmap_7=1:40
xgxs_rx_lane_map_7=0x213
xgxs_tx_lane_map_7=0x2031
phy_xaui_rx_polarity_flip_7=0xe
phy_xaui_tx_polarity_flip_7=0xd
serdes_driver_current_lane0_xe6=0x5
serdes_driver_current_lane1_xe6=0x5
serdes_driver_current_lane2_xe6=0x5
serdes_driver_current_lane3_xe6=0x5
serdes_pre_driver_current_lane0_xe6=0x5
serdes_pre_driver_current_lane1_xe6=0x5
serdes_pre_driver_current_lane2_xe6=0x5
serdes_pre_driver_current_lane3_xe6=0x5
serdes_preemphasis_lane0_xe6=0xc6e0
serdes_preemphasis_lane1_xe6=0xcad0
serdes_preemphasis_lane2_xe6=0xc6e0
serdes_preemphasis_lane3_xe6=0xcad0
# xe7 (40G)
portmap_8=5:40
xgxs_rx_lane_map_8=0x213
xgxs_tx_lane_map_8=0x1203
phy_xaui_rx_polarity_flip_8=0xc
phy_xaui_tx_polarity_flip_8=0x1
serdes_driver_current_lane0_xe7=0x4
serdes_driver_current_lane1_xe7=0x4
serdes_driver_current_lane2_xe7=0x4
serdes_driver_current_lane3_xe7=0x4
serdes_pre_driver_current_lane0_xe7=0x4
serdes_pre_driver_current_lane1_xe7=0x4
serdes_pre_driver_current_lane2_xe7=0x4
serdes_pre_driver_current_lane3_xe7=0x4
serdes_preemphasis_lane0_xe7=0xc6e0
serdes_preemphasis_lane1_xe7=0xc6e0
serdes_preemphasis_lane2_xe7=0xc6e0
serdes_preemphasis_lane3_xe7=0xc6e0
# xe8 (40G)
portmap_9=13:40
xgxs_rx_lane_map_9=0x213
xgxs_tx_lane_map_9=0x132
phy_xaui_rx_polarity_flip_9=0xe
phy_xaui_tx_polarity_flip_9=0x0
serdes_driver_current_lane0_xe8=0x2
serdes_driver_current_lane1_xe8=0x3
serdes_driver_current_lane2_xe8=0x2
serdes_driver_current_lane3_xe8=0x2
serdes_pre_driver_current_lane0_xe8=0x2
serdes_pre_driver_current_lane1_xe8=0x3
serdes_pre_driver_current_lane2_xe8=0x2
serdes_pre_driver_current_lane3_xe8=0x2
serdes_preemphasis_lane0_xe8=0xb270
serdes_preemphasis_lane1_xe8=0xbb10
serdes_preemphasis_lane2_xe8=0xb720
serdes_preemphasis_lane3_xe8=0xb720
# xe9 (40G)
portmap_10=9:40
xgxs_rx_lane_map_10=0x3120
xgxs_tx_lane_map_10=0x3021
phy_xaui_rx_polarity_flip_10=0x0
phy_xaui_tx_polarity_flip_10=0x4
serdes_driver_current_lane0_xe9=0x3
serdes_driver_current_lane1_xe9=0x3
serdes_driver_current_lane2_xe9=0x3
serdes_driver_current_lane3_xe9=0x3
serdes_pre_driver_current_lane0_xe9=0x3
serdes_pre_driver_current_lane1_xe9=0x3
serdes_pre_driver_current_lane2_xe9=0x3
serdes_pre_driver_current_lane3_xe9=0x3
serdes_preemphasis_lane0_xe9=0xc2f0
serdes_preemphasis_lane1_xe9=0xc6e0
serdes_preemphasis_lane2_xe9=0xbf00
serdes_preemphasis_lane3_xe9=0xc2f0
# xe10 (40G)
portmap_11=17:40
xgxs_rx_lane_map_11=0x213
xgxs_tx_lane_map_11=0x132
phy_xaui_rx_polarity_flip_11=0xe
phy_xaui_tx_polarity_flip_11=0x0
serdes_driver_current_lane0_xe10=0x2
serdes_driver_current_lane1_xe10=0x2
serdes_driver_current_lane2_xe10=0x2
serdes_driver_current_lane3_xe10=0x2
serdes_pre_driver_current_lane0_xe10=0x2
serdes_pre_driver_current_lane1_xe10=0x2
serdes_pre_driver_current_lane2_xe10=0x2
serdes_pre_driver_current_lane3_xe10=0x2
serdes_preemphasis_lane0_xe10=0xb330
serdes_preemphasis_lane1_xe10=0xbb10
serdes_preemphasis_lane2_xe10=0xbb10
serdes_preemphasis_lane3_xe10=0xbb10
# xe11 (40G)
portmap_12=21:40
xgxs_rx_lane_map_12=0x123
xgxs_tx_lane_map_12=0x1203
phy_xaui_rx_polarity_flip_12=0xc
phy_xaui_tx_polarity_flip_12=0xe
serdes_driver_current_lane0_xe11=0x2
serdes_driver_current_lane1_xe11=0x2
serdes_driver_current_lane2_xe11=0x2
serdes_driver_current_lane3_xe11=0x2
serdes_pre_driver_current_lane0_xe11=0x2
serdes_pre_driver_current_lane1_xe11=0x2
serdes_pre_driver_current_lane2_xe11=0x2
serdes_pre_driver_current_lane3_xe11=0x2
serdes_preemphasis_lane0_xe11=0xb330
serdes_preemphasis_lane1_xe11=0xb330
serdes_preemphasis_lane2_xe11=0xb330
serdes_preemphasis_lane3_xe11=0xb330
# xe12 (40G)
portmap_13=53:40
xgxs_rx_lane_map_13=0x213
xgxs_tx_lane_map_13=0x231
phy_xaui_rx_polarity_flip_13=0x1
phy_xaui_tx_polarity_flip_13=0x0
serdes_driver_current_lane0_xe12=0x2
serdes_driver_current_lane1_xe12=0x2
serdes_driver_current_lane2_xe12=0x2
serdes_driver_current_lane3_xe12=0x2
serdes_pre_driver_current_lane0_xe12=0x2
serdes_pre_driver_current_lane1_xe12=0x2
serdes_pre_driver_current_lane2_xe12=0x2
serdes_pre_driver_current_lane3_xe12=0x2
serdes_preemphasis_lane0_xe12=0xaf40
serdes_preemphasis_lane1_xe12=0xaf40
serdes_preemphasis_lane2_xe12=0xaf40
serdes_preemphasis_lane3_xe12=0xaf40
# xe13 (40G)
portmap_14=49:40
xgxs_rx_lane_map_14=0x1302
xgxs_tx_lane_map_14=0x2031
phy_xaui_rx_polarity_flip_14=0xb
phy_xaui_tx_polarity_flip_14=0x3
serdes_driver_current_lane0_xe13=0x2
serdes_driver_current_lane1_xe13=0x2
serdes_driver_current_lane2_xe13=0x2
serdes_driver_current_lane3_xe13=0x2
serdes_pre_driver_current_lane0_xe13=0x2
serdes_pre_driver_current_lane1_xe13=0x2
serdes_pre_driver_current_lane2_xe13=0x2
serdes_pre_driver_current_lane3_xe13=0x2
serdes_preemphasis_lane0_xe13=0xa760
serdes_preemphasis_lane1_xe13=0xa760
serdes_preemphasis_lane2_xe13=0xa760
serdes_preemphasis_lane3_xe13=0xa760
# xe14 (40G)
portmap_15=57:40
xgxs_rx_lane_map_15=0x213
xgxs_tx_lane_map_15=0x2031
phy_xaui_rx_polarity_flip_15=0x1
phy_xaui_tx_polarity_flip_15=0x0
serdes_driver_current_lane0_xe14=0x1
serdes_driver_current_lane1_xe14=0x1
serdes_driver_current_lane2_xe14=0x1
serdes_driver_current_lane3_xe14=0x1
serdes_pre_driver_current_lane0_xe14=0x1
serdes_pre_driver_current_lane1_xe14=0x1
serdes_pre_driver_current_lane2_xe14=0x1
serdes_pre_driver_current_lane3_xe14=0x1
serdes_preemphasis_lane0_xe14=0xa760
serdes_preemphasis_lane1_xe14=0xa760
serdes_preemphasis_lane2_xe14=0xa760
serdes_preemphasis_lane3_xe14=0xa760
# xe15 (40G)
portmap_16=61:40
xgxs_rx_lane_map_16=0x132
xgxs_tx_lane_map_16=0x213
phy_xaui_rx_polarity_flip_16=0x0
phy_xaui_tx_polarity_flip_16=0x0
serdes_driver_current_lane0_xe15=0x2
serdes_driver_current_lane1_xe15=0x2
serdes_driver_current_lane2_xe15=0x2
serdes_driver_current_lane3_xe15=0x2
serdes_pre_driver_current_lane0_xe15=0x2
serdes_pre_driver_current_lane1_xe15=0x2
serdes_pre_driver_current_lane2_xe15=0x2
serdes_pre_driver_current_lane3_xe15=0x2
serdes_preemphasis_lane0_xe15=0xa760
serdes_preemphasis_lane1_xe15=0xa760
serdes_preemphasis_lane2_xe15=0xa760
serdes_preemphasis_lane3_xe15=0xa760
# xe16 (40G)
portmap_17=69:40
xgxs_rx_lane_map_17=0x213
xgxs_tx_lane_map_17=0x2130
phy_xaui_rx_polarity_flip_17=0x1
phy_xaui_tx_polarity_flip_17=0xf
serdes_driver_current_lane0_xe16=0x1
serdes_driver_current_lane1_xe16=0x1
serdes_driver_current_lane2_xe16=0x1
serdes_driver_current_lane3_xe16=0x1
serdes_pre_driver_current_lane0_xe16=0x1
serdes_pre_driver_current_lane1_xe16=0x1
serdes_pre_driver_current_lane2_xe16=0x1
serdes_pre_driver_current_lane3_xe16=0x1
serdes_preemphasis_lane0_xe16=0xa760
serdes_preemphasis_lane1_xe16=0xa760
serdes_preemphasis_lane2_xe16=0xa760
serdes_preemphasis_lane3_xe16=0xa760
# xe17 (40G)
portmap_18=65:40
xgxs_rx_lane_map_18=0x132
xgxs_tx_lane_map_18=0x2031
phy_xaui_rx_polarity_flip_18=0x3
phy_xaui_tx_polarity_flip_18=0x9
serdes_driver_current_lane0_xe17=0x1
serdes_driver_current_lane1_xe17=0x1
serdes_driver_current_lane2_xe17=0x1
serdes_driver_current_lane3_xe17=0x1
serdes_pre_driver_current_lane0_xe17=0x1
serdes_pre_driver_current_lane1_xe17=0x1
serdes_pre_driver_current_lane2_xe17=0x1
serdes_pre_driver_current_lane3_xe17=0x1
serdes_preemphasis_lane0_xe17=0xa370
serdes_preemphasis_lane1_xe17=0xa370
serdes_preemphasis_lane2_xe17=0xa370
serdes_preemphasis_lane3_xe17=0xa370
# xe18 (40G)
portmap_19=73:40
xgxs_rx_lane_map_19=0x213
xgxs_tx_lane_map_19=0x2031
phy_xaui_rx_polarity_flip_19=0x1
phy_xaui_tx_polarity_flip_19=0x0
serdes_driver_current_lane0_xe18=0x2
serdes_driver_current_lane1_xe18=0x2
serdes_driver_current_lane2_xe18=0x2
serdes_driver_current_lane3_xe18=0x2
serdes_pre_driver_current_lane0_xe18=0x2
serdes_pre_driver_current_lane1_xe18=0x2
serdes_pre_driver_current_lane2_xe18=0x2
serdes_pre_driver_current_lane3_xe18=0x2
serdes_preemphasis_lane0_xe18=0xa760
serdes_preemphasis_lane1_xe18=0xa760
serdes_preemphasis_lane2_xe18=0xa760
serdes_preemphasis_lane3_xe18=0xa760
# xe19 (40G)
portmap_20=77:40
xgxs_rx_lane_map_20=0x123
xgxs_tx_lane_map_20=0x1203
phy_xaui_rx_polarity_flip_20=0x3
phy_xaui_tx_polarity_flip_20=0xe
serdes_driver_current_lane0_xe19=0x2
serdes_driver_current_lane1_xe19=0x2
serdes_driver_current_lane2_xe19=0x2
serdes_driver_current_lane3_xe19=0x2
serdes_pre_driver_current_lane0_xe19=0x2
serdes_pre_driver_current_lane1_xe19=0x2
serdes_pre_driver_current_lane2_xe19=0x2
serdes_pre_driver_current_lane3_xe19=0x2
serdes_preemphasis_lane0_xe19=0xaf40
serdes_preemphasis_lane1_xe19=0xaf40
serdes_preemphasis_lane2_xe19=0xaf40
serdes_preemphasis_lane3_xe19=0xaf40
# xe20 (40G)
portmap_21=109:40
xgxs_rx_lane_map_21=0x132
xgxs_tx_lane_map_21=0x132
phy_xaui_rx_polarity_flip_21=0x8
phy_xaui_tx_polarity_flip_21=0x0
serdes_driver_current_lane0_xe20=0x1
serdes_driver_current_lane1_xe20=0x1
serdes_driver_current_lane2_xe20=0x1
serdes_driver_current_lane3_xe20=0x2
serdes_pre_driver_current_lane0_xe20=0x1
serdes_pre_driver_current_lane1_xe20=0x1
serdes_pre_driver_current_lane2_xe20=0x1
serdes_pre_driver_current_lane3_xe20=0x2
serdes_preemphasis_lane0_xe20=0xb330
serdes_preemphasis_lane1_xe20=0xb330
serdes_preemphasis_lane2_xe20=0xb330
serdes_preemphasis_lane3_xe20=0xbff0
# xe21 (40G)
portmap_22=105:40
xgxs_rx_lane_map_22=0x1320
xgxs_tx_lane_map_22=0x3021
phy_xaui_rx_polarity_flip_22=0xd
phy_xaui_tx_polarity_flip_22=0xb
serdes_driver_current_lane0_xe21=0x1
serdes_driver_current_lane1_xe21=0x1
serdes_driver_current_lane2_xe21=0x1
serdes_driver_current_lane3_xe21=0x1
serdes_pre_driver_current_lane0_xe21=0x1
serdes_pre_driver_current_lane1_xe21=0x1
serdes_pre_driver_current_lane2_xe21=0x1
serdes_pre_driver_current_lane3_xe21=0x1
serdes_preemphasis_lane0_xe21=0xb330
serdes_preemphasis_lane1_xe21=0xb330
serdes_preemphasis_lane2_xe21=0xb330
serdes_preemphasis_lane3_xe21=0xb330
# xe22 (40G)
portmap_23=113:40
xgxs_rx_lane_map_23=0x132
xgxs_tx_lane_map_23=0x132
phy_xaui_rx_polarity_flip_23=0x8
phy_xaui_tx_polarity_flip_23=0x0
serdes_driver_current_lane0_xe22=0x1
serdes_driver_current_lane1_xe22=0x1
serdes_driver_current_lane2_xe22=0x1
serdes_driver_current_lane3_xe22=0x1
serdes_pre_driver_current_lane0_xe22=0x1
serdes_pre_driver_current_lane1_xe22=0x1
serdes_pre_driver_current_lane2_xe22=0x1
serdes_pre_driver_current_lane3_xe22=0x1
serdes_preemphasis_lane0_xe22=0xbb10
serdes_preemphasis_lane1_xe22=0xbb10
serdes_preemphasis_lane2_xe22=0xbb10
serdes_preemphasis_lane3_xe22=0xc2f0
# xe23 (40G)
portmap_24=117:40
xgxs_rx_lane_map_24=0x231
xgxs_tx_lane_map_24=0x1203
phy_xaui_rx_polarity_flip_24=0x3
phy_xaui_tx_polarity_flip_24=0xe
serdes_driver_current_lane0_xe23=0x3
serdes_driver_current_lane1_xe23=0x5
serdes_driver_current_lane2_xe23=0x3
serdes_driver_current_lane3_xe23=0x3
serdes_pre_driver_current_lane0_xe23=0x3
serdes_pre_driver_current_lane1_xe23=0x5
serdes_pre_driver_current_lane2_xe23=0x3
serdes_pre_driver_current_lane3_xe23=0x3
serdes_preemphasis_lane0_xe23=0xc6e0
serdes_preemphasis_lane1_xe23=0xc6e0
serdes_preemphasis_lane2_xe23=0xc6e0
serdes_preemphasis_lane3_xe23=0xc6e0
# xe24 (40G)
portmap_25=125:40
xgxs_rx_lane_map_25=0x132
xgxs_tx_lane_map_25=0x132
phy_xaui_rx_polarity_flip_25=0x8
phy_xaui_tx_polarity_flip_25=0x0
serdes_driver_current_lane0_xe24=0x4
serdes_driver_current_lane1_xe24=0x4
serdes_driver_current_lane2_xe24=0x4
serdes_driver_current_lane3_xe24=0x4
serdes_pre_driver_current_lane0_xe24=0x4
serdes_pre_driver_current_lane1_xe24=0x4
serdes_pre_driver_current_lane2_xe24=0x4
serdes_pre_driver_current_lane3_xe24=0x4
serdes_preemphasis_lane0_xe24=0xc6e0
serdes_preemphasis_lane1_xe24=0xc6e0
serdes_preemphasis_lane2_xe24=0xc6e0
serdes_preemphasis_lane3_xe24=0xcec0
# xe25 (40G)
portmap_26=121:40
xgxs_rx_lane_map_26=0x1320
xgxs_tx_lane_map_26=0x3021
phy_xaui_rx_polarity_flip_26=0xd
phy_xaui_tx_polarity_flip_26=0xb
serdes_driver_current_lane0_xe25=0x4
serdes_driver_current_lane1_xe25=0x4
serdes_driver_current_lane2_xe25=0x4
serdes_driver_current_lane3_xe25=0x4
serdes_pre_driver_current_lane0_xe25=0x4
serdes_pre_driver_current_lane1_xe25=0x4
serdes_pre_driver_current_lane2_xe25=0x4
serdes_pre_driver_current_lane3_xe25=0x4
serdes_preemphasis_lane0_xe25=0xc6e0
serdes_preemphasis_lane1_xe25=0xc6e0
serdes_preemphasis_lane2_xe25=0xc6e0
serdes_preemphasis_lane3_xe25=0xc6e0
# xe26 (40G)
portmap_27=81:40
xgxs_rx_lane_map_27=0x1320
xgxs_tx_lane_map_27=0x2031
phy_xaui_rx_polarity_flip_27=0x1
phy_xaui_tx_polarity_flip_27=0x2
serdes_driver_current_lane0_xe26=0x2
serdes_driver_current_lane1_xe26=0x2
serdes_driver_current_lane2_xe26=0x2
serdes_driver_current_lane3_xe26=0x2
serdes_pre_driver_current_lane0_xe26=0x2
serdes_pre_driver_current_lane1_xe26=0x2
serdes_pre_driver_current_lane2_xe26=0x2
serdes_pre_driver_current_lane3_xe26=0x2
serdes_preemphasis_lane0_xe26=0xbb10
serdes_preemphasis_lane1_xe26=0xbb10
serdes_preemphasis_lane2_xe26=0xbf00
serdes_preemphasis_lane3_xe26=0xbb10
# xe27 (40G)
portmap_28=85:40
xgxs_rx_lane_map_28=0x213
xgxs_tx_lane_map_28=0x1203
phy_xaui_rx_polarity_flip_28=0xc
phy_xaui_tx_polarity_flip_28=0xe
serdes_driver_current_lane0_xe27=0x4
serdes_driver_current_lane1_xe27=0x5
serdes_driver_current_lane2_xe27=0x4
serdes_driver_current_lane3_xe27=0x5
serdes_pre_driver_current_lane0_xe27=0x4
serdes_pre_driver_current_lane1_xe27=0x5
serdes_pre_driver_current_lane2_xe27=0x4
serdes_pre_driver_current_lane3_xe27=0x5
serdes_preemphasis_lane0_xe27=0xc2f0
serdes_preemphasis_lane1_xe27=0xc6e0
serdes_preemphasis_lane2_xe27=0xc6e0
serdes_preemphasis_lane3_xe27=0xc6e0
# xe28 (40G)
portmap_29=93:40
xgxs_rx_lane_map_29=0x1320
xgxs_tx_lane_map_29=0x2031
phy_xaui_rx_polarity_flip_29=0x1
phy_xaui_tx_polarity_flip_29=0x2
serdes_driver_current_lane0_xe28=0x4
serdes_driver_current_lane1_xe28=0x4
serdes_driver_current_lane2_xe28=0x4
serdes_driver_current_lane3_xe28=0x4
serdes_pre_driver_current_lane0_xe28=0x4
serdes_pre_driver_current_lane1_xe28=0x4
serdes_pre_driver_current_lane2_xe28=0x4
serdes_pre_driver_current_lane3_xe28=0x4
serdes_preemphasis_lane0_xe28=0xc2f0
serdes_preemphasis_lane1_xe28=0xc2f0
serdes_preemphasis_lane2_xe28=0xc2f0
serdes_preemphasis_lane3_xe28=0xc2f0
# xe29 (40G)
portmap_30=89:40
xgxs_rx_lane_map_30=0x1320
xgxs_tx_lane_map_30=0x3021
phy_xaui_rx_polarity_flip_30=0x2
phy_xaui_tx_polarity_flip_30=0xb
serdes_driver_current_lane0_xe29=0x4
serdes_driver_current_lane1_xe29=0x4
serdes_driver_current_lane2_xe29=0x4
serdes_driver_current_lane3_xe29=0x4
serdes_pre_driver_current_lane0_xe29=0x4
serdes_pre_driver_current_lane1_xe29=0x4
serdes_pre_driver_current_lane2_xe29=0x4
serdes_pre_driver_current_lane3_xe29=0x4
serdes_preemphasis_lane0_xe29=0xcad0
serdes_preemphasis_lane1_xe29=0xc6e0
serdes_preemphasis_lane2_xe29=0xc6e0
serdes_preemphasis_lane3_xe29=0xc6e0
# xe30 (40G)
portmap_31=101:40
xgxs_rx_lane_map_31=0x1320
xgxs_tx_lane_map_31=0x1203
phy_xaui_rx_polarity_flip_31=0x1
phy_xaui_tx_polarity_flip_31=0x6
serdes_driver_current_lane0_xe30=0x6
serdes_driver_current_lane1_xe30=0x6
serdes_driver_current_lane2_xe30=0x6
serdes_driver_current_lane3_xe30=0x7
serdes_pre_driver_current_lane0_xe30=0x6
serdes_pre_driver_current_lane1_xe30=0x6
serdes_pre_driver_current_lane2_xe30=0x6
serdes_pre_driver_current_lane3_xe30=0x7
serdes_preemphasis_lane0_xe30=0xcec0
serdes_preemphasis_lane1_xe30=0xcec0
serdes_preemphasis_lane2_xe30=0xcad0
serdes_preemphasis_lane3_xe30=0xc6e0
# xe31 (40G)
portmap_32=97:40
xgxs_rx_lane_map_32=0x213
xgxs_tx_lane_map_32=0x2031
phy_xaui_rx_polarity_flip_32=0xc
phy_xaui_tx_polarity_flip_32=0x3
serdes_driver_current_lane0_xe31=0x5
serdes_driver_current_lane1_xe31=0x5
serdes_driver_current_lane2_xe31=0x5
serdes_driver_current_lane3_xe31=0x5
serdes_pre_driver_current_lane0_xe31=0x5
serdes_pre_driver_current_lane1_xe31=0x5
serdes_pre_driver_current_lane2_xe31=0x5
serdes_pre_driver_current_lane3_xe31=0x5
serdes_preemphasis_lane0_xe31=0xcad0
serdes_preemphasis_lane1_xe31=0xcad0
serdes_preemphasis_lane2_xe31=0xcad0
serdes_preemphasis_lane3_xe31=0xcad0

View File

@ -0,0 +1,3 @@
{%- set default_topo = 't1' %}
{%- include 'buffers_config.j2' %}

View File

@ -0,0 +1,45 @@
{%- set default_cable = '300m' %}
{%- macro generate_port_lists(PORT_ALL) %}
{# Generate list of ports #}
{% for port_idx in range(0,32) %}
{% if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{% endif %}
{% endfor %}
{%- endmacro %}
{%- macro generate_buffer_pool_and_profiles() %}
"BUFFER_POOL": {
"ingress_lossless_pool": {
"size": "12766208",
"type": "ingress",
"mode": "dynamic"
},
"egress_lossless_pool": {
"size": "12766208",
"type": "egress",
"mode": "static"
},
"egress_lossy_pool": {
"size": "7326924",
"type": "egress",
"mode": "dynamic"
}
},
"BUFFER_PROFILE": {
"ingress_lossy_profile": {
"pool":"[BUFFER_POOL|ingress_lossless_pool]",
"size":"0",
"dynamic_th":"3"
},
"egress_lossless_profile": {
"pool":"[BUFFER_POOL|egress_lossless_pool]",
"size":"0",
"static_th":"12766208"
},
"egress_lossy_profile": {
"pool":"[BUFFER_POOL|egress_lossy_pool]",
"size":"1518",
"dynamic_th":"3"
}
},
{%- endmacro %}

View File

@ -0,0 +1,45 @@
{%- set default_cable = '300m' %}
{%- macro generate_port_lists(PORT_ALL) %}
{# Generate list of ports #}
{% for port_idx in range(0,32) %}
{% if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{% endif %}
{% endfor %}
{%- endmacro %}
{%- macro generate_buffer_pool_and_profiles() %}
"BUFFER_POOL": {
"ingress_lossless_pool": {
"size": "12766208",
"type": "ingress",
"mode": "dynamic"
},
"egress_lossless_pool": {
"size": "12766208",
"type": "egress",
"mode": "static"
},
"egress_lossy_pool": {
"size": "7326924",
"type": "egress",
"mode": "dynamic"
}
},
"BUFFER_PROFILE": {
"ingress_lossy_profile": {
"pool":"[BUFFER_POOL|ingress_lossless_pool]",
"size":"0",
"dynamic_th":"3"
},
"egress_lossless_profile": {
"pool":"[BUFFER_POOL|egress_lossless_pool]",
"size":"0",
"static_th":"12766208"
},
"egress_lossy_profile": {
"pool":"[BUFFER_POOL|egress_lossy_pool]",
"size":"1518",
"dynamic_th":"3"
}
},
{%- endmacro %}

View File

@ -0,0 +1,45 @@
{%- set default_cable = '300m' %}
{%- macro generate_port_lists(PORT_ALL) %}
{# Generate list of ports #}
{% for port_idx in range(0,32) %}
{% if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{% endif %}
{% endfor %}
{%- endmacro %}
{%- macro generate_buffer_pool_and_profiles() %}
"BUFFER_POOL": {
"ingress_lossless_pool": {
"size": "12766208",
"type": "ingress",
"mode": "dynamic"
},
"egress_lossless_pool": {
"size": "12766208",
"type": "egress",
"mode": "static"
},
"egress_lossy_pool": {
"size": "7326924",
"type": "egress",
"mode": "dynamic"
}
},
"BUFFER_PROFILE": {
"ingress_lossy_profile": {
"pool":"[BUFFER_POOL|ingress_lossless_pool]",
"size":"0",
"dynamic_th":"3"
},
"egress_lossless_profile": {
"pool":"[BUFFER_POOL|egress_lossless_pool]",
"size":"0",
"static_th":"12766208"
},
"egress_lossy_profile": {
"pool":"[BUFFER_POOL|egress_lossy_pool]",
"size":"1518",
"dynamic_th":"3"
}
},
{%- endmacro %}

View File

@ -0,0 +1,17 @@
# PG lossless profiles.
# speed cable size xon xoff threshold xon_offset
10000 5m 56368 18432 55120 -3 2496
25000 5m 56368 18432 55120 -3 2496
40000 5m 56368 18432 55120 -3 2496
50000 5m 56368 18432 55120 -3 2496
100000 5m 56368 18432 55120 -3 2496
10000 40m 56368 18432 55120 -3 2496
25000 40m 56368 18432 55120 -3 2496
40000 40m 56368 18432 55120 -3 2496
50000 40m 56368 18432 55120 -3 2496
100000 40m 56368 18432 55120 -3 2496
10000 300m 56368 18432 55120 -3 2496
25000 300m 56368 18432 55120 -3 2496
40000 300m 56368 18432 55120 -3 2496
50000 300m 56368 18432 55120 -3 2496
100000 300m 56368 18432 55120 -3 2496

View File

@ -0,0 +1,33 @@
# name lanes alias index speed
Ethernet0 25,26,27,28 fortyGigE0/0 0 40000
Ethernet4 29,30,31,32 fortyGigE0/4 1 40000
Ethernet8 33,34,35,36 fortyGigE0/8 2 40000
Ethernet12 37,38,39,40 fortyGigE0/12 3 40000
Ethernet16 45,46,47,48 fortyGigE0/16 4 40000
Ethernet20 41,42,43,44 fortyGigE0/20 5 40000
Ethernet24 1,2,3,4 fortyGigE0/24 6 40000
Ethernet28 5,6,7,8 fortyGigE0/28 7 40000
Ethernet32 13,14,15,16 fortyGigE0/32 8 40000
Ethernet36 9,10,11,12 fortyGigE0/36 9 40000
Ethernet40 17,18,19,20 fortyGigE0/40 10 40000
Ethernet44 21,22,23,24 fortyGigE0/44 11 40000
Ethernet48 53,54,55,56 fortyGigE0/48 12 40000
Ethernet52 49,50,51,52 fortyGigE0/52 13 40000
Ethernet56 57,58,59,60 fortyGigE0/56 14 40000
Ethernet60 61,62,63,64 fortyGigE0/60 15 40000
Ethernet64 69,70,71,72 fortyGigE0/64 16 40000
Ethernet68 65,66,67,68 fortyGigE0/68 17 40000
Ethernet72 73,74,75,76 fortyGigE0/72 18 40000
Ethernet76 77,78,79,80 fortyGigE0/76 19 40000
Ethernet80 109,110,111,112 fortyGigE0/80 20 40000
Ethernet84 105,106,107,108 fortyGigE0/84 21 40000
Ethernet88 113,114,115,116 fortyGigE0/88 22 40000
Ethernet92 117,118,119,120 fortyGigE0/92 23 40000
Ethernet96 125,126,127,128 fortyGigE0/96 24 40000
Ethernet100 121,122,123,124 fortyGigE0/100 25 40000
Ethernet104 81,82,83,84 fortyGigE0/104 26 40000
Ethernet108 85,86,87,88 fortyGigE0/108 27 40000
Ethernet112 93,94,95,96 fortyGigE0/112 28 40000
Ethernet116 89,90,91,92 fortyGigE0/116 29 40000
Ethernet120 101,102,103,104 fortyGigE0/120 30 40000
Ethernet124 97,98,99,100 fortyGigE0/124 31 40000

View File

@ -0,0 +1 @@
{%- include 'qos_config.j2' %}

View File

@ -0,0 +1,2 @@
SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/td2-s6000-32x40G.config.bcm
SAI_NUM_ECMP_MEMBERS=32

View File

@ -0,0 +1,646 @@
# Old LPM only configuration
# l2_mem_entries=163840
# l3_mem_entries=90112
# l3_alpm_enable=0
# ipv6_lpm_128b_enable=0
#
# ALPM enable
l3_alpm_enable=2
ipv6_lpm_128b_enable=1
l2_mem_entries=32768
l3_mem_entries=16384
# From old config file
os=unix
higig2_hdr_mode=1
# Parity
parity_correction=1
parity_enable=1
stat_if_parity_enable=0
#
bcm_num_cos=8
bcm_stat_interval=2000000
l2xmsg_hostbuf_size=8192
l2xmsg_mode=1
lls_num_l2uc=12
max_vp_lags=0
miim_intr_enable=0
mmu_lossless=0
module_64ports=0
schan_intr_enable=0
stable_size=0x2000000
tdma_timeout_usec=5000000
pbmp_oversubscribe=0x000007fffffffffffffffffffffffffe
pbmp_xport_xe=0x000007fffffffffffffffffffffffffe
# Ports configuration
# xe0 (40G)
portmap_1=25:40
xgxs_rx_lane_map_1=0x213
xgxs_tx_lane_map_1=0x2031
phy_xaui_rx_polarity_flip_1=0xe
phy_xaui_tx_polarity_flip_1=0x2
serdes_driver_current_lane0_xe0=0x5
serdes_driver_current_lane1_xe0=0x5
serdes_driver_current_lane2_xe0=0x5
serdes_driver_current_lane3_xe0=0x5
serdes_pre_driver_current_lane0_xe0=0x5
serdes_pre_driver_current_lane1_xe0=0x5
serdes_pre_driver_current_lane2_xe0=0x5
serdes_pre_driver_current_lane3_xe0=0x5
serdes_preemphasis_lane0_xe0=0xcad0
serdes_preemphasis_lane1_xe0=0xc6e0
serdes_preemphasis_lane2_xe0=0xc6e0
serdes_preemphasis_lane3_xe0=0xd2b0
# xe1 (40G)
portmap_2=29:40
xgxs_rx_lane_map_2=0x213
xgxs_tx_lane_map_2=0x213
phy_xaui_rx_polarity_flip_2=0xc
phy_xaui_tx_polarity_flip_2=0x9
serdes_driver_current_lane0_xe1=0x6
serdes_driver_current_lane1_xe1=0x7
serdes_driver_current_lane2_xe1=0x6
serdes_driver_current_lane3_xe1=0x6
serdes_pre_driver_current_lane0_xe1=0x6
serdes_pre_driver_current_lane1_xe1=0x7
serdes_pre_driver_current_lane2_xe1=0x6
serdes_pre_driver_current_lane3_xe1=0x6
serdes_preemphasis_lane0_xe1=0xc2f0
serdes_preemphasis_lane1_xe1=0xd2b0
serdes_preemphasis_lane2_xe1=0xc6e0
serdes_preemphasis_lane3_xe1=0xc2f0
# xe2 (40G)
portmap_3=33:40
xgxs_rx_lane_map_3=0x213
xgxs_tx_lane_map_3=0x132
phy_xaui_rx_polarity_flip_3=0xe
phy_xaui_tx_polarity_flip_3=0x2
serdes_driver_current_lane0_xe2=0x4
serdes_driver_current_lane1_xe2=0x4
serdes_driver_current_lane2_xe2=0x4
serdes_driver_current_lane3_xe2=0x4
serdes_pre_driver_current_lane0_xe2=0x4
serdes_pre_driver_current_lane1_xe2=0x4
serdes_pre_driver_current_lane2_xe2=0x4
serdes_pre_driver_current_lane3_xe2=0x4
serdes_preemphasis_lane0_xe2=0xc6e0
serdes_preemphasis_lane1_xe2=0xc6e0
serdes_preemphasis_lane2_xe2=0xc6e0
serdes_preemphasis_lane3_xe2=0xc6e0
# xe3 (40G)
portmap_4=37:40
xgxs_rx_lane_map_4=0x213
xgxs_tx_lane_map_4=0x1203
phy_xaui_rx_polarity_flip_4=0x3
phy_xaui_tx_polarity_flip_4=0xe
serdes_driver_current_lane0_xe3=0x4
serdes_driver_current_lane1_xe3=0x4
serdes_driver_current_lane2_xe3=0x4
serdes_driver_current_lane3_xe3=0x4
serdes_pre_driver_current_lane0_xe3=0x4
serdes_pre_driver_current_lane1_xe3=0x4
serdes_pre_driver_current_lane2_xe3=0x4
serdes_pre_driver_current_lane3_xe3=0x4
serdes_preemphasis_lane0_xe3=0xcad0
serdes_preemphasis_lane1_xe3=0xcad0
serdes_preemphasis_lane2_xe3=0xc2f0
serdes_preemphasis_lane3_xe3=0xc2f0
# xe4 (40G)
portmap_5=45:40
xgxs_rx_lane_map_5=0x213
xgxs_tx_lane_map_5=0x213
phy_xaui_rx_polarity_flip_5=0xe
phy_xaui_tx_polarity_flip_5=0x8
serdes_driver_current_lane0_xe4=0x4
serdes_driver_current_lane1_xe4=0x4
serdes_driver_current_lane2_xe4=0x4
serdes_driver_current_lane3_xe4=0x4
serdes_pre_driver_current_lane0_xe4=0x4
serdes_pre_driver_current_lane1_xe4=0x4
serdes_pre_driver_current_lane2_xe4=0x4
serdes_pre_driver_current_lane3_xe4=0x4
serdes_preemphasis_lane0_xe4=0xc2f0
serdes_preemphasis_lane1_xe4=0xc2f0
serdes_preemphasis_lane2_xe4=0xc2f0
serdes_preemphasis_lane3_xe4=0xc2f0
# xe5 (40G)
portmap_6=41:40
xgxs_rx_lane_map_6=0x213
xgxs_tx_lane_map_6=0x3021
phy_xaui_rx_polarity_flip_6=0x3
phy_xaui_tx_polarity_flip_6=0xb
serdes_driver_current_lane0_xe5=0x4
serdes_driver_current_lane1_xe5=0x4
serdes_driver_current_lane2_xe5=0x4
serdes_driver_current_lane3_xe5=0x4
serdes_pre_driver_current_lane0_xe5=0x4
serdes_pre_driver_current_lane1_xe5=0x4
serdes_pre_driver_current_lane2_xe5=0x4
serdes_pre_driver_current_lane3_xe5=0x4
serdes_preemphasis_lane0_xe5=0xc6e0
serdes_preemphasis_lane1_xe5=0xc2f0
serdes_preemphasis_lane2_xe5=0xc2f0
serdes_preemphasis_lane3_xe5=0xcad0
# xe6 (40G)
portmap_7=1:40
xgxs_rx_lane_map_7=0x213
xgxs_tx_lane_map_7=0x2031
phy_xaui_rx_polarity_flip_7=0xe
phy_xaui_tx_polarity_flip_7=0xd
serdes_driver_current_lane0_xe6=0x5
serdes_driver_current_lane1_xe6=0x5
serdes_driver_current_lane2_xe6=0x5
serdes_driver_current_lane3_xe6=0x5
serdes_pre_driver_current_lane0_xe6=0x5
serdes_pre_driver_current_lane1_xe6=0x5
serdes_pre_driver_current_lane2_xe6=0x5
serdes_pre_driver_current_lane3_xe6=0x5
serdes_preemphasis_lane0_xe6=0xc6e0
serdes_preemphasis_lane1_xe6=0xcad0
serdes_preemphasis_lane2_xe6=0xc6e0
serdes_preemphasis_lane3_xe6=0xcad0
# xe7 (40G)
portmap_8=5:40
xgxs_rx_lane_map_8=0x213
xgxs_tx_lane_map_8=0x1203
phy_xaui_rx_polarity_flip_8=0xc
phy_xaui_tx_polarity_flip_8=0x1
serdes_driver_current_lane0_xe7=0x4
serdes_driver_current_lane1_xe7=0x4
serdes_driver_current_lane2_xe7=0x4
serdes_driver_current_lane3_xe7=0x4
serdes_pre_driver_current_lane0_xe7=0x4
serdes_pre_driver_current_lane1_xe7=0x4
serdes_pre_driver_current_lane2_xe7=0x4
serdes_pre_driver_current_lane3_xe7=0x4
serdes_preemphasis_lane0_xe7=0xc6e0
serdes_preemphasis_lane1_xe7=0xc6e0
serdes_preemphasis_lane2_xe7=0xc6e0
serdes_preemphasis_lane3_xe7=0xc6e0
# xe8 (40G)
portmap_9=13:40
xgxs_rx_lane_map_9=0x213
xgxs_tx_lane_map_9=0x132
phy_xaui_rx_polarity_flip_9=0xe
phy_xaui_tx_polarity_flip_9=0x0
serdes_driver_current_lane0_xe8=0x2
serdes_driver_current_lane1_xe8=0x3
serdes_driver_current_lane2_xe8=0x2
serdes_driver_current_lane3_xe8=0x2
serdes_pre_driver_current_lane0_xe8=0x2
serdes_pre_driver_current_lane1_xe8=0x3
serdes_pre_driver_current_lane2_xe8=0x2
serdes_pre_driver_current_lane3_xe8=0x2
serdes_preemphasis_lane0_xe8=0xb270
serdes_preemphasis_lane1_xe8=0xbb10
serdes_preemphasis_lane2_xe8=0xb720
serdes_preemphasis_lane3_xe8=0xb720
# xe9 (40G)
portmap_10=9:40
xgxs_rx_lane_map_10=0x3120
xgxs_tx_lane_map_10=0x3021
phy_xaui_rx_polarity_flip_10=0x0
phy_xaui_tx_polarity_flip_10=0x4
serdes_driver_current_lane0_xe9=0x3
serdes_driver_current_lane1_xe9=0x3
serdes_driver_current_lane2_xe9=0x3
serdes_driver_current_lane3_xe9=0x3
serdes_pre_driver_current_lane0_xe9=0x3
serdes_pre_driver_current_lane1_xe9=0x3
serdes_pre_driver_current_lane2_xe9=0x3
serdes_pre_driver_current_lane3_xe9=0x3
serdes_preemphasis_lane0_xe9=0xc2f0
serdes_preemphasis_lane1_xe9=0xc6e0
serdes_preemphasis_lane2_xe9=0xbf00
serdes_preemphasis_lane3_xe9=0xc2f0
# xe10 (40G)
portmap_11=17:40
xgxs_rx_lane_map_11=0x213
xgxs_tx_lane_map_11=0x132
phy_xaui_rx_polarity_flip_11=0xe
phy_xaui_tx_polarity_flip_11=0x0
serdes_driver_current_lane0_xe10=0x2
serdes_driver_current_lane1_xe10=0x2
serdes_driver_current_lane2_xe10=0x2
serdes_driver_current_lane3_xe10=0x2
serdes_pre_driver_current_lane0_xe10=0x2
serdes_pre_driver_current_lane1_xe10=0x2
serdes_pre_driver_current_lane2_xe10=0x2
serdes_pre_driver_current_lane3_xe10=0x2
serdes_preemphasis_lane0_xe10=0xb330
serdes_preemphasis_lane1_xe10=0xbb10
serdes_preemphasis_lane2_xe10=0xbb10
serdes_preemphasis_lane3_xe10=0xbb10
# xe11 (40G)
portmap_12=21:40
xgxs_rx_lane_map_12=0x123
xgxs_tx_lane_map_12=0x1203
phy_xaui_rx_polarity_flip_12=0xc
phy_xaui_tx_polarity_flip_12=0xe
serdes_driver_current_lane0_xe11=0x2
serdes_driver_current_lane1_xe11=0x2
serdes_driver_current_lane2_xe11=0x2
serdes_driver_current_lane3_xe11=0x2
serdes_pre_driver_current_lane0_xe11=0x2
serdes_pre_driver_current_lane1_xe11=0x2
serdes_pre_driver_current_lane2_xe11=0x2
serdes_pre_driver_current_lane3_xe11=0x2
serdes_preemphasis_lane0_xe11=0xb330
serdes_preemphasis_lane1_xe11=0xb330
serdes_preemphasis_lane2_xe11=0xb330
serdes_preemphasis_lane3_xe11=0xb330
# xe12 (40G)
portmap_13=53:40
xgxs_rx_lane_map_13=0x213
xgxs_tx_lane_map_13=0x231
phy_xaui_rx_polarity_flip_13=0x1
phy_xaui_tx_polarity_flip_13=0x0
serdes_driver_current_lane0_xe12=0x2
serdes_driver_current_lane1_xe12=0x2
serdes_driver_current_lane2_xe12=0x2
serdes_driver_current_lane3_xe12=0x2
serdes_pre_driver_current_lane0_xe12=0x2
serdes_pre_driver_current_lane1_xe12=0x2
serdes_pre_driver_current_lane2_xe12=0x2
serdes_pre_driver_current_lane3_xe12=0x2
serdes_preemphasis_lane0_xe12=0xaf40
serdes_preemphasis_lane1_xe12=0xaf40
serdes_preemphasis_lane2_xe12=0xaf40
serdes_preemphasis_lane3_xe12=0xaf40
# xe13 (40G)
portmap_14=49:40
xgxs_rx_lane_map_14=0x1302
xgxs_tx_lane_map_14=0x2031
phy_xaui_rx_polarity_flip_14=0xb
phy_xaui_tx_polarity_flip_14=0x3
serdes_driver_current_lane0_xe13=0x2
serdes_driver_current_lane1_xe13=0x2
serdes_driver_current_lane2_xe13=0x2
serdes_driver_current_lane3_xe13=0x2
serdes_pre_driver_current_lane0_xe13=0x2
serdes_pre_driver_current_lane1_xe13=0x2
serdes_pre_driver_current_lane2_xe13=0x2
serdes_pre_driver_current_lane3_xe13=0x2
serdes_preemphasis_lane0_xe13=0xa760
serdes_preemphasis_lane1_xe13=0xa760
serdes_preemphasis_lane2_xe13=0xa760
serdes_preemphasis_lane3_xe13=0xa760
# xe14 (40G)
portmap_15=57:40
xgxs_rx_lane_map_15=0x213
xgxs_tx_lane_map_15=0x2031
phy_xaui_rx_polarity_flip_15=0x1
phy_xaui_tx_polarity_flip_15=0x0
serdes_driver_current_lane0_xe14=0x1
serdes_driver_current_lane1_xe14=0x1
serdes_driver_current_lane2_xe14=0x1
serdes_driver_current_lane3_xe14=0x1
serdes_pre_driver_current_lane0_xe14=0x1
serdes_pre_driver_current_lane1_xe14=0x1
serdes_pre_driver_current_lane2_xe14=0x1
serdes_pre_driver_current_lane3_xe14=0x1
serdes_preemphasis_lane0_xe14=0xa760
serdes_preemphasis_lane1_xe14=0xa760
serdes_preemphasis_lane2_xe14=0xa760
serdes_preemphasis_lane3_xe14=0xa760
# xe15 (40G)
portmap_16=61:40
xgxs_rx_lane_map_16=0x132
xgxs_tx_lane_map_16=0x213
phy_xaui_rx_polarity_flip_16=0x0
phy_xaui_tx_polarity_flip_16=0x0
serdes_driver_current_lane0_xe15=0x2
serdes_driver_current_lane1_xe15=0x2
serdes_driver_current_lane2_xe15=0x2
serdes_driver_current_lane3_xe15=0x2
serdes_pre_driver_current_lane0_xe15=0x2
serdes_pre_driver_current_lane1_xe15=0x2
serdes_pre_driver_current_lane2_xe15=0x2
serdes_pre_driver_current_lane3_xe15=0x2
serdes_preemphasis_lane0_xe15=0xa760
serdes_preemphasis_lane1_xe15=0xa760
serdes_preemphasis_lane2_xe15=0xa760
serdes_preemphasis_lane3_xe15=0xa760
# xe16 (40G)
portmap_17=69:40
xgxs_rx_lane_map_17=0x213
xgxs_tx_lane_map_17=0x2130
phy_xaui_rx_polarity_flip_17=0x1
phy_xaui_tx_polarity_flip_17=0xf
serdes_driver_current_lane0_xe16=0x1
serdes_driver_current_lane1_xe16=0x1
serdes_driver_current_lane2_xe16=0x1
serdes_driver_current_lane3_xe16=0x1
serdes_pre_driver_current_lane0_xe16=0x1
serdes_pre_driver_current_lane1_xe16=0x1
serdes_pre_driver_current_lane2_xe16=0x1
serdes_pre_driver_current_lane3_xe16=0x1
serdes_preemphasis_lane0_xe16=0xa760
serdes_preemphasis_lane1_xe16=0xa760
serdes_preemphasis_lane2_xe16=0xa760
serdes_preemphasis_lane3_xe16=0xa760
# xe17 (40G)
portmap_18=65:40
xgxs_rx_lane_map_18=0x132
xgxs_tx_lane_map_18=0x2031
phy_xaui_rx_polarity_flip_18=0x3
phy_xaui_tx_polarity_flip_18=0x9
serdes_driver_current_lane0_xe17=0x1
serdes_driver_current_lane1_xe17=0x1
serdes_driver_current_lane2_xe17=0x1
serdes_driver_current_lane3_xe17=0x1
serdes_pre_driver_current_lane0_xe17=0x1
serdes_pre_driver_current_lane1_xe17=0x1
serdes_pre_driver_current_lane2_xe17=0x1
serdes_pre_driver_current_lane3_xe17=0x1
serdes_preemphasis_lane0_xe17=0xa370
serdes_preemphasis_lane1_xe17=0xa370
serdes_preemphasis_lane2_xe17=0xa370
serdes_preemphasis_lane3_xe17=0xa370
# xe18 (40G)
portmap_19=73:40
xgxs_rx_lane_map_19=0x213
xgxs_tx_lane_map_19=0x2031
phy_xaui_rx_polarity_flip_19=0x1
phy_xaui_tx_polarity_flip_19=0x0
serdes_driver_current_lane0_xe18=0x2
serdes_driver_current_lane1_xe18=0x2
serdes_driver_current_lane2_xe18=0x2
serdes_driver_current_lane3_xe18=0x2
serdes_pre_driver_current_lane0_xe18=0x2
serdes_pre_driver_current_lane1_xe18=0x2
serdes_pre_driver_current_lane2_xe18=0x2
serdes_pre_driver_current_lane3_xe18=0x2
serdes_preemphasis_lane0_xe18=0xa760
serdes_preemphasis_lane1_xe18=0xa760
serdes_preemphasis_lane2_xe18=0xa760
serdes_preemphasis_lane3_xe18=0xa760
# xe19 (40G)
portmap_20=77:40
xgxs_rx_lane_map_20=0x123
xgxs_tx_lane_map_20=0x1203
phy_xaui_rx_polarity_flip_20=0x3
phy_xaui_tx_polarity_flip_20=0xe
serdes_driver_current_lane0_xe19=0x2
serdes_driver_current_lane1_xe19=0x2
serdes_driver_current_lane2_xe19=0x2
serdes_driver_current_lane3_xe19=0x2
serdes_pre_driver_current_lane0_xe19=0x2
serdes_pre_driver_current_lane1_xe19=0x2
serdes_pre_driver_current_lane2_xe19=0x2
serdes_pre_driver_current_lane3_xe19=0x2
serdes_preemphasis_lane0_xe19=0xaf40
serdes_preemphasis_lane1_xe19=0xaf40
serdes_preemphasis_lane2_xe19=0xaf40
serdes_preemphasis_lane3_xe19=0xaf40
# xe20 (40G)
portmap_21=109:40
xgxs_rx_lane_map_21=0x132
xgxs_tx_lane_map_21=0x132
phy_xaui_rx_polarity_flip_21=0x8
phy_xaui_tx_polarity_flip_21=0x0
serdes_driver_current_lane0_xe20=0x1
serdes_driver_current_lane1_xe20=0x1
serdes_driver_current_lane2_xe20=0x1
serdes_driver_current_lane3_xe20=0x2
serdes_pre_driver_current_lane0_xe20=0x1
serdes_pre_driver_current_lane1_xe20=0x1
serdes_pre_driver_current_lane2_xe20=0x1
serdes_pre_driver_current_lane3_xe20=0x2
serdes_preemphasis_lane0_xe20=0xb330
serdes_preemphasis_lane1_xe20=0xb330
serdes_preemphasis_lane2_xe20=0xb330
serdes_preemphasis_lane3_xe20=0xbff0
# xe21 (40G)
portmap_22=105:40
xgxs_rx_lane_map_22=0x1320
xgxs_tx_lane_map_22=0x3021
phy_xaui_rx_polarity_flip_22=0xd
phy_xaui_tx_polarity_flip_22=0xb
serdes_driver_current_lane0_xe21=0x1
serdes_driver_current_lane1_xe21=0x1
serdes_driver_current_lane2_xe21=0x1
serdes_driver_current_lane3_xe21=0x1
serdes_pre_driver_current_lane0_xe21=0x1
serdes_pre_driver_current_lane1_xe21=0x1
serdes_pre_driver_current_lane2_xe21=0x1
serdes_pre_driver_current_lane3_xe21=0x1
serdes_preemphasis_lane0_xe21=0xb330
serdes_preemphasis_lane1_xe21=0xb330
serdes_preemphasis_lane2_xe21=0xb330
serdes_preemphasis_lane3_xe21=0xb330
# xe22 (40G)
portmap_23=113:40
xgxs_rx_lane_map_23=0x132
xgxs_tx_lane_map_23=0x132
phy_xaui_rx_polarity_flip_23=0x8
phy_xaui_tx_polarity_flip_23=0x0
serdes_driver_current_lane0_xe22=0x1
serdes_driver_current_lane1_xe22=0x1
serdes_driver_current_lane2_xe22=0x1
serdes_driver_current_lane3_xe22=0x1
serdes_pre_driver_current_lane0_xe22=0x1
serdes_pre_driver_current_lane1_xe22=0x1
serdes_pre_driver_current_lane2_xe22=0x1
serdes_pre_driver_current_lane3_xe22=0x1
serdes_preemphasis_lane0_xe22=0xbb10
serdes_preemphasis_lane1_xe22=0xbb10
serdes_preemphasis_lane2_xe22=0xbb10
serdes_preemphasis_lane3_xe22=0xc2f0
# xe23 (40G)
portmap_24=117:40
xgxs_rx_lane_map_24=0x231
xgxs_tx_lane_map_24=0x1203
phy_xaui_rx_polarity_flip_24=0x3
phy_xaui_tx_polarity_flip_24=0xe
serdes_driver_current_lane0_xe23=0x3
serdes_driver_current_lane1_xe23=0x5
serdes_driver_current_lane2_xe23=0x3
serdes_driver_current_lane3_xe23=0x3
serdes_pre_driver_current_lane0_xe23=0x3
serdes_pre_driver_current_lane1_xe23=0x5
serdes_pre_driver_current_lane2_xe23=0x3
serdes_pre_driver_current_lane3_xe23=0x3
serdes_preemphasis_lane0_xe23=0xc6e0
serdes_preemphasis_lane1_xe23=0xc6e0
serdes_preemphasis_lane2_xe23=0xc6e0
serdes_preemphasis_lane3_xe23=0xc6e0
# xe24 (40G)
portmap_25=125:40
xgxs_rx_lane_map_25=0x132
xgxs_tx_lane_map_25=0x132
phy_xaui_rx_polarity_flip_25=0x8
phy_xaui_tx_polarity_flip_25=0x0
serdes_driver_current_lane0_xe24=0x4
serdes_driver_current_lane1_xe24=0x4
serdes_driver_current_lane2_xe24=0x4
serdes_driver_current_lane3_xe24=0x4
serdes_pre_driver_current_lane0_xe24=0x4
serdes_pre_driver_current_lane1_xe24=0x4
serdes_pre_driver_current_lane2_xe24=0x4
serdes_pre_driver_current_lane3_xe24=0x4
serdes_preemphasis_lane0_xe24=0xc6e0
serdes_preemphasis_lane1_xe24=0xc6e0
serdes_preemphasis_lane2_xe24=0xc6e0
serdes_preemphasis_lane3_xe24=0xcec0
# xe25 (40G)
portmap_26=121:40
xgxs_rx_lane_map_26=0x1320
xgxs_tx_lane_map_26=0x3021
phy_xaui_rx_polarity_flip_26=0xd
phy_xaui_tx_polarity_flip_26=0xb
serdes_driver_current_lane0_xe25=0x4
serdes_driver_current_lane1_xe25=0x4
serdes_driver_current_lane2_xe25=0x4
serdes_driver_current_lane3_xe25=0x4
serdes_pre_driver_current_lane0_xe25=0x4
serdes_pre_driver_current_lane1_xe25=0x4
serdes_pre_driver_current_lane2_xe25=0x4
serdes_pre_driver_current_lane3_xe25=0x4
serdes_preemphasis_lane0_xe25=0xc6e0
serdes_preemphasis_lane1_xe25=0xc6e0
serdes_preemphasis_lane2_xe25=0xc6e0
serdes_preemphasis_lane3_xe25=0xc6e0
# xe26 (40G)
portmap_27=81:40
xgxs_rx_lane_map_27=0x1320
xgxs_tx_lane_map_27=0x2031
phy_xaui_rx_polarity_flip_27=0x1
phy_xaui_tx_polarity_flip_27=0x2
serdes_driver_current_lane0_xe26=0x2
serdes_driver_current_lane1_xe26=0x2
serdes_driver_current_lane2_xe26=0x2
serdes_driver_current_lane3_xe26=0x2
serdes_pre_driver_current_lane0_xe26=0x2
serdes_pre_driver_current_lane1_xe26=0x2
serdes_pre_driver_current_lane2_xe26=0x2
serdes_pre_driver_current_lane3_xe26=0x2
serdes_preemphasis_lane0_xe26=0xbb10
serdes_preemphasis_lane1_xe26=0xbb10
serdes_preemphasis_lane2_xe26=0xbf00
serdes_preemphasis_lane3_xe26=0xbb10
# xe27 (40G)
portmap_28=85:40
xgxs_rx_lane_map_28=0x213
xgxs_tx_lane_map_28=0x1203
phy_xaui_rx_polarity_flip_28=0xc
phy_xaui_tx_polarity_flip_28=0xe
serdes_driver_current_lane0_xe27=0x4
serdes_driver_current_lane1_xe27=0x5
serdes_driver_current_lane2_xe27=0x4
serdes_driver_current_lane3_xe27=0x5
serdes_pre_driver_current_lane0_xe27=0x4
serdes_pre_driver_current_lane1_xe27=0x5
serdes_pre_driver_current_lane2_xe27=0x4
serdes_pre_driver_current_lane3_xe27=0x5
serdes_preemphasis_lane0_xe27=0xc2f0
serdes_preemphasis_lane1_xe27=0xc6e0
serdes_preemphasis_lane2_xe27=0xc6e0
serdes_preemphasis_lane3_xe27=0xc6e0
# xe28 (40G)
portmap_29=93:40
xgxs_rx_lane_map_29=0x1320
xgxs_tx_lane_map_29=0x2031
phy_xaui_rx_polarity_flip_29=0x1
phy_xaui_tx_polarity_flip_29=0x2
serdes_driver_current_lane0_xe28=0x4
serdes_driver_current_lane1_xe28=0x4
serdes_driver_current_lane2_xe28=0x4
serdes_driver_current_lane3_xe28=0x4
serdes_pre_driver_current_lane0_xe28=0x4
serdes_pre_driver_current_lane1_xe28=0x4
serdes_pre_driver_current_lane2_xe28=0x4
serdes_pre_driver_current_lane3_xe28=0x4
serdes_preemphasis_lane0_xe28=0xc2f0
serdes_preemphasis_lane1_xe28=0xc2f0
serdes_preemphasis_lane2_xe28=0xc2f0
serdes_preemphasis_lane3_xe28=0xc2f0
# xe29 (40G)
portmap_30=89:40
xgxs_rx_lane_map_30=0x1320
xgxs_tx_lane_map_30=0x3021
phy_xaui_rx_polarity_flip_30=0x2
phy_xaui_tx_polarity_flip_30=0xb
serdes_driver_current_lane0_xe29=0x4
serdes_driver_current_lane1_xe29=0x4
serdes_driver_current_lane2_xe29=0x4
serdes_driver_current_lane3_xe29=0x4
serdes_pre_driver_current_lane0_xe29=0x4
serdes_pre_driver_current_lane1_xe29=0x4
serdes_pre_driver_current_lane2_xe29=0x4
serdes_pre_driver_current_lane3_xe29=0x4
serdes_preemphasis_lane0_xe29=0xcad0
serdes_preemphasis_lane1_xe29=0xc6e0
serdes_preemphasis_lane2_xe29=0xc6e0
serdes_preemphasis_lane3_xe29=0xc6e0
# xe30 (40G)
portmap_31=101:40
xgxs_rx_lane_map_31=0x1320
xgxs_tx_lane_map_31=0x1203
phy_xaui_rx_polarity_flip_31=0x1
phy_xaui_tx_polarity_flip_31=0x6
serdes_driver_current_lane0_xe30=0x6
serdes_driver_current_lane1_xe30=0x6
serdes_driver_current_lane2_xe30=0x6
serdes_driver_current_lane3_xe30=0x7
serdes_pre_driver_current_lane0_xe30=0x6
serdes_pre_driver_current_lane1_xe30=0x6
serdes_pre_driver_current_lane2_xe30=0x6
serdes_pre_driver_current_lane3_xe30=0x7
serdes_preemphasis_lane0_xe30=0xcec0
serdes_preemphasis_lane1_xe30=0xcec0
serdes_preemphasis_lane2_xe30=0xcad0
serdes_preemphasis_lane3_xe30=0xc6e0
# xe31 (40G)
portmap_32=97:40
xgxs_rx_lane_map_32=0x213
xgxs_tx_lane_map_32=0x2031
phy_xaui_rx_polarity_flip_32=0xc
phy_xaui_tx_polarity_flip_32=0x3
serdes_driver_current_lane0_xe31=0x5
serdes_driver_current_lane1_xe31=0x5
serdes_driver_current_lane2_xe31=0x5
serdes_driver_current_lane3_xe31=0x5
serdes_pre_driver_current_lane0_xe31=0x5
serdes_pre_driver_current_lane1_xe31=0x5
serdes_pre_driver_current_lane2_xe31=0x5
serdes_pre_driver_current_lane3_xe31=0x5
serdes_preemphasis_lane0_xe31=0xcad0
serdes_preemphasis_lane1_xe31=0xcad0
serdes_preemphasis_lane2_xe31=0xcad0
serdes_preemphasis_lane3_xe31=0xcad0

View File

@ -0,0 +1,3 @@
{%- set default_topo = 't1' %}
{%- include 'buffers_config.j2' %}

View File

@ -0,0 +1,45 @@
{%- set default_cable = '300m' %}
{%- macro generate_port_lists(PORT_ALL) %}
{# Generate list of ports #}
{% for port_idx in range(0,32) %}
{% if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{% endif %}
{% endfor %}
{%- endmacro %}
{%- macro generate_buffer_pool_and_profiles() %}
"BUFFER_POOL": {
"ingress_lossless_pool": {
"size": "12766208",
"type": "ingress",
"mode": "dynamic"
},
"egress_lossless_pool": {
"size": "12766208",
"type": "egress",
"mode": "static"
},
"egress_lossy_pool": {
"size": "7326924",
"type": "egress",
"mode": "dynamic"
}
},
"BUFFER_PROFILE": {
"ingress_lossy_profile": {
"pool":"[BUFFER_POOL|ingress_lossless_pool]",
"size":"0",
"dynamic_th":"3"
},
"egress_lossless_profile": {
"pool":"[BUFFER_POOL|egress_lossless_pool]",
"size":"0",
"static_th":"12766208"
},
"egress_lossy_profile": {
"pool":"[BUFFER_POOL|egress_lossy_pool]",
"size":"1518",
"dynamic_th":"3"
}
},
{%- endmacro %}

View File

@ -0,0 +1,45 @@
{%- set default_cable = '300m' %}
{%- macro generate_port_lists(PORT_ALL) %}
{# Generate list of ports #}
{% for port_idx in range(0,32) %}
{% if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{% endif %}
{% endfor %}
{%- endmacro %}
{%- macro generate_buffer_pool_and_profiles() %}
"BUFFER_POOL": {
"ingress_lossless_pool": {
"size": "12766208",
"type": "ingress",
"mode": "dynamic"
},
"egress_lossless_pool": {
"size": "12766208",
"type": "egress",
"mode": "static"
},
"egress_lossy_pool": {
"size": "7326924",
"type": "egress",
"mode": "dynamic"
}
},
"BUFFER_PROFILE": {
"ingress_lossy_profile": {
"pool":"[BUFFER_POOL|ingress_lossless_pool]",
"size":"0",
"dynamic_th":"3"
},
"egress_lossless_profile": {
"pool":"[BUFFER_POOL|egress_lossless_pool]",
"size":"0",
"static_th":"12766208"
},
"egress_lossy_profile": {
"pool":"[BUFFER_POOL|egress_lossy_pool]",
"size":"1518",
"dynamic_th":"3"
}
},
{%- endmacro %}

View File

@ -0,0 +1,45 @@
{%- set default_cable = '300m' %}
{%- macro generate_port_lists(PORT_ALL) %}
{# Generate list of ports #}
{% for port_idx in range(0,32) %}
{% if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{% endif %}
{% endfor %}
{%- endmacro %}
{%- macro generate_buffer_pool_and_profiles() %}
"BUFFER_POOL": {
"ingress_lossless_pool": {
"size": "12766208",
"type": "ingress",
"mode": "dynamic"
},
"egress_lossless_pool": {
"size": "12766208",
"type": "egress",
"mode": "static"
},
"egress_lossy_pool": {
"size": "7326924",
"type": "egress",
"mode": "dynamic"
}
},
"BUFFER_PROFILE": {
"ingress_lossy_profile": {
"pool":"[BUFFER_POOL|ingress_lossless_pool]",
"size":"0",
"dynamic_th":"3"
},
"egress_lossless_profile": {
"pool":"[BUFFER_POOL|egress_lossless_pool]",
"size":"0",
"static_th":"12766208"
},
"egress_lossy_profile": {
"pool":"[BUFFER_POOL|egress_lossy_pool]",
"size":"1518",
"dynamic_th":"3"
}
},
{%- endmacro %}

View File

@ -0,0 +1,17 @@
# PG lossless profiles.
# speed cable size xon xoff threshold xon_offset
10000 5m 56368 18432 55120 -3 2496
25000 5m 56368 18432 55120 -3 2496
40000 5m 56368 18432 55120 -3 2496
50000 5m 56368 18432 55120 -3 2496
100000 5m 56368 18432 55120 -3 2496
10000 40m 56368 18432 55120 -3 2496
25000 40m 56368 18432 55120 -3 2496
40000 40m 56368 18432 55120 -3 2496
50000 40m 56368 18432 55120 -3 2496
100000 40m 56368 18432 55120 -3 2496
10000 300m 56368 18432 55120 -3 2496
25000 300m 56368 18432 55120 -3 2496
40000 300m 56368 18432 55120 -3 2496
50000 300m 56368 18432 55120 -3 2496
100000 300m 56368 18432 55120 -3 2496

View File

@ -0,0 +1,33 @@
# name lanes alias index speed
Ethernet0 25,26,27,28 fortyGigE0/0 0 40000
Ethernet4 29,30,31,32 fortyGigE0/4 1 40000
Ethernet8 33,34,35,36 fortyGigE0/8 2 40000
Ethernet12 37,38,39,40 fortyGigE0/12 3 40000
Ethernet16 45,46,47,48 fortyGigE0/16 4 40000
Ethernet20 41,42,43,44 fortyGigE0/20 5 40000
Ethernet24 1,2,3,4 fortyGigE0/24 6 40000
Ethernet28 5,6,7,8 fortyGigE0/28 7 40000
Ethernet32 13,14,15,16 fortyGigE0/32 8 40000
Ethernet36 9,10,11,12 fortyGigE0/36 9 40000
Ethernet40 17,18,19,20 fortyGigE0/40 10 40000
Ethernet44 21,22,23,24 fortyGigE0/44 11 40000
Ethernet48 53,54,55,56 fortyGigE0/48 12 40000
Ethernet52 49,50,51,52 fortyGigE0/52 13 40000
Ethernet56 57,58,59,60 fortyGigE0/56 14 40000
Ethernet60 61,62,63,64 fortyGigE0/60 15 40000
Ethernet64 69,70,71,72 fortyGigE0/64 16 40000
Ethernet68 65,66,67,68 fortyGigE0/68 17 40000
Ethernet72 73,74,75,76 fortyGigE0/72 18 40000
Ethernet76 77,78,79,80 fortyGigE0/76 19 40000
Ethernet80 109,110,111,112 fortyGigE0/80 20 40000
Ethernet84 105,106,107,108 fortyGigE0/84 21 40000
Ethernet88 113,114,115,116 fortyGigE0/88 22 40000
Ethernet92 117,118,119,120 fortyGigE0/92 23 40000
Ethernet96 125,126,127,128 fortyGigE0/96 24 40000
Ethernet100 121,122,123,124 fortyGigE0/100 25 40000
Ethernet104 81,82,83,84 fortyGigE0/104 26 40000
Ethernet108 85,86,87,88 fortyGigE0/108 27 40000
Ethernet112 93,94,95,96 fortyGigE0/112 28 40000
Ethernet116 89,90,91,92 fortyGigE0/116 29 40000
Ethernet120 101,102,103,104 fortyGigE0/120 30 40000
Ethernet124 97,98,99,100 fortyGigE0/124 31 40000

View File

@ -0,0 +1 @@
{%- include 'qos_config.j2' %}

View File

@ -0,0 +1,2 @@
SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/td2-s6000-32x40G.config.bcm
SAI_NUM_ECMP_MEMBERS=32

View File

@ -0,0 +1,646 @@
# Old LPM only configuration
# l2_mem_entries=163840
# l3_mem_entries=90112
# l3_alpm_enable=0
# ipv6_lpm_128b_enable=0
#
# ALPM enable
l3_alpm_enable=2
ipv6_lpm_128b_enable=1
l2_mem_entries=32768
l3_mem_entries=16384
# From old config file
os=unix
higig2_hdr_mode=1
# Parity
parity_correction=1
parity_enable=1
stat_if_parity_enable=0
#
bcm_num_cos=8
bcm_stat_interval=2000000
l2xmsg_hostbuf_size=8192
l2xmsg_mode=1
lls_num_l2uc=12
max_vp_lags=0
miim_intr_enable=0
mmu_lossless=0
module_64ports=0
schan_intr_enable=0
stable_size=0x2000000
tdma_timeout_usec=5000000
pbmp_oversubscribe=0x000007fffffffffffffffffffffffffe
pbmp_xport_xe=0x000007fffffffffffffffffffffffffe
# Ports configuration
# xe0 (40G)
portmap_1=25:40
xgxs_rx_lane_map_1=0x213
xgxs_tx_lane_map_1=0x2031
phy_xaui_rx_polarity_flip_1=0xe
phy_xaui_tx_polarity_flip_1=0x2
serdes_driver_current_lane0_xe0=0x5
serdes_driver_current_lane1_xe0=0x5
serdes_driver_current_lane2_xe0=0x5
serdes_driver_current_lane3_xe0=0x5
serdes_pre_driver_current_lane0_xe0=0x5
serdes_pre_driver_current_lane1_xe0=0x5
serdes_pre_driver_current_lane2_xe0=0x5
serdes_pre_driver_current_lane3_xe0=0x5
serdes_preemphasis_lane0_xe0=0xcad0
serdes_preemphasis_lane1_xe0=0xc6e0
serdes_preemphasis_lane2_xe0=0xc6e0
serdes_preemphasis_lane3_xe0=0xd2b0
# xe1 (40G)
portmap_2=29:40
xgxs_rx_lane_map_2=0x213
xgxs_tx_lane_map_2=0x213
phy_xaui_rx_polarity_flip_2=0xc
phy_xaui_tx_polarity_flip_2=0x9
serdes_driver_current_lane0_xe1=0x6
serdes_driver_current_lane1_xe1=0x7
serdes_driver_current_lane2_xe1=0x6
serdes_driver_current_lane3_xe1=0x6
serdes_pre_driver_current_lane0_xe1=0x6
serdes_pre_driver_current_lane1_xe1=0x7
serdes_pre_driver_current_lane2_xe1=0x6
serdes_pre_driver_current_lane3_xe1=0x6
serdes_preemphasis_lane0_xe1=0xc2f0
serdes_preemphasis_lane1_xe1=0xd2b0
serdes_preemphasis_lane2_xe1=0xc6e0
serdes_preemphasis_lane3_xe1=0xc2f0
# xe2 (40G)
portmap_3=33:40
xgxs_rx_lane_map_3=0x213
xgxs_tx_lane_map_3=0x132
phy_xaui_rx_polarity_flip_3=0xe
phy_xaui_tx_polarity_flip_3=0x2
serdes_driver_current_lane0_xe2=0x4
serdes_driver_current_lane1_xe2=0x4
serdes_driver_current_lane2_xe2=0x4
serdes_driver_current_lane3_xe2=0x4
serdes_pre_driver_current_lane0_xe2=0x4
serdes_pre_driver_current_lane1_xe2=0x4
serdes_pre_driver_current_lane2_xe2=0x4
serdes_pre_driver_current_lane3_xe2=0x4
serdes_preemphasis_lane0_xe2=0xc6e0
serdes_preemphasis_lane1_xe2=0xc6e0
serdes_preemphasis_lane2_xe2=0xc6e0
serdes_preemphasis_lane3_xe2=0xc6e0
# xe3 (40G)
portmap_4=37:40
xgxs_rx_lane_map_4=0x213
xgxs_tx_lane_map_4=0x1203
phy_xaui_rx_polarity_flip_4=0x3
phy_xaui_tx_polarity_flip_4=0xe
serdes_driver_current_lane0_xe3=0x4
serdes_driver_current_lane1_xe3=0x4
serdes_driver_current_lane2_xe3=0x4
serdes_driver_current_lane3_xe3=0x4
serdes_pre_driver_current_lane0_xe3=0x4
serdes_pre_driver_current_lane1_xe3=0x4
serdes_pre_driver_current_lane2_xe3=0x4
serdes_pre_driver_current_lane3_xe3=0x4
serdes_preemphasis_lane0_xe3=0xcad0
serdes_preemphasis_lane1_xe3=0xcad0
serdes_preemphasis_lane2_xe3=0xc2f0
serdes_preemphasis_lane3_xe3=0xc2f0
# xe4 (40G)
portmap_5=45:40
xgxs_rx_lane_map_5=0x213
xgxs_tx_lane_map_5=0x213
phy_xaui_rx_polarity_flip_5=0xe
phy_xaui_tx_polarity_flip_5=0x8
serdes_driver_current_lane0_xe4=0x4
serdes_driver_current_lane1_xe4=0x4
serdes_driver_current_lane2_xe4=0x4
serdes_driver_current_lane3_xe4=0x4
serdes_pre_driver_current_lane0_xe4=0x4
serdes_pre_driver_current_lane1_xe4=0x4
serdes_pre_driver_current_lane2_xe4=0x4
serdes_pre_driver_current_lane3_xe4=0x4
serdes_preemphasis_lane0_xe4=0xc2f0
serdes_preemphasis_lane1_xe4=0xc2f0
serdes_preemphasis_lane2_xe4=0xc2f0
serdes_preemphasis_lane3_xe4=0xc2f0
# xe5 (40G)
portmap_6=41:40
xgxs_rx_lane_map_6=0x213
xgxs_tx_lane_map_6=0x3021
phy_xaui_rx_polarity_flip_6=0x3
phy_xaui_tx_polarity_flip_6=0xb
serdes_driver_current_lane0_xe5=0x4
serdes_driver_current_lane1_xe5=0x4
serdes_driver_current_lane2_xe5=0x4
serdes_driver_current_lane3_xe5=0x4
serdes_pre_driver_current_lane0_xe5=0x4
serdes_pre_driver_current_lane1_xe5=0x4
serdes_pre_driver_current_lane2_xe5=0x4
serdes_pre_driver_current_lane3_xe5=0x4
serdes_preemphasis_lane0_xe5=0xc6e0
serdes_preemphasis_lane1_xe5=0xc2f0
serdes_preemphasis_lane2_xe5=0xc2f0
serdes_preemphasis_lane3_xe5=0xcad0
# xe6 (40G)
portmap_7=1:40
xgxs_rx_lane_map_7=0x213
xgxs_tx_lane_map_7=0x2031
phy_xaui_rx_polarity_flip_7=0xe
phy_xaui_tx_polarity_flip_7=0xd
serdes_driver_current_lane0_xe6=0x5
serdes_driver_current_lane1_xe6=0x5
serdes_driver_current_lane2_xe6=0x5
serdes_driver_current_lane3_xe6=0x5
serdes_pre_driver_current_lane0_xe6=0x5
serdes_pre_driver_current_lane1_xe6=0x5
serdes_pre_driver_current_lane2_xe6=0x5
serdes_pre_driver_current_lane3_xe6=0x5
serdes_preemphasis_lane0_xe6=0xc6e0
serdes_preemphasis_lane1_xe6=0xcad0
serdes_preemphasis_lane2_xe6=0xc6e0
serdes_preemphasis_lane3_xe6=0xcad0
# xe7 (40G)
portmap_8=5:40
xgxs_rx_lane_map_8=0x213
xgxs_tx_lane_map_8=0x1203
phy_xaui_rx_polarity_flip_8=0xc
phy_xaui_tx_polarity_flip_8=0x1
serdes_driver_current_lane0_xe7=0x4
serdes_driver_current_lane1_xe7=0x4
serdes_driver_current_lane2_xe7=0x4
serdes_driver_current_lane3_xe7=0x4
serdes_pre_driver_current_lane0_xe7=0x4
serdes_pre_driver_current_lane1_xe7=0x4
serdes_pre_driver_current_lane2_xe7=0x4
serdes_pre_driver_current_lane3_xe7=0x4
serdes_preemphasis_lane0_xe7=0xc6e0
serdes_preemphasis_lane1_xe7=0xc6e0
serdes_preemphasis_lane2_xe7=0xc6e0
serdes_preemphasis_lane3_xe7=0xc6e0
# xe8 (40G)
portmap_9=13:40
xgxs_rx_lane_map_9=0x213
xgxs_tx_lane_map_9=0x132
phy_xaui_rx_polarity_flip_9=0xe
phy_xaui_tx_polarity_flip_9=0x0
serdes_driver_current_lane0_xe8=0x2
serdes_driver_current_lane1_xe8=0x3
serdes_driver_current_lane2_xe8=0x2
serdes_driver_current_lane3_xe8=0x2
serdes_pre_driver_current_lane0_xe8=0x2
serdes_pre_driver_current_lane1_xe8=0x3
serdes_pre_driver_current_lane2_xe8=0x2
serdes_pre_driver_current_lane3_xe8=0x2
serdes_preemphasis_lane0_xe8=0xb270
serdes_preemphasis_lane1_xe8=0xbb10
serdes_preemphasis_lane2_xe8=0xb720
serdes_preemphasis_lane3_xe8=0xb720
# xe9 (40G)
portmap_10=9:40
xgxs_rx_lane_map_10=0x3120
xgxs_tx_lane_map_10=0x3021
phy_xaui_rx_polarity_flip_10=0x0
phy_xaui_tx_polarity_flip_10=0x4
serdes_driver_current_lane0_xe9=0x3
serdes_driver_current_lane1_xe9=0x3
serdes_driver_current_lane2_xe9=0x3
serdes_driver_current_lane3_xe9=0x3
serdes_pre_driver_current_lane0_xe9=0x3
serdes_pre_driver_current_lane1_xe9=0x3
serdes_pre_driver_current_lane2_xe9=0x3
serdes_pre_driver_current_lane3_xe9=0x3
serdes_preemphasis_lane0_xe9=0xc2f0
serdes_preemphasis_lane1_xe9=0xc6e0
serdes_preemphasis_lane2_xe9=0xbf00
serdes_preemphasis_lane3_xe9=0xc2f0
# xe10 (40G)
portmap_11=17:40
xgxs_rx_lane_map_11=0x213
xgxs_tx_lane_map_11=0x132
phy_xaui_rx_polarity_flip_11=0xe
phy_xaui_tx_polarity_flip_11=0x0
serdes_driver_current_lane0_xe10=0x2
serdes_driver_current_lane1_xe10=0x2
serdes_driver_current_lane2_xe10=0x2
serdes_driver_current_lane3_xe10=0x2
serdes_pre_driver_current_lane0_xe10=0x2
serdes_pre_driver_current_lane1_xe10=0x2
serdes_pre_driver_current_lane2_xe10=0x2
serdes_pre_driver_current_lane3_xe10=0x2
serdes_preemphasis_lane0_xe10=0xb330
serdes_preemphasis_lane1_xe10=0xbb10
serdes_preemphasis_lane2_xe10=0xbb10
serdes_preemphasis_lane3_xe10=0xbb10
# xe11 (40G)
portmap_12=21:40
xgxs_rx_lane_map_12=0x123
xgxs_tx_lane_map_12=0x1203
phy_xaui_rx_polarity_flip_12=0xc
phy_xaui_tx_polarity_flip_12=0xe
serdes_driver_current_lane0_xe11=0x2
serdes_driver_current_lane1_xe11=0x2
serdes_driver_current_lane2_xe11=0x2
serdes_driver_current_lane3_xe11=0x2
serdes_pre_driver_current_lane0_xe11=0x2
serdes_pre_driver_current_lane1_xe11=0x2
serdes_pre_driver_current_lane2_xe11=0x2
serdes_pre_driver_current_lane3_xe11=0x2
serdes_preemphasis_lane0_xe11=0xb330
serdes_preemphasis_lane1_xe11=0xb330
serdes_preemphasis_lane2_xe11=0xb330
serdes_preemphasis_lane3_xe11=0xb330
# xe12 (40G)
portmap_13=53:40
xgxs_rx_lane_map_13=0x213
xgxs_tx_lane_map_13=0x231
phy_xaui_rx_polarity_flip_13=0x1
phy_xaui_tx_polarity_flip_13=0x0
serdes_driver_current_lane0_xe12=0x2
serdes_driver_current_lane1_xe12=0x2
serdes_driver_current_lane2_xe12=0x2
serdes_driver_current_lane3_xe12=0x2
serdes_pre_driver_current_lane0_xe12=0x2
serdes_pre_driver_current_lane1_xe12=0x2
serdes_pre_driver_current_lane2_xe12=0x2
serdes_pre_driver_current_lane3_xe12=0x2
serdes_preemphasis_lane0_xe12=0xaf40
serdes_preemphasis_lane1_xe12=0xaf40
serdes_preemphasis_lane2_xe12=0xaf40
serdes_preemphasis_lane3_xe12=0xaf40
# xe13 (40G)
portmap_14=49:40
xgxs_rx_lane_map_14=0x1302
xgxs_tx_lane_map_14=0x2031
phy_xaui_rx_polarity_flip_14=0xb
phy_xaui_tx_polarity_flip_14=0x3
serdes_driver_current_lane0_xe13=0x2
serdes_driver_current_lane1_xe13=0x2
serdes_driver_current_lane2_xe13=0x2
serdes_driver_current_lane3_xe13=0x2
serdes_pre_driver_current_lane0_xe13=0x2
serdes_pre_driver_current_lane1_xe13=0x2
serdes_pre_driver_current_lane2_xe13=0x2
serdes_pre_driver_current_lane3_xe13=0x2
serdes_preemphasis_lane0_xe13=0xa760
serdes_preemphasis_lane1_xe13=0xa760
serdes_preemphasis_lane2_xe13=0xa760
serdes_preemphasis_lane3_xe13=0xa760
# xe14 (40G)
portmap_15=57:40
xgxs_rx_lane_map_15=0x213
xgxs_tx_lane_map_15=0x2031
phy_xaui_rx_polarity_flip_15=0x1
phy_xaui_tx_polarity_flip_15=0x0
serdes_driver_current_lane0_xe14=0x1
serdes_driver_current_lane1_xe14=0x1
serdes_driver_current_lane2_xe14=0x1
serdes_driver_current_lane3_xe14=0x1
serdes_pre_driver_current_lane0_xe14=0x1
serdes_pre_driver_current_lane1_xe14=0x1
serdes_pre_driver_current_lane2_xe14=0x1
serdes_pre_driver_current_lane3_xe14=0x1
serdes_preemphasis_lane0_xe14=0xa760
serdes_preemphasis_lane1_xe14=0xa760
serdes_preemphasis_lane2_xe14=0xa760
serdes_preemphasis_lane3_xe14=0xa760
# xe15 (40G)
portmap_16=61:40
xgxs_rx_lane_map_16=0x132
xgxs_tx_lane_map_16=0x213
phy_xaui_rx_polarity_flip_16=0x0
phy_xaui_tx_polarity_flip_16=0x0
serdes_driver_current_lane0_xe15=0x2
serdes_driver_current_lane1_xe15=0x2
serdes_driver_current_lane2_xe15=0x2
serdes_driver_current_lane3_xe15=0x2
serdes_pre_driver_current_lane0_xe15=0x2
serdes_pre_driver_current_lane1_xe15=0x2
serdes_pre_driver_current_lane2_xe15=0x2
serdes_pre_driver_current_lane3_xe15=0x2
serdes_preemphasis_lane0_xe15=0xa760
serdes_preemphasis_lane1_xe15=0xa760
serdes_preemphasis_lane2_xe15=0xa760
serdes_preemphasis_lane3_xe15=0xa760
# xe16 (40G)
portmap_17=69:40
xgxs_rx_lane_map_17=0x213
xgxs_tx_lane_map_17=0x2130
phy_xaui_rx_polarity_flip_17=0x1
phy_xaui_tx_polarity_flip_17=0xf
serdes_driver_current_lane0_xe16=0x1
serdes_driver_current_lane1_xe16=0x1
serdes_driver_current_lane2_xe16=0x1
serdes_driver_current_lane3_xe16=0x1
serdes_pre_driver_current_lane0_xe16=0x1
serdes_pre_driver_current_lane1_xe16=0x1
serdes_pre_driver_current_lane2_xe16=0x1
serdes_pre_driver_current_lane3_xe16=0x1
serdes_preemphasis_lane0_xe16=0xa760
serdes_preemphasis_lane1_xe16=0xa760
serdes_preemphasis_lane2_xe16=0xa760
serdes_preemphasis_lane3_xe16=0xa760
# xe17 (40G)
portmap_18=65:40
xgxs_rx_lane_map_18=0x132
xgxs_tx_lane_map_18=0x2031
phy_xaui_rx_polarity_flip_18=0x3
phy_xaui_tx_polarity_flip_18=0x9
serdes_driver_current_lane0_xe17=0x1
serdes_driver_current_lane1_xe17=0x1
serdes_driver_current_lane2_xe17=0x1
serdes_driver_current_lane3_xe17=0x1
serdes_pre_driver_current_lane0_xe17=0x1
serdes_pre_driver_current_lane1_xe17=0x1
serdes_pre_driver_current_lane2_xe17=0x1
serdes_pre_driver_current_lane3_xe17=0x1
serdes_preemphasis_lane0_xe17=0xa370
serdes_preemphasis_lane1_xe17=0xa370
serdes_preemphasis_lane2_xe17=0xa370
serdes_preemphasis_lane3_xe17=0xa370
# xe18 (40G)
portmap_19=73:40
xgxs_rx_lane_map_19=0x213
xgxs_tx_lane_map_19=0x2031
phy_xaui_rx_polarity_flip_19=0x1
phy_xaui_tx_polarity_flip_19=0x0
serdes_driver_current_lane0_xe18=0x2
serdes_driver_current_lane1_xe18=0x2
serdes_driver_current_lane2_xe18=0x2
serdes_driver_current_lane3_xe18=0x2
serdes_pre_driver_current_lane0_xe18=0x2
serdes_pre_driver_current_lane1_xe18=0x2
serdes_pre_driver_current_lane2_xe18=0x2
serdes_pre_driver_current_lane3_xe18=0x2
serdes_preemphasis_lane0_xe18=0xa760
serdes_preemphasis_lane1_xe18=0xa760
serdes_preemphasis_lane2_xe18=0xa760
serdes_preemphasis_lane3_xe18=0xa760
# xe19 (40G)
portmap_20=77:40
xgxs_rx_lane_map_20=0x123
xgxs_tx_lane_map_20=0x1203
phy_xaui_rx_polarity_flip_20=0x3
phy_xaui_tx_polarity_flip_20=0xe
serdes_driver_current_lane0_xe19=0x2
serdes_driver_current_lane1_xe19=0x2
serdes_driver_current_lane2_xe19=0x2
serdes_driver_current_lane3_xe19=0x2
serdes_pre_driver_current_lane0_xe19=0x2
serdes_pre_driver_current_lane1_xe19=0x2
serdes_pre_driver_current_lane2_xe19=0x2
serdes_pre_driver_current_lane3_xe19=0x2
serdes_preemphasis_lane0_xe19=0xaf40
serdes_preemphasis_lane1_xe19=0xaf40
serdes_preemphasis_lane2_xe19=0xaf40
serdes_preemphasis_lane3_xe19=0xaf40
# xe20 (40G)
portmap_21=109:40
xgxs_rx_lane_map_21=0x132
xgxs_tx_lane_map_21=0x132
phy_xaui_rx_polarity_flip_21=0x8
phy_xaui_tx_polarity_flip_21=0x0
serdes_driver_current_lane0_xe20=0x1
serdes_driver_current_lane1_xe20=0x1
serdes_driver_current_lane2_xe20=0x1
serdes_driver_current_lane3_xe20=0x2
serdes_pre_driver_current_lane0_xe20=0x1
serdes_pre_driver_current_lane1_xe20=0x1
serdes_pre_driver_current_lane2_xe20=0x1
serdes_pre_driver_current_lane3_xe20=0x2
serdes_preemphasis_lane0_xe20=0xb330
serdes_preemphasis_lane1_xe20=0xb330
serdes_preemphasis_lane2_xe20=0xb330
serdes_preemphasis_lane3_xe20=0xbff0
# xe21 (40G)
portmap_22=105:40
xgxs_rx_lane_map_22=0x1320
xgxs_tx_lane_map_22=0x3021
phy_xaui_rx_polarity_flip_22=0xd
phy_xaui_tx_polarity_flip_22=0xb
serdes_driver_current_lane0_xe21=0x1
serdes_driver_current_lane1_xe21=0x1
serdes_driver_current_lane2_xe21=0x1
serdes_driver_current_lane3_xe21=0x1
serdes_pre_driver_current_lane0_xe21=0x1
serdes_pre_driver_current_lane1_xe21=0x1
serdes_pre_driver_current_lane2_xe21=0x1
serdes_pre_driver_current_lane3_xe21=0x1
serdes_preemphasis_lane0_xe21=0xb330
serdes_preemphasis_lane1_xe21=0xb330
serdes_preemphasis_lane2_xe21=0xb330
serdes_preemphasis_lane3_xe21=0xb330
# xe22 (40G)
portmap_23=113:40
xgxs_rx_lane_map_23=0x132
xgxs_tx_lane_map_23=0x132
phy_xaui_rx_polarity_flip_23=0x8
phy_xaui_tx_polarity_flip_23=0x0
serdes_driver_current_lane0_xe22=0x1
serdes_driver_current_lane1_xe22=0x1
serdes_driver_current_lane2_xe22=0x1
serdes_driver_current_lane3_xe22=0x1
serdes_pre_driver_current_lane0_xe22=0x1
serdes_pre_driver_current_lane1_xe22=0x1
serdes_pre_driver_current_lane2_xe22=0x1
serdes_pre_driver_current_lane3_xe22=0x1
serdes_preemphasis_lane0_xe22=0xbb10
serdes_preemphasis_lane1_xe22=0xbb10
serdes_preemphasis_lane2_xe22=0xbb10
serdes_preemphasis_lane3_xe22=0xc2f0
# xe23 (40G)
portmap_24=117:40
xgxs_rx_lane_map_24=0x231
xgxs_tx_lane_map_24=0x1203
phy_xaui_rx_polarity_flip_24=0x3
phy_xaui_tx_polarity_flip_24=0xe
serdes_driver_current_lane0_xe23=0x3
serdes_driver_current_lane1_xe23=0x5
serdes_driver_current_lane2_xe23=0x3
serdes_driver_current_lane3_xe23=0x3
serdes_pre_driver_current_lane0_xe23=0x3
serdes_pre_driver_current_lane1_xe23=0x5
serdes_pre_driver_current_lane2_xe23=0x3
serdes_pre_driver_current_lane3_xe23=0x3
serdes_preemphasis_lane0_xe23=0xc6e0
serdes_preemphasis_lane1_xe23=0xc6e0
serdes_preemphasis_lane2_xe23=0xc6e0
serdes_preemphasis_lane3_xe23=0xc6e0
# xe24 (40G)
portmap_25=125:40
xgxs_rx_lane_map_25=0x132
xgxs_tx_lane_map_25=0x132
phy_xaui_rx_polarity_flip_25=0x8
phy_xaui_tx_polarity_flip_25=0x0
serdes_driver_current_lane0_xe24=0x4
serdes_driver_current_lane1_xe24=0x4
serdes_driver_current_lane2_xe24=0x4
serdes_driver_current_lane3_xe24=0x4
serdes_pre_driver_current_lane0_xe24=0x4
serdes_pre_driver_current_lane1_xe24=0x4
serdes_pre_driver_current_lane2_xe24=0x4
serdes_pre_driver_current_lane3_xe24=0x4
serdes_preemphasis_lane0_xe24=0xc6e0
serdes_preemphasis_lane1_xe24=0xc6e0
serdes_preemphasis_lane2_xe24=0xc6e0
serdes_preemphasis_lane3_xe24=0xcec0
# xe25 (40G)
portmap_26=121:40
xgxs_rx_lane_map_26=0x1320
xgxs_tx_lane_map_26=0x3021
phy_xaui_rx_polarity_flip_26=0xd
phy_xaui_tx_polarity_flip_26=0xb
serdes_driver_current_lane0_xe25=0x4
serdes_driver_current_lane1_xe25=0x4
serdes_driver_current_lane2_xe25=0x4
serdes_driver_current_lane3_xe25=0x4
serdes_pre_driver_current_lane0_xe25=0x4
serdes_pre_driver_current_lane1_xe25=0x4
serdes_pre_driver_current_lane2_xe25=0x4
serdes_pre_driver_current_lane3_xe25=0x4
serdes_preemphasis_lane0_xe25=0xc6e0
serdes_preemphasis_lane1_xe25=0xc6e0
serdes_preemphasis_lane2_xe25=0xc6e0
serdes_preemphasis_lane3_xe25=0xc6e0
# xe26 (40G)
portmap_27=81:40
xgxs_rx_lane_map_27=0x1320
xgxs_tx_lane_map_27=0x2031
phy_xaui_rx_polarity_flip_27=0x1
phy_xaui_tx_polarity_flip_27=0x2
serdes_driver_current_lane0_xe26=0x2
serdes_driver_current_lane1_xe26=0x2
serdes_driver_current_lane2_xe26=0x2
serdes_driver_current_lane3_xe26=0x2
serdes_pre_driver_current_lane0_xe26=0x2
serdes_pre_driver_current_lane1_xe26=0x2
serdes_pre_driver_current_lane2_xe26=0x2
serdes_pre_driver_current_lane3_xe26=0x2
serdes_preemphasis_lane0_xe26=0xbb10
serdes_preemphasis_lane1_xe26=0xbb10
serdes_preemphasis_lane2_xe26=0xbf00
serdes_preemphasis_lane3_xe26=0xbb10
# xe27 (40G)
portmap_28=85:40
xgxs_rx_lane_map_28=0x213
xgxs_tx_lane_map_28=0x1203
phy_xaui_rx_polarity_flip_28=0xc
phy_xaui_tx_polarity_flip_28=0xe
serdes_driver_current_lane0_xe27=0x4
serdes_driver_current_lane1_xe27=0x5
serdes_driver_current_lane2_xe27=0x4
serdes_driver_current_lane3_xe27=0x5
serdes_pre_driver_current_lane0_xe27=0x4
serdes_pre_driver_current_lane1_xe27=0x5
serdes_pre_driver_current_lane2_xe27=0x4
serdes_pre_driver_current_lane3_xe27=0x5
serdes_preemphasis_lane0_xe27=0xc2f0
serdes_preemphasis_lane1_xe27=0xc6e0
serdes_preemphasis_lane2_xe27=0xc6e0
serdes_preemphasis_lane3_xe27=0xc6e0
# xe28 (40G)
portmap_29=93:40
xgxs_rx_lane_map_29=0x1320
xgxs_tx_lane_map_29=0x2031
phy_xaui_rx_polarity_flip_29=0x1
phy_xaui_tx_polarity_flip_29=0x2
serdes_driver_current_lane0_xe28=0x4
serdes_driver_current_lane1_xe28=0x4
serdes_driver_current_lane2_xe28=0x4
serdes_driver_current_lane3_xe28=0x4
serdes_pre_driver_current_lane0_xe28=0x4
serdes_pre_driver_current_lane1_xe28=0x4
serdes_pre_driver_current_lane2_xe28=0x4
serdes_pre_driver_current_lane3_xe28=0x4
serdes_preemphasis_lane0_xe28=0xc2f0
serdes_preemphasis_lane1_xe28=0xc2f0
serdes_preemphasis_lane2_xe28=0xc2f0
serdes_preemphasis_lane3_xe28=0xc2f0
# xe29 (40G)
portmap_30=89:40
xgxs_rx_lane_map_30=0x1320
xgxs_tx_lane_map_30=0x3021
phy_xaui_rx_polarity_flip_30=0x2
phy_xaui_tx_polarity_flip_30=0xb
serdes_driver_current_lane0_xe29=0x4
serdes_driver_current_lane1_xe29=0x4
serdes_driver_current_lane2_xe29=0x4
serdes_driver_current_lane3_xe29=0x4
serdes_pre_driver_current_lane0_xe29=0x4
serdes_pre_driver_current_lane1_xe29=0x4
serdes_pre_driver_current_lane2_xe29=0x4
serdes_pre_driver_current_lane3_xe29=0x4
serdes_preemphasis_lane0_xe29=0xcad0
serdes_preemphasis_lane1_xe29=0xc6e0
serdes_preemphasis_lane2_xe29=0xc6e0
serdes_preemphasis_lane3_xe29=0xc6e0
# xe30 (40G)
portmap_31=101:40
xgxs_rx_lane_map_31=0x1320
xgxs_tx_lane_map_31=0x1203
phy_xaui_rx_polarity_flip_31=0x1
phy_xaui_tx_polarity_flip_31=0x6
serdes_driver_current_lane0_xe30=0x6
serdes_driver_current_lane1_xe30=0x6
serdes_driver_current_lane2_xe30=0x6
serdes_driver_current_lane3_xe30=0x7
serdes_pre_driver_current_lane0_xe30=0x6
serdes_pre_driver_current_lane1_xe30=0x6
serdes_pre_driver_current_lane2_xe30=0x6
serdes_pre_driver_current_lane3_xe30=0x7
serdes_preemphasis_lane0_xe30=0xcec0
serdes_preemphasis_lane1_xe30=0xcec0
serdes_preemphasis_lane2_xe30=0xcad0
serdes_preemphasis_lane3_xe30=0xc6e0
# xe31 (40G)
portmap_32=97:40
xgxs_rx_lane_map_32=0x213
xgxs_tx_lane_map_32=0x2031
phy_xaui_rx_polarity_flip_32=0xc
phy_xaui_tx_polarity_flip_32=0x3
serdes_driver_current_lane0_xe31=0x5
serdes_driver_current_lane1_xe31=0x5
serdes_driver_current_lane2_xe31=0x5
serdes_driver_current_lane3_xe31=0x5
serdes_pre_driver_current_lane0_xe31=0x5
serdes_pre_driver_current_lane1_xe31=0x5
serdes_pre_driver_current_lane2_xe31=0x5
serdes_pre_driver_current_lane3_xe31=0x5
serdes_preemphasis_lane0_xe31=0xcad0
serdes_preemphasis_lane1_xe31=0xcad0
serdes_preemphasis_lane2_xe31=0xcad0
serdes_preemphasis_lane3_xe31=0xcad0

View File

@ -0,0 +1,3 @@
{%- set default_topo = 't1' %}
{%- include 'buffers_config.j2' %}

View File

@ -0,0 +1,45 @@
{%- set default_cable = '300m' %}
{%- macro generate_port_lists(PORT_ALL) %}
{# Generate list of ports #}
{% for port_idx in range(0,32) %}
{% if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{% endif %}
{% endfor %}
{%- endmacro %}
{%- macro generate_buffer_pool_and_profiles() %}
"BUFFER_POOL": {
"ingress_lossless_pool": {
"size": "12766208",
"type": "ingress",
"mode": "dynamic"
},
"egress_lossless_pool": {
"size": "12766208",
"type": "egress",
"mode": "static"
},
"egress_lossy_pool": {
"size": "7326924",
"type": "egress",
"mode": "dynamic"
}
},
"BUFFER_PROFILE": {
"ingress_lossy_profile": {
"pool":"[BUFFER_POOL|ingress_lossless_pool]",
"size":"0",
"dynamic_th":"3"
},
"egress_lossless_profile": {
"pool":"[BUFFER_POOL|egress_lossless_pool]",
"size":"0",
"static_th":"12766208"
},
"egress_lossy_profile": {
"pool":"[BUFFER_POOL|egress_lossy_pool]",
"size":"1518",
"dynamic_th":"3"
}
},
{%- endmacro %}

View File

@ -0,0 +1,45 @@
{%- set default_cable = '300m' %}
{%- macro generate_port_lists(PORT_ALL) %}
{# Generate list of ports #}
{% for port_idx in range(0,32) %}
{% if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{% endif %}
{% endfor %}
{%- endmacro %}
{%- macro generate_buffer_pool_and_profiles() %}
"BUFFER_POOL": {
"ingress_lossless_pool": {
"size": "12766208",
"type": "ingress",
"mode": "dynamic"
},
"egress_lossless_pool": {
"size": "12766208",
"type": "egress",
"mode": "static"
},
"egress_lossy_pool": {
"size": "7326924",
"type": "egress",
"mode": "dynamic"
}
},
"BUFFER_PROFILE": {
"ingress_lossy_profile": {
"pool":"[BUFFER_POOL|ingress_lossless_pool]",
"size":"0",
"dynamic_th":"3"
},
"egress_lossless_profile": {
"pool":"[BUFFER_POOL|egress_lossless_pool]",
"size":"0",
"static_th":"12766208"
},
"egress_lossy_profile": {
"pool":"[BUFFER_POOL|egress_lossy_pool]",
"size":"1518",
"dynamic_th":"3"
}
},
{%- endmacro %}

View File

@ -0,0 +1,45 @@
{%- set default_cable = '300m' %}
{%- macro generate_port_lists(PORT_ALL) %}
{# Generate list of ports #}
{% for port_idx in range(0,32) %}
{% if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{% endif %}
{% endfor %}
{%- endmacro %}
{%- macro generate_buffer_pool_and_profiles() %}
"BUFFER_POOL": {
"ingress_lossless_pool": {
"size": "12766208",
"type": "ingress",
"mode": "dynamic"
},
"egress_lossless_pool": {
"size": "12766208",
"type": "egress",
"mode": "static"
},
"egress_lossy_pool": {
"size": "7326924",
"type": "egress",
"mode": "dynamic"
}
},
"BUFFER_PROFILE": {
"ingress_lossy_profile": {
"pool":"[BUFFER_POOL|ingress_lossless_pool]",
"size":"0",
"dynamic_th":"3"
},
"egress_lossless_profile": {
"pool":"[BUFFER_POOL|egress_lossless_pool]",
"size":"0",
"static_th":"12766208"
},
"egress_lossy_profile": {
"pool":"[BUFFER_POOL|egress_lossy_pool]",
"size":"1518",
"dynamic_th":"3"
}
},
{%- endmacro %}

View File

@ -0,0 +1,17 @@
# PG lossless profiles.
# speed cable size xon xoff threshold xon_offset
10000 5m 56368 18432 55120 -3 2496
25000 5m 56368 18432 55120 -3 2496
40000 5m 56368 18432 55120 -3 2496
50000 5m 56368 18432 55120 -3 2496
100000 5m 56368 18432 55120 -3 2496
10000 40m 56368 18432 55120 -3 2496
25000 40m 56368 18432 55120 -3 2496
40000 40m 56368 18432 55120 -3 2496
50000 40m 56368 18432 55120 -3 2496
100000 40m 56368 18432 55120 -3 2496
10000 300m 56368 18432 55120 -3 2496
25000 300m 56368 18432 55120 -3 2496
40000 300m 56368 18432 55120 -3 2496
50000 300m 56368 18432 55120 -3 2496
100000 300m 56368 18432 55120 -3 2496

View File

@ -0,0 +1,33 @@
# name lanes alias index speed
Ethernet0 25,26,27,28 fortyGigE0/0 0 40000
Ethernet4 29,30,31,32 fortyGigE0/4 1 40000
Ethernet8 33,34,35,36 fortyGigE0/8 2 40000
Ethernet12 37,38,39,40 fortyGigE0/12 3 40000
Ethernet16 45,46,47,48 fortyGigE0/16 4 40000
Ethernet20 41,42,43,44 fortyGigE0/20 5 40000
Ethernet24 1,2,3,4 fortyGigE0/24 6 40000
Ethernet28 5,6,7,8 fortyGigE0/28 7 40000
Ethernet32 13,14,15,16 fortyGigE0/32 8 40000
Ethernet36 9,10,11,12 fortyGigE0/36 9 40000
Ethernet40 17,18,19,20 fortyGigE0/40 10 40000
Ethernet44 21,22,23,24 fortyGigE0/44 11 40000
Ethernet48 53,54,55,56 fortyGigE0/48 12 40000
Ethernet52 49,50,51,52 fortyGigE0/52 13 40000
Ethernet56 57,58,59,60 fortyGigE0/56 14 40000
Ethernet60 61,62,63,64 fortyGigE0/60 15 40000
Ethernet64 69,70,71,72 fortyGigE0/64 16 40000
Ethernet68 65,66,67,68 fortyGigE0/68 17 40000
Ethernet72 73,74,75,76 fortyGigE0/72 18 40000
Ethernet76 77,78,79,80 fortyGigE0/76 19 40000
Ethernet80 109,110,111,112 fortyGigE0/80 20 40000
Ethernet84 105,106,107,108 fortyGigE0/84 21 40000
Ethernet88 113,114,115,116 fortyGigE0/88 22 40000
Ethernet92 117,118,119,120 fortyGigE0/92 23 40000
Ethernet96 125,126,127,128 fortyGigE0/96 24 40000
Ethernet100 121,122,123,124 fortyGigE0/100 25 40000
Ethernet104 81,82,83,84 fortyGigE0/104 26 40000
Ethernet108 85,86,87,88 fortyGigE0/108 27 40000
Ethernet112 93,94,95,96 fortyGigE0/112 28 40000
Ethernet116 89,90,91,92 fortyGigE0/116 29 40000
Ethernet120 101,102,103,104 fortyGigE0/120 30 40000
Ethernet124 97,98,99,100 fortyGigE0/124 31 40000

View File

@ -0,0 +1 @@
{%- include 'qos_config.j2' %}

View File

@ -0,0 +1,2 @@
SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/td2-s6000-32x40G.config.bcm
SAI_NUM_ECMP_MEMBERS=32

View File

@ -0,0 +1,646 @@
# Old LPM only configuration
# l2_mem_entries=163840
# l3_mem_entries=90112
# l3_alpm_enable=0
# ipv6_lpm_128b_enable=0
#
# ALPM enable
l3_alpm_enable=2
ipv6_lpm_128b_enable=1
l2_mem_entries=32768
l3_mem_entries=16384
# From old config file
os=unix
higig2_hdr_mode=1
# Parity
parity_correction=1
parity_enable=1
stat_if_parity_enable=0
#
bcm_num_cos=8
bcm_stat_interval=2000000
l2xmsg_hostbuf_size=8192
l2xmsg_mode=1
lls_num_l2uc=12
max_vp_lags=0
miim_intr_enable=0
mmu_lossless=0
module_64ports=0
schan_intr_enable=0
stable_size=0x2000000
tdma_timeout_usec=5000000
pbmp_oversubscribe=0x000007fffffffffffffffffffffffffe
pbmp_xport_xe=0x000007fffffffffffffffffffffffffe
# Ports configuration
# xe0 (40G)
portmap_1=25:40
xgxs_rx_lane_map_1=0x213
xgxs_tx_lane_map_1=0x2031
phy_xaui_rx_polarity_flip_1=0xe
phy_xaui_tx_polarity_flip_1=0x2
serdes_driver_current_lane0_xe0=0x5
serdes_driver_current_lane1_xe0=0x5
serdes_driver_current_lane2_xe0=0x5
serdes_driver_current_lane3_xe0=0x5
serdes_pre_driver_current_lane0_xe0=0x5
serdes_pre_driver_current_lane1_xe0=0x5
serdes_pre_driver_current_lane2_xe0=0x5
serdes_pre_driver_current_lane3_xe0=0x5
serdes_preemphasis_lane0_xe0=0xcad0
serdes_preemphasis_lane1_xe0=0xc6e0
serdes_preemphasis_lane2_xe0=0xc6e0
serdes_preemphasis_lane3_xe0=0xd2b0
# xe1 (40G)
portmap_2=29:40
xgxs_rx_lane_map_2=0x213
xgxs_tx_lane_map_2=0x213
phy_xaui_rx_polarity_flip_2=0xc
phy_xaui_tx_polarity_flip_2=0x9
serdes_driver_current_lane0_xe1=0x6
serdes_driver_current_lane1_xe1=0x7
serdes_driver_current_lane2_xe1=0x6
serdes_driver_current_lane3_xe1=0x6
serdes_pre_driver_current_lane0_xe1=0x6
serdes_pre_driver_current_lane1_xe1=0x7
serdes_pre_driver_current_lane2_xe1=0x6
serdes_pre_driver_current_lane3_xe1=0x6
serdes_preemphasis_lane0_xe1=0xc2f0
serdes_preemphasis_lane1_xe1=0xd2b0
serdes_preemphasis_lane2_xe1=0xc6e0
serdes_preemphasis_lane3_xe1=0xc2f0
# xe2 (40G)
portmap_3=33:40
xgxs_rx_lane_map_3=0x213
xgxs_tx_lane_map_3=0x132
phy_xaui_rx_polarity_flip_3=0xe
phy_xaui_tx_polarity_flip_3=0x2
serdes_driver_current_lane0_xe2=0x4
serdes_driver_current_lane1_xe2=0x4
serdes_driver_current_lane2_xe2=0x4
serdes_driver_current_lane3_xe2=0x4
serdes_pre_driver_current_lane0_xe2=0x4
serdes_pre_driver_current_lane1_xe2=0x4
serdes_pre_driver_current_lane2_xe2=0x4
serdes_pre_driver_current_lane3_xe2=0x4
serdes_preemphasis_lane0_xe2=0xc6e0
serdes_preemphasis_lane1_xe2=0xc6e0
serdes_preemphasis_lane2_xe2=0xc6e0
serdes_preemphasis_lane3_xe2=0xc6e0
# xe3 (40G)
portmap_4=37:40
xgxs_rx_lane_map_4=0x213
xgxs_tx_lane_map_4=0x1203
phy_xaui_rx_polarity_flip_4=0x3
phy_xaui_tx_polarity_flip_4=0xe
serdes_driver_current_lane0_xe3=0x4
serdes_driver_current_lane1_xe3=0x4
serdes_driver_current_lane2_xe3=0x4
serdes_driver_current_lane3_xe3=0x4
serdes_pre_driver_current_lane0_xe3=0x4
serdes_pre_driver_current_lane1_xe3=0x4
serdes_pre_driver_current_lane2_xe3=0x4
serdes_pre_driver_current_lane3_xe3=0x4
serdes_preemphasis_lane0_xe3=0xcad0
serdes_preemphasis_lane1_xe3=0xcad0
serdes_preemphasis_lane2_xe3=0xc2f0
serdes_preemphasis_lane3_xe3=0xc2f0
# xe4 (40G)
portmap_5=45:40
xgxs_rx_lane_map_5=0x213
xgxs_tx_lane_map_5=0x213
phy_xaui_rx_polarity_flip_5=0xe
phy_xaui_tx_polarity_flip_5=0x8
serdes_driver_current_lane0_xe4=0x4
serdes_driver_current_lane1_xe4=0x4
serdes_driver_current_lane2_xe4=0x4
serdes_driver_current_lane3_xe4=0x4
serdes_pre_driver_current_lane0_xe4=0x4
serdes_pre_driver_current_lane1_xe4=0x4
serdes_pre_driver_current_lane2_xe4=0x4
serdes_pre_driver_current_lane3_xe4=0x4
serdes_preemphasis_lane0_xe4=0xc2f0
serdes_preemphasis_lane1_xe4=0xc2f0
serdes_preemphasis_lane2_xe4=0xc2f0
serdes_preemphasis_lane3_xe4=0xc2f0
# xe5 (40G)
portmap_6=41:40
xgxs_rx_lane_map_6=0x213
xgxs_tx_lane_map_6=0x3021
phy_xaui_rx_polarity_flip_6=0x3
phy_xaui_tx_polarity_flip_6=0xb
serdes_driver_current_lane0_xe5=0x4
serdes_driver_current_lane1_xe5=0x4
serdes_driver_current_lane2_xe5=0x4
serdes_driver_current_lane3_xe5=0x4
serdes_pre_driver_current_lane0_xe5=0x4
serdes_pre_driver_current_lane1_xe5=0x4
serdes_pre_driver_current_lane2_xe5=0x4
serdes_pre_driver_current_lane3_xe5=0x4
serdes_preemphasis_lane0_xe5=0xc6e0
serdes_preemphasis_lane1_xe5=0xc2f0
serdes_preemphasis_lane2_xe5=0xc2f0
serdes_preemphasis_lane3_xe5=0xcad0
# xe6 (40G)
portmap_7=1:40
xgxs_rx_lane_map_7=0x213
xgxs_tx_lane_map_7=0x2031
phy_xaui_rx_polarity_flip_7=0xe
phy_xaui_tx_polarity_flip_7=0xd
serdes_driver_current_lane0_xe6=0x5
serdes_driver_current_lane1_xe6=0x5
serdes_driver_current_lane2_xe6=0x5
serdes_driver_current_lane3_xe6=0x5
serdes_pre_driver_current_lane0_xe6=0x5
serdes_pre_driver_current_lane1_xe6=0x5
serdes_pre_driver_current_lane2_xe6=0x5
serdes_pre_driver_current_lane3_xe6=0x5
serdes_preemphasis_lane0_xe6=0xc6e0
serdes_preemphasis_lane1_xe6=0xcad0
serdes_preemphasis_lane2_xe6=0xc6e0
serdes_preemphasis_lane3_xe6=0xcad0
# xe7 (40G)
portmap_8=5:40
xgxs_rx_lane_map_8=0x213
xgxs_tx_lane_map_8=0x1203
phy_xaui_rx_polarity_flip_8=0xc
phy_xaui_tx_polarity_flip_8=0x1
serdes_driver_current_lane0_xe7=0x4
serdes_driver_current_lane1_xe7=0x4
serdes_driver_current_lane2_xe7=0x4
serdes_driver_current_lane3_xe7=0x4
serdes_pre_driver_current_lane0_xe7=0x4
serdes_pre_driver_current_lane1_xe7=0x4
serdes_pre_driver_current_lane2_xe7=0x4
serdes_pre_driver_current_lane3_xe7=0x4
serdes_preemphasis_lane0_xe7=0xc6e0
serdes_preemphasis_lane1_xe7=0xc6e0
serdes_preemphasis_lane2_xe7=0xc6e0
serdes_preemphasis_lane3_xe7=0xc6e0
# xe8 (40G)
portmap_9=13:40
xgxs_rx_lane_map_9=0x213
xgxs_tx_lane_map_9=0x132
phy_xaui_rx_polarity_flip_9=0xe
phy_xaui_tx_polarity_flip_9=0x0
serdes_driver_current_lane0_xe8=0x2
serdes_driver_current_lane1_xe8=0x3
serdes_driver_current_lane2_xe8=0x2
serdes_driver_current_lane3_xe8=0x2
serdes_pre_driver_current_lane0_xe8=0x2
serdes_pre_driver_current_lane1_xe8=0x3
serdes_pre_driver_current_lane2_xe8=0x2
serdes_pre_driver_current_lane3_xe8=0x2
serdes_preemphasis_lane0_xe8=0xb270
serdes_preemphasis_lane1_xe8=0xbb10
serdes_preemphasis_lane2_xe8=0xb720
serdes_preemphasis_lane3_xe8=0xb720
# xe9 (40G)
portmap_10=9:40
xgxs_rx_lane_map_10=0x3120
xgxs_tx_lane_map_10=0x3021
phy_xaui_rx_polarity_flip_10=0x0
phy_xaui_tx_polarity_flip_10=0x4
serdes_driver_current_lane0_xe9=0x3
serdes_driver_current_lane1_xe9=0x3
serdes_driver_current_lane2_xe9=0x3
serdes_driver_current_lane3_xe9=0x3
serdes_pre_driver_current_lane0_xe9=0x3
serdes_pre_driver_current_lane1_xe9=0x3
serdes_pre_driver_current_lane2_xe9=0x3
serdes_pre_driver_current_lane3_xe9=0x3
serdes_preemphasis_lane0_xe9=0xc2f0
serdes_preemphasis_lane1_xe9=0xc6e0
serdes_preemphasis_lane2_xe9=0xbf00
serdes_preemphasis_lane3_xe9=0xc2f0
# xe10 (40G)
portmap_11=17:40
xgxs_rx_lane_map_11=0x213
xgxs_tx_lane_map_11=0x132
phy_xaui_rx_polarity_flip_11=0xe
phy_xaui_tx_polarity_flip_11=0x0
serdes_driver_current_lane0_xe10=0x2
serdes_driver_current_lane1_xe10=0x2
serdes_driver_current_lane2_xe10=0x2
serdes_driver_current_lane3_xe10=0x2
serdes_pre_driver_current_lane0_xe10=0x2
serdes_pre_driver_current_lane1_xe10=0x2
serdes_pre_driver_current_lane2_xe10=0x2
serdes_pre_driver_current_lane3_xe10=0x2
serdes_preemphasis_lane0_xe10=0xb330
serdes_preemphasis_lane1_xe10=0xbb10
serdes_preemphasis_lane2_xe10=0xbb10
serdes_preemphasis_lane3_xe10=0xbb10
# xe11 (40G)
portmap_12=21:40
xgxs_rx_lane_map_12=0x123
xgxs_tx_lane_map_12=0x1203
phy_xaui_rx_polarity_flip_12=0xc
phy_xaui_tx_polarity_flip_12=0xe
serdes_driver_current_lane0_xe11=0x2
serdes_driver_current_lane1_xe11=0x2
serdes_driver_current_lane2_xe11=0x2
serdes_driver_current_lane3_xe11=0x2
serdes_pre_driver_current_lane0_xe11=0x2
serdes_pre_driver_current_lane1_xe11=0x2
serdes_pre_driver_current_lane2_xe11=0x2
serdes_pre_driver_current_lane3_xe11=0x2
serdes_preemphasis_lane0_xe11=0xb330
serdes_preemphasis_lane1_xe11=0xb330
serdes_preemphasis_lane2_xe11=0xb330
serdes_preemphasis_lane3_xe11=0xb330
# xe12 (40G)
portmap_13=53:40
xgxs_rx_lane_map_13=0x213
xgxs_tx_lane_map_13=0x231
phy_xaui_rx_polarity_flip_13=0x1
phy_xaui_tx_polarity_flip_13=0x0
serdes_driver_current_lane0_xe12=0x2
serdes_driver_current_lane1_xe12=0x2
serdes_driver_current_lane2_xe12=0x2
serdes_driver_current_lane3_xe12=0x2
serdes_pre_driver_current_lane0_xe12=0x2
serdes_pre_driver_current_lane1_xe12=0x2
serdes_pre_driver_current_lane2_xe12=0x2
serdes_pre_driver_current_lane3_xe12=0x2
serdes_preemphasis_lane0_xe12=0xaf40
serdes_preemphasis_lane1_xe12=0xaf40
serdes_preemphasis_lane2_xe12=0xaf40
serdes_preemphasis_lane3_xe12=0xaf40
# xe13 (40G)
portmap_14=49:40
xgxs_rx_lane_map_14=0x1302
xgxs_tx_lane_map_14=0x2031
phy_xaui_rx_polarity_flip_14=0xb
phy_xaui_tx_polarity_flip_14=0x3
serdes_driver_current_lane0_xe13=0x2
serdes_driver_current_lane1_xe13=0x2
serdes_driver_current_lane2_xe13=0x2
serdes_driver_current_lane3_xe13=0x2
serdes_pre_driver_current_lane0_xe13=0x2
serdes_pre_driver_current_lane1_xe13=0x2
serdes_pre_driver_current_lane2_xe13=0x2
serdes_pre_driver_current_lane3_xe13=0x2
serdes_preemphasis_lane0_xe13=0xa760
serdes_preemphasis_lane1_xe13=0xa760
serdes_preemphasis_lane2_xe13=0xa760
serdes_preemphasis_lane3_xe13=0xa760
# xe14 (40G)
portmap_15=57:40
xgxs_rx_lane_map_15=0x213
xgxs_tx_lane_map_15=0x2031
phy_xaui_rx_polarity_flip_15=0x1
phy_xaui_tx_polarity_flip_15=0x0
serdes_driver_current_lane0_xe14=0x1
serdes_driver_current_lane1_xe14=0x1
serdes_driver_current_lane2_xe14=0x1
serdes_driver_current_lane3_xe14=0x1
serdes_pre_driver_current_lane0_xe14=0x1
serdes_pre_driver_current_lane1_xe14=0x1
serdes_pre_driver_current_lane2_xe14=0x1
serdes_pre_driver_current_lane3_xe14=0x1
serdes_preemphasis_lane0_xe14=0xa760
serdes_preemphasis_lane1_xe14=0xa760
serdes_preemphasis_lane2_xe14=0xa760
serdes_preemphasis_lane3_xe14=0xa760
# xe15 (40G)
portmap_16=61:40
xgxs_rx_lane_map_16=0x132
xgxs_tx_lane_map_16=0x213
phy_xaui_rx_polarity_flip_16=0x0
phy_xaui_tx_polarity_flip_16=0x0
serdes_driver_current_lane0_xe15=0x2
serdes_driver_current_lane1_xe15=0x2
serdes_driver_current_lane2_xe15=0x2
serdes_driver_current_lane3_xe15=0x2
serdes_pre_driver_current_lane0_xe15=0x2
serdes_pre_driver_current_lane1_xe15=0x2
serdes_pre_driver_current_lane2_xe15=0x2
serdes_pre_driver_current_lane3_xe15=0x2
serdes_preemphasis_lane0_xe15=0xa760
serdes_preemphasis_lane1_xe15=0xa760
serdes_preemphasis_lane2_xe15=0xa760
serdes_preemphasis_lane3_xe15=0xa760
# xe16 (40G)
portmap_17=69:40
xgxs_rx_lane_map_17=0x213
xgxs_tx_lane_map_17=0x2130
phy_xaui_rx_polarity_flip_17=0x1
phy_xaui_tx_polarity_flip_17=0xf
serdes_driver_current_lane0_xe16=0x1
serdes_driver_current_lane1_xe16=0x1
serdes_driver_current_lane2_xe16=0x1
serdes_driver_current_lane3_xe16=0x1
serdes_pre_driver_current_lane0_xe16=0x1
serdes_pre_driver_current_lane1_xe16=0x1
serdes_pre_driver_current_lane2_xe16=0x1
serdes_pre_driver_current_lane3_xe16=0x1
serdes_preemphasis_lane0_xe16=0xa760
serdes_preemphasis_lane1_xe16=0xa760
serdes_preemphasis_lane2_xe16=0xa760
serdes_preemphasis_lane3_xe16=0xa760
# xe17 (40G)
portmap_18=65:40
xgxs_rx_lane_map_18=0x132
xgxs_tx_lane_map_18=0x2031
phy_xaui_rx_polarity_flip_18=0x3
phy_xaui_tx_polarity_flip_18=0x9
serdes_driver_current_lane0_xe17=0x1
serdes_driver_current_lane1_xe17=0x1
serdes_driver_current_lane2_xe17=0x1
serdes_driver_current_lane3_xe17=0x1
serdes_pre_driver_current_lane0_xe17=0x1
serdes_pre_driver_current_lane1_xe17=0x1
serdes_pre_driver_current_lane2_xe17=0x1
serdes_pre_driver_current_lane3_xe17=0x1
serdes_preemphasis_lane0_xe17=0xa370
serdes_preemphasis_lane1_xe17=0xa370
serdes_preemphasis_lane2_xe17=0xa370
serdes_preemphasis_lane3_xe17=0xa370
# xe18 (40G)
portmap_19=73:40
xgxs_rx_lane_map_19=0x213
xgxs_tx_lane_map_19=0x2031
phy_xaui_rx_polarity_flip_19=0x1
phy_xaui_tx_polarity_flip_19=0x0
serdes_driver_current_lane0_xe18=0x2
serdes_driver_current_lane1_xe18=0x2
serdes_driver_current_lane2_xe18=0x2
serdes_driver_current_lane3_xe18=0x2
serdes_pre_driver_current_lane0_xe18=0x2
serdes_pre_driver_current_lane1_xe18=0x2
serdes_pre_driver_current_lane2_xe18=0x2
serdes_pre_driver_current_lane3_xe18=0x2
serdes_preemphasis_lane0_xe18=0xa760
serdes_preemphasis_lane1_xe18=0xa760
serdes_preemphasis_lane2_xe18=0xa760
serdes_preemphasis_lane3_xe18=0xa760
# xe19 (40G)
portmap_20=77:40
xgxs_rx_lane_map_20=0x123
xgxs_tx_lane_map_20=0x1203
phy_xaui_rx_polarity_flip_20=0x3
phy_xaui_tx_polarity_flip_20=0xe
serdes_driver_current_lane0_xe19=0x2
serdes_driver_current_lane1_xe19=0x2
serdes_driver_current_lane2_xe19=0x2
serdes_driver_current_lane3_xe19=0x2
serdes_pre_driver_current_lane0_xe19=0x2
serdes_pre_driver_current_lane1_xe19=0x2
serdes_pre_driver_current_lane2_xe19=0x2
serdes_pre_driver_current_lane3_xe19=0x2
serdes_preemphasis_lane0_xe19=0xaf40
serdes_preemphasis_lane1_xe19=0xaf40
serdes_preemphasis_lane2_xe19=0xaf40
serdes_preemphasis_lane3_xe19=0xaf40
# xe20 (40G)
portmap_21=109:40
xgxs_rx_lane_map_21=0x132
xgxs_tx_lane_map_21=0x132
phy_xaui_rx_polarity_flip_21=0x8
phy_xaui_tx_polarity_flip_21=0x0
serdes_driver_current_lane0_xe20=0x1
serdes_driver_current_lane1_xe20=0x1
serdes_driver_current_lane2_xe20=0x1
serdes_driver_current_lane3_xe20=0x2
serdes_pre_driver_current_lane0_xe20=0x1
serdes_pre_driver_current_lane1_xe20=0x1
serdes_pre_driver_current_lane2_xe20=0x1
serdes_pre_driver_current_lane3_xe20=0x2
serdes_preemphasis_lane0_xe20=0xb330
serdes_preemphasis_lane1_xe20=0xb330
serdes_preemphasis_lane2_xe20=0xb330
serdes_preemphasis_lane3_xe20=0xbff0
# xe21 (40G)
portmap_22=105:40
xgxs_rx_lane_map_22=0x1320
xgxs_tx_lane_map_22=0x3021
phy_xaui_rx_polarity_flip_22=0xd
phy_xaui_tx_polarity_flip_22=0xb
serdes_driver_current_lane0_xe21=0x1
serdes_driver_current_lane1_xe21=0x1
serdes_driver_current_lane2_xe21=0x1
serdes_driver_current_lane3_xe21=0x1
serdes_pre_driver_current_lane0_xe21=0x1
serdes_pre_driver_current_lane1_xe21=0x1
serdes_pre_driver_current_lane2_xe21=0x1
serdes_pre_driver_current_lane3_xe21=0x1
serdes_preemphasis_lane0_xe21=0xb330
serdes_preemphasis_lane1_xe21=0xb330
serdes_preemphasis_lane2_xe21=0xb330
serdes_preemphasis_lane3_xe21=0xb330
# xe22 (40G)
portmap_23=113:40
xgxs_rx_lane_map_23=0x132
xgxs_tx_lane_map_23=0x132
phy_xaui_rx_polarity_flip_23=0x8
phy_xaui_tx_polarity_flip_23=0x0
serdes_driver_current_lane0_xe22=0x1
serdes_driver_current_lane1_xe22=0x1
serdes_driver_current_lane2_xe22=0x1
serdes_driver_current_lane3_xe22=0x1
serdes_pre_driver_current_lane0_xe22=0x1
serdes_pre_driver_current_lane1_xe22=0x1
serdes_pre_driver_current_lane2_xe22=0x1
serdes_pre_driver_current_lane3_xe22=0x1
serdes_preemphasis_lane0_xe22=0xbb10
serdes_preemphasis_lane1_xe22=0xbb10
serdes_preemphasis_lane2_xe22=0xbb10
serdes_preemphasis_lane3_xe22=0xc2f0
# xe23 (40G)
portmap_24=117:40
xgxs_rx_lane_map_24=0x231
xgxs_tx_lane_map_24=0x1203
phy_xaui_rx_polarity_flip_24=0x3
phy_xaui_tx_polarity_flip_24=0xe
serdes_driver_current_lane0_xe23=0x3
serdes_driver_current_lane1_xe23=0x5
serdes_driver_current_lane2_xe23=0x3
serdes_driver_current_lane3_xe23=0x3
serdes_pre_driver_current_lane0_xe23=0x3
serdes_pre_driver_current_lane1_xe23=0x5
serdes_pre_driver_current_lane2_xe23=0x3
serdes_pre_driver_current_lane3_xe23=0x3
serdes_preemphasis_lane0_xe23=0xc6e0
serdes_preemphasis_lane1_xe23=0xc6e0
serdes_preemphasis_lane2_xe23=0xc6e0
serdes_preemphasis_lane3_xe23=0xc6e0
# xe24 (40G)
portmap_25=125:40
xgxs_rx_lane_map_25=0x132
xgxs_tx_lane_map_25=0x132
phy_xaui_rx_polarity_flip_25=0x8
phy_xaui_tx_polarity_flip_25=0x0
serdes_driver_current_lane0_xe24=0x4
serdes_driver_current_lane1_xe24=0x4
serdes_driver_current_lane2_xe24=0x4
serdes_driver_current_lane3_xe24=0x4
serdes_pre_driver_current_lane0_xe24=0x4
serdes_pre_driver_current_lane1_xe24=0x4
serdes_pre_driver_current_lane2_xe24=0x4
serdes_pre_driver_current_lane3_xe24=0x4
serdes_preemphasis_lane0_xe24=0xc6e0
serdes_preemphasis_lane1_xe24=0xc6e0
serdes_preemphasis_lane2_xe24=0xc6e0
serdes_preemphasis_lane3_xe24=0xcec0
# xe25 (40G)
portmap_26=121:40
xgxs_rx_lane_map_26=0x1320
xgxs_tx_lane_map_26=0x3021
phy_xaui_rx_polarity_flip_26=0xd
phy_xaui_tx_polarity_flip_26=0xb
serdes_driver_current_lane0_xe25=0x4
serdes_driver_current_lane1_xe25=0x4
serdes_driver_current_lane2_xe25=0x4
serdes_driver_current_lane3_xe25=0x4
serdes_pre_driver_current_lane0_xe25=0x4
serdes_pre_driver_current_lane1_xe25=0x4
serdes_pre_driver_current_lane2_xe25=0x4
serdes_pre_driver_current_lane3_xe25=0x4
serdes_preemphasis_lane0_xe25=0xc6e0
serdes_preemphasis_lane1_xe25=0xc6e0
serdes_preemphasis_lane2_xe25=0xc6e0
serdes_preemphasis_lane3_xe25=0xc6e0
# xe26 (40G)
portmap_27=81:40
xgxs_rx_lane_map_27=0x1320
xgxs_tx_lane_map_27=0x2031
phy_xaui_rx_polarity_flip_27=0x1
phy_xaui_tx_polarity_flip_27=0x2
serdes_driver_current_lane0_xe26=0x2
serdes_driver_current_lane1_xe26=0x2
serdes_driver_current_lane2_xe26=0x2
serdes_driver_current_lane3_xe26=0x2
serdes_pre_driver_current_lane0_xe26=0x2
serdes_pre_driver_current_lane1_xe26=0x2
serdes_pre_driver_current_lane2_xe26=0x2
serdes_pre_driver_current_lane3_xe26=0x2
serdes_preemphasis_lane0_xe26=0xbb10
serdes_preemphasis_lane1_xe26=0xbb10
serdes_preemphasis_lane2_xe26=0xbf00
serdes_preemphasis_lane3_xe26=0xbb10
# xe27 (40G)
portmap_28=85:40
xgxs_rx_lane_map_28=0x213
xgxs_tx_lane_map_28=0x1203
phy_xaui_rx_polarity_flip_28=0xc
phy_xaui_tx_polarity_flip_28=0xe
serdes_driver_current_lane0_xe27=0x4
serdes_driver_current_lane1_xe27=0x5
serdes_driver_current_lane2_xe27=0x4
serdes_driver_current_lane3_xe27=0x5
serdes_pre_driver_current_lane0_xe27=0x4
serdes_pre_driver_current_lane1_xe27=0x5
serdes_pre_driver_current_lane2_xe27=0x4
serdes_pre_driver_current_lane3_xe27=0x5
serdes_preemphasis_lane0_xe27=0xc2f0
serdes_preemphasis_lane1_xe27=0xc6e0
serdes_preemphasis_lane2_xe27=0xc6e0
serdes_preemphasis_lane3_xe27=0xc6e0
# xe28 (40G)
portmap_29=93:40
xgxs_rx_lane_map_29=0x1320
xgxs_tx_lane_map_29=0x2031
phy_xaui_rx_polarity_flip_29=0x1
phy_xaui_tx_polarity_flip_29=0x2
serdes_driver_current_lane0_xe28=0x4
serdes_driver_current_lane1_xe28=0x4
serdes_driver_current_lane2_xe28=0x4
serdes_driver_current_lane3_xe28=0x4
serdes_pre_driver_current_lane0_xe28=0x4
serdes_pre_driver_current_lane1_xe28=0x4
serdes_pre_driver_current_lane2_xe28=0x4
serdes_pre_driver_current_lane3_xe28=0x4
serdes_preemphasis_lane0_xe28=0xc2f0
serdes_preemphasis_lane1_xe28=0xc2f0
serdes_preemphasis_lane2_xe28=0xc2f0
serdes_preemphasis_lane3_xe28=0xc2f0
# xe29 (40G)
portmap_30=89:40
xgxs_rx_lane_map_30=0x1320
xgxs_tx_lane_map_30=0x3021
phy_xaui_rx_polarity_flip_30=0x2
phy_xaui_tx_polarity_flip_30=0xb
serdes_driver_current_lane0_xe29=0x4
serdes_driver_current_lane1_xe29=0x4
serdes_driver_current_lane2_xe29=0x4
serdes_driver_current_lane3_xe29=0x4
serdes_pre_driver_current_lane0_xe29=0x4
serdes_pre_driver_current_lane1_xe29=0x4
serdes_pre_driver_current_lane2_xe29=0x4
serdes_pre_driver_current_lane3_xe29=0x4
serdes_preemphasis_lane0_xe29=0xcad0
serdes_preemphasis_lane1_xe29=0xc6e0
serdes_preemphasis_lane2_xe29=0xc6e0
serdes_preemphasis_lane3_xe29=0xc6e0
# xe30 (40G)
portmap_31=101:40
xgxs_rx_lane_map_31=0x1320
xgxs_tx_lane_map_31=0x1203
phy_xaui_rx_polarity_flip_31=0x1
phy_xaui_tx_polarity_flip_31=0x6
serdes_driver_current_lane0_xe30=0x6
serdes_driver_current_lane1_xe30=0x6
serdes_driver_current_lane2_xe30=0x6
serdes_driver_current_lane3_xe30=0x7
serdes_pre_driver_current_lane0_xe30=0x6
serdes_pre_driver_current_lane1_xe30=0x6
serdes_pre_driver_current_lane2_xe30=0x6
serdes_pre_driver_current_lane3_xe30=0x7
serdes_preemphasis_lane0_xe30=0xcec0
serdes_preemphasis_lane1_xe30=0xcec0
serdes_preemphasis_lane2_xe30=0xcad0
serdes_preemphasis_lane3_xe30=0xc6e0
# xe31 (40G)
portmap_32=97:40
xgxs_rx_lane_map_32=0x213
xgxs_tx_lane_map_32=0x2031
phy_xaui_rx_polarity_flip_32=0xc
phy_xaui_tx_polarity_flip_32=0x3
serdes_driver_current_lane0_xe31=0x5
serdes_driver_current_lane1_xe31=0x5
serdes_driver_current_lane2_xe31=0x5
serdes_driver_current_lane3_xe31=0x5
serdes_pre_driver_current_lane0_xe31=0x5
serdes_pre_driver_current_lane1_xe31=0x5
serdes_pre_driver_current_lane2_xe31=0x5
serdes_pre_driver_current_lane3_xe31=0x5
serdes_preemphasis_lane0_xe31=0xcad0
serdes_preemphasis_lane1_xe31=0xcad0
serdes_preemphasis_lane2_xe31=0xcad0
serdes_preemphasis_lane3_xe31=0xcad0

View File

@ -0,0 +1,3 @@
{%- set default_topo = 't1' %}
{%- include 'buffers_config.j2' %}

View File

@ -0,0 +1,45 @@
{%- set default_cable = '300m' %}
{%- macro generate_port_lists(PORT_ALL) %}
{# Generate list of ports #}
{% for port_idx in range(0,32) %}
{% if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{% endif %}
{% endfor %}
{%- endmacro %}
{%- macro generate_buffer_pool_and_profiles() %}
"BUFFER_POOL": {
"ingress_lossless_pool": {
"size": "12766208",
"type": "ingress",
"mode": "dynamic"
},
"egress_lossless_pool": {
"size": "12766208",
"type": "egress",
"mode": "static"
},
"egress_lossy_pool": {
"size": "7326924",
"type": "egress",
"mode": "dynamic"
}
},
"BUFFER_PROFILE": {
"ingress_lossy_profile": {
"pool":"[BUFFER_POOL|ingress_lossless_pool]",
"size":"0",
"dynamic_th":"3"
},
"egress_lossless_profile": {
"pool":"[BUFFER_POOL|egress_lossless_pool]",
"size":"0",
"static_th":"12766208"
},
"egress_lossy_profile": {
"pool":"[BUFFER_POOL|egress_lossy_pool]",
"size":"1518",
"dynamic_th":"3"
}
},
{%- endmacro %}

View File

@ -0,0 +1,45 @@
{%- set default_cable = '300m' %}
{%- macro generate_port_lists(PORT_ALL) %}
{# Generate list of ports #}
{% for port_idx in range(0,32) %}
{% if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{% endif %}
{% endfor %}
{%- endmacro %}
{%- macro generate_buffer_pool_and_profiles() %}
"BUFFER_POOL": {
"ingress_lossless_pool": {
"size": "12766208",
"type": "ingress",
"mode": "dynamic"
},
"egress_lossless_pool": {
"size": "12766208",
"type": "egress",
"mode": "static"
},
"egress_lossy_pool": {
"size": "7326924",
"type": "egress",
"mode": "dynamic"
}
},
"BUFFER_PROFILE": {
"ingress_lossy_profile": {
"pool":"[BUFFER_POOL|ingress_lossless_pool]",
"size":"0",
"dynamic_th":"3"
},
"egress_lossless_profile": {
"pool":"[BUFFER_POOL|egress_lossless_pool]",
"size":"0",
"static_th":"12766208"
},
"egress_lossy_profile": {
"pool":"[BUFFER_POOL|egress_lossy_pool]",
"size":"1518",
"dynamic_th":"3"
}
},
{%- endmacro %}

View File

@ -0,0 +1,45 @@
{%- set default_cable = '300m' %}
{%- macro generate_port_lists(PORT_ALL) %}
{# Generate list of ports #}
{% for port_idx in range(0,32) %}
{% if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{% endif %}
{% endfor %}
{%- endmacro %}
{%- macro generate_buffer_pool_and_profiles() %}
"BUFFER_POOL": {
"ingress_lossless_pool": {
"size": "12766208",
"type": "ingress",
"mode": "dynamic"
},
"egress_lossless_pool": {
"size": "12766208",
"type": "egress",
"mode": "static"
},
"egress_lossy_pool": {
"size": "7326924",
"type": "egress",
"mode": "dynamic"
}
},
"BUFFER_PROFILE": {
"ingress_lossy_profile": {
"pool":"[BUFFER_POOL|ingress_lossless_pool]",
"size":"0",
"dynamic_th":"3"
},
"egress_lossless_profile": {
"pool":"[BUFFER_POOL|egress_lossless_pool]",
"size":"0",
"static_th":"12766208"
},
"egress_lossy_profile": {
"pool":"[BUFFER_POOL|egress_lossy_pool]",
"size":"1518",
"dynamic_th":"3"
}
},
{%- endmacro %}

View File

@ -0,0 +1,17 @@
# PG lossless profiles.
# speed cable size xon xoff threshold xon_offset
10000 5m 56368 18432 55120 -3 2496
25000 5m 56368 18432 55120 -3 2496
40000 5m 56368 18432 55120 -3 2496
50000 5m 56368 18432 55120 -3 2496
100000 5m 56368 18432 55120 -3 2496
10000 40m 56368 18432 55120 -3 2496
25000 40m 56368 18432 55120 -3 2496
40000 40m 56368 18432 55120 -3 2496
50000 40m 56368 18432 55120 -3 2496
100000 40m 56368 18432 55120 -3 2496
10000 300m 56368 18432 55120 -3 2496
25000 300m 56368 18432 55120 -3 2496
40000 300m 56368 18432 55120 -3 2496
50000 300m 56368 18432 55120 -3 2496
100000 300m 56368 18432 55120 -3 2496

View File

@ -0,0 +1,33 @@
# name lanes alias index speed
Ethernet0 25,26,27,28 fortyGigE0/0 0 40000
Ethernet4 29,30,31,32 fortyGigE0/4 1 40000
Ethernet8 33,34,35,36 fortyGigE0/8 2 40000
Ethernet12 37,38,39,40 fortyGigE0/12 3 40000
Ethernet16 45,46,47,48 fortyGigE0/16 4 40000
Ethernet20 41,42,43,44 fortyGigE0/20 5 40000
Ethernet24 1,2,3,4 fortyGigE0/24 6 40000
Ethernet28 5,6,7,8 fortyGigE0/28 7 40000
Ethernet32 13,14,15,16 fortyGigE0/32 8 40000
Ethernet36 9,10,11,12 fortyGigE0/36 9 40000
Ethernet40 17,18,19,20 fortyGigE0/40 10 40000
Ethernet44 21,22,23,24 fortyGigE0/44 11 40000
Ethernet48 53,54,55,56 fortyGigE0/48 12 40000
Ethernet52 49,50,51,52 fortyGigE0/52 13 40000
Ethernet56 57,58,59,60 fortyGigE0/56 14 40000
Ethernet60 61,62,63,64 fortyGigE0/60 15 40000
Ethernet64 69,70,71,72 fortyGigE0/64 16 40000
Ethernet68 65,66,67,68 fortyGigE0/68 17 40000
Ethernet72 73,74,75,76 fortyGigE0/72 18 40000
Ethernet76 77,78,79,80 fortyGigE0/76 19 40000
Ethernet80 109,110,111,112 fortyGigE0/80 20 40000
Ethernet84 105,106,107,108 fortyGigE0/84 21 40000
Ethernet88 113,114,115,116 fortyGigE0/88 22 40000
Ethernet92 117,118,119,120 fortyGigE0/92 23 40000
Ethernet96 125,126,127,128 fortyGigE0/96 24 40000
Ethernet100 121,122,123,124 fortyGigE0/100 25 40000
Ethernet104 81,82,83,84 fortyGigE0/104 26 40000
Ethernet108 85,86,87,88 fortyGigE0/108 27 40000
Ethernet112 93,94,95,96 fortyGigE0/112 28 40000
Ethernet116 89,90,91,92 fortyGigE0/116 29 40000
Ethernet120 101,102,103,104 fortyGigE0/120 30 40000
Ethernet124 97,98,99,100 fortyGigE0/124 31 40000

View File

@ -0,0 +1 @@
{%- include 'qos_config.j2' %}

View File

@ -0,0 +1,2 @@
SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/td2-s6000-32x40G.config.bcm
SAI_NUM_ECMP_MEMBERS=32

View File

@ -0,0 +1,646 @@
# Old LPM only configuration
# l2_mem_entries=163840
# l3_mem_entries=90112
# l3_alpm_enable=0
# ipv6_lpm_128b_enable=0
#
# ALPM enable
l3_alpm_enable=2
ipv6_lpm_128b_enable=1
l2_mem_entries=32768
l3_mem_entries=16384
# From old config file
os=unix
higig2_hdr_mode=1
# Parity
parity_correction=1
parity_enable=1
stat_if_parity_enable=0
#
bcm_num_cos=8
bcm_stat_interval=2000000
l2xmsg_hostbuf_size=8192
l2xmsg_mode=1
lls_num_l2uc=12
max_vp_lags=0
miim_intr_enable=0
mmu_lossless=0
module_64ports=0
schan_intr_enable=0
stable_size=0x2000000
tdma_timeout_usec=5000000
pbmp_oversubscribe=0x000007fffffffffffffffffffffffffe
pbmp_xport_xe=0x000007fffffffffffffffffffffffffe
# Ports configuration
# xe0 (40G)
portmap_1=25:40
xgxs_rx_lane_map_1=0x213
xgxs_tx_lane_map_1=0x2031
phy_xaui_rx_polarity_flip_1=0xe
phy_xaui_tx_polarity_flip_1=0x2
serdes_driver_current_lane0_xe0=0x5
serdes_driver_current_lane1_xe0=0x5
serdes_driver_current_lane2_xe0=0x5
serdes_driver_current_lane3_xe0=0x5
serdes_pre_driver_current_lane0_xe0=0x5
serdes_pre_driver_current_lane1_xe0=0x5
serdes_pre_driver_current_lane2_xe0=0x5
serdes_pre_driver_current_lane3_xe0=0x5
serdes_preemphasis_lane0_xe0=0xcad0
serdes_preemphasis_lane1_xe0=0xc6e0
serdes_preemphasis_lane2_xe0=0xc6e0
serdes_preemphasis_lane3_xe0=0xd2b0
# xe1 (40G)
portmap_2=29:40
xgxs_rx_lane_map_2=0x213
xgxs_tx_lane_map_2=0x213
phy_xaui_rx_polarity_flip_2=0xc
phy_xaui_tx_polarity_flip_2=0x9
serdes_driver_current_lane0_xe1=0x6
serdes_driver_current_lane1_xe1=0x7
serdes_driver_current_lane2_xe1=0x6
serdes_driver_current_lane3_xe1=0x6
serdes_pre_driver_current_lane0_xe1=0x6
serdes_pre_driver_current_lane1_xe1=0x7
serdes_pre_driver_current_lane2_xe1=0x6
serdes_pre_driver_current_lane3_xe1=0x6
serdes_preemphasis_lane0_xe1=0xc2f0
serdes_preemphasis_lane1_xe1=0xd2b0
serdes_preemphasis_lane2_xe1=0xc6e0
serdes_preemphasis_lane3_xe1=0xc2f0
# xe2 (40G)
portmap_3=33:40
xgxs_rx_lane_map_3=0x213
xgxs_tx_lane_map_3=0x132
phy_xaui_rx_polarity_flip_3=0xe
phy_xaui_tx_polarity_flip_3=0x2
serdes_driver_current_lane0_xe2=0x4
serdes_driver_current_lane1_xe2=0x4
serdes_driver_current_lane2_xe2=0x4
serdes_driver_current_lane3_xe2=0x4
serdes_pre_driver_current_lane0_xe2=0x4
serdes_pre_driver_current_lane1_xe2=0x4
serdes_pre_driver_current_lane2_xe2=0x4
serdes_pre_driver_current_lane3_xe2=0x4
serdes_preemphasis_lane0_xe2=0xc6e0
serdes_preemphasis_lane1_xe2=0xc6e0
serdes_preemphasis_lane2_xe2=0xc6e0
serdes_preemphasis_lane3_xe2=0xc6e0
# xe3 (40G)
portmap_4=37:40
xgxs_rx_lane_map_4=0x213
xgxs_tx_lane_map_4=0x1203
phy_xaui_rx_polarity_flip_4=0x3
phy_xaui_tx_polarity_flip_4=0xe
serdes_driver_current_lane0_xe3=0x4
serdes_driver_current_lane1_xe3=0x4
serdes_driver_current_lane2_xe3=0x4
serdes_driver_current_lane3_xe3=0x4
serdes_pre_driver_current_lane0_xe3=0x4
serdes_pre_driver_current_lane1_xe3=0x4
serdes_pre_driver_current_lane2_xe3=0x4
serdes_pre_driver_current_lane3_xe3=0x4
serdes_preemphasis_lane0_xe3=0xcad0
serdes_preemphasis_lane1_xe3=0xcad0
serdes_preemphasis_lane2_xe3=0xc2f0
serdes_preemphasis_lane3_xe3=0xc2f0
# xe4 (40G)
portmap_5=45:40
xgxs_rx_lane_map_5=0x213
xgxs_tx_lane_map_5=0x213
phy_xaui_rx_polarity_flip_5=0xe
phy_xaui_tx_polarity_flip_5=0x8
serdes_driver_current_lane0_xe4=0x4
serdes_driver_current_lane1_xe4=0x4
serdes_driver_current_lane2_xe4=0x4
serdes_driver_current_lane3_xe4=0x4
serdes_pre_driver_current_lane0_xe4=0x4
serdes_pre_driver_current_lane1_xe4=0x4
serdes_pre_driver_current_lane2_xe4=0x4
serdes_pre_driver_current_lane3_xe4=0x4
serdes_preemphasis_lane0_xe4=0xc2f0
serdes_preemphasis_lane1_xe4=0xc2f0
serdes_preemphasis_lane2_xe4=0xc2f0
serdes_preemphasis_lane3_xe4=0xc2f0
# xe5 (40G)
portmap_6=41:40
xgxs_rx_lane_map_6=0x213
xgxs_tx_lane_map_6=0x3021
phy_xaui_rx_polarity_flip_6=0x3
phy_xaui_tx_polarity_flip_6=0xb
serdes_driver_current_lane0_xe5=0x4
serdes_driver_current_lane1_xe5=0x4
serdes_driver_current_lane2_xe5=0x4
serdes_driver_current_lane3_xe5=0x4
serdes_pre_driver_current_lane0_xe5=0x4
serdes_pre_driver_current_lane1_xe5=0x4
serdes_pre_driver_current_lane2_xe5=0x4
serdes_pre_driver_current_lane3_xe5=0x4
serdes_preemphasis_lane0_xe5=0xc6e0
serdes_preemphasis_lane1_xe5=0xc2f0
serdes_preemphasis_lane2_xe5=0xc2f0
serdes_preemphasis_lane3_xe5=0xcad0
# xe6 (40G)
portmap_7=1:40
xgxs_rx_lane_map_7=0x213
xgxs_tx_lane_map_7=0x2031
phy_xaui_rx_polarity_flip_7=0xe
phy_xaui_tx_polarity_flip_7=0xd
serdes_driver_current_lane0_xe6=0x5
serdes_driver_current_lane1_xe6=0x5
serdes_driver_current_lane2_xe6=0x5
serdes_driver_current_lane3_xe6=0x5
serdes_pre_driver_current_lane0_xe6=0x5
serdes_pre_driver_current_lane1_xe6=0x5
serdes_pre_driver_current_lane2_xe6=0x5
serdes_pre_driver_current_lane3_xe6=0x5
serdes_preemphasis_lane0_xe6=0xc6e0
serdes_preemphasis_lane1_xe6=0xcad0
serdes_preemphasis_lane2_xe6=0xc6e0
serdes_preemphasis_lane3_xe6=0xcad0
# xe7 (40G)
portmap_8=5:40
xgxs_rx_lane_map_8=0x213
xgxs_tx_lane_map_8=0x1203
phy_xaui_rx_polarity_flip_8=0xc
phy_xaui_tx_polarity_flip_8=0x1
serdes_driver_current_lane0_xe7=0x4
serdes_driver_current_lane1_xe7=0x4
serdes_driver_current_lane2_xe7=0x4
serdes_driver_current_lane3_xe7=0x4
serdes_pre_driver_current_lane0_xe7=0x4
serdes_pre_driver_current_lane1_xe7=0x4
serdes_pre_driver_current_lane2_xe7=0x4
serdes_pre_driver_current_lane3_xe7=0x4
serdes_preemphasis_lane0_xe7=0xc6e0
serdes_preemphasis_lane1_xe7=0xc6e0
serdes_preemphasis_lane2_xe7=0xc6e0
serdes_preemphasis_lane3_xe7=0xc6e0
# xe8 (40G)
portmap_9=13:40
xgxs_rx_lane_map_9=0x213
xgxs_tx_lane_map_9=0x132
phy_xaui_rx_polarity_flip_9=0xe
phy_xaui_tx_polarity_flip_9=0x0
serdes_driver_current_lane0_xe8=0x2
serdes_driver_current_lane1_xe8=0x3
serdes_driver_current_lane2_xe8=0x2
serdes_driver_current_lane3_xe8=0x2
serdes_pre_driver_current_lane0_xe8=0x2
serdes_pre_driver_current_lane1_xe8=0x3
serdes_pre_driver_current_lane2_xe8=0x2
serdes_pre_driver_current_lane3_xe8=0x2
serdes_preemphasis_lane0_xe8=0xb270
serdes_preemphasis_lane1_xe8=0xbb10
serdes_preemphasis_lane2_xe8=0xb720
serdes_preemphasis_lane3_xe8=0xb720
# xe9 (40G)
portmap_10=9:40
xgxs_rx_lane_map_10=0x3120
xgxs_tx_lane_map_10=0x3021
phy_xaui_rx_polarity_flip_10=0x0
phy_xaui_tx_polarity_flip_10=0x4
serdes_driver_current_lane0_xe9=0x3
serdes_driver_current_lane1_xe9=0x3
serdes_driver_current_lane2_xe9=0x3
serdes_driver_current_lane3_xe9=0x3
serdes_pre_driver_current_lane0_xe9=0x3
serdes_pre_driver_current_lane1_xe9=0x3
serdes_pre_driver_current_lane2_xe9=0x3
serdes_pre_driver_current_lane3_xe9=0x3
serdes_preemphasis_lane0_xe9=0xc2f0
serdes_preemphasis_lane1_xe9=0xc6e0
serdes_preemphasis_lane2_xe9=0xbf00
serdes_preemphasis_lane3_xe9=0xc2f0
# xe10 (40G)
portmap_11=17:40
xgxs_rx_lane_map_11=0x213
xgxs_tx_lane_map_11=0x132
phy_xaui_rx_polarity_flip_11=0xe
phy_xaui_tx_polarity_flip_11=0x0
serdes_driver_current_lane0_xe10=0x2
serdes_driver_current_lane1_xe10=0x2
serdes_driver_current_lane2_xe10=0x2
serdes_driver_current_lane3_xe10=0x2
serdes_pre_driver_current_lane0_xe10=0x2
serdes_pre_driver_current_lane1_xe10=0x2
serdes_pre_driver_current_lane2_xe10=0x2
serdes_pre_driver_current_lane3_xe10=0x2
serdes_preemphasis_lane0_xe10=0xb330
serdes_preemphasis_lane1_xe10=0xbb10
serdes_preemphasis_lane2_xe10=0xbb10
serdes_preemphasis_lane3_xe10=0xbb10
# xe11 (40G)
portmap_12=21:40
xgxs_rx_lane_map_12=0x123
xgxs_tx_lane_map_12=0x1203
phy_xaui_rx_polarity_flip_12=0xc
phy_xaui_tx_polarity_flip_12=0xe
serdes_driver_current_lane0_xe11=0x2
serdes_driver_current_lane1_xe11=0x2
serdes_driver_current_lane2_xe11=0x2
serdes_driver_current_lane3_xe11=0x2
serdes_pre_driver_current_lane0_xe11=0x2
serdes_pre_driver_current_lane1_xe11=0x2
serdes_pre_driver_current_lane2_xe11=0x2
serdes_pre_driver_current_lane3_xe11=0x2
serdes_preemphasis_lane0_xe11=0xb330
serdes_preemphasis_lane1_xe11=0xb330
serdes_preemphasis_lane2_xe11=0xb330
serdes_preemphasis_lane3_xe11=0xb330
# xe12 (40G)
portmap_13=53:40
xgxs_rx_lane_map_13=0x213
xgxs_tx_lane_map_13=0x231
phy_xaui_rx_polarity_flip_13=0x1
phy_xaui_tx_polarity_flip_13=0x0
serdes_driver_current_lane0_xe12=0x2
serdes_driver_current_lane1_xe12=0x2
serdes_driver_current_lane2_xe12=0x2
serdes_driver_current_lane3_xe12=0x2
serdes_pre_driver_current_lane0_xe12=0x2
serdes_pre_driver_current_lane1_xe12=0x2
serdes_pre_driver_current_lane2_xe12=0x2
serdes_pre_driver_current_lane3_xe12=0x2
serdes_preemphasis_lane0_xe12=0xaf40
serdes_preemphasis_lane1_xe12=0xaf40
serdes_preemphasis_lane2_xe12=0xaf40
serdes_preemphasis_lane3_xe12=0xaf40
# xe13 (40G)
portmap_14=49:40
xgxs_rx_lane_map_14=0x1302
xgxs_tx_lane_map_14=0x2031
phy_xaui_rx_polarity_flip_14=0xb
phy_xaui_tx_polarity_flip_14=0x3
serdes_driver_current_lane0_xe13=0x2
serdes_driver_current_lane1_xe13=0x2
serdes_driver_current_lane2_xe13=0x2
serdes_driver_current_lane3_xe13=0x2
serdes_pre_driver_current_lane0_xe13=0x2
serdes_pre_driver_current_lane1_xe13=0x2
serdes_pre_driver_current_lane2_xe13=0x2
serdes_pre_driver_current_lane3_xe13=0x2
serdes_preemphasis_lane0_xe13=0xa760
serdes_preemphasis_lane1_xe13=0xa760
serdes_preemphasis_lane2_xe13=0xa760
serdes_preemphasis_lane3_xe13=0xa760
# xe14 (40G)
portmap_15=57:40
xgxs_rx_lane_map_15=0x213
xgxs_tx_lane_map_15=0x2031
phy_xaui_rx_polarity_flip_15=0x1
phy_xaui_tx_polarity_flip_15=0x0
serdes_driver_current_lane0_xe14=0x1
serdes_driver_current_lane1_xe14=0x1
serdes_driver_current_lane2_xe14=0x1
serdes_driver_current_lane3_xe14=0x1
serdes_pre_driver_current_lane0_xe14=0x1
serdes_pre_driver_current_lane1_xe14=0x1
serdes_pre_driver_current_lane2_xe14=0x1
serdes_pre_driver_current_lane3_xe14=0x1
serdes_preemphasis_lane0_xe14=0xa760
serdes_preemphasis_lane1_xe14=0xa760
serdes_preemphasis_lane2_xe14=0xa760
serdes_preemphasis_lane3_xe14=0xa760
# xe15 (40G)
portmap_16=61:40
xgxs_rx_lane_map_16=0x132
xgxs_tx_lane_map_16=0x213
phy_xaui_rx_polarity_flip_16=0x0
phy_xaui_tx_polarity_flip_16=0x0
serdes_driver_current_lane0_xe15=0x2
serdes_driver_current_lane1_xe15=0x2
serdes_driver_current_lane2_xe15=0x2
serdes_driver_current_lane3_xe15=0x2
serdes_pre_driver_current_lane0_xe15=0x2
serdes_pre_driver_current_lane1_xe15=0x2
serdes_pre_driver_current_lane2_xe15=0x2
serdes_pre_driver_current_lane3_xe15=0x2
serdes_preemphasis_lane0_xe15=0xa760
serdes_preemphasis_lane1_xe15=0xa760
serdes_preemphasis_lane2_xe15=0xa760
serdes_preemphasis_lane3_xe15=0xa760
# xe16 (40G)
portmap_17=69:40
xgxs_rx_lane_map_17=0x213
xgxs_tx_lane_map_17=0x2130
phy_xaui_rx_polarity_flip_17=0x1
phy_xaui_tx_polarity_flip_17=0xf
serdes_driver_current_lane0_xe16=0x1
serdes_driver_current_lane1_xe16=0x1
serdes_driver_current_lane2_xe16=0x1
serdes_driver_current_lane3_xe16=0x1
serdes_pre_driver_current_lane0_xe16=0x1
serdes_pre_driver_current_lane1_xe16=0x1
serdes_pre_driver_current_lane2_xe16=0x1
serdes_pre_driver_current_lane3_xe16=0x1
serdes_preemphasis_lane0_xe16=0xa760
serdes_preemphasis_lane1_xe16=0xa760
serdes_preemphasis_lane2_xe16=0xa760
serdes_preemphasis_lane3_xe16=0xa760
# xe17 (40G)
portmap_18=65:40
xgxs_rx_lane_map_18=0x132
xgxs_tx_lane_map_18=0x2031
phy_xaui_rx_polarity_flip_18=0x3
phy_xaui_tx_polarity_flip_18=0x9
serdes_driver_current_lane0_xe17=0x1
serdes_driver_current_lane1_xe17=0x1
serdes_driver_current_lane2_xe17=0x1
serdes_driver_current_lane3_xe17=0x1
serdes_pre_driver_current_lane0_xe17=0x1
serdes_pre_driver_current_lane1_xe17=0x1
serdes_pre_driver_current_lane2_xe17=0x1
serdes_pre_driver_current_lane3_xe17=0x1
serdes_preemphasis_lane0_xe17=0xa370
serdes_preemphasis_lane1_xe17=0xa370
serdes_preemphasis_lane2_xe17=0xa370
serdes_preemphasis_lane3_xe17=0xa370
# xe18 (40G)
portmap_19=73:40
xgxs_rx_lane_map_19=0x213
xgxs_tx_lane_map_19=0x2031
phy_xaui_rx_polarity_flip_19=0x1
phy_xaui_tx_polarity_flip_19=0x0
serdes_driver_current_lane0_xe18=0x2
serdes_driver_current_lane1_xe18=0x2
serdes_driver_current_lane2_xe18=0x2
serdes_driver_current_lane3_xe18=0x2
serdes_pre_driver_current_lane0_xe18=0x2
serdes_pre_driver_current_lane1_xe18=0x2
serdes_pre_driver_current_lane2_xe18=0x2
serdes_pre_driver_current_lane3_xe18=0x2
serdes_preemphasis_lane0_xe18=0xa760
serdes_preemphasis_lane1_xe18=0xa760
serdes_preemphasis_lane2_xe18=0xa760
serdes_preemphasis_lane3_xe18=0xa760
# xe19 (40G)
portmap_20=77:40
xgxs_rx_lane_map_20=0x123
xgxs_tx_lane_map_20=0x1203
phy_xaui_rx_polarity_flip_20=0x3
phy_xaui_tx_polarity_flip_20=0xe
serdes_driver_current_lane0_xe19=0x2
serdes_driver_current_lane1_xe19=0x2
serdes_driver_current_lane2_xe19=0x2
serdes_driver_current_lane3_xe19=0x2
serdes_pre_driver_current_lane0_xe19=0x2
serdes_pre_driver_current_lane1_xe19=0x2
serdes_pre_driver_current_lane2_xe19=0x2
serdes_pre_driver_current_lane3_xe19=0x2
serdes_preemphasis_lane0_xe19=0xaf40
serdes_preemphasis_lane1_xe19=0xaf40
serdes_preemphasis_lane2_xe19=0xaf40
serdes_preemphasis_lane3_xe19=0xaf40
# xe20 (40G)
portmap_21=109:40
xgxs_rx_lane_map_21=0x132
xgxs_tx_lane_map_21=0x132
phy_xaui_rx_polarity_flip_21=0x8
phy_xaui_tx_polarity_flip_21=0x0
serdes_driver_current_lane0_xe20=0x1
serdes_driver_current_lane1_xe20=0x1
serdes_driver_current_lane2_xe20=0x1
serdes_driver_current_lane3_xe20=0x2
serdes_pre_driver_current_lane0_xe20=0x1
serdes_pre_driver_current_lane1_xe20=0x1
serdes_pre_driver_current_lane2_xe20=0x1
serdes_pre_driver_current_lane3_xe20=0x2
serdes_preemphasis_lane0_xe20=0xb330
serdes_preemphasis_lane1_xe20=0xb330
serdes_preemphasis_lane2_xe20=0xb330
serdes_preemphasis_lane3_xe20=0xbff0
# xe21 (40G)
portmap_22=105:40
xgxs_rx_lane_map_22=0x1320
xgxs_tx_lane_map_22=0x3021
phy_xaui_rx_polarity_flip_22=0xd
phy_xaui_tx_polarity_flip_22=0xb
serdes_driver_current_lane0_xe21=0x1
serdes_driver_current_lane1_xe21=0x1
serdes_driver_current_lane2_xe21=0x1
serdes_driver_current_lane3_xe21=0x1
serdes_pre_driver_current_lane0_xe21=0x1
serdes_pre_driver_current_lane1_xe21=0x1
serdes_pre_driver_current_lane2_xe21=0x1
serdes_pre_driver_current_lane3_xe21=0x1
serdes_preemphasis_lane0_xe21=0xb330
serdes_preemphasis_lane1_xe21=0xb330
serdes_preemphasis_lane2_xe21=0xb330
serdes_preemphasis_lane3_xe21=0xb330
# xe22 (40G)
portmap_23=113:40
xgxs_rx_lane_map_23=0x132
xgxs_tx_lane_map_23=0x132
phy_xaui_rx_polarity_flip_23=0x8
phy_xaui_tx_polarity_flip_23=0x0
serdes_driver_current_lane0_xe22=0x1
serdes_driver_current_lane1_xe22=0x1
serdes_driver_current_lane2_xe22=0x1
serdes_driver_current_lane3_xe22=0x1
serdes_pre_driver_current_lane0_xe22=0x1
serdes_pre_driver_current_lane1_xe22=0x1
serdes_pre_driver_current_lane2_xe22=0x1
serdes_pre_driver_current_lane3_xe22=0x1
serdes_preemphasis_lane0_xe22=0xbb10
serdes_preemphasis_lane1_xe22=0xbb10
serdes_preemphasis_lane2_xe22=0xbb10
serdes_preemphasis_lane3_xe22=0xc2f0
# xe23 (40G)
portmap_24=117:40
xgxs_rx_lane_map_24=0x231
xgxs_tx_lane_map_24=0x1203
phy_xaui_rx_polarity_flip_24=0x3
phy_xaui_tx_polarity_flip_24=0xe
serdes_driver_current_lane0_xe23=0x3
serdes_driver_current_lane1_xe23=0x5
serdes_driver_current_lane2_xe23=0x3
serdes_driver_current_lane3_xe23=0x3
serdes_pre_driver_current_lane0_xe23=0x3
serdes_pre_driver_current_lane1_xe23=0x5
serdes_pre_driver_current_lane2_xe23=0x3
serdes_pre_driver_current_lane3_xe23=0x3
serdes_preemphasis_lane0_xe23=0xc6e0
serdes_preemphasis_lane1_xe23=0xc6e0
serdes_preemphasis_lane2_xe23=0xc6e0
serdes_preemphasis_lane3_xe23=0xc6e0
# xe24 (40G)
portmap_25=125:40
xgxs_rx_lane_map_25=0x132
xgxs_tx_lane_map_25=0x132
phy_xaui_rx_polarity_flip_25=0x8
phy_xaui_tx_polarity_flip_25=0x0
serdes_driver_current_lane0_xe24=0x4
serdes_driver_current_lane1_xe24=0x4
serdes_driver_current_lane2_xe24=0x4
serdes_driver_current_lane3_xe24=0x4
serdes_pre_driver_current_lane0_xe24=0x4
serdes_pre_driver_current_lane1_xe24=0x4
serdes_pre_driver_current_lane2_xe24=0x4
serdes_pre_driver_current_lane3_xe24=0x4
serdes_preemphasis_lane0_xe24=0xc6e0
serdes_preemphasis_lane1_xe24=0xc6e0
serdes_preemphasis_lane2_xe24=0xc6e0
serdes_preemphasis_lane3_xe24=0xcec0
# xe25 (40G)
portmap_26=121:40
xgxs_rx_lane_map_26=0x1320
xgxs_tx_lane_map_26=0x3021
phy_xaui_rx_polarity_flip_26=0xd
phy_xaui_tx_polarity_flip_26=0xb
serdes_driver_current_lane0_xe25=0x4
serdes_driver_current_lane1_xe25=0x4
serdes_driver_current_lane2_xe25=0x4
serdes_driver_current_lane3_xe25=0x4
serdes_pre_driver_current_lane0_xe25=0x4
serdes_pre_driver_current_lane1_xe25=0x4
serdes_pre_driver_current_lane2_xe25=0x4
serdes_pre_driver_current_lane3_xe25=0x4
serdes_preemphasis_lane0_xe25=0xc6e0
serdes_preemphasis_lane1_xe25=0xc6e0
serdes_preemphasis_lane2_xe25=0xc6e0
serdes_preemphasis_lane3_xe25=0xc6e0
# xe26 (40G)
portmap_27=81:40
xgxs_rx_lane_map_27=0x1320
xgxs_tx_lane_map_27=0x2031
phy_xaui_rx_polarity_flip_27=0x1
phy_xaui_tx_polarity_flip_27=0x2
serdes_driver_current_lane0_xe26=0x2
serdes_driver_current_lane1_xe26=0x2
serdes_driver_current_lane2_xe26=0x2
serdes_driver_current_lane3_xe26=0x2
serdes_pre_driver_current_lane0_xe26=0x2
serdes_pre_driver_current_lane1_xe26=0x2
serdes_pre_driver_current_lane2_xe26=0x2
serdes_pre_driver_current_lane3_xe26=0x2
serdes_preemphasis_lane0_xe26=0xbb10
serdes_preemphasis_lane1_xe26=0xbb10
serdes_preemphasis_lane2_xe26=0xbf00
serdes_preemphasis_lane3_xe26=0xbb10
# xe27 (40G)
portmap_28=85:40
xgxs_rx_lane_map_28=0x213
xgxs_tx_lane_map_28=0x1203
phy_xaui_rx_polarity_flip_28=0xc
phy_xaui_tx_polarity_flip_28=0xe
serdes_driver_current_lane0_xe27=0x4
serdes_driver_current_lane1_xe27=0x5
serdes_driver_current_lane2_xe27=0x4
serdes_driver_current_lane3_xe27=0x5
serdes_pre_driver_current_lane0_xe27=0x4
serdes_pre_driver_current_lane1_xe27=0x5
serdes_pre_driver_current_lane2_xe27=0x4
serdes_pre_driver_current_lane3_xe27=0x5
serdes_preemphasis_lane0_xe27=0xc2f0
serdes_preemphasis_lane1_xe27=0xc6e0
serdes_preemphasis_lane2_xe27=0xc6e0
serdes_preemphasis_lane3_xe27=0xc6e0
# xe28 (40G)
portmap_29=93:40
xgxs_rx_lane_map_29=0x1320
xgxs_tx_lane_map_29=0x2031
phy_xaui_rx_polarity_flip_29=0x1
phy_xaui_tx_polarity_flip_29=0x2
serdes_driver_current_lane0_xe28=0x4
serdes_driver_current_lane1_xe28=0x4
serdes_driver_current_lane2_xe28=0x4
serdes_driver_current_lane3_xe28=0x4
serdes_pre_driver_current_lane0_xe28=0x4
serdes_pre_driver_current_lane1_xe28=0x4
serdes_pre_driver_current_lane2_xe28=0x4
serdes_pre_driver_current_lane3_xe28=0x4
serdes_preemphasis_lane0_xe28=0xc2f0
serdes_preemphasis_lane1_xe28=0xc2f0
serdes_preemphasis_lane2_xe28=0xc2f0
serdes_preemphasis_lane3_xe28=0xc2f0
# xe29 (40G)
portmap_30=89:40
xgxs_rx_lane_map_30=0x1320
xgxs_tx_lane_map_30=0x3021
phy_xaui_rx_polarity_flip_30=0x2
phy_xaui_tx_polarity_flip_30=0xb
serdes_driver_current_lane0_xe29=0x4
serdes_driver_current_lane1_xe29=0x4
serdes_driver_current_lane2_xe29=0x4
serdes_driver_current_lane3_xe29=0x4
serdes_pre_driver_current_lane0_xe29=0x4
serdes_pre_driver_current_lane1_xe29=0x4
serdes_pre_driver_current_lane2_xe29=0x4
serdes_pre_driver_current_lane3_xe29=0x4
serdes_preemphasis_lane0_xe29=0xcad0
serdes_preemphasis_lane1_xe29=0xc6e0
serdes_preemphasis_lane2_xe29=0xc6e0
serdes_preemphasis_lane3_xe29=0xc6e0
# xe30 (40G)
portmap_31=101:40
xgxs_rx_lane_map_31=0x1320
xgxs_tx_lane_map_31=0x1203
phy_xaui_rx_polarity_flip_31=0x1
phy_xaui_tx_polarity_flip_31=0x6
serdes_driver_current_lane0_xe30=0x6
serdes_driver_current_lane1_xe30=0x6
serdes_driver_current_lane2_xe30=0x6
serdes_driver_current_lane3_xe30=0x7
serdes_pre_driver_current_lane0_xe30=0x6
serdes_pre_driver_current_lane1_xe30=0x6
serdes_pre_driver_current_lane2_xe30=0x6
serdes_pre_driver_current_lane3_xe30=0x7
serdes_preemphasis_lane0_xe30=0xcec0
serdes_preemphasis_lane1_xe30=0xcec0
serdes_preemphasis_lane2_xe30=0xcad0
serdes_preemphasis_lane3_xe30=0xc6e0
# xe31 (40G)
portmap_32=97:40
xgxs_rx_lane_map_32=0x213
xgxs_tx_lane_map_32=0x2031
phy_xaui_rx_polarity_flip_32=0xc
phy_xaui_tx_polarity_flip_32=0x3
serdes_driver_current_lane0_xe31=0x5
serdes_driver_current_lane1_xe31=0x5
serdes_driver_current_lane2_xe31=0x5
serdes_driver_current_lane3_xe31=0x5
serdes_pre_driver_current_lane0_xe31=0x5
serdes_pre_driver_current_lane1_xe31=0x5
serdes_pre_driver_current_lane2_xe31=0x5
serdes_pre_driver_current_lane3_xe31=0x5
serdes_preemphasis_lane0_xe31=0xcad0
serdes_preemphasis_lane1_xe31=0xcad0
serdes_preemphasis_lane2_xe31=0xcad0
serdes_preemphasis_lane3_xe31=0xcad0

View File

@ -0,0 +1,3 @@
{%- set default_topo = 't1' %}
{%- include 'buffers_config.j2' %}

View File

@ -0,0 +1,45 @@
{%- set default_cable = '300m' %}
{%- macro generate_port_lists(PORT_ALL) %}
{# Generate list of ports #}
{% for port_idx in range(0,32) %}
{% if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{% endif %}
{% endfor %}
{%- endmacro %}
{%- macro generate_buffer_pool_and_profiles() %}
"BUFFER_POOL": {
"ingress_lossless_pool": {
"size": "12766208",
"type": "ingress",
"mode": "dynamic"
},
"egress_lossless_pool": {
"size": "12766208",
"type": "egress",
"mode": "static"
},
"egress_lossy_pool": {
"size": "7326924",
"type": "egress",
"mode": "dynamic"
}
},
"BUFFER_PROFILE": {
"ingress_lossy_profile": {
"pool":"[BUFFER_POOL|ingress_lossless_pool]",
"size":"0",
"dynamic_th":"3"
},
"egress_lossless_profile": {
"pool":"[BUFFER_POOL|egress_lossless_pool]",
"size":"0",
"static_th":"12766208"
},
"egress_lossy_profile": {
"pool":"[BUFFER_POOL|egress_lossy_pool]",
"size":"1518",
"dynamic_th":"3"
}
},
{%- endmacro %}

View File

@ -0,0 +1,45 @@
{%- set default_cable = '300m' %}
{%- macro generate_port_lists(PORT_ALL) %}
{# Generate list of ports #}
{% for port_idx in range(0,32) %}
{% if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{% endif %}
{% endfor %}
{%- endmacro %}
{%- macro generate_buffer_pool_and_profiles() %}
"BUFFER_POOL": {
"ingress_lossless_pool": {
"size": "12766208",
"type": "ingress",
"mode": "dynamic"
},
"egress_lossless_pool": {
"size": "12766208",
"type": "egress",
"mode": "static"
},
"egress_lossy_pool": {
"size": "7326924",
"type": "egress",
"mode": "dynamic"
}
},
"BUFFER_PROFILE": {
"ingress_lossy_profile": {
"pool":"[BUFFER_POOL|ingress_lossless_pool]",
"size":"0",
"dynamic_th":"3"
},
"egress_lossless_profile": {
"pool":"[BUFFER_POOL|egress_lossless_pool]",
"size":"0",
"static_th":"12766208"
},
"egress_lossy_profile": {
"pool":"[BUFFER_POOL|egress_lossy_pool]",
"size":"1518",
"dynamic_th":"3"
}
},
{%- endmacro %}

View File

@ -0,0 +1,45 @@
{%- set default_cable = '300m' %}
{%- macro generate_port_lists(PORT_ALL) %}
{# Generate list of ports #}
{% for port_idx in range(0,32) %}
{% if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{% endif %}
{% endfor %}
{%- endmacro %}
{%- macro generate_buffer_pool_and_profiles() %}
"BUFFER_POOL": {
"ingress_lossless_pool": {
"size": "12766208",
"type": "ingress",
"mode": "dynamic"
},
"egress_lossless_pool": {
"size": "12766208",
"type": "egress",
"mode": "static"
},
"egress_lossy_pool": {
"size": "7326924",
"type": "egress",
"mode": "dynamic"
}
},
"BUFFER_PROFILE": {
"ingress_lossy_profile": {
"pool":"[BUFFER_POOL|ingress_lossless_pool]",
"size":"0",
"dynamic_th":"3"
},
"egress_lossless_profile": {
"pool":"[BUFFER_POOL|egress_lossless_pool]",
"size":"0",
"static_th":"12766208"
},
"egress_lossy_profile": {
"pool":"[BUFFER_POOL|egress_lossy_pool]",
"size":"1518",
"dynamic_th":"3"
}
},
{%- endmacro %}

View File

@ -0,0 +1,17 @@
# PG lossless profiles.
# speed cable size xon xoff threshold xon_offset
10000 5m 56368 18432 55120 -3 2496
25000 5m 56368 18432 55120 -3 2496
40000 5m 56368 18432 55120 -3 2496
50000 5m 56368 18432 55120 -3 2496
100000 5m 56368 18432 55120 -3 2496
10000 40m 56368 18432 55120 -3 2496
25000 40m 56368 18432 55120 -3 2496
40000 40m 56368 18432 55120 -3 2496
50000 40m 56368 18432 55120 -3 2496
100000 40m 56368 18432 55120 -3 2496
10000 300m 56368 18432 55120 -3 2496
25000 300m 56368 18432 55120 -3 2496
40000 300m 56368 18432 55120 -3 2496
50000 300m 56368 18432 55120 -3 2496
100000 300m 56368 18432 55120 -3 2496

View File

@ -0,0 +1,33 @@
# name lanes alias index speed
Ethernet0 25,26,27,28 fortyGigE0/0 0 40000
Ethernet4 29,30,31,32 fortyGigE0/4 1 40000
Ethernet8 33,34,35,36 fortyGigE0/8 2 40000
Ethernet12 37,38,39,40 fortyGigE0/12 3 40000
Ethernet16 45,46,47,48 fortyGigE0/16 4 40000
Ethernet20 41,42,43,44 fortyGigE0/20 5 40000
Ethernet24 1,2,3,4 fortyGigE0/24 6 40000
Ethernet28 5,6,7,8 fortyGigE0/28 7 40000
Ethernet32 13,14,15,16 fortyGigE0/32 8 40000
Ethernet36 9,10,11,12 fortyGigE0/36 9 40000
Ethernet40 17,18,19,20 fortyGigE0/40 10 40000
Ethernet44 21,22,23,24 fortyGigE0/44 11 40000
Ethernet48 53,54,55,56 fortyGigE0/48 12 40000
Ethernet52 49,50,51,52 fortyGigE0/52 13 40000
Ethernet56 57,58,59,60 fortyGigE0/56 14 40000
Ethernet60 61,62,63,64 fortyGigE0/60 15 40000
Ethernet64 69,70,71,72 fortyGigE0/64 16 40000
Ethernet68 65,66,67,68 fortyGigE0/68 17 40000
Ethernet72 73,74,75,76 fortyGigE0/72 18 40000
Ethernet76 77,78,79,80 fortyGigE0/76 19 40000
Ethernet80 109,110,111,112 fortyGigE0/80 20 40000
Ethernet84 105,106,107,108 fortyGigE0/84 21 40000
Ethernet88 113,114,115,116 fortyGigE0/88 22 40000
Ethernet92 117,118,119,120 fortyGigE0/92 23 40000
Ethernet96 125,126,127,128 fortyGigE0/96 24 40000
Ethernet100 121,122,123,124 fortyGigE0/100 25 40000
Ethernet104 81,82,83,84 fortyGigE0/104 26 40000
Ethernet108 85,86,87,88 fortyGigE0/108 27 40000
Ethernet112 93,94,95,96 fortyGigE0/112 28 40000
Ethernet116 89,90,91,92 fortyGigE0/116 29 40000
Ethernet120 101,102,103,104 fortyGigE0/120 30 40000
Ethernet124 97,98,99,100 fortyGigE0/124 31 40000

View File

@ -0,0 +1 @@
{%- include 'qos_config.j2' %}

View File

@ -0,0 +1,2 @@
SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/td2-s6000-32x40G.config.bcm
SAI_NUM_ECMP_MEMBERS=32

View File

@ -0,0 +1,646 @@
# Old LPM only configuration
# l2_mem_entries=163840
# l3_mem_entries=90112
# l3_alpm_enable=0
# ipv6_lpm_128b_enable=0
#
# ALPM enable
l3_alpm_enable=2
ipv6_lpm_128b_enable=1
l2_mem_entries=32768
l3_mem_entries=16384
# From old config file
os=unix
higig2_hdr_mode=1
# Parity
parity_correction=1
parity_enable=1
stat_if_parity_enable=0
#
bcm_num_cos=8
bcm_stat_interval=2000000
l2xmsg_hostbuf_size=8192
l2xmsg_mode=1
lls_num_l2uc=12
max_vp_lags=0
miim_intr_enable=0
mmu_lossless=0
module_64ports=0
schan_intr_enable=0
stable_size=0x2000000
tdma_timeout_usec=5000000
pbmp_oversubscribe=0x000007fffffffffffffffffffffffffe
pbmp_xport_xe=0x000007fffffffffffffffffffffffffe
# Ports configuration
# xe0 (40G)
portmap_1=25:40
xgxs_rx_lane_map_1=0x213
xgxs_tx_lane_map_1=0x2031
phy_xaui_rx_polarity_flip_1=0xe
phy_xaui_tx_polarity_flip_1=0x2
serdes_driver_current_lane0_xe0=0x5
serdes_driver_current_lane1_xe0=0x5
serdes_driver_current_lane2_xe0=0x5
serdes_driver_current_lane3_xe0=0x5
serdes_pre_driver_current_lane0_xe0=0x5
serdes_pre_driver_current_lane1_xe0=0x5
serdes_pre_driver_current_lane2_xe0=0x5
serdes_pre_driver_current_lane3_xe0=0x5
serdes_preemphasis_lane0_xe0=0xcad0
serdes_preemphasis_lane1_xe0=0xc6e0
serdes_preemphasis_lane2_xe0=0xc6e0
serdes_preemphasis_lane3_xe0=0xd2b0
# xe1 (40G)
portmap_2=29:40
xgxs_rx_lane_map_2=0x213
xgxs_tx_lane_map_2=0x213
phy_xaui_rx_polarity_flip_2=0xc
phy_xaui_tx_polarity_flip_2=0x9
serdes_driver_current_lane0_xe1=0x6
serdes_driver_current_lane1_xe1=0x7
serdes_driver_current_lane2_xe1=0x6
serdes_driver_current_lane3_xe1=0x6
serdes_pre_driver_current_lane0_xe1=0x6
serdes_pre_driver_current_lane1_xe1=0x7
serdes_pre_driver_current_lane2_xe1=0x6
serdes_pre_driver_current_lane3_xe1=0x6
serdes_preemphasis_lane0_xe1=0xc2f0
serdes_preemphasis_lane1_xe1=0xd2b0
serdes_preemphasis_lane2_xe1=0xc6e0
serdes_preemphasis_lane3_xe1=0xc2f0
# xe2 (40G)
portmap_3=33:40
xgxs_rx_lane_map_3=0x213
xgxs_tx_lane_map_3=0x132
phy_xaui_rx_polarity_flip_3=0xe
phy_xaui_tx_polarity_flip_3=0x2
serdes_driver_current_lane0_xe2=0x4
serdes_driver_current_lane1_xe2=0x4
serdes_driver_current_lane2_xe2=0x4
serdes_driver_current_lane3_xe2=0x4
serdes_pre_driver_current_lane0_xe2=0x4
serdes_pre_driver_current_lane1_xe2=0x4
serdes_pre_driver_current_lane2_xe2=0x4
serdes_pre_driver_current_lane3_xe2=0x4
serdes_preemphasis_lane0_xe2=0xc6e0
serdes_preemphasis_lane1_xe2=0xc6e0
serdes_preemphasis_lane2_xe2=0xc6e0
serdes_preemphasis_lane3_xe2=0xc6e0
# xe3 (40G)
portmap_4=37:40
xgxs_rx_lane_map_4=0x213
xgxs_tx_lane_map_4=0x1203
phy_xaui_rx_polarity_flip_4=0x3
phy_xaui_tx_polarity_flip_4=0xe
serdes_driver_current_lane0_xe3=0x4
serdes_driver_current_lane1_xe3=0x4
serdes_driver_current_lane2_xe3=0x4
serdes_driver_current_lane3_xe3=0x4
serdes_pre_driver_current_lane0_xe3=0x4
serdes_pre_driver_current_lane1_xe3=0x4
serdes_pre_driver_current_lane2_xe3=0x4
serdes_pre_driver_current_lane3_xe3=0x4
serdes_preemphasis_lane0_xe3=0xcad0
serdes_preemphasis_lane1_xe3=0xcad0
serdes_preemphasis_lane2_xe3=0xc2f0
serdes_preemphasis_lane3_xe3=0xc2f0
# xe4 (40G)
portmap_5=45:40
xgxs_rx_lane_map_5=0x213
xgxs_tx_lane_map_5=0x213
phy_xaui_rx_polarity_flip_5=0xe
phy_xaui_tx_polarity_flip_5=0x8
serdes_driver_current_lane0_xe4=0x4
serdes_driver_current_lane1_xe4=0x4
serdes_driver_current_lane2_xe4=0x4
serdes_driver_current_lane3_xe4=0x4
serdes_pre_driver_current_lane0_xe4=0x4
serdes_pre_driver_current_lane1_xe4=0x4
serdes_pre_driver_current_lane2_xe4=0x4
serdes_pre_driver_current_lane3_xe4=0x4
serdes_preemphasis_lane0_xe4=0xc2f0
serdes_preemphasis_lane1_xe4=0xc2f0
serdes_preemphasis_lane2_xe4=0xc2f0
serdes_preemphasis_lane3_xe4=0xc2f0
# xe5 (40G)
portmap_6=41:40
xgxs_rx_lane_map_6=0x213
xgxs_tx_lane_map_6=0x3021
phy_xaui_rx_polarity_flip_6=0x3
phy_xaui_tx_polarity_flip_6=0xb
serdes_driver_current_lane0_xe5=0x4
serdes_driver_current_lane1_xe5=0x4
serdes_driver_current_lane2_xe5=0x4
serdes_driver_current_lane3_xe5=0x4
serdes_pre_driver_current_lane0_xe5=0x4
serdes_pre_driver_current_lane1_xe5=0x4
serdes_pre_driver_current_lane2_xe5=0x4
serdes_pre_driver_current_lane3_xe5=0x4
serdes_preemphasis_lane0_xe5=0xc6e0
serdes_preemphasis_lane1_xe5=0xc2f0
serdes_preemphasis_lane2_xe5=0xc2f0
serdes_preemphasis_lane3_xe5=0xcad0
# xe6 (40G)
portmap_7=1:40
xgxs_rx_lane_map_7=0x213
xgxs_tx_lane_map_7=0x2031
phy_xaui_rx_polarity_flip_7=0xe
phy_xaui_tx_polarity_flip_7=0xd
serdes_driver_current_lane0_xe6=0x5
serdes_driver_current_lane1_xe6=0x5
serdes_driver_current_lane2_xe6=0x5
serdes_driver_current_lane3_xe6=0x5
serdes_pre_driver_current_lane0_xe6=0x5
serdes_pre_driver_current_lane1_xe6=0x5
serdes_pre_driver_current_lane2_xe6=0x5
serdes_pre_driver_current_lane3_xe6=0x5
serdes_preemphasis_lane0_xe6=0xc6e0
serdes_preemphasis_lane1_xe6=0xcad0
serdes_preemphasis_lane2_xe6=0xc6e0
serdes_preemphasis_lane3_xe6=0xcad0
# xe7 (40G)
portmap_8=5:40
xgxs_rx_lane_map_8=0x213
xgxs_tx_lane_map_8=0x1203
phy_xaui_rx_polarity_flip_8=0xc
phy_xaui_tx_polarity_flip_8=0x1
serdes_driver_current_lane0_xe7=0x4
serdes_driver_current_lane1_xe7=0x4
serdes_driver_current_lane2_xe7=0x4
serdes_driver_current_lane3_xe7=0x4
serdes_pre_driver_current_lane0_xe7=0x4
serdes_pre_driver_current_lane1_xe7=0x4
serdes_pre_driver_current_lane2_xe7=0x4
serdes_pre_driver_current_lane3_xe7=0x4
serdes_preemphasis_lane0_xe7=0xc6e0
serdes_preemphasis_lane1_xe7=0xc6e0
serdes_preemphasis_lane2_xe7=0xc6e0
serdes_preemphasis_lane3_xe7=0xc6e0
# xe8 (40G)
portmap_9=13:40
xgxs_rx_lane_map_9=0x213
xgxs_tx_lane_map_9=0x132
phy_xaui_rx_polarity_flip_9=0xe
phy_xaui_tx_polarity_flip_9=0x0
serdes_driver_current_lane0_xe8=0x2
serdes_driver_current_lane1_xe8=0x3
serdes_driver_current_lane2_xe8=0x2
serdes_driver_current_lane3_xe8=0x2
serdes_pre_driver_current_lane0_xe8=0x2
serdes_pre_driver_current_lane1_xe8=0x3
serdes_pre_driver_current_lane2_xe8=0x2
serdes_pre_driver_current_lane3_xe8=0x2
serdes_preemphasis_lane0_xe8=0xb270
serdes_preemphasis_lane1_xe8=0xbb10
serdes_preemphasis_lane2_xe8=0xb720
serdes_preemphasis_lane3_xe8=0xb720
# xe9 (40G)
portmap_10=9:40
xgxs_rx_lane_map_10=0x3120
xgxs_tx_lane_map_10=0x3021
phy_xaui_rx_polarity_flip_10=0x0
phy_xaui_tx_polarity_flip_10=0x4
serdes_driver_current_lane0_xe9=0x3
serdes_driver_current_lane1_xe9=0x3
serdes_driver_current_lane2_xe9=0x3
serdes_driver_current_lane3_xe9=0x3
serdes_pre_driver_current_lane0_xe9=0x3
serdes_pre_driver_current_lane1_xe9=0x3
serdes_pre_driver_current_lane2_xe9=0x3
serdes_pre_driver_current_lane3_xe9=0x3
serdes_preemphasis_lane0_xe9=0xc2f0
serdes_preemphasis_lane1_xe9=0xc6e0
serdes_preemphasis_lane2_xe9=0xbf00
serdes_preemphasis_lane3_xe9=0xc2f0
# xe10 (40G)
portmap_11=17:40
xgxs_rx_lane_map_11=0x213
xgxs_tx_lane_map_11=0x132
phy_xaui_rx_polarity_flip_11=0xe
phy_xaui_tx_polarity_flip_11=0x0
serdes_driver_current_lane0_xe10=0x2
serdes_driver_current_lane1_xe10=0x2
serdes_driver_current_lane2_xe10=0x2
serdes_driver_current_lane3_xe10=0x2
serdes_pre_driver_current_lane0_xe10=0x2
serdes_pre_driver_current_lane1_xe10=0x2
serdes_pre_driver_current_lane2_xe10=0x2
serdes_pre_driver_current_lane3_xe10=0x2
serdes_preemphasis_lane0_xe10=0xb330
serdes_preemphasis_lane1_xe10=0xbb10
serdes_preemphasis_lane2_xe10=0xbb10
serdes_preemphasis_lane3_xe10=0xbb10
# xe11 (40G)
portmap_12=21:40
xgxs_rx_lane_map_12=0x123
xgxs_tx_lane_map_12=0x1203
phy_xaui_rx_polarity_flip_12=0xc
phy_xaui_tx_polarity_flip_12=0xe
serdes_driver_current_lane0_xe11=0x2
serdes_driver_current_lane1_xe11=0x2
serdes_driver_current_lane2_xe11=0x2
serdes_driver_current_lane3_xe11=0x2
serdes_pre_driver_current_lane0_xe11=0x2
serdes_pre_driver_current_lane1_xe11=0x2
serdes_pre_driver_current_lane2_xe11=0x2
serdes_pre_driver_current_lane3_xe11=0x2
serdes_preemphasis_lane0_xe11=0xb330
serdes_preemphasis_lane1_xe11=0xb330
serdes_preemphasis_lane2_xe11=0xb330
serdes_preemphasis_lane3_xe11=0xb330
# xe12 (40G)
portmap_13=53:40
xgxs_rx_lane_map_13=0x213
xgxs_tx_lane_map_13=0x231
phy_xaui_rx_polarity_flip_13=0x1
phy_xaui_tx_polarity_flip_13=0x0
serdes_driver_current_lane0_xe12=0x2
serdes_driver_current_lane1_xe12=0x2
serdes_driver_current_lane2_xe12=0x2
serdes_driver_current_lane3_xe12=0x2
serdes_pre_driver_current_lane0_xe12=0x2
serdes_pre_driver_current_lane1_xe12=0x2
serdes_pre_driver_current_lane2_xe12=0x2
serdes_pre_driver_current_lane3_xe12=0x2
serdes_preemphasis_lane0_xe12=0xaf40
serdes_preemphasis_lane1_xe12=0xaf40
serdes_preemphasis_lane2_xe12=0xaf40
serdes_preemphasis_lane3_xe12=0xaf40
# xe13 (40G)
portmap_14=49:40
xgxs_rx_lane_map_14=0x1302
xgxs_tx_lane_map_14=0x2031
phy_xaui_rx_polarity_flip_14=0xb
phy_xaui_tx_polarity_flip_14=0x3
serdes_driver_current_lane0_xe13=0x2
serdes_driver_current_lane1_xe13=0x2
serdes_driver_current_lane2_xe13=0x2
serdes_driver_current_lane3_xe13=0x2
serdes_pre_driver_current_lane0_xe13=0x2
serdes_pre_driver_current_lane1_xe13=0x2
serdes_pre_driver_current_lane2_xe13=0x2
serdes_pre_driver_current_lane3_xe13=0x2
serdes_preemphasis_lane0_xe13=0xa760
serdes_preemphasis_lane1_xe13=0xa760
serdes_preemphasis_lane2_xe13=0xa760
serdes_preemphasis_lane3_xe13=0xa760
# xe14 (40G)
portmap_15=57:40
xgxs_rx_lane_map_15=0x213
xgxs_tx_lane_map_15=0x2031
phy_xaui_rx_polarity_flip_15=0x1
phy_xaui_tx_polarity_flip_15=0x0
serdes_driver_current_lane0_xe14=0x1
serdes_driver_current_lane1_xe14=0x1
serdes_driver_current_lane2_xe14=0x1
serdes_driver_current_lane3_xe14=0x1
serdes_pre_driver_current_lane0_xe14=0x1
serdes_pre_driver_current_lane1_xe14=0x1
serdes_pre_driver_current_lane2_xe14=0x1
serdes_pre_driver_current_lane3_xe14=0x1
serdes_preemphasis_lane0_xe14=0xa760
serdes_preemphasis_lane1_xe14=0xa760
serdes_preemphasis_lane2_xe14=0xa760
serdes_preemphasis_lane3_xe14=0xa760
# xe15 (40G)
portmap_16=61:40
xgxs_rx_lane_map_16=0x132
xgxs_tx_lane_map_16=0x213
phy_xaui_rx_polarity_flip_16=0x0
phy_xaui_tx_polarity_flip_16=0x0
serdes_driver_current_lane0_xe15=0x2
serdes_driver_current_lane1_xe15=0x2
serdes_driver_current_lane2_xe15=0x2
serdes_driver_current_lane3_xe15=0x2
serdes_pre_driver_current_lane0_xe15=0x2
serdes_pre_driver_current_lane1_xe15=0x2
serdes_pre_driver_current_lane2_xe15=0x2
serdes_pre_driver_current_lane3_xe15=0x2
serdes_preemphasis_lane0_xe15=0xa760
serdes_preemphasis_lane1_xe15=0xa760
serdes_preemphasis_lane2_xe15=0xa760
serdes_preemphasis_lane3_xe15=0xa760
# xe16 (40G)
portmap_17=69:40
xgxs_rx_lane_map_17=0x213
xgxs_tx_lane_map_17=0x2130
phy_xaui_rx_polarity_flip_17=0x1
phy_xaui_tx_polarity_flip_17=0xf
serdes_driver_current_lane0_xe16=0x1
serdes_driver_current_lane1_xe16=0x1
serdes_driver_current_lane2_xe16=0x1
serdes_driver_current_lane3_xe16=0x1
serdes_pre_driver_current_lane0_xe16=0x1
serdes_pre_driver_current_lane1_xe16=0x1
serdes_pre_driver_current_lane2_xe16=0x1
serdes_pre_driver_current_lane3_xe16=0x1
serdes_preemphasis_lane0_xe16=0xa760
serdes_preemphasis_lane1_xe16=0xa760
serdes_preemphasis_lane2_xe16=0xa760
serdes_preemphasis_lane3_xe16=0xa760
# xe17 (40G)
portmap_18=65:40
xgxs_rx_lane_map_18=0x132
xgxs_tx_lane_map_18=0x2031
phy_xaui_rx_polarity_flip_18=0x3
phy_xaui_tx_polarity_flip_18=0x9
serdes_driver_current_lane0_xe17=0x1
serdes_driver_current_lane1_xe17=0x1
serdes_driver_current_lane2_xe17=0x1
serdes_driver_current_lane3_xe17=0x1
serdes_pre_driver_current_lane0_xe17=0x1
serdes_pre_driver_current_lane1_xe17=0x1
serdes_pre_driver_current_lane2_xe17=0x1
serdes_pre_driver_current_lane3_xe17=0x1
serdes_preemphasis_lane0_xe17=0xa370
serdes_preemphasis_lane1_xe17=0xa370
serdes_preemphasis_lane2_xe17=0xa370
serdes_preemphasis_lane3_xe17=0xa370
# xe18 (40G)
portmap_19=73:40
xgxs_rx_lane_map_19=0x213
xgxs_tx_lane_map_19=0x2031
phy_xaui_rx_polarity_flip_19=0x1
phy_xaui_tx_polarity_flip_19=0x0
serdes_driver_current_lane0_xe18=0x2
serdes_driver_current_lane1_xe18=0x2
serdes_driver_current_lane2_xe18=0x2
serdes_driver_current_lane3_xe18=0x2
serdes_pre_driver_current_lane0_xe18=0x2
serdes_pre_driver_current_lane1_xe18=0x2
serdes_pre_driver_current_lane2_xe18=0x2
serdes_pre_driver_current_lane3_xe18=0x2
serdes_preemphasis_lane0_xe18=0xa760
serdes_preemphasis_lane1_xe18=0xa760
serdes_preemphasis_lane2_xe18=0xa760
serdes_preemphasis_lane3_xe18=0xa760
# xe19 (40G)
portmap_20=77:40
xgxs_rx_lane_map_20=0x123
xgxs_tx_lane_map_20=0x1203
phy_xaui_rx_polarity_flip_20=0x3
phy_xaui_tx_polarity_flip_20=0xe
serdes_driver_current_lane0_xe19=0x2
serdes_driver_current_lane1_xe19=0x2
serdes_driver_current_lane2_xe19=0x2
serdes_driver_current_lane3_xe19=0x2
serdes_pre_driver_current_lane0_xe19=0x2
serdes_pre_driver_current_lane1_xe19=0x2
serdes_pre_driver_current_lane2_xe19=0x2
serdes_pre_driver_current_lane3_xe19=0x2
serdes_preemphasis_lane0_xe19=0xaf40
serdes_preemphasis_lane1_xe19=0xaf40
serdes_preemphasis_lane2_xe19=0xaf40
serdes_preemphasis_lane3_xe19=0xaf40
# xe20 (40G)
portmap_21=109:40
xgxs_rx_lane_map_21=0x132
xgxs_tx_lane_map_21=0x132
phy_xaui_rx_polarity_flip_21=0x8
phy_xaui_tx_polarity_flip_21=0x0
serdes_driver_current_lane0_xe20=0x1
serdes_driver_current_lane1_xe20=0x1
serdes_driver_current_lane2_xe20=0x1
serdes_driver_current_lane3_xe20=0x2
serdes_pre_driver_current_lane0_xe20=0x1
serdes_pre_driver_current_lane1_xe20=0x1
serdes_pre_driver_current_lane2_xe20=0x1
serdes_pre_driver_current_lane3_xe20=0x2
serdes_preemphasis_lane0_xe20=0xb330
serdes_preemphasis_lane1_xe20=0xb330
serdes_preemphasis_lane2_xe20=0xb330
serdes_preemphasis_lane3_xe20=0xbff0
# xe21 (40G)
portmap_22=105:40
xgxs_rx_lane_map_22=0x1320
xgxs_tx_lane_map_22=0x3021
phy_xaui_rx_polarity_flip_22=0xd
phy_xaui_tx_polarity_flip_22=0xb
serdes_driver_current_lane0_xe21=0x1
serdes_driver_current_lane1_xe21=0x1
serdes_driver_current_lane2_xe21=0x1
serdes_driver_current_lane3_xe21=0x1
serdes_pre_driver_current_lane0_xe21=0x1
serdes_pre_driver_current_lane1_xe21=0x1
serdes_pre_driver_current_lane2_xe21=0x1
serdes_pre_driver_current_lane3_xe21=0x1
serdes_preemphasis_lane0_xe21=0xb330
serdes_preemphasis_lane1_xe21=0xb330
serdes_preemphasis_lane2_xe21=0xb330
serdes_preemphasis_lane3_xe21=0xb330
# xe22 (40G)
portmap_23=113:40
xgxs_rx_lane_map_23=0x132
xgxs_tx_lane_map_23=0x132
phy_xaui_rx_polarity_flip_23=0x8
phy_xaui_tx_polarity_flip_23=0x0
serdes_driver_current_lane0_xe22=0x1
serdes_driver_current_lane1_xe22=0x1
serdes_driver_current_lane2_xe22=0x1
serdes_driver_current_lane3_xe22=0x1
serdes_pre_driver_current_lane0_xe22=0x1
serdes_pre_driver_current_lane1_xe22=0x1
serdes_pre_driver_current_lane2_xe22=0x1
serdes_pre_driver_current_lane3_xe22=0x1
serdes_preemphasis_lane0_xe22=0xbb10
serdes_preemphasis_lane1_xe22=0xbb10
serdes_preemphasis_lane2_xe22=0xbb10
serdes_preemphasis_lane3_xe22=0xc2f0
# xe23 (40G)
portmap_24=117:40
xgxs_rx_lane_map_24=0x231
xgxs_tx_lane_map_24=0x1203
phy_xaui_rx_polarity_flip_24=0x3
phy_xaui_tx_polarity_flip_24=0xe
serdes_driver_current_lane0_xe23=0x3
serdes_driver_current_lane1_xe23=0x5
serdes_driver_current_lane2_xe23=0x3
serdes_driver_current_lane3_xe23=0x3
serdes_pre_driver_current_lane0_xe23=0x3
serdes_pre_driver_current_lane1_xe23=0x5
serdes_pre_driver_current_lane2_xe23=0x3
serdes_pre_driver_current_lane3_xe23=0x3
serdes_preemphasis_lane0_xe23=0xc6e0
serdes_preemphasis_lane1_xe23=0xc6e0
serdes_preemphasis_lane2_xe23=0xc6e0
serdes_preemphasis_lane3_xe23=0xc6e0
# xe24 (40G)
portmap_25=125:40
xgxs_rx_lane_map_25=0x132
xgxs_tx_lane_map_25=0x132
phy_xaui_rx_polarity_flip_25=0x8
phy_xaui_tx_polarity_flip_25=0x0
serdes_driver_current_lane0_xe24=0x4
serdes_driver_current_lane1_xe24=0x4
serdes_driver_current_lane2_xe24=0x4
serdes_driver_current_lane3_xe24=0x4
serdes_pre_driver_current_lane0_xe24=0x4
serdes_pre_driver_current_lane1_xe24=0x4
serdes_pre_driver_current_lane2_xe24=0x4
serdes_pre_driver_current_lane3_xe24=0x4
serdes_preemphasis_lane0_xe24=0xc6e0
serdes_preemphasis_lane1_xe24=0xc6e0
serdes_preemphasis_lane2_xe24=0xc6e0
serdes_preemphasis_lane3_xe24=0xcec0
# xe25 (40G)
portmap_26=121:40
xgxs_rx_lane_map_26=0x1320
xgxs_tx_lane_map_26=0x3021
phy_xaui_rx_polarity_flip_26=0xd
phy_xaui_tx_polarity_flip_26=0xb
serdes_driver_current_lane0_xe25=0x4
serdes_driver_current_lane1_xe25=0x4
serdes_driver_current_lane2_xe25=0x4
serdes_driver_current_lane3_xe25=0x4
serdes_pre_driver_current_lane0_xe25=0x4
serdes_pre_driver_current_lane1_xe25=0x4
serdes_pre_driver_current_lane2_xe25=0x4
serdes_pre_driver_current_lane3_xe25=0x4
serdes_preemphasis_lane0_xe25=0xc6e0
serdes_preemphasis_lane1_xe25=0xc6e0
serdes_preemphasis_lane2_xe25=0xc6e0
serdes_preemphasis_lane3_xe25=0xc6e0
# xe26 (40G)
portmap_27=81:40
xgxs_rx_lane_map_27=0x1320
xgxs_tx_lane_map_27=0x2031
phy_xaui_rx_polarity_flip_27=0x1
phy_xaui_tx_polarity_flip_27=0x2
serdes_driver_current_lane0_xe26=0x2
serdes_driver_current_lane1_xe26=0x2
serdes_driver_current_lane2_xe26=0x2
serdes_driver_current_lane3_xe26=0x2
serdes_pre_driver_current_lane0_xe26=0x2
serdes_pre_driver_current_lane1_xe26=0x2
serdes_pre_driver_current_lane2_xe26=0x2
serdes_pre_driver_current_lane3_xe26=0x2
serdes_preemphasis_lane0_xe26=0xbb10
serdes_preemphasis_lane1_xe26=0xbb10
serdes_preemphasis_lane2_xe26=0xbf00
serdes_preemphasis_lane3_xe26=0xbb10
# xe27 (40G)
portmap_28=85:40
xgxs_rx_lane_map_28=0x213
xgxs_tx_lane_map_28=0x1203
phy_xaui_rx_polarity_flip_28=0xc
phy_xaui_tx_polarity_flip_28=0xe
serdes_driver_current_lane0_xe27=0x4
serdes_driver_current_lane1_xe27=0x5
serdes_driver_current_lane2_xe27=0x4
serdes_driver_current_lane3_xe27=0x5
serdes_pre_driver_current_lane0_xe27=0x4
serdes_pre_driver_current_lane1_xe27=0x5
serdes_pre_driver_current_lane2_xe27=0x4
serdes_pre_driver_current_lane3_xe27=0x5
serdes_preemphasis_lane0_xe27=0xc2f0
serdes_preemphasis_lane1_xe27=0xc6e0
serdes_preemphasis_lane2_xe27=0xc6e0
serdes_preemphasis_lane3_xe27=0xc6e0
# xe28 (40G)
portmap_29=93:40
xgxs_rx_lane_map_29=0x1320
xgxs_tx_lane_map_29=0x2031
phy_xaui_rx_polarity_flip_29=0x1
phy_xaui_tx_polarity_flip_29=0x2
serdes_driver_current_lane0_xe28=0x4
serdes_driver_current_lane1_xe28=0x4
serdes_driver_current_lane2_xe28=0x4
serdes_driver_current_lane3_xe28=0x4
serdes_pre_driver_current_lane0_xe28=0x4
serdes_pre_driver_current_lane1_xe28=0x4
serdes_pre_driver_current_lane2_xe28=0x4
serdes_pre_driver_current_lane3_xe28=0x4
serdes_preemphasis_lane0_xe28=0xc2f0
serdes_preemphasis_lane1_xe28=0xc2f0
serdes_preemphasis_lane2_xe28=0xc2f0
serdes_preemphasis_lane3_xe28=0xc2f0
# xe29 (40G)
portmap_30=89:40
xgxs_rx_lane_map_30=0x1320
xgxs_tx_lane_map_30=0x3021
phy_xaui_rx_polarity_flip_30=0x2
phy_xaui_tx_polarity_flip_30=0xb
serdes_driver_current_lane0_xe29=0x4
serdes_driver_current_lane1_xe29=0x4
serdes_driver_current_lane2_xe29=0x4
serdes_driver_current_lane3_xe29=0x4
serdes_pre_driver_current_lane0_xe29=0x4
serdes_pre_driver_current_lane1_xe29=0x4
serdes_pre_driver_current_lane2_xe29=0x4
serdes_pre_driver_current_lane3_xe29=0x4
serdes_preemphasis_lane0_xe29=0xcad0
serdes_preemphasis_lane1_xe29=0xc6e0
serdes_preemphasis_lane2_xe29=0xc6e0
serdes_preemphasis_lane3_xe29=0xc6e0
# xe30 (40G)
portmap_31=101:40
xgxs_rx_lane_map_31=0x1320
xgxs_tx_lane_map_31=0x1203
phy_xaui_rx_polarity_flip_31=0x1
phy_xaui_tx_polarity_flip_31=0x6
serdes_driver_current_lane0_xe30=0x6
serdes_driver_current_lane1_xe30=0x6
serdes_driver_current_lane2_xe30=0x6
serdes_driver_current_lane3_xe30=0x7
serdes_pre_driver_current_lane0_xe30=0x6
serdes_pre_driver_current_lane1_xe30=0x6
serdes_pre_driver_current_lane2_xe30=0x6
serdes_pre_driver_current_lane3_xe30=0x7
serdes_preemphasis_lane0_xe30=0xcec0
serdes_preemphasis_lane1_xe30=0xcec0
serdes_preemphasis_lane2_xe30=0xcad0
serdes_preemphasis_lane3_xe30=0xc6e0
# xe31 (40G)
portmap_32=97:40
xgxs_rx_lane_map_32=0x213
xgxs_tx_lane_map_32=0x2031
phy_xaui_rx_polarity_flip_32=0xc
phy_xaui_tx_polarity_flip_32=0x3
serdes_driver_current_lane0_xe31=0x5
serdes_driver_current_lane1_xe31=0x5
serdes_driver_current_lane2_xe31=0x5
serdes_driver_current_lane3_xe31=0x5
serdes_pre_driver_current_lane0_xe31=0x5
serdes_pre_driver_current_lane1_xe31=0x5
serdes_pre_driver_current_lane2_xe31=0x5
serdes_pre_driver_current_lane3_xe31=0x5
serdes_preemphasis_lane0_xe31=0xcad0
serdes_preemphasis_lane1_xe31=0xcad0
serdes_preemphasis_lane2_xe31=0xcad0
serdes_preemphasis_lane3_xe31=0xcad0

View File

@ -0,0 +1,81 @@
#!/bin/bash
#topolgy script for 6 ASIC PLATFORM
FIRST_FRONTEND_ASIC=0
LAST_FRONTEND_ASIC=3
FIRST_BACKEND_ASIC=4
LAST_BACKEND_ASIC=5
NUM_INTERFACES_PER_ASIC=32
start () {
# Move external links into assigned frontend namespaces
# eth0 - eth15: asic2
# eth16 - eth31: asic3
# eth32 - eth47: asic4
# eth48 - eth63: asic5
for ASIC in `seq $FIRST_FRONTEND_ASIC $LAST_FRONTEND_ASIC`; do
for NUM in `seq 1 16`; do
ORIG="eth$((16 * $ASIC + $NUM - 1))"
TEMP="ethTemp999"
NEW="eth$(($NUM + 16))"
ip link set dev $ORIG down
ip link set dev $ORIG name $TEMP # rename to prevent conflicts before renaming in new namespace
ip link set dev $TEMP netns asic$ASIC
sudo ip netns exec asic$ASIC ip link set $TEMP name $NEW # rename to final interface name
sudo ip netns exec asic$ASIC ip link set $NEW up
done
done
# Connect all backend namespaces to frontend namespaces
for BACKEND in `seq $FIRST_BACKEND_ASIC $LAST_BACKEND_ASIC`; do
for FRONTEND in `seq $FIRST_FRONTEND_ASIC $LAST_FRONTEND_ASIC`; do
for LINK in `seq 1 8`; do
BACK_NAME="eth$((8 * $FRONTEND + $LINK))"
FRONT_NAME="eth$((8 * $(($LAST_BACKEND_ASIC - $BACKEND)) + $LINK))"
TEMP_BACK="ethBack999"
TEMP_FRONT="ethFront999"
ip link add $TEMP_BACK type veth peer name $TEMP_FRONT # temporary name to prevent conflicts between interfaces
ip link set dev $TEMP_BACK netns asic$BACKEND
ip link set dev $TEMP_FRONT netns asic$FRONTEND
sudo ip netns exec asic$BACKEND ip link set $TEMP_BACK name $BACK_NAME
sudo ip netns exec asic$FRONTEND ip link set $TEMP_FRONT name $FRONT_NAME
sudo ip netns exec asic$BACKEND ip link set $BACK_NAME up
sudo ip netns exec asic$FRONTEND ip link set $FRONT_NAME up
done
done
done
}
stop() {
for ASIC in `seq $FIRST_FRONTEND_ASIC $LAST_FRONTEND_ASIC`; do
for NUM in `seq 1 16`; do
TEMP="eth999"
OLD="eth$(($NUM + 16))"
NAME="eth$((16 * $ASIC + $NUM - 1))"
sudo ip netns exec asic$ASIC ip link set dev $OLD down
sudo ip netns exec asic$ASIC ip link set dev $OLD name $TEMP
sudo ip netns exec asic$ASIC ip link set dev $TEMP netns 1
ip link set dev $TEMP name $NAME
ip link set dev $NAME up
done
done
for ASIC in `seq $FIRST_BACKEND_ASIC $LAST_BACKEND_ASIC`; do
for NUM in `seq 1 $NUM_INTERFACES_PER_ASIC`; do
sudo ip netns exec asic$ASIC ip link set dev eth$NUM down
sudo ip netns exec asic$ASIC ip link delete dev eth$NUM
done
done
}
case "$1" in
start|stop)
$1
;;
*)
echo "Usage: $0 {start|stop}"
;;
esac

View File

@ -1,5 +1,31 @@
#!/bin/bash
# single instance containers are still supported (even though it might not look like it)
# if no instance number is passed to this script, $DEV will simply be unset, resulting in docker
# commands being sent to the base container name. E.g. `docker start database$DEV` simply starts
# the container `database` if no instance number is passed since `$DEV` is not defined
{%- if docker_container_name == "database" %}
link_namespace() {
# Makes namespace of a docker container available in
# /var/run/netns so it can be managed with iproute2
mkdir -p /var/run/netns
PID="$(docker inspect -f {{"'{{.State.Pid}}'"}} "{{docker_container_name}}$DEV")"
if `ip netns | grep --quiet -w "{{docker_container_name}}$DEV"`; then # namespace exists
if [ $(readlink -f /var/run/netns/$NET_NS$DEV) = $(readlink -f /proc/$PID/ns/net) ]; then # namespace is correctly linked
return 0
else # if it's incorrectly linked remove it
ip netns delete "{{docker_container_name}}$DEV"
fi
fi
ln -s /proc/$PID/ns/net /var/run/netns/$NET_NS$DEV
}
{%- endif %}
function getMountPoint()
{
echo $1 | python -c "import sys, json, os; mnts = [x for x in json.load(sys.stdin)[0]['Mounts'] if x['Destination'] == '/usr/share/sonic/hwsku']; print '' if len(mnts) == 0 else os.path.basename(mnts[0]['Source'])" 2>/dev/null
@ -10,7 +36,7 @@ function updateHostName()
HOSTS=/etc/hosts
HOSTS_TMP=/etc/hosts.tmp
EXEC="docker exec -i {{docker_container_name}} bash -c"
EXEC="docker exec -i {{docker_container_name}}$DEV bash -c"
NEW_HOSTNAME="$1"
HOSTNAME=`$EXEC "hostname"`
@ -25,7 +51,7 @@ function updateHostName()
# add entry with new hostname
$EXEC "echo -e \"127.0.0.1\t$NEW_HOSTNAME\" >> $HOSTS_TMP"
echo "Set hostname in {{docker_container_name}} container"
echo "Set hostname in {{docker_container_name}}$DEV container"
$EXEC "hostname '$NEW_HOSTNAME'"
$EXEC "cat $HOSTS_TMP > $HOSTS"
$EXEC "rm -f $HOSTS_TMP"
@ -143,6 +169,9 @@ function preStartAction()
function postStartAction()
{
{%- if docker_container_name == "database" %}
if [ "$DEV" ]; then
link_namespace $DEV
fi
# Wait until redis starts
/usr/bin/docker exec database ping_pong_db_insts
if [[ ("$BOOT_TYPE" == "warm" || "$BOOT_TYPE" == "fastfast") && -f $WARM_DIR/dump.rdb ]]; then
@ -209,7 +238,7 @@ start() {
HOSTNAME=`hostname`
fi
DOCKERCHECK=`docker inspect --type container {{docker_container_name}} 2>/dev/null`
DOCKERCHECK=`docker inspect --type container {{docker_container_name}}$DEV 2>/dev/null`
if [ "$?" -eq "0" ]; then
{%- if docker_container_name == "database" %}
DOCKERMOUNT=""
@ -218,39 +247,52 @@ start() {
{%- endif %}
if [ x"$DOCKERMOUNT" == x"$HWSKU" ]; then
{%- if docker_container_name == "database" %}
echo "Starting existing {{docker_container_name}} container"
echo "Starting existing {{docker_container_name}}$DEV container"
{%- else %}
echo "Starting existing {{docker_container_name}} container with HWSKU $HWSKU"
echo "Starting existing {{docker_container_name}}$DEV container with HWSKU $HWSKU"
{%- endif %}
preStartAction
docker start {{docker_container_name}}
CURRENT_HOSTNAME="$(docker exec {{docker_container_name}} hostname)"
docker start {{docker_container_name}}$DEV
postStartAction
CURRENT_HOSTNAME="$(docker exec {{docker_container_name}}$DEV hostname)"
if [ x"$HOSTNAME" != x"$CURRENT_HOSTNAME" ]; then
updateHostName "$HOSTNAME"
fi
postStartAction
updateHostName "$HOSTNAME"
exit $?
fi
# docker created with a different HWSKU, remove and recreate
echo "Removing obsolete {{docker_container_name}} container with HWSKU $DOCKERMOUNT"
docker rm -f {{docker_container_name}}
echo "Removing obsolete {{docker_container_name}}$DEV container with HWSKU $DOCKERMOUNT"
docker rm -f {{docker_container_name}}$DEV
fi
{%- if docker_container_name == "database" %}
echo "Creating new {{docker_container_name}} container"
{%- if docker_container_name == "database" %}
echo "Creating new {{docker_container_name}}$DEV container"
# if database_config exists in old_config, use it; otherwise use the default one in new image
if [ -f /etc/sonic/old_config/database_config.json ]; then
echo "Use database_config.json from old system..."
mv /etc/sonic/old_config/database_config.json /etc/sonic/
fi
{%- else %}
echo "Creating new {{docker_container_name}} container with HWSKU $HWSKU"
{%- endif %}
{%- else %}
echo "Creating new {{docker_container_name}}$DEV container with HWSKU $HWSKU"
{%- endif %}
if [ -z "$DEV" ]; then
NET="host"
else
{%- if docker_container_name == "database" %}
NET="bridge"
{%- else %}
NET="container:database$DEV"
{%- endif %}
fi
{%- if sonic_asic_platform == "mellanox" %}
# TODO: Mellanox will remove the --tmpfs exception after SDK socket path changed in new SDK version
{%- endif %}
docker create {{docker_image_run_opt}} \
--net=$NET \
{%- if install_debug_image == "y" %}
-v /src:/src:ro -v /debug:/debug:rw \
{%- endif %}
@ -279,8 +321,7 @@ start() {
--tmpfs /tmp \
{%- endif %}
--tmpfs /var/tmp \
--hostname "$HOSTNAME" \
--name={{docker_container_name}} {{docker_image_name}}:latest || {
--name={{docker_container_name}}$DEV {{docker_image_name}}:latest || {
echo "Failed to docker run" >&1
exit 4
}
@ -288,24 +329,35 @@ start() {
preStartAction
docker start {{docker_container_name}}
postStartAction
updateHostName "$HOSTNAME"
}
wait() {
docker wait {{docker_container_name}}
docker wait {{docker_container_name}}$DEV
}
stop() {
docker stop {{docker_container_name}}
docker stop {{docker_container_name}}$DEV
{%- if docker_container_name == "database" %}
ip netns delete "$NET_NS$DEV"
{%- endif %}
}
OP=$1
DEV=$2 # namespace/device number to operate on
NET_NS="asic" #name of the network namespace
case "$1" in
start|wait|stop|updateHostName)
start|wait|stop)
$1
;;
updateHostName)
cmd=$1
shift
shift 2
$cmd $@
;;
*)
echo "Usage: $0 {start|wait|stop|updateHostName new_hostname}"
echo "Usage: $0 {start namespace(optional)|wait namespace(optional)|stop namespace(optional)|updateHostName namespace(optional) new_hostname}"
exit 1
;;
esac

View File

@ -253,6 +253,13 @@ sudo cp $IMAGE_CONFIGS/hostname/hostname-config.sh $FILESYSTEM_ROOT/usr/bin/
# Copy miscellaneous scripts
sudo cp $IMAGE_CONFIGS/misc/docker-wait-any $FILESYSTEM_ROOT/usr/bin/
# Copy internal topology configuration scripts
{%- if sonic_asic_platform == "vs" %}
sudo cp $IMAGE_CONFIGS/topology/topology.service $FILESYSTEM_ROOT/etc/systemd/system/
echo "topology.service" | sudo tee -a $GENERATED_SERVICE_FILE
sudo cp $IMAGE_CONFIGS/topology/topology.sh $FILESYSTEM_ROOT/usr/bin
{%- endif %}
# Copy updategraph script and service file
j2 files/build_templates/updategraph.service.j2 | sudo tee $FILESYSTEM_ROOT/etc/systemd/system/updategraph.service
sudo cp $IMAGE_CONFIGS/updategraph/updategraph $FILESYSTEM_ROOT/usr/bin/
@ -401,6 +408,13 @@ sudo cp {{script}} $FILESYSTEM_ROOT/usr/bin/
{% for service in installer_services.split(' ') -%}
if [ -f {{service}} ]; then
sudo cp {{service}} $FILESYSTEM_ROOT/etc/systemd/system/
{% if "@" in service %}
MULTI_INSTANCE="{{service}}"
SINGLE_INSTANCE=${MULTI_INSTANCE/"@"}
sudo cp $SINGLE_INSTANCE $FILESYSTEM_ROOT/etc/systemd/system/
{% endif %}
echo "{{service}}" | sudo tee -a $GENERATED_SERVICE_FILE
fi
{% endfor %}

View File

@ -0,0 +1,16 @@
[Unit]
Description=Internal topology service
Requires=database.service
After=database.service
PartOf=database.service
[Service]
Type=oneshot
User=root
RemainAfterExit=yes
ExecStart=/usr/bin/topology.sh start
ExecStop=/usr/bin/topology.sh stop
[Install]
WantedBy=multi-user.target

View File

@ -0,0 +1,30 @@
#!/bin/bash
# This script is invoked by topology.service only
# for multi-asic virtual platform. For multi-asic platform
# multiple Database instances are present
# and HWKSU information is retrieved from first database instance.
#
start() {
DB_FIRST_INSTANCE="/var/run/redis0/redis.sock"
TOPOLOGY_SCRIPT="topology.sh"
PLATFORM=`sonic-cfggen -H -v DEVICE_METADATA.localhost.platform -s $DB_FIRST_INSTANCE`
HWSKU=`sonic-cfggen -d -v 'DEVICE_METADATA["localhost"]["hwsku"]' -s $DB_FIRST_INSTANCE`
/usr/share/sonic/device/$PLATFORM/$HWSKU/$TOPOLOGY_SCRIPT start
}
stop() {
DB_FIRST_INSTANCE="/var/run/redis0/redis.sock"
TOPOLOGY_SCRIPT="topology.sh"
PLATFORM=`sonic-cfggen -H -v DEVICE_METADATA.localhost.platform -s $DB_FIRST_INSTANCE`
HWSKU=`sonic-cfggen -d -v 'DEVICE_METADATA["localhost"]["hwsku"]' -s $DB_FIRST_INSTANCE`
/usr/share/sonic/device/$PLATFORM/$HWSKU/$TOPOLOGY_SCRIPT stop
}
case "$1" in
start|stop)
$1
;;
*)
echo "Usage: $0 {start|stop}"
;;
esac

View File

@ -29,7 +29,7 @@ endif
$(DOCKER_SYNCD_BASE)_CONTAINER_NAME = syncd
$(DOCKER_SYNCD_BASE)_RUN_OPT += --net=host --privileged -t
$(DOCKER_SYNCD_BASE)_RUN_OPT += --privileged -t
$(DOCKER_SYNCD_BASE)_RUN_OPT += -v /host/machine.conf:/etc/machine.conf
$(DOCKER_SYNCD_BASE)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro

View File

@ -6,10 +6,10 @@ HOWTO Use Virtual Switch (VM)
sudo apt-get install libvirt-clients qemu-kvm libvirt-bin
```
2. Create SONiC VM
2. Create SONiC VM for single ASIC HWSKU
```
$ virsh
$ sudo virsh
Welcome to virsh, the virtualization interactive terminal.
Type: 'help' for help with commands
@ -22,14 +22,54 @@ Domain sonic created from sonic.xml
virsh #
```
2. Connect SONiC VM via console
2. Create SONiC VM for multi-ASIC HWSKU
Update sonic_multiasic.xml with the external interfaces
required for HWSKU.
```
$ telnet 127.0.0.1 7000
```
$ sudo virsh
Welcome to virsh, the virtualization interactive terminal.
3. Connect SONiC VM via SSH
Type: 'help' for help with commands
'quit' to quit
```
$ ssh -p 3040 admin@127.0.0.1
```
virsh #
virsh # create sonic_multiasic.xml
Domain sonic created from sonic.xml
virsh #
Once booted up, create a file "asic.conf" with the content:
NUM_ASIC=<Number of asics>
under /usr/share/sonic/device/x86_64-kvm_x86_64-r0/
Also, create a "topology.sh" file which will simulate the internal
asic connectivity of the hardware under
/usr/share/sonic/device/x86_64-kvm_x86_64-r0/<HWSKU>
The HWSKU directory will have the required files like port_config.ini
for each ASIC.
Having done this, a new service "topology.service" will be started
during bootup which will invoke topology.sh script.
3. Access virtual switch:
1. Connect SONiC VM via console
```
$ telnet 127.0.0.1 7000
```
OR
2. Connect SONiC VM via SSH
1. Connect via console (see 3.1 above)
2. Request a new DHCP address
```
sudo dhclient -v
```
3. Connect via SSH
```
$ ssh -p 3040 admin@127.0.0.1
```

View File

@ -0,0 +1,110 @@
<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
<name>sonic</name>
<memory unit='GB'>8</memory>
<vcpu placement='static'>2</vcpu>
<resource>
<partition>/machine</partition>
</resource>
<os>
<type arch='x86_64' machine='pc-i440fx-1.5'>hvm</type>
<boot dev='hd'/>
</os>
<features>
<acpi/>
<apic/>
</features>
<clock offset='utc'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<devices>
<emulator>/usr/bin/qemu-system-x86_64</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2' cache='writeback'/>
<source file='/data/sonic/sonic-buildimage/target/sonic-vs.img'/>
<target bus='virtio' dev='vda'/>
</disk>
<serial type='tcp'>
<source host='127.0.0.1' mode='bind' service='7000'/>
<target port='0'/>
<protocol type='telnet'/>
</serial>
<interface type='user'>
<model type='e1000' />
</interface>
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<interface type='ethernet' />
<controller type='usb' index='0'/>
<memballoon model='virtio'>
<alias name='balloon0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
</memballoon>
</devices>
<seclabel type='dynamic' model='apparmor' relabel='yes'/>
<qemu:commandline>
<qemu:arg value='-redir'/>
<qemu:arg value='tcp:3040::22'/>
</qemu:commandline>
</domain>

View File

@ -23,7 +23,7 @@ SONIC_INSTALL_DOCKER_DBG_IMAGES += $(DOCKER_DATABASE_DBG)
SONIC_STRETCH_DBG_DOCKERS += $(DOCKER_DATABASE_DBG)
$(DOCKER_DATABASE)_CONTAINER_NAME = database
$(DOCKER_DATABASE)_RUN_OPT += --net=host --privileged -t
$(DOCKER_DATABASE)_RUN_OPT += --privileged -t
$(DOCKER_DATABASE)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro
$(DOCKER_DATABASE)_BASE_IMAGE_FILES += redis-cli:/usr/bin/redis-cli

View File

@ -23,6 +23,6 @@ SONIC_INSTALL_DOCKER_DBG_IMAGES += $(DOCKER_DHCP_RELAY_DBG)
SONIC_STRETCH_DBG_DOCKERS += $(DOCKER_DHCP_RELAY_DBG)
$(DOCKER_DHCP_RELAY)_CONTAINER_NAME = dhcp_relay
$(DOCKER_DHCP_RELAY)_RUN_OPT += --net=host --privileged -t
$(DOCKER_DHCP_RELAY)_RUN_OPT += --privileged -t
$(DOCKER_DHCP_RELAY)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro
$(DOCKER_DHCP_RELAY)_FILES += $(SUPERVISOR_PROC_EXIT_LISTENER_SCRIPT)

View File

@ -22,7 +22,7 @@ SONIC_DOCKER_DBG_IMAGES += $(DOCKER_FPM_FRR_DBG)
SONIC_STRETCH_DBG_DOCKERS += $(DOCKER_FPM_FRR_DBG)
$(DOCKER_FPM_FRR)_CONTAINER_NAME = bgp
$(DOCKER_FPM_FRR)_RUN_OPT += --net=host --privileged -t
$(DOCKER_FPM_FRR)_RUN_OPT += --privileged -t
$(DOCKER_FPM_FRR)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro
$(DOCKER_FPM_FRR)_RUN_OPT += -v /etc/sonic/frr:/etc/frr:rw

View File

@ -7,5 +7,5 @@ $(DOCKER_FPM_GOBGP)_LOAD_DOCKERS += $(DOCKER_FPM_QUAGGA)
SONIC_DOCKER_IMAGES += $(DOCKER_FPM_GOBGP)
$(DOCKER_FPM_GOBGP)_CONTAINER_NAME = bgp
$(DOCKER_FPM_GOBGP)_RUN_OPT += --net=host --privileged -t
$(DOCKER_FPM_GOBGP)_RUN_OPT += --privileged -t
$(DOCKER_FPM_GOBGP)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro

View File

@ -7,7 +7,7 @@ $(DOCKER_FPM_QUAGGA)_LOAD_DOCKERS += $(DOCKER_CONFIG_ENGINE)
SONIC_DOCKER_IMAGES += $(DOCKER_FPM_QUAGGA)
$(DOCKER_FPM_QUAGGA)_CONTAINER_NAME = bgp
$(DOCKER_FPM_QUAGGA)_RUN_OPT += --net=host --privileged -t
$(DOCKER_FPM_QUAGGA)_RUN_OPT += --privileged -t
$(DOCKER_FPM_QUAGGA)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro
$(DOCKER_FPM_QUAGGA)_BASE_IMAGE_FILES += vtysh:/usr/bin/vtysh

View File

@ -25,7 +25,7 @@ SONIC_INSTALL_DOCKER_DBG_IMAGES += $(DOCKER_LLDP_SV2_DBG)
SONIC_STRETCH_DBG_DOCKERS += $(DOCKER_LLDP_SV2_DBG)
$(DOCKER_LLDP_SV2)_CONTAINER_NAME = lldp
$(DOCKER_LLDP_SV2)_RUN_OPT += --net=host --privileged -t
$(DOCKER_LLDP_SV2)_RUN_OPT += --privileged -t
$(DOCKER_LLDP_SV2)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro
$(DOCKER_LLDP_SV2)_BASE_IMAGE_FILES += lldpctl:/usr/bin/lldpctl

View File

@ -26,7 +26,7 @@ SONIC_STRETCH_DBG_DOCKERS += $(DOCKER_ORCHAGENT_DBG)
SONIC_INSTALL_DOCKER_DBG_IMAGES += $(DOCKER_ORCHAGENT_DBG)
$(DOCKER_ORCHAGENT)_CONTAINER_NAME = swss
$(DOCKER_ORCHAGENT)_RUN_OPT += --net=host --privileged -t
$(DOCKER_ORCHAGENT)_RUN_OPT += --privileged -t
$(DOCKER_ORCHAGENT)_RUN_OPT += -v /etc/network/interfaces:/etc/network/interfaces:ro
$(DOCKER_ORCHAGENT)_RUN_OPT += -v /etc/network/interfaces.d/:/etc/network/interfaces.d/:ro
$(DOCKER_ORCHAGENT)_RUN_OPT += -v /host/machine.conf:/host/machine.conf:ro

View File

@ -33,7 +33,7 @@ SONIC_DOCKER_DBG_IMAGES += $(DOCKER_PLATFORM_MONITOR_DBG)
SONIC_INSTALL_DOCKER_DBG_IMAGES += $(DOCKER_PLATFORM_MONITOR_DBG)
$(DOCKER_PLATFORM_MONITOR)_CONTAINER_NAME = pmon
$(DOCKER_PLATFORM_MONITOR)_RUN_OPT += --net=host --privileged -t
$(DOCKER_PLATFORM_MONITOR)_RUN_OPT += --privileged -t
$(DOCKER_PLATFORM_MONITOR)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro
# Mount Arista python library on Aboot images to be used by plugins

View File

@ -23,6 +23,6 @@ SONIC_INSTALL_DOCKER_DBG_IMAGES += $(DOCKER_ROUTER_ADVERTISER_DBG)
SONIC_STRETCH_DBG_DOCKERS += $(DOCKER_ROUTER_ADVERTISER_DBG)
$(DOCKER_ROUTER_ADVERTISER)_CONTAINER_NAME = radv
$(DOCKER_ROUTER_ADVERTISER)_RUN_OPT += --net=host --privileged -t
$(DOCKER_ROUTER_ADVERTISER)_RUN_OPT += --privileged -t
$(DOCKER_ROUTER_ADVERTISER)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro
$(DOCKER_ROUTER_ADVERTISER)_FILES += $(SUPERVISOR_PROC_EXIT_LISTENER_SCRIPT)

View File

@ -26,7 +26,7 @@ SONIC_STRETCH_DBG_DOCKERS += $(DOCKER_SFLOW_DBG)
endif
$(DOCKER_SFLOW)_CONTAINER_NAME = sflow
$(DOCKER_SFLOW)_RUN_OPT += --net=host --privileged -t
$(DOCKER_SFLOW)_RUN_OPT += --privileged -t
$(DOCKER_SFLOW)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro
$(DOCKER_SFLOW)_RUN_OPT += -v /host/warmboot:/var/warmboot

View File

@ -26,7 +26,7 @@ SONIC_INSTALL_DOCKER_DBG_IMAGES += $(DOCKER_SNMP_SV2_DBG)
SONIC_STRETCH_DBG_DOCKERS += $(DOCKER_SNMP_SV2_DBG)
$(DOCKER_SNMP_SV2)_CONTAINER_NAME = snmp
$(DOCKER_SNMP_SV2)_RUN_OPT += --net=host --privileged -t
$(DOCKER_SNMP_SV2)_RUN_OPT += --privileged -t
$(DOCKER_SNMP_SV2)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro
# mount Arista platform python libraries to support corresponding platforms SNMP power status query
$(DOCKER_SNMP_SV2)_RUN_OPT += -v /usr/lib/python3/dist-packages/arista:/usr/lib/python3/dist-packages/arista:ro

View File

@ -24,7 +24,7 @@ SONIC_INSTALL_DOCKER_DBG_IMAGES += $(DOCKER_TEAMD_DBG)
SONIC_STRETCH_DBG_DOCKERS += $(DOCKER_TEAMD_DBG)
$(DOCKER_TEAMD)_CONTAINER_NAME = teamd
$(DOCKER_TEAMD)_RUN_OPT += --net=host --privileged -t
$(DOCKER_TEAMD)_RUN_OPT += --privileged -t
$(DOCKER_TEAMD)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro
$(DOCKER_TEAMD)_RUN_OPT += -v /host/warmboot:/var/warmboot

View File

@ -25,7 +25,7 @@ SONIC_STRETCH_DBG_DOCKERS += $(DOCKER_TELEMETRY_DBG)
endif
$(DOCKER_TELEMETRY)_CONTAINER_NAME = telemetry
$(DOCKER_TELEMETRY)_RUN_OPT += --net=host --privileged -t
$(DOCKER_TELEMETRY)_RUN_OPT += --privileged -t
$(DOCKER_TELEMETRY)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro
$(DOCKER_TELEMETRY)_RUN_OPT += --mount type=bind,source="/var/platform/",target="/mnt/platform/"

View File

@ -667,15 +667,39 @@ $(addprefix $(TARGET_PATH)/, $(SONIC_INSTALLERS)) : $(TARGET_PATH)/% : \
export docker_container_name="$($(docker:-dbg.gz=.gz)_CONTAINER_NAME)"
$(eval $(docker:-dbg.gz=.gz)_RUN_OPT += $($(docker:-dbg.gz=.gz)_$($*_IMAGE_TYPE)_RUN_OPT))
export docker_image_run_opt="$($(docker:-dbg.gz=.gz)_RUN_OPT)"
j2 files/build_templates/docker_image_ctl.j2 > $($(docker:-dbg.gz=.gz)_CONTAINER_NAME).sh
if [ -f files/build_templates/$($(docker:-dbg.gz=.gz)_CONTAINER_NAME).service.j2 ]; then
j2 files/build_templates/$($(docker:-dbg.gz=.gz)_CONTAINER_NAME).service.j2 > $($(docker:-dbg.gz=.gz)_CONTAINER_NAME).service
fi
if [ -f files/build_templates/multi_instance/$($(docker:-dbg.gz=.gz)_CONTAINER_NAME)@.service.j2 ]; then
j2 files/build_templates/multi_instance/$($(docker:-dbg.gz=.gz)_CONTAINER_NAME)@.service.j2 > $($(docker:-dbg.gz=.gz)_CONTAINER_NAME)@.service
# performs the same check as the elif above, except with make commands so eval behaves properly
$(if $(shell ls files/build_templates/multi_instance/$($(docker:-dbg.gz=.gz)_CONTAINER_NAME)@.service.j2 2>/dev/null),\
$(eval $(docker:-dbg.gz=.gz)_TEMPLATE = yes)
)
fi
if [ -f files/build_templates/single_instance/$($(docker:-dbg.gz=.gz)_CONTAINER_NAME).service.j2 ]; then
j2 files/build_templates/single_instance/$($(docker:-dbg.gz=.gz)_CONTAINER_NAME).service.j2 > $($(docker:-dbg.gz=.gz)_CONTAINER_NAME).service
fi
j2 files/build_templates/docker_image_ctl.j2 > $($(docker:-dbg.gz=.gz)_CONTAINER_NAME).sh
chmod +x $($(docker:-dbg.gz=.gz)_CONTAINER_NAME).sh
)
# Exported variables are used by sonic_debian_extension.sh
export installer_start_scripts="$(foreach docker, $($*_DOCKERS),$(addsuffix .sh, $($(docker:-dbg.gz=.gz)_CONTAINER_NAME)))"
export installer_services="$(foreach docker, $($*_DOCKERS),$(addsuffix .service, $($(docker:-dbg.gz=.gz)_CONTAINER_NAME)))"
# Marks template services with an "@" according to systemd convention
# If the $($docker)_TEMPLATE) variable is set, the service will be treated as a template
$(foreach docker, $($*_DOCKERS),\
$(if $($(docker:-dbg.gz=.gz)_TEMPLATE),\
$(eval SERVICES += "$(addsuffix @.service, $($(docker:-dbg.gz=.gz)_CONTAINER_NAME))"),\
$(eval SERVICES += "$(addsuffix .service, $($(docker:-dbg.gz=.gz)_CONTAINER_NAME))")
)
)
export installer_services="$(SERVICES)"
export installer_extra_files="$(foreach docker, $($*_DOCKERS), $(foreach file, $($(docker:-dbg.gz=.gz)_BASE_IMAGE_FILES), $($(docker:-dbg.gz=.gz)_PATH)/base_image_files/$(file)))"
j2 -f env files/initramfs-tools/union-mount.j2 onie-image.conf > files/initramfs-tools/union-mount
@ -706,6 +730,7 @@ $(addprefix $(TARGET_PATH)/, $(SONIC_INSTALLERS)) : $(TARGET_PATH)/% : \
$(foreach docker, $($*_DOCKERS), \
rm -f $($(docker:-dbg.gz=.gz)_CONTAINER_NAME).sh
rm -f $($(docker:-dbg.gz=.gz)_CONTAINER_NAME).service
rm -f $($(docker:-dbg.gz=.gz)_CONTAINER_NAME)@.service
)
$(if $($*_DOCKERS),

View File

@ -9,13 +9,17 @@
#include <sys/stat.h>
#include <linux/limits.h>
#define MAX_NUM_TARGETS 5
#define MAX_NUM_INSTALL_LINES 5
#define MAX_NUM_TARGETS 15
#define MAX_NUM_INSTALL_LINES 15
#define MAX_NUM_UNITS 128
#define MAX_BUF_SIZE 512
static const char* UNIT_FILE_PREFIX = "/etc/systemd/system/";
static const char* CONFIG_FILE = "/etc/sonic/generated_services.conf";
static const char* MACHINE_CONF_FILE = "/host/machine.conf";
static int num_asics;
static char** multi_instance_services;
static int num_multi_inst;
void strip_trailing_newline(char* str) {
/***
@ -61,7 +65,7 @@ static int get_target_lines(char* unit_file, char* target_lines[]) {
if (num_target_lines >= MAX_NUM_INSTALL_LINES) {
fprintf(stderr, "Number of lines in [Install] section of %s exceeds MAX_NUM_INSTALL_LINES\n", unit_file);
fputs("Extra [Install] lines will be ignored\n", stderr);
return num_target_lines;
break;
}
target_lines[num_target_lines] = strdup(line);
num_target_lines++;
@ -75,7 +79,18 @@ static int get_target_lines(char* unit_file, char* target_lines[]) {
return num_target_lines;
}
static int get_install_targets_from_line(char* target_string, char* suffix, char* targets[], int existing_targets) {
static bool is_multi_instance_service(char *service_name){
int i;
for(i=0; i < num_multi_inst; i++){
if (strstr(service_name, multi_instance_services[i]) != NULL) {
return true;
}
}
return false;
}
static int get_install_targets_from_line(char* target_string, char* install_type, char* targets[], int existing_targets) {
/***
Helper fuction for get_install_targets
@ -88,26 +103,113 @@ static int get_install_targets_from_line(char* target_string, char* suffix, char
int num_targets = 0;
while ((token = strtok_r(target_string, " ", &target_string))) {
target = strdup(token);
strip_trailing_newline(target);
strcpy(final_target, target);
strcat(final_target, suffix);
free(target);
if (num_targets + existing_targets >= MAX_NUM_TARGETS) {
fputs("Number of targets found exceeds MAX_NUM_TARGETS\n", stderr);
fputs("Additional targets will be ignored \n", stderr);
return num_targets;
}
target = strdup(token);
strip_trailing_newline(target);
if (strstr(target, "%") != NULL) {
char* prefix = strtok(target, ".");
char* suffix = strtok(NULL, ".");
int prefix_len = strlen(prefix);
strncpy(final_target, prefix, prefix_len - 2);
final_target[prefix_len - 2] = '\0';
strcat(final_target, ".");
strcat(final_target, suffix);
}
else {
strcpy(final_target, target);
}
strcat(final_target, install_type);
free(target);
targets[num_targets + existing_targets] = strdup(final_target);
num_targets++;
}
return num_targets;
}
static void replace_multi_inst_dep(char *src) {
FILE *fp_src;
FILE *fp_tmp;
char buf[MAX_BUF_SIZE];
char* line = NULL;
int i;
ssize_t len;
char *token;
char *word;
char *line_copy;
char *service_name;
char *type;
ssize_t nread;
bool section_done = false;
char tmp_file_path[PATH_MAX];
/* assumes that the service files has 3 sections,
* in the order: Unit, Service and Install.
* Read service dependency from Unit and Install
* sections, replace if dependent on multi instance
* service.
*/
fp_src = fopen(src, "r");
snprintf(tmp_file_path, PATH_MAX, "%s.tmp", src);
fp_tmp = fopen(tmp_file_path, "w");
while ((nread = getline(&line, &len, fp_src)) != -1 ) {
if (strstr(line, "[Service]") != NULL) {
section_done = true;
fputs(line,fp_tmp);
} else if (strstr(line, "[Install]") != NULL) {
section_done = false;
fputs(line,fp_tmp);
} else if ((strstr(line, "[Unit]") != NULL) ||
(strstr(line, "Description") != NULL) ||
(section_done == true)){
fputs(line,fp_tmp);
} else {
line_copy = strdup(line);
token = strtok(line_copy, "=");
while ((word = strtok(NULL, " "))){
if((strchr(word, '.') == NULL) ||
(strchr(word, '@') != NULL)) {
snprintf(buf, MAX_BUF_SIZE,"%s=%s\n",token, word);
fputs(buf,fp_tmp);
} else {
service_name = strdup(word);
service_name = strtok(service_name, ".");
type = strtok(NULL, " ");
if (is_multi_instance_service(word)) {
for(i = 0; i < num_asics; i++){
snprintf(buf, MAX_BUF_SIZE, "%s=%s@%d.%s\n",
token, service_name, i, type);
fputs(buf,fp_tmp);
}
} else {
snprintf(buf, MAX_BUF_SIZE,"%s=%s.%s\n",token, service_name, type);
fputs(buf, fp_tmp);
}
free(service_name);
}
}
free(line_copy);
}
}
fclose(fp_src);
fclose(fp_tmp);
free(line);
/* remove the .service file, rename the .service.tmp file
* as .service.
*/
remove(src);
rename(tmp_file_path, src);
}
static int get_install_targets(char* unit_file, char* targets[]) {
/***
Returns install targets for a unit file
@ -124,10 +226,21 @@ static int get_install_targets(char* unit_file, char* targets[]) {
char* line = NULL;
bool first;
char* target_suffix;
char *instance_name;
char *dot_ptr;
strcpy(file_path, UNIT_FILE_PREFIX);
strcat(file_path, unit_file);
instance_name = strdup(unit_file);
dot_ptr = strchr(instance_name, '.');
*dot_ptr = '\0';
if((num_asics > 1) && (!is_multi_instance_service(instance_name))) {
replace_multi_inst_dep(file_path);
}
free(instance_name);
num_target_lines = get_target_lines(file_path, target_lines);
if (num_target_lines < 0) {
fprintf(stderr, "Error parsing targets for %s\n", unit_file);
@ -170,6 +283,7 @@ static int get_unit_files(char* unit_files[]) {
char *line = NULL;
size_t len = 0;
ssize_t read;
char *pos;
fp = fopen(CONFIG_FILE, "r");
@ -179,13 +293,30 @@ static int get_unit_files(char* unit_files[]) {
}
int num_unit_files = 0;
num_multi_inst = 0;
multi_instance_services = malloc(MAX_NUM_UNITS * sizeof(char *));
while ((read = getline(&line, &len, fp)) != -1) {
if (num_unit_files >= MAX_NUM_UNITS) {
fprintf(stderr, "Maximum number of units exceeded, ignoring extras\n");
return num_unit_files;
break;
}
strip_trailing_newline(line);
/* Get the multi-instance services */
pos = strchr(line, '@');
if (pos != NULL) {
multi_instance_services[num_multi_inst] = malloc(strlen(line)*sizeof(char));
strncpy(multi_instance_services[num_multi_inst], line, pos-line);
num_multi_inst++;
}
/* topology service to be started only for multiasic VS platform */
if ((strcmp(line, "topology.service") == 0) &&
(num_asics == 1)) {
continue;
}
unit_files[num_unit_files] = strdup(line);
num_unit_files++;
}
@ -198,28 +329,70 @@ static int get_unit_files(char* unit_files[]) {
}
static int install_unit_file(char* unit_file, char* target, char* install_dir) {
static char* insert_instance_number(char* unit_file, int instance) {
/***
Creates a symlink for a unit file installation
Adds an instance number to a systemd template name
For a given unit file and target directory,
create the appropriate symlink in the target directory
to enable the unit and have it started by Systemd
E.g. given unit_file='example@.service', instance=3,
returns a pointer to 'example@1.service'
***/
char final_install_dir[PATH_MAX];
char* prefix;
char* suffix;
char* instance_string;
char* instance_name;
char* temp_unit_file;
instance_string = malloc(2 * sizeof(char));
snprintf(instance_string, 2, "%d", instance);
instance_name = malloc(strlen(unit_file) + 2);
if (instance_name == NULL) {
fprintf(stderr, "Error creating instance %d of %s\n", instance, unit_file);
return NULL;
}
temp_unit_file = strdup(unit_file);
prefix = strtok(temp_unit_file, "@");
suffix = strtok(NULL, "@");
strcpy(instance_name, prefix);
strcat(instance_name, "@");
strcat(instance_name, instance_string);
strcat(instance_name, suffix);
free(instance_string);
free(temp_unit_file);
return instance_name;
}
static int create_symlink(char* unit, char* target, char* install_dir, int instance) {
struct stat st;
char src_path[PATH_MAX];
char dest_path[PATH_MAX];
struct stat st;
char final_install_dir[PATH_MAX];
char* unit_instance;
int r;
assert(unit_file);
assert(target);
strcpy(src_path, UNIT_FILE_PREFIX);
strcat(src_path, unit);
if (instance < 0) {
unit_instance = strdup(unit);
}
else {
unit_instance = insert_instance_number(unit, instance);
}
strcpy(final_install_dir, install_dir);
strcat(final_install_dir, target);
strcpy(dest_path, final_install_dir);
strcat(dest_path, "/");
strcat(dest_path, unit_instance);
strcpy(src_path, UNIT_FILE_PREFIX);
strcat(src_path, unit_file);
free(unit_instance);
if (stat(final_install_dir, &st) == -1) {
// If doesn't exist, create
@ -242,7 +415,7 @@ static int install_unit_file(char* unit_file, char* target, char* install_dir) {
fprintf(stderr, "Unable to create target directory %s\n", final_install_dir);
return -1;
}
}
}
else if (S_ISDIR(st.st_mode)) {
// If directory, verify correct permissions
r = chmod(final_install_dir, 0755);
@ -251,11 +424,6 @@ static int install_unit_file(char* unit_file, char* target, char* install_dir) {
return -1;
}
}
strcpy(dest_path, final_install_dir);
strcat(dest_path, "/");
strcat(dest_path, unit_file);
r = symlink(src_path, dest_path);
@ -267,6 +435,123 @@ static int install_unit_file(char* unit_file, char* target, char* install_dir) {
}
return 0;
}
static int install_unit_file(char* unit_file, char* target, char* install_dir) {
/***
Creates a symlink for a unit file installation
For a given unit file and target directory,
create the appropriate symlink in the target directory
to enable the unit and have it started by Systemd
If a multi ASIC platform is detected, enables multi-instance
services as well
***/
char* target_instance;
char* prefix;
char* suffix;
int r;
assert(unit_file);
assert(target);
if ((num_asics > 1) && strstr(unit_file, "@") != NULL) {
for (int i = 0; i < num_asics; i++) {
if (strstr(target, "@") != NULL) {
target_instance = insert_instance_number(target, i);
}
else {
target_instance = strdup(target);
}
r = create_symlink(unit_file, target_instance, install_dir, i);
if (r < 0)
fprintf(stderr, "Error installing %s for target %s\n", unit_file, target_instance);
free(target_instance);
}
}
else {
r = create_symlink(unit_file, target, install_dir, -1);
if (r < 0)
fprintf(stderr, "Error installing %s for target %s\n", unit_file, target);
}
return 0;
}
static int get_num_of_asic() {
/***
Determines if the current platform is single or multi-ASIC
***/
FILE *fp;
FILE *env_fp;
char *line = NULL;
char* token;
char* platform;
size_t len = 0;
ssize_t nread;
bool ans;
char asic_file[512];
char* str_num_asic;
int num_asic = 1;
fp = fopen(MACHINE_CONF_FILE, "r");
if (fp == NULL) {
fprintf(stderr, "Failed to open %s\n", MACHINE_CONF_FILE);
exit(EXIT_FAILURE);
}
while ((nread = getline(&line, &len, fp)) != -1) {
if ((strstr(line, "onie_platform") != NULL) ||
(strstr(line, "aboot_platform") != NULL)) {
token = strtok(line, "=");
platform = strtok(NULL, "=");
strip_trailing_newline(platform);
break;
}
}
fclose(fp);
if(platform != NULL) {
snprintf(asic_file, 512, "/usr/share/sonic/device/%s/asic.conf", platform);
fp = fopen(asic_file, "r");
if (fp != NULL) {
while ((nread = getline(&line, &len, fp)) != -1) {
if (strstr(line, "NUM_ASIC") != NULL) {
token = strtok(line, "=");
str_num_asic = strtok(NULL, "=");
strip_trailing_newline(str_num_asic);
if (str_num_asic != NULL){
sscanf(str_num_asic, "%d",&num_asic);
}
break;
}
}
fclose(fp);
free(line);
}
}
/*set environment variable NUM_ASIC */
env_fp = fopen("/etc/environment", "a");
if (env_fp == NULL) {
fprintf(stderr, "Failed to open environment file\n");
exit(EXIT_FAILURE);
}
fprintf(env_fp, "NUM_ASIC=%d\n", num_asic);
fclose(env_fp);
return num_asic;
}
@ -274,14 +559,20 @@ int main(int argc, char **argv) {
char* unit_files[MAX_NUM_UNITS];
char install_dir[PATH_MAX];
char* targets[MAX_NUM_TARGETS];
char* unit_instance;
char* prefix;
char* suffix;
int num_unit_files;
int num_targets;
int r;
if (argc <= 1) {
fputs("Installation directory required as argument\n", stderr);
return 1;
}
num_asics = get_num_of_asic();
strcpy(install_dir, argv[1]);
strcat(install_dir, "/");
@ -289,21 +580,38 @@ int main(int argc, char **argv) {
// For each unit file, get the installation targets and install the unit
for (int i = 0; i < num_unit_files; i++) {
num_targets = get_install_targets(unit_files[i], targets);
unit_instance = strdup(unit_files[i]);
if ((num_asics == 1) && strstr(unit_instance, "@") != NULL) {
prefix = strtok(unit_instance, "@");
suffix = strtok(NULL, "@");
strcpy(unit_instance, prefix);
strcat(unit_instance, suffix);
}
num_targets = get_install_targets(unit_instance, targets);
if (num_targets < 0) {
fprintf(stderr, "Error parsing %s\n", unit_files[i]);
fprintf(stderr, "Error parsing %s\n", unit_instance);
free(unit_instance);
free(unit_files[i]);
continue;
}
for (int j = 0; j < num_targets; j++) {
if (install_unit_file(unit_files[i], targets[j], install_dir) != 0)
fprintf(stderr, "Error installing %s to target directory %s\n", unit_files[i], targets[j]);
if (install_unit_file(unit_instance, targets[j], install_dir) != 0)
fprintf(stderr, "Error installing %s to target directory %s\n", unit_instance, targets[j]);
free(targets[j]);
}
free(unit_instance);
free(unit_files[i]);
}
for (int i = 0; i < num_multi_inst; i++) {
free(multi_instance_services[i]);
}
free(multi_instance_services);
return 0;
}