Merge branch 'master' into dell_platform_dev

This commit is contained in:
Srideep Devireddy 2019-07-17 14:56:26 -04:00
commit 7a7e456d4e
256 changed files with 21976 additions and 958 deletions

View File

@ -42,6 +42,16 @@ ifeq ($(USER), root)
$(error Add your user account to docker group and use your user account to make. root or sudo are not supported!)
endif
# Check for minimum Docker version on build host
# Note: Using the greater of CE (17.05.0) and EE (17.06.1) versions that support ARG before FROM
docker_min := 17.06.1
docker_min_ver := $(shell echo "$(docker_min)" | awk -F. '{printf("%d%03d%03d\n",$$1,$$2,$$3);}' 2>/dev/null)
docker_ver := $(shell docker info 2>/dev/null | grep -i "server version" | cut -d' ' -f3 | awk -F. '{printf("%d%03d%03d\n",$$1,$$2,$$3);}' 2>/dev/null)
docker_is_valid := $(shell if [ $(docker_ver) -lt $(docker_min_ver) ] ; then echo "0"; else echo "1"; fi)
ifeq (0,$(docker_is_valid))
$(error SONiC requires Docker version $(docker_min) or later)
endif
# Remove lock file in case previous run was forcefully stopped
$(shell rm -f .screen)
@ -92,21 +102,20 @@ ifeq ($(SONIC_CONFIG_USE_NATIVE_DOCKERD_FOR_BUILD), y)
endif
DOCKER_BASE_BUILD = docker build --no-cache \
-t $(SLAVE_BASE_IMAGE) \
-t $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG) \
--build-arg http_proxy=$(http_proxy) \
--build-arg https_proxy=$(https_proxy) \
$(SLAVE_DIR) && \
docker tag $(SLAVE_BASE_IMAGE):latest $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG)
$(SLAVE_DIR)
DOCKER_BUILD = docker build --no-cache \
--build-arg user=$(USER) \
--build-arg uid=$(shell id -u) \
--build-arg guid=$(shell id -g) \
--build-arg hostname=$(shell echo $$HOSTNAME) \
-t $(SLAVE_IMAGE) \
--build-arg slave_base_tag_ref=$(SLAVE_BASE_TAG) \
-t $(SLAVE_IMAGE):$(SLAVE_TAG) \
-f $(SLAVE_DIR)/Dockerfile.user \
$(SLAVE_DIR) && \
docker tag $(SLAVE_IMAGE):latest $(SLAVE_IMAGE):$(SLAVE_TAG)
$(SLAVE_DIR)
SONIC_BUILD_INSTRUCTION := make \
-f slave.mk \

View File

@ -207,3 +207,74 @@ $ make list
```
All target groups are used by one or another recipe, so use those recipes as a reference when adding new ones.
## Build debug dockers and debug SONiC installer image:
Using 'INSTALL_DEBUG_TOOLS=y' builds the debug image.
For example:
`INSTALL_DEBUG_TOOLS=y make target/sonic-broadcom.bin`
* Builds debug docker images.
* Debug images carry a suffix of "-dbg"
* e.g. target/docker-orchagent-dbg.gz
* target/sonic-broadcom.bin is built using debug docker images
* Selective sources are archived and available under /src
* An empty /debug dir is created for use during debug session.
* All debug dockers are mounted with /src:ro and /debug:rw
* Login banner will briefly describe these features.
_Note: target/sonic-broadcom.bin name is the same irrespective of built using debug or non-debug dockers._
_Recommend: Rename image built using INSTALL_DEBUG_TOOLS=y to mark it explicit. May be `mv target/sonic-broadcom.bin target/sonic-broadcom-dbg.bin`_
### Debug dockers
* Built with all available debug symbols.
* Installed with many basic packages that would be required for debugging
* gdb
* gdbserver
* vim
* strace
* openssh-client
* sshpass
* Loadable into any environment that supports docker
* Outside SONiC image, you may run the docker with `--entrypoint=/bin/bash`
* Use -v to map any of your host directories
* To debug a core file in non-SONiC environment that supports docker
* `docker load -i docker-<name>-dbg.gz`
* copy your unzipped core file into ~/debug
* `docker run -it -entrypoint=/bin/bash -v ~/debug:/debug <image id>`
* `gdb /usr/bin/<your binary> -c /debug/<your core>`
### Debug SONiC image
* Install this image into the switch that supports this image.
* For platform independent binary, you may use a debug image for virtual switch
* Open the archive in /src, if you would need source code for debugging
* Every debug enabled docker is mounted with /src as read-only
* The host has /debug dir and it is mapped into every debuggable docker as /debug with read-write permission.
* To debug a core
* Copy core into /debug of host and unzip it
* Feel free to create & use sub-dirs as needed.
* Entire /debug is mounted inside docker
* Get into the docker (`docker -it exec <name> bash`)
* `gdb /usr/bin/<binary> -c /debug/<core file path>`
* Use set-directory in gdb to map appropriate source dir from under /src
* You may set gdb logs to go into /debug
* For live debugging
* Use this as a regular switch
* Get into docker, and you may
* start process under dbg
* attach gdb to running process
* Set required source dir from under /src as needed
* May use /debug to record all geb logs or any spew from debug session.
### To enhance debug dockers
* Add to `<docker name>_DBG_IMAGE_PACKAGES`, additional debug tools that will be pre-installed during build.
* e.g. `$(DOCKER_ORCHAGENT)_DBG_IMAGE_PACKAGES += perl`
* Build will install these tools using "apt"
* Add to `<docker name>_DBG_DEPENDS`, additional debug .deb packages that will be pre-installed during build.
* e.g. `$(DOCKER_ORCHAGENT)_DBG_DEPENDS += $(SWSS_DBG) $(LIBSWSSCOMMON_DBG) $(LIBSAIREDIS_DBG)`
* Add to `DBG_SRC_ARCHIVE`, the source dirs to archive
* The source files (.c, .cpp, .h & .hpp) under this dir tree are archived.
* e.g. rules/swss.mk has `DBG_SRC_ARCHIVE += swss`

View File

@ -123,6 +123,9 @@ Every target has a clean target, so in order to clean swss, execute:
It is recommended to use clean targets to clean all packages that are built together, like dev packages for instance. In order to be more familiar with build process and make some changes to it, it is recommended to read this short [Documentation](README.buildsystem.md).
## Build debug dockers and debug SONiC installer image:
SONiC build system supports building dockers and ONE-image with debug tools and debug symbols, to help with live & core debugging. For details refer to [(SONiC Buildimage Guide)](https://github.com/Azure/sonic-buildimage/blob/master/README.buildsystem.md).
## Notes:
- If you are running make for the first time, a sonic-slave-${USER} docker image will be built automatically.
This may take a while, but it is a one-time action, so please be patient.
@ -135,10 +138,7 @@ This may take a while, but it is a one-time action, so please be patient.
- docker-base.gz: base docker image where other docker images are built from, only used in build process (gzip tar archive)
- docker-database.gz: docker image for in-memory key-value store, used as inter-process communication (gzip tar archive)
- docker-fpm.gz: docker image for quagga with fpm module enabled (gzip tar archive)
- docker-orchagent-brcm.gz: docker image for SWitch State Service (SWSS) on Broadcom platform (gzip tar archive)
- docker-orchagent-cavm.gz: docker image for SWitch State Service (SWSS) on Cavium platform (gzip tar archive)
- docker-orchagent-mlnx.gz: docker image for SWitch State Service (SWSS) on Mellanox platform (gzip tar archive)
- docker-orchagent-nephos.gz: docker image for SWitch State Service (SWSS) on Nephos platform (gzip tar archive)
- docker-orchagent.gz: docker image for SWitch State Service (SWSS) (gzip tar archive)
- docker-syncd-brcm.gz: docker image for the daemon to sync database and Broadcom switch ASIC (gzip tar archive)
- docker-syncd-cavm.gz: docker image for the daemon to sync database and Cavium switch ASIC (gzip tar archive)
- docker-syncd-mlnx.gz: docker image for the daemon to sync database and Mellanox switch ASIC (gzip tar archive)

View File

@ -273,18 +273,32 @@ sudo sed -i 's/LOAD_KEXEC=true/LOAD_KEXEC=false/' $FILESYSTEM_ROOT/etc/default/k
## jump when time difference is greater than 1000 seconds (remove -g).
sudo sed -i "s/NTPD_OPTS='-g'/NTPD_OPTS='-x'/" $FILESYSTEM_ROOT/etc/default/ntp
## Fix ping tools permission so non root user can directly use them
## Note: this is a workaround since aufs doesn't support extended attributes
## Ref: https://github.com/moby/moby/issues/5650#issuecomment-303499489
## TODO: remove workaround when the overlay filesystem support extended attributes
sudo chmod u+s $FILESYSTEM_ROOT/bin/ping{,6}
## Remove sshd host keys, and will regenerate on first sshd start
sudo rm -f $FILESYSTEM_ROOT/etc/ssh/ssh_host_*_key*
sudo cp files/sshd/host-ssh-keygen.sh $FILESYSTEM_ROOT/usr/local/bin/
sudo cp -f files/sshd/sshd.service $FILESYSTEM_ROOT/lib/systemd/system/ssh.service
## Config sshd
sudo augtool --autosave "set /files/etc/ssh/sshd_config/UseDNS no" -r $FILESYSTEM_ROOT
# Config sshd
# 1. Set 'UseDNS' to 'no'
# 2. Configure sshd to close all SSH connetions after 15 minutes of inactivity
sudo augtool -r $FILESYSTEM_ROOT <<'EOF'
touch /files/etc/ssh/sshd_config/EmptyLineHack
rename /files/etc/ssh/sshd_config/EmptyLineHack ""
set /files/etc/ssh/sshd_config/UseDNS no
ins #comment before /files/etc/ssh/sshd_config/UseDNS
set /files/etc/ssh/sshd_config/#comment[following-sibling::*[1][self::UseDNS]] "Disable hostname lookups"
rm /files/etc/ssh/sshd_config/ClientAliveInterval
rm /files/etc/ssh/sshd_config/ClientAliveCountMax
touch /files/etc/ssh/sshd_config/EmptyLineHack
rename /files/etc/ssh/sshd_config/EmptyLineHack ""
set /files/etc/ssh/sshd_config/ClientAliveInterval 900
set /files/etc/ssh/sshd_config/ClientAliveCountMax 0
ins #comment before /files/etc/ssh/sshd_config/ClientAliveInterval
set /files/etc/ssh/sshd_config/#comment[following-sibling::*[1][self::ClientAliveInterval]] "Close inactive client sessions after 15 minutes"
save
quit
EOF
# Configure sshd to listen for v4 connections; disable listening for v6 connections
sudo sed -i 's/^ListenAddress ::/#ListenAddress ::/' $FILESYSTEM_ROOT/etc/ssh/sshd_config
sudo sed -i 's/^#ListenAddress 0.0.0.0/ListenAddress 0.0.0.0/' $FILESYSTEM_ROOT/etc/ssh/sshd_config
@ -309,6 +323,10 @@ check system $HOST
if memory usage > 50% for 5 times within 10 cycles then alert
if cpu usage (user) > 90% for 5 times within 10 cycles then alert
if cpu usage (system) > 90% for 5 times within 10 cycles then alert
check process rsyslog with pidfile /var/run/rsyslogd.pid
start program = "/bin/systemctl start rsyslog.service"
stop program = "/bin/systemctl stop rsyslog.service"
if totalmem > 800 MB for 5 times within 10 cycles then restart
EOF
## Config sysctl
@ -416,6 +434,28 @@ fi
sudo sed -i 's/EBTABLES_LOAD_ON_START="no"/EBTABLES_LOAD_ON_START="yes"/g' ${FILESYSTEM_ROOT}/etc/default/ebtables
sudo cp files/image_config/ebtables/ebtables.filter ${FILESYSTEM_ROOT}/etc
## Debug Image specific changes
## Update motd for debug image
if [ "$DEBUG_IMG" == "y" ]
then
sudo LANG=C chroot $FILESYSTEM_ROOT /bin/bash -c "echo '**************' >> /etc/motd"
sudo LANG=C chroot $FILESYSTEM_ROOT /bin/bash -c "echo 'Running DEBUG image' >> /etc/motd"
sudo LANG=C chroot $FILESYSTEM_ROOT /bin/bash -c "echo '**************' >> /etc/motd"
sudo LANG=C chroot $FILESYSTEM_ROOT /bin/bash -c "echo '/src has the sources' >> /etc/motd"
sudo LANG=C chroot $FILESYSTEM_ROOT /bin/bash -c "echo '/src is mounted in each docker' >> /etc/motd"
sudo LANG=C chroot $FILESYSTEM_ROOT /bin/bash -c "echo '/debug is created for core files or temp files' >> /etc/motd"
sudo LANG=C chroot $FILESYSTEM_ROOT /bin/bash -c "echo 'Create a subdir under /debug to upload your files' >> /etc/motd"
sudo LANG=C chroot $FILESYSTEM_ROOT /bin/bash -c "echo '/debug is mounted in each docker' >> /etc/motd"
sudo mkdir -p $FILESYSTEM_ROOT/src
pushd src
../scripts/dbg_files.sh | sudo tar -cvzf ../$FILESYSTEM_ROOT/src/sonic_src.tar.gz -T -
popd
sudo mkdir -p $FILESYSTEM_ROOT/debug
fi
## Remove gcc and python dev pkgs
sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y remove gcc libpython2.7-dev

View File

@ -5,6 +5,8 @@
try:
import time
import os
import string
from ctypes import create_string_buffer
from sonic_sfp.sfputilbase import SfpUtilBase
except ImportError as e:
raise ImportError("%s - required module not found" % str(e))
@ -189,7 +191,7 @@ class SfpUtil(SfpUtilBase):
qsfp_index = self.qsfp_sb_map[qsfp_index-1]
return qsfp_start+qsfp_index
def get_low_power_mode(self, port_num):
def get_low_power_mode_cpld(self, port_num):
if port_num < self.qsfp_port_start or port_num > self.qsfp_port_end:
return False
@ -214,31 +216,62 @@ class SfpUtil(SfpUtilBase):
return False
def set_low_power_mode(self, port_num, lpmode):
def get_low_power_mode(self, port_num):
if port_num < self.qsfp_port_start or port_num > self.qsfp_port_end:
return False
order = self.update_i2c_order()
lp_mode_path = self.BASE_CPLD3_PATH.format(order)
lp_mode_path = lp_mode_path + "module_lp_mode_"
q = self.qsfp_sb_remap(port_num)
lp_mode_path = lp_mode_path + str(q)
return False
if not self.get_presence(port_num):
return self.get_low_power_mode_cpld(port_num)
try:
reg_file = open(lp_mode_path, 'r+')
except IOError as e:
print "Error: unable to open file: %s" % str(e)
eeprom = None
eeprom = open(self.port_to_eeprom_mapping[port_num], mode="rb", buffering=0)
eeprom.seek(93)
lpmode = ord(eeprom.read(1))
if not (lpmode & 0x1): # 'Power override' bit is 0
return self.get_low_power_mode_cpld(port_num)
else:
if ((lpmode & 0x2) == 0x2):
return True # Low Power Mode if "Power set" bit is 1
else:
return False # High Power Mode if "Power set" bit is 0
except IOError as err:
print "Error: unable to open file: %s" % str(err)
return False
finally:
if eeprom is not None:
eeprom.close()
time.sleep(0.01)
def set_low_power_mode(self, port_num, lpmode):
if port_num < self.qsfp_port_start or port_num > self.qsfp_port_end:
return False
if lpmode is True:
reg_value = '1'
else:
reg_value = '0'
try:
eeprom = None
reg_file.write(reg_value)
reg_file.close()
if not self.get_presence(port_num):
return False # Port is not present, unable to set the eeprom
return True
# Fill in write buffer
regval = 0x3 if lpmode else 0x1 # 0x3:Low Power Mode, 0x1:High Power Mode
buffer = create_string_buffer(1)
buffer[0] = chr(regval)
# Write to eeprom
eeprom = open(self.port_to_eeprom_mapping[port_num], mode="r+b", buffering=0)
eeprom.seek(93)
eeprom.write(buffer[0])
return True
except IOError as err:
print "Error: unable to open file: %s" % str(err)
return False
finally:
if eeprom is not None:
eeprom.close()
time.sleep(0.01)
def reset(self, port_num):
if port_num < self.qsfp_port_start or port_num > self.qsfp_port_end:

View File

@ -0,0 +1,55 @@
# name lanes alias index speed
Ethernet0 2 tenGigE1 1 10000
Ethernet1 1 tenGigE2 2 10000
Ethernet2 4 tenGigE3 3 10000
Ethernet3 3 tenGigE4 4 10000
Ethernet4 6 tenGigE5 5 10000
Ethernet5 5 tenGigE6 6 10000
Ethernet6 8 tenGigE7 7 10000
Ethernet7 7 tenGigE8 8 10000
Ethernet8 10 tenGigE9 9 10000
Ethernet9 9 tenGigE10 10 10000
Ethernet10 12 tenGigE11 11 10000
Ethernet11 11 tenGigE12 12 10000
Ethernet12 14 tenGigE13 13 10000
Ethernet13 13 tenGigE14 14 10000
Ethernet14 16 tenGigE15 15 10000
Ethernet15 15 tenGigE16 16 10000
Ethernet16 18 tenGigE17 17 10000
Ethernet17 17 tenGigE18 18 10000
Ethernet18 20 tenGigE19 19 10000
Ethernet19 19 tenGigE20 20 10000
Ethernet20 22 tenGigE21 21 10000
Ethernet21 21 tenGigE22 22 10000
Ethernet22 24 tenGigE23 23 10000
Ethernet23 23 tenGigE24 24 10000
Ethernet24 54 tenGigE25 25 10000
Ethernet25 53 tenGigE26 26 10000
Ethernet26 56 tenGigE27 27 10000
Ethernet27 55 tenGigE28 28 10000
Ethernet28 58 tenGigE29 29 10000
Ethernet29 57 tenGigE30 30 10000
Ethernet30 60 tenGigE31 31 10000
Ethernet31 59 tenGigE32 32 10000
Ethernet32 62 tenGigE33 33 10000
Ethernet33 61 tenGigE34 34 10000
Ethernet34 64 tenGigE35 35 10000
Ethernet35 63 tenGigE36 36 10000
Ethernet36 66 tenGigE37 37 10000
Ethernet37 65 tenGigE38 38 10000
Ethernet38 68 tenGigE39 39 10000
Ethernet39 67 tenGigE40 40 10000
Ethernet40 70 tenGigE41 41 10000
Ethernet41 69 tenGigE42 42 10000
Ethernet42 72 tenGigE43 43 10000
Ethernet43 71 tenGigE44 44 10000
Ethernet44 74 tenGigE45 45 10000
Ethernet45 73 tenGigE46 46 10000
Ethernet46 76 tenGigE47 47 10000
Ethernet47 75 tenGigE48 48 10000
Ethernet48 29,30,31,32 hundredGigE49 49 100000
Ethernet52 33,34,35,36 hundredGigE50 53 100000
Ethernet56 37,38,39,40 hundredGigE51 57 100000
Ethernet60 41,42,43,44 hundredGigE52 61 100000
Ethernet64 45,46,47,48 hundredGigE53 65 100000
Ethernet68 49,50,51,52 hundredGigE54 69 100000

View File

@ -0,0 +1 @@
SAI_INIT_CONFIG_FILE=/etc/bcm/td3-as5835t-48x10G+6x100G.config.bcm

View File

@ -0,0 +1,515 @@
#polarity/lanemap is using TH2 style.
core_clock_frequency=1525
dpp_clock_ratio=2:3
ptp_ts_pll_fref=50000000
ptp_bs_fref_0=50000000
ptp_bs_fref_1=50000000
oversubscribe_mode=1
pbmp_xport_xe=0x1FFFFFFFFFFFFFFFE
parity_enable=0
mem_cache_enable=0
l2_mem_entries=32768
#l3_mem_entries=49152
#fpem_mem_entries=16384
l2xmsg_mode=1
#FC0
dport_map_port_1=2
dport_map_port_2=1
dport_map_port_3=4
dport_map_port_4=3
portmap_1=1:10
portmap_2=2:10
portmap_3=3:10
portmap_4=4:10
#port_phy_addr_1=0x00
#port_phy_addr_2=0x01
#port_phy_addr_3=0x02
#port_phy_addr_4=0x03
phy_chain_rx_lane_map_physical{1.0}=0x0123
phy_chain_rx_lane_map_physical{2.0}=0x0123
phy_chain_rx_lane_map_physical{3.0}=0x0123
phy_chain_rx_lane_map_physical{4.0}=0x0123
phy_chain_tx_lane_map_physical{1.0}=0x0123
phy_chain_tx_lane_map_physical{2.0}=0x0123
phy_chain_tx_lane_map_physical{3.0}=0x0123
phy_chain_tx_lane_map_physical{4.0}=0x0123
phy_chain_rx_polarity_flip_physical{1.0}=0x1
phy_chain_rx_polarity_flip_physical{2.0}=0x1
phy_chain_rx_polarity_flip_physical{3.0}=0x1
phy_chain_rx_polarity_flip_physical{4.0}=0x1
phy_chain_tx_polarity_flip_physical{1.0}=0x0
phy_chain_tx_polarity_flip_physical{2.0}=0x0
phy_chain_tx_polarity_flip_physical{3.0}=0x0
phy_chain_tx_polarity_flip_physical{4.0}=0x0
#FC1
dport_map_port_5=6
dport_map_port_6=5
dport_map_port_7=8
dport_map_port_8=7
portmap_5=5:10
portmap_6=6:10
portmap_7=7:10
portmap_8=8:10
#port_phy_addr_5=0x04
#port_phy_addr_6=0x05
#port_phy_addr_7=0x06
#port_phy_addr_8=0x07
phy_chain_rx_lane_map_physical{5.0}=0x0123
phy_chain_rx_lane_map_physical{6.0}=0x0123
phy_chain_rx_lane_map_physical{7.0}=0x0123
phy_chain_rx_lane_map_physical{8.0}=0x0123
phy_chain_tx_lane_map_physical{5.0}=0x0123
phy_chain_tx_lane_map_physical{6.0}=0x0123
phy_chain_tx_lane_map_physical{7.0}=0x0123
phy_chain_tx_lane_map_physical{8.0}=0x0123
phy_chain_rx_polarity_flip_physical{5.0}=0x0
phy_chain_rx_polarity_flip_physical{6.0}=0x0
phy_chain_rx_polarity_flip_physical{7.0}=0x0
phy_chain_rx_polarity_flip_physical{8.0}=0x0
phy_chain_tx_polarity_flip_physical{5.0}=0x0
phy_chain_tx_polarity_flip_physical{6.0}=0x0
phy_chain_tx_polarity_flip_physical{7.0}=0x0
phy_chain_tx_polarity_flip_physical{8.0}=0x0
#FC2
dport_map_port_9=10
dport_map_port_10=9
dport_map_port_11=12
dport_map_port_12=11
portmap_9=9:10
portmap_10=10:10
portmap_11=11:10
portmap_12=12:10
#port_phy_addr_9=0x20
#port_phy_addr_10=0x21
#port_phy_addr_11=0x22
#port_phy_addr_12=0x23
phy_chain_rx_lane_map_physical{9.0}=0x0123
phy_chain_rx_lane_map_physical{10.0}=0x0123
phy_chain_rx_lane_map_physical{11.0}=0x0123
phy_chain_rx_lane_map_physical{12.0}=0x0123
phy_chain_tx_lane_map_physical{9.0}=0x0123
phy_chain_tx_lane_map_physical{10.0}=0x0123
phy_chain_tx_lane_map_physical{11.0}=0x0123
phy_chain_tx_lane_map_physical{12.0}=0x0123
phy_chain_rx_polarity_flip_physical{9.0}=0x0
phy_chain_rx_polarity_flip_physical{10.0}=0x0
phy_chain_rx_polarity_flip_physical{11.0}=0x0
phy_chain_rx_polarity_flip_physical{12.0}=0x0
phy_chain_tx_polarity_flip_physical{9.0}=0x0
phy_chain_tx_polarity_flip_physical{10.0}=0x0
phy_chain_tx_polarity_flip_physical{11.0}=0x0
phy_chain_tx_polarity_flip_physical{12.0}=0x0
#FC3
dport_map_port_13=14
dport_map_port_14=13
dport_map_port_15=16
dport_map_port_16=15
portmap_13=13:10
portmap_14=14:10
portmap_15=15:10
portmap_16=16:10
#port_phy_addr_13=0x24
#port_phy_addr_14=0x25
#port_phy_addr_15=0x26
#port_phy_addr_16=0x27
phy_chain_rx_lane_map_physical{13.0}=0x0123
phy_chain_rx_lane_map_physical{14.0}=0x0123
phy_chain_rx_lane_map_physical{15.0}=0x0123
phy_chain_rx_lane_map_physical{16.0}=0x0123
phy_chain_tx_lane_map_physical{13.0}=0x0123
phy_chain_tx_lane_map_physical{14.0}=0x0123
phy_chain_tx_lane_map_physical{15.0}=0x0123
phy_chain_tx_lane_map_physical{16.0}=0x0123
phy_chain_rx_polarity_flip_physical{13.0}=0x0
phy_chain_rx_polarity_flip_physical{14.0}=0x0
phy_chain_rx_polarity_flip_physical{15.0}=0x0
phy_chain_rx_polarity_flip_physical{16.0}=0x0
phy_chain_tx_polarity_flip_physical{13.0}=0x0
phy_chain_tx_polarity_flip_physical{14.0}=0x0
phy_chain_tx_polarity_flip_physical{15.0}=0x0
phy_chain_tx_polarity_flip_physical{16.0}=0x0
#FC4
dport_map_port_17=18
dport_map_port_18=17
dport_map_port_19=20
dport_map_port_20=19
portmap_17=17:10
portmap_18=18:10
portmap_19=19:10
portmap_20=20:10
#port_phy_addr_17=0x40
#port_phy_addr_18=0x41
#port_phy_addr_19=0x42
#port_phy_addr_20=0x43
phy_chain_rx_lane_map_physical{17.0}=0x0123
phy_chain_rx_lane_map_physical{18.0}=0x0123
phy_chain_rx_lane_map_physical{19.0}=0x0123
phy_chain_rx_lane_map_physical{20.0}=0x0123
phy_chain_tx_lane_map_physical{17.0}=0x0123
phy_chain_tx_lane_map_physical{18.0}=0x0123
phy_chain_tx_lane_map_physical{19.0}=0x0123
phy_chain_tx_lane_map_physical{20.0}=0x0123
phy_chain_rx_polarity_flip_physical{17.0}=0x1
phy_chain_rx_polarity_flip_physical{18.0}=0x1
phy_chain_rx_polarity_flip_physical{19.0}=0x1
phy_chain_rx_polarity_flip_physical{20.0}=0x1
phy_chain_tx_polarity_flip_physical{17.0}=0x0
phy_chain_tx_polarity_flip_physical{18.0}=0x0
phy_chain_tx_polarity_flip_physical{19.0}=0x0
phy_chain_tx_polarity_flip_physical{20.0}=0x0
#FC5
dport_map_port_21=22
dport_map_port_22=21
dport_map_port_23=24
dport_map_port_24=23
portmap_21=21:10
portmap_22=22:10
portmap_23=23:10
portmap_24=24:10
#port_phy_addr_21=0x44
#port_phy_addr_22=0x45
#port_phy_addr_23=0x46
#port_phy_addr_24=0x47
phy_chain_rx_lane_map_physical{21.0}=0x0123
phy_chain_rx_lane_map_physical{22.0}=0x0123
phy_chain_rx_lane_map_physical{23.0}=0x0123
phy_chain_rx_lane_map_physical{24.0}=0x0123
phy_chain_tx_lane_map_physical{21.0}=0x0123
phy_chain_tx_lane_map_physical{22.0}=0x0123
phy_chain_tx_lane_map_physical{23.0}=0x0123
phy_chain_tx_lane_map_physical{24.0}=0x0123
phy_chain_rx_polarity_flip_physical{21.0}=0x0
phy_chain_rx_polarity_flip_physical{22.0}=0x0
phy_chain_rx_polarity_flip_physical{23.0}=0x0
phy_chain_rx_polarity_flip_physical{24.0}=0x0
phy_chain_tx_polarity_flip_physical{21.0}=0x0
phy_chain_tx_polarity_flip_physical{22.0}=0x0
phy_chain_tx_polarity_flip_physical{23.0}=0x0
phy_chain_tx_polarity_flip_physical{24.0}=0x0
#FC6
#FC7
dport_map_port_25=50
portmap_25=29:100:4
phy_chain_rx_lane_map_physical{29.0}=0x1302
phy_chain_rx_lane_map_physical{30.0}=0x1302
phy_chain_rx_lane_map_physical{31.0}=0x1302
phy_chain_rx_lane_map_physical{32.0}=0x1302
phy_chain_tx_lane_map_physical{29.0}=0x2031
phy_chain_tx_lane_map_physical{30.0}=0x2031
phy_chain_tx_lane_map_physical{31.0}=0x2031
phy_chain_tx_lane_map_physical{32.0}=0x2031
phy_chain_rx_polarity_flip_physical{29.0}=0x0
phy_chain_rx_polarity_flip_physical{30.0}=0x0
phy_chain_rx_polarity_flip_physical{31.0}=0x0
phy_chain_rx_polarity_flip_physical{32.0}=0x1
phy_chain_tx_polarity_flip_physical{29.0}=0x1
phy_chain_tx_polarity_flip_physical{30.0}=0x1
phy_chain_tx_polarity_flip_physical{31.0}=0x1
phy_chain_tx_polarity_flip_physical{32.0}=0x1
#FC8
dport_map_port_26=51
portmap_26=33:100:4
phy_chain_rx_lane_map_physical{33.0}=0x0123
phy_chain_rx_lane_map_physical{34.0}=0x0123
phy_chain_rx_lane_map_physical{35.0}=0x0123
phy_chain_rx_lane_map_physical{36.0}=0x0123
phy_chain_tx_lane_map_physical{33.0}=0x0123
phy_chain_tx_lane_map_physical{34.0}=0x0123
phy_chain_tx_lane_map_physical{35.0}=0x0123
phy_chain_tx_lane_map_physical{36.0}=0x0123
phy_chain_rx_polarity_flip_physical{33.0}=0x0
phy_chain_rx_polarity_flip_physical{34.0}=0x1
phy_chain_rx_polarity_flip_physical{35.0}=0x0
phy_chain_rx_polarity_flip_physical{36.0}=0x1
phy_chain_tx_polarity_flip_physical{33.0}=0x0
phy_chain_tx_polarity_flip_physical{34.0}=0x0
phy_chain_tx_polarity_flip_physical{35.0}=0x0
phy_chain_tx_polarity_flip_physical{36.0}=0x0
#FC9
dport_map_port_27=49
dport_map_port_28=52
dport_map_port_29=53
dport_map_port_30=54
portmap_27=37:100:4
phy_chain_rx_lane_map_physical{37.0}=0x1023
phy_chain_rx_lane_map_physical{38.0}=0x1023
phy_chain_rx_lane_map_physical{39.0}=0x1023
phy_chain_rx_lane_map_physical{40.0}=0x1023
phy_chain_tx_lane_map_physical{37.0}=0x3210
phy_chain_tx_lane_map_physical{38.0}=0x3210
phy_chain_tx_lane_map_physical{39.0}=0x3210
phy_chain_tx_lane_map_physical{40.0}=0x3210
phy_chain_rx_polarity_flip_physical{37.0}=0x0
phy_chain_rx_polarity_flip_physical{38.0}=0x1
phy_chain_rx_polarity_flip_physical{39.0}=0x0
phy_chain_rx_polarity_flip_physical{40.0}=0x0
phy_chain_tx_polarity_flip_physical{37.0}=0x0
phy_chain_tx_polarity_flip_physical{38.0}=0x1
phy_chain_tx_polarity_flip_physical{39.0}=0x0
phy_chain_tx_polarity_flip_physical{40.0}=0x0
#FC10
dport_map_port_33=57
portmap_33=41:100:4
phy_chain_rx_lane_map_physical{41.0}=0x3210
phy_chain_rx_lane_map_physical{42.0}=0x3210
phy_chain_rx_lane_map_physical{43.0}=0x3210
phy_chain_rx_lane_map_physical{44.0}=0x3210
phy_chain_tx_lane_map_physical{41.0}=0x3210
phy_chain_tx_lane_map_physical{42.0}=0x3210
phy_chain_tx_lane_map_physical{43.0}=0x3210
phy_chain_tx_lane_map_physical{44.0}=0x3210
phy_chain_rx_polarity_flip_physical{41.0}=0x0
phy_chain_rx_polarity_flip_physical{42.0}=0x1
phy_chain_rx_polarity_flip_physical{43.0}=0x0
phy_chain_rx_polarity_flip_physical{44.0}=0x1
phy_chain_tx_polarity_flip_physical{41.0}=0x1
phy_chain_tx_polarity_flip_physical{42.0}=0x0
phy_chain_tx_polarity_flip_physical{43.0}=0x0
phy_chain_tx_polarity_flip_physical{44.0}=0x0
#FC11
dport_map_port_34=56
portmap_34=45:100:4
phy_chain_rx_lane_map_physical{45.0}=0x3210
phy_chain_rx_lane_map_physical{46.0}=0x3210
phy_chain_rx_lane_map_physical{47.0}=0x3210
phy_chain_rx_lane_map_physical{48.0}=0x3210
phy_chain_tx_lane_map_physical{45.0}=0x3210
phy_chain_tx_lane_map_physical{46.0}=0x3210
phy_chain_tx_lane_map_physical{47.0}=0x3210
phy_chain_tx_lane_map_physical{48.0}=0x3210
phy_chain_rx_polarity_flip_physical{45.0}=0x0
phy_chain_rx_polarity_flip_physical{46.0}=0x0
phy_chain_rx_polarity_flip_physical{47.0}=0x0
phy_chain_rx_polarity_flip_physical{48.0}=0x0
phy_chain_tx_polarity_flip_physical{45.0}=0x0
phy_chain_tx_polarity_flip_physical{46.0}=0x0
phy_chain_tx_polarity_flip_physical{47.0}=0x1
phy_chain_tx_polarity_flip_physical{48.0}=0x0
#FC12
dport_map_port_35=55
dport_map_port_36=58
dport_map_port_37=59
dport_map_port_38=60
portmap_35=49:100:4
phy_chain_rx_lane_map_physical{49.0}=0x3210
phy_chain_rx_lane_map_physical{50.0}=0x3210
phy_chain_rx_lane_map_physical{51.0}=0x3210
phy_chain_rx_lane_map_physical{52.0}=0x3210
phy_chain_tx_lane_map_physical{49.0}=0x3210
phy_chain_tx_lane_map_physical{50.0}=0x3210
phy_chain_tx_lane_map_physical{51.0}=0x3210
phy_chain_tx_lane_map_physical{52.0}=0x3210
phy_chain_rx_polarity_flip_physical{49.0}=0x0
phy_chain_rx_polarity_flip_physical{50.0}=0x0
phy_chain_rx_polarity_flip_physical{51.0}=0x0
phy_chain_rx_polarity_flip_physical{52.0}=0x0
phy_chain_tx_polarity_flip_physical{49.0}=0x1
phy_chain_tx_polarity_flip_physical{50.0}=0x0
phy_chain_tx_polarity_flip_physical{51.0}=0x0
phy_chain_tx_polarity_flip_physical{52.0}=0x1
#FC13
dport_map_port_39=26
dport_map_port_40=25
dport_map_port_41=28
dport_map_port_42=27
portmap_39=53:10
portmap_40=54:10
portmap_41=55:10
portmap_42=56:10
#port_phy_addr_39=0x60
#port_phy_addr_40=0x61
#port_phy_addr_41=0x62
#port_phy_addr_42=0x63
phy_chain_rx_lane_map_physical{53.0}=0x3120
phy_chain_rx_lane_map_physical{54.0}=0x3120
phy_chain_rx_lane_map_physical{55.0}=0x3120
phy_chain_rx_lane_map_physical{56.0}=0x3120
phy_chain_tx_lane_map_physical{53.0}=0x3102
phy_chain_tx_lane_map_physical{54.0}=0x3102
phy_chain_tx_lane_map_physical{55.0}=0x3102
phy_chain_tx_lane_map_physical{56.0}=0x3102
phy_chain_rx_polarity_flip_physical{53.0}=0x0
phy_chain_rx_polarity_flip_physical{54.0}=0x1
phy_chain_rx_polarity_flip_physical{55.0}=0x1
phy_chain_rx_polarity_flip_physical{56.0}=0x0
phy_chain_tx_polarity_flip_physical{53.0}=0x0
phy_chain_tx_polarity_flip_physical{54.0}=0x1
phy_chain_tx_polarity_flip_physical{55.0}=0x1
phy_chain_tx_polarity_flip_physical{56.0}=0x0
#FC14
dport_map_port_43=30
dport_map_port_44=29
dport_map_port_45=32
dport_map_port_46=31
portmap_43=57:10
portmap_44=58:10
portmap_45=59:10
portmap_46=60:10
#port_phy_addr_43=0x64
#port_phy_addr_44=0x65
#port_phy_addr_45=0x66
#port_phy_addr_46=0x67
phy_chain_rx_lane_map_physical{57.0}=0x3210
phy_chain_rx_lane_map_physical{58.0}=0x3210
phy_chain_rx_lane_map_physical{59.0}=0x3210
phy_chain_rx_lane_map_physical{60.0}=0x3210
phy_chain_tx_lane_map_physical{57.0}=0x3210
phy_chain_tx_lane_map_physical{58.0}=0x3210
phy_chain_tx_lane_map_physical{59.0}=0x3210
phy_chain_tx_lane_map_physical{60.0}=0x3210
phy_chain_rx_polarity_flip_physical{57.0}=0x1
phy_chain_rx_polarity_flip_physical{58.0}=0x0
phy_chain_rx_polarity_flip_physical{59.0}=0x1
phy_chain_rx_polarity_flip_physical{60.0}=0x0
phy_chain_tx_polarity_flip_physical{57.0}=0x0
phy_chain_tx_polarity_flip_physical{58.0}=0x0
phy_chain_tx_polarity_flip_physical{59.0}=0x0
phy_chain_tx_polarity_flip_physical{60.0}=0x0
#FC15
dport_map_port_47=34
dport_map_port_48=33
dport_map_port_49=36
dport_map_port_50=35
portmap_47=61:10
portmap_48=62:10
portmap_49=63:10
portmap_50=64:10
#port_phy_addr_47=0x100
#port_phy_addr_48=0x101
#port_phy_addr_49=0x102
#port_phy_addr_50=0x103
phy_chain_rx_lane_map_physical{61.0}=0x3210
phy_chain_rx_lane_map_physical{62.0}=0x3210
phy_chain_rx_lane_map_physical{63.0}=0x3210
phy_chain_rx_lane_map_physical{64.0}=0x3210
phy_chain_tx_lane_map_physical{61.0}=0x3210
phy_chain_tx_lane_map_physical{62.0}=0x3210
phy_chain_tx_lane_map_physical{63.0}=0x3210
phy_chain_tx_lane_map_physical{64.0}=0x3210
phy_chain_rx_polarity_flip_physical{61.0}=0x1
phy_chain_rx_polarity_flip_physical{62.0}=0x1
phy_chain_rx_polarity_flip_physical{63.0}=0x1
phy_chain_rx_polarity_flip_physical{64.0}=0x1
phy_chain_tx_polarity_flip_physical{61.0}=0x0
phy_chain_tx_polarity_flip_physical{62.0}=0x0
phy_chain_tx_polarity_flip_physical{63.0}=0x0
phy_chain_tx_polarity_flip_physical{64.0}=0x0
#FC16
dport_map_port_51=38
dport_map_port_52=37
dport_map_port_53=40
dport_map_port_54=39
portmap_51=65:10
portmap_52=66:10
portmap_53=67:10
portmap_54=68:10
#port_phy_addr_51=0x104
#port_phy_addr_52=0x105
#port_phy_addr_53=0x106
#port_phy_addr_54=0x107
phy_chain_rx_lane_map_physical{65.0}=0x3210
phy_chain_rx_lane_map_physical{66.0}=0x3210
phy_chain_rx_lane_map_physical{67.0}=0x3210
phy_chain_rx_lane_map_physical{68.0}=0x3210
phy_chain_tx_lane_map_physical{65.0}=0x3210
phy_chain_tx_lane_map_physical{66.0}=0x3210
phy_chain_tx_lane_map_physical{67.0}=0x3210
phy_chain_tx_lane_map_physical{68.0}=0x3210
phy_chain_rx_polarity_flip_physical{65.0}=0x0
phy_chain_rx_polarity_flip_physical{66.0}=0x0
phy_chain_rx_polarity_flip_physical{67.0}=0x0
phy_chain_rx_polarity_flip_physical{68.0}=0x0
phy_chain_tx_polarity_flip_physical{65.0}=0x0
phy_chain_tx_polarity_flip_physical{66.0}=0x0
phy_chain_tx_polarity_flip_physical{67.0}=0x0
phy_chain_tx_polarity_flip_physical{68.0}=0x0
#FC17
dport_map_port_55=42
dport_map_port_56=41
dport_map_port_57=44
dport_map_port_58=43
portmap_55=69:10
portmap_56=70:10
portmap_57=71:10
portmap_58=72:10
#port_phy_addr_55=0x120
#port_phy_addr_56=0x121
#port_phy_addr_57=0x122
#port_phy_addr_58=0x123
phy_chain_rx_lane_map_physical{69.0}=0x3210
phy_chain_rx_lane_map_physical{70.0}=0x3210
phy_chain_rx_lane_map_physical{71.0}=0x3210
phy_chain_rx_lane_map_physical{72.0}=0x3210
phy_chain_tx_lane_map_physical{69.0}=0x3210
phy_chain_tx_lane_map_physical{70.0}=0x3210
phy_chain_tx_lane_map_physical{71.0}=0x3210
phy_chain_tx_lane_map_physical{72.0}=0x3210
phy_chain_rx_polarity_flip_physical{69.0}=0x0
phy_chain_rx_polarity_flip_physical{70.0}=0x0
phy_chain_rx_polarity_flip_physical{71.0}=0x0
phy_chain_rx_polarity_flip_physical{72.0}=0x0
phy_chain_tx_polarity_flip_physical{69.0}=0x0
phy_chain_tx_polarity_flip_physical{70.0}=0x0
phy_chain_tx_polarity_flip_physical{71.0}=0x0
phy_chain_tx_polarity_flip_physical{72.0}=0x0
#FC18
dport_map_port_59=46
dport_map_port_60=45
dport_map_port_61=48
dport_map_port_62=47
portmap_59=73:10
portmap_60=74:10
portmap_61=75:10
portmap_62=76:10
#port_phy_addr_59=0x124
#port_phy_addr_60=0x125
#port_phy_addr_61=0x126
#port_phy_addr_62=0x127
phy_chain_rx_lane_map_physical{73.0}=0x3210
phy_chain_rx_lane_map_physical{74.0}=0x3210
phy_chain_rx_lane_map_physical{75.0}=0x3210
phy_chain_rx_lane_map_physical{76.0}=0x3210
phy_chain_tx_lane_map_physical{73.0}=0x2031
phy_chain_tx_lane_map_physical{74.0}=0x2031
phy_chain_tx_lane_map_physical{75.0}=0x2031
phy_chain_tx_lane_map_physical{76.0}=0x2031
phy_chain_rx_polarity_flip_physical{73.0}=0x1
phy_chain_rx_polarity_flip_physical{74.0}=0x1
phy_chain_rx_polarity_flip_physical{75.0}=0x1
phy_chain_rx_polarity_flip_physical{76.0}=0x1
phy_chain_tx_polarity_flip_physical{73.0}=0x0
phy_chain_tx_polarity_flip_physical{74.0}=0x1
phy_chain_tx_polarity_flip_physical{75.0}=0x1
phy_chain_tx_polarity_flip_physical{76.0}=0x0
#FC19
dport_map_port_64=64
portmap_64=81:10:m
phy_chain_rx_polarity_flip_physical{81.0}=0x1
phy_chain_tx_polarity_flip_physical{81.0}=0x1

View File

@ -0,0 +1 @@
Accton-AS5835-54T t1

View File

@ -0,0 +1,3 @@
CONSOLE_PORT=0x3f8
CONSOLE_DEV=0
CONSOLE_SPEED=115200

View File

@ -0,0 +1,24 @@
#!/usr/bin/env python
try:
import exceptions
import binascii
import time
import optparse
import warnings
import os
import sys
from sonic_eeprom import eeprom_base
from sonic_eeprom import eeprom_tlvinfo
import subprocess
except ImportError, e:
raise ImportError (str(e) + "- required module not found")
class board(eeprom_tlvinfo.TlvInfoDecoder):
_TLV_INFO_MAX_LEN = 256
def __init__(self, name, path, cpld_root, ro):
self.eeprom_path = "/sys/bus/i2c/devices/1-0057/eeprom"
#Two i2c buses might get flipped order, check them both.
if not os.path.exists(self.eeprom_path):
self.eeprom_path = "/sys/bus/i2c/devices/0-0057/eeprom"
super(board, self).__init__(self.eeprom_path, 0, '', True)

View File

@ -0,0 +1,61 @@
#!/usr/bin/env python
#############################################################################
# Accton
#
# Module contains an implementation of SONiC PSU Base API and
# provides the PSUs status which are available in the platform
#
#############################################################################
import os.path
try:
from sonic_psu.psu_base import PsuBase
except ImportError as e:
raise ImportError (str(e) + "- required module not found")
class PsuUtil(PsuBase):
"""Platform-specific PSUutil class"""
def __init__(self):
PsuBase.__init__(self)
self.psu_path = "/sys/bus/i2c/devices/"
self.psu_presence = "/psu_present"
self.psu_oper_status = "/psu_power_good"
self.psu_mapping = {
1: "11-0050",
2: "12-0053",
}
def get_num_psus(self):
return len(self.psu_mapping)
def get_psu_status(self, index):
if index is None:
return False
status = 0
node = self.psu_path + self.psu_mapping[index]+self.psu_oper_status
try:
with open(node, 'r') as power_status:
status = int(power_status.read())
except IOError:
return False
return status == 1
def get_psu_presence(self, index):
if index is None:
return False
status = 0
node = self.psu_path + self.psu_mapping[index] + self.psu_presence
try:
with open(node, 'r') as presence_status:
status = int(presence_status.read())
except IOError:
return False
return status == 1

View File

@ -0,0 +1,225 @@
# sfputil.py
#
# Platform-specific SFP transceiver interface for SONiC
#
try:
import time
import string
from ctypes import create_string_buffer
from sonic_sfp.sfputilbase import SfpUtilBase
except ImportError as e:
raise ImportError("%s - required module not found" % str(e))
class SfpUtil(SfpUtilBase):
"""Platform-specific SfpUtil class"""
PORT_START = 49
PORT_END = 72
PORTS_IN_BLOCK = 72
_port_to_eeprom_mapping = {}
_port_to_i2c_mapping = {
49: 28, #QSFP49
50: 28,
51: 28,
52: 28,
53: 29, #QSFP50
54: 29,
55: 29,
56: 29,
57: 26, #QSFP51
58: 26,
59: 26,
60: 26,
61: 30, #QSFP52
62: 30,
63: 30,
64: 30,
65: 31, #QSFP53
66: 31,
67: 31,
68: 31,
69: 27, #QSFP54
70: 27,
71: 27,
72: 27,
}
@property
def port_start(self):
return self.PORT_START
@property
def port_end(self):
return self.PORT_END
@property
def qsfp_port_start(self):
return self.PORT_START
@property
def qsfp_port_end(self):
return self.PORT_END
@property
def qsfp_ports(self):
return range(self.PORT_START, self.PORTS_IN_BLOCK + 1)
@property
def port_to_eeprom_mapping(self):
return self._port_to_eeprom_mapping
def __init__(self):
eeprom_path = '/sys/bus/i2c/devices/{0}-0050/eeprom'
for x in range(self.port_start, self.port_end+1):
self.port_to_eeprom_mapping[x] = eeprom_path.format(
self._port_to_i2c_mapping[x])
SfpUtilBase.__init__(self)
# For port 49~54 are QSFP, here presumed they're all split to 4 lanes.
def get_cage_num(self, port_num):
cage_num = port_num
if (port_num >= self.PORT_START):
cage_num = (port_num - self.PORT_START)/4
cage_num = cage_num + self.PORT_START
return cage_num
def get_presence(self, port_num):
# Check for invalid port_num
if port_num < self.port_start or port_num > self.port_end:
return False
cage_num = self.get_cage_num(port_num)
path = "/sys/bus/i2c/devices/3-0062/module_present_{0}"
port_ps = path.format(cage_num)
try:
val_file = open(port_ps)
except IOError as e:
print "Error: unable to open file: %s" % str(e)
return False
content = val_file.readline().rstrip()
val_file.close()
# content is a string, either "0" or "1"
if content == "1":
return True
return False
def get_low_power_mode_cpld(self, port_num):
if port_num < self.qsfp_port_start or port_num > self.qsfp_port_end:
return False
cage_num = self.get_cage_num(port_num)
path = "/sys/bus/i2c/devices/3-0062/module_lpmode_{0}"
lp_mode_path = path.format(cage_num)
try:
val_file = open(lp_mode_path)
except IOError as e:
print "Error: unable to open file: %s" % str(e)
return False
content = val_file.readline().rstrip()
val_file.close()
# content is a string, either "0" or "1"
if content == "1":
return True
return False
def get_low_power_mode(self, port_num):
if port_num < self.qsfp_port_start or port_num > self.qsfp_port_end:
return False
if not self.get_presence(port_num):
return False
try:
eeprom = None
eeprom = open(self.port_to_eeprom_mapping[port_num], mode="rb", buffering=0)
eeprom.seek(93)
lpmode = ord(eeprom.read(1))
if not (lpmode & 0x1): # 'Power override' bit is 0
return self.get_low_power_mode_cpld(port_num)
else:
if ((lpmode & 0x2) == 0x2):
return True # Low Power Mode if "Power set" bit is 1
else:
return False # High Power Mode if "Power set" bit is 0
except IOError as e:
print "Error: unable to open file: %s" % str(e)
return False
finally:
if eeprom is not None:
eeprom.close()
time.sleep(0.01)
def set_low_power_mode(self, port_num, lpmode):
if port_num < self.qsfp_port_start or port_num > self.qsfp_port_end:
return False
try:
eeprom = None
if not self.get_presence(port_num):
return False # Port is not present, unable to set the eeprom
# Fill in write buffer
regval = 0x3 if lpmode else 0x1 # 0x3:Low Power Mode, 0x1:High Power Mode
buffer = create_string_buffer(1)
buffer[0] = chr(regval)
# Write to eeprom
eeprom = open(self.port_to_eeprom_mapping[port_num], mode="r+b", buffering=0)
eeprom.seek(93)
eeprom.write(buffer[0])
return True
except IOError as e:
print "Error: unable to open file: %s" % str(e)
return False
finally:
if eeprom is not None:
eeprom.close()
time.sleep(0.01)
def reset(self, port_num):
if port_num < self.qsfp_port_start or port_num > self.qsfp_port_end:
return False
cage_num = self.get_cage_num(port_num)
path = "/sys/bus/i2c/devices/3-0062/module_reset_{0}"
port_ps = path.format(cage_num)
try:
reg_file = open(port_ps, mode="w", buffering=0)
except IOError as e:
print "Error: unable to open file: %s" % str(e)
return False
#toggle reset
reg_file.seek(0)
reg_file.write('0')
time.sleep(1)
reg_file.seek(0)
reg_file.write('1')
reg_file.close()
return True
def get_transceiver_change_event(self):
"""
TODO: This function need to be implemented
when decide to support monitoring SFP(Xcvrd)
on this platform.
"""
raise NotImplementedError

View File

@ -1,55 +1,55 @@
# name lanes alias index
Ethernet0 1 twentyfiveGigE1 1
Ethernet1 2 twentyfiveGigE2 2
Ethernet2 3 twentyfiveGigE3 3
Ethernet3 4 twentyfiveGigE4 4
Ethernet4 5 twentyfiveGigE5 5
Ethernet5 6 twentyfiveGigE6 6
Ethernet6 7 twentyfiveGigE7 7
Ethernet7 8 twentyfiveGigE8 8
Ethernet8 9 twentyfiveGigE9 9
Ethernet9 10 twentyfiveGigE10 10
Ethernet10 11 twentyfiveGigE11 11
Ethernet11 12 twentyfiveGigE12 12
Ethernet12 13 twentyfiveGigE13 13
Ethernet13 14 twentyfiveGigE14 14
Ethernet14 15 twentyfiveGigE15 15
Ethernet15 16 twentyfiveGigE16 16
Ethernet16 17 twentyfiveGigE17 17
Ethernet17 18 twentyfiveGigE18 18
Ethernet18 19 twentyfiveGigE19 19
Ethernet19 20 twentyfiveGigE20 20
Ethernet20 21 twentyfiveGigE21 21
Ethernet21 22 twentyfiveGigE22 22
Ethernet22 23 twentyfiveGigE23 23
Ethernet23 24 twentyfiveGigE24 24
Ethernet24 53 twentyfiveGigE25 25
Ethernet25 54 twentyfiveGigE26 26
Ethernet26 55 twentyfiveGigE27 27
Ethernet27 56 twentyfiveGigE28 28
Ethernet28 57 twentyfiveGigE29 29
Ethernet29 58 twentyfiveGigE30 30
Ethernet30 59 twentyfiveGigE31 31
Ethernet31 60 twentyfiveGigE32 32
Ethernet32 61 twentyfiveGigE33 33
Ethernet33 62 twentyfiveGigE34 34
Ethernet34 63 twentyfiveGigE35 35
Ethernet35 64 twentyfiveGigE36 36
Ethernet36 65 twentyfiveGigE37 37
Ethernet37 66 twentyfiveGigE38 38
Ethernet38 67 twentyfiveGigE39 39
Ethernet39 68 twentyfiveGigE40 40
Ethernet40 69 twentyfiveGigE41 41
Ethernet41 70 twentyfiveGigE42 42
Ethernet42 71 twentyfiveGigE43 43
Ethernet43 72 twentyfiveGigE44 44
Ethernet44 73 twentyfiveGigE45 45
Ethernet45 74 twentyfiveGigE46 46
Ethernet46 75 twentyfiveGigE47 47
Ethernet47 76 twentyfiveGigE48 48
Ethernet48 29,30,31,32 hundredGigE49 49
Ethernet52 33,34,35,36 hundredGigE50 53
Ethernet56 37,38,39,40 hundredGigE51 57
Ethernet60 41,42,43,44 hundredGigE52 61
Ethernet64 45,46,47,48 hundredGigE53 65
Ethernet68 49,50,51,52 hundredGigE54 69
# name lanes alias index speed
Ethernet0 1 tenGigE1 1 10000
Ethernet1 2 tenGigE2 2 10000
Ethernet2 3 tenGigE3 3 10000
Ethernet3 4 tenGigE4 4 10000
Ethernet4 5 tenGigE5 5 10000
Ethernet5 6 tenGigE6 6 10000
Ethernet6 7 tenGigE7 7 10000
Ethernet7 8 tenGigE8 8 10000
Ethernet8 9 tenGigE9 9 10000
Ethernet9 10 tenGigE10 10 10000
Ethernet10 11 tenGigE11 11 10000
Ethernet11 12 tenGigE12 12 10000
Ethernet12 13 tenGigE13 13 10000
Ethernet13 14 tenGigE14 14 10000
Ethernet14 15 tenGigE15 15 10000
Ethernet15 16 tenGigE16 16 10000
Ethernet16 17 tenGigE17 17 10000
Ethernet17 18 tenGigE18 18 10000
Ethernet18 19 tenGigE19 19 10000
Ethernet19 20 tenGigE20 20 10000
Ethernet20 21 tenGigE21 21 10000
Ethernet21 22 tenGigE22 22 10000
Ethernet22 23 tenGigE23 23 10000
Ethernet23 24 tenGigE24 24 10000
Ethernet24 53 tenGigE25 25 10000
Ethernet25 54 tenGigE26 26 10000
Ethernet26 55 tenGigE27 27 10000
Ethernet27 56 tenGigE28 28 10000
Ethernet28 57 tenGigE29 29 10000
Ethernet29 58 tenGigE30 30 10000
Ethernet30 59 tenGigE31 31 10000
Ethernet31 60 tenGigE32 32 10000
Ethernet32 61 tenGigE33 33 10000
Ethernet33 62 tenGigE34 34 10000
Ethernet34 63 tenGigE35 35 10000
Ethernet35 64 tenGigE36 36 10000
Ethernet36 65 tenGigE37 37 10000
Ethernet37 66 tenGigE38 38 10000
Ethernet38 67 tenGigE39 39 10000
Ethernet39 68 tenGigE40 40 10000
Ethernet40 69 tenGigE41 41 10000
Ethernet41 70 tenGigE42 42 10000
Ethernet42 71 tenGigE43 43 10000
Ethernet43 72 tenGigE44 44 10000
Ethernet44 73 tenGigE45 45 10000
Ethernet45 74 tenGigE46 46 10000
Ethernet46 75 tenGigE47 47 10000
Ethernet47 76 tenGigE48 48 10000
Ethernet48 29,30,31,32 hundredGigE49 49 100000
Ethernet52 33,34,35,36 hundredGigE50 53 100000
Ethernet56 37,38,39,40 hundredGigE51 57 100000
Ethernet60 41,42,43,44 hundredGigE52 61 100000
Ethernet64 45,46,47,48 hundredGigE53 65 100000
Ethernet68 49,50,51,52 hundredGigE54 69 100000

View File

@ -6,6 +6,8 @@
try:
import time
import os
import string
from ctypes import create_string_buffer
from sonic_sfp.sfputilbase import SfpUtilBase
except ImportError as e:
raise ImportError("%s - required module not found" % str(e))
@ -176,11 +178,85 @@ class SfpUtil(SfpUtilBase):
return False
def get_low_power_mode(self, port_num):
raise NotImplementedError
def get_low_power_mode_cpld(self, port_num):
if port_num < self.qsfp_port_start or port_num > self.qsfp_port_end:
return False
cpld_path = self.get_cpld_dev_path(port_num)
_path = cpld_path + "/module_lp_mode_"
_path += str(self._port_to_i2c_mapping[port_num][0])
def set_low_power_mode(self, port_num, lpmode):
raise NotImplementedError
try:
reg_file = open(_path)
except IOError as e:
print "Error: unable to open file: %s" % str(e)
return False
content = reg_file.readline().rstrip()
reg_file.close()
# content is a string, either "0" or "1"
if content == "1":
return True
return False
def get_low_power_mode(self, port_num):
if port_num < self.qsfp_port_start or port_num > self.qsfp_port_end:
return False
if not self.get_presence(port_num):
return False
try:
eeprom = None
eeprom = open(self.port_to_eeprom_mapping[port_num], mode="rb", buffering=0)
eeprom.seek(93)
lpmode = ord(eeprom.read(1))
if not (lpmode & 0x1): # 'Power override' bit is 0
return self.get_low_power_mode_cpld(port_num)
else:
if ((lpmode & 0x2) == 0x2):
return True # Low Power Mode if "Power set" bit is 1
else:
return False # High Power Mode if "Power set" bit is 0
except IOError as e:
print "Error: unable to open file: %s" % str(e)
return False
finally:
if eeprom is not None:
eeprom.close()
time.sleep(0.01)
def set_low_power_mode(self, port_num, lpmode):
if port_num < self.qsfp_port_start or port_num > self.qsfp_port_end:
return False
try:
eeprom = None
if not self.get_presence(port_num):
return False # Port is not present, unable to set the eeprom
# Fill in write buffer
regval = 0x3 if lpmode else 0x1 # 0x3:Low Power Mode, 0x1:High Power Mode
buffer = create_string_buffer(1)
buffer[0] = chr(regval)
# Write to eeprom
eeprom = open(self.port_to_eeprom_mapping[port_num], mode="r+b", buffering=0)
eeprom.seek(93)
eeprom.write(buffer[0])
return True
except IOError as e:
print "Error: unable to open file: %s" % str(e)
return False
finally:
if eeprom is not None:
eeprom.close()
time.sleep(0.01)
def reset(self, port_num):
if port_num < self.qsfp_port_start or port_num > self.qsfp_port_end:

View File

@ -5,6 +5,8 @@
try:
import time
import string
from ctypes import create_string_buffer
from sonic_sfp.sfputilbase import SfpUtilBase
except ImportError as e:
raise ImportError("%s - required module not found" % str(e))
@ -186,11 +188,63 @@ class SfpUtil(SfpUtilBase):
return False
def get_low_power_mode(self, port_num):
raise NotImplementedError
def get_low_power_mode(self, port_num):
# Check for invalid port_num
if port_num < self.qsfp_port_start or port_num > self.qsfp_port_end:
return False
def set_low_power_mode(self, port_num, lpmode):
raise NotImplementedError
try:
eeprom = None
if not self.get_presence(port_num):
return False
eeprom = open(self.port_to_eeprom_mapping[port_num], "rb")
eeprom.seek(93)
lpmode = ord(eeprom.read(1))
if ((lpmode & 0x3) == 0x3):
return True # Low Power Mode if "Power override" bit is 1 and "Power set" bit is 1
else:
return False # High Power Mode if one of the following conditions is matched:
# 1. "Power override" bit is 0
# 2. "Power override" bit is 1 and "Power set" bit is 0
except IOError as e:
print "Error: unable to open file: %s" % str(e)
return False
finally:
if eeprom is not None:
eeprom.close()
time.sleep(0.01)
def set_low_power_mode(self, port_num, lpmode):
# Check for invalid port_num
if port_num < self.qsfp_port_start or port_num > self.qsfp_port_end:
return False
try:
eeprom = None
if not self.get_presence(port_num):
return False # Port is not present, unable to set the eeprom
# Fill in write buffer
regval = 0x3 if lpmode else 0x1 # 0x3:Low Power Mode, 0x1:High Power Mode
buffer = create_string_buffer(1)
buffer[0] = chr(regval)
# Write to eeprom
eeprom = open(self.port_to_eeprom_mapping[port_num], "r+b")
eeprom.seek(93)
eeprom.write(buffer[0])
return True
except IOError as e:
print "Error: unable to open file: %s" % str(e)
return False
finally:
if eeprom is not None:
eeprom.close()
time.sleep(0.01)
def reset(self, port_num):
if port_num < self.qsfp_port_start or port_num > self.qsfp_port_end:

View File

@ -5,6 +5,8 @@
try:
import time
import string
from ctypes import create_string_buffer
from sonic_sfp.sfputilbase import SfpUtilBase
except ImportError as e:
raise ImportError("%s - required module not found" % str(e))
@ -186,11 +188,63 @@ class SfpUtil(SfpUtilBase):
return False
def get_low_power_mode(self, port_num):
raise NotImplementedError
def get_low_power_mode(self, port_num):
# Check for invalid port_num
if port_num < self.qsfp_port_start or port_num > self.qsfp_port_end:
return False
def set_low_power_mode(self, port_num, lpmode):
raise NotImplementedError
try:
eeprom = None
if not self.get_presence(port_num):
return False
eeprom = open(self.port_to_eeprom_mapping[port_num], "rb")
eeprom.seek(93)
lpmode = ord(eeprom.read(1))
if ((lpmode & 0x3) == 0x3):
return True # Low Power Mode if "Power override" bit is 1 and "Power set" bit is 1
else:
return False # High Power Mode if one of the following conditions is matched:
# 1. "Power override" bit is 0
# 2. "Power override" bit is 1 and "Power set" bit is 0
except IOError as e:
print "Error: unable to open file: %s" % str(e)
return False
finally:
if eeprom is not None:
eeprom.close()
time.sleep(0.01)
def set_low_power_mode(self, port_num, lpmode):
# Check for invalid port_num
if port_num < self.qsfp_port_start or port_num > self.qsfp_port_end:
return False
try:
eeprom = None
if not self.get_presence(port_num):
return False # Port is not present, unable to set the eeprom
# Fill in write buffer
regval = 0x3 if lpmode else 0x1 # 0x3:Low Power Mode, 0x1:High Power Mode
buffer = create_string_buffer(1)
buffer[0] = chr(regval)
# Write to eeprom
eeprom = open(self.port_to_eeprom_mapping[port_num], "r+b")
eeprom.seek(93)
eeprom.write(buffer[0])
return True
except IOError as e:
print "Error: unable to open file: %s" % str(e)
return False
finally:
if eeprom is not None:
eeprom.close()
time.sleep(0.01)
def reset(self, port_num):
if port_num < self.qsfp_port_start or port_num > self.qsfp_port_end:

View File

@ -331,6 +331,9 @@ phy_chain_tx_polarity_flip_physical{71.0}=0x0
phy_chain_tx_polarity_flip_physical{72.0}=0x0
dport_map_port_79=49
dport_map_port_80=50
dport_map_port_81=51
dport_map_port_82=52
portmap_79=77:100
phy_chain_rx_lane_map_physical{77.0}=0x2130
phy_chain_tx_lane_map_physical{77.0}=0x3120
@ -344,6 +347,9 @@ phy_chain_tx_polarity_flip_physical{79.0}=0x1
phy_chain_tx_polarity_flip_physical{80.0}=0x1
dport_map_port_87=53
dport_map_port_88=54
dport_map_port_89=55
dport_map_port_90=56
portmap_87=85:100
phy_chain_rx_lane_map_physical{85.0}=0x1203
phy_chain_tx_lane_map_physical{85.0}=0x2031
@ -357,6 +363,9 @@ phy_chain_tx_polarity_flip_physical{87.0}=0x1
phy_chain_tx_polarity_flip_physical{88.0}=0x1
dport_map_port_95=57
dport_map_port_96=58
dport_map_port_97=59
dport_map_port_98=60
portmap_95=93:100
phy_chain_rx_lane_map_physical{93.0}=0x2130
phy_chain_tx_lane_map_physical{93.0}=0x3210
@ -370,6 +379,9 @@ phy_chain_tx_polarity_flip_physical{95.0}=0x0
phy_chain_tx_polarity_flip_physical{96.0}=0x1
dport_map_port_99=61
dport_map_port_100=62
dport_map_port_101=63
dport_map_port_102=64
portmap_99=97:100
phy_chain_rx_lane_map_physical{97.0}=0x1203
phy_chain_tx_lane_map_physical{97.0}=0x2031
@ -383,6 +395,9 @@ phy_chain_tx_polarity_flip_physical{99.0}=0x1
phy_chain_tx_polarity_flip_physical{100.0}=0x1
dport_map_port_107=65
dport_map_port_108=66
dport_map_port_109=67
dport_map_port_110=68
portmap_107=105:100
phy_chain_rx_lane_map_physical{105.0}=0x2130
phy_chain_tx_lane_map_physical{105.0}=0x3120
@ -396,6 +411,9 @@ phy_chain_tx_polarity_flip_physical{107.0}=0x1
phy_chain_tx_polarity_flip_physical{108.0}=0x1
dport_map_port_115=69
dport_map_port_116=70
dport_map_port_117=71
dport_map_port_118=72
portmap_115=113:100
phy_chain_rx_lane_map_physical{113.0}=0x1203
phy_chain_tx_lane_map_physical{113.0}=0x2031
@ -409,6 +427,9 @@ phy_chain_tx_polarity_flip_physical{115.0}=0x1
phy_chain_tx_polarity_flip_physical{116.0}=0x1
dport_map_port_123=73
dport_map_port_124=74
dport_map_port_125=75
dport_map_port_126=76
portmap_123=121:100
phy_chain_rx_lane_map_physical{121.0}=0x2130
phy_chain_tx_lane_map_physical{121.0}=0x3210
@ -421,6 +442,7 @@ phy_chain_tx_polarity_flip_physical{122.0}=0x1
phy_chain_tx_polarity_flip_physical{123.0}=0x1
phy_chain_tx_polarity_flip_physical{124.0}=0x0
# Not able to breakout, Since overlap with possible mgmt ports
dport_map_port_127=77
portmap_127=125:100
phy_chain_rx_lane_map_physical{125.0}=0x1203

View File

@ -1,7 +1,10 @@
#! /usr/bin/python
try:
from sonic_sfp.sfputilbase import SfpUtilBase
import time
import string
from ctypes import create_string_buffer
from sonic_sfp.sfputilbase import SfpUtilBase
except ImportError, e:
raise ImportError (str(e) + "- required module not found")
@ -26,13 +29,7 @@ class SfpUtil(SfpUtilBase):
SfpUtilBase.__init__(self)
def reset(self, port_num):
raise NotImplementedErro
def set_low_power_mode(self, port_nuM, lpmode):
raise NotImplementedErro
def get_low_power_mode(self, port_num):
raise NotImplementedErro
raise NotImplementedError
def get_presence(self, port_num):
# Check for invalid port_num
@ -78,3 +75,61 @@ class SfpUtil(SfpUtilBase):
on this platform.
"""
raise NotImplementedError
def get_low_power_mode(self, port_num):
# Check for invalid port_num
if port_num < self._port_start or port_num > self._port_end:
return False
try:
eeprom = None
if not self.get_presence(port_num):
return False
eeprom = open(self.port_to_eeprom_mapping[port_num], "rb")
eeprom.seek(93)
lpmode = ord(eeprom.read(1))
if ((lpmode & 0x3) == 0x3):
return True # Low Power Mode if "Power override" bit is 1 and "Power set" bit is 1
else:
return False # High Power Mode if one of the following conditions is matched:
# 1. "Power override" bit is 0
# 2. "Power override" bit is 1 and "Power set" bit is 0
except IOError as e:
print "Error: unable to open file: %s" % str(e)
return False
finally:
if eeprom is not None:
eeprom.close()
time.sleep(0.01)
def set_low_power_mode(self, port_num, lpmode):
# Check for invalid port_num
if port_num < self._port_start or port_num > self._port_end:
return False
try:
eeprom = None
if not self.get_presence(port_num):
return False # Port is not present, unable to set the eeprom
# Fill in write buffer
regval = 0x3 if lpmode else 0x1 # 0x3:Low Power Mode, 0x1:High Power Mode
buffer = create_string_buffer(1)
buffer[0] = chr(regval)
# Write to eeprom
eeprom = open(self.port_to_eeprom_mapping[port_num], "r+b")
eeprom.seek(93)
eeprom.write(buffer[0])
return True
except IOError as e:
print "Error: unable to open file: %s" % str(e)
return False
finally:
if eeprom is not None:
eeprom.close()
time.sleep(0.01)

View File

@ -5,6 +5,8 @@
try:
import time
import string
from ctypes import create_string_buffer
from sonic_sfp.sfputilbase import SfpUtilBase
except ImportError as e:
raise ImportError("%s - required module not found" % str(e))
@ -108,11 +110,63 @@ class SfpUtil(SfpUtilBase):
return False
def get_low_power_mode(self, port_num):
raise NotImplementedError
def set_low_power_mode(self, port_num, lpmode):
raise NotImplementedError
def get_low_power_mode(self, port_num):
# Check for invalid port_num
if port_num < self.port_start or port_num > self.port_end:
return False
try:
eeprom = None
if not self.get_presence(port_num):
return False
eeprom = open(self.port_to_eeprom_mapping[port_num], "rb")
eeprom.seek(93)
lpmode = ord(eeprom.read(1))
if ((lpmode & 0x3) == 0x3):
return True # Low Power Mode if "Power override" bit is 1 and "Power set" bit is 1
else:
return False # High Power Mode if one of the following conditions is matched:
# 1. "Power override" bit is 0
# 2. "Power override" bit is 1 and "Power set" bit is 0
except IOError as e:
print "Error: unable to open file: %s" % str(e)
return False
finally:
if eeprom is not None:
eeprom.close()
time.sleep(0.01)
def set_low_power_mode(self, port_num, lpmode):
# Check for invalid port_num
if port_num < self.port_start or port_num > self.port_end:
return False
try:
eeprom = None
if not self.get_presence(port_num):
return False # Port is not present, unable to set the eeprom
# Fill in write buffer
regval = 0x3 if lpmode else 0x1 # 0x3:Low Power Mode, 0x1:High Power Mode
buffer = create_string_buffer(1)
buffer[0] = chr(regval)
# Write to eeprom
eeprom = open(self.port_to_eeprom_mapping[port_num], "r+b")
eeprom.seek(93)
eeprom.write(buffer[0])
return True
except IOError as e:
print "Error: unable to open file: %s" % str(e)
return False
finally:
if eeprom is not None:
eeprom.close()
time.sleep(0.01)
def reset(self, port_num):
if port_num < self.port_start or port_num > self.port_end:

View File

@ -0,0 +1 @@
Arista-7050-QX-32S

View File

@ -875,3 +875,71 @@ robust_hash_disable_vlan.0=1
sram_scan_enable.0=0
tdma_timeout_usec.0=15000000
tslam_timeout_usec.0=15000000
# Tuning
serdes_core_rx_polarity_flip_physical{1}=0x69
serdes_core_rx_polarity_flip_physical{9}=0x69
serdes_core_rx_polarity_flip_physical{17}=0xe4
serdes_core_rx_polarity_flip_physical{25}=0x62
serdes_core_rx_polarity_flip_physical{33}=0x33
serdes_core_rx_polarity_flip_physical{41}=0x66
serdes_core_rx_polarity_flip_physical{49}=0x24
serdes_core_rx_polarity_flip_physical{57}=0x66
serdes_core_rx_polarity_flip_physical{65}=0x33
serdes_core_rx_polarity_flip_physical{73}=0x63
serdes_core_rx_polarity_flip_physical{81}=0x33
serdes_core_rx_polarity_flip_physical{89}=0x63
serdes_core_rx_polarity_flip_physical{97}=0x1e
serdes_core_rx_polarity_flip_physical{105}=0x63
serdes_core_rx_polarity_flip_physical{113}=0xdb
serdes_core_rx_polarity_flip_physical{121}=0x69
serdes_core_rx_polarity_flip_physical{129}=0x24
serdes_core_rx_polarity_flip_physical{137}=0x66
serdes_core_rx_polarity_flip_physical{145}=0x33
serdes_core_rx_polarity_flip_physical{153}=0x5a
serdes_core_rx_polarity_flip_physical{161}=0xf
serdes_core_rx_polarity_flip_physical{169}=0x66
serdes_core_rx_polarity_flip_physical{177}=0x30
serdes_core_rx_polarity_flip_physical{185}=0x66
serdes_core_rx_polarity_flip_physical{193}=0x30
serdes_core_rx_polarity_flip_physical{201}=0x66
serdes_core_rx_polarity_flip_physical{209}=0x33
serdes_core_rx_polarity_flip_physical{217}=0x66
serdes_core_rx_polarity_flip_physical{225}=0x24
serdes_core_rx_polarity_flip_physical{233}=0x96
serdes_core_rx_polarity_flip_physical{241}=0xe1
serdes_core_rx_polarity_flip_physical{249}=0xc3
serdes_core_rx_polarity_flip_physical{257}=0x0
serdes_core_tx_polarity_flip_physical{1}=0x7b
serdes_core_tx_polarity_flip_physical{9}=0x4d
serdes_core_tx_polarity_flip_physical{17}=0x69
serdes_core_tx_polarity_flip_physical{25}=0x69
serdes_core_tx_polarity_flip_physical{33}=0x78
serdes_core_tx_polarity_flip_physical{41}=0xcc
serdes_core_tx_polarity_flip_physical{49}=0xcf
serdes_core_tx_polarity_flip_physical{57}=0xca
serdes_core_tx_polarity_flip_physical{65}=0xc3
serdes_core_tx_polarity_flip_physical{73}=0xca
serdes_core_tx_polarity_flip_physical{81}=0xc3
serdes_core_tx_polarity_flip_physical{89}=0xca
serdes_core_tx_polarity_flip_physical{97}=0x70
serdes_core_tx_polarity_flip_physical{105}=0x59
serdes_core_tx_polarity_flip_physical{113}=0x12
serdes_core_tx_polarity_flip_physical{121}=0x3c
serdes_core_tx_polarity_flip_physical{129}=0x12
serdes_core_tx_polarity_flip_physical{137}=0x3c
serdes_core_tx_polarity_flip_physical{145}=0x12
serdes_core_tx_polarity_flip_physical{153}=0x68
serdes_core_tx_polarity_flip_physical{161}=0x6
serdes_core_tx_polarity_flip_physical{169}=0x69
serdes_core_tx_polarity_flip_physical{177}=0x6
serdes_core_tx_polarity_flip_physical{185}=0x69
serdes_core_tx_polarity_flip_physical{193}=0x6
serdes_core_tx_polarity_flip_physical{201}=0x69
serdes_core_tx_polarity_flip_physical{209}=0x6
serdes_core_tx_polarity_flip_physical{217}=0x6a
serdes_core_tx_polarity_flip_physical{225}=0x66
serdes_core_tx_polarity_flip_physical{233}=0x36
serdes_core_tx_polarity_flip_physical{241}=0xc6
serdes_core_tx_polarity_flip_physical{249}=0xc3
serdes_core_tx_polarity_flip_physical{257}=0x0

View File

@ -747,3 +747,71 @@ robust_hash_disable_vlan.0=1
sram_scan_enable.0=0
tdma_timeout_usec.0=15000000
tslam_timeout_usec.0=15000000
# Tuning
serdes_core_rx_polarity_flip_physical{1}=0x69
serdes_core_rx_polarity_flip_physical{9}=0x69
serdes_core_rx_polarity_flip_physical{17}=0xe4
serdes_core_rx_polarity_flip_physical{25}=0x62
serdes_core_rx_polarity_flip_physical{33}=0x33
serdes_core_rx_polarity_flip_physical{41}=0x66
serdes_core_rx_polarity_flip_physical{49}=0x24
serdes_core_rx_polarity_flip_physical{57}=0x66
serdes_core_rx_polarity_flip_physical{65}=0x33
serdes_core_rx_polarity_flip_physical{73}=0x63
serdes_core_rx_polarity_flip_physical{81}=0x33
serdes_core_rx_polarity_flip_physical{89}=0x63
serdes_core_rx_polarity_flip_physical{97}=0x1e
serdes_core_rx_polarity_flip_physical{105}=0x63
serdes_core_rx_polarity_flip_physical{113}=0xdb
serdes_core_rx_polarity_flip_physical{121}=0x69
serdes_core_rx_polarity_flip_physical{129}=0x24
serdes_core_rx_polarity_flip_physical{137}=0x66
serdes_core_rx_polarity_flip_physical{145}=0x33
serdes_core_rx_polarity_flip_physical{153}=0x5a
serdes_core_rx_polarity_flip_physical{161}=0xf
serdes_core_rx_polarity_flip_physical{169}=0x66
serdes_core_rx_polarity_flip_physical{177}=0x30
serdes_core_rx_polarity_flip_physical{185}=0x66
serdes_core_rx_polarity_flip_physical{193}=0x30
serdes_core_rx_polarity_flip_physical{201}=0x66
serdes_core_rx_polarity_flip_physical{209}=0x33
serdes_core_rx_polarity_flip_physical{217}=0x66
serdes_core_rx_polarity_flip_physical{225}=0x24
serdes_core_rx_polarity_flip_physical{233}=0x96
serdes_core_rx_polarity_flip_physical{241}=0xe1
serdes_core_rx_polarity_flip_physical{249}=0xc3
serdes_core_rx_polarity_flip_physical{257}=0x0
serdes_core_tx_polarity_flip_physical{1}=0x7b
serdes_core_tx_polarity_flip_physical{9}=0x4d
serdes_core_tx_polarity_flip_physical{17}=0x69
serdes_core_tx_polarity_flip_physical{25}=0x69
serdes_core_tx_polarity_flip_physical{33}=0x78
serdes_core_tx_polarity_flip_physical{41}=0xcc
serdes_core_tx_polarity_flip_physical{49}=0xcf
serdes_core_tx_polarity_flip_physical{57}=0xca
serdes_core_tx_polarity_flip_physical{65}=0xc3
serdes_core_tx_polarity_flip_physical{73}=0xca
serdes_core_tx_polarity_flip_physical{81}=0xc3
serdes_core_tx_polarity_flip_physical{89}=0xca
serdes_core_tx_polarity_flip_physical{97}=0x70
serdes_core_tx_polarity_flip_physical{105}=0x59
serdes_core_tx_polarity_flip_physical{113}=0x12
serdes_core_tx_polarity_flip_physical{121}=0x3c
serdes_core_tx_polarity_flip_physical{129}=0x12
serdes_core_tx_polarity_flip_physical{137}=0x3c
serdes_core_tx_polarity_flip_physical{145}=0x12
serdes_core_tx_polarity_flip_physical{153}=0x68
serdes_core_tx_polarity_flip_physical{161}=0x6
serdes_core_tx_polarity_flip_physical{169}=0x69
serdes_core_tx_polarity_flip_physical{177}=0x6
serdes_core_tx_polarity_flip_physical{185}=0x69
serdes_core_tx_polarity_flip_physical{193}=0x6
serdes_core_tx_polarity_flip_physical{201}=0x69
serdes_core_tx_polarity_flip_physical{209}=0x6
serdes_core_tx_polarity_flip_physical{217}=0x6a
serdes_core_tx_polarity_flip_physical{225}=0x66
serdes_core_tx_polarity_flip_physical{233}=0x36
serdes_core_tx_polarity_flip_physical{241}=0xc6
serdes_core_tx_polarity_flip_physical{249}=0xc3
serdes_core_tx_polarity_flip_physical{257}=0x0

View File

@ -978,7 +978,7 @@ serdes_preemphasis_46=0x144108
serdes_preemphasis_47=0x103a07
serdes_preemphasis_48=0x194407
serdes_preemphasis_49=0x194407
serdes_preemphasis_66=0x62f01
serdes_preemphasis_66=0x43004
serdes_preemphasis_68=0x164308
serdes_preemphasis_69=0x164408
serdes_preemphasis_70=0xe3206
@ -995,7 +995,7 @@ serdes_preemphasis_80=0x184606
serdes_preemphasis_81=0x184407
serdes_preemphasis_82=0x103706
serdes_preemphasis_83=0x103706
serdes_preemphasis_100=0x62f01
serdes_preemphasis_100=0x43004
serdes_preemphasis_102=0x184408
serdes_preemphasis_103=0x184606
serdes_preemphasis_104=0x184606

View File

@ -871,7 +871,7 @@ serdes_preemphasis_60=0x580c
serdes_preemphasis_61=0x580c
serdes_preemphasis_62=0x580c
serdes_preemphasis_63=0x580c
serdes_preemphasis_66=0x62f01
serdes_preemphasis_66=0x43004
serdes_preemphasis_68=0x184606
serdes_preemphasis_69=0x184407
serdes_preemphasis_70=0x580c
@ -902,7 +902,7 @@ serdes_preemphasis_94=0x580c
serdes_preemphasis_95=0x580c
serdes_preemphasis_96=0x580c
serdes_preemphasis_97=0x580c
serdes_preemphasis_100=0x62f01
serdes_preemphasis_100=0x43004
serdes_preemphasis_102=0x174507
serdes_preemphasis_103=0x184606
serdes_preemphasis_104=0x580c

View File

@ -978,7 +978,7 @@ serdes_preemphasis_46=0x61d01
serdes_preemphasis_47=0x51a01
serdes_preemphasis_48=0x105004
serdes_preemphasis_49=0x105004
serdes_preemphasis_66=0x62f01
serdes_preemphasis_66=0x43004
serdes_preemphasis_68=0x105004
serdes_preemphasis_69=0x105004
serdes_preemphasis_70=0x105004
@ -995,7 +995,7 @@ serdes_preemphasis_80=0x61d01
serdes_preemphasis_81=0x51b01
serdes_preemphasis_82=0x105004
serdes_preemphasis_83=0x105004
serdes_preemphasis_100=0x62f01
serdes_preemphasis_100=0x43004
serdes_preemphasis_102=0x105004
serdes_preemphasis_103=0x105004
serdes_preemphasis_104=0x105004

View File

@ -18,16 +18,17 @@ try:
from sonic_platform_base.chassis_base import ChassisBase
from sonic_platform.fan import Fan
from sonic_platform.psu import Psu
from sonic_platform.device import Device
from sonic_platform.component import Component
from sonic_platform.watchdog import Watchdog
except ImportError as e:
raise ImportError(str(e) + "- required module not found")
MMC_CPLD_ADDR = '0x100'
BIOS_VERSION_PATH = "/sys/class/dmi/id/bios_version"
CONFIG_DB_PATH = "/etc/sonic/config_db.json"
SMC_CPLD_PATH = "/sys/devices/platform/e1031.smc/version"
MMC_CPLD_PATH = "/sys/devices/platform/e1031.smc/getreg"
NUM_FAN = 3
NUM_PSU = 2
RESET_REGISTER = "0x112"
REBOOT_CAUSE_PATH = "/host/reboot-cause/previous-reboot-cause.txt"
class Chassis(ChassisBase):
@ -42,16 +43,9 @@ class Chassis(ChassisBase):
psu = Psu(index)
self._psu_list.append(psu)
ChassisBase.__init__(self)
def __get_register_value(self, path, register):
cmd = "echo {1} > {0}; cat {0}".format(path, register)
p = subprocess.Popen(
cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
raw_data, err = p.communicate()
if err is not '':
return 'None'
else:
return raw_data.strip()
self._component_device = Device("component")
self._component_name_list = self._component_device.get_name_list()
self._watchdog = Watchdog()
def __read_config_db(self):
try:
@ -61,6 +55,14 @@ class Chassis(ChassisBase):
except IOError:
raise IOError("Unable to open config_db file !")
def __read_txt_file(self, file_path):
try:
with open(file_path, 'r') as fd:
data = fd.read()
return data.strip()
except IOError:
raise IOError("Unable to open %s file !" % file_path)
def get_base_mac(self):
"""
Retrieves the base MAC address for the chassis
@ -73,41 +75,63 @@ class Chassis(ChassisBase):
base_mac = self.config_data["DEVICE_METADATA"]["localhost"]["mac"]
return str(base_mac)
except KeyError:
raise KeyError("Base MAC not found")
return str(None)
def get_component_versions(self):
def get_firmware_version(self, component_name):
"""
Retrieves platform-specific hardware/firmware versions for chassis
componenets such as BIOS, CPLD, FPGA, etc.
Args:
type: A string, component name
Returns:
A string containing platform-specific component versions
"""
self.component = Component(component_name)
if component_name not in self._component_name_list:
return None
return self.component.get_firmware_version()
component_versions = dict()
def install_component_firmware(self, component_name, image_path):
"""
Install firmware to module
Args:
type: A string, component name.
image_path: A string, path to firmware image.
# Get BIOS version
try:
with open(BIOS_VERSION_PATH, 'r') as fd:
bios_version = fd.read()
except IOError:
raise IOError("Unable to open version file !")
Returns:
A boolean, True if install successfully, False if not
"""
self.component = Component(component_name)
if component_name not in self._component_name_list:
return False
return self.component.upgrade_firmware(image_path)
# Get CPLD version
cpld_version = dict()
def get_reboot_cause(self):
"""
Retrieves the cause of the previous reboot
with open(SMC_CPLD_PATH, 'r') as fd:
smc_cpld_version = fd.read()
smc_cpld_version = 'None' if smc_cpld_version is 'None' else "{}.{}".format(
int(smc_cpld_version[2], 16), int(smc_cpld_version[3], 16))
Returns:
A tuple (string, string) where the first element is a string
containing the cause of the previous reboot. This string must be
one of the predefined strings in this class. If the first string
is "REBOOT_CAUSE_HARDWARE_OTHER", the second string can be used
to pass a description of the reboot cause.
"""
self.component = Component("SMC_CPLD")
description = 'None'
reboot_cause = self.REBOOT_CAUSE_HARDWARE_OTHER
hw_reboot_cause = self.component.get_register_value(RESET_REGISTER)
sw_reboot_cause = self.__read_txt_file(REBOOT_CAUSE_PATH)
mmc_cpld_version = self.__get_register_value(
MMC_CPLD_PATH, MMC_CPLD_ADDR)
mmc_cpld_version = 'None' if mmc_cpld_version is 'None' else "{}.{}".format(
int(mmc_cpld_version[2], 16), int(mmc_cpld_version[3], 16))
if sw_reboot_cause != "Unexpected reboot":
reboot_cause = self.REBOOT_CAUSE_NON_HARDWARE
elif hw_reboot_cause == "0x11":
reboot_cause = self.REBOOT_CAUSE_POWER_LOSS
elif hw_reboot_cause == "0x33" or hw_reboot_cause == "0x55":
reboot_cause = self.REBOOT_CAUSE_WATCHDOG
else:
reboot_cause = self.REBOOT_CAUSE_HARDWARE_OTHER
description = 'Unknown reason'
cpld_version["SMC"] = smc_cpld_version
cpld_version["MMC"] = mmc_cpld_version
component_versions["CPLD"] = cpld_version
component_versions["BIOS"] = bios_version.strip()
return str(component_versions)
return (reboot_cause, description)

View File

@ -0,0 +1,127 @@
#!/usr/bin/env python
#############################################################################
# Celestica
#
# Component contains an implementation of SONiC Platform Base API and
# provides the components firmware management function
#
#############################################################################
import json
import os.path
import shutil
import shlex
import subprocess
try:
from sonic_platform_base.device_base import DeviceBase
except ImportError as e:
raise ImportError(str(e) + "- required module not found")
MMC_CPLD_ADDR = '0x100'
BIOS_VERSION_PATH = "/sys/class/dmi/id/bios_version"
CONFIG_DB_PATH = "/etc/sonic/config_db.json"
SMC_CPLD_PATH = "/sys/devices/platform/e1031.smc/version"
GETREG_PATH = "/sys/devices/platform/e1031.smc/getreg"
class Component(DeviceBase):
"""Platform-specific Component class"""
DEVICE_TYPE = "component"
def __init__(self, component_name):
DeviceBase.__init__(self)
self.name = component_name.upper()
def __run_command(self, command):
# Run bash command and print output to stdout
try:
process = subprocess.Popen(
shlex.split(command), stdout=subprocess.PIPE)
while True:
output = process.stdout.readline()
if output == '' and process.poll() is not None:
break
rc = process.poll()
if rc != 0:
return False
except:
return False
return True
def __get_bios_version(self):
# Retrieves the BIOS firmware version
try:
with open(BIOS_VERSION_PATH, 'r') as fd:
bios_version = fd.read()
return bios_version.strip()
except Exception as e:
return None
def get_register_value(self, register):
# Retrieves the cpld register value
cmd = "echo {1} > {0}; cat {0}".format(GETREG_PATH, register)
p = subprocess.Popen(
cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
raw_data, err = p.communicate()
if err is not '':
return None
return raw_data.strip()
def __get_cpld_version(self):
# Retrieves the CPLD firmware version
cpld_version = dict()
with open(SMC_CPLD_PATH, 'r') as fd:
smc_cpld_version = fd.read()
smc_cpld_version = 'None' if smc_cpld_version is 'None' else "{}.{}".format(
int(smc_cpld_version[2], 16), int(smc_cpld_version[3], 16))
mmc_cpld_version = self.get_register_value(MMC_CPLD_ADDR)
mmc_cpld_version = 'None' if mmc_cpld_version is 'None' else "{}.{}".format(
int(mmc_cpld_version[2], 16), int(mmc_cpld_version[3], 16))
cpld_version["SMC_CPLD"] = smc_cpld_version
cpld_version["MMC_CPLD"] = mmc_cpld_version
return cpld_version
def get_firmware_version(self):
"""
Retrieves the firmware version of module
Returns:
string: The firmware versions of the module
"""
fw_version = None
if self.name == "BIOS":
fw_version = self.__get_bios_version()
elif "CPLD" in self.name:
cpld_version = self.__get_cpld_version()
fw_version = cpld_version.get(self.name)
return fw_version
def upgrade_firmware(self, image_path):
"""
Install firmware to module
Args:
image_path: A string, path to firmware image
Returns:
A boolean, True if install successfully, False if not
"""
if not os.path.isfile(image_path):
return False
if "CPLD" in self.name:
img_name = os.path.basename(image_path)
root, ext = os.path.splitext(img_name)
ext = ".vme" if ext == "" else ext
new_image_path = os.path.join("/tmp", (root.lower() + ext))
shutil.copy(image_path, new_image_path)
install_command = "ispvm %s" % new_image_path
elif self.name == "BIOS":
print("Not supported")
return False
return self.__run_command(install_command)

View File

@ -0,0 +1,47 @@
#!/usr/bin/env python
#############################################################################
# Celestica
#
# Device contains an implementation of SONiC Platform Base API and
# provides the device information
#
#############################################################################
try:
from sonic_platform_base.device_base import DeviceBase
except ImportError as e:
raise ImportError(str(e) + "- required module not found")
class Device(DeviceBase):
"""Platform-specific Device class"""
COMPONENTS_NAME = ["SMC_CPLD", "MMC_CPLD", "BIOS"]
def __init__(self, device_type, index=None):
self.device_type = device_type
self.index = index
DeviceBase.__init__(self)
def get_name(self):
"""
Retrieves the name of the device
Returns:
string: The name of the device
"""
device_name = {
"component": self.COMPONENTS_NAME[self.index]
}.get(self.device_type, None)
return device_name
def get_name_list(self):
"""
Retrieves list of the device name that available in this device type
Returns:
string: The list of device name
"""
name_list = {
"component": self.COMPONENTS_NAME
}.get(self.device_type, None)
return name_list

View File

@ -0,0 +1,233 @@
#!/usr/bin/env python
#############################################################################
# Celestica
#
# Watchdog contains an implementation of SONiC Platform Base API
#
#############################################################################
import ctypes
import fcntl
import os
import subprocess
import time
import array
try:
from sonic_platform_base.watchdog_base import WatchdogBase
except ImportError as e:
raise ImportError(str(e) + "- required module not found")
""" ioctl constants """
IO_WRITE = 0x40000000
IO_READ = 0x80000000
IO_READ_WRITE = 0xC0000000
IO_SIZE_INT = 0x00040000
IO_SIZE_40 = 0x00280000
IO_TYPE_WATCHDOG = ord('W') << 8
WDR_INT = IO_READ | IO_SIZE_INT | IO_TYPE_WATCHDOG
WDR_40 = IO_READ | IO_SIZE_40 | IO_TYPE_WATCHDOG
WDWR_INT = IO_READ_WRITE | IO_SIZE_INT | IO_TYPE_WATCHDOG
""" Watchdog ioctl commands """
WDIOC_GETSUPPORT = 0 | WDR_40
WDIOC_GETSTATUS = 1 | WDR_INT
WDIOC_GETBOOTSTATUS = 2 | WDR_INT
WDIOC_GETTEMP = 3 | WDR_INT
WDIOC_SETOPTIONS = 4 | WDR_INT
WDIOC_KEEPALIVE = 5 | WDR_INT
WDIOC_SETTIMEOUT = 6 | WDWR_INT
WDIOC_GETTIMEOUT = 7 | WDR_INT
WDIOC_SETPRETIMEOUT = 8 | WDWR_INT
WDIOC_GETPRETIMEOUT = 9 | WDR_INT
WDIOC_GETTIMELEFT = 10 | WDR_INT
""" Watchdog status constants """
WDIOS_DISABLECARD = 0x0001
WDIOS_ENABLECARD = 0x0002
WDT_COMMON_ERROR = -1
WD_MAIN_IDENTITY = "iTCO_wdt"
WDT_SYSFS_PATH = "/sys/class/watchdog/"
class Watchdog(WatchdogBase):
def __init__(self):
self.watchdog, self.wdt_main_dev_name = self._get_wdt()
self.status_path = "/sys/class/watchdog/%s/status" % self.wdt_main_dev_name
self.state_path = "/sys/class/watchdog/%s/state" % self.wdt_main_dev_name
self.timeout_path = "/sys/class/watchdog/%s/timeout" % self.wdt_main_dev_name
# Set default value
self._disable()
self.armed = False
self.timeout = self._gettimeout(self.timeout_path)
def _is_wd_main(self, dev):
"""
Checks watchdog identity
"""
identity = self._read_file(
"{}/{}/identity".format(WDT_SYSFS_PATH, dev))
return identity == WD_MAIN_IDENTITY
def _get_wdt(self):
"""
Retrieves watchdog device
"""
wdt_main_dev_list = [dev for dev in os.listdir(
"/dev/") if dev.startswith("watchdog") and self._is_wd_main(dev)]
if not wdt_main_dev_list:
return None
wdt_main_dev_name = wdt_main_dev_list[0]
watchdog_device_path = "/dev/{}".format(wdt_main_dev_name)
watchdog = os.open(watchdog_device_path, os.O_RDWR)
return watchdog, wdt_main_dev_name
def _read_file(self, file_path):
"""
Read text file
"""
try:
with open(file_path, "r") as fd:
txt = fd.read()
except IOError:
return WDT_COMMON_ERROR
return txt.strip()
def _enable(self):
"""
Turn on the watchdog timer
"""
req = array.array('h', [WDIOS_ENABLECARD])
fcntl.ioctl(self.watchdog, WDIOC_SETOPTIONS, req, False)
def _disable(self):
"""
Turn off the watchdog timer
"""
req = array.array('h', [WDIOS_DISABLECARD])
fcntl.ioctl(self.watchdog, WDIOC_SETOPTIONS, req, False)
def _keepalive(self):
"""
Keep alive watchdog timer
"""
fcntl.ioctl(self.watchdog, WDIOC_KEEPALIVE)
def _settimeout(self, seconds):
"""
Set watchdog timer timeout
@param seconds - timeout in seconds
@return is the actual set timeout
"""
req = array.array('I', [seconds])
fcntl.ioctl(self.watchdog, WDIOC_SETTIMEOUT, req, True)
return int(req[0])
def _gettimeout(self, timeout_path):
"""
Get watchdog timeout
@return watchdog timeout
"""
req = array.array('I', [0])
fcntl.ioctl(self.watchdog, WDIOC_GETTIMEOUT, req, True)
return int(req[0])
def _gettimeleft(self):
"""
Get time left before watchdog timer expires
@return time left in seconds
"""
req = array.array('I', [0])
fcntl.ioctl(self.watchdog, WDIOC_GETTIMELEFT, req, True)
return int(req[0])
#################################################################
def arm(self, seconds):
"""
Arm the hardware watchdog with a timeout of <seconds> seconds.
If the watchdog is currently armed, calling this function will
simply reset the timer to the provided value. If the underlying
hardware does not support the value provided in <seconds>, this
method should arm the watchdog with the *next greater* available
value.
Returns:
An integer specifying the *actual* number of seconds the watchdog
was armed with. On failure returns -1.
"""
ret = WDT_COMMON_ERROR
if seconds < 0:
return ret
try:
if self.timeout != seconds:
self.timeout = self._settimeout(seconds)
if self.armed:
self._keepalive()
else:
self._enable()
self.armed = True
ret = self.timeout
except IOError as e:
pass
return ret
def disarm(self):
"""
Disarm the hardware watchdog
Returns:
A boolean, True if watchdog is disarmed successfully, False if not
"""
disarmed = False
if self.is_armed():
try:
self._disable()
self.armed = False
disarmed = True
except IOError:
pass
return disarmed
def is_armed(self):
"""
Retrieves the armed state of the hardware watchdog.
Returns:
A boolean, True if watchdog is armed, False if not
"""
return self.armed
def get_remaining_time(self):
"""
If the watchdog is armed, retrieve the number of seconds remaining on
the watchdog timer
Returns:
An integer specifying the number of seconds remaining on thei
watchdog timer. If the watchdog is not armed, returns -1.
"""
timeleft = WDT_COMMON_ERROR
if self.armed:
try:
timeleft = self._gettimeleft()
except IOError:
pass
return timeleft
def __del__(self):
"""
Close watchdog
"""
os.close(self.watchdog)

View File

@ -18,21 +18,17 @@ try:
from sonic_platform_base.chassis_base import ChassisBase
from sonic_platform.fan import Fan
from sonic_platform.psu import Psu
from sonic_platform.device import Device
from sonic_platform.component import Component
from sonic_platform.watchdog import Watchdog
except ImportError as e:
raise ImportError(str(e) + "- required module not found")
BIOS_VERSION_PATH = "/sys/class/dmi/id/bios_version"
GETREG_PATH = "/sys/devices/platform/dx010_cpld/getreg"
CONFIG_DB_PATH = "/etc/sonic/config_db.json"
NUM_FAN = 5
NUM_PSU = 2
CPLD_ADDR_MAPPING = {
"CPLD1": "0x100",
"CPLD2": "0x200",
"CPLD3": "0x280",
"CPLD4": "0x300",
"CPLD5": "0x380"
}
RESET_REGISTER = "0x103"
REBOOT_CAUSE_PATH = "/host/reboot-cause/previous-reboot-cause.txt"
class Chassis(ChassisBase):
@ -47,16 +43,9 @@ class Chassis(ChassisBase):
psu = Psu(index)
self._psu_list.append(psu)
ChassisBase.__init__(self)
def __get_register_value(self, path, register):
cmd = "echo {1} > {0}; cat {0}".format(path, register)
p = subprocess.Popen(
cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
raw_data, err = p.communicate()
if err is not '':
return 'None'
else:
return raw_data.strip()
self._component_device = Device("component")
self._component_name_list = self._component_device.get_name_list()
self._watchdog = Watchdog()
def __read_config_db(self):
try:
@ -66,6 +55,14 @@ class Chassis(ChassisBase):
except IOError:
raise IOError("Unable to open config_db file !")
def __read_txt_file(self, file_path):
try:
with open(file_path, 'r') as fd:
data = fd.read()
return data.strip()
except IOError:
raise IOError("Unable to open %s file !" % file_path)
def get_base_mac(self):
"""
Retrieves the base MAC address for the chassis
@ -78,37 +75,64 @@ class Chassis(ChassisBase):
base_mac = self.config_data["DEVICE_METADATA"]["localhost"]["mac"]
return str(base_mac)
except KeyError:
raise KeyError("Base MAC not found")
return str(None)
def get_component_versions(self):
def get_firmware_version(self, component_name):
"""
Retrieves platform-specific hardware/firmware versions for chassis
componenets such as BIOS, CPLD, FPGA, etc.
Args:
type: A string, component name
Returns:
A string containing platform-specific component versions
"""
self.component = Component(component_name)
if component_name not in self._component_name_list:
return None
return self.component.get_firmware_version()
component_versions = dict()
def install_component_firmware(self, component_name, image_path):
"""
Install firmware to module
Args:
type: A string, component name.
image_path: A string, path to firmware image.
# Get BIOS version
try:
with open(BIOS_VERSION_PATH, 'r') as fd:
bios_version = fd.read()
except IOError:
raise IOError("Unable to open version file !")
Returns:
A boolean, True if install successfully, False if not
"""
self.component = Component(component_name)
if component_name not in self._component_name_list:
return False
return self.component.upgrade_firmware(image_path)
# Get CPLD version
cpld_version = dict()
for cpld_name in CPLD_ADDR_MAPPING:
try:
cpld_addr = CPLD_ADDR_MAPPING[cpld_name]
cpld_version_raw = self.__get_register_value(
GETREG_PATH, cpld_addr)
cpld_version_str = "{}.{}".format(int(cpld_version_raw[2], 16), int(
cpld_version_raw[3], 16)) if cpld_version_raw is not None else 'None'
cpld_version[cpld_name] = cpld_version_str
except Exception, e:
cpld_version[cpld_name] = 'None'
component_versions["CPLD"] = cpld_version
component_versions["BIOS"] = bios_version.strip()
return str(component_versions)
def get_reboot_cause(self):
"""
Retrieves the cause of the previous reboot
Returns:
A tuple (string, string) where the first element is a string
containing the cause of the previous reboot. This string must be
one of the predefined strings in this class. If the first string
is "REBOOT_CAUSE_HARDWARE_OTHER", the second string can be used
to pass a description of the reboot cause.
"""
self.component = Component("CPLD1")
description = 'None'
reboot_cause = self.REBOOT_CAUSE_HARDWARE_OTHER
hw_reboot_cause = self.component.get_register_value(RESET_REGISTER)
sw_reboot_cause = self.__read_txt_file(REBOOT_CAUSE_PATH)
if sw_reboot_cause != "Unexpected reboot":
reboot_cause = self.REBOOT_CAUSE_NON_HARDWARE
description = sw_reboot_cause
elif hw_reboot_cause == "0x11":
reboot_cause = self.REBOOT_CAUSE_POWER_LOSS
elif hw_reboot_cause == "0x22":
reboot_cause = self.REBOOT_CAUSE_WATCHDOG,
else:
reboot_cause = self.REBOOT_CAUSE_HARDWARE_OTHER
description = 'Unknown reason'
return (reboot_cause, description)

View File

@ -0,0 +1,129 @@
#!/usr/bin/env python
#############################################################################
# Celestica
#
# Component contains an implementation of SONiC Platform Base API and
# provides the components firmware management function
#
#############################################################################
import json
import os.path
import shutil
import shlex
import subprocess
try:
from sonic_platform_base.device_base import DeviceBase
except ImportError as e:
raise ImportError(str(e) + "- required module not found")
CPLD_ADDR_MAPPING = {
"CPLD1": "0x100",
"CPLD2": "0x200",
"CPLD3": "0x280",
"CPLD4": "0x300",
"CPLD5": "0x380"
}
GETREG_PATH = "/sys/devices/platform/dx010_cpld/getreg"
BIOS_VERSION_PATH = "/sys/class/dmi/id/bios_version"
class Component(DeviceBase):
"""Platform-specific Component class"""
DEVICE_TYPE = "component"
def __init__(self, component_name):
DeviceBase.__init__(self)
self.name = component_name.upper()
def __run_command(self, command):
# Run bash command and print output to stdout
try:
process = subprocess.Popen(
shlex.split(command), stdout=subprocess.PIPE)
while True:
output = process.stdout.readline()
if output == '' and process.poll() is not None:
break
rc = process.poll()
if rc != 0:
return False
except:
return False
return True
def __get_bios_version(self):
# Retrieves the BIOS firmware version
try:
with open(BIOS_VERSION_PATH, 'r') as fd:
bios_version = fd.read()
return bios_version.strip()
except Exception as e:
return None
def get_register_value(self, register):
# Retrieves the cpld register value
cmd = "echo {1} > {0}; cat {0}".format(GETREG_PATH, register)
p = subprocess.Popen(
cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
raw_data, err = p.communicate()
if err is not '':
return None
return raw_data.strip()
def __get_cpld_version(self):
# Retrieves the CPLD firmware version
cpld_version = dict()
for cpld_name in CPLD_ADDR_MAPPING:
try:
cpld_addr = CPLD_ADDR_MAPPING[cpld_name]
cpld_version_raw = self.get_register_value(cpld_addr)
cpld_version_str = "{}.{}".format(int(cpld_version_raw[2], 16), int(
cpld_version_raw[3], 16)) if cpld_version_raw is not None else 'None'
cpld_version[cpld_name] = cpld_version_str
except Exception as e:
cpld_version[cpld_name] = 'None'
return cpld_version
def get_firmware_version(self):
"""
Retrieves the firmware version of module
Returns:
string: The firmware versions of the module
"""
fw_version = None
if self.name == "BIOS":
fw_version = self.__get_bios_version()
elif "CPLD" in self.name:
cpld_version = self.__get_cpld_version()
fw_version = cpld_version.get(self.name)
return fw_version
def upgrade_firmware(self, image_path):
"""
Install firmware to module
Args:
image_path: A string, path to firmware image
Returns:
A boolean, True if install successfully, False if not
"""
if not os.path.isfile(image_path):
return False
if "CPLD" in self.name:
img_name = os.path.basename(image_path)
root, ext = os.path.splitext(img_name)
ext = ".vme" if ext == "" else ext
new_image_path = os.path.join("/tmp", (root.lower() + ext))
shutil.copy(image_path, new_image_path)
install_command = "ispvm %s" % new_image_path
elif self.name == "BIOS":
print("Not supported")
return False
return self.__run_command(install_command)

View File

@ -0,0 +1,47 @@
#!/usr/bin/env python
#############################################################################
# Celestica
#
# Device contains an implementation of SONiC Platform Base API and
# provides the device information
#
#############################################################################
try:
from sonic_platform_base.device_base import DeviceBase
except ImportError as e:
raise ImportError(str(e) + "- required module not found")
class Device(DeviceBase):
"""Platform-specific Device class"""
COMPONENTS_NAME = ["CPLD1", "CPLD2", "CPLD3", "CPLD4", "BIOS"]
def __init__(self, device_type, index=None):
self.device_type = device_type
self.index = index
DeviceBase.__init__(self)
def get_name(self):
"""
Retrieves the name of the device
Returns:
string: The name of the device
"""
device_name = {
"component": self.COMPONENTS_NAME[self.index]
}.get(self.device_type, None)
return device_name
def get_name_list(self):
"""
Retrieves list of the device name that available in this device type
Returns:
string: The list of device name
"""
name_list = {
"component": self.COMPONENTS_NAME
}.get(self.device_type, None)
return name_list

View File

@ -0,0 +1,233 @@
#!/usr/bin/env python
#############################################################################
# Celestica
#
# Watchdog contains an implementation of SONiC Platform Base API
#
#############################################################################
import ctypes
import fcntl
import os
import subprocess
import time
import array
try:
from sonic_platform_base.watchdog_base import WatchdogBase
except ImportError as e:
raise ImportError(str(e) + "- required module not found")
""" ioctl constants """
IO_WRITE = 0x40000000
IO_READ = 0x80000000
IO_READ_WRITE = 0xC0000000
IO_SIZE_INT = 0x00040000
IO_SIZE_40 = 0x00280000
IO_TYPE_WATCHDOG = ord('W') << 8
WDR_INT = IO_READ | IO_SIZE_INT | IO_TYPE_WATCHDOG
WDR_40 = IO_READ | IO_SIZE_40 | IO_TYPE_WATCHDOG
WDWR_INT = IO_READ_WRITE | IO_SIZE_INT | IO_TYPE_WATCHDOG
""" Watchdog ioctl commands """
WDIOC_GETSUPPORT = 0 | WDR_40
WDIOC_GETSTATUS = 1 | WDR_INT
WDIOC_GETBOOTSTATUS = 2 | WDR_INT
WDIOC_GETTEMP = 3 | WDR_INT
WDIOC_SETOPTIONS = 4 | WDR_INT
WDIOC_KEEPALIVE = 5 | WDR_INT
WDIOC_SETTIMEOUT = 6 | WDWR_INT
WDIOC_GETTIMEOUT = 7 | WDR_INT
WDIOC_SETPRETIMEOUT = 8 | WDWR_INT
WDIOC_GETPRETIMEOUT = 9 | WDR_INT
WDIOC_GETTIMELEFT = 10 | WDR_INT
""" Watchdog status constants """
WDIOS_DISABLECARD = 0x0001
WDIOS_ENABLECARD = 0x0002
WDT_COMMON_ERROR = -1
WD_MAIN_IDENTITY = "iTCO_wdt"
WDT_SYSFS_PATH = "/sys/class/watchdog/"
class Watchdog(WatchdogBase):
def __init__(self):
self.watchdog, self.wdt_main_dev_name = self._get_wdt()
self.status_path = "/sys/class/watchdog/%s/status" % self.wdt_main_dev_name
self.state_path = "/sys/class/watchdog/%s/state" % self.wdt_main_dev_name
self.timeout_path = "/sys/class/watchdog/%s/timeout" % self.wdt_main_dev_name
# Set default value
self._disable()
self.armed = False
self.timeout = self._gettimeout(self.timeout_path)
def _is_wd_main(self, dev):
"""
Checks watchdog identity
"""
identity = self._read_file(
"{}/{}/identity".format(WDT_SYSFS_PATH, dev))
return identity == WD_MAIN_IDENTITY
def _get_wdt(self):
"""
Retrieves watchdog device
"""
wdt_main_dev_list = [dev for dev in os.listdir(
"/dev/") if dev.startswith("watchdog") and self._is_wd_main(dev)]
if not wdt_main_dev_list:
return None
wdt_main_dev_name = wdt_main_dev_list[0]
watchdog_device_path = "/dev/{}".format(wdt_main_dev_name)
watchdog = os.open(watchdog_device_path, os.O_RDWR)
return watchdog, wdt_main_dev_name
def _read_file(self, file_path):
"""
Read text file
"""
try:
with open(file_path, "r") as fd:
txt = fd.read()
except IOError:
return WDT_COMMON_ERROR
return txt.strip()
def _enable(self):
"""
Turn on the watchdog timer
"""
req = array.array('h', [WDIOS_ENABLECARD])
fcntl.ioctl(self.watchdog, WDIOC_SETOPTIONS, req, False)
def _disable(self):
"""
Turn off the watchdog timer
"""
req = array.array('h', [WDIOS_DISABLECARD])
fcntl.ioctl(self.watchdog, WDIOC_SETOPTIONS, req, False)
def _keepalive(self):
"""
Keep alive watchdog timer
"""
fcntl.ioctl(self.watchdog, WDIOC_KEEPALIVE)
def _settimeout(self, seconds):
"""
Set watchdog timer timeout
@param seconds - timeout in seconds
@return is the actual set timeout
"""
req = array.array('I', [seconds])
fcntl.ioctl(self.watchdog, WDIOC_SETTIMEOUT, req, True)
return int(req[0])
def _gettimeout(self, timeout_path):
"""
Get watchdog timeout
@return watchdog timeout
"""
req = array.array('I', [0])
fcntl.ioctl(self.watchdog, WDIOC_GETTIMEOUT, req, True)
return int(req[0])
def _gettimeleft(self):
"""
Get time left before watchdog timer expires
@return time left in seconds
"""
req = array.array('I', [0])
fcntl.ioctl(self.watchdog, WDIOC_GETTIMELEFT, req, True)
return int(req[0])
#################################################################
def arm(self, seconds):
"""
Arm the hardware watchdog with a timeout of <seconds> seconds.
If the watchdog is currently armed, calling this function will
simply reset the timer to the provided value. If the underlying
hardware does not support the value provided in <seconds>, this
method should arm the watchdog with the *next greater* available
value.
Returns:
An integer specifying the *actual* number of seconds the watchdog
was armed with. On failure returns -1.
"""
ret = WDT_COMMON_ERROR
if seconds < 0:
return ret
try:
if self.timeout != seconds:
self.timeout = self._settimeout(seconds)
if self.armed:
self._keepalive()
else:
self._enable()
self.armed = True
ret = self.timeout
except IOError as e:
pass
return ret
def disarm(self):
"""
Disarm the hardware watchdog
Returns:
A boolean, True if watchdog is disarmed successfully, False if not
"""
disarmed = False
if self.is_armed():
try:
self._disable()
self.armed = False
disarmed = True
except IOError:
pass
return disarmed
def is_armed(self):
"""
Retrieves the armed state of the hardware watchdog.
Returns:
A boolean, True if watchdog is armed, False if not
"""
return self.armed
def get_remaining_time(self):
"""
If the watchdog is armed, retrieve the number of seconds remaining on
the watchdog timer
Returns:
An integer specifying the number of seconds remaining on thei
watchdog timer. If the watchdog is not armed, returns -1.
"""
timeleft = WDT_COMMON_ERROR
if self.armed:
try:
timeleft = self._gettimeleft()
except IOError:
pass
return timeleft
def __del__(self):
"""
Close watchdog
"""
os.close(self.watchdog)

View File

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

View File

@ -0,0 +1,47 @@
{%- set default_cable = '40m' %}
{%- 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": "27678784",
"type": "ingress",
"mode": "dynamic",
"xoff": "4194112"
},
"egress_lossy_pool": {
"size": "26045524",
"type": "egress",
"mode": "dynamic"
},
"egress_lossless_pool": {
"size": "32786432",
"type": "egress",
"mode": "static"
}
},
"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":"1518",
"static_th":"3995680"
},
"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 1248 2288 35776 -3 2288
25000 5m 1248 2288 53248 -3 2288
40000 5m 1248 2288 66560 -3 2288
50000 5m 1248 2288 90272 -3 2288
100000 5m 1248 2288 165568 -3 2288
10000 40m 1248 2288 37024 -3 2288
25000 40m 1248 2288 53248 -3 2288
40000 40m 1248 2288 71552 -3 2288
50000 40m 1248 2288 96096 -3 2288
100000 40m 1248 2288 177632 -3 2288
10000 300m 1248 2288 46176 -3 2288
25000 300m 1248 2288 79040 -3 2288
40000 300m 1248 2288 108160 -3 2288
50000 300m 1248 2288 141856 -3 2288
100000 300m 1248 2288 268736 -3 2288

View File

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

View File

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

View File

@ -0,0 +1 @@
SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/td3-s5232f-32x100G.config.bcm

View File

@ -0,0 +1,544 @@
os=unix
core_clock_frequency=1525
dpp_clock_ratio=2:3
parity_enable=1
parity_correction=1
tdma_intr_enable=1
schan_intr_enable=0
tdma_intr_enable=1
miim_intr_enable=1
stat_if_parity_enable=1
port_flex_enable=1
port_flex_enable_66=0
port_flex_enable_130=0
phy_an_c73=3
phy_an_c73_66=0
phy_an_c73_130=0
module_64ports=0
table_dma_enable=1
tdma_timeout_usec=5000000
mmu_lossless=0
pdma_descriptor_prefetch_enable=1
pktdma_poll_mode_channel_bitmap=1
l2xmsg_mode=1
l2xmsg_hostbuf_size=8192
ipv6_lpm_128b_enable=1
max_vp_lags=0
l3_alpm_enable=2
l2_mem_entries=32768
l3_mem_entries=16384
l3_max_ecmp_mode=1
bcm_tunnel_term_compatible_mode=1
ifp_inports_support_enable=1
mmu_init_config="MSFT-TD3-Tier1"
stable_size=0x5500000
oversubscribe_mode=1
pbmp_oversubscribe=0x6fffffffffffffffdfffffffffffffffe
pbmp_xport_xe=0x6fffffffffffffffdfffffffffffffffe
portmap_1.0=1:100
portmap_5.0=5:100
portmap_9.0=9:100
portmap_13.0=13:100
portmap_17.0=17:100
portmap_21.0=21:100
portmap_25.0=25:100
portmap_29.0=29:100
portmap_33.0=33:100
portmap_37.0=37:100
portmap_41.0=41:100
portmap_45.0=45:100
portmap_49.0=49:100
portmap_53.0=53:100
portmap_57.0=57:100
portmap_61.0=61:100
portmap_67.0=65:100
portmap_71.0=69:100
portmap_75.0=73:100
portmap_79.0=77:100
portmap_83.0=81:100
portmap_87.0=85:100
portmap_91.0=89:100
portmap_95.0=93:100
portmap_99.0=97:100
portmap_103.0=101:100
portmap_107.0=105:100
portmap_111.0=109:100
portmap_115.0=113:100
portmap_119.0=117:100
portmap_123.0=121:100
portmap_127.0=125:100
portmap_130.0=128:10:m
portmap_66.0=129:10:m
phy_chain_tx_lane_map_physical{1.0}=0x0132
phy_chain_rx_lane_map_physical{1.0}=0x3210
phy_chain_tx_lane_map_physical{5.0}=0x2301
phy_chain_rx_lane_map_physical{5.0}=0x2031
phy_chain_tx_lane_map_physical{9.0}=0x0132
phy_chain_rx_lane_map_physical{9.0}=0x3210
phy_chain_tx_lane_map_physical{13.0}=0x3201
phy_chain_rx_lane_map_physical{13.0}=0x2031
phy_chain_tx_lane_map_physical{17.0}=0x0123
phy_chain_rx_lane_map_physical{17.0}=0x3210
phy_chain_tx_lane_map_physical{21.0}=0x2301
phy_chain_rx_lane_map_physical{21.0}=0x2031
phy_chain_tx_lane_map_physical{25.0}=0x0123
phy_chain_rx_lane_map_physical{25.0}=0x3210
phy_chain_tx_lane_map_physical{29.0}=0x3201
phy_chain_rx_lane_map_physical{29.0}=0x2031
phy_chain_tx_lane_map_physical{33.0}=0x0213
phy_chain_rx_lane_map_physical{33.0}=0x1302
phy_chain_tx_lane_map_physical{37.0}=0x1302
phy_chain_rx_lane_map_physical{37.0}=0x2031
phy_chain_tx_lane_map_physical{41.0}=0x0231
phy_chain_rx_lane_map_physical{41.0}=0x3120
phy_chain_tx_lane_map_physical{45.0}=0x1302
phy_chain_rx_lane_map_physical{45.0}=0x2031
phy_chain_tx_lane_map_physical{49.0}=0x2103
phy_chain_rx_lane_map_physical{49.0}=0x3120
phy_chain_tx_lane_map_physical{53.0}=0x2301
phy_chain_rx_lane_map_physical{53.0}=0x2031
phy_chain_tx_lane_map_physical{57.0}=0x0123
phy_chain_rx_lane_map_physical{57.0}=0x2301
phy_chain_tx_lane_map_physical{61.0}=0x3210
phy_chain_rx_lane_map_physical{61.0}=0x1032
phy_chain_tx_lane_map_physical{65.0}=0x3210
phy_chain_rx_lane_map_physical{65.0}=0x1023
phy_chain_tx_lane_map_physical{69.0}=0x0123
phy_chain_rx_lane_map_physical{69.0}=0x1302
phy_chain_tx_lane_map_physical{73.0}=0x2301
phy_chain_rx_lane_map_physical{73.0}=0x1032
phy_chain_tx_lane_map_physical{77.0}=0x2013
phy_chain_rx_lane_map_physical{77.0}=0x3120
phy_chain_tx_lane_map_physical{81.0}=0x1302
phy_chain_rx_lane_map_physical{81.0}=0x2031
phy_chain_tx_lane_map_physical{85.0}=0x0123
phy_chain_rx_lane_map_physical{85.0}=0x2130
phy_chain_tx_lane_map_physical{89.0}=0x2301
phy_chain_rx_lane_map_physical{89.0}=0x2031
phy_chain_tx_lane_map_physical{93.0}=0x0312
phy_chain_rx_lane_map_physical{93.0}=0x2310
phy_chain_tx_lane_map_physical{97.0}=0x2301
phy_chain_rx_lane_map_physical{97.0}=0x1032
phy_chain_tx_lane_map_physical{101.0}=0x0123
phy_chain_rx_lane_map_physical{101.0}=0x3210
phy_chain_tx_lane_map_physical{105.0}=0x2301
phy_chain_rx_lane_map_physical{105.0}=0x1032
phy_chain_tx_lane_map_physical{109.0}=0x0123
phy_chain_rx_lane_map_physical{109.0}=0x3210
phy_chain_tx_lane_map_physical{113.0}=0x2301
phy_chain_rx_lane_map_physical{113.0}=0x2031
phy_chain_tx_lane_map_physical{117.0}=0x0123
phy_chain_rx_lane_map_physical{117.0}=0x3210
phy_chain_tx_lane_map_physical{121.0}=0x2301
phy_chain_rx_lane_map_physical{121.0}=0x1032
phy_chain_tx_lane_map_physical{125.0}=0x0123
phy_chain_rx_lane_map_physical{125.0}=0x3210
phy_chain_tx_lane_map_physical{129.0}=0x3210
phy_chain_rx_lane_map_physical{129.0}=0x0231
phy_chain_tx_lane_map_physical{128.0}=0x3210
phy_chain_rx_lane_map_physical{128.0}=0x0231
phy_chain_tx_polarity_flip_physical{1.0}=0x0
phy_chain_rx_polarity_flip_physical{1.0}=0x0
phy_chain_tx_polarity_flip_physical{2.0}=0x0
phy_chain_rx_polarity_flip_physical{2.0}=0x1
phy_chain_tx_polarity_flip_physical{3.0}=0x0
phy_chain_rx_polarity_flip_physical{3.0}=0x0
phy_chain_tx_polarity_flip_physical{4.0}=0x1
phy_chain_rx_polarity_flip_physical{4.0}=0x1
phy_chain_tx_polarity_flip_physical{5.0}=0x0
phy_chain_rx_polarity_flip_physical{5.0}=0x0
phy_chain_tx_polarity_flip_physical{6.0}=0x1
phy_chain_rx_polarity_flip_physical{6.0}=0x1
phy_chain_tx_polarity_flip_physical{7.0}=0x0
phy_chain_rx_polarity_flip_physical{7.0}=0x1
phy_chain_tx_polarity_flip_physical{8.0}=0x1
phy_chain_rx_polarity_flip_physical{8.0}=0x1
phy_chain_tx_polarity_flip_physical{9.0}=0x0
phy_chain_rx_polarity_flip_physical{9.0}=0x0
phy_chain_tx_polarity_flip_physical{10.0}=0x0
phy_chain_rx_polarity_flip_physical{10.0}=0x1
phy_chain_tx_polarity_flip_physical{11.0}=0x0
phy_chain_rx_polarity_flip_physical{11.0}=0x0
phy_chain_tx_polarity_flip_physical{12.0}=0x1
phy_chain_rx_polarity_flip_physical{12.0}=0x1
phy_chain_tx_polarity_flip_physical{13.0}=0x0
phy_chain_rx_polarity_flip_physical{13.0}=0x0
phy_chain_tx_polarity_flip_physical{14.0}=0x1
phy_chain_rx_polarity_flip_physical{14.0}=0x1
phy_chain_tx_polarity_flip_physical{15.0}=0x0
phy_chain_rx_polarity_flip_physical{15.0}=0x1
phy_chain_tx_polarity_flip_physical{16.0}=0x0
phy_chain_rx_polarity_flip_physical{16.0}=0x1
phy_chain_tx_polarity_flip_physical{17.0}=0x0
phy_chain_rx_polarity_flip_physical{17.0}=0x0
phy_chain_tx_polarity_flip_physical{18.0}=0x1
phy_chain_rx_polarity_flip_physical{18.0}=0x1
phy_chain_tx_polarity_flip_physical{19.0}=0x0
phy_chain_rx_polarity_flip_physical{19.0}=0x0
phy_chain_tx_polarity_flip_physical{20.0}=0x1
phy_chain_rx_polarity_flip_physical{20.0}=0x1
phy_chain_tx_polarity_flip_physical{21.0}=0x0
phy_chain_rx_polarity_flip_physical{21.0}=0x0
phy_chain_tx_polarity_flip_physical{22.0}=0x1
phy_chain_rx_polarity_flip_physical{22.0}=0x1
phy_chain_tx_polarity_flip_physical{23.0}=0x0
phy_chain_rx_polarity_flip_physical{23.0}=0x1
phy_chain_tx_polarity_flip_physical{24.0}=0x1
phy_chain_rx_polarity_flip_physical{24.0}=0x1
phy_chain_tx_polarity_flip_physical{25.0}=0x0
phy_chain_rx_polarity_flip_physical{25.0}=0x1
phy_chain_tx_polarity_flip_physical{26.0}=0x1
phy_chain_rx_polarity_flip_physical{26.0}=0x0
phy_chain_tx_polarity_flip_physical{27.0}=0x0
phy_chain_rx_polarity_flip_physical{27.0}=0x1
phy_chain_tx_polarity_flip_physical{28.0}=0x1
phy_chain_rx_polarity_flip_physical{28.0}=0x0
phy_chain_tx_polarity_flip_physical{29.0}=0x1
phy_chain_rx_polarity_flip_physical{29.0}=0x1
phy_chain_tx_polarity_flip_physical{30.0}=0x1
phy_chain_rx_polarity_flip_physical{30.0}=0x0
phy_chain_tx_polarity_flip_physical{31.0}=0x0
phy_chain_rx_polarity_flip_physical{31.0}=0x0
phy_chain_tx_polarity_flip_physical{32.0}=0x0
phy_chain_rx_polarity_flip_physical{32.0}=0x0
phy_chain_tx_polarity_flip_physical{33.0}=0x1
phy_chain_rx_polarity_flip_physical{33.0}=0x1
phy_chain_tx_polarity_flip_physical{34.0}=0x0
phy_chain_rx_polarity_flip_physical{34.0}=0x0
phy_chain_tx_polarity_flip_physical{35.0}=0x0
phy_chain_rx_polarity_flip_physical{35.0}=0x0
phy_chain_tx_polarity_flip_physical{36.0}=0x1
phy_chain_rx_polarity_flip_physical{36.0}=0x0
phy_chain_tx_polarity_flip_physical{37.0}=0x1
phy_chain_rx_polarity_flip_physical{37.0}=0x1
phy_chain_tx_polarity_flip_physical{38.0}=0x1
phy_chain_rx_polarity_flip_physical{38.0}=0x0
phy_chain_tx_polarity_flip_physical{39.0}=0x1
phy_chain_rx_polarity_flip_physical{39.0}=0x0
phy_chain_tx_polarity_flip_physical{40.0}=0x0
phy_chain_rx_polarity_flip_physical{40.0}=0x1
phy_chain_tx_polarity_flip_physical{41.0}=0x1
phy_chain_rx_polarity_flip_physical{41.0}=0x1
phy_chain_tx_polarity_flip_physical{42.0}=0x0
phy_chain_rx_polarity_flip_physical{42.0}=0x1
phy_chain_tx_polarity_flip_physical{43.0}=0x1
phy_chain_rx_polarity_flip_physical{43.0}=0x0
phy_chain_tx_polarity_flip_physical{44.0}=0x1
phy_chain_rx_polarity_flip_physical{44.0}=0x1
phy_chain_tx_polarity_flip_physical{45.0}=0x1
phy_chain_rx_polarity_flip_physical{45.0}=0x0
phy_chain_tx_polarity_flip_physical{46.0}=0x1
phy_chain_rx_polarity_flip_physical{46.0}=0x0
phy_chain_tx_polarity_flip_physical{47.0}=0x1
phy_chain_rx_polarity_flip_physical{47.0}=0x1
phy_chain_tx_polarity_flip_physical{48.0}=0x0
phy_chain_rx_polarity_flip_physical{48.0}=0x1
phy_chain_tx_polarity_flip_physical{49.0}=0x1
phy_chain_rx_polarity_flip_physical{49.0}=0x0
phy_chain_tx_polarity_flip_physical{50.0}=0x1
phy_chain_rx_polarity_flip_physical{50.0}=0x0
phy_chain_tx_polarity_flip_physical{51.0}=0x0
phy_chain_rx_polarity_flip_physical{51.0}=0x1
phy_chain_tx_polarity_flip_physical{52.0}=0x1
phy_chain_rx_polarity_flip_physical{52.0}=0x1
phy_chain_tx_polarity_flip_physical{53.0}=0x0
phy_chain_rx_polarity_flip_physical{53.0}=0x0
phy_chain_tx_polarity_flip_physical{54.0}=0x1
phy_chain_rx_polarity_flip_physical{54.0}=0x1
phy_chain_tx_polarity_flip_physical{55.0}=0x0
phy_chain_rx_polarity_flip_physical{55.0}=0x1
phy_chain_tx_polarity_flip_physical{56.0}=0x1
phy_chain_rx_polarity_flip_physical{56.0}=0x1
phy_chain_tx_polarity_flip_physical{57.0}=0x1
phy_chain_rx_polarity_flip_physical{57.0}=0x0
phy_chain_tx_polarity_flip_physical{58.0}=0x1
phy_chain_rx_polarity_flip_physical{58.0}=0x1
phy_chain_tx_polarity_flip_physical{59.0}=0x0
phy_chain_rx_polarity_flip_physical{59.0}=0x0
phy_chain_tx_polarity_flip_physical{60.0}=0x1
phy_chain_rx_polarity_flip_physical{60.0}=0x1
phy_chain_tx_polarity_flip_physical{61.0}=0x0
phy_chain_rx_polarity_flip_physical{61.0}=0x1
phy_chain_tx_polarity_flip_physical{62.0}=0x1
phy_chain_rx_polarity_flip_physical{62.0}=0x0
phy_chain_tx_polarity_flip_physical{63.0}=0x0
phy_chain_rx_polarity_flip_physical{63.0}=0x1
phy_chain_tx_polarity_flip_physical{64.0}=0x0
phy_chain_rx_polarity_flip_physical{64.0}=0x0
phy_chain_tx_polarity_flip_physical{65.0}=0x1
phy_chain_rx_polarity_flip_physical{65.0}=0x0
phy_chain_tx_polarity_flip_physical{66.0}=0x0
phy_chain_rx_polarity_flip_physical{66.0}=0x0
phy_chain_tx_polarity_flip_physical{67.0}=0x1
phy_chain_rx_polarity_flip_physical{67.0}=0x1
phy_chain_tx_polarity_flip_physical{68.0}=0x0
phy_chain_rx_polarity_flip_physical{68.0}=0x0
phy_chain_tx_polarity_flip_physical{69.0}=0x1
phy_chain_rx_polarity_flip_physical{69.0}=0x1
phy_chain_tx_polarity_flip_physical{70.0}=0x0
phy_chain_rx_polarity_flip_physical{70.0}=0x0
phy_chain_tx_polarity_flip_physical{71.0}=0x1
phy_chain_rx_polarity_flip_physical{71.0}=0x0
phy_chain_tx_polarity_flip_physical{72.0}=0x0
phy_chain_rx_polarity_flip_physical{72.0}=0x0
phy_chain_tx_polarity_flip_physical{73.0}=0x0
phy_chain_rx_polarity_flip_physical{73.0}=0x1
phy_chain_tx_polarity_flip_physical{74.0}=0x1
phy_chain_rx_polarity_flip_physical{74.0}=0x0
phy_chain_tx_polarity_flip_physical{75.0}=0x0
phy_chain_rx_polarity_flip_physical{75.0}=0x1
phy_chain_tx_polarity_flip_physical{76.0}=0x1
phy_chain_rx_polarity_flip_physical{76.0}=0x0
phy_chain_tx_polarity_flip_physical{77.0}=0x0
phy_chain_rx_polarity_flip_physical{77.0}=0x0
phy_chain_tx_polarity_flip_physical{78.0}=0x0
phy_chain_rx_polarity_flip_physical{78.0}=0x0
phy_chain_tx_polarity_flip_physical{79.0}=0x1
phy_chain_rx_polarity_flip_physical{79.0}=0x1
phy_chain_tx_polarity_flip_physical{80.0}=0x1
phy_chain_rx_polarity_flip_physical{80.0}=0x1
phy_chain_tx_polarity_flip_physical{81.0}=0x0
phy_chain_rx_polarity_flip_physical{81.0}=0x0
phy_chain_tx_polarity_flip_physical{82.0}=0x0
phy_chain_rx_polarity_flip_physical{82.0}=0x0
phy_chain_tx_polarity_flip_physical{83.0}=0x1
phy_chain_rx_polarity_flip_physical{83.0}=0x1
phy_chain_tx_polarity_flip_physical{84.0}=0x1
phy_chain_rx_polarity_flip_physical{84.0}=0x0
phy_chain_tx_polarity_flip_physical{85.0}=0x1
phy_chain_rx_polarity_flip_physical{85.0}=0x1
phy_chain_tx_polarity_flip_physical{86.0}=0x0
phy_chain_rx_polarity_flip_physical{86.0}=0x1
phy_chain_tx_polarity_flip_physical{87.0}=0x1
phy_chain_rx_polarity_flip_physical{87.0}=0x0
phy_chain_tx_polarity_flip_physical{88.0}=0x0
phy_chain_rx_polarity_flip_physical{88.0}=0x0
phy_chain_tx_polarity_flip_physical{89.0}=0x1
phy_chain_rx_polarity_flip_physical{89.0}=0x0
phy_chain_tx_polarity_flip_physical{90.0}=0x0
phy_chain_rx_polarity_flip_physical{90.0}=0x0
phy_chain_tx_polarity_flip_physical{91.0}=0x1
phy_chain_rx_polarity_flip_physical{91.0}=0x1
phy_chain_tx_polarity_flip_physical{92.0}=0x0
phy_chain_rx_polarity_flip_physical{92.0}=0x1
phy_chain_tx_polarity_flip_physical{93.0}=0x1
phy_chain_rx_polarity_flip_physical{93.0}=0x1
phy_chain_tx_polarity_flip_physical{94.0}=0x1
phy_chain_rx_polarity_flip_physical{94.0}=0x1
phy_chain_tx_polarity_flip_physical{95.0}=0x0
phy_chain_rx_polarity_flip_physical{95.0}=0x0
phy_chain_tx_polarity_flip_physical{96.0}=0x0
phy_chain_rx_polarity_flip_physical{96.0}=0x1
phy_chain_tx_polarity_flip_physical{97.0}=0x1
phy_chain_rx_polarity_flip_physical{97.0}=0x1
phy_chain_tx_polarity_flip_physical{98.0}=0x0
phy_chain_rx_polarity_flip_physical{98.0}=0x0
phy_chain_tx_polarity_flip_physical{99.0}=0x1
phy_chain_rx_polarity_flip_physical{99.0}=0x1
phy_chain_tx_polarity_flip_physical{100.0}=0x0
phy_chain_rx_polarity_flip_physical{100.0}=0x0
phy_chain_tx_polarity_flip_physical{101.0}=0x1
phy_chain_rx_polarity_flip_physical{101.0}=0x0
phy_chain_tx_polarity_flip_physical{102.0}=0x0
phy_chain_rx_polarity_flip_physical{102.0}=0x1
phy_chain_tx_polarity_flip_physical{103.0}=0x1
phy_chain_rx_polarity_flip_physical{103.0}=0x0
phy_chain_tx_polarity_flip_physical{104.0}=0x0
phy_chain_rx_polarity_flip_physical{104.0}=0x0
phy_chain_tx_polarity_flip_physical{105.0}=0x1
phy_chain_rx_polarity_flip_physical{105.0}=0x0
phy_chain_tx_polarity_flip_physical{106.0}=0x0
phy_chain_rx_polarity_flip_physical{106.0}=0x1
phy_chain_tx_polarity_flip_physical{107.0}=0x1
phy_chain_rx_polarity_flip_physical{107.0}=0x0
phy_chain_tx_polarity_flip_physical{108.0}=0x0
phy_chain_rx_polarity_flip_physical{108.0}=0x1
phy_chain_tx_polarity_flip_physical{109.0}=0x1
phy_chain_rx_polarity_flip_physical{109.0}=0x1
phy_chain_tx_polarity_flip_physical{110.0}=0x0
phy_chain_rx_polarity_flip_physical{110.0}=0x0
phy_chain_tx_polarity_flip_physical{111.0}=0x1
phy_chain_rx_polarity_flip_physical{111.0}=0x1
phy_chain_tx_polarity_flip_physical{112.0}=0x0
phy_chain_rx_polarity_flip_physical{112.0}=0x0
phy_chain_tx_polarity_flip_physical{113.0}=0x1
phy_chain_rx_polarity_flip_physical{113.0}=0x1
phy_chain_tx_polarity_flip_physical{114.0}=0x0
phy_chain_rx_polarity_flip_physical{114.0}=0x0
phy_chain_tx_polarity_flip_physical{115.0}=0x1
phy_chain_rx_polarity_flip_physical{115.0}=0x0
phy_chain_tx_polarity_flip_physical{116.0}=0x0
phy_chain_rx_polarity_flip_physical{116.0}=0x0
phy_chain_tx_polarity_flip_physical{117.0}=0x1
phy_chain_rx_polarity_flip_physical{117.0}=0x1
phy_chain_tx_polarity_flip_physical{118.0}=0x0
phy_chain_rx_polarity_flip_physical{118.0}=0x0
phy_chain_tx_polarity_flip_physical{119.0}=0x1
phy_chain_rx_polarity_flip_physical{119.0}=0x1
phy_chain_tx_polarity_flip_physical{120.0}=0x0
phy_chain_rx_polarity_flip_physical{120.0}=0x0
phy_chain_tx_polarity_flip_physical{121.0}=0x1
phy_chain_rx_polarity_flip_physical{121.0}=0x0
phy_chain_tx_polarity_flip_physical{122.0}=0x0
phy_chain_rx_polarity_flip_physical{122.0}=0x1
phy_chain_tx_polarity_flip_physical{123.0}=0x1
phy_chain_rx_polarity_flip_physical{123.0}=0x0
phy_chain_tx_polarity_flip_physical{124.0}=0x0
phy_chain_rx_polarity_flip_physical{124.0}=0x1
phy_chain_tx_polarity_flip_physical{125.0}=0x1
phy_chain_rx_polarity_flip_physical{125.0}=0x1
phy_chain_tx_polarity_flip_physical{126.0}=0x0
phy_chain_rx_polarity_flip_physical{126.0}=0x0
phy_chain_tx_polarity_flip_physical{127.0}=0x1
phy_chain_rx_polarity_flip_physical{127.0}=0x1
phy_chain_tx_polarity_flip_physical{128.0}=0x0
phy_chain_rx_polarity_flip_physical{128.0}=0x0
phy_chain_tx_polarity_flip_physical{129.0}=0x1
phy_chain_rx_polarity_flip_physical{129.0}=0x0
phy_chain_tx_polarity_flip_physical{130.0}=0x0
phy_chain_rx_polarity_flip_physical{130.0}=0x0
phy_chain_tx_polarity_flip_physical{131.0}=0x1
phy_chain_rx_polarity_flip_physical{131.0}=0x1
phy_chain_tx_polarity_flip_physical{132.0}=0x0
phy_chain_rx_polarity_flip_physical{132.0}=0x1
dport_map_enable=1
dport_map_port_1=1
dport_map_port_2=2
dport_map_port_3=3
dport_map_port_4=4
dport_map_port_5=5
dport_map_port_6=6
dport_map_port_7=7
dport_map_port_8=8
dport_map_port_9=9
dport_map_port_10=10
dport_map_port_11=11
dport_map_port_12=12
dport_map_port_13=13
dport_map_port_14=14
dport_map_port_15=15
dport_map_port_16=16
dport_map_port_17=17
dport_map_port_18=18
dport_map_port_19=19
dport_map_port_20=20
dport_map_port_21=21
dport_map_port_22=22
dport_map_port_23=23
dport_map_port_24=24
dport_map_port_25=25
dport_map_port_26=26
dport_map_port_27=27
dport_map_port_28=28
dport_map_port_29=29
dport_map_port_30=20
dport_map_port_31=31
dport_map_port_32=32
dport_map_port_33=33
dport_map_port_34=34
dport_map_port_35=35
dport_map_port_36=36
dport_map_port_37=37
dport_map_port_38=38
dport_map_port_39=39
dport_map_port_40=40
dport_map_port_41=41
dport_map_port_42=42
dport_map_port_43=44
dport_map_port_45=45
dport_map_port_46=46
dport_map_port_47=47
dport_map_port_48=48
dport_map_port_49=49
dport_map_port_50=50
dport_map_port_51=51
dport_map_port_52=52
dport_map_port_53=53
dport_map_port_54=54
dport_map_port_55=55
dport_map_port_56=56
dport_map_port_57=57
dport_map_port_58=58
dport_map_port_59=59
dport_map_port_60=60
dport_map_port_61=61
dport_map_port_62=62
dport_map_port_63=63
dport_map_port_64=64
dport_map_port_67=65
dport_map_port_68=66
dport_map_port_69=67
dport_map_port_70=68
dport_map_port_71=69
dport_map_port_72=70
dport_map_port_73=71
dport_map_port_74=72
dport_map_port_75=73
dport_map_port_76=74
dport_map_port_77=75
dport_map_port_78=76
dport_map_port_79=77
dport_map_port_80=78
dport_map_port_81=79
dport_map_port_82=80
dport_map_port_83=81
dport_map_port_84=82
dport_map_port_85=83
dport_map_port_86=84
dport_map_port_87=85
dport_map_port_88=86
dport_map_port_89=87
dport_map_port_90=88
dport_map_port_91=89
dport_map_port_92=90
dport_map_port_93=91
dport_map_port_94=92
dport_map_port_95=93
dport_map_port_96=94
dport_map_port_97=95
dport_map_port_98=96
dport_map_port_99=97
dport_map_port_100=98
dport_map_port_101=99
dport_map_port_102=100
dport_map_port_103=101
dport_map_port_104=102
dport_map_port_105=103
dport_map_port_106=104
dport_map_port_107=105
dport_map_port_108=106
dport_map_port_109=107
dport_map_port_110=108
dport_map_port_111=109
dport_map_port_112=110
dport_map_port_113=111
dport_map_port_114=112
dport_map_port_115=113
dport_map_port_116=114
dport_map_port_117=115
dport_map_port_118=116
dport_map_port_119=117
dport_map_port_120=118
dport_map_port_121=119
dport_map_port_122=120
dport_map_port_123=121
dport_map_port_124=122
dport_map_port_125=123
dport_map_port_126=124
dport_map_port_127=125
dport_map_port_129=126
dport_map_port_66=127
dport_map_port_130=128

View File

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

View File

@ -0,0 +1,53 @@
{%- set default_cable = '40m' %}
{%- 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": "33554432",
"type": "ingress",
"mode": "dynamic"
},
"egress_lossy_pool": {
"size": "32786432",
"type": "egress",
"mode": "dynamic"
}
},
"BUFFER_PROFILE": {
"ingress_lossy_profile": {
"pool":"[BUFFER_POOL|ingress_lossless_pool]",
"size":"0",
"dynamic_th":"3"
},
"egress_lossy_profile": {
"pool":"[BUFFER_POOL|egress_lossy_pool]",
"size":"1518",
"dynamic_th":"3"
}
},
{%- endmacro %}
{%- macro generate_pg_profils(port_names_active) %}
"BUFFER_PG": {
"{{ port_names_active }}|0": {
"profile" : "[BUFFER_PROFILE|ingress_lossy_profile]"
}
},
{%- endmacro %}
{% macro generate_queue_buffers(port_names_active) %}
"BUFFER_QUEUE": {
"{{ port_names_active }}|0-7": {
"profile" : "[BUFFER_PROFILE|egress_lossy_profile]"
}
}
{% endmacro %}

View File

@ -0,0 +1,17 @@
# PG lossless profiles.
# speed cable size xon xoff threshold xon_offset
10000 5m 1248 2288 35776 -3 2288
25000 5m 1248 2288 53248 -3 2288
40000 5m 1248 2288 66560 -3 2288
50000 5m 1248 2288 90272 -3 2288
100000 5m 1248 2288 165568 -3 2288
10000 40m 1248 2288 37024 -3 2288
25000 40m 1248 2288 53248 -3 2288
40000 40m 1248 2288 71552 -3 2288
50000 40m 1248 2288 96096 -3 2288
100000 40m 1248 2288 177632 -3 2288
10000 300m 1248 2288 46176 -3 2288
25000 300m 1248 2288 79040 -3 2288
40000 300m 1248 2288 108160 -3 2288
50000 300m 1248 2288 141856 -3 2288
100000 300m 1248 2288 268736 -3 2288

View File

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

View File

@ -0,0 +1,234 @@
{%- set PORT_ALL = [] %}
{%- for port in PORT %}
{%- if PORT_ALL.append(port) %}{% endif %}
{%- endfor %}
{%- if PORT_ALL | sort_by_port_index %}{% endif %}
{%- set port_names_list_all = [] %}
{%- for port in PORT_ALL %}
{%- if port_names_list_all.append(port) %}{% endif %}
{%- endfor %}
{%- set port_names_all = port_names_list_all | join(',') -%}
{%- set PORT_ACTIVE = [] %}
{%- if DEVICE_NEIGHBOR is not defined %}
{%- set PORT_ACTIVE = PORT_ALL %}
{%- else %}
{%- for port in DEVICE_NEIGHBOR.keys() %}
{%- if PORT_ACTIVE.append(port) %}{%- endif %}
{%- endfor %}
{%- endif %}
{%- if PORT_ACTIVE | sort_by_port_index %}{% endif %}
{%- set port_names_list_active = [] %}
{%- for port in PORT_ACTIVE %}
{%- if port_names_list_active.append(port) %}{%- endif %}
{%- endfor %}
{%- set port_names_active = port_names_list_active | join(',') -%}
{%- set pfc_to_pg_map_supported_asics = ['mellanox', 'barefoot', 'marvell'] -%}
{
{% if generate_tc_to_pg_map is defined %}
{{- generate_tc_to_pg_map() }}
{% else %}
"TC_TO_PRIORITY_GROUP_MAP": {
"AZURE": {
"0": "0",
"1": "0",
"2": "0",
"3": "0",
"4": "0",
"5": "0",
"6": "0",
"7": "0"
}
},
{% endif %}
"MAP_PFC_PRIORITY_TO_QUEUE": {
"AZURE": {
"0": "0",
"1": "1",
"2": "2",
"3": "3",
"4": "4",
"5": "5",
"6": "6",
"7": "7"
}
},
"TC_TO_QUEUE_MAP": {
"AZURE": {
"0": "0",
"1": "1",
"2": "2",
"3": "3",
"4": "4",
"5": "5",
"6": "6",
"7": "7"
}
},
"DSCP_TO_TC_MAP": {
"AZURE": {
"0" : "0",
"1" : "0",
"2" : "0",
"3" : "0",
"4" : "0",
"5" : "0",
"6" : "0",
"7" : "0",
"8" : "0",
"9" : "0",
"10": "0",
"11": "0",
"12": "0",
"13": "0",
"14": "0",
"15": "0",
"16": "0",
"17": "0",
"18": "0",
"19": "0",
"20": "0",
"21": "0",
"22": "0",
"23": "0",
"24": "0",
"25": "0",
"26": "0",
"27": "0",
"28": "0",
"29": "0",
"30": "0",
"31": "0",
"32": "0",
"33": "0",
"34": "0",
"35": "0",
"36": "0",
"37": "0",
"38": "0",
"39": "0",
"40": "0",
"41": "0",
"42": "0",
"43": "0",
"44": "0",
"45": "0",
"46": "0",
"47": "0",
"48": "0",
"49": "0",
"50": "0",
"51": "0",
"52": "0",
"53": "0",
"54": "0",
"55": "0",
"56": "0",
"57": "0",
"58": "0",
"59": "0",
"60": "0",
"61": "0",
"62": "0",
"63": "0"
}
},
"SCHEDULER": {
"scheduler.0": {
"type" : "DWRR",
"weight": "1"
},
"scheduler.1": {
"type" : "DWRR",
"weight": "2"
},
"scheduler.2": {
"type" : "DWRR",
"weight": "3"
},
"scheduler.3": {
"type" : "DWRR",
"weight": "4"
},
"scheduler.4": {
"type" : "DWRR",
"weight": "5"
},
"scheduler.5": {
"type" : "DWRR",
"weight": "10"
},
"scheduler.6": {
"type" : "DWRR",
"weight": "25"
},
"scheduler.7": {
"type" : "DWRR",
"weight": "50"
}
},
{% if asic_type in pfc_to_pg_map_supported_asics %}
"PFC_PRIORITY_TO_PRIORITY_GROUP_MAP": {
"AZURE": {
"3": "3",
"4": "4"
}
},
{% endif %}
"PORT_QOS_MAP": {
"{{ port_names_active }}": {
"dscp_to_tc_map" : "[DSCP_TO_TC_MAP|AZURE]",
"tc_to_queue_map" : "[TC_TO_QUEUE_MAP|AZURE]",
"tc_to_pg_map" : "[TC_TO_PRIORITY_GROUP_MAP|AZURE]"
}
},
"QUEUE": {
{% for port in PORT_ACTIVE %}
"{{ port }}|0": {
"scheduler" : "[SCHEDULER|scheduler.0]"
},
{% endfor %}
{% for port in PORT_ACTIVE %}
"{{ port }}|1": {
"scheduler" : "[SCHEDULER|scheduler.1]"
},
{% endfor %}
{% for port in PORT_ACTIVE %}
"{{ port }}|2": {
"scheduler": "[SCHEDULER|scheduler.2]"
},
{% endfor %}
{% for port in PORT_ACTIVE %}
"{{ port }}|3": {
"scheduler": "[SCHEDULER|scheduler.3]"
},
{% endfor %}
{% for port in PORT_ACTIVE %}
"{{ port }}|4": {
"scheduler": "[SCHEDULER|scheduler.4]"
},
{% endfor %}
{% for port in PORT_ACTIVE %}
"{{ port }}|5": {
"scheduler": "[SCHEDULER|scheduler.5]"
},
{% endfor %}
{% for port in PORT_ACTIVE %}
"{{ port }}|6": {
"scheduler": "[SCHEDULER|scheduler.6]"
},
{% endfor %}
{% for port in PORT_ACTIVE %}
"{{ port }}|7": {
"scheduler": "[SCHEDULER|scheduler.7]"
}{% if not loop.last %},{% endif %}
{% endfor %}
}
}

View File

@ -0,0 +1 @@
SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/td3-s5232f-32x100G.config.bcm

View File

@ -0,0 +1,544 @@
os=unix
core_clock_frequency=1525
dpp_clock_ratio=2:3
parity_enable=1
parity_correction=1
tdma_intr_enable=1
schan_intr_enable=0
tdma_intr_enable=1
miim_intr_enable=1
stat_if_parity_enable=1
port_flex_enable=1
port_flex_enable_66=0
port_flex_enable_130=0
phy_an_c73=3
phy_an_c73_66=0
phy_an_c73_130=0
module_64ports=0
table_dma_enable=1
tdma_timeout_usec=5000000
mmu_lossless=0
pdma_descriptor_prefetch_enable=1
pktdma_poll_mode_channel_bitmap=1
l2xmsg_mode=1
l2xmsg_hostbuf_size=8192
ipv6_lpm_128b_enable=1
max_vp_lags=0
l3_alpm_enable=2
l2_mem_entries=32768
l3_mem_entries=16384
l3_max_ecmp_mode=1
bcm_tunnel_term_compatible_mode=1
ifp_inports_support_enable=1
mmu_init_config="MSFT-TD3-Tier1"
stable_size=0x5500000
oversubscribe_mode=1
pbmp_oversubscribe=0x6fffffffffffffffdfffffffffffffffe
pbmp_xport_xe=0x6fffffffffffffffdfffffffffffffffe
portmap_1.0=1:100
portmap_5.0=5:100
portmap_9.0=9:100
portmap_13.0=13:100
portmap_17.0=17:100
portmap_21.0=21:100
portmap_25.0=25:100
portmap_29.0=29:100
portmap_33.0=33:100
portmap_37.0=37:100
portmap_41.0=41:100
portmap_45.0=45:100
portmap_49.0=49:100
portmap_53.0=53:100
portmap_57.0=57:100
portmap_61.0=61:100
portmap_67.0=65:100
portmap_71.0=69:100
portmap_75.0=73:100
portmap_79.0=77:100
portmap_83.0=81:100
portmap_87.0=85:100
portmap_91.0=89:100
portmap_95.0=93:100
portmap_99.0=97:100
portmap_103.0=101:100
portmap_107.0=105:100
portmap_111.0=109:100
portmap_115.0=113:100
portmap_119.0=117:100
portmap_123.0=121:100
portmap_127.0=125:100
portmap_130.0=128:10:m
portmap_66.0=129:10:m
phy_chain_tx_lane_map_physical{1.0}=0x0132
phy_chain_rx_lane_map_physical{1.0}=0x3210
phy_chain_tx_lane_map_physical{5.0}=0x2301
phy_chain_rx_lane_map_physical{5.0}=0x2031
phy_chain_tx_lane_map_physical{9.0}=0x0132
phy_chain_rx_lane_map_physical{9.0}=0x3210
phy_chain_tx_lane_map_physical{13.0}=0x3201
phy_chain_rx_lane_map_physical{13.0}=0x2031
phy_chain_tx_lane_map_physical{17.0}=0x0123
phy_chain_rx_lane_map_physical{17.0}=0x3210
phy_chain_tx_lane_map_physical{21.0}=0x2301
phy_chain_rx_lane_map_physical{21.0}=0x2031
phy_chain_tx_lane_map_physical{25.0}=0x0123
phy_chain_rx_lane_map_physical{25.0}=0x3210
phy_chain_tx_lane_map_physical{29.0}=0x3201
phy_chain_rx_lane_map_physical{29.0}=0x2031
phy_chain_tx_lane_map_physical{33.0}=0x0213
phy_chain_rx_lane_map_physical{33.0}=0x1302
phy_chain_tx_lane_map_physical{37.0}=0x1302
phy_chain_rx_lane_map_physical{37.0}=0x2031
phy_chain_tx_lane_map_physical{41.0}=0x0231
phy_chain_rx_lane_map_physical{41.0}=0x3120
phy_chain_tx_lane_map_physical{45.0}=0x1302
phy_chain_rx_lane_map_physical{45.0}=0x2031
phy_chain_tx_lane_map_physical{49.0}=0x2103
phy_chain_rx_lane_map_physical{49.0}=0x3120
phy_chain_tx_lane_map_physical{53.0}=0x2301
phy_chain_rx_lane_map_physical{53.0}=0x2031
phy_chain_tx_lane_map_physical{57.0}=0x0123
phy_chain_rx_lane_map_physical{57.0}=0x2301
phy_chain_tx_lane_map_physical{61.0}=0x3210
phy_chain_rx_lane_map_physical{61.0}=0x1032
phy_chain_tx_lane_map_physical{65.0}=0x3210
phy_chain_rx_lane_map_physical{65.0}=0x1023
phy_chain_tx_lane_map_physical{69.0}=0x0123
phy_chain_rx_lane_map_physical{69.0}=0x1302
phy_chain_tx_lane_map_physical{73.0}=0x2301
phy_chain_rx_lane_map_physical{73.0}=0x1032
phy_chain_tx_lane_map_physical{77.0}=0x2013
phy_chain_rx_lane_map_physical{77.0}=0x3120
phy_chain_tx_lane_map_physical{81.0}=0x1302
phy_chain_rx_lane_map_physical{81.0}=0x2031
phy_chain_tx_lane_map_physical{85.0}=0x0123
phy_chain_rx_lane_map_physical{85.0}=0x2130
phy_chain_tx_lane_map_physical{89.0}=0x2301
phy_chain_rx_lane_map_physical{89.0}=0x2031
phy_chain_tx_lane_map_physical{93.0}=0x0312
phy_chain_rx_lane_map_physical{93.0}=0x2310
phy_chain_tx_lane_map_physical{97.0}=0x2301
phy_chain_rx_lane_map_physical{97.0}=0x1032
phy_chain_tx_lane_map_physical{101.0}=0x0123
phy_chain_rx_lane_map_physical{101.0}=0x3210
phy_chain_tx_lane_map_physical{105.0}=0x2301
phy_chain_rx_lane_map_physical{105.0}=0x1032
phy_chain_tx_lane_map_physical{109.0}=0x0123
phy_chain_rx_lane_map_physical{109.0}=0x3210
phy_chain_tx_lane_map_physical{113.0}=0x2301
phy_chain_rx_lane_map_physical{113.0}=0x2031
phy_chain_tx_lane_map_physical{117.0}=0x0123
phy_chain_rx_lane_map_physical{117.0}=0x3210
phy_chain_tx_lane_map_physical{121.0}=0x2301
phy_chain_rx_lane_map_physical{121.0}=0x1032
phy_chain_tx_lane_map_physical{125.0}=0x0123
phy_chain_rx_lane_map_physical{125.0}=0x3210
phy_chain_tx_lane_map_physical{129.0}=0x3210
phy_chain_rx_lane_map_physical{129.0}=0x0231
phy_chain_tx_lane_map_physical{128.0}=0x3210
phy_chain_rx_lane_map_physical{128.0}=0x0231
phy_chain_tx_polarity_flip_physical{1.0}=0x0
phy_chain_rx_polarity_flip_physical{1.0}=0x0
phy_chain_tx_polarity_flip_physical{2.0}=0x0
phy_chain_rx_polarity_flip_physical{2.0}=0x1
phy_chain_tx_polarity_flip_physical{3.0}=0x0
phy_chain_rx_polarity_flip_physical{3.0}=0x0
phy_chain_tx_polarity_flip_physical{4.0}=0x1
phy_chain_rx_polarity_flip_physical{4.0}=0x1
phy_chain_tx_polarity_flip_physical{5.0}=0x0
phy_chain_rx_polarity_flip_physical{5.0}=0x0
phy_chain_tx_polarity_flip_physical{6.0}=0x1
phy_chain_rx_polarity_flip_physical{6.0}=0x1
phy_chain_tx_polarity_flip_physical{7.0}=0x0
phy_chain_rx_polarity_flip_physical{7.0}=0x1
phy_chain_tx_polarity_flip_physical{8.0}=0x1
phy_chain_rx_polarity_flip_physical{8.0}=0x1
phy_chain_tx_polarity_flip_physical{9.0}=0x0
phy_chain_rx_polarity_flip_physical{9.0}=0x0
phy_chain_tx_polarity_flip_physical{10.0}=0x0
phy_chain_rx_polarity_flip_physical{10.0}=0x1
phy_chain_tx_polarity_flip_physical{11.0}=0x0
phy_chain_rx_polarity_flip_physical{11.0}=0x0
phy_chain_tx_polarity_flip_physical{12.0}=0x1
phy_chain_rx_polarity_flip_physical{12.0}=0x1
phy_chain_tx_polarity_flip_physical{13.0}=0x0
phy_chain_rx_polarity_flip_physical{13.0}=0x0
phy_chain_tx_polarity_flip_physical{14.0}=0x1
phy_chain_rx_polarity_flip_physical{14.0}=0x1
phy_chain_tx_polarity_flip_physical{15.0}=0x0
phy_chain_rx_polarity_flip_physical{15.0}=0x1
phy_chain_tx_polarity_flip_physical{16.0}=0x0
phy_chain_rx_polarity_flip_physical{16.0}=0x1
phy_chain_tx_polarity_flip_physical{17.0}=0x0
phy_chain_rx_polarity_flip_physical{17.0}=0x0
phy_chain_tx_polarity_flip_physical{18.0}=0x1
phy_chain_rx_polarity_flip_physical{18.0}=0x1
phy_chain_tx_polarity_flip_physical{19.0}=0x0
phy_chain_rx_polarity_flip_physical{19.0}=0x0
phy_chain_tx_polarity_flip_physical{20.0}=0x1
phy_chain_rx_polarity_flip_physical{20.0}=0x1
phy_chain_tx_polarity_flip_physical{21.0}=0x0
phy_chain_rx_polarity_flip_physical{21.0}=0x0
phy_chain_tx_polarity_flip_physical{22.0}=0x1
phy_chain_rx_polarity_flip_physical{22.0}=0x1
phy_chain_tx_polarity_flip_physical{23.0}=0x0
phy_chain_rx_polarity_flip_physical{23.0}=0x1
phy_chain_tx_polarity_flip_physical{24.0}=0x1
phy_chain_rx_polarity_flip_physical{24.0}=0x1
phy_chain_tx_polarity_flip_physical{25.0}=0x0
phy_chain_rx_polarity_flip_physical{25.0}=0x1
phy_chain_tx_polarity_flip_physical{26.0}=0x1
phy_chain_rx_polarity_flip_physical{26.0}=0x0
phy_chain_tx_polarity_flip_physical{27.0}=0x0
phy_chain_rx_polarity_flip_physical{27.0}=0x1
phy_chain_tx_polarity_flip_physical{28.0}=0x1
phy_chain_rx_polarity_flip_physical{28.0}=0x0
phy_chain_tx_polarity_flip_physical{29.0}=0x1
phy_chain_rx_polarity_flip_physical{29.0}=0x1
phy_chain_tx_polarity_flip_physical{30.0}=0x1
phy_chain_rx_polarity_flip_physical{30.0}=0x0
phy_chain_tx_polarity_flip_physical{31.0}=0x0
phy_chain_rx_polarity_flip_physical{31.0}=0x0
phy_chain_tx_polarity_flip_physical{32.0}=0x0
phy_chain_rx_polarity_flip_physical{32.0}=0x0
phy_chain_tx_polarity_flip_physical{33.0}=0x1
phy_chain_rx_polarity_flip_physical{33.0}=0x1
phy_chain_tx_polarity_flip_physical{34.0}=0x0
phy_chain_rx_polarity_flip_physical{34.0}=0x0
phy_chain_tx_polarity_flip_physical{35.0}=0x0
phy_chain_rx_polarity_flip_physical{35.0}=0x0
phy_chain_tx_polarity_flip_physical{36.0}=0x1
phy_chain_rx_polarity_flip_physical{36.0}=0x0
phy_chain_tx_polarity_flip_physical{37.0}=0x1
phy_chain_rx_polarity_flip_physical{37.0}=0x1
phy_chain_tx_polarity_flip_physical{38.0}=0x1
phy_chain_rx_polarity_flip_physical{38.0}=0x0
phy_chain_tx_polarity_flip_physical{39.0}=0x1
phy_chain_rx_polarity_flip_physical{39.0}=0x0
phy_chain_tx_polarity_flip_physical{40.0}=0x0
phy_chain_rx_polarity_flip_physical{40.0}=0x1
phy_chain_tx_polarity_flip_physical{41.0}=0x1
phy_chain_rx_polarity_flip_physical{41.0}=0x1
phy_chain_tx_polarity_flip_physical{42.0}=0x0
phy_chain_rx_polarity_flip_physical{42.0}=0x1
phy_chain_tx_polarity_flip_physical{43.0}=0x1
phy_chain_rx_polarity_flip_physical{43.0}=0x0
phy_chain_tx_polarity_flip_physical{44.0}=0x1
phy_chain_rx_polarity_flip_physical{44.0}=0x1
phy_chain_tx_polarity_flip_physical{45.0}=0x1
phy_chain_rx_polarity_flip_physical{45.0}=0x0
phy_chain_tx_polarity_flip_physical{46.0}=0x1
phy_chain_rx_polarity_flip_physical{46.0}=0x0
phy_chain_tx_polarity_flip_physical{47.0}=0x1
phy_chain_rx_polarity_flip_physical{47.0}=0x1
phy_chain_tx_polarity_flip_physical{48.0}=0x0
phy_chain_rx_polarity_flip_physical{48.0}=0x1
phy_chain_tx_polarity_flip_physical{49.0}=0x1
phy_chain_rx_polarity_flip_physical{49.0}=0x0
phy_chain_tx_polarity_flip_physical{50.0}=0x1
phy_chain_rx_polarity_flip_physical{50.0}=0x0
phy_chain_tx_polarity_flip_physical{51.0}=0x0
phy_chain_rx_polarity_flip_physical{51.0}=0x1
phy_chain_tx_polarity_flip_physical{52.0}=0x1
phy_chain_rx_polarity_flip_physical{52.0}=0x1
phy_chain_tx_polarity_flip_physical{53.0}=0x0
phy_chain_rx_polarity_flip_physical{53.0}=0x0
phy_chain_tx_polarity_flip_physical{54.0}=0x1
phy_chain_rx_polarity_flip_physical{54.0}=0x1
phy_chain_tx_polarity_flip_physical{55.0}=0x0
phy_chain_rx_polarity_flip_physical{55.0}=0x1
phy_chain_tx_polarity_flip_physical{56.0}=0x1
phy_chain_rx_polarity_flip_physical{56.0}=0x1
phy_chain_tx_polarity_flip_physical{57.0}=0x1
phy_chain_rx_polarity_flip_physical{57.0}=0x0
phy_chain_tx_polarity_flip_physical{58.0}=0x1
phy_chain_rx_polarity_flip_physical{58.0}=0x1
phy_chain_tx_polarity_flip_physical{59.0}=0x0
phy_chain_rx_polarity_flip_physical{59.0}=0x0
phy_chain_tx_polarity_flip_physical{60.0}=0x1
phy_chain_rx_polarity_flip_physical{60.0}=0x1
phy_chain_tx_polarity_flip_physical{61.0}=0x0
phy_chain_rx_polarity_flip_physical{61.0}=0x1
phy_chain_tx_polarity_flip_physical{62.0}=0x1
phy_chain_rx_polarity_flip_physical{62.0}=0x0
phy_chain_tx_polarity_flip_physical{63.0}=0x0
phy_chain_rx_polarity_flip_physical{63.0}=0x1
phy_chain_tx_polarity_flip_physical{64.0}=0x0
phy_chain_rx_polarity_flip_physical{64.0}=0x0
phy_chain_tx_polarity_flip_physical{65.0}=0x1
phy_chain_rx_polarity_flip_physical{65.0}=0x0
phy_chain_tx_polarity_flip_physical{66.0}=0x0
phy_chain_rx_polarity_flip_physical{66.0}=0x0
phy_chain_tx_polarity_flip_physical{67.0}=0x1
phy_chain_rx_polarity_flip_physical{67.0}=0x1
phy_chain_tx_polarity_flip_physical{68.0}=0x0
phy_chain_rx_polarity_flip_physical{68.0}=0x0
phy_chain_tx_polarity_flip_physical{69.0}=0x1
phy_chain_rx_polarity_flip_physical{69.0}=0x1
phy_chain_tx_polarity_flip_physical{70.0}=0x0
phy_chain_rx_polarity_flip_physical{70.0}=0x0
phy_chain_tx_polarity_flip_physical{71.0}=0x1
phy_chain_rx_polarity_flip_physical{71.0}=0x0
phy_chain_tx_polarity_flip_physical{72.0}=0x0
phy_chain_rx_polarity_flip_physical{72.0}=0x0
phy_chain_tx_polarity_flip_physical{73.0}=0x0
phy_chain_rx_polarity_flip_physical{73.0}=0x1
phy_chain_tx_polarity_flip_physical{74.0}=0x1
phy_chain_rx_polarity_flip_physical{74.0}=0x0
phy_chain_tx_polarity_flip_physical{75.0}=0x0
phy_chain_rx_polarity_flip_physical{75.0}=0x1
phy_chain_tx_polarity_flip_physical{76.0}=0x1
phy_chain_rx_polarity_flip_physical{76.0}=0x0
phy_chain_tx_polarity_flip_physical{77.0}=0x0
phy_chain_rx_polarity_flip_physical{77.0}=0x0
phy_chain_tx_polarity_flip_physical{78.0}=0x0
phy_chain_rx_polarity_flip_physical{78.0}=0x0
phy_chain_tx_polarity_flip_physical{79.0}=0x1
phy_chain_rx_polarity_flip_physical{79.0}=0x1
phy_chain_tx_polarity_flip_physical{80.0}=0x1
phy_chain_rx_polarity_flip_physical{80.0}=0x1
phy_chain_tx_polarity_flip_physical{81.0}=0x0
phy_chain_rx_polarity_flip_physical{81.0}=0x0
phy_chain_tx_polarity_flip_physical{82.0}=0x0
phy_chain_rx_polarity_flip_physical{82.0}=0x0
phy_chain_tx_polarity_flip_physical{83.0}=0x1
phy_chain_rx_polarity_flip_physical{83.0}=0x1
phy_chain_tx_polarity_flip_physical{84.0}=0x1
phy_chain_rx_polarity_flip_physical{84.0}=0x0
phy_chain_tx_polarity_flip_physical{85.0}=0x1
phy_chain_rx_polarity_flip_physical{85.0}=0x1
phy_chain_tx_polarity_flip_physical{86.0}=0x0
phy_chain_rx_polarity_flip_physical{86.0}=0x1
phy_chain_tx_polarity_flip_physical{87.0}=0x1
phy_chain_rx_polarity_flip_physical{87.0}=0x0
phy_chain_tx_polarity_flip_physical{88.0}=0x0
phy_chain_rx_polarity_flip_physical{88.0}=0x0
phy_chain_tx_polarity_flip_physical{89.0}=0x1
phy_chain_rx_polarity_flip_physical{89.0}=0x0
phy_chain_tx_polarity_flip_physical{90.0}=0x0
phy_chain_rx_polarity_flip_physical{90.0}=0x0
phy_chain_tx_polarity_flip_physical{91.0}=0x1
phy_chain_rx_polarity_flip_physical{91.0}=0x1
phy_chain_tx_polarity_flip_physical{92.0}=0x0
phy_chain_rx_polarity_flip_physical{92.0}=0x1
phy_chain_tx_polarity_flip_physical{93.0}=0x1
phy_chain_rx_polarity_flip_physical{93.0}=0x1
phy_chain_tx_polarity_flip_physical{94.0}=0x1
phy_chain_rx_polarity_flip_physical{94.0}=0x1
phy_chain_tx_polarity_flip_physical{95.0}=0x0
phy_chain_rx_polarity_flip_physical{95.0}=0x0
phy_chain_tx_polarity_flip_physical{96.0}=0x0
phy_chain_rx_polarity_flip_physical{96.0}=0x1
phy_chain_tx_polarity_flip_physical{97.0}=0x1
phy_chain_rx_polarity_flip_physical{97.0}=0x1
phy_chain_tx_polarity_flip_physical{98.0}=0x0
phy_chain_rx_polarity_flip_physical{98.0}=0x0
phy_chain_tx_polarity_flip_physical{99.0}=0x1
phy_chain_rx_polarity_flip_physical{99.0}=0x1
phy_chain_tx_polarity_flip_physical{100.0}=0x0
phy_chain_rx_polarity_flip_physical{100.0}=0x0
phy_chain_tx_polarity_flip_physical{101.0}=0x1
phy_chain_rx_polarity_flip_physical{101.0}=0x0
phy_chain_tx_polarity_flip_physical{102.0}=0x0
phy_chain_rx_polarity_flip_physical{102.0}=0x1
phy_chain_tx_polarity_flip_physical{103.0}=0x1
phy_chain_rx_polarity_flip_physical{103.0}=0x0
phy_chain_tx_polarity_flip_physical{104.0}=0x0
phy_chain_rx_polarity_flip_physical{104.0}=0x0
phy_chain_tx_polarity_flip_physical{105.0}=0x1
phy_chain_rx_polarity_flip_physical{105.0}=0x0
phy_chain_tx_polarity_flip_physical{106.0}=0x0
phy_chain_rx_polarity_flip_physical{106.0}=0x1
phy_chain_tx_polarity_flip_physical{107.0}=0x1
phy_chain_rx_polarity_flip_physical{107.0}=0x0
phy_chain_tx_polarity_flip_physical{108.0}=0x0
phy_chain_rx_polarity_flip_physical{108.0}=0x1
phy_chain_tx_polarity_flip_physical{109.0}=0x1
phy_chain_rx_polarity_flip_physical{109.0}=0x1
phy_chain_tx_polarity_flip_physical{110.0}=0x0
phy_chain_rx_polarity_flip_physical{110.0}=0x0
phy_chain_tx_polarity_flip_physical{111.0}=0x1
phy_chain_rx_polarity_flip_physical{111.0}=0x1
phy_chain_tx_polarity_flip_physical{112.0}=0x0
phy_chain_rx_polarity_flip_physical{112.0}=0x0
phy_chain_tx_polarity_flip_physical{113.0}=0x1
phy_chain_rx_polarity_flip_physical{113.0}=0x1
phy_chain_tx_polarity_flip_physical{114.0}=0x0
phy_chain_rx_polarity_flip_physical{114.0}=0x0
phy_chain_tx_polarity_flip_physical{115.0}=0x1
phy_chain_rx_polarity_flip_physical{115.0}=0x0
phy_chain_tx_polarity_flip_physical{116.0}=0x0
phy_chain_rx_polarity_flip_physical{116.0}=0x0
phy_chain_tx_polarity_flip_physical{117.0}=0x1
phy_chain_rx_polarity_flip_physical{117.0}=0x1
phy_chain_tx_polarity_flip_physical{118.0}=0x0
phy_chain_rx_polarity_flip_physical{118.0}=0x0
phy_chain_tx_polarity_flip_physical{119.0}=0x1
phy_chain_rx_polarity_flip_physical{119.0}=0x1
phy_chain_tx_polarity_flip_physical{120.0}=0x0
phy_chain_rx_polarity_flip_physical{120.0}=0x0
phy_chain_tx_polarity_flip_physical{121.0}=0x1
phy_chain_rx_polarity_flip_physical{121.0}=0x0
phy_chain_tx_polarity_flip_physical{122.0}=0x0
phy_chain_rx_polarity_flip_physical{122.0}=0x1
phy_chain_tx_polarity_flip_physical{123.0}=0x1
phy_chain_rx_polarity_flip_physical{123.0}=0x0
phy_chain_tx_polarity_flip_physical{124.0}=0x0
phy_chain_rx_polarity_flip_physical{124.0}=0x1
phy_chain_tx_polarity_flip_physical{125.0}=0x1
phy_chain_rx_polarity_flip_physical{125.0}=0x1
phy_chain_tx_polarity_flip_physical{126.0}=0x0
phy_chain_rx_polarity_flip_physical{126.0}=0x0
phy_chain_tx_polarity_flip_physical{127.0}=0x1
phy_chain_rx_polarity_flip_physical{127.0}=0x1
phy_chain_tx_polarity_flip_physical{128.0}=0x0
phy_chain_rx_polarity_flip_physical{128.0}=0x0
phy_chain_tx_polarity_flip_physical{129.0}=0x1
phy_chain_rx_polarity_flip_physical{129.0}=0x0
phy_chain_tx_polarity_flip_physical{130.0}=0x0
phy_chain_rx_polarity_flip_physical{130.0}=0x0
phy_chain_tx_polarity_flip_physical{131.0}=0x1
phy_chain_rx_polarity_flip_physical{131.0}=0x1
phy_chain_tx_polarity_flip_physical{132.0}=0x0
phy_chain_rx_polarity_flip_physical{132.0}=0x1
dport_map_enable=1
dport_map_port_1=1
dport_map_port_2=2
dport_map_port_3=3
dport_map_port_4=4
dport_map_port_5=5
dport_map_port_6=6
dport_map_port_7=7
dport_map_port_8=8
dport_map_port_9=9
dport_map_port_10=10
dport_map_port_11=11
dport_map_port_12=12
dport_map_port_13=13
dport_map_port_14=14
dport_map_port_15=15
dport_map_port_16=16
dport_map_port_17=17
dport_map_port_18=18
dport_map_port_19=19
dport_map_port_20=20
dport_map_port_21=21
dport_map_port_22=22
dport_map_port_23=23
dport_map_port_24=24
dport_map_port_25=25
dport_map_port_26=26
dport_map_port_27=27
dport_map_port_28=28
dport_map_port_29=29
dport_map_port_30=20
dport_map_port_31=31
dport_map_port_32=32
dport_map_port_33=33
dport_map_port_34=34
dport_map_port_35=35
dport_map_port_36=36
dport_map_port_37=37
dport_map_port_38=38
dport_map_port_39=39
dport_map_port_40=40
dport_map_port_41=41
dport_map_port_42=42
dport_map_port_43=44
dport_map_port_45=45
dport_map_port_46=46
dport_map_port_47=47
dport_map_port_48=48
dport_map_port_49=49
dport_map_port_50=50
dport_map_port_51=51
dport_map_port_52=52
dport_map_port_53=53
dport_map_port_54=54
dport_map_port_55=55
dport_map_port_56=56
dport_map_port_57=57
dport_map_port_58=58
dport_map_port_59=59
dport_map_port_60=60
dport_map_port_61=61
dport_map_port_62=62
dport_map_port_63=63
dport_map_port_64=64
dport_map_port_67=65
dport_map_port_68=66
dport_map_port_69=67
dport_map_port_70=68
dport_map_port_71=69
dport_map_port_72=70
dport_map_port_73=71
dport_map_port_74=72
dport_map_port_75=73
dport_map_port_76=74
dport_map_port_77=75
dport_map_port_78=76
dport_map_port_79=77
dport_map_port_80=78
dport_map_port_81=79
dport_map_port_82=80
dport_map_port_83=81
dport_map_port_84=82
dport_map_port_85=83
dport_map_port_86=84
dport_map_port_87=85
dport_map_port_88=86
dport_map_port_89=87
dport_map_port_90=88
dport_map_port_91=89
dport_map_port_92=90
dport_map_port_93=91
dport_map_port_94=92
dport_map_port_95=93
dport_map_port_96=94
dport_map_port_97=95
dport_map_port_98=96
dport_map_port_99=97
dport_map_port_100=98
dport_map_port_101=99
dport_map_port_102=100
dport_map_port_103=101
dport_map_port_104=102
dport_map_port_105=103
dport_map_port_106=104
dport_map_port_107=105
dport_map_port_108=106
dport_map_port_109=107
dport_map_port_110=108
dport_map_port_111=109
dport_map_port_112=110
dport_map_port_113=111
dport_map_port_114=112
dport_map_port_115=113
dport_map_port_116=114
dport_map_port_117=115
dport_map_port_118=116
dport_map_port_119=117
dport_map_port_120=118
dport_map_port_121=119
dport_map_port_122=120
dport_map_port_123=121
dport_map_port_124=122
dport_map_port_125=123
dport_map_port_126=124
dport_map_port_127=125
dport_map_port_129=126
dport_map_port_66=127
dport_map_port_130=128

View File

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

View File

@ -0,0 +1,53 @@
{%- set default_cable = '40m' %}
{%- 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": "33554432",
"type": "ingress",
"mode": "dynamic"
},
"egress_lossy_pool": {
"size": "32786432",
"type": "egress",
"mode": "dynamic"
}
},
"BUFFER_PROFILE": {
"ingress_lossy_profile": {
"pool":"[BUFFER_POOL|ingress_lossless_pool]",
"size":"0",
"dynamic_th":"3"
},
"egress_lossy_profile": {
"pool":"[BUFFER_POOL|egress_lossy_pool]",
"size":"1518",
"dynamic_th":"3"
}
},
{%- endmacro %}
{%- macro generate_pg_profils(port_names_active) %}
"BUFFER_PG": {
"{{ port_names_active }}|0": {
"profile" : "[BUFFER_PROFILE|ingress_lossy_profile]"
}
},
{%- endmacro %}
{% macro generate_queue_buffers(port_names_active) %}
"BUFFER_QUEUE": {
"{{ port_names_active }}|0-7": {
"profile" : "[BUFFER_PROFILE|egress_lossy_profile]"
}
}
{% endmacro %}

View File

@ -0,0 +1,107 @@
# name lanes alias index speed
Ethernet0 1 tenGigE1/1/1 1 10000
Ethernet1 2 tenGigE1/1/2 1 10000
Ethernet2 3 tenGigE1/1/3 1 10000
Ethernet3 4 tenGigE1/1/4 1 10000
Ethernet4 5 tenGigE1/2/1 2 10000
Ethernet5 6 tenGigE1/2/2 2 10000
Ethernet6 7 tenGigE1/2/3 2 10000
Ethernet7 8 tenGigE1/2/4 2 10000
Ethernet8 9 tenGigE1/3/1 3 10000
Ethernet9 10 tenGigE1/3/2 3 10000
Ethernet10 11 tenGigE1/3/3 3 10000
Ethernet11 12 tenGigE1/3/4 3 10000
Ethernet12 13 tenGigE1/4/1 4 10000
Ethernet13 14 tenGigE1/4/2 4 10000
Ethernet14 15 tenGigE1/4/3 4 10000
Ethernet15 16 tenGigE1/4/4 4 10000
Ethernet16 17 tenGigE1/5/1 5 10000
Ethernet17 18 tenGigE1/5/2 5 10000
Ethernet18 19 tenGigE1/5/3 5 10000
Ethernet19 20 tenGigE1/5/4 5 10000
Ethernet20 21 tenGigE1/6/1 6 10000
Ethernet21 22 tenGigE1/6/2 6 10000
Ethernet22 23 tenGigE1/6/3 6 10000
Ethernet23 24 tenGigE1/6/4 6 10000
Ethernet24 25 tenGigE1/7/1 7 10000
Ethernet25 26 tenGigE1/7/2 7 10000
Ethernet26 27 tenGigE1/7/3 7 10000
Ethernet27 28 tenGigE1/7/4 7 10000
Ethernet28 29 tenGigE1/8/1 8 10000
Ethernet29 30 tenGigE1/8/2 8 10000
Ethernet30 31 tenGigE1/8/3 8 10000
Ethernet31 32 tenGigE1/8/4 8 10000
Ethernet32 33 tenGigE1/9/1 9 10000
Ethernet33 34 tenGigE1/9/2 9 10000
Ethernet34 35 tenGigE1/9/3 9 10000
Ethernet35 36 tenGigE1/9/4 9 10000
Ethernet36 37 tenGigE1/10/1 10 10000
Ethernet37 38 tenGigE1/10/2 10 10000
Ethernet38 39 tenGigE1/10/3 10 10000
Ethernet39 40 tenGigE1/10/4 10 10000
Ethernet40 41 tenGigE1/11/1 11 10000
Ethernet41 42 tenGigE1/11/2 11 10000
Ethernet42 43 tenGigE1/11/3 11 10000
Ethernet43 44 tenGigE1/11/4 11 10000
Ethernet44 45 tenGigE1/12/1 12 10000
Ethernet45 46 tenGigE1/12/2 12 10000
Ethernet46 47 tenGigE1/12/3 12 10000
Ethernet47 48 tenGigE1/12/4 12 10000
Ethernet48 49 tenGigE1/13/1 13 10000
Ethernet49 50 tenGigE1/13/2 13 10000
Ethernet50 51 tenGigE1/13/3 13 10000
Ethernet51 52 tenGigE1/13/4 13 10000
Ethernet52 53 tenGigE1/14/1 14 10000
Ethernet53 54 tenGigE1/14/2 14 10000
Ethernet54 55 tenGigE1/14/3 14 10000
Ethernet55 56 tenGigE1/14/4 14 10000
Ethernet56 57 tenGigE1/15/1 15 10000
Ethernet57 58 tenGigE1/15/2 15 10000
Ethernet58 59 tenGigE1/15/3 15 10000
Ethernet59 60 tenGigE1/15/4 15 10000
Ethernet60 61 tenGigE1/16/1 16 10000
Ethernet61 62 tenGigE1/16/2 16 10000
Ethernet62 63 tenGigE1/16/3 16 10000
Ethernet63 64 tenGigE1/16/4 16 10000
Ethernet64 65 tenGigE1/17/1 17 10000
Ethernet65 66 tenGigE1/17/2 17 10000
Ethernet66 67 tenGigE1/17/3 17 10000
Ethernet67 68 tenGigE1/17/4 17 10000
Ethernet68 69 tenGigE1/18/1 18 10000
Ethernet69 70 tenGigE1/18/2 18 10000
Ethernet70 71 tenGigE1/18/3 18 10000
Ethernet71 72 tenGigE1/18/4 18 10000
Ethernet72 73 tenGigE1/19/1 19 10000
Ethernet73 74 tenGigE1/19/2 19 10000
Ethernet74 75 tenGigE1/19/3 19 10000
Ethernet75 76 tenGigE1/19/4 19 10000
Ethernet76 77 tenGigE1/20/1 20 10000
Ethernet77 78 tenGigE1/20/2 20 10000
Ethernet78 79 tenGigE1/20/3 20 10000
Ethernet79 80 tenGigE1/20/4 20 10000
Ethernet80 81 tenGigE1/21/1 21 10000
Ethernet81 82 tenGigE1/21/2 21 10000
Ethernet82 83 tenGigE1/21/3 21 10000
Ethernet83 84 tenGigE1/21/4 21 10000
Ethernet84 85 tenGigE1/22/1 22 10000
Ethernet85 86 tenGigE1/22/2 22 10000
Ethernet86 87 tenGigE1/22/3 22 10000
Ethernet87 88 tenGigE1/22/4 22 10000
Ethernet88 89 tenGigE1/23/1 23 10000
Ethernet89 90 tenGigE1/23/2 23 10000
Ethernet90 91 tenGigE1/23/3 23 10000
Ethernet91 92 tenGigE1/23/4 23 10000
Ethernet92 93 tenGigE1/24/1 24 10000
Ethernet93 94 tenGigE1/24/2 24 10000
Ethernet94 95 tenGigE1/24/3 24 10000
Ethernet95 96 tenGigE1/24/4 24 10000
Ethernet96 97,98,99,100 hundredGigE1/25 25 100000
Ethernet100 101,102,103,104 hundredGigE1/26 26 100000
Ethernet104 105,106,107,108 hundredGigE1/27 27 100000
Ethernet108 109,110,111,112 hundredGigE1/28 28 100000
Ethernet112 113,114,115,116 hundredGigE1/29 29 100000
Ethernet116 117,118,119,120 hundredGigE1/30 30 100000
Ethernet120 121,122,123,124 hundredGigE1/31 31 100000
Ethernet124 125,126,127,128 hundredGigE1/32 32 100000
Ethernet128 128 tenGigE1/33 33 10000
Ethernet129 129 tenGigE1/34 34 10000

View File

@ -0,0 +1,234 @@
{%- set PORT_ALL = [] %}
{%- for port in PORT %}
{%- if PORT_ALL.append(port) %}{% endif %}
{%- endfor %}
{%- if PORT_ALL | sort_by_port_index %}{% endif %}
{%- set port_names_list_all = [] %}
{%- for port in PORT_ALL %}
{%- if port_names_list_all.append(port) %}{% endif %}
{%- endfor %}
{%- set port_names_all = port_names_list_all | join(',') -%}
{%- set PORT_ACTIVE = [] %}
{%- if DEVICE_NEIGHBOR is not defined %}
{%- set PORT_ACTIVE = PORT_ALL %}
{%- else %}
{%- for port in DEVICE_NEIGHBOR.keys() %}
{%- if PORT_ACTIVE.append(port) %}{%- endif %}
{%- endfor %}
{%- endif %}
{%- if PORT_ACTIVE | sort_by_port_index %}{% endif %}
{%- set port_names_list_active = [] %}
{%- for port in PORT_ACTIVE %}
{%- if port_names_list_active.append(port) %}{%- endif %}
{%- endfor %}
{%- set port_names_active = port_names_list_active | join(',') -%}
{%- set pfc_to_pg_map_supported_asics = ['mellanox', 'barefoot', 'marvell'] -%}
{
{% if generate_tc_to_pg_map is defined %}
{{- generate_tc_to_pg_map() }}
{% else %}
"TC_TO_PRIORITY_GROUP_MAP": {
"AZURE": {
"0": "0",
"1": "0",
"2": "0",
"3": "0",
"4": "0",
"5": "0",
"6": "0",
"7": "0"
}
},
{% endif %}
"MAP_PFC_PRIORITY_TO_QUEUE": {
"AZURE": {
"0": "0",
"1": "1",
"2": "2",
"3": "3",
"4": "4",
"5": "5",
"6": "6",
"7": "7"
}
},
"TC_TO_QUEUE_MAP": {
"AZURE": {
"0": "0",
"1": "1",
"2": "2",
"3": "3",
"4": "4",
"5": "5",
"6": "6",
"7": "7"
}
},
"DSCP_TO_TC_MAP": {
"AZURE": {
"0" : "0",
"1" : "0",
"2" : "0",
"3" : "0",
"4" : "0",
"5" : "0",
"6" : "0",
"7" : "0",
"8" : "0",
"9" : "0",
"10": "0",
"11": "0",
"12": "0",
"13": "0",
"14": "0",
"15": "0",
"16": "0",
"17": "0",
"18": "0",
"19": "0",
"20": "0",
"21": "0",
"22": "0",
"23": "0",
"24": "0",
"25": "0",
"26": "0",
"27": "0",
"28": "0",
"29": "0",
"30": "0",
"31": "0",
"32": "0",
"33": "0",
"34": "0",
"35": "0",
"36": "0",
"37": "0",
"38": "0",
"39": "0",
"40": "0",
"41": "0",
"42": "0",
"43": "0",
"44": "0",
"45": "0",
"46": "0",
"47": "0",
"48": "0",
"49": "0",
"50": "0",
"51": "0",
"52": "0",
"53": "0",
"54": "0",
"55": "0",
"56": "0",
"57": "0",
"58": "0",
"59": "0",
"60": "0",
"61": "0",
"62": "0",
"63": "0"
}
},
"SCHEDULER": {
"scheduler.0": {
"type" : "DWRR",
"weight": "1"
},
"scheduler.1": {
"type" : "DWRR",
"weight": "2"
},
"scheduler.2": {
"type" : "DWRR",
"weight": "3"
},
"scheduler.3": {
"type" : "DWRR",
"weight": "4"
},
"scheduler.4": {
"type" : "DWRR",
"weight": "5"
},
"scheduler.5": {
"type" : "DWRR",
"weight": "10"
},
"scheduler.6": {
"type" : "DWRR",
"weight": "25"
},
"scheduler.7": {
"type" : "DWRR",
"weight": "50"
}
},
{% if asic_type in pfc_to_pg_map_supported_asics %}
"PFC_PRIORITY_TO_PRIORITY_GROUP_MAP": {
"AZURE": {
"3": "3",
"4": "4"
}
},
{% endif %}
"PORT_QOS_MAP": {
"{{ port_names_active }}": {
"dscp_to_tc_map" : "[DSCP_TO_TC_MAP|AZURE]",
"tc_to_queue_map" : "[TC_TO_QUEUE_MAP|AZURE]",
"tc_to_pg_map" : "[TC_TO_PRIORITY_GROUP_MAP|AZURE]"
}
},
"QUEUE": {
{% for port in PORT_ACTIVE %}
"{{ port }}|0": {
"scheduler" : "[SCHEDULER|scheduler.0]"
},
{% endfor %}
{% for port in PORT_ACTIVE %}
"{{ port }}|1": {
"scheduler" : "[SCHEDULER|scheduler.1]"
},
{% endfor %}
{% for port in PORT_ACTIVE %}
"{{ port }}|2": {
"scheduler": "[SCHEDULER|scheduler.2]"
},
{% endfor %}
{% for port in PORT_ACTIVE %}
"{{ port }}|3": {
"scheduler": "[SCHEDULER|scheduler.3]"
},
{% endfor %}
{% for port in PORT_ACTIVE %}
"{{ port }}|4": {
"scheduler": "[SCHEDULER|scheduler.4]"
},
{% endfor %}
{% for port in PORT_ACTIVE %}
"{{ port }}|5": {
"scheduler": "[SCHEDULER|scheduler.5]"
},
{% endfor %}
{% for port in PORT_ACTIVE %}
"{{ port }}|6": {
"scheduler": "[SCHEDULER|scheduler.6]"
},
{% endfor %}
{% for port in PORT_ACTIVE %}
"{{ port }}|7": {
"scheduler": "[SCHEDULER|scheduler.7]"
}{% if not loop.last %},{% endif %}
{% endfor %}
}
}

View File

@ -0,0 +1 @@
SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/td3-s5232f-8x100G-96x10G.config.bcm

View File

@ -0,0 +1,617 @@
os=unix
core_clock_frequency=1525
dpp_clock_ratio=2:3
parity_enable=1
parity_correction=1
tdma_intr_enable=1
schan_intr_enable=0
tdma_intr_enable=1
miim_intr_enable=1
stat_if_parity_enable=1
port_flex_enable=1
port_flex_enable_66=0
port_flex_enable_130=0
phy_an_c73=3
phy_an_c73_66=0
phy_an_c73_130=0
module_64ports=0
table_dma_enable=1
tdma_timeout_usec=5000000
mmu_lossless=0
pdma_descriptor_prefetch_enable=1
pktdma_poll_mode_channel_bitmap=1
l2xmsg_mode=1
l2xmsg_hostbuf_size=8192
ipv6_lpm_128b_enable=1
max_vp_lags=0
l3_alpm_enable=2
l2_mem_entries=32768
l3_mem_entries=16384
l3_max_ecmp_mode=1
bcm_tunnel_term_compatible_mode=1
ifp_inports_support_enable=1
mmu_init_config="MSFT-TD3-Tier1"
stable_size=0x5500000
oversubscribe_mode=1
pbmp_oversubscribe=0x6fffffffffffffffdfffffffffffffffe
pbmp_xport_xe=0x6fffffffffffffffdfffffffffffffffe
portmap_1.0=1:10:1
portmap_2.0=2:10:1
portmap_3.0=3:10:1
portmap_4.0=4:10:1
portmap_5.0=5:10:1
portmap_6.0=6:10:1
portmap_7.0=7:10:1
portmap_8.0=8:10:1
portmap_9.0=9:10:1
portmap_10.0=10:10:1
portmap_11.0=11:10:1
portmap_12.0=12:10:1
portmap_13.0=13:10:1
portmap_14.0=14:10:1
portmap_15.0=15:10:1
portmap_16.0=16:10:1
portmap_17.0=17:10:1
portmap_18.0=18:10:1
portmap_19.0=19:10:1
portmap_20.0=20:10:1
portmap_21.0=21:10:1
portmap_22.0=22:10:1
portmap_23.0=23:10:1
portmap_24.0=24:10:1
portmap_25.0=25:10:1
portmap_26.0=26:10:1
portmap_27.0=27:10:1
portmap_28.0=28:10:1
portmap_29.0=29:10:1
portmap_30.0=30:10:1
portmap_31.0=31:10:1
portmap_32.0=32:10:1
portmap_33.0=33:10:1
portmap_34.0=34:10:1
portmap_35.0=35:10:1
portmap_36.0=36:10:1
portmap_37.0=37:10:1
portmap_38.0=38:10:1
portmap_39.0=39:10:1
portmap_40.0=40:10:1
portmap_41.0=41:10:1
portmap_42.0=42:10:1
portmap_43.0=43:10:1
portmap_44.0=44:10:1
portmap_45.0=45:10:1
portmap_46.0=46:10:1
portmap_47.0=47:10:1
portmap_48.0=48:10:1
portmap_49.0=49:10:1
portmap_50.0=50:10:1
portmap_51.0=51:10:1
portmap_52.0=52:10:1
portmap_53.0=53:10:1
portmap_54.0=54:10:1
portmap_55.0=55:10:1
portmap_56.0=56:10:1
portmap_57.0=57:10:1
portmap_58.0=58:10:1
portmap_59.0=59:10:1
portmap_60.0=60:10:1
portmap_61.0=61:10:1
portmap_62.0=62:10:1
portmap_63.0=63:10:1
portmap_64.0=64:10:1
portmap_67.0=65:10:1
portmap_68.0=66:10:1
portmap_69.0=67:10:1
portmap_70.0=68:10:1
portmap_71.0=69:10:1
portmap_72.0=70:10:1
portmap_73.0=71:10:1
portmap_74.0=72:10:1
portmap_75.0=73:10:1
portmap_76.0=74:10:1
portmap_77.0=75:10:1
portmap_78.0=76:10:1
portmap_79.0=77:10:1
portmap_80.0=78:10:1
portmap_81.0=79:10:1
portmap_82.0=80:10:1
portmap_83.0=81:10:1
portmap_84.0=82:10:1
portmap_85.0=83:10:1
portmap_86.0=84:10:1
portmap_87.0=85:10:1
portmap_88.0=86:10:1
portmap_89.0=87:10:1
portmap_90.0=88:10:1
portmap_91.0=89:10:1
portmap_92.0=90:10:1
portmap_93.0=91:10:1
portmap_94.0=92:10:1
portmap_95.0=93:10:1
portmap_96.0=94:10:1
portmap_97.0=95:10:1
portmap_98.0=96:10:1
portmap_99.0=97:100
portmap_103.0=101:100
portmap_107.0=105:100
portmap_111.0=109:100
portmap_115.0=113:100
portmap_119.0=117:100
portmap_123.0=121:100
portmap_127.0=125:100
portmap_130.0=128:10:m
portmap_66.0=129:10:m
phy_chain_tx_lane_map_physical{1.0}=0x0132
phy_chain_rx_lane_map_physical{1.0}=0x3210
phy_chain_tx_lane_map_physical{5.0}=0x2301
phy_chain_rx_lane_map_physical{5.0}=0x2031
phy_chain_tx_lane_map_physical{9.0}=0x0132
phy_chain_rx_lane_map_physical{9.0}=0x3210
phy_chain_tx_lane_map_physical{13.0}=0x3201
phy_chain_rx_lane_map_physical{13.0}=0x2031
phy_chain_tx_lane_map_physical{17.0}=0x0123
phy_chain_rx_lane_map_physical{17.0}=0x3210
phy_chain_tx_lane_map_physical{21.0}=0x2301
phy_chain_rx_lane_map_physical{21.0}=0x2031
phy_chain_tx_lane_map_physical{25.0}=0x0123
phy_chain_rx_lane_map_physical{25.0}=0x3210
phy_chain_tx_lane_map_physical{29.0}=0x3201
phy_chain_rx_lane_map_physical{29.0}=0x2031
phy_chain_tx_lane_map_physical{33.0}=0x0213
phy_chain_rx_lane_map_physical{33.0}=0x1302
phy_chain_tx_lane_map_physical{37.0}=0x1302
phy_chain_rx_lane_map_physical{37.0}=0x2031
phy_chain_tx_lane_map_physical{41.0}=0x0231
phy_chain_rx_lane_map_physical{41.0}=0x3120
phy_chain_tx_lane_map_physical{45.0}=0x1302
phy_chain_rx_lane_map_physical{45.0}=0x2031
phy_chain_tx_lane_map_physical{49.0}=0x2103
phy_chain_rx_lane_map_physical{49.0}=0x3120
phy_chain_tx_lane_map_physical{53.0}=0x2301
phy_chain_rx_lane_map_physical{53.0}=0x2031
phy_chain_tx_lane_map_physical{57.0}=0x0123
phy_chain_rx_lane_map_physical{57.0}=0x2301
phy_chain_tx_lane_map_physical{61.0}=0x3210
phy_chain_rx_lane_map_physical{61.0}=0x1032
phy_chain_tx_lane_map_physical{65.0}=0x3210
phy_chain_rx_lane_map_physical{65.0}=0x1023
phy_chain_tx_lane_map_physical{69.0}=0x0123
phy_chain_rx_lane_map_physical{69.0}=0x1302
phy_chain_tx_lane_map_physical{73.0}=0x2301
phy_chain_rx_lane_map_physical{73.0}=0x1032
phy_chain_tx_lane_map_physical{77.0}=0x2013
phy_chain_rx_lane_map_physical{77.0}=0x3120
phy_chain_tx_lane_map_physical{81.0}=0x1302
phy_chain_rx_lane_map_physical{81.0}=0x2031
phy_chain_tx_lane_map_physical{85.0}=0x0123
phy_chain_rx_lane_map_physical{85.0}=0x2130
phy_chain_tx_lane_map_physical{89.0}=0x2301
phy_chain_rx_lane_map_physical{89.0}=0x2031
phy_chain_tx_lane_map_physical{93.0}=0x0312
phy_chain_rx_lane_map_physical{93.0}=0x2310
phy_chain_tx_lane_map_physical{97.0}=0x2301
phy_chain_rx_lane_map_physical{97.0}=0x1032
phy_chain_tx_lane_map_physical{101.0}=0x0123
phy_chain_rx_lane_map_physical{101.0}=0x3210
phy_chain_tx_lane_map_physical{105.0}=0x2301
phy_chain_rx_lane_map_physical{105.0}=0x1032
phy_chain_tx_lane_map_physical{109.0}=0x0123
phy_chain_rx_lane_map_physical{109.0}=0x3210
phy_chain_tx_lane_map_physical{113.0}=0x2301
phy_chain_rx_lane_map_physical{113.0}=0x2031
phy_chain_tx_lane_map_physical{117.0}=0x0123
phy_chain_rx_lane_map_physical{117.0}=0x3210
phy_chain_tx_lane_map_physical{121.0}=0x2301
phy_chain_rx_lane_map_physical{121.0}=0x1032
phy_chain_tx_lane_map_physical{125.0}=0x0123
phy_chain_rx_lane_map_physical{125.0}=0x3210
phy_chain_tx_lane_map_physical{129.0}=0x3210
phy_chain_rx_lane_map_physical{129.0}=0x0231
phy_chain_tx_lane_map_physical{128.0}=0x3210
phy_chain_rx_lane_map_physical{128.0}=0x0231
phy_chain_tx_polarity_flip_physical{1.0}=0x0
phy_chain_rx_polarity_flip_physical{1.0}=0x0
phy_chain_tx_polarity_flip_physical{2.0}=0x0
phy_chain_rx_polarity_flip_physical{2.0}=0x1
phy_chain_tx_polarity_flip_physical{3.0}=0x0
phy_chain_rx_polarity_flip_physical{3.0}=0x0
phy_chain_tx_polarity_flip_physical{4.0}=0x1
phy_chain_rx_polarity_flip_physical{4.0}=0x1
phy_chain_tx_polarity_flip_physical{5.0}=0x0
phy_chain_rx_polarity_flip_physical{5.0}=0x0
phy_chain_tx_polarity_flip_physical{6.0}=0x1
phy_chain_rx_polarity_flip_physical{6.0}=0x1
phy_chain_tx_polarity_flip_physical{7.0}=0x0
phy_chain_rx_polarity_flip_physical{7.0}=0x1
phy_chain_tx_polarity_flip_physical{8.0}=0x1
phy_chain_rx_polarity_flip_physical{8.0}=0x1
phy_chain_tx_polarity_flip_physical{9.0}=0x0
phy_chain_rx_polarity_flip_physical{9.0}=0x0
phy_chain_tx_polarity_flip_physical{10.0}=0x0
phy_chain_rx_polarity_flip_physical{10.0}=0x1
phy_chain_tx_polarity_flip_physical{11.0}=0x0
phy_chain_rx_polarity_flip_physical{11.0}=0x0
phy_chain_tx_polarity_flip_physical{12.0}=0x1
phy_chain_rx_polarity_flip_physical{12.0}=0x1
phy_chain_tx_polarity_flip_physical{13.0}=0x0
phy_chain_rx_polarity_flip_physical{13.0}=0x0
phy_chain_tx_polarity_flip_physical{14.0}=0x1
phy_chain_rx_polarity_flip_physical{14.0}=0x1
phy_chain_tx_polarity_flip_physical{15.0}=0x0
phy_chain_rx_polarity_flip_physical{15.0}=0x1
phy_chain_tx_polarity_flip_physical{16.0}=0x0
phy_chain_rx_polarity_flip_physical{16.0}=0x1
phy_chain_tx_polarity_flip_physical{17.0}=0x0
phy_chain_rx_polarity_flip_physical{17.0}=0x0
phy_chain_tx_polarity_flip_physical{18.0}=0x1
phy_chain_rx_polarity_flip_physical{18.0}=0x1
phy_chain_tx_polarity_flip_physical{19.0}=0x0
phy_chain_rx_polarity_flip_physical{19.0}=0x0
phy_chain_tx_polarity_flip_physical{20.0}=0x1
phy_chain_rx_polarity_flip_physical{20.0}=0x1
phy_chain_tx_polarity_flip_physical{21.0}=0x0
phy_chain_rx_polarity_flip_physical{21.0}=0x0
phy_chain_tx_polarity_flip_physical{22.0}=0x1
phy_chain_rx_polarity_flip_physical{22.0}=0x1
phy_chain_tx_polarity_flip_physical{23.0}=0x0
phy_chain_rx_polarity_flip_physical{23.0}=0x1
phy_chain_tx_polarity_flip_physical{24.0}=0x1
phy_chain_rx_polarity_flip_physical{24.0}=0x1
phy_chain_tx_polarity_flip_physical{25.0}=0x0
phy_chain_rx_polarity_flip_physical{25.0}=0x1
phy_chain_tx_polarity_flip_physical{26.0}=0x1
phy_chain_rx_polarity_flip_physical{26.0}=0x0
phy_chain_tx_polarity_flip_physical{27.0}=0x0
phy_chain_rx_polarity_flip_physical{27.0}=0x1
phy_chain_tx_polarity_flip_physical{28.0}=0x1
phy_chain_rx_polarity_flip_physical{28.0}=0x0
phy_chain_tx_polarity_flip_physical{29.0}=0x1
phy_chain_rx_polarity_flip_physical{29.0}=0x1
phy_chain_tx_polarity_flip_physical{30.0}=0x1
phy_chain_rx_polarity_flip_physical{30.0}=0x0
phy_chain_tx_polarity_flip_physical{31.0}=0x0
phy_chain_rx_polarity_flip_physical{31.0}=0x0
phy_chain_tx_polarity_flip_physical{32.0}=0x0
phy_chain_rx_polarity_flip_physical{32.0}=0x0
phy_chain_tx_polarity_flip_physical{33.0}=0x1
phy_chain_rx_polarity_flip_physical{33.0}=0x1
phy_chain_tx_polarity_flip_physical{34.0}=0x0
phy_chain_rx_polarity_flip_physical{34.0}=0x0
phy_chain_tx_polarity_flip_physical{35.0}=0x0
phy_chain_rx_polarity_flip_physical{35.0}=0x0
phy_chain_tx_polarity_flip_physical{36.0}=0x1
phy_chain_rx_polarity_flip_physical{36.0}=0x0
phy_chain_tx_polarity_flip_physical{37.0}=0x1
phy_chain_rx_polarity_flip_physical{37.0}=0x1
phy_chain_tx_polarity_flip_physical{38.0}=0x1
phy_chain_rx_polarity_flip_physical{38.0}=0x0
phy_chain_tx_polarity_flip_physical{39.0}=0x1
phy_chain_rx_polarity_flip_physical{39.0}=0x0
phy_chain_tx_polarity_flip_physical{40.0}=0x0
phy_chain_rx_polarity_flip_physical{40.0}=0x1
phy_chain_tx_polarity_flip_physical{41.0}=0x1
phy_chain_rx_polarity_flip_physical{41.0}=0x1
phy_chain_tx_polarity_flip_physical{42.0}=0x0
phy_chain_rx_polarity_flip_physical{42.0}=0x1
phy_chain_tx_polarity_flip_physical{43.0}=0x1
phy_chain_rx_polarity_flip_physical{43.0}=0x0
phy_chain_tx_polarity_flip_physical{44.0}=0x1
phy_chain_rx_polarity_flip_physical{44.0}=0x1
phy_chain_tx_polarity_flip_physical{45.0}=0x1
phy_chain_rx_polarity_flip_physical{45.0}=0x0
phy_chain_tx_polarity_flip_physical{46.0}=0x1
phy_chain_rx_polarity_flip_physical{46.0}=0x0
phy_chain_tx_polarity_flip_physical{47.0}=0x1
phy_chain_rx_polarity_flip_physical{47.0}=0x1
phy_chain_tx_polarity_flip_physical{48.0}=0x0
phy_chain_rx_polarity_flip_physical{48.0}=0x1
phy_chain_tx_polarity_flip_physical{49.0}=0x1
phy_chain_rx_polarity_flip_physical{49.0}=0x0
phy_chain_tx_polarity_flip_physical{50.0}=0x1
phy_chain_rx_polarity_flip_physical{50.0}=0x0
phy_chain_tx_polarity_flip_physical{51.0}=0x0
phy_chain_rx_polarity_flip_physical{51.0}=0x1
phy_chain_tx_polarity_flip_physical{52.0}=0x1
phy_chain_rx_polarity_flip_physical{52.0}=0x1
phy_chain_tx_polarity_flip_physical{53.0}=0x0
phy_chain_rx_polarity_flip_physical{53.0}=0x0
phy_chain_tx_polarity_flip_physical{54.0}=0x1
phy_chain_rx_polarity_flip_physical{54.0}=0x1
phy_chain_tx_polarity_flip_physical{55.0}=0x0
phy_chain_rx_polarity_flip_physical{55.0}=0x1
phy_chain_tx_polarity_flip_physical{56.0}=0x1
phy_chain_rx_polarity_flip_physical{56.0}=0x1
phy_chain_tx_polarity_flip_physical{57.0}=0x1
phy_chain_rx_polarity_flip_physical{57.0}=0x0
phy_chain_tx_polarity_flip_physical{58.0}=0x1
phy_chain_rx_polarity_flip_physical{58.0}=0x1
phy_chain_tx_polarity_flip_physical{59.0}=0x0
phy_chain_rx_polarity_flip_physical{59.0}=0x0
phy_chain_tx_polarity_flip_physical{60.0}=0x1
phy_chain_rx_polarity_flip_physical{60.0}=0x1
phy_chain_tx_polarity_flip_physical{61.0}=0x0
phy_chain_rx_polarity_flip_physical{61.0}=0x1
phy_chain_tx_polarity_flip_physical{62.0}=0x1
phy_chain_rx_polarity_flip_physical{62.0}=0x0
phy_chain_tx_polarity_flip_physical{63.0}=0x0
phy_chain_rx_polarity_flip_physical{63.0}=0x1
phy_chain_tx_polarity_flip_physical{64.0}=0x0
phy_chain_rx_polarity_flip_physical{64.0}=0x0
phy_chain_tx_polarity_flip_physical{65.0}=0x1
phy_chain_rx_polarity_flip_physical{65.0}=0x0
phy_chain_tx_polarity_flip_physical{66.0}=0x0
phy_chain_rx_polarity_flip_physical{66.0}=0x0
phy_chain_tx_polarity_flip_physical{67.0}=0x1
phy_chain_rx_polarity_flip_physical{67.0}=0x1
phy_chain_tx_polarity_flip_physical{68.0}=0x0
phy_chain_rx_polarity_flip_physical{68.0}=0x0
phy_chain_tx_polarity_flip_physical{69.0}=0x1
phy_chain_rx_polarity_flip_physical{69.0}=0x1
phy_chain_tx_polarity_flip_physical{70.0}=0x0
phy_chain_rx_polarity_flip_physical{70.0}=0x0
phy_chain_tx_polarity_flip_physical{71.0}=0x1
phy_chain_rx_polarity_flip_physical{71.0}=0x0
phy_chain_tx_polarity_flip_physical{72.0}=0x0
phy_chain_rx_polarity_flip_physical{72.0}=0x0
phy_chain_tx_polarity_flip_physical{73.0}=0x0
phy_chain_rx_polarity_flip_physical{73.0}=0x1
phy_chain_tx_polarity_flip_physical{74.0}=0x1
phy_chain_rx_polarity_flip_physical{74.0}=0x0
phy_chain_tx_polarity_flip_physical{75.0}=0x0
phy_chain_rx_polarity_flip_physical{75.0}=0x1
phy_chain_tx_polarity_flip_physical{76.0}=0x1
phy_chain_rx_polarity_flip_physical{76.0}=0x0
phy_chain_tx_polarity_flip_physical{77.0}=0x0
phy_chain_rx_polarity_flip_physical{77.0}=0x0
phy_chain_tx_polarity_flip_physical{78.0}=0x0
phy_chain_rx_polarity_flip_physical{78.0}=0x0
phy_chain_tx_polarity_flip_physical{79.0}=0x1
phy_chain_rx_polarity_flip_physical{79.0}=0x1
phy_chain_tx_polarity_flip_physical{80.0}=0x1
phy_chain_rx_polarity_flip_physical{80.0}=0x1
phy_chain_tx_polarity_flip_physical{81.0}=0x0
phy_chain_rx_polarity_flip_physical{81.0}=0x0
phy_chain_tx_polarity_flip_physical{82.0}=0x0
phy_chain_rx_polarity_flip_physical{82.0}=0x0
phy_chain_tx_polarity_flip_physical{83.0}=0x1
phy_chain_rx_polarity_flip_physical{83.0}=0x1
phy_chain_tx_polarity_flip_physical{84.0}=0x1
phy_chain_rx_polarity_flip_physical{84.0}=0x0
phy_chain_tx_polarity_flip_physical{85.0}=0x1
phy_chain_rx_polarity_flip_physical{85.0}=0x1
phy_chain_tx_polarity_flip_physical{86.0}=0x0
phy_chain_rx_polarity_flip_physical{86.0}=0x1
phy_chain_tx_polarity_flip_physical{87.0}=0x1
phy_chain_rx_polarity_flip_physical{87.0}=0x0
phy_chain_tx_polarity_flip_physical{88.0}=0x0
phy_chain_rx_polarity_flip_physical{88.0}=0x0
phy_chain_tx_polarity_flip_physical{89.0}=0x1
phy_chain_rx_polarity_flip_physical{89.0}=0x0
phy_chain_tx_polarity_flip_physical{90.0}=0x0
phy_chain_rx_polarity_flip_physical{90.0}=0x0
phy_chain_tx_polarity_flip_physical{91.0}=0x1
phy_chain_rx_polarity_flip_physical{91.0}=0x1
phy_chain_tx_polarity_flip_physical{92.0}=0x0
phy_chain_rx_polarity_flip_physical{92.0}=0x1
phy_chain_tx_polarity_flip_physical{93.0}=0x1
phy_chain_rx_polarity_flip_physical{93.0}=0x1
phy_chain_tx_polarity_flip_physical{94.0}=0x1
phy_chain_rx_polarity_flip_physical{94.0}=0x1
phy_chain_tx_polarity_flip_physical{95.0}=0x0
phy_chain_rx_polarity_flip_physical{95.0}=0x0
phy_chain_tx_polarity_flip_physical{96.0}=0x0
phy_chain_rx_polarity_flip_physical{96.0}=0x1
phy_chain_tx_polarity_flip_physical{97.0}=0x1
phy_chain_rx_polarity_flip_physical{97.0}=0x1
phy_chain_tx_polarity_flip_physical{98.0}=0x0
phy_chain_rx_polarity_flip_physical{98.0}=0x0
phy_chain_tx_polarity_flip_physical{99.0}=0x1
phy_chain_rx_polarity_flip_physical{99.0}=0x1
phy_chain_tx_polarity_flip_physical{100.0}=0x0
phy_chain_rx_polarity_flip_physical{100.0}=0x0
phy_chain_tx_polarity_flip_physical{101.0}=0x1
phy_chain_rx_polarity_flip_physical{101.0}=0x0
phy_chain_tx_polarity_flip_physical{102.0}=0x0
phy_chain_rx_polarity_flip_physical{102.0}=0x1
phy_chain_tx_polarity_flip_physical{103.0}=0x1
phy_chain_rx_polarity_flip_physical{103.0}=0x0
phy_chain_tx_polarity_flip_physical{104.0}=0x0
phy_chain_rx_polarity_flip_physical{104.0}=0x0
phy_chain_tx_polarity_flip_physical{105.0}=0x1
phy_chain_rx_polarity_flip_physical{105.0}=0x0
phy_chain_tx_polarity_flip_physical{106.0}=0x0
phy_chain_rx_polarity_flip_physical{106.0}=0x1
phy_chain_tx_polarity_flip_physical{107.0}=0x1
phy_chain_rx_polarity_flip_physical{107.0}=0x0
phy_chain_tx_polarity_flip_physical{108.0}=0x0
phy_chain_rx_polarity_flip_physical{108.0}=0x1
phy_chain_tx_polarity_flip_physical{109.0}=0x1
phy_chain_rx_polarity_flip_physical{109.0}=0x1
phy_chain_tx_polarity_flip_physical{110.0}=0x0
phy_chain_rx_polarity_flip_physical{110.0}=0x0
phy_chain_tx_polarity_flip_physical{111.0}=0x1
phy_chain_rx_polarity_flip_physical{111.0}=0x1
phy_chain_tx_polarity_flip_physical{112.0}=0x0
phy_chain_rx_polarity_flip_physical{112.0}=0x0
phy_chain_tx_polarity_flip_physical{113.0}=0x1
phy_chain_rx_polarity_flip_physical{113.0}=0x1
phy_chain_tx_polarity_flip_physical{114.0}=0x0
phy_chain_rx_polarity_flip_physical{114.0}=0x0
phy_chain_tx_polarity_flip_physical{115.0}=0x1
phy_chain_rx_polarity_flip_physical{115.0}=0x0
phy_chain_tx_polarity_flip_physical{116.0}=0x0
phy_chain_rx_polarity_flip_physical{116.0}=0x0
phy_chain_tx_polarity_flip_physical{117.0}=0x1
phy_chain_rx_polarity_flip_physical{117.0}=0x1
phy_chain_tx_polarity_flip_physical{118.0}=0x0
phy_chain_rx_polarity_flip_physical{118.0}=0x0
phy_chain_tx_polarity_flip_physical{119.0}=0x1
phy_chain_rx_polarity_flip_physical{119.0}=0x1
phy_chain_tx_polarity_flip_physical{120.0}=0x0
phy_chain_rx_polarity_flip_physical{120.0}=0x0
phy_chain_tx_polarity_flip_physical{121.0}=0x1
phy_chain_rx_polarity_flip_physical{121.0}=0x0
phy_chain_tx_polarity_flip_physical{122.0}=0x0
phy_chain_rx_polarity_flip_physical{122.0}=0x1
phy_chain_tx_polarity_flip_physical{123.0}=0x1
phy_chain_rx_polarity_flip_physical{123.0}=0x0
phy_chain_tx_polarity_flip_physical{124.0}=0x0
phy_chain_rx_polarity_flip_physical{124.0}=0x1
phy_chain_tx_polarity_flip_physical{125.0}=0x1
phy_chain_rx_polarity_flip_physical{125.0}=0x1
phy_chain_tx_polarity_flip_physical{126.0}=0x0
phy_chain_rx_polarity_flip_physical{126.0}=0x0
phy_chain_tx_polarity_flip_physical{127.0}=0x1
phy_chain_rx_polarity_flip_physical{127.0}=0x1
phy_chain_tx_polarity_flip_physical{128.0}=0x0
phy_chain_rx_polarity_flip_physical{128.0}=0x0
phy_chain_tx_polarity_flip_physical{129.0}=0x1
phy_chain_rx_polarity_flip_physical{129.0}=0x0
phy_chain_tx_polarity_flip_physical{130.0}=0x0
phy_chain_rx_polarity_flip_physical{130.0}=0x0
phy_chain_tx_polarity_flip_physical{131.0}=0x1
phy_chain_rx_polarity_flip_physical{131.0}=0x1
phy_chain_tx_polarity_flip_physical{132.0}=0x0
phy_chain_rx_polarity_flip_physical{132.0}=0x1
dport_map_enable=1
dport_map_port_1=1
dport_map_port_2=2
dport_map_port_3=3
dport_map_port_4=4
dport_map_port_5=5
dport_map_port_6=6
dport_map_port_7=7
dport_map_port_8=8
dport_map_port_9=9
dport_map_port_10=10
dport_map_port_11=11
dport_map_port_12=12
dport_map_port_13=13
dport_map_port_14=14
dport_map_port_15=15
dport_map_port_16=16
dport_map_port_17=17
dport_map_port_18=18
dport_map_port_19=19
dport_map_port_20=20
dport_map_port_21=21
dport_map_port_22=22
dport_map_port_23=23
dport_map_port_24=24
dport_map_port_25=25
dport_map_port_26=26
dport_map_port_27=27
dport_map_port_28=28
dport_map_port_29=29
dport_map_port_30=20
dport_map_port_31=31
dport_map_port_32=32
dport_map_port_33=33
dport_map_port_34=34
dport_map_port_35=35
dport_map_port_36=36
dport_map_port_37=37
dport_map_port_38=38
dport_map_port_39=39
dport_map_port_40=40
dport_map_port_41=41
dport_map_port_42=42
dport_map_port_43=44
dport_map_port_45=45
dport_map_port_46=46
dport_map_port_47=47
dport_map_port_48=48
dport_map_port_49=49
dport_map_port_50=50
dport_map_port_51=51
dport_map_port_52=52
dport_map_port_53=53
dport_map_port_54=54
dport_map_port_55=55
dport_map_port_56=56
dport_map_port_57=57
dport_map_port_58=58
dport_map_port_59=59
dport_map_port_60=60
dport_map_port_61=61
dport_map_port_62=62
dport_map_port_63=63
dport_map_port_64=64
dport_map_port_67=65
dport_map_port_68=66
dport_map_port_69=67
dport_map_port_70=68
dport_map_port_71=69
dport_map_port_72=70
dport_map_port_73=71
dport_map_port_74=72
dport_map_port_75=73
dport_map_port_76=74
dport_map_port_77=75
dport_map_port_78=76
dport_map_port_79=77
dport_map_port_80=78
dport_map_port_81=79
dport_map_port_82=80
dport_map_port_83=81
dport_map_port_84=82
dport_map_port_85=83
dport_map_port_86=84
dport_map_port_87=85
dport_map_port_88=86
dport_map_port_89=87
dport_map_port_90=88
dport_map_port_91=89
dport_map_port_92=90
dport_map_port_93=91
dport_map_port_94=92
dport_map_port_95=93
dport_map_port_96=94
dport_map_port_97=95
dport_map_port_98=96
dport_map_port_99=97
dport_map_port_100=98
dport_map_port_101=99
dport_map_port_102=100
dport_map_port_103=101
dport_map_port_104=102
dport_map_port_105=103
dport_map_port_106=104
dport_map_port_107=105
dport_map_port_108=106
dport_map_port_109=107
dport_map_port_110=108
dport_map_port_111=109
dport_map_port_112=110
dport_map_port_113=111
dport_map_port_114=112
dport_map_port_115=113
dport_map_port_116=114
dport_map_port_117=115
dport_map_port_118=116
dport_map_port_119=117
dport_map_port_120=118
dport_map_port_121=119
dport_map_port_122=120
dport_map_port_123=121
dport_map_port_124=122
dport_map_port_125=123
dport_map_port_126=124
dport_map_port_127=125
dport_map_port_129=126
dport_map_port_66=127
dport_map_port_130=128

View File

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

View File

@ -0,0 +1,53 @@
{%- set default_cable = '40m' %}
{%- 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": "33554432",
"type": "ingress",
"mode": "dynamic"
},
"egress_lossy_pool": {
"size": "32786432",
"type": "egress",
"mode": "dynamic"
}
},
"BUFFER_PROFILE": {
"ingress_lossy_profile": {
"pool":"[BUFFER_POOL|ingress_lossless_pool]",
"size":"0",
"dynamic_th":"3"
},
"egress_lossy_profile": {
"pool":"[BUFFER_POOL|egress_lossy_pool]",
"size":"1518",
"dynamic_th":"3"
}
},
{%- endmacro %}
{%- macro generate_pg_profils(port_names_active) %}
"BUFFER_PG": {
"{{ port_names_active }}|0": {
"profile" : "[BUFFER_PROFILE|ingress_lossy_profile]"
}
},
{%- endmacro %}
{% macro generate_queue_buffers(port_names_active) %}
"BUFFER_QUEUE": {
"{{ port_names_active }}|0-7": {
"profile" : "[BUFFER_PROFILE|egress_lossy_profile]"
}
}
{% endmacro %}

View File

@ -0,0 +1,107 @@
# name lanes alias index speed
Ethernet0 1 twentyfiveGigE1/1/1 1 25000
Ethernet1 2 twentyfiveGigE1/1/2 1 25000
Ethernet2 3 twentyfiveGigE1/1/3 1 25000
Ethernet3 4 twentyfiveGigE1/1/4 1 25000
Ethernet4 5 twentyfiveGigE1/2/1 2 25000
Ethernet5 6 twentyfiveGigE1/2/2 2 25000
Ethernet6 7 twentyfiveGigE1/2/3 2 25000
Ethernet7 8 twentyfiveGigE1/2/4 2 25000
Ethernet8 9 twentyfiveGigE1/3/1 3 25000
Ethernet9 10 twentyfiveGigE1/3/2 3 25000
Ethernet10 11 twentyfiveGigE1/3/3 3 25000
Ethernet11 12 twentyfiveGigE1/3/4 3 25000
Ethernet12 13 twentyfiveGigE1/4/1 4 25000
Ethernet13 14 twentyfiveGigE1/4/2 4 25000
Ethernet14 15 twentyfiveGigE1/4/3 4 25000
Ethernet15 16 twentyfiveGigE1/4/4 4 25000
Ethernet16 17 twentyfiveGigE1/5/1 5 25000
Ethernet17 18 twentyfiveGigE1/5/2 5 25000
Ethernet18 19 twentyfiveGigE1/5/3 5 25000
Ethernet19 20 twentyfiveGigE1/5/4 5 25000
Ethernet20 21 twentyfiveGigE1/6/1 6 25000
Ethernet21 22 twentyfiveGigE1/6/2 6 25000
Ethernet22 23 twentyfiveGigE1/6/3 6 25000
Ethernet23 24 twentyfiveGigE1/6/4 6 25000
Ethernet24 25 twentyfiveGigE1/7/1 7 25000
Ethernet25 26 twentyfiveGigE1/7/2 7 25000
Ethernet26 27 twentyfiveGigE1/7/3 7 25000
Ethernet27 28 twentyfiveGigE1/7/4 7 25000
Ethernet28 29 twentyfiveGigE1/8/1 8 25000
Ethernet29 30 twentyfiveGigE1/8/2 8 25000
Ethernet30 31 twentyfiveGigE1/8/3 8 25000
Ethernet31 32 twentyfiveGigE1/8/4 8 25000
Ethernet32 33 twentyfiveGigE1/9/1 9 25000
Ethernet33 34 twentyfiveGigE1/9/2 9 25000
Ethernet34 35 twentyfiveGigE1/9/3 9 25000
Ethernet35 36 twentyfiveGigE1/9/4 9 25000
Ethernet36 37 twentyfiveGigE1/10/1 10 25000
Ethernet37 38 twentyfiveGigE1/10/2 10 25000
Ethernet38 39 twentyfiveGigE1/10/3 10 25000
Ethernet39 40 twentyfiveGigE1/10/4 10 25000
Ethernet40 41 twentyfiveGigE1/11/1 11 25000
Ethernet41 42 twentyfiveGigE1/11/2 11 25000
Ethernet42 43 twentyfiveGigE1/11/3 11 25000
Ethernet43 44 twentyfiveGigE1/11/4 11 25000
Ethernet44 45 twentyfiveGigE1/12/1 12 25000
Ethernet45 46 twentyfiveGigE1/12/2 12 25000
Ethernet46 47 twentyfiveGigE1/12/3 12 25000
Ethernet47 48 twentyfiveGigE1/12/4 12 25000
Ethernet48 49 twentyfiveGigE1/13/1 13 25000
Ethernet49 50 twentyfiveGigE1/13/2 13 25000
Ethernet50 51 twentyfiveGigE1/13/3 13 25000
Ethernet51 52 twentyfiveGigE1/13/4 13 25000
Ethernet52 53 twentyfiveGigE1/14/1 14 25000
Ethernet53 54 twentyfiveGigE1/14/2 14 25000
Ethernet54 55 twentyfiveGigE1/14/3 14 25000
Ethernet55 56 twentyfiveGigE1/14/4 14 25000
Ethernet56 57 twentyfiveGigE1/15/1 15 25000
Ethernet57 58 twentyfiveGigE1/15/2 15 25000
Ethernet58 59 twentyfiveGigE1/15/3 15 25000
Ethernet59 60 twentyfiveGigE1/15/4 15 25000
Ethernet60 61 twentyfiveGigE1/16/1 16 25000
Ethernet61 62 twentyfiveGigE1/16/2 16 25000
Ethernet62 63 twentyfiveGigE1/16/3 16 25000
Ethernet63 64 twentyfiveGigE1/16/4 16 25000
Ethernet64 65 twentyfiveGigE1/17/1 17 25000
Ethernet65 66 twentyfiveGigE1/17/2 17 25000
Ethernet66 67 twentyfiveGigE1/17/3 17 25000
Ethernet67 68 twentyfiveGigE1/17/4 17 25000
Ethernet68 69 twentyfiveGigE1/18/1 18 25000
Ethernet69 70 twentyfiveGigE1/18/2 18 25000
Ethernet70 71 twentyfiveGigE1/18/3 18 25000
Ethernet71 72 twentyfiveGigE1/18/4 18 25000
Ethernet72 73 twentyfiveGigE1/19/1 19 25000
Ethernet73 74 twentyfiveGigE1/19/2 19 25000
Ethernet74 75 twentyfiveGigE1/19/3 19 25000
Ethernet75 76 twentyfiveGigE1/19/4 19 25000
Ethernet76 77 twentyfiveGigE1/20/1 20 25000
Ethernet77 78 twentyfiveGigE1/20/2 20 25000
Ethernet78 79 twentyfiveGigE1/20/3 20 25000
Ethernet79 80 twentyfiveGigE1/20/4 20 25000
Ethernet80 81 twentyfiveGigE1/21/1 21 25000
Ethernet81 82 twentyfiveGigE1/21/2 21 25000
Ethernet82 83 twentyfiveGigE1/21/3 21 25000
Ethernet83 84 twentyfiveGigE1/21/4 21 25000
Ethernet84 85 twentyfiveGigE1/22/1 22 25000
Ethernet85 86 twentyfiveGigE1/22/2 22 25000
Ethernet86 87 twentyfiveGigE1/22/3 22 25000
Ethernet87 88 twentyfiveGigE1/22/4 22 25000
Ethernet88 89 twentyfiveGigE1/23/1 23 25000
Ethernet89 90 twentyfiveGigE1/23/2 23 25000
Ethernet90 91 twentyfiveGigE1/23/3 23 25000
Ethernet91 92 twentyfiveGigE1/23/4 23 25000
Ethernet92 93 twentyfiveGigE1/24/1 24 25000
Ethernet93 94 twentyfiveGigE1/24/2 24 25000
Ethernet94 95 twentyfiveGigE1/24/3 24 25000
Ethernet95 96 twentyfiveGigE1/24/4 24 25000
Ethernet96 97,98,99,100 hundredGigE1/25 25 100000
Ethernet100 101,102,103,104 hundredGigE1/26 26 100000
Ethernet104 105,106,107,108 hundredGigE1/27 27 100000
Ethernet108 109,110,111,112 hundredGigE1/28 28 100000
Ethernet112 113,114,115,116 hundredGigE1/29 29 100000
Ethernet116 117,118,119,120 hundredGigE1/30 30 100000
Ethernet120 121,122,123,124 hundredGigE1/31 31 100000
Ethernet124 125,126,127,128 hundredGigE1/32 32 100000
Ethernet128 128 tenGigE1/33 33 10000
Ethernet129 129 tenGigE1/34 34 10000

View File

@ -0,0 +1,234 @@
{%- set PORT_ALL = [] %}
{%- for port in PORT %}
{%- if PORT_ALL.append(port) %}{% endif %}
{%- endfor %}
{%- if PORT_ALL | sort_by_port_index %}{% endif %}
{%- set port_names_list_all = [] %}
{%- for port in PORT_ALL %}
{%- if port_names_list_all.append(port) %}{% endif %}
{%- endfor %}
{%- set port_names_all = port_names_list_all | join(',') -%}
{%- set PORT_ACTIVE = [] %}
{%- if DEVICE_NEIGHBOR is not defined %}
{%- set PORT_ACTIVE = PORT_ALL %}
{%- else %}
{%- for port in DEVICE_NEIGHBOR.keys() %}
{%- if PORT_ACTIVE.append(port) %}{%- endif %}
{%- endfor %}
{%- endif %}
{%- if PORT_ACTIVE | sort_by_port_index %}{% endif %}
{%- set port_names_list_active = [] %}
{%- for port in PORT_ACTIVE %}
{%- if port_names_list_active.append(port) %}{%- endif %}
{%- endfor %}
{%- set port_names_active = port_names_list_active | join(',') -%}
{%- set pfc_to_pg_map_supported_asics = ['mellanox', 'barefoot', 'marvell'] -%}
{
{% if generate_tc_to_pg_map is defined %}
{{- generate_tc_to_pg_map() }}
{% else %}
"TC_TO_PRIORITY_GROUP_MAP": {
"AZURE": {
"0": "0",
"1": "0",
"2": "0",
"3": "0",
"4": "0",
"5": "0",
"6": "0",
"7": "0"
}
},
{% endif %}
"MAP_PFC_PRIORITY_TO_QUEUE": {
"AZURE": {
"0": "0",
"1": "1",
"2": "2",
"3": "3",
"4": "4",
"5": "5",
"6": "6",
"7": "7"
}
},
"TC_TO_QUEUE_MAP": {
"AZURE": {
"0": "0",
"1": "1",
"2": "2",
"3": "3",
"4": "4",
"5": "5",
"6": "6",
"7": "7"
}
},
"DSCP_TO_TC_MAP": {
"AZURE": {
"0" : "0",
"1" : "0",
"2" : "0",
"3" : "0",
"4" : "0",
"5" : "0",
"6" : "0",
"7" : "0",
"8" : "0",
"9" : "0",
"10": "0",
"11": "0",
"12": "0",
"13": "0",
"14": "0",
"15": "0",
"16": "0",
"17": "0",
"18": "0",
"19": "0",
"20": "0",
"21": "0",
"22": "0",
"23": "0",
"24": "0",
"25": "0",
"26": "0",
"27": "0",
"28": "0",
"29": "0",
"30": "0",
"31": "0",
"32": "0",
"33": "0",
"34": "0",
"35": "0",
"36": "0",
"37": "0",
"38": "0",
"39": "0",
"40": "0",
"41": "0",
"42": "0",
"43": "0",
"44": "0",
"45": "0",
"46": "0",
"47": "0",
"48": "0",
"49": "0",
"50": "0",
"51": "0",
"52": "0",
"53": "0",
"54": "0",
"55": "0",
"56": "0",
"57": "0",
"58": "0",
"59": "0",
"60": "0",
"61": "0",
"62": "0",
"63": "0"
}
},
"SCHEDULER": {
"scheduler.0": {
"type" : "DWRR",
"weight": "1"
},
"scheduler.1": {
"type" : "DWRR",
"weight": "2"
},
"scheduler.2": {
"type" : "DWRR",
"weight": "3"
},
"scheduler.3": {
"type" : "DWRR",
"weight": "4"
},
"scheduler.4": {
"type" : "DWRR",
"weight": "5"
},
"scheduler.5": {
"type" : "DWRR",
"weight": "10"
},
"scheduler.6": {
"type" : "DWRR",
"weight": "25"
},
"scheduler.7": {
"type" : "DWRR",
"weight": "50"
}
},
{% if asic_type in pfc_to_pg_map_supported_asics %}
"PFC_PRIORITY_TO_PRIORITY_GROUP_MAP": {
"AZURE": {
"3": "3",
"4": "4"
}
},
{% endif %}
"PORT_QOS_MAP": {
"{{ port_names_active }}": {
"dscp_to_tc_map" : "[DSCP_TO_TC_MAP|AZURE]",
"tc_to_queue_map" : "[TC_TO_QUEUE_MAP|AZURE]",
"tc_to_pg_map" : "[TC_TO_PRIORITY_GROUP_MAP|AZURE]"
}
},
"QUEUE": {
{% for port in PORT_ACTIVE %}
"{{ port }}|0": {
"scheduler" : "[SCHEDULER|scheduler.0]"
},
{% endfor %}
{% for port in PORT_ACTIVE %}
"{{ port }}|1": {
"scheduler" : "[SCHEDULER|scheduler.1]"
},
{% endfor %}
{% for port in PORT_ACTIVE %}
"{{ port }}|2": {
"scheduler": "[SCHEDULER|scheduler.2]"
},
{% endfor %}
{% for port in PORT_ACTIVE %}
"{{ port }}|3": {
"scheduler": "[SCHEDULER|scheduler.3]"
},
{% endfor %}
{% for port in PORT_ACTIVE %}
"{{ port }}|4": {
"scheduler": "[SCHEDULER|scheduler.4]"
},
{% endfor %}
{% for port in PORT_ACTIVE %}
"{{ port }}|5": {
"scheduler": "[SCHEDULER|scheduler.5]"
},
{% endfor %}
{% for port in PORT_ACTIVE %}
"{{ port }}|6": {
"scheduler": "[SCHEDULER|scheduler.6]"
},
{% endfor %}
{% for port in PORT_ACTIVE %}
"{{ port }}|7": {
"scheduler": "[SCHEDULER|scheduler.7]"
}{% if not loop.last %},{% endif %}
{% endfor %}
}
}

View File

@ -0,0 +1 @@
SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/td3-s5232f-8x100G-96x25G.config.bcm

View File

@ -0,0 +1,617 @@
os=unix
core_clock_frequency=1525
dpp_clock_ratio=2:3
parity_enable=1
parity_correction=1
tdma_intr_enable=1
schan_intr_enable=0
tdma_intr_enable=1
miim_intr_enable=1
stat_if_parity_enable=1
port_flex_enable=1
port_flex_enable_66=0
port_flex_enable_130=0
phy_an_c73=3
phy_an_c73_66=0
phy_an_c73_130=0
module_64ports=0
table_dma_enable=1
tdma_timeout_usec=5000000
mmu_lossless=0
pdma_descriptor_prefetch_enable=1
pktdma_poll_mode_channel_bitmap=1
l2xmsg_mode=1
l2xmsg_hostbuf_size=8192
ipv6_lpm_128b_enable=1
max_vp_lags=0
l3_alpm_enable=2
l2_mem_entries=32768
l3_mem_entries=16384
l3_max_ecmp_mode=1
bcm_tunnel_term_compatible_mode=1
ifp_inports_support_enable=1
mmu_init_config="MSFT-TD3-Tier1"
stable_size=0x5500000
oversubscribe_mode=1
pbmp_oversubscribe=0x6fffffffffffffffdfffffffffffffffe
pbmp_xport_xe=0x6fffffffffffffffdfffffffffffffffe
portmap_1.0=1:25:1
portmap_2.0=2:25:1
portmap_3.0=3:25:1
portmap_4.0=4:25:1
portmap_5.0=5:25:1
portmap_6.0=6:25:1
portmap_7.0=7:25:1
portmap_8.0=8:25:1
portmap_9.0=9:25:1
portmap_10.0=10:25:1
portmap_11.0=11:25:1
portmap_12.0=12:25:1
portmap_13.0=13:25:1
portmap_14.0=14:25:1
portmap_15.0=15:25:1
portmap_16.0=16:25:1
portmap_17.0=17:25:1
portmap_18.0=18:25:1
portmap_19.0=19:25:1
portmap_20.0=20:25:1
portmap_21.0=21:25:1
portmap_22.0=22:25:1
portmap_23.0=23:25:1
portmap_24.0=24:25:1
portmap_25.0=25:25:1
portmap_26.0=26:25:1
portmap_27.0=27:25:1
portmap_28.0=28:25:1
portmap_29.0=29:25:1
portmap_30.0=30:25:1
portmap_31.0=31:25:1
portmap_32.0=32:25:1
portmap_33.0=33:25:1
portmap_34.0=34:25:1
portmap_35.0=35:25:1
portmap_36.0=36:25:1
portmap_37.0=37:25:1
portmap_38.0=38:25:1
portmap_39.0=39:25:1
portmap_40.0=40:25:1
portmap_41.0=41:25:1
portmap_42.0=42:25:1
portmap_43.0=43:25:1
portmap_44.0=44:25:1
portmap_45.0=45:25:1
portmap_46.0=46:25:1
portmap_47.0=47:25:1
portmap_48.0=48:25:1
portmap_49.0=49:25:1
portmap_50.0=50:25:1
portmap_51.0=51:25:1
portmap_52.0=52:25:1
portmap_53.0=53:25:1
portmap_54.0=54:25:1
portmap_55.0=55:25:1
portmap_56.0=56:25:1
portmap_57.0=57:25:1
portmap_58.0=58:25:1
portmap_59.0=59:25:1
portmap_60.0=60:25:1
portmap_61.0=61:25:1
portmap_62.0=62:25:1
portmap_63.0=63:25:1
portmap_64.0=64:25:1
portmap_67.0=65:25:1
portmap_68.0=66:25:1
portmap_69.0=67:25:1
portmap_70.0=68:25:1
portmap_71.0=69:25:1
portmap_72.0=70:25:1
portmap_73.0=71:25:1
portmap_74.0=72:25:1
portmap_75.0=73:25:1
portmap_76.0=74:25:1
portmap_77.0=75:25:1
portmap_78.0=76:25:1
portmap_79.0=77:25:1
portmap_80.0=78:25:1
portmap_81.0=79:25:1
portmap_82.0=80:25:1
portmap_83.0=81:25:1
portmap_84.0=82:25:1
portmap_85.0=83:25:1
portmap_86.0=84:25:1
portmap_87.0=85:25:1
portmap_88.0=86:25:1
portmap_89.0=87:25:1
portmap_90.0=88:25:1
portmap_91.0=89:25:1
portmap_92.0=90:25:1
portmap_93.0=91:25:1
portmap_94.0=92:25:1
portmap_95.0=93:25:1
portmap_96.0=94:25:1
portmap_97.0=95:25:1
portmap_98.0=96:25:1
portmap_99.0=97:100
portmap_103.0=101:100
portmap_107.0=105:100
portmap_111.0=109:100
portmap_115.0=113:100
portmap_119.0=117:100
portmap_123.0=121:100
portmap_127.0=125:100
portmap_130.0=128:10:m
portmap_66.0=129:10:m
phy_chain_tx_lane_map_physical{1.0}=0x0132
phy_chain_rx_lane_map_physical{1.0}=0x3210
phy_chain_tx_lane_map_physical{5.0}=0x2301
phy_chain_rx_lane_map_physical{5.0}=0x2031
phy_chain_tx_lane_map_physical{9.0}=0x0132
phy_chain_rx_lane_map_physical{9.0}=0x3210
phy_chain_tx_lane_map_physical{13.0}=0x3201
phy_chain_rx_lane_map_physical{13.0}=0x2031
phy_chain_tx_lane_map_physical{17.0}=0x0123
phy_chain_rx_lane_map_physical{17.0}=0x3210
phy_chain_tx_lane_map_physical{21.0}=0x2301
phy_chain_rx_lane_map_physical{21.0}=0x2031
phy_chain_tx_lane_map_physical{25.0}=0x0123
phy_chain_rx_lane_map_physical{25.0}=0x3210
phy_chain_tx_lane_map_physical{29.0}=0x3201
phy_chain_rx_lane_map_physical{29.0}=0x2031
phy_chain_tx_lane_map_physical{33.0}=0x0213
phy_chain_rx_lane_map_physical{33.0}=0x1302
phy_chain_tx_lane_map_physical{37.0}=0x1302
phy_chain_rx_lane_map_physical{37.0}=0x2031
phy_chain_tx_lane_map_physical{41.0}=0x0231
phy_chain_rx_lane_map_physical{41.0}=0x3120
phy_chain_tx_lane_map_physical{45.0}=0x1302
phy_chain_rx_lane_map_physical{45.0}=0x2031
phy_chain_tx_lane_map_physical{49.0}=0x2103
phy_chain_rx_lane_map_physical{49.0}=0x3120
phy_chain_tx_lane_map_physical{53.0}=0x2301
phy_chain_rx_lane_map_physical{53.0}=0x2031
phy_chain_tx_lane_map_physical{57.0}=0x0123
phy_chain_rx_lane_map_physical{57.0}=0x2301
phy_chain_tx_lane_map_physical{61.0}=0x3210
phy_chain_rx_lane_map_physical{61.0}=0x1032
phy_chain_tx_lane_map_physical{65.0}=0x3210
phy_chain_rx_lane_map_physical{65.0}=0x1023
phy_chain_tx_lane_map_physical{69.0}=0x0123
phy_chain_rx_lane_map_physical{69.0}=0x1302
phy_chain_tx_lane_map_physical{73.0}=0x2301
phy_chain_rx_lane_map_physical{73.0}=0x1032
phy_chain_tx_lane_map_physical{77.0}=0x2013
phy_chain_rx_lane_map_physical{77.0}=0x3120
phy_chain_tx_lane_map_physical{81.0}=0x1302
phy_chain_rx_lane_map_physical{81.0}=0x2031
phy_chain_tx_lane_map_physical{85.0}=0x0123
phy_chain_rx_lane_map_physical{85.0}=0x2130
phy_chain_tx_lane_map_physical{89.0}=0x2301
phy_chain_rx_lane_map_physical{89.0}=0x2031
phy_chain_tx_lane_map_physical{93.0}=0x0312
phy_chain_rx_lane_map_physical{93.0}=0x2310
phy_chain_tx_lane_map_physical{97.0}=0x2301
phy_chain_rx_lane_map_physical{97.0}=0x1032
phy_chain_tx_lane_map_physical{101.0}=0x0123
phy_chain_rx_lane_map_physical{101.0}=0x3210
phy_chain_tx_lane_map_physical{105.0}=0x2301
phy_chain_rx_lane_map_physical{105.0}=0x1032
phy_chain_tx_lane_map_physical{109.0}=0x0123
phy_chain_rx_lane_map_physical{109.0}=0x3210
phy_chain_tx_lane_map_physical{113.0}=0x2301
phy_chain_rx_lane_map_physical{113.0}=0x2031
phy_chain_tx_lane_map_physical{117.0}=0x0123
phy_chain_rx_lane_map_physical{117.0}=0x3210
phy_chain_tx_lane_map_physical{121.0}=0x2301
phy_chain_rx_lane_map_physical{121.0}=0x1032
phy_chain_tx_lane_map_physical{125.0}=0x0123
phy_chain_rx_lane_map_physical{125.0}=0x3210
phy_chain_tx_lane_map_physical{129.0}=0x3210
phy_chain_rx_lane_map_physical{129.0}=0x0231
phy_chain_tx_lane_map_physical{128.0}=0x3210
phy_chain_rx_lane_map_physical{128.0}=0x0231
phy_chain_tx_polarity_flip_physical{1.0}=0x0
phy_chain_rx_polarity_flip_physical{1.0}=0x0
phy_chain_tx_polarity_flip_physical{2.0}=0x0
phy_chain_rx_polarity_flip_physical{2.0}=0x1
phy_chain_tx_polarity_flip_physical{3.0}=0x0
phy_chain_rx_polarity_flip_physical{3.0}=0x0
phy_chain_tx_polarity_flip_physical{4.0}=0x1
phy_chain_rx_polarity_flip_physical{4.0}=0x1
phy_chain_tx_polarity_flip_physical{5.0}=0x0
phy_chain_rx_polarity_flip_physical{5.0}=0x0
phy_chain_tx_polarity_flip_physical{6.0}=0x1
phy_chain_rx_polarity_flip_physical{6.0}=0x1
phy_chain_tx_polarity_flip_physical{7.0}=0x0
phy_chain_rx_polarity_flip_physical{7.0}=0x1
phy_chain_tx_polarity_flip_physical{8.0}=0x1
phy_chain_rx_polarity_flip_physical{8.0}=0x1
phy_chain_tx_polarity_flip_physical{9.0}=0x0
phy_chain_rx_polarity_flip_physical{9.0}=0x0
phy_chain_tx_polarity_flip_physical{10.0}=0x0
phy_chain_rx_polarity_flip_physical{10.0}=0x1
phy_chain_tx_polarity_flip_physical{11.0}=0x0
phy_chain_rx_polarity_flip_physical{11.0}=0x0
phy_chain_tx_polarity_flip_physical{12.0}=0x1
phy_chain_rx_polarity_flip_physical{12.0}=0x1
phy_chain_tx_polarity_flip_physical{13.0}=0x0
phy_chain_rx_polarity_flip_physical{13.0}=0x0
phy_chain_tx_polarity_flip_physical{14.0}=0x1
phy_chain_rx_polarity_flip_physical{14.0}=0x1
phy_chain_tx_polarity_flip_physical{15.0}=0x0
phy_chain_rx_polarity_flip_physical{15.0}=0x1
phy_chain_tx_polarity_flip_physical{16.0}=0x0
phy_chain_rx_polarity_flip_physical{16.0}=0x1
phy_chain_tx_polarity_flip_physical{17.0}=0x0
phy_chain_rx_polarity_flip_physical{17.0}=0x0
phy_chain_tx_polarity_flip_physical{18.0}=0x1
phy_chain_rx_polarity_flip_physical{18.0}=0x1
phy_chain_tx_polarity_flip_physical{19.0}=0x0
phy_chain_rx_polarity_flip_physical{19.0}=0x0
phy_chain_tx_polarity_flip_physical{20.0}=0x1
phy_chain_rx_polarity_flip_physical{20.0}=0x1
phy_chain_tx_polarity_flip_physical{21.0}=0x0
phy_chain_rx_polarity_flip_physical{21.0}=0x0
phy_chain_tx_polarity_flip_physical{22.0}=0x1
phy_chain_rx_polarity_flip_physical{22.0}=0x1
phy_chain_tx_polarity_flip_physical{23.0}=0x0
phy_chain_rx_polarity_flip_physical{23.0}=0x1
phy_chain_tx_polarity_flip_physical{24.0}=0x1
phy_chain_rx_polarity_flip_physical{24.0}=0x1
phy_chain_tx_polarity_flip_physical{25.0}=0x0
phy_chain_rx_polarity_flip_physical{25.0}=0x1
phy_chain_tx_polarity_flip_physical{26.0}=0x1
phy_chain_rx_polarity_flip_physical{26.0}=0x0
phy_chain_tx_polarity_flip_physical{27.0}=0x0
phy_chain_rx_polarity_flip_physical{27.0}=0x1
phy_chain_tx_polarity_flip_physical{28.0}=0x1
phy_chain_rx_polarity_flip_physical{28.0}=0x0
phy_chain_tx_polarity_flip_physical{29.0}=0x1
phy_chain_rx_polarity_flip_physical{29.0}=0x1
phy_chain_tx_polarity_flip_physical{30.0}=0x1
phy_chain_rx_polarity_flip_physical{30.0}=0x0
phy_chain_tx_polarity_flip_physical{31.0}=0x0
phy_chain_rx_polarity_flip_physical{31.0}=0x0
phy_chain_tx_polarity_flip_physical{32.0}=0x0
phy_chain_rx_polarity_flip_physical{32.0}=0x0
phy_chain_tx_polarity_flip_physical{33.0}=0x1
phy_chain_rx_polarity_flip_physical{33.0}=0x1
phy_chain_tx_polarity_flip_physical{34.0}=0x0
phy_chain_rx_polarity_flip_physical{34.0}=0x0
phy_chain_tx_polarity_flip_physical{35.0}=0x0
phy_chain_rx_polarity_flip_physical{35.0}=0x0
phy_chain_tx_polarity_flip_physical{36.0}=0x1
phy_chain_rx_polarity_flip_physical{36.0}=0x0
phy_chain_tx_polarity_flip_physical{37.0}=0x1
phy_chain_rx_polarity_flip_physical{37.0}=0x1
phy_chain_tx_polarity_flip_physical{38.0}=0x1
phy_chain_rx_polarity_flip_physical{38.0}=0x0
phy_chain_tx_polarity_flip_physical{39.0}=0x1
phy_chain_rx_polarity_flip_physical{39.0}=0x0
phy_chain_tx_polarity_flip_physical{40.0}=0x0
phy_chain_rx_polarity_flip_physical{40.0}=0x1
phy_chain_tx_polarity_flip_physical{41.0}=0x1
phy_chain_rx_polarity_flip_physical{41.0}=0x1
phy_chain_tx_polarity_flip_physical{42.0}=0x0
phy_chain_rx_polarity_flip_physical{42.0}=0x1
phy_chain_tx_polarity_flip_physical{43.0}=0x1
phy_chain_rx_polarity_flip_physical{43.0}=0x0
phy_chain_tx_polarity_flip_physical{44.0}=0x1
phy_chain_rx_polarity_flip_physical{44.0}=0x1
phy_chain_tx_polarity_flip_physical{45.0}=0x1
phy_chain_rx_polarity_flip_physical{45.0}=0x0
phy_chain_tx_polarity_flip_physical{46.0}=0x1
phy_chain_rx_polarity_flip_physical{46.0}=0x0
phy_chain_tx_polarity_flip_physical{47.0}=0x1
phy_chain_rx_polarity_flip_physical{47.0}=0x1
phy_chain_tx_polarity_flip_physical{48.0}=0x0
phy_chain_rx_polarity_flip_physical{48.0}=0x1
phy_chain_tx_polarity_flip_physical{49.0}=0x1
phy_chain_rx_polarity_flip_physical{49.0}=0x0
phy_chain_tx_polarity_flip_physical{50.0}=0x1
phy_chain_rx_polarity_flip_physical{50.0}=0x0
phy_chain_tx_polarity_flip_physical{51.0}=0x0
phy_chain_rx_polarity_flip_physical{51.0}=0x1
phy_chain_tx_polarity_flip_physical{52.0}=0x1
phy_chain_rx_polarity_flip_physical{52.0}=0x1
phy_chain_tx_polarity_flip_physical{53.0}=0x0
phy_chain_rx_polarity_flip_physical{53.0}=0x0
phy_chain_tx_polarity_flip_physical{54.0}=0x1
phy_chain_rx_polarity_flip_physical{54.0}=0x1
phy_chain_tx_polarity_flip_physical{55.0}=0x0
phy_chain_rx_polarity_flip_physical{55.0}=0x1
phy_chain_tx_polarity_flip_physical{56.0}=0x1
phy_chain_rx_polarity_flip_physical{56.0}=0x1
phy_chain_tx_polarity_flip_physical{57.0}=0x1
phy_chain_rx_polarity_flip_physical{57.0}=0x0
phy_chain_tx_polarity_flip_physical{58.0}=0x1
phy_chain_rx_polarity_flip_physical{58.0}=0x1
phy_chain_tx_polarity_flip_physical{59.0}=0x0
phy_chain_rx_polarity_flip_physical{59.0}=0x0
phy_chain_tx_polarity_flip_physical{60.0}=0x1
phy_chain_rx_polarity_flip_physical{60.0}=0x1
phy_chain_tx_polarity_flip_physical{61.0}=0x0
phy_chain_rx_polarity_flip_physical{61.0}=0x1
phy_chain_tx_polarity_flip_physical{62.0}=0x1
phy_chain_rx_polarity_flip_physical{62.0}=0x0
phy_chain_tx_polarity_flip_physical{63.0}=0x0
phy_chain_rx_polarity_flip_physical{63.0}=0x1
phy_chain_tx_polarity_flip_physical{64.0}=0x0
phy_chain_rx_polarity_flip_physical{64.0}=0x0
phy_chain_tx_polarity_flip_physical{65.0}=0x1
phy_chain_rx_polarity_flip_physical{65.0}=0x0
phy_chain_tx_polarity_flip_physical{66.0}=0x0
phy_chain_rx_polarity_flip_physical{66.0}=0x0
phy_chain_tx_polarity_flip_physical{67.0}=0x1
phy_chain_rx_polarity_flip_physical{67.0}=0x1
phy_chain_tx_polarity_flip_physical{68.0}=0x0
phy_chain_rx_polarity_flip_physical{68.0}=0x0
phy_chain_tx_polarity_flip_physical{69.0}=0x1
phy_chain_rx_polarity_flip_physical{69.0}=0x1
phy_chain_tx_polarity_flip_physical{70.0}=0x0
phy_chain_rx_polarity_flip_physical{70.0}=0x0
phy_chain_tx_polarity_flip_physical{71.0}=0x1
phy_chain_rx_polarity_flip_physical{71.0}=0x0
phy_chain_tx_polarity_flip_physical{72.0}=0x0
phy_chain_rx_polarity_flip_physical{72.0}=0x0
phy_chain_tx_polarity_flip_physical{73.0}=0x0
phy_chain_rx_polarity_flip_physical{73.0}=0x1
phy_chain_tx_polarity_flip_physical{74.0}=0x1
phy_chain_rx_polarity_flip_physical{74.0}=0x0
phy_chain_tx_polarity_flip_physical{75.0}=0x0
phy_chain_rx_polarity_flip_physical{75.0}=0x1
phy_chain_tx_polarity_flip_physical{76.0}=0x1
phy_chain_rx_polarity_flip_physical{76.0}=0x0
phy_chain_tx_polarity_flip_physical{77.0}=0x0
phy_chain_rx_polarity_flip_physical{77.0}=0x0
phy_chain_tx_polarity_flip_physical{78.0}=0x0
phy_chain_rx_polarity_flip_physical{78.0}=0x0
phy_chain_tx_polarity_flip_physical{79.0}=0x1
phy_chain_rx_polarity_flip_physical{79.0}=0x1
phy_chain_tx_polarity_flip_physical{80.0}=0x1
phy_chain_rx_polarity_flip_physical{80.0}=0x1
phy_chain_tx_polarity_flip_physical{81.0}=0x0
phy_chain_rx_polarity_flip_physical{81.0}=0x0
phy_chain_tx_polarity_flip_physical{82.0}=0x0
phy_chain_rx_polarity_flip_physical{82.0}=0x0
phy_chain_tx_polarity_flip_physical{83.0}=0x1
phy_chain_rx_polarity_flip_physical{83.0}=0x1
phy_chain_tx_polarity_flip_physical{84.0}=0x1
phy_chain_rx_polarity_flip_physical{84.0}=0x0
phy_chain_tx_polarity_flip_physical{85.0}=0x1
phy_chain_rx_polarity_flip_physical{85.0}=0x1
phy_chain_tx_polarity_flip_physical{86.0}=0x0
phy_chain_rx_polarity_flip_physical{86.0}=0x1
phy_chain_tx_polarity_flip_physical{87.0}=0x1
phy_chain_rx_polarity_flip_physical{87.0}=0x0
phy_chain_tx_polarity_flip_physical{88.0}=0x0
phy_chain_rx_polarity_flip_physical{88.0}=0x0
phy_chain_tx_polarity_flip_physical{89.0}=0x1
phy_chain_rx_polarity_flip_physical{89.0}=0x0
phy_chain_tx_polarity_flip_physical{90.0}=0x0
phy_chain_rx_polarity_flip_physical{90.0}=0x0
phy_chain_tx_polarity_flip_physical{91.0}=0x1
phy_chain_rx_polarity_flip_physical{91.0}=0x1
phy_chain_tx_polarity_flip_physical{92.0}=0x0
phy_chain_rx_polarity_flip_physical{92.0}=0x1
phy_chain_tx_polarity_flip_physical{93.0}=0x1
phy_chain_rx_polarity_flip_physical{93.0}=0x1
phy_chain_tx_polarity_flip_physical{94.0}=0x1
phy_chain_rx_polarity_flip_physical{94.0}=0x1
phy_chain_tx_polarity_flip_physical{95.0}=0x0
phy_chain_rx_polarity_flip_physical{95.0}=0x0
phy_chain_tx_polarity_flip_physical{96.0}=0x0
phy_chain_rx_polarity_flip_physical{96.0}=0x1
phy_chain_tx_polarity_flip_physical{97.0}=0x1
phy_chain_rx_polarity_flip_physical{97.0}=0x1
phy_chain_tx_polarity_flip_physical{98.0}=0x0
phy_chain_rx_polarity_flip_physical{98.0}=0x0
phy_chain_tx_polarity_flip_physical{99.0}=0x1
phy_chain_rx_polarity_flip_physical{99.0}=0x1
phy_chain_tx_polarity_flip_physical{100.0}=0x0
phy_chain_rx_polarity_flip_physical{100.0}=0x0
phy_chain_tx_polarity_flip_physical{101.0}=0x1
phy_chain_rx_polarity_flip_physical{101.0}=0x0
phy_chain_tx_polarity_flip_physical{102.0}=0x0
phy_chain_rx_polarity_flip_physical{102.0}=0x1
phy_chain_tx_polarity_flip_physical{103.0}=0x1
phy_chain_rx_polarity_flip_physical{103.0}=0x0
phy_chain_tx_polarity_flip_physical{104.0}=0x0
phy_chain_rx_polarity_flip_physical{104.0}=0x0
phy_chain_tx_polarity_flip_physical{105.0}=0x1
phy_chain_rx_polarity_flip_physical{105.0}=0x0
phy_chain_tx_polarity_flip_physical{106.0}=0x0
phy_chain_rx_polarity_flip_physical{106.0}=0x1
phy_chain_tx_polarity_flip_physical{107.0}=0x1
phy_chain_rx_polarity_flip_physical{107.0}=0x0
phy_chain_tx_polarity_flip_physical{108.0}=0x0
phy_chain_rx_polarity_flip_physical{108.0}=0x1
phy_chain_tx_polarity_flip_physical{109.0}=0x1
phy_chain_rx_polarity_flip_physical{109.0}=0x1
phy_chain_tx_polarity_flip_physical{110.0}=0x0
phy_chain_rx_polarity_flip_physical{110.0}=0x0
phy_chain_tx_polarity_flip_physical{111.0}=0x1
phy_chain_rx_polarity_flip_physical{111.0}=0x1
phy_chain_tx_polarity_flip_physical{112.0}=0x0
phy_chain_rx_polarity_flip_physical{112.0}=0x0
phy_chain_tx_polarity_flip_physical{113.0}=0x1
phy_chain_rx_polarity_flip_physical{113.0}=0x1
phy_chain_tx_polarity_flip_physical{114.0}=0x0
phy_chain_rx_polarity_flip_physical{114.0}=0x0
phy_chain_tx_polarity_flip_physical{115.0}=0x1
phy_chain_rx_polarity_flip_physical{115.0}=0x0
phy_chain_tx_polarity_flip_physical{116.0}=0x0
phy_chain_rx_polarity_flip_physical{116.0}=0x0
phy_chain_tx_polarity_flip_physical{117.0}=0x1
phy_chain_rx_polarity_flip_physical{117.0}=0x1
phy_chain_tx_polarity_flip_physical{118.0}=0x0
phy_chain_rx_polarity_flip_physical{118.0}=0x0
phy_chain_tx_polarity_flip_physical{119.0}=0x1
phy_chain_rx_polarity_flip_physical{119.0}=0x1
phy_chain_tx_polarity_flip_physical{120.0}=0x0
phy_chain_rx_polarity_flip_physical{120.0}=0x0
phy_chain_tx_polarity_flip_physical{121.0}=0x1
phy_chain_rx_polarity_flip_physical{121.0}=0x0
phy_chain_tx_polarity_flip_physical{122.0}=0x0
phy_chain_rx_polarity_flip_physical{122.0}=0x1
phy_chain_tx_polarity_flip_physical{123.0}=0x1
phy_chain_rx_polarity_flip_physical{123.0}=0x0
phy_chain_tx_polarity_flip_physical{124.0}=0x0
phy_chain_rx_polarity_flip_physical{124.0}=0x1
phy_chain_tx_polarity_flip_physical{125.0}=0x1
phy_chain_rx_polarity_flip_physical{125.0}=0x1
phy_chain_tx_polarity_flip_physical{126.0}=0x0
phy_chain_rx_polarity_flip_physical{126.0}=0x0
phy_chain_tx_polarity_flip_physical{127.0}=0x1
phy_chain_rx_polarity_flip_physical{127.0}=0x1
phy_chain_tx_polarity_flip_physical{128.0}=0x0
phy_chain_rx_polarity_flip_physical{128.0}=0x0
phy_chain_tx_polarity_flip_physical{129.0}=0x1
phy_chain_rx_polarity_flip_physical{129.0}=0x0
phy_chain_tx_polarity_flip_physical{130.0}=0x0
phy_chain_rx_polarity_flip_physical{130.0}=0x0
phy_chain_tx_polarity_flip_physical{131.0}=0x1
phy_chain_rx_polarity_flip_physical{131.0}=0x1
phy_chain_tx_polarity_flip_physical{132.0}=0x0
phy_chain_rx_polarity_flip_physical{132.0}=0x1
dport_map_enable=1
dport_map_port_1=1
dport_map_port_2=2
dport_map_port_3=3
dport_map_port_4=4
dport_map_port_5=5
dport_map_port_6=6
dport_map_port_7=7
dport_map_port_8=8
dport_map_port_9=9
dport_map_port_10=10
dport_map_port_11=11
dport_map_port_12=12
dport_map_port_13=13
dport_map_port_14=14
dport_map_port_15=15
dport_map_port_16=16
dport_map_port_17=17
dport_map_port_18=18
dport_map_port_19=19
dport_map_port_20=20
dport_map_port_21=21
dport_map_port_22=22
dport_map_port_23=23
dport_map_port_24=24
dport_map_port_25=25
dport_map_port_26=26
dport_map_port_27=27
dport_map_port_28=28
dport_map_port_29=29
dport_map_port_30=20
dport_map_port_31=31
dport_map_port_32=32
dport_map_port_33=33
dport_map_port_34=34
dport_map_port_35=35
dport_map_port_36=36
dport_map_port_37=37
dport_map_port_38=38
dport_map_port_39=39
dport_map_port_40=40
dport_map_port_41=41
dport_map_port_42=42
dport_map_port_43=44
dport_map_port_45=45
dport_map_port_46=46
dport_map_port_47=47
dport_map_port_48=48
dport_map_port_49=49
dport_map_port_50=50
dport_map_port_51=51
dport_map_port_52=52
dport_map_port_53=53
dport_map_port_54=54
dport_map_port_55=55
dport_map_port_56=56
dport_map_port_57=57
dport_map_port_58=58
dport_map_port_59=59
dport_map_port_60=60
dport_map_port_61=61
dport_map_port_62=62
dport_map_port_63=63
dport_map_port_64=64
dport_map_port_67=65
dport_map_port_68=66
dport_map_port_69=67
dport_map_port_70=68
dport_map_port_71=69
dport_map_port_72=70
dport_map_port_73=71
dport_map_port_74=72
dport_map_port_75=73
dport_map_port_76=74
dport_map_port_77=75
dport_map_port_78=76
dport_map_port_79=77
dport_map_port_80=78
dport_map_port_81=79
dport_map_port_82=80
dport_map_port_83=81
dport_map_port_84=82
dport_map_port_85=83
dport_map_port_86=84
dport_map_port_87=85
dport_map_port_88=86
dport_map_port_89=87
dport_map_port_90=88
dport_map_port_91=89
dport_map_port_92=90
dport_map_port_93=91
dport_map_port_94=92
dport_map_port_95=93
dport_map_port_96=94
dport_map_port_97=95
dport_map_port_98=96
dport_map_port_99=97
dport_map_port_100=98
dport_map_port_101=99
dport_map_port_102=100
dport_map_port_103=101
dport_map_port_104=102
dport_map_port_105=103
dport_map_port_106=104
dport_map_port_107=105
dport_map_port_108=106
dport_map_port_109=107
dport_map_port_110=108
dport_map_port_111=109
dport_map_port_112=110
dport_map_port_113=111
dport_map_port_114=112
dport_map_port_115=113
dport_map_port_116=114
dport_map_port_117=115
dport_map_port_118=116
dport_map_port_119=117
dport_map_port_120=118
dport_map_port_121=119
dport_map_port_122=120
dport_map_port_123=121
dport_map_port_124=122
dport_map_port_125=123
dport_map_port_126=124
dport_map_port_127=125
dport_map_port_129=126
dport_map_port_66=127
dport_map_port_130=128

View File

@ -0,0 +1 @@
DellEMC-S5232f-C32 t1

View File

@ -0,0 +1,3 @@
CONSOLE_PORT=0x3f8
CONSOLE_DEV=0
CONSOLE_SPEED=115200

View File

@ -0,0 +1,9 @@
# LED microprocessor initialization for Dell S5232
#
#
#Led0
#led stop
m0 load 0 0x0 /usr/share/sonic/hwsku/linkscan_led_fw.bin
m0 load 0 0x3800 /usr/share/sonic/hwsku/custom_led.bin
#led auto on
led start

View File

@ -0,0 +1,442 @@
{
"GLOBAL_MEDIA_SETTINGS": {
"1-32": {
"QSFP28-40GBASE-CR4-1M":{
"preemphasis": {
"lane0":"0x16440A",
"lane1":"0x16440A",
"lane2":"0x16440A",
"lane3":"0x16440A"
}
},
"QSFP28-40GBASE-CR4-2M":{
"preemphasis": {
"lane0":"0x18420A",
"lane1":"0x18420A",
"lane2":"0x18420A",
"lane3":"0x18420A"
}
},
"QSFP28-40GBASE-CR4-3M":{
"preemphasis": {
"lane0":"0x1A400A",
"lane1":"0x1A400A",
"lane2":"0x1A400A",
"lane3":"0x1A400A"
}
},
"QSFP28-40GBASE-CR4-4M":{
"preemphasis": {
"lane0":"0x1A400A",
"lane1":"0x1A400A",
"lane2":"0x1A400A",
"lane3":"0x1A400A"
}
},
"QSFP28-40GBASE-CR4-5M":{
"preemphasis": {
"lane0":"0x1A400A",
"lane1":"0x1A400A",
"lane2":"0x1A400A",
"lane3":"0x1A400A"
}
},
"QSFP28-40GBASE-CR4-7M":{
"preemphasis": {
"lane0":"0x1A400A",
"lane1":"0x1A400A",
"lane2":"0x1A400A",
"lane3":"0x1A400A"
}
},
"QSFP28-40GBASE-CR4-10M":{
"preemphasis": {
"lane0":"0x1A400A",
"lane1":"0x1A400A",
"lane2":"0x1A400A",
"lane3":"0x1A400A"
}
},
"QSFP+-40GBASE-CR4-1M":{
"preemphasis": {
"lane0":"0x16440A",
"lane1":"0x16440A",
"lane2":"0x16440A",
"lane3":"0x16440A"
}
},
"QSFP+-40GBASE-CR4-2M":{
"preemphasis": {
"lane0":"0x18420A",
"lane1":"0x18420A",
"lane2":"0x18420A",
"lane3":"0x18420A"
}
},
"QSFP+-40GBASE-CR4-3M":{
"preemphasis": {
"lane0":"0x1A400A",
"lane1":"0x1A400A",
"lane2":"0x1A400A",
"lane3":"0x1A400A"
}
},
"QSFP+-40GBASE-CR4-4M":{
"preemphasis": {
"lane0":"0x1A400A",
"lane1":"0x1A400A",
"lane2":"0x1A400A",
"lane3":"0x1A400A"
}
},
"QSFP+-40GBASE-CR4-5M":{
"preemphasis": {
"lane0":"0x1A400A",
"lane1":"0x1A400A",
"lane2":"0x1A400A",
"lane3":"0x1A400A"
}
},
"QSFP+-40GBASE-CR4-7M":{
"preemphasis": {
"lane0":"0x1A400A",
"lane1":"0x1A400A",
"lane2":"0x1A400A",
"lane3":"0x1A400A"
}
},
"QSFP+-40GBASE-CR4-10M":{
"preemphasis": {
"lane0":"0x1A400A",
"lane1":"0x1A400A",
"lane2":"0x1A400A",
"lane3":"0x1A400A"
}
}
}
},
"PORT_MEDIA_SETTINGS": {
"1": {
"Default": {
"preemphasis": {
"lane0":"0x164509",
"lane1":"0x164509",
"lane2":"0x164509",
"lane3":"0x164509"
}
}
},
"2": {
"Default": {
"preemphasis": {
"lane0":"0x164509",
"lane1":"0x164509",
"lane2":"0x164509",
"lane3":"0x164509"
}
}
},
"3": {
"Default": {
"preemphasis": {
"lane0":"0x144808",
"lane1":"0x144808",
"lane2":"0x144808",
"lane3":"0x144808"
}
}
},
"4": {
"Default": {
"preemphasis": {
"lane0":"0x144808",
"lane1":"0x144808",
"lane2":"0x144808",
"lane3":"0x144808"
}
}
},
"5": {
"Default": {
"preemphasis": {
"lane0":"0x144808",
"lane1":"0x144808",
"lane2":"0x144808",
"lane3":"0x144808"
}
}
},
"6": {
"Default": {
"preemphasis": {
"lane0":"0x124A08",
"lane1":"0x124A08",
"lane2":"0x124A08",
"lane3":"0x124A08"
}
}
},
"7": {
"Default": {
"preemphasis": {
"lane0":"0x124A08",
"lane1":"0x124A08",
"lane2":"0x124A08",
"lane3":"0x124A08"
}
}
},
"8": {
"Default": {
"preemphasis": {
"lane0":"0x124A08",
"lane1":"0x124A08",
"lane2":"0x124A08",
"lane3":"0x124A08"
}
}
},
"9": {
"Default": {
"preemphasis": {
"lane0":"0x124A08",
"lane1":"0x124A08",
"lane2":"0x124A08",
"lane3":"0x124A08"
}
}
},
"10": {
"Default": {
"preemphasis": {
"lane0":"0x124A08",
"lane1":"0x124A08",
"lane2":"0x124A08",
"lane3":"0x124A08"
}
}
},
"11": {
"Default": {
"preemphasis": {
"lane0":"0x124A08",
"lane1":"0x124A08",
"lane2":"0x124A08",
"lane3":"0x124A08"
}
}
},
"12": {
"Default": {
"preemphasis": {
"lane0":"0x124A08",
"lane1":"0x124A08",
"lane2":"0x124A08",
"lane3":"0x124A08"
}
}
},
"13": {
"Default": {
"preemphasis": {
"lane0":"0x124A08",
"lane1":"0x124A08",
"lane2":"0x124A08",
"lane3":"0x124A08"
}
}
},
"14": {
"Default": {
"preemphasis": {
"lane0":"0x124A08",
"lane1":"0x124A08",
"lane2":"0x124A08",
"lane3":"0x124A08"
}
}
},
"15": {
"Default": {
"preemphasis": {
"lane0":"0x0E4E08",
"lane1":"0x0E4E08",
"lane2":"0x0E4E08",
"lane3":"0x0E4E08"
}
}
},
"16": {
"Default": {
"preemphasis": {
"lane0":"0x124A08",
"lane1":"0x124A08",
"lane2":"0x124A08",
"lane3":"0x124A08"
}
}
},
"17": {
"Default": {
"preemphasis": {
"lane0":"0x0E4E08",
"lane1":"0x0E4E08",
"lane2":"0x0E4E08",
"lane3":"0x0E4E08"
}
}
},
"18": {
"Default": {
"preemphasis": {
"lane0":"0x0E4E08",
"lane1":"0x0E4E08",
"lane2":"0x0E4E08",
"lane3":"0x0E4E08"
}
}
},
"19": {
"Default": {
"preemphasis": {
"lane0":"0x0E4E08",
"lane1":"0x0E4E08",
"lane2":"0x0E4E08",
"lane3":"0x0E4E08"
}
}
},
"20": {
"Default": {
"preemphasis": {
"lane0":"0x0E4E08",
"lane1":"0x0E4E08",
"lane2":"0x0E4E08",
"lane3":"0x0E4E08"
}
}
},
"21": {
"Default": {
"preemphasis": {
"lane0":"0x124A08",
"lane1":"0x124A08",
"lane2":"0x124A08",
"lane3":"0x124A08"
}
}
},
"22": {
"Default": {
"preemphasis": {
"lane0":"0x124A08",
"lane1":"0x124A08",
"lane2":"0x124A08",
"lane3":"0x124A08"
}
}
},
"23": {
"Default": {
"preemphasis": {
"lane0":"0x124A08",
"lane1":"0x124A08",
"lane2":"0x124A08",
"lane3":"0x124A08"
}
}
},
"24": {
"Default": {
"preemphasis": {
"lane0":"0x124A08",
"lane1":"0x124A08",
"lane2":"0x124A08",
"lane3":"0x124A08"
}
}
},
"25": {
"Default": {
"preemphasis": {
"lane0":"0x124A08",
"lane1":"0x124A08",
"lane2":"0x124A08",
"lane3":"0x124A08"
}
}
},
"26": {
"Default": {
"preemphasis": {
"lane0":"0x124A08",
"lane1":"0x124A08",
"lane2":"0x124A08",
"lane3":"0x124A08"
}
}
},
"27": {
"Default": {
"preemphasis": {
"lane0":"0x124A08",
"lane1":"0x124A08",
"lane2":"0x124A08",
"lane3":"0x124A08"
}
}
},
"28": {
"Default": {
"preemphasis": {
"lane0":"0x124A08",
"lane1":"0x124A08",
"lane2":"0x124A08",
"lane3":"0x124A08"
}
}
},
"29": {
"Default": {
"preemphasis": {
"lane0":"0x124A08",
"lane1":"0x124A08",
"lane2":"0x124A08",
"lane3":"0x124A08"
}
}
},
"30": {
"Default": {
"preemphasis": {
"lane0":"0x144808",
"lane1":"0x144808",
"lane2":"0x144808",
"lane3":"0x144808"
}
}
},
"31": {
"Default": {
"preemphasis": {
"lane0":"0x144808",
"lane1":"0x144808",
"lane2":"0x144808",
"lane3":"0x144808"
}
}
},
"32": {
"Default": {
"preemphasis": {
"lane0":"0x144808",
"lane1":"0x144808",
"lane2":"0x144808",
"lane3":"0x144808"
}
}
}
}
}

View File

@ -0,0 +1,22 @@
#!/usr/bin/env python
#############################################################################
# DellEMC S5232f
#
# Platform and model specific eeprom subclass, inherits from the base class,
# and provides the followings:
# - the eeprom format definition
# - specific encoder/decoder if there is special need
#############################################################################
try:
from sonic_eeprom import eeprom_tlvinfo
except ImportError, e:
raise ImportError (str(e) + "- required module not found")
class board(eeprom_tlvinfo.TlvInfoDecoder):
def __init__(self, name, path, cpld_root, ro):
self.eeprom_path = "/sys/class/i2c-adapter/i2c-0/0-0050/eeprom"
super(board, self).__init__(self.eeprom_path, 0, '', True)

View File

@ -0,0 +1,97 @@
#
# psuutil.py
# Platform-specific PSU status interface for SONiC
#
import os.path
import logging
import commands
S5232F_MAX_PSUS = 2
IPMI_SENSOR_DATA = "docker exec -it pmon ipmitool sdr list"
PSU_PRESENCE = "PSU{0}_state"
# Use this for older firmware
# PSU_PRESENCE="PSU{0}_prsnt"
ipmi_sdr_list = ""
try:
from sonic_psu.psu_base import PsuBase
except ImportError as e:
raise ImportError(str(e) + "- required module not found")
class PsuUtil(PsuBase):
"""Platform-specific PSUutil class"""
def __init__(self):
PsuBase.__init__(self)
# Fetch a BMC register
def get_pmc_register(self, reg_name):
status = 1
global ipmi_sdr_list
ipmi_dev_node = "/dev/pmi0"
ipmi_cmd = IPMI_SENSOR_DATA
status, ipmi_sdr_list = commands.getstatusoutput(ipmi_cmd)
if status:
logging.error('Failed to execute:' + ipmi_sdr_list)
sys.exit(0)
for item in ipmi_sdr_list.split("\n"):
if reg_name in item:
output = item.strip()
if not output:
print('\nFailed to fetch: ' + reg_name + ' sensor ')
sys.exit(0)
output = output.split('|')[1]
logging.basicConfig(level=logging.DEBUG)
return output
def get_num_psus(self):
"""
Retrieves the number of PSUs available on the device
:return: An integer, the number of PSUs available on the device
"""
S5232F_MAX_PSUS = 2
return S5232F_MAX_PSUS
def get_psu_status(self, index):
"""
Retrieves the oprational status of power supply unit (PSU) defined
by index <index>
:param index: An integer, index of the PSU of which to query status
:return: Boolean, True if PSU is operating properly, False if PSU is\
faulty
"""
#Until psu_status is implemented this is hardcoded temporarily
status = 1
return status
def get_psu_presence(self, index):
"""
Retrieves the presence status of power supply unit (PSU) defined
by index <index>
:param index: An integer, index of the PSU of which to query status
:return: Boolean, True if PSU is plugged, False if not
"""
status = 0
psu_reg_name = PSU_PRESENCE.format(index)
psu_status = int(self.get_pmc_register(psu_reg_name),16)
if (psu_status != 'ERR'):
# Check for PSU presence
if (psu_status):
status = 1
return status

View File

@ -0,0 +1,227 @@
# sfputil.py
#
# Platform-specific SFP transceiver interface for SONiC
#
try:
import struct
import sys
import getopt
import time
from sonic_sfp.sfputilbase import SfpUtilBase
from os import *
from mmap import *
except ImportError as e:
raise ImportError("%s - required module not found" % str(e))
class SfpUtil(SfpUtilBase):
"""Platform-specific SfpUtil class"""
PORT_START = 1
PORT_END = 64
PORTS_IN_BLOCK = 64
BASE_RES_PATH = "/sys/bus/pci/devices/0000:04:00.0/resource0"
_port_to_eeprom_mapping = {}
_global_port_pres_dict = {}
@property
def port_start(self):
return self.PORT_START
@property
def port_end(self):
return self.PORT_END
@property
def qsfp_ports(self):
return range(self.PORT_START, self.PORTS_IN_BLOCK + 1)
@property
def port_to_eeprom_mapping(self):
return self._port_to_eeprom_mapping
def pci_mem_read(self, mm, offset):
mm.seek(offset)
read_data_stream=mm.read(4)
reg_val=struct.unpack('I',read_data_stream)
mem_val = str(reg_val)[1:-2]
# print "reg_val read:%x"%reg_val
return mem_val
def pci_mem_write(self, mm, offset, data):
mm.seek(offset)
# print "data to write:%x"%data
mm.write(struct.pack('I',data))
def pci_set_value(self, resource, val, offset):
fd = open(resource, O_RDWR)
mm = mmap(fd, 0)
val = self.pci_mem_write(mm, offset, val)
mm.close()
close(fd)
return val
def pci_get_value(self, resource, offset):
fd = open(resource, O_RDWR)
mm = mmap(fd, 0)
val = self.pci_mem_read(mm, offset)
mm.close()
close(fd)
return val
def init_global_port_presence(self):
for port_num in range(self.port_start, (self.port_end + 1)):
presence = self.get_presence(port_num)
if(presence):
self._global_port_pres_dict[port_num] = '1'
else:
self._global_port_pres_dict[port_num] = '0'
def __init__(self):
eeprom_path = "/sys/class/i2c-adapter/i2c-{0}/{0}-0050/eeprom"
for x in range(self.port_start, self.port_end + 1):
port_num = x + 1
self.port_to_eeprom_mapping[x] = eeprom_path.format(
port_num)
port_num = 0
self.init_global_port_presence()
SfpUtilBase.__init__(self)
def get_presence(self, port_num):
# Check for invalid port_num
if port_num < self.port_start or port_num > self.port_end:
return False
# Port offset starts with 0x4004
port_offset = 16388 + ((port_num-1) * 16)
status = self.pci_get_value(self.BASE_RES_PATH, port_offset)
reg_value = int(status)
# Absence of status throws error
if (reg_value == "" ):
return False
# Mask off 4th bit for presence
mask = (1 << 4)
# ModPrsL is active low
if reg_value & mask == 0:
return True
return False
def get_low_power_mode(self, port_num):
# Check for invalid port_num
if port_num < self.port_start or port_num > self.port_end:
return False
# Port offset starts with 0x4000
port_offset = 16384 + ((port_num-1) * 16)
status = self.pci_get_value(self.BASE_RES_PATH, port_offset)
reg_value = int(status)
# Absence of status throws error
if (reg_value == "" ):
return False
# Mask off 4th bit for presence
mask = (1 << 6)
# LPMode is active high
if reg_value & mask == 0:
return False
return True
def set_low_power_mode(self, port_num, lpmode):
# Check for invalid port_num
if port_num < self.port_start or port_num > self.port_end:
return False
# Port offset starts with 0x4000
port_offset = 16384 + ((port_num-1) * 16)
status = self.pci_get_value(self.BASE_RES_PATH, port_offset)
reg_value = int(status)
# Absence of status throws error
if (reg_value == "" ):
return False
# Mask off 4th bit for presence
mask = (1 << 6)
# LPMode is active high; set or clear the bit accordingly
if lpmode is True:
reg_value = reg_value | mask
else:
reg_value = reg_value & ~mask
# Convert our register value back to a hex string and write back
status = self.pci_set_value(self.BASE_RES_PATH, reg_value, port_offset)
return True
def reset(self, port_num):
# Check for invalid port_num
if port_num < self.port_start or port_num > self.port_end:
return False
# Port offset starts with 0x4000
port_offset = 16384 + ((port_num-1) * 16)
status = self.pci_get_value(self.BASE_RES_PATH, port_offset)
reg_value = int(status)
# Absence of status throws error
if (reg_value == "" ):
return False
# Mask off 4th bit for presence
mask = (1 << 6)
# ResetL is active low
reg_value = reg_value & ~mask
# Convert our register value back to a hex string and write back
status = self.pci_set_value(self.BASE_RES_PATH, reg_value, port_offset)
# Sleep 1 second to allow it to settle
time.sleep(1)
reg_value = reg_value | mask
# Convert our register value back to a hex string and write back
status = self.pci_set_value(self.BASE_RES_PATH, reg_value, port_offset)
return True
def get_transceiver_change_event(self):
port_dict = {}
while True:
for port_num in range(self.port_start, (self.port_end + 1)):
presence = self.get_presence(port_num)
if(presence and self._global_port_pres_dict[port_num] == '0'):
self._global_port_pres_dict[port_num] = '1'
port_dict[port_num] = '1'
elif(not presence and
self._global_port_pres_dict[port_num] == '1'):
self._global_port_pres_dict[port_num] = '0'
port_dict[port_num] = '0'
if(len(port_dict) > 0):
return True, port_dict
time.sleep(0.5)

View File

@ -7,10 +7,12 @@
import os.path
import logging
import commands
import sys
Z9264F_MAX_PSUS = 2
IPMI_SENSOR_DATA = "docker exec -it pmon ipmitool sdr list"
IPMI_PSU_DATA = "docker exec -it pmon ipmitool sdr list"
IPMI_PSU_DATA_DOCKER = "ipmitool sdr list"
PSU_PRESENCE = "PSU{0}_state"
# Use this for older firmware
# PSU_PRESENCE="PSU{0}_prsnt"
@ -29,14 +31,24 @@ class PsuUtil(PsuBase):
def __init__(self):
PsuBase.__init__(self)
def isDockerEnv(self):
num_docker = open('/proc/self/cgroup', 'r').read().count(":/docker")
if num_docker > 0:
return True
else:
return False
# Fetch a BMC register
def get_pmc_register(self, reg_name):
status = 1
global ipmi_sdr_list
ipmi_dev_node = "/dev/pmi0"
ipmi_cmd = IPMI_PSU_DATA
dockerenv = self.isDockerEnv()
if dockerenv == True:
ipmi_cmd = IPMI_PSU_DATA_DOCKER
ipmi_cmd = IPMI_SENSOR_DATA
status, ipmi_sdr_list = commands.getstatusoutput(ipmi_cmd)
if status:
@ -48,7 +60,7 @@ class PsuUtil(PsuBase):
output = item.strip()
if not output:
print('\nFailed to fetch: ' + reg_name + ' sensor ')
print('\nFailed to fetch: ' + reg_name + ' sensor ')
sys.exit(0)
output = output.split('|')[1]
@ -56,8 +68,6 @@ class PsuUtil(PsuBase):
logging.basicConfig(level=logging.DEBUG)
return output
def get_num_psus(self):
"""
Retrieves the number of PSUs available on the device
@ -74,11 +84,10 @@ class PsuUtil(PsuBase):
:return: Boolean, True if PSU is operating properly, False if PSU is\
faulty
"""
#Until psu_status is implemented this is hardcoded temporarily
# Until psu_status is implemented this is hardcoded temporarily
status = 1
return status
def get_psu_presence(self, index):
"""
@ -89,9 +98,10 @@ class PsuUtil(PsuBase):
"""
status = 0
psu_reg_name = PSU_PRESENCE.format(index)
psu_status = int(self.get_pmc_register(psu_reg_name),16)
psu_status = int(self.get_pmc_register(psu_reg_name), 16)
if (psu_status != 'ERR'):
# Check for PSU presence
if (psu_status):
status = 1
return status

View File

@ -10,6 +10,11 @@ try:
except ImportError as e:
raise ImportError("%s - required module not found" % str(e))
# sfp supports dom
XCVR_DOM_CAPABILITY_DOM_SUPPORT_BIT = 0x40
# I2C page size for sfp
SFP_I2C_PAGE_SIZE = 256
# parameters for DB connection
REDIS_HOSTNAME = "localhost"
REDIS_PORT = 6379
@ -464,7 +469,7 @@ class SfpUtil(SfpUtilBase):
else:
return transceiver_dom_info_dict
dom_voltage_raw = self._read_eeprom_specific_bytes_via_ethtool(port_num, (offset + QSFP_VLOT_OFFSET), QSFP_VOLT_WIDTH)
dom_voltage_raw = self._read_eeprom_specific_bytes_via_ethtool(port_num, (offset + QSFP_VOLT_OFFSET), QSFP_VOLT_WIDTH)
if dom_voltage_raw is not None:
dom_voltage_data = sfpd_obj.parse_voltage(dom_voltage_raw, 0)
else:
@ -514,14 +519,19 @@ class SfpUtil(SfpUtilBase):
transceiver_dom_info_dict['tx4bias'] = dom_channel_monitor_data['data']['TX4Bias']['value']
else:
offset = 256
offset = SFP_I2C_PAGE_SIZE
eeprom_raw = ['0'] * 256
eeprom_raw[92:92+16] = self._read_eeprom_specific_bytes_via_ethtool(port_num, 92, 16)
eeprom_raw = ['0'] * SFP_I2C_PAGE_SIZE
eeprom_raw[XCVR_DOM_CAPABILITY_OFFSET : XCVR_DOM_CAPABILITY_OFFSET + XCVR_DOM_CAPABILITY_WIDTH] = \
self._read_eeprom_specific_bytes_via_ethtool(port_num, XCVR_DOM_CAPABILITY_OFFSET, XCVR_DOM_CAPABILITY_WIDTH)
sfp_obj = sff8472InterfaceId()
calibration_type = sfp_obj._get_calibration_type(eeprom_raw)
eeprom_domraw = self._read_eeprom_specific_bytes_via_ethtool(port_num, offset, 256)
dom_supported = (int(eeprom_raw[XCVR_DOM_CAPABILITY_OFFSET], 16) & XCVR_DOM_CAPABILITY_DOM_SUPPORT_BIT != 0)
if not dom_supported:
return transceiver_dom_info_dict
eeprom_domraw = self._read_eeprom_specific_bytes_via_ethtool(port_num, offset, SFP_I2C_PAGE_SIZE)
if eeprom_domraw is None:
return transceiver_dom_info_dict
@ -533,7 +543,7 @@ class SfpUtil(SfpUtilBase):
dom_temperature_raw = eeprom_domraw[SFP_TEMPE_OFFSET:SFP_TEMPE_OFFSET+SFP_TEMPE_WIDTH]
dom_temperature_data = sfpd_obj.parse_temperature(dom_temperature_raw, 0)
dom_voltage_raw = eeprom_domraw[SFP_VLOT_OFFSET:SFP_VLOT_OFFSET+SFP_VOLT_WIDTH]
dom_voltage_raw = eeprom_domraw[SFP_VOLT_OFFSET:SFP_VOLT_OFFSET+SFP_VOLT_WIDTH]
dom_voltage_data = sfpd_obj.parse_voltage(dom_voltage_raw, 0)
dom_channel_monitor_raw = eeprom_domraw[SFP_CHANNL_MON_OFFSET:SFP_CHANNL_MON_OFFSET+SFP_CHANNL_MON_WIDTH]

View File

@ -1,7 +1,7 @@
{% set default_cable = '5m' %}
{% set ingress_lossless_pool_size = '8224768' %}
{% set ingress_lossy_pool_size = '8224768' %}
{% set egress_lossless_pool_size = '38797200' %}
{% set egress_lossless_pool_size = '35966016' %}
{% set egress_lossy_pool_size = '8224768' %}
{%- macro generate_port_lists(PORT_ALL) %}

View File

@ -1,7 +1,7 @@
{% set default_cable = '5m' %}
{% set ingress_lossless_pool_size = '12042240' %}
{% set ingress_lossy_pool_size = '12042240' %}
{% set egress_lossless_pool_size = '38797200' %}
{% set egress_lossless_pool_size = '35966016' %}
{% set egress_lossy_pool_size = '12042240' %}
{%- macro generate_port_lists(PORT_ALL) %}

View File

@ -53,13 +53,6 @@ RUN apt-get -y purge \
{{ install_debian_packages(docker_base_stretch_debs.split(' ')) }}
{%- endif %}
{% if docker_base_stretch_dbgs.strip() -%}
# Install common debug-packages
RUN apt-get -y install docker_base_stretch_dbgs.split(' ') | join(' ')
{% else %}
RUN ln /usr/bin/vim.tiny /usr/bin/vim
{%- endif %}
# Clean up apt
# Remove /var/lib/apt/lists/*, could be obsoleted for derived images
RUN apt-get clean -y && \

View File

@ -28,6 +28,7 @@ RUN apt-get clean -y && \
s/^logfile .*$/logfile ""/; \
s/^# syslog-enabled no$/syslog-enabled no/; \
s/^# unixsocket/unixsocket/; \
s/redis-server.sock/redis.sock/g; \
s/^client-output-buffer-limit pubsub [0-9]+mb [0-9]+mb [0-9]+/client-output-buffer-limit pubsub 0 0 0/ \
' /etc/redis/redis.conf

View File

@ -0,0 +1,135 @@
{% if DEVICE_METADATA['localhost'].has_key('bgp_asn') %}
{% block bgp_init %}
!
! bgp multiple-instance
!
route-map FROM_BGP_SPEAKER_V4 permit 10
!
route-map TO_BGP_SPEAKER_V4 deny 10
!
router bgp {{ DEVICE_METADATA['localhost']['bgp_asn'] }}
bgp log-neighbor-changes
bgp bestpath as-path multipath-relax
no bgp default ipv4-unicast
bgp graceful-restart restart-time 240
bgp graceful-restart
{% if DEVICE_METADATA['localhost']['type'] == 'ToRRouter' %}
bgp graceful-restart preserve-fw-state
{% endif %}
{% for (name, prefix) in LOOPBACK_INTERFACE|pfx_filter %}
{% if prefix | ipv4 and name == 'Loopback0' %}
bgp router-id {{ prefix | ip }}
{% endif %}
{% endfor %}
{# advertise loopback #}
{% for (name, prefix) in LOOPBACK_INTERFACE|pfx_filter %}
{% if prefix | ipv4 and name == 'Loopback0' %}
network {{ prefix | ip }}/32
{% elif prefix | ipv6 and name == 'Loopback0' %}
address-family ipv6
network {{ prefix | ip }}/64
exit-address-family
{% endif %}
{% endfor %}
{% endblock bgp_init %}
{% endif %}
{% block vlan_advertisement %}
{% for (name, prefix) in VLAN_INTERFACE|pfx_filter %}
{% if prefix | ipv4 %}
network {{ prefix }}
{% elif prefix | ipv6 %}
address-family ipv6
network {{ prefix }}
exit-address-family
{% endif %}
{% endfor %}
{% endblock vlan_advertisement %}
{% block bgp_sessions %}
{% for neighbor_addr, bgp_session in BGP_NEIGHBOR.iteritems() %}
{% if bgp_session['asn'] | int != 0 %}
neighbor {{ neighbor_addr }} remote-as {{ bgp_session['asn'] }}
neighbor {{ neighbor_addr }} description {{ bgp_session['name'] }}
{# set the bgp neighbor timers if they have not default values #}
{% if (bgp_session['keepalive'] is defined and bgp_session['keepalive'] | int != 60)
or (bgp_session['holdtime'] is defined and bgp_session['holdtime'] | int != 180) %}
neighbor {{ neighbor_addr }} timers {{ bgp_session['keepalive'] }} {{ bgp_session['holdtime'] }}
{% endif %}
{% if bgp_session.has_key('admin_status') and bgp_session['admin_status'] == 'down' or not bgp_session.has_key('admin_status') and DEVICE_METADATA['localhost'].has_key('default_bgp_status') and DEVICE_METADATA['localhost']['default_bgp_status'] == 'down' %}
neighbor {{ neighbor_addr }} shutdown
{% endif %}
{% if neighbor_addr | ipv4 %}
address-family ipv4
{% if DEVICE_METADATA['localhost']['type'] == 'ToRRouter' %}
neighbor {{ neighbor_addr }} allowas-in 1
{% endif %}
neighbor {{ neighbor_addr }} activate
neighbor {{ neighbor_addr }} soft-reconfiguration inbound
{% if bgp_session['rrclient'] | int != 0 %}
neighbor {{ neighbor_addr }} route-reflector-client
{% endif %}
{% if bgp_session['nhopself'] | int != 0 %}
neighbor {{ neighbor_addr }} next-hop-self
{% endif %}
maximum-paths 64
exit-address-family
{% endif %}
{% if neighbor_addr | ipv6 %}
address-family ipv6
{% if DEVICE_METADATA['localhost']['type'] == 'ToRRouter' %}
neighbor {{ neighbor_addr }} allowas-in 1
{% endif %}
neighbor {{ neighbor_addr }} activate
neighbor {{ neighbor_addr }} soft-reconfiguration inbound
{% if bgp_session['rrclient'] | int != 0 %}
neighbor {{ neighbor_addr }} route-reflector-client
{% endif %}
{% if bgp_session['nhopself'] | int != 0 %}
neighbor {{ neighbor_addr }} next-hop-self
{% endif %}
{% if bgp_session['asn'] != DEVICE_METADATA['localhost']['bgp_asn'] %}
neighbor {{ neighbor_addr }} route-map set-next-hop-global-v6 in
{% endif %}
maximum-paths 64
exit-address-family
{% endif %}
{% endif %}
{% endfor %}
{% endblock bgp_sessions %}
{% block bgp_peers_with_range %}
{% if BGP_PEER_RANGE %}
{% for bgp_peer in BGP_PEER_RANGE.values() %}
neighbor {{ bgp_peer['name'] }} peer-group
neighbor {{ bgp_peer['name'] }} passive
{% if bgp_peer['peer_asn'] is defined %}
neighbor {{ bgp_peer['name'] }} remote-as {{ bgp_peer['peer_asn'] }}
{% else %}
neighbor {{ bgp_peer['name'] }} remote-as {{ deployment_id_asn_map[DEVICE_METADATA['localhost']['deployment_id']] }}
{% endif %}
neighbor {{ bgp_peer['name'] }} ebgp-multihop 255
neighbor {{ bgp_peer['name'] }} soft-reconfiguration inbound
{% if bgp_peer['src_address'] is defined %}
neighbor {{ bgp_peer['name'] }} update-source {{ bgp_peer['src_address'] | ip }}
{% else %}
{% for (name, prefix) in LOOPBACK_INTERFACE|pfx_filter %}
{% if name == 'Loopback1' %}
neighbor {{ bgp_peer['name'] }} update-source {{ prefix | ip }}
{% endif %}
{% endfor %}
{% endif %}
neighbor {{ bgp_peer['name'] }} route-map FROM_BGP_SPEAKER_V4 in
neighbor {{ bgp_peer['name'] }} route-map TO_BGP_SPEAKER_V4 out
{% for ip_range in bgp_peer['ip_range'] %}
bgp listen range {{ip_range}} peer-group {{ bgp_peer['name'] }}
{% endfor %}
address-family ipv4
neighbor {{ bgp_peer['name'] }} activate
maximum-paths 64
exit-address-family
address-family ipv6
neighbor {{ bgp_peer['name'] }} activate
maximum-paths 64
exit-address-family
{% endfor %}
{% endif %}
{% endblock bgp_peers_with_range %}
!

View File

@ -15,140 +15,11 @@ agentx
! enable password {# {{ en_passwd }} TODO: param needed #}
{% endblock system_init %}
!
{% if DEVICE_METADATA['localhost'].has_key('bgp_asn') %}
{% block bgp_init %}
!
! bgp multiple-instance
!
route-map FROM_BGP_SPEAKER_V4 permit 10
!
route-map TO_BGP_SPEAKER_V4 deny 10
!
router bgp {{ DEVICE_METADATA['localhost']['bgp_asn'] }}
bgp log-neighbor-changes
bgp bestpath as-path multipath-relax
no bgp default ipv4-unicast
bgp graceful-restart restart-time 240
bgp graceful-restart
{% if DEVICE_METADATA['localhost']['type'] == 'ToRRouter' %}
bgp graceful-restart preserve-fw-state
{% if DEVICE_METADATA['localhost']['type'] == "SpineChassisFrontendRouter" %}
{% include "bgpd.conf.spine_chassis_frontend_router.j2" %}
{% else%}
{% include "bgpd.conf.default.j2" %}
{% endif %}
{% for (name, prefix) in LOOPBACK_INTERFACE|pfx_filter %}
{% if prefix | ipv4 and name == 'Loopback0' %}
bgp router-id {{ prefix | ip }}
{% endif %}
{% endfor %}
{# advertise loopback #}
{% for (name, prefix) in LOOPBACK_INTERFACE|pfx_filter %}
{% if prefix | ipv4 and name == 'Loopback0' %}
network {{ prefix | ip }}/32
{% elif prefix | ipv6 and name == 'Loopback0' %}
address-family ipv6
network {{ prefix | ip }}/64
exit-address-family
{% endif %}
{% endfor %}
{% endblock bgp_init %}
{% endif %}
{% block vlan_advertisement %}
{% for (name, prefix) in VLAN_INTERFACE|pfx_filter %}
{% if prefix | ipv4 %}
network {{ prefix }}
{% elif prefix | ipv6 %}
address-family ipv6
network {{ prefix }}
exit-address-family
{% endif %}
{% endfor %}
{% endblock vlan_advertisement %}
{% block bgp_sessions %}
{% for neighbor_addr, bgp_session in BGP_NEIGHBOR.iteritems() %}
{% if bgp_session['asn'] | int != 0 %}
neighbor {{ neighbor_addr }} remote-as {{ bgp_session['asn'] }}
neighbor {{ neighbor_addr }} description {{ bgp_session['name'] }}
{# set the bgp neighbor timers if they have not default values #}
{% if (bgp_session['keepalive'] is defined and bgp_session['keepalive'] | int != 60)
or (bgp_session['holdtime'] is defined and bgp_session['holdtime'] | int != 180) %}
neighbor {{ neighbor_addr }} timers {{ bgp_session['keepalive'] }} {{ bgp_session['holdtime'] }}
{% endif %}
{% if bgp_session.has_key('admin_status') and bgp_session['admin_status'] == 'down' or not bgp_session.has_key('admin_status') and DEVICE_METADATA['localhost'].has_key('default_bgp_status') and DEVICE_METADATA['localhost']['default_bgp_status'] == 'down' %}
neighbor {{ neighbor_addr }} shutdown
{% endif %}
{% if neighbor_addr | ipv4 %}
address-family ipv4
{% if DEVICE_METADATA['localhost']['type'] == 'ToRRouter' %}
neighbor {{ neighbor_addr }} allowas-in 1
{% endif %}
neighbor {{ neighbor_addr }} activate
neighbor {{ neighbor_addr }} soft-reconfiguration inbound
{% if bgp_session['rrclient'] | int != 0 %}
neighbor {{ neighbor_addr }} route-reflector-client
{% endif %}
{% if bgp_session['nhopself'] | int != 0 %}
neighbor {{ neighbor_addr }} next-hop-self
{% endif %}
maximum-paths 64
exit-address-family
{% endif %}
{% if neighbor_addr | ipv6 %}
address-family ipv6
{% if DEVICE_METADATA['localhost']['type'] == 'ToRRouter' %}
neighbor {{ neighbor_addr }} allowas-in 1
{% endif %}
neighbor {{ neighbor_addr }} activate
neighbor {{ neighbor_addr }} soft-reconfiguration inbound
{% if bgp_session['rrclient'] | int != 0 %}
neighbor {{ neighbor_addr }} route-reflector-client
{% endif %}
{% if bgp_session['nhopself'] | int != 0 %}
neighbor {{ neighbor_addr }} next-hop-self
{% endif %}
{% if bgp_session['asn'] != DEVICE_METADATA['localhost']['bgp_asn'] %}
neighbor {{ neighbor_addr }} route-map set-next-hop-global-v6 in
{% endif %}
maximum-paths 64
exit-address-family
{% endif %}
{% endif %}
{% endfor %}
{% endblock bgp_sessions %}
{% block bgp_peers_with_range %}
{% if BGP_PEER_RANGE %}
{% for bgp_peer in BGP_PEER_RANGE.values() %}
neighbor {{ bgp_peer['name'] }} peer-group
neighbor {{ bgp_peer['name'] }} passive
{% if bgp_peer['peer_asn'] is defined %}
neighbor {{ bgp_peer['name'] }} remote-as {{ bgp_peer['peer_asn'] }}
{% else %}
neighbor {{ bgp_peer['name'] }} remote-as {{ deployment_id_asn_map[DEVICE_METADATA['localhost']['deployment_id']] }}
{% endif %}
neighbor {{ bgp_peer['name'] }} ebgp-multihop 255
neighbor {{ bgp_peer['name'] }} soft-reconfiguration inbound
{% if bgp_peer['src_address'] is defined %}
neighbor {{ bgp_peer['name'] }} update-source {{ bgp_peer['src_address'] | ip }}
{% else %}
{% for (name, prefix) in LOOPBACK_INTERFACE|pfx_filter %}
{% if name == 'Loopback1' %}
neighbor {{ bgp_peer['name'] }} update-source {{ prefix | ip }}
{% endif %}
{% endfor %}
{% endif %}
neighbor {{ bgp_peer['name'] }} route-map FROM_BGP_SPEAKER_V4 in
neighbor {{ bgp_peer['name'] }} route-map TO_BGP_SPEAKER_V4 out
{% for ip_range in bgp_peer['ip_range'] %}
bgp listen range {{ip_range}} peer-group {{ bgp_peer['name'] }}
{% endfor %}
address-family ipv4
neighbor {{ bgp_peer['name'] }} activate
maximum-paths 64
exit-address-family
address-family ipv6
neighbor {{ bgp_peer['name'] }} activate
maximum-paths 64
exit-address-family
{% endfor %}
{% endif %}
{% endblock bgp_peers_with_range %}
!
{% if DEVICE_METADATA['localhost'].has_key('bgp_asn') %}
maximum-paths 64

View File

@ -0,0 +1,128 @@
{# VNET BGP Instance #}
! Vnet BGP instance
{% set interfaces_in_vnets = [] %}
{% block vnet_bgp_instance %}
{% for vnet_name, vnet_metadata in VNET.iteritems() %}
router bgp {{ DEVICE_METADATA['localhost']['bgp_asn'] }} vrf {{ vnet_name }}
no bgp default ipv4-unicast
bgp log-neighbor-changes
bgp bestpath as-path multipath-relax
no bgp default ipv4-unicast
bgp graceful-restart restart-time 240
bgp graceful-restart
{# Router ID #}
{% for (name, prefix) in LOOPBACK_INTERFACE | pfx_filter %}
{% if prefix | ipv4 and name == 'Loopback0' %}
bgp router-id {{ prefix | ip }}
{% endif %}
{% endfor %}
{# Got interfaces that belong this vnet #}
{% set interfaces_in_vnet = [] %}
{% for (key, metadata) in INTERFACE.iteritems() %}
{% if metadata.has_key("vnet_name") and metadata["vnet_name"] == vnet_name %}
{% for (name_prefix_pair, metadata) in INTERFACE.iteritems() %}
{% if key == name_prefix_pair[0] %}
{% if interfaces_in_vnet.append( name_prefix_pair[1] | ip ) %}
{% endif %}
{% if interfaces_in_vnets.append( name_prefix_pair[1] | ip ) %}
{% endif %}
{% endif %}
{% endfor %}
{% endif %}
{% endfor %}
{# Each bgp neighbors #}
{% for neighbor_addr, bgp_session in BGP_NEIGHBOR.iteritems() %}
{% if bgp_session.has_key("local_addr") and bgp_session["local_addr"] in interfaces_in_vnet %}
{% if bgp_session['asn'] | int != 0 %}
neighbor {{ neighbor_addr }} remote-as {{ bgp_session['asn'] }}
neighbor {{ neighbor_addr }} description {{ bgp_session['name'] }}
{# set the bgp neighbor timers if they have not default values #}
{% if (bgp_session['keepalive'] is defined and bgp_session['keepalive'] | int != 60)
or (bgp_session['holdtime'] is defined and bgp_session['holdtime'] | int != 180) %}
neighbor {{ neighbor_addr }} timers {{ bgp_session['keepalive'] }} {{ bgp_session['holdtime'] }}
{% endif %}
{% if bgp_session.has_key('admin_status') and bgp_session['admin_status'] == 'down' or not bgp_session.has_key('admin_status') and DEVICE_METADATA['localhost'].has_key('default_bgp_status') and DEVICE_METADATA['localhost']['default_bgp_status'] == 'down' %}
neighbor {{ neighbor_addr }} shutdown
{% endif %}
{% if neighbor_addr | ipv4 %}
address-family ipv4 unicast
neighbor {{ neighbor_addr }} activate
neighbor {{ neighbor_addr }} soft-reconfiguration inbound
maximum-paths 64
exit-address-family
{% endif %}
address-family l2vpn evpn
advertise ipv4 unicast
exit-address-family
{% endif %}
{% endif %}
{% endfor %}
{% endfor %}
{% endblock vnet_bgp_instance %}
{# default bgp #}
{% block default_bgp_instance %}
{% block bgp_init %}
!
! bgp multiple-instance
!
route-map FROM_BGP_SPEAKER_V4 permit 10
!
route-map TO_BGP_SPEAKER_V4 deny 10
!
router bgp {{ DEVICE_METADATA['localhost']['bgp_asn'] }}
bgp log-neighbor-changes
bgp bestpath as-path multipath-relax
no bgp default ipv4-unicast
bgp graceful-restart restart-time 240
bgp graceful-restart
{% for (name, prefix) in LOOPBACK_INTERFACE | pfx_filter %}
{% if prefix | ipv4 and name == 'Loopback0' %}
bgp router-id {{ prefix | ip }}
{% endif %}
{% endfor %}
{# advertise loopback #}
{% for (name, prefix) in LOOPBACK_INTERFACE | pfx_filter %}
{% if prefix | ipv4 and name == 'Loopback0' %}
network {{ prefix | ip }}/32
{% elif prefix | ipv6 and name == 'Loopback0' %}
address-family ipv6
network {{ prefix | ip }}/64
exit-address-family
{% endif %}
{% endfor %}
{% endblock bgp_init %}
{% block bgp_sessions %}
{% for neighbor_addr, bgp_session in BGP_NEIGHBOR.iteritems() %}
{% if not bgp_session.has_key("local_addr") or bgp_session["local_addr"] not in interfaces_in_vnets %}
{% if bgp_session['asn'] | int != 0 %}
neighbor {{ neighbor_addr }} remote-as {{ bgp_session['asn'] }}
neighbor {{ neighbor_addr }} description {{ bgp_session['name'] }}
{# set the bgp neighbor timers if they have not default values #}
{% if (bgp_session['keepalive'] is defined and bgp_session['keepalive'] | int != 60)
or (bgp_session['holdtime'] is defined and bgp_session['holdtime'] | int != 180) %}
neighbor {{ neighbor_addr }} timers {{ bgp_session['keepalive'] }} {{ bgp_session['holdtime'] }}
{% endif %}
{% if bgp_session.has_key('admin_status') and bgp_session['admin_status'] == 'down' or not bgp_session.has_key('admin_status') and DEVICE_METADATA['localhost'].has_key('default_bgp_status') and DEVICE_METADATA['localhost']['default_bgp_status'] == 'down' %}
neighbor {{ neighbor_addr }} shutdown
{% endif %}
{% if bgp_session["asn"] != DEVICE_METADATA['localhost']['bgp_asn'] %}
{% if neighbor_addr | ipv4 %}
address-family ipv4 unicast
neighbor {{ neighbor_addr }} allowas-in 1
neighbor {{ neighbor_addr }} activate
neighbor {{ neighbor_addr }} soft-reconfiguration inbound
maximum-paths 64
exit-address-family
{% endif %}
{% else %}
address-family l2vpn evpn
neighbor {{ neighbor_addr }} activate
advertise-all-vni
exit-address-family
{% endif %}
{% endif %}
{% endif %}
{% endfor %}
{% endblock bgp_sessions %}
{% endblock default_bgp_instance %}

View File

@ -12,6 +12,16 @@ password zebra
enable password zebra
{% endblock sys_init %}
!
{% block vrf %}
{% if VNET is defined %}
{% for vnet_name, vnet_metadata in VNET.iteritems() %}
vrf {{ vnet_name }}
vni {{ vnet_metadata['vni'] }}
!
{% endfor %}
{% endif %}
{% endblock vrf %}
!
{% block interfaces %}
! Enable link-detect (default disabled)
{% for (name, prefix) in INTERFACE|pfx_filter %}

View File

@ -20,7 +20,11 @@ RUN apt-get update && \
tcpdump \
# Install redis-tools dependencies
# TODO: implicitly install dependencies
libatomic1 \
libjemalloc1 \
liblua5.1-0 \
lua-bitop \
lua-cjson \
libelf1 \
libmnl0 \
bridge-utils

View File

@ -37,6 +37,24 @@ if [ -e /usr/share/sonic/platform/fancontrol ]; then
supervisorctl start fancontrol
fi
# If the sonic-platform package is not installed, try to install it
pip show sonic-platform > /dev/null 2>&1
if [ $? -ne 0 ]; then
SONIC_PLATFORM_WHEEL="/usr/share/sonic/platform/sonic_platform-1.0-py2-none-any.whl"
echo "sonic-platform package not installed, attempting to install..."
if [ -e ${SONIC_PLATFORM_WHEEL} ]; then
pip install ${SONIC_PLATFORM_WHEEL}
if [ $? -eq 0 ]; then
echo "Successfully installed ${SONIC_PLATFORM_WHEEL}"
else
echo "Error: Failed to install ${SONIC_PLATFORM_WHEEL}"
fi
else
echo "Error: Unable to locate ${SONIC_PLATFORM_WHEEL}"
fi
fi
{% if not skip_ledd %}
supervisorctl start ledd
{% endif %}

View File

@ -45,11 +45,8 @@ REST_SERVER_ARGS="-ui /rest_ui -logtostderr"
echo "REST_SERVER_ARGS = $REST_SERVER_ARGS"
#export LIBYANG_EXTENSIONS_PLUGINS_DIR
export CVL_SCHEMA_PATH=/usr/sbin/schema
export LIBYANG_EXTENSIONS_PLUGINS_DIR=/usr/sbin/lib
export LIBYANG_USER_TYPES_PLUGINS_DIR=/usr/sbin/lib
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PATH:/usr/sbin/lib
export LIBYANG_EXTENSIONS_PLUGINS_DIR=/usr/lib/x86_64-linux-gnu/libyang/extensions
export LIBYANG_USER_TYPES_PLUGINS_DIR=/usr/lib/x86_64-linux-gnu/libyang/user_types
exec /usr/sbin/rest_server ${REST_SERVER_ARGS}
#while [ true ]; do sleep 1; done

View File

@ -14,7 +14,11 @@ RUN apt-get update && \
libjansson4 \
# Install redis-tools dependencies
# TODO: implicitly install dependencies
libjemalloc1
libatomic1 \
libjemalloc1 \
liblua5.1-0 \
lua-bitop \
lua-cjson
{% if docker_sonic_telemetry_debs.strip() -%}
# Copy locally-built Debian package dependencies

View File

@ -15,7 +15,11 @@ RUN apt-get update && \
libpython2.7 \
# Install redis-tools dependencies
# TODO: implicitly install dependencies
libjemalloc1
libatomic1 \
libjemalloc1 \
liblua5.1-0 \
lua-bitop \
lua-cjson
{% if docker_teamd_debs.strip() -%}
# Copy locally-built Debian package dependencies

View File

@ -89,6 +89,11 @@ function postStartAction()
if [[ -x /usr/bin/db_migrator.py ]]; then
# Migrate the DB to the latest schema version if needed
/usr/bin/db_migrator.py -o migrate
# Save in memory config_db to config_db.json for 2 reasons:
# 1. Persist the DB migration result.
# 2. Save in memory DB after warm reboot.
/usr/bin/config save -y
fi
{%- elif docker_container_name == "swss" %}
docker exec swss rm -f /ready # remove cruft
@ -170,6 +175,9 @@ start() {
# TODO: Mellanox will remove the --tmpfs exception after SDK socket path changed in new SDK version
{%- endif %}
docker create {{docker_image_run_opt}} \
{%- if install_debug_image == "y" %}
-v /src:/src:ro -v /debug:/debug:rw \
{%- endif %}
{%- if '--log-driver=json-file' in docker_image_run_opt or '--log-driver' not in docker_image_run_opt %}
--log-opt max-size=2M --log-opt max-file=5 \
{%- endif %}

View File

@ -226,6 +226,11 @@ sudo cp $IMAGE_CONFIGS/caclmgrd/caclmgrd.service $FILESYSTEM_ROOT/etc/systemd/s
sudo LANG=C chroot $FILESYSTEM_ROOT systemctl enable caclmgrd.service
sudo cp $IMAGE_CONFIGS/caclmgrd/caclmgrd $FILESYSTEM_ROOT/usr/bin/
# Copy process-reboot-cause service files
sudo cp $IMAGE_CONFIGS/process-reboot-cause/process-reboot-cause.service $FILESYSTEM_ROOT/etc/systemd/system/
sudo LANG=C chroot $FILESYSTEM_ROOT systemctl enable process-reboot-cause.service
sudo cp $IMAGE_CONFIGS/process-reboot-cause/process-reboot-cause $FILESYSTEM_ROOT/usr/bin/
## Install package without starting service
## ref: https://wiki.debian.org/chroot
sudo tee -a $FILESYSTEM_ROOT/usr/sbin/policy-rc.d > /dev/null <<EOF

View File

@ -106,35 +106,6 @@ value_extract() {
done
}
# Set up previous and next reboot cause files accordingly
process_reboot_cause() {
REBOOT_CAUSE_DIR="/host/reboot-cause"
REBOOT_CAUSE_FILE="${REBOOT_CAUSE_DIR}/reboot-cause.txt"
PREVIOUS_REBOOT_CAUSE_FILE="${REBOOT_CAUSE_DIR}/previous-reboot-cause.txt"
mkdir -p $REBOOT_CAUSE_DIR
# If this is the first boot after an image install, store that as the
# previous reboot cause.
if [ -f $FIRST_BOOT_FILE ]; then
echo "SONiC image installation" > $PREVIOUS_REBOOT_CAUSE_FILE
fi
# If there is an existing REBOOT_CAUSE_FILE, copy that file to
# PREVIOUS_REBOOT_CAUSE_FILE.
if [ -f $REBOOT_CAUSE_FILE ]; then
mv -f $REBOOT_CAUSE_FILE $PREVIOUS_REBOOT_CAUSE_FILE
else
echo "Unknown reboot cause" > $PREVIOUS_REBOOT_CAUSE_FILE
fi
# Log the previous reboot cause to the syslog
logger "Previous reboot cause: $(cat $PREVIOUS_REBOOT_CAUSE_FILE)"
# Set the default cause for the next reboot
echo "Unexpected reboot" > $REBOOT_CAUSE_FILE
}
program_console_speed()
{
speed=$(cat /proc/cmdline | grep -Eo 'console=ttyS[0-9]+,[0-9]+' | cut -d "," -f2)
@ -150,9 +121,6 @@ program_console_speed()
#### Begin Main Body ####
# Set up previous and next reboot cause files
process_reboot_cause
# If the machine.conf is absent, it indicates that the unit booted
# into SONiC from another NOS. Extract the machine.conf from ONIE.
if [ ! -e /host/machine.conf ]; then

View File

@ -0,0 +1,122 @@
#!/usr/bin/env python
#
# process-reboot-cause
#
# Program designed to run once, soon after system boot which will
# determine the cause of the previous reboot and store it to the disk,
#
try:
import os
import pwd
import sys
import syslog
except ImportError as err:
raise ImportError("%s - required module not found" % str(err))
VERSION = "1.0"
SYSLOG_IDENTIFIER = "process-reboot-cause"
REBOOT_CAUSE_DIR = "/host/reboot-cause/"
REBOOT_CAUSE_FILE = REBOOT_CAUSE_DIR + "reboot-cause.txt"
PREVIOUS_REBOOT_CAUSE_FILE = REBOOT_CAUSE_DIR + "previous-reboot-cause.txt"
UNKNOWN_REBOOT_CAUSE = "Unknown"
# ========================== Syslog wrappers ==========================
def log_info(msg):
syslog.openlog(SYSLOG_IDENTIFIER)
syslog.syslog(syslog.LOG_INFO, msg)
syslog.closelog()
def log_warning(msg):
syslog.openlog(SYSLOG_IDENTIFIER)
syslog.syslog(syslog.LOG_WARNING, msg)
syslog.closelog()
def log_error(msg):
syslog.openlog(SYSLOG_IDENTIFIER)
syslog.syslog(syslog.LOG_ERR, msg)
syslog.closelog()
# ============================= Functions =============================
def main():
log_info("Starting up...")
if not os.geteuid() == 0:
log_error("User {} does not have permission to execute".format(pwd.getpwuid(os.getuid()).pw_name))
sys.exit("This utility must be run as root")
# Create REBOOT_CAUSE_DIR if it doesn't exist
if not os.path.exists(REBOOT_CAUSE_DIR):
os.makedirs(REBOOT_CAUSE_DIR)
# Remove stale PREVIOUS_REBOOT_CAUSE_FILE if it exists
if os.path.exists(PREVIOUS_REBOOT_CAUSE_FILE):
os.remove(PREVIOUS_REBOOT_CAUSE_FILE)
# Set a default previous reboot cause
previous_reboot_cause = UNKNOWN_REBOOT_CAUSE
# Until all platform vendors have provided sonic_platform packages,
# if there is no sonic_platform package installed, we only provide
# software-related reboot causes.
try:
import sonic_platform
# Check if the previous reboot was caused by hardware
platform = sonic_platform.platform.Platform()
chassis = platform.get_chassis()
hardware_reboot_cause, optional_details = chassis.get_reboot_cause()
if hardware_reboot_cause == chassis.REBOOT_CAUSE_NON_HARDWARE:
# The reboot was not caused by hardware. If there is a REBOOT_CAUSE_FILE, it will
# contain any software-related reboot info. We will use it as the previous cause.
if os.path.isfile(REBOOT_CAUSE_FILE):
cause_file = open(REBOOT_CAUSE_FILE, "r")
previous_reboot_cause = cause_file.readline().rstrip('\n')
cause_file.close()
elif hardware_reboot_cause == chassis.REBOOT_CAUSE_HARDWARE_OTHER:
previous_reboot_cause = "{} ({})".format(hardware_reboot_cause, optional_details)
else:
previous_reboot_cause = hardware_reboot_cause
except ImportError as err:
log_warning("sonic_platform package not installed. Unable to detect hardware reboot causes.")
# If there is a REBOOT_CAUSE_FILE, it will contain any software-related
# reboot info. We will use it as the previous cause.
if os.path.isfile(REBOOT_CAUSE_FILE):
cause_file = open(REBOOT_CAUSE_FILE, "r")
previous_reboot_cause = cause_file.readline().rstrip('\n')
cause_file.close()
# Write the previous reboot cause to PREVIOUS_REBOOT_CAUSE_FILE
prev_cause_file = open(PREVIOUS_REBOOT_CAUSE_FILE, "w")
prev_cause_file.write(previous_reboot_cause)
prev_cause_file.close()
# Also log the previous reboot cause to the syslog
log_info("Previous reboot cause: {}".format(previous_reboot_cause))
# Remove the old REBOOT_CAUSE_FILE
if os.path.exists(REBOOT_CAUSE_FILE):
os.remove(REBOOT_CAUSE_FILE)
# Write a new default reboot cause file for the next reboot
cause_file = open(REBOOT_CAUSE_FILE, "w")
cause_file.write(UNKNOWN_REBOOT_CAUSE)
cause_file.close()
if __name__ == "__main__":
main()

View File

@ -0,0 +1,10 @@
[Unit]
Description=Reboot cause determination service
After=rc-local.service
[Service]
Type=simple
ExecStart=/usr/bin/process-reboot-cause
[Install]
WantedBy=multi-user.target

View File

@ -17,8 +17,10 @@ set_tmpfs_log_partition_size()
# NOTE: certain platforms, when reaching initramfs stage, have a small
# limit of mounting tmpfs partition, potentially due to amount
# of RAM available in this stage. e.g. Arista 7050 QX32
# of RAM available in this stage. e.g. Arista 7050-qx32[s] and 7060-cx32s
[ X"$aboot_platform" = X"x86_64-arista_7050_qx32" ] && return
[ X"$aboot_platform" = X"x86_64-arista_7050_qx32s" ] && return
[ X"$aboot_platform" = X"x86_64-arista_7060_cx32s" ] && return
# set varlogsize to existing var-log.ext4 size
if [ -f ${rootmnt}/host/disk-img/var-log.ext4 ]; then
@ -56,7 +58,8 @@ onie_platform=""
aboot_platform=""
. ${rootmnt}/host/machine.conf
if [ X"$aboot_platform" = X"x86_64-arista_7050_qx32" ] ||
[ X"$aboot_platform" = X"x86_64-arista_7050_qx32s" ]
[ X"$aboot_platform" = X"x86_64-arista_7050_qx32s" ] ||
[ X"$aboot_platform" = X"x86_64-arista_7060_cx32s" ]
then
set_tmpfs_log_partition_size
mount -t tmpfs -o rw,nosuid,nodev,size=${varlogsize}M tmpfs ${rootmnt}/var/log

View File

@ -104,7 +104,7 @@ start() {
/usr/bin/docker exec database redis-cli -n 1 FLUSHDB
/usr/bin/docker exec database redis-cli -n 2 FLUSHDB
/usr/bin/docker exec database redis-cli -n 5 FLUSHDB
clean_up_tables 6 "'PORT_TABLE*', 'MGMT_PORT_TABLE*', 'VLAN_TABLE*', 'VLAN_MEMBER_TABLE*', 'INTERFACE_TABLE*', 'MIRROR_SESSION*', 'VRF_TABLE*', 'FDB_TABLE*'"
clean_up_tables 6 "'PORT_TABLE*', 'MGMT_PORT_TABLE*', 'VLAN_TABLE*', 'VLAN_MEMBER_TABLE*', 'LAG_TABLE*', 'LAG_MEMBER_TABLE*', 'INTERFACE_TABLE*', 'MIRROR_SESSION*', 'VRF_TABLE*', 'FDB_TABLE*'"
fi
# start service docker

View File

@ -9,5 +9,10 @@ $(SONIC_ONE_IMAGE)_LAZY_INSTALLS += $(BFN_MONTARA_PLATFORM_MODULE)
$(SONIC_ONE_IMAGE)_LAZY_INSTALLS += $(WNC_OSW1800_PLATFORM_MODULE)
$(SONIC_ONE_IMAGE)_LAZY_INSTALLS += $(INGRASYS_S9180_32X_PLATFORM_MODULE)
$(SONIC_ONE_IMAGE)_LAZY_INSTALLS += $(INGRASYS_S9280_64X_PLATFORM_MODULE)
$(SONIC_ONE_IMAGE)_DOCKERS += $(SONIC_INSTALL_DOCKER_IMAGES)
ifeq ($(INSTALL_DEBUG_TOOLS),y)
$(SONIC_ONE_IMAGE)_DOCKERS += $(SONIC_INSTALL_DOCKER_DBG_IMAGES)
$(SONIC_ONE_IMAGE)_DOCKERS += $(filter-out $(patsubst %-$(DBG_IMAGE_MARK).gz,%.gz, $(SONIC_INSTALL_DOCKER_DBG_IMAGES)), $(SONIC_INSTALL_DOCKER_IMAGES))
else
$(SONIC_ONE_IMAGE)_DOCKERS = $(SONIC_INSTALL_DOCKER_IMAGES)
endif
SONIC_INSTALLERS += $(SONIC_ONE_IMAGE)

@ -1 +1 @@
Subproject commit ad5abe1205c0bf6926d62a497a9b435aaeb174ee
Subproject commit 530f9707a2c3d06bb50a9b60b24a4bf4eb8a9735

Some files were not shown because too many files have changed in this diff Show More