Merge branch 'master' into dell_platform_dev
This commit is contained in:
commit
7a7e456d4e
@ -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 \
|
||||
|
@ -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`
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
||||
|
@ -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:
|
||||
|
@ -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
|
@ -0,0 +1 @@
|
||||
SAI_INIT_CONFIG_FILE=/etc/bcm/td3-as5835t-48x10G+6x100G.config.bcm
|
@ -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
|
||||
|
1
device/accton/x86_64-accton_as5835_54t-r0/default_sku
Normal file
1
device/accton/x86_64-accton_as5835_54t-r0/default_sku
Normal file
@ -0,0 +1 @@
|
||||
Accton-AS5835-54T t1
|
3
device/accton/x86_64-accton_as5835_54t-r0/installer.conf
Normal file
3
device/accton/x86_64-accton_as5835_54t-r0/installer.conf
Normal file
@ -0,0 +1,3 @@
|
||||
CONSOLE_PORT=0x3f8
|
||||
CONSOLE_DEV=0
|
||||
CONSOLE_SPEED=115200
|
24
device/accton/x86_64-accton_as5835_54t-r0/plugins/eeprom.py
Normal file
24
device/accton/x86_64-accton_as5835_54t-r0/plugins/eeprom.py
Normal 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)
|
61
device/accton/x86_64-accton_as5835_54t-r0/plugins/psuutil.py
Normal file
61
device/accton/x86_64-accton_as5835_54t-r0/plugins/psuutil.py
Normal 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
|
225
device/accton/x86_64-accton_as5835_54t-r0/plugins/sfputil.py
Normal file
225
device/accton/x86_64-accton_as5835_54t-r0/plugins/sfputil.py
Normal 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
|
@ -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
|
||||
|
@ -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:
|
||||
|
@ -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:
|
||||
|
@ -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:
|
||||
|
@ -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
|
||||
|
@ -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)
|
@ -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:
|
||||
|
File diff suppressed because it is too large
Load Diff
1
device/arista/x86_64-arista_7050_qx32s/Arista-7050QX32S-Q32
Symbolic link
1
device/arista/x86_64-arista_7050_qx32s/Arista-7050QX32S-Q32
Symbolic link
@ -0,0 +1 @@
|
||||
Arista-7050-QX-32S
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
127
device/celestica/x86_64-cel_e1031-r0/sonic_platform/component.py
Normal file
127
device/celestica/x86_64-cel_e1031-r0/sonic_platform/component.py
Normal 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)
|
@ -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
|
233
device/celestica/x86_64-cel_e1031-r0/sonic_platform/watchdog.py
Normal file
233
device/celestica/x86_64-cel_e1031-r0/sonic_platform/watchdog.py
Normal 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)
|
@ -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)
|
||||
|
@ -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)
|
@ -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
|
@ -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)
|
@ -0,0 +1,2 @@
|
||||
{%- set default_topo = 't1' %}
|
||||
{%- include 'buffers_config.j2' %}
|
@ -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 %}
|
BIN
device/dell/x86_64-dellemc_s5232f_c3538-r0/DellEMC-S5232f-C32/custom_led.bin
Executable file
BIN
device/dell/x86_64-dellemc_s5232f_c3538-r0/DellEMC-S5232f-C32/custom_led.bin
Executable file
Binary file not shown.
Binary file not shown.
@ -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
|
@ -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
|
@ -0,0 +1 @@
|
||||
{%- include 'qos_config.j2' %}
|
@ -0,0 +1 @@
|
||||
SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/td3-s5232f-32x100G.config.bcm
|
@ -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
|
||||
|
||||
|
@ -0,0 +1,2 @@
|
||||
{%- set default_topo = 't1' %}
|
||||
{%- include 'buffers_config.j2' %}
|
@ -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 %}
|
||||
|
BIN
device/dell/x86_64-dellemc_s5232f_c3538-r0/DellEMC-S5232f-P-100G/custom_led.bin
Executable file
BIN
device/dell/x86_64-dellemc_s5232f_c3538-r0/DellEMC-S5232f-P-100G/custom_led.bin
Executable file
Binary file not shown.
Binary file not shown.
@ -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
|
@ -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
|
@ -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 %}
|
||||
}
|
||||
}
|
@ -0,0 +1 @@
|
||||
SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/td3-s5232f-32x100G.config.bcm
|
@ -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
|
||||
|
||||
|
@ -0,0 +1,2 @@
|
||||
{%- set default_topo = 't1' %}
|
||||
{%- include 'buffers_config.j2' %}
|
@ -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 %}
|
||||
|
BIN
device/dell/x86_64-dellemc_s5232f_c3538-r0/DellEMC-S5232f-P-10G/custom_led.bin
Executable file
BIN
device/dell/x86_64-dellemc_s5232f_c3538-r0/DellEMC-S5232f-P-10G/custom_led.bin
Executable file
Binary file not shown.
Binary file not shown.
@ -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
|
@ -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 %}
|
||||
}
|
||||
}
|
@ -0,0 +1 @@
|
||||
SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/td3-s5232f-8x100G-96x10G.config.bcm
|
@ -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
|
||||
|
||||
|
@ -0,0 +1,2 @@
|
||||
{%- set default_topo = 't1' %}
|
||||
{%- include 'buffers_config.j2' %}
|
@ -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 %}
|
||||
|
BIN
device/dell/x86_64-dellemc_s5232f_c3538-r0/DellEMC-S5232f-P-25G/custom_led.bin
Executable file
BIN
device/dell/x86_64-dellemc_s5232f_c3538-r0/DellEMC-S5232f-P-25G/custom_led.bin
Executable file
Binary file not shown.
Binary file not shown.
@ -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
|
@ -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 %}
|
||||
}
|
||||
}
|
@ -0,0 +1 @@
|
||||
SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/td3-s5232f-8x100G-96x25G.config.bcm
|
@ -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
|
||||
|
||||
|
1
device/dell/x86_64-dellemc_s5232f_c3538-r0/default_sku
Normal file
1
device/dell/x86_64-dellemc_s5232f_c3538-r0/default_sku
Normal file
@ -0,0 +1 @@
|
||||
DellEMC-S5232f-C32 t1
|
@ -0,0 +1,3 @@
|
||||
CONSOLE_PORT=0x3f8
|
||||
CONSOLE_DEV=0
|
||||
CONSOLE_SPEED=115200
|
@ -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
|
442
device/dell/x86_64-dellemc_s5232f_c3538-r0/media_settings.json
Normal file
442
device/dell/x86_64-dellemc_s5232f_c3538-r0/media_settings.json
Normal 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"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
22
device/dell/x86_64-dellemc_s5232f_c3538-r0/plugins/eeprom.py
Normal file
22
device/dell/x86_64-dellemc_s5232f_c3538-r0/plugins/eeprom.py
Normal 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)
|
@ -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
|
227
device/dell/x86_64-dellemc_s5232f_c3538-r0/plugins/sfputil.py
Normal file
227
device/dell/x86_64-dellemc_s5232f_c3538-r0/plugins/sfputil.py
Normal 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)
|
@ -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
|
||||
|
||||
|
@ -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]
|
||||
|
@ -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) %}
|
||||
|
@ -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) %}
|
||||
|
@ -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 && \
|
||||
|
@ -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
|
||||
|
||||
|
135
dockers/docker-fpm-frr/bgpd.conf.default.j2
Normal file
135
dockers/docker-fpm-frr/bgpd.conf.default.j2
Normal 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 %}
|
||||
!
|
@ -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
|
||||
|
@ -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 %}
|
@ -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 %}
|
||||
|
@ -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
|
||||
|
@ -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 %}
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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 %}
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
122
files/image_config/process-reboot-cause/process-reboot-cause
Executable file
122
files/image_config/process-reboot-cause/process-reboot-cause
Executable 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()
|
@ -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
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
Loading…
Reference in New Issue
Block a user