diff --git a/.gitignore b/.gitignore
index 74998573e491..4eb7ab7e9ab7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -28,6 +28,8 @@ src/lldpd/*
!src/lldpd/patch/
src/mpdecimal/*
!src/mpdecimal/Makefile
+src/python-click/*
+!src/python-click/Makefile
src/python3/*
!src/python3/Makefile
src/redis/*
diff --git a/.gitmodules b/.gitmodules
index e0cfc0869d05..bb4eae528c72 100755
--- a/.gitmodules
+++ b/.gitmodules
@@ -77,3 +77,6 @@
[submodule "platform/broadcom/sonic-platform-modules-mitac"]
path = platform/broadcom/sonic-platform-modules-mitac
url = https://github.com/MiTAC-EBU/sonic-platform-modules-mitac.git
+[submodule "platform/p4/sonic-platform-modules-arista"]
+ path = platform/p4/sonic-platform-modules-arista
+ url = https://github.com/aristanetworks/sonic
diff --git a/Makefile b/Makefile
index c954402ab312..347041e1b12a 100644
--- a/Makefile
+++ b/Makefile
@@ -107,6 +107,10 @@ sonic-slave-bash :
$(DOCKER_BUILD) ; }
@$(DOCKER_RUN) -t $(SLAVE_IMAGE):$(SLAVE_TAG) bash
+showtag:
+ @echo $(SLAVE_IMAGE):$(SLAVE_TAG)
+ @echo $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG)
+
init :
@git submodule update --init --recursive
@git submodule foreach --recursive '[ -f .git ] && echo "gitdir: $$(realpath --relative-to=. $$(cut -d" " -f2 .git))" > .git'
diff --git a/build_debian.sh b/build_debian.sh
index c5b395653ec2..767dd7b83b79 100755
--- a/build_debian.sh
+++ b/build_debian.sh
@@ -3,26 +3,22 @@
## an ONIE installer image.
##
## USAGE:
-## ./build_debian USERNAME PASSWORD_ENCRYPTED
-## PARAMETERS:
+## USERNAME=username PASSWORD=password ./build_debian
+## ENVIRONMENT:
## USERNAME
## The name of the default admin user
-## PASSWORD_ENCRYPTED
-## The encrypted password, expected by chpasswd command
+## PASSWORD
+## The password, expected by chpasswd command
## Default user
-USERNAME=$1
[ -n "$USERNAME" ] || {
- echo "Error: no or empty USERNAME argument"
+ echo "Error: no or empty USERNAME"
exit 1
}
-## Password for the default user, customizable by environment variable
-## By default it is an empty password
-## You may get a crypted password by: perl -e 'print crypt("YourPaSsWoRd", "salt"),"\n"'
-PASSWORD_ENCRYPTED=$2
-[ -n "$PASSWORD_ENCRYPTED" ] || {
- echo "Error: no or empty PASSWORD_ENCRYPTED argument"
+## Password for the default user
+[ -n "$PASSWORD" ] || {
+ echo "Error: no or empty PASSWORD"
exit 1
}
@@ -178,7 +174,7 @@ sudo cp files/docker/docker.service.conf $_
## Note: user should be in the group with the same name, and also in sudo/docker group
sudo LANG=C chroot $FILESYSTEM_ROOT useradd -G sudo,docker $USERNAME -c "$DEFAULT_USERINFO" -m -s /bin/bash
## Create password for the default user
-echo $USERNAME:$PASSWORD_ENCRYPTED | sudo LANG=C chroot $FILESYSTEM_ROOT chpasswd -e
+echo "$USERNAME:$PASSWORD" | sudo LANG=C chroot $FILESYSTEM_ROOT chpasswd
## Pre-install hardware drivers
sudo LANG=C chroot $FILESYSTEM_ROOT apt-get -y install \
@@ -226,7 +222,11 @@ sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y in
sysfsutils \
grub2-common \
ethtool \
- screen
+ screen \
+ hping3 \
+ python-scapy \
+ tcptraceroute \
+ mtr-tiny
sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y download \
grub-pc-bin
@@ -269,6 +269,8 @@ sudo sed -i '
sudo tee -a $FILESYSTEM_ROOT/etc/monit/monitrc > /dev/null <<'EOF'
check filesystem root-aufs with path /
if space usage > 90% for 5 times within 10 cycles then alert
+check filesystem var-log with path /var/log
+ if space usage > 90% for 5 times within 10 cycles then alert
check system $HOST
if memory usage > 90% for 5 times within 10 cycles then alert
if cpu usage (user) > 90% for 5 times within 10 cycles then alert
diff --git a/device/accton/x86_64-accton_as7116_54x-r0/Accton-AS7116-54X/qos.json b/device/accton/x86_64-accton_as7116_54x-r0/Accton-AS7116-54X/qos.json.j2
similarity index 100%
rename from device/accton/x86_64-accton_as7116_54x-r0/Accton-AS7116-54X/qos.json
rename to device/accton/x86_64-accton_as7116_54x-r0/Accton-AS7116-54X/qos.json.j2
diff --git a/device/accton/x86_64-accton_as7212_54x-r0/AS7212-54x/qos.json b/device/accton/x86_64-accton_as7212_54x-r0/AS7212-54x/qos.json.j2
similarity index 100%
rename from device/accton/x86_64-accton_as7212_54x-r0/AS7212-54x/qos.json
rename to device/accton/x86_64-accton_as7212_54x-r0/AS7212-54x/qos.json.j2
diff --git a/device/accton/x86_64-accton_as7312_54xs-r0/Accton-AS7312-54XS/port_config.ini b/device/accton/x86_64-accton_as7312_54xs-r0/Accton-AS7312-54XS/port_config.ini
new file mode 100755
index 000000000000..18b0ed20d305
--- /dev/null
+++ b/device/accton/x86_64-accton_as7312_54xs-r0/Accton-AS7312-54XS/port_config.ini
@@ -0,0 +1,55 @@
+# name lanes alias index
+Ethernet0 41 twentyfiveGigE1 0
+Ethernet1 42 twentyfiveGigE2 1
+Ethernet2 43 twentyfiveGigE3 2
+Ethernet3 44 twentyfiveGigE4 3
+Ethernet4 49 twentyfiveGigE5 4
+Ethernet5 50 twentyfiveGigE6 5
+Ethernet6 51 twentyfiveGigE7 6
+Ethernet7 52 twentyfiveGigE8 7
+Ethernet8 53 twentyfiveGigE9 8
+Ethernet9 54 twentyfiveGigE10 9
+Ethernet10 55 twentyfiveGigE11 10
+Ethernet11 56 twentyfiveGigE12 11
+Ethernet12 65 twentyfiveGigE13 12
+Ethernet13 66 twentyfiveGigE14 13
+Ethernet14 67 twentyfiveGigE15 14
+Ethernet15 68 twentyfiveGigE16 15
+Ethernet16 33 twentyfiveGigE17 16
+Ethernet17 34 twentyfiveGigE18 17
+Ethernet18 35 twentyfiveGigE19 18
+Ethernet19 36 twentyfiveGigE20 19
+Ethernet20 37 twentyfiveGigE21 20
+Ethernet21 38 twentyfiveGigE22 21
+Ethernet22 39 twentyfiveGigE23 22
+Ethernet23 40 twentyfiveGigE24 23
+Ethernet24 69 twentyfiveGigE25 24
+Ethernet25 70 twentyfiveGigE26 25
+Ethernet26 71 twentyfiveGigE27 26
+Ethernet27 72 twentyfiveGigE28 27
+Ethernet28 81 twentyfiveGigE29 28
+Ethernet29 82 twentyfiveGigE30 29
+Ethernet30 83 twentyfiveGigE31 30
+Ethernet31 84 twentyfiveGigE32 31
+Ethernet32 85 twentyfiveGigE33 32
+Ethernet33 86 twentyfiveGigE34 33
+Ethernet34 87 twentyfiveGigE35 34
+Ethernet35 88 twentyfiveGigE36 35
+Ethernet36 97 twentyfiveGigE37 36
+Ethernet37 98 twentyfiveGigE38 37
+Ethernet38 99 twentyfiveGigE39 38
+Ethernet39 100 twentyfiveGigE40 39
+Ethernet40 101 twentyfiveGigE41 40
+Ethernet41 102 twentyfiveGigE42 41
+Ethernet42 103 twentyfiveGigE43 42
+Ethernet43 104 twentyfiveGigE44 43
+Ethernet44 105 twentyfiveGigE45 44
+Ethernet45 106 twentyfiveGigE46 45
+Ethernet46 107 twentyfiveGigE47 46
+Ethernet47 108 twentyfiveGigE48 47
+Ethernet48 5,6,7,8 hundredGigE49 48
+Ethernet52 1,2,3,4 hundredGigE50 52
+Ethernet56 109,110,111,112 hundredGigE51 56
+Ethernet60 21,22,23,24 hundredGigE52 60
+Ethernet64 9,10,11,12 hundredGigE53 64
+Ethernet68 117,118,119,120 hundredGigE54 68
diff --git a/device/accton/x86_64-accton_as7312_54xs-r0/Accton-AS7312-54XS/sai.profile b/device/accton/x86_64-accton_as7312_54xs-r0/Accton-AS7312-54XS/sai.profile
new file mode 100644
index 000000000000..31aefe2c2905
--- /dev/null
+++ b/device/accton/x86_64-accton_as7312_54xs-r0/Accton-AS7312-54XS/sai.profile
@@ -0,0 +1 @@
+SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/th-as7312-48x25G+6x100G.config.bcm
diff --git a/device/accton/x86_64-accton_as7312_54xs-r0/Accton-AS7312-54XS/th-as7312-48x25G+6x100G.config.bcm b/device/accton/x86_64-accton_as7312_54xs-r0/Accton-AS7312-54XS/th-as7312-48x25G+6x100G.config.bcm
new file mode 100644
index 000000000000..eef4d987e8ed
--- /dev/null
+++ b/device/accton/x86_64-accton_as7312_54xs-r0/Accton-AS7312-54XS/th-as7312-48x25G+6x100G.config.bcm
@@ -0,0 +1,519 @@
+# accton_as7312_54x 48x25G+6x100G SDK config
+os=unix
+schan_intr_enable=0
+
+l2_mem_entries=40960
+l2xmsg_mode=1
+l3_mem_entries=40960
+mem_cache_enable=0
+parity_correction=0
+parity_enable=0
+mmu_lossless=1
+
+pbmp_oversubscribe=0x0407ffc00ff00ff003fc3ffc00200222
+pbmp_xport_xe=0x0407ffd00ff00ff403fc3ffc00200222
+
+## FC10 ##
+dport_map_port_42=1
+dport_map_port_43=2
+dport_map_port_44=3
+dport_map_port_45=4
+
+## FC12 ##
+dport_map_port_50=5
+dport_map_port_51=6
+dport_map_port_52=7
+dport_map_port_53=8
+
+## FC13 ##
+dport_map_port_54=9
+dport_map_port_55=10
+dport_map_port_56=11
+dport_map_port_57=12
+
+## FC16 ##
+dport_map_port_68=13
+dport_map_port_69=14
+dport_map_port_70=15
+dport_map_port_71=16
+
+## FC8 ##
+dport_map_port_34=17
+dport_map_port_35=18
+dport_map_port_36=19
+dport_map_port_37=20
+
+## FC9 ##
+dport_map_port_38=21
+dport_map_port_39=22
+dport_map_port_40=23
+dport_map_port_41=24
+
+## FC17 ##
+dport_map_port_72=25
+dport_map_port_73=26
+dport_map_port_74=27
+dport_map_port_75=28
+
+## FC20 ##
+dport_map_port_84=29
+dport_map_port_85=30
+dport_map_port_86=31
+dport_map_port_87=32
+
+## FC21 ##
+dport_map_port_88=33
+dport_map_port_89=34
+dport_map_port_90=35
+dport_map_port_91=36
+
+## FC24 ##
+dport_map_port_102=37
+dport_map_port_103=38
+dport_map_port_104=39
+dport_map_port_105=40
+
+## FC25 ##
+dport_map_port_106=41
+dport_map_port_107=42
+dport_map_port_108=43
+dport_map_port_109=44
+
+## FC26 ##
+dport_map_port_110=45
+dport_map_port_111=46
+dport_map_port_112=47
+dport_map_port_113=48
+
+## FC1 ##
+dport_map_port_5=49
+
+## FC0 ##
+dport_map_port_1=50
+
+## FC27 ##
+dport_map_port_114=51
+
+## FC5 ##
+dport_map_port_21=52
+
+## FC2 ##
+dport_map_port_9=53
+
+## FC29 ##
+dport_map_port_122=54
+
+#for KR
+#dport_map_port_66=55
+#dport_map_port_100=56
+
+/* Port Map */
+## FC10 ##
+portmap_42=41:25
+portmap_43=42:25
+portmap_44=43:25
+portmap_45=44:25
+
+## FC12 ##
+portmap_50=49:25
+portmap_51=50:25
+portmap_52=51:25
+portmap_53=52:25
+
+
+## FC13 ##
+portmap_54=53:25
+portmap_55=54:25
+portmap_56=55:25
+portmap_57=56:25
+
+## FC16 ##
+portmap_68=65:25
+portmap_69=66:25
+portmap_70=67:25
+portmap_71=68:25
+
+
+## FC8 ##
+portmap_34=33:25
+portmap_35=34:25
+portmap_36=35:25
+portmap_37=36:25
+
+## FC9 ##
+portmap_38=37:25
+portmap_39=38:25
+portmap_40=39:25
+portmap_41=40:25
+
+## FC17 ##
+portmap_72=69:25
+portmap_73=70:25
+portmap_74=71:25
+portmap_75=72:25
+
+## FC20 ##
+portmap_84=81:25
+portmap_85=82:25
+portmap_86=83:25
+portmap_87=84:25
+
+
+## FC21 ##
+portmap_88=85:25
+portmap_89=86:25
+portmap_90=87:25
+portmap_91=88:25
+
+## FC24 ##
+portmap_102=97:25
+portmap_103=98:25
+portmap_104=99:25
+portmap_105=100:25
+
+## FC25 ##
+portmap_106=101:25
+portmap_107=102:25
+portmap_108=103:25
+portmap_109=104:25
+
+## FC26 ##
+portmap_110=105:25
+portmap_111=106:25
+portmap_112=107:25
+portmap_113=108:25
+
+## FC1 ##
+portmap_5=5:100
+
+## FC0 ##
+portmap_1=1:100
+
+## FC27 ##
+portmap_114=109:100
+
+## FC5 ##
+portmap_21=21:100
+
+## FC2 ##
+portmap_9=9:100
+
+## FC29 ##
+portmap_122=117:100
+
+# CPU to MAC
+# TSC-E management port 1
+#portmap_66=129:10
+# TSC-E management port 2
+#portmap_100=131:10
+
+xgxs_rx_lane_map_42=0x2310
+xgxs_rx_lane_map_43=0x2310
+xgxs_rx_lane_map_44=0x2310
+xgxs_rx_lane_map_45=0x2310
+xgxs_rx_lane_map_50=0x3210
+xgxs_rx_lane_map_51=0x3210
+xgxs_rx_lane_map_52=0x3210
+xgxs_rx_lane_map_53=0x3210
+xgxs_rx_lane_map_54=0x3210
+xgxs_rx_lane_map_55=0x3210
+xgxs_rx_lane_map_56=0x3210
+xgxs_rx_lane_map_57=0x3210
+xgxs_rx_lane_map_68=0x0123
+xgxs_rx_lane_map_69=0x0123
+xgxs_rx_lane_map_70=0x0123
+xgxs_rx_lane_map_71=0x0123
+xgxs_rx_lane_map_34=0x0123
+xgxs_rx_lane_map_35=0x0123
+xgxs_rx_lane_map_36=0x0123
+xgxs_rx_lane_map_37=0x0123
+xgxs_rx_lane_map_38=0x0123
+xgxs_rx_lane_map_39=0x0123
+xgxs_rx_lane_map_40=0x0123
+xgxs_rx_lane_map_41=0x0123
+xgxs_rx_lane_map_72=0x3210
+xgxs_rx_lane_map_73=0x3210
+xgxs_rx_lane_map_74=0x3210
+xgxs_rx_lane_map_75=0x3210
+xgxs_rx_lane_map_84=0x1032
+xgxs_rx_lane_map_85=0x1032
+xgxs_rx_lane_map_86=0x1032
+xgxs_rx_lane_map_87=0x1032
+xgxs_rx_lane_map_88=0x2301
+xgxs_rx_lane_map_89=0x2301
+xgxs_rx_lane_map_90=0x2301
+xgxs_rx_lane_map_91=0x2301
+xgxs_rx_lane_map_102=0x0123
+xgxs_rx_lane_map_103=0x0123
+xgxs_rx_lane_map_104=0x0123
+xgxs_rx_lane_map_105=0x0123
+xgxs_rx_lane_map_106=0x3210
+xgxs_rx_lane_map_107=0x3210
+xgxs_rx_lane_map_108=0x3210
+xgxs_rx_lane_map_109=0x3210
+xgxs_rx_lane_map_110=0x1032
+xgxs_rx_lane_map_111=0x1032
+xgxs_rx_lane_map_112=0x1032
+xgxs_rx_lane_map_113=0x1032
+xgxs_rx_lane_map_5=0x3210
+xgxs_rx_lane_map_1=0x3210
+xgxs_rx_lane_map_114=0x0123
+xgxs_rx_lane_map_21=0x0213
+xgxs_rx_lane_map_9=0x3210
+xgxs_rx_lane_map_122=0x1230
+
+xgxs_tx_lane_map_42=0x0132
+xgxs_tx_lane_map_43=0x0132
+xgxs_tx_lane_map_44=0x0132
+xgxs_tx_lane_map_45=0x0132
+xgxs_tx_lane_map_50=0x3210
+xgxs_tx_lane_map_51=0x3210
+xgxs_tx_lane_map_52=0x3210
+xgxs_tx_lane_map_53=0x3210
+xgxs_tx_lane_map_54=0x3210
+xgxs_tx_lane_map_55=0x3210
+xgxs_tx_lane_map_56=0x3210
+xgxs_tx_lane_map_57=0x3210
+xgxs_tx_lane_map_68=0x0123
+xgxs_tx_lane_map_69=0x0123
+xgxs_tx_lane_map_70=0x0123
+xgxs_tx_lane_map_71=0x0123
+xgxs_tx_lane_map_34=0x0123
+xgxs_tx_lane_map_35=0x0123
+xgxs_tx_lane_map_36=0x0123
+xgxs_tx_lane_map_37=0x0123
+xgxs_tx_lane_map_38=0x0123
+xgxs_tx_lane_map_39=0x0123
+xgxs_tx_lane_map_40=0x0123
+xgxs_tx_lane_map_41=0x0123
+xgxs_tx_lane_map_72=0x0123
+xgxs_tx_lane_map_73=0x0123
+xgxs_tx_lane_map_74=0x0123
+xgxs_tx_lane_map_75=0x0123
+xgxs_tx_lane_map_84=0x0123
+xgxs_tx_lane_map_85=0x0123
+xgxs_tx_lane_map_86=0x0123
+xgxs_tx_lane_map_87=0x0123
+xgxs_tx_lane_map_88=0x2301
+xgxs_tx_lane_map_89=0x2301
+xgxs_tx_lane_map_90=0x2301
+xgxs_tx_lane_map_91=0x2301
+xgxs_tx_lane_map_102=0x0123
+xgxs_tx_lane_map_103=0x0123
+xgxs_tx_lane_map_104=0x0123
+xgxs_tx_lane_map_105=0x0123
+xgxs_tx_lane_map_106=0x3210
+xgxs_tx_lane_map_107=0x3210
+xgxs_tx_lane_map_108=0x3210
+xgxs_tx_lane_map_109=0x3210
+xgxs_tx_lane_map_110=0x1032
+xgxs_tx_lane_map_111=0x1032
+xgxs_tx_lane_map_112=0x1032
+xgxs_tx_lane_map_113=0x1032
+xgxs_tx_lane_map_5=0x3210
+xgxs_tx_lane_map_1=0x3210
+xgxs_tx_lane_map_114=0x0123
+xgxs_tx_lane_map_21=0x3210
+xgxs_tx_lane_map_9=0x3210
+xgxs_tx_lane_map_122=0x3210
+
+#Polarity RX
+phy_xaui_rx_polarity_flip_34=0x1
+phy_xaui_rx_polarity_flip_35=0x1
+phy_xaui_rx_polarity_flip_36=0x1
+phy_xaui_rx_polarity_flip_37=0x1
+phy_xaui_rx_polarity_flip_38=0x1
+phy_xaui_rx_polarity_flip_39=0x1
+phy_xaui_rx_polarity_flip_40=0x1
+phy_xaui_rx_polarity_flip_41=0x1
+phy_xaui_rx_polarity_flip_84=0x1
+phy_xaui_rx_polarity_flip_85=0x0
+phy_xaui_rx_polarity_flip_86=0x1
+phy_xaui_rx_polarity_flip_87=0x0
+phy_xaui_rx_polarity_flip_88=0x1
+phy_xaui_rx_polarity_flip_89=0x0
+phy_xaui_rx_polarity_flip_90=0x1
+phy_xaui_rx_polarity_flip_91=0x1
+phy_xaui_rx_polarity_flip_102=0x0
+phy_xaui_rx_polarity_flip_103=0x0
+phy_xaui_rx_polarity_flip_104=0x1
+phy_xaui_rx_polarity_flip_105=0x0
+phy_xaui_rx_polarity_flip_122=0xf
+#Polarity TX
+phy_xaui_tx_polarity_flip_42=0x1
+phy_xaui_tx_polarity_flip_43=0x1
+phy_xaui_tx_polarity_flip_44=0x1
+phy_xaui_tx_polarity_flip_45=0x1
+phy_xaui_tx_polarity_flip_34=0x1
+phy_xaui_tx_polarity_flip_35=0x1
+phy_xaui_tx_polarity_flip_36=0x1
+phy_xaui_tx_polarity_flip_37=0x1
+phy_xaui_tx_polarity_flip_38=0x0
+phy_xaui_tx_polarity_flip_39=0x1
+phy_xaui_tx_polarity_flip_40=0x0
+phy_xaui_tx_polarity_flip_41=0x1
+phy_xaui_tx_polarity_flip_72=0x1
+phy_xaui_tx_polarity_flip_73=0x1
+phy_xaui_tx_polarity_flip_74=0x1
+phy_xaui_tx_polarity_flip_75=0x1
+phy_xaui_tx_polarity_flip_84=0x1
+phy_xaui_tx_polarity_flip_85=0x1
+phy_xaui_tx_polarity_flip_86=0x1
+phy_xaui_tx_polarity_flip_87=0x1
+phy_xaui_tx_polarity_flip_88=0x1
+phy_xaui_tx_polarity_flip_89=0x1
+phy_xaui_tx_polarity_flip_90=0x1
+phy_xaui_tx_polarity_flip_91=0x1
+phy_xaui_tx_polarity_flip_102=0x1
+phy_xaui_tx_polarity_flip_103=0x1
+phy_xaui_tx_polarity_flip_104=0x1
+phy_xaui_tx_polarity_flip_105=0x1
+phy_xaui_tx_polarity_flip_122=0xb
+
+#Driver Current
+serdes_driver_current_42=0x8
+serdes_driver_current_43=0x8
+serdes_driver_current_44=0x8
+serdes_driver_current_45=0x8
+serdes_driver_current_50=0x8
+serdes_driver_current_51=0x8
+serdes_driver_current_52=0x8
+serdes_driver_current_53=0x8
+serdes_driver_current_54=0x8
+serdes_driver_current_55=0x8
+serdes_driver_current_56=0x8
+serdes_driver_current_57=0x8
+serdes_driver_current_68=0x8
+serdes_driver_current_69=0x8
+serdes_driver_current_70=0x8
+serdes_driver_current_71=0x8
+serdes_driver_current_34=0x8
+serdes_driver_current_35=0x8
+serdes_driver_current_36=0x8
+serdes_driver_current_37=0x8
+serdes_driver_current_38=0x8
+serdes_driver_current_39=0x8
+serdes_driver_current_40=0x8
+serdes_driver_current_41=0x8
+serdes_driver_current_72=0x8
+serdes_driver_current_73=0x8
+serdes_driver_current_74=0x8
+serdes_driver_current_75=0x8
+serdes_driver_current_84=0x8
+serdes_driver_current_85=0x8
+serdes_driver_current_86=0x8
+serdes_driver_current_87=0x8
+serdes_driver_current_88=0x8
+serdes_driver_current_89=0x8
+serdes_driver_current_90=0x8
+serdes_driver_current_91=0x8
+serdes_driver_current_102=0x8
+serdes_driver_current_103=0x8
+serdes_driver_current_104=0x8
+serdes_driver_current_105=0x8
+serdes_driver_current_106=0x8
+serdes_driver_current_107=0x8
+serdes_driver_current_108=0x8
+serdes_driver_current_109=0x8
+serdes_driver_current_110=0x8
+serdes_driver_current_111=0x8
+serdes_driver_current_112=0x8
+serdes_driver_current_113=0x8
+serdes_driver_current_lane0_5=0x8
+serdes_driver_current_lane1_5=0x8
+serdes_driver_current_lane2_5=0x8
+serdes_driver_current_lane3_5=0x8
+serdes_driver_current_lane0_1=0x8
+serdes_driver_current_lane1_1=0x8
+serdes_driver_current_lane2_1=0x8
+serdes_driver_current_lane3_1=0x8
+serdes_driver_current_lane0_114=0x8
+serdes_driver_current_lane1_114=0x8
+serdes_driver_current_lane2_114=0x8
+serdes_driver_current_lane3_114=0x8
+serdes_driver_current_lane0_21=0x8
+serdes_driver_current_lane1_21=0x8
+serdes_driver_current_lane2_21=0x8
+serdes_driver_current_lane3_21=0x8
+serdes_driver_current_lane0_9=0x8
+serdes_driver_current_lane1_9=0x8
+serdes_driver_current_lane2_9=0x8
+serdes_driver_current_lane3_9=0x8
+serdes_driver_current_lane0_122=0x8
+serdes_driver_current_lane1_122=0x8
+serdes_driver_current_lane2_122=0x8
+serdes_driver_current_lane3_122=0x8
+
+#Preemphasis
+serdes_preemphasis_42=0x264006
+serdes_preemphasis_43=0x264006
+serdes_preemphasis_44=0x254106
+serdes_preemphasis_45=0x254106
+serdes_preemphasis_50=0x254106
+serdes_preemphasis_51=0x254106
+serdes_preemphasis_52=0x254106
+serdes_preemphasis_53=0x254106
+serdes_preemphasis_54=0x254106
+serdes_preemphasis_55=0x254106
+serdes_preemphasis_56=0x254106
+serdes_preemphasis_57=0x234306
+serdes_preemphasis_68=0x234306
+serdes_preemphasis_69=0x204606
+serdes_preemphasis_70=0x204606
+serdes_preemphasis_71=0x204606
+serdes_preemphasis_34=0x234306
+serdes_preemphasis_35=0x234306
+serdes_preemphasis_36=0x234306
+serdes_preemphasis_37=0x234306
+serdes_preemphasis_38=0x234306
+serdes_preemphasis_39=0x234306
+serdes_preemphasis_40=0x234306
+serdes_preemphasis_41=0x234306
+serdes_preemphasis_72=0x1e4806
+serdes_preemphasis_73=0x1e4806
+serdes_preemphasis_74=0x1e4806
+serdes_preemphasis_75=0x1e4806
+serdes_preemphasis_84=0x1e4806
+serdes_preemphasis_85=0x1a4c06
+serdes_preemphasis_86=0x1a4c06
+serdes_preemphasis_87=0x1b4b06
+serdes_preemphasis_88=0x1b4b06
+serdes_preemphasis_89=0x1e4806
+serdes_preemphasis_90=0x1e4806
+serdes_preemphasis_91=0x1e4806
+serdes_preemphasis_102=0x1e4806
+serdes_preemphasis_103=0x1e4806
+serdes_preemphasis_104=0x1e4806
+serdes_preemphasis_105=0x1e4806
+serdes_preemphasis_106=0x1e4806
+serdes_preemphasis_107=0x1e4806
+serdes_preemphasis_108=0x1e4806
+serdes_preemphasis_109=0x1e4806
+serdes_preemphasis_110=0x1e4806
+serdes_preemphasis_111=0x1d4906
+serdes_preemphasis_112=0x234306
+serdes_preemphasis_113=0x1f4706
+serdes_preemphasis_lane0_5=0x294106
+serdes_preemphasis_lane1_5=0x294106
+serdes_preemphasis_lane2_5=0x294106
+serdes_preemphasis_lane3_5=0x294106
+serdes_preemphasis_lane0_1=0x294106
+serdes_preemphasis_lane1_1=0x294106
+serdes_preemphasis_lane2_1=0x294106
+serdes_preemphasis_lane3_1=0x294106
+serdes_preemphasis_lane0_114=0x2a4006
+serdes_preemphasis_lane1_114=0x2a4006
+serdes_preemphasis_lane2_114=0x2a4006
+serdes_preemphasis_lane3_114=0x2a4006
+serdes_preemphasis_lane0_21=0x2c3c08
+serdes_preemphasis_lane1_21=0x2a4006
+serdes_preemphasis_lane2_21=0x2a4006
+serdes_preemphasis_lane3_21=0x2a4006
+serdes_preemphasis_lane0_9=0x284206
+serdes_preemphasis_lane1_9=0x284206
+serdes_preemphasis_lane2_9=0x284206
+serdes_preemphasis_lane3_9=0x284206
+serdes_preemphasis_lane0_122=0x283e06
+serdes_preemphasis_lane1_122=0x283e06
+serdes_preemphasis_lane2_122=0x283e06
+serdes_preemphasis_lane3_122=0x294601
diff --git a/device/accton/x86_64-accton_as7312_54xs-r0/installer.conf b/device/accton/x86_64-accton_as7312_54xs-r0/installer.conf
new file mode 100644
index 000000000000..14404194ef53
--- /dev/null
+++ b/device/accton/x86_64-accton_as7312_54xs-r0/installer.conf
@@ -0,0 +1,3 @@
+CONSOLE_PORT=0x2f8
+CONSOLE_DEV=1
+CONSOLE_SPEED=115200
diff --git a/device/accton/x86_64-accton_as7312_54xs-r0/led_proc_init.soc b/device/accton/x86_64-accton_as7312_54xs-r0/led_proc_init.soc
new file mode 100755
index 000000000000..3074649497e0
--- /dev/null
+++ b/device/accton/x86_64-accton_as7312_54xs-r0/led_proc_init.soc
@@ -0,0 +1,79 @@
+# accton_as7312_54x 48x25G+6x100G SDK port LED macro init SOC
+s CMIC_LEDUP0_DATA_RAM 0
+s CMIC_LEDUP1_DATA_RAM 0
+
+m CMIC_LEDUP0_PORT_ORDER_REMAP_0_3 REMAP_PORT_0=63 REMAP_PORT_1=63 REMAP_PORT_2=63 REMAP_PORT_3=63
+m CMIC_LEDUP0_PORT_ORDER_REMAP_4_7 REMAP_PORT_4=63 REMAP_PORT_5=63 REMAP_PORT_6=63 REMAP_PORT_7=63
+m CMIC_LEDUP0_PORT_ORDER_REMAP_8_11 REMAP_PORT_8=27 REMAP_PORT_9=26 REMAP_PORT_10=25 REMAP_PORT_11=24
+m CMIC_LEDUP0_PORT_ORDER_REMAP_12_15 REMAP_PORT_12=63 REMAP_PORT_13=63 REMAP_PORT_14=63 REMAP_PORT_15=63
+m CMIC_LEDUP0_PORT_ORDER_REMAP_16_19 REMAP_PORT_16=63 REMAP_PORT_17=63 REMAP_PORT_18=63 REMAP_PORT_19=63
+m CMIC_LEDUP0_PORT_ORDER_REMAP_20_23 REMAP_PORT_20=31 REMAP_PORT_21=30 REMAP_PORT_22=29 REMAP_PORT_23=28
+m CMIC_LEDUP0_PORT_ORDER_REMAP_24_27 REMAP_PORT_24=15 REMAP_PORT_25=14 REMAP_PORT_26=13 REMAP_PORT_27=12
+m CMIC_LEDUP0_PORT_ORDER_REMAP_28_31 REMAP_PORT_28=19 REMAP_PORT_29=18 REMAP_PORT_30=17 REMAP_PORT_31=16
+m CMIC_LEDUP0_PORT_ORDER_REMAP_32_35 REMAP_PORT_32=63 REMAP_PORT_33=63 REMAP_PORT_34=63 REMAP_PORT_35=63
+m CMIC_LEDUP0_PORT_ORDER_REMAP_36_39 REMAP_PORT_36=63 REMAP_PORT_37=63 REMAP_PORT_38=63 REMAP_PORT_39=63
+m CMIC_LEDUP0_PORT_ORDER_REMAP_40_43 REMAP_PORT_40=35 REMAP_PORT_41=34 REMAP_PORT_42=33 REMAP_PORT_43=32
+m CMIC_LEDUP0_PORT_ORDER_REMAP_44_47 REMAP_PORT_44=63 REMAP_PORT_45=63 REMAP_PORT_46=63 REMAP_PORT_47=63
+m CMIC_LEDUP0_PORT_ORDER_REMAP_48_51 REMAP_PORT_48=23 REMAP_PORT_49=22 REMAP_PORT_50=21 REMAP_PORT_51=20
+m CMIC_LEDUP0_PORT_ORDER_REMAP_52_55 REMAP_PORT_52=11 REMAP_PORT_53=10 REMAP_PORT_54=9 REMAP_PORT_55=8
+m CMIC_LEDUP0_PORT_ORDER_REMAP_56_59 REMAP_PORT_56=7 REMAP_PORT_57=6 REMAP_PORT_58=5 REMAP_PORT_59=4
+m CMIC_LEDUP0_PORT_ORDER_REMAP_60_63 REMAP_PORT_60=3 REMAP_PORT_61=2 REMAP_PORT_62=1 REMAP_PORT_63=0
+
+m CMIC_LEDUP1_PORT_ORDER_REMAP_0_3 REMAP_PORT_0=19 REMAP_PORT_1=18 REMAP_PORT_2=17 REMAP_PORT_3=16
+m CMIC_LEDUP1_PORT_ORDER_REMAP_4_7 REMAP_PORT_4=23 REMAP_PORT_5=22 REMAP_PORT_6=21 REMAP_PORT_7=20
+m CMIC_LEDUP1_PORT_ORDER_REMAP_8_11 REMAP_PORT_8=3 REMAP_PORT_9=2 REMAP_PORT_10=1 REMAP_PORT_11=0
+m CMIC_LEDUP1_PORT_ORDER_REMAP_12_15 REMAP_PORT_12=63 REMAP_PORT_13=63 REMAP_PORT_14=63 REMAP_PORT_15=63
+m CMIC_LEDUP1_PORT_ORDER_REMAP_16_19 REMAP_PORT_16=7 REMAP_PORT_17=6 REMAP_PORT_18=5 REMAP_PORT_19=4
+m CMIC_LEDUP1_PORT_ORDER_REMAP_20_23 REMAP_PORT_20=11 REMAP_PORT_21=10 REMAP_PORT_22=9 REMAP_PORT_23=8
+m CMIC_LEDUP1_PORT_ORDER_REMAP_24_27 REMAP_PORT_24=63 REMAP_PORT_25=63 REMAP_PORT_26=63 REMAP_PORT_27=63
+m CMIC_LEDUP1_PORT_ORDER_REMAP_28_31 REMAP_PORT_28=63 REMAP_PORT_29=63 REMAP_PORT_30=63 REMAP_PORT_31=63
+m CMIC_LEDUP1_PORT_ORDER_REMAP_32_35 REMAP_PORT_32=15 REMAP_PORT_33=14 REMAP_PORT_34=13 REMAP_PORT_35=12
+m CMIC_LEDUP1_PORT_ORDER_REMAP_36_39 REMAP_PORT_36=27 REMAP_PORT_37=26 REMAP_PORT_38=25 REMAP_PORT_39=24
+m CMIC_LEDUP1_PORT_ORDER_REMAP_40_43 REMAP_PORT_40=63 REMAP_PORT_41=63 REMAP_PORT_42=63 REMAP_PORT_43=63
+m CMIC_LEDUP1_PORT_ORDER_REMAP_44_47 REMAP_PORT_44=63 REMAP_PORT_45=63 REMAP_PORT_46=63 REMAP_PORT_47=63
+m CMIC_LEDUP1_PORT_ORDER_REMAP_48_51 REMAP_PORT_48=31 REMAP_PORT_49=30 REMAP_PORT_50=29 REMAP_PORT_51=28
+m CMIC_LEDUP1_PORT_ORDER_REMAP_52_55 REMAP_PORT_52=35 REMAP_PORT_53=34 REMAP_PORT_54=33 REMAP_PORT_55=32
+m CMIC_LEDUP1_PORT_ORDER_REMAP_56_59 REMAP_PORT_56=63 REMAP_PORT_57=63 REMAP_PORT_58=63 REMAP_PORT_59=63
+m CMIC_LEDUP1_PORT_ORDER_REMAP_60_63 REMAP_PORT_60=63 REMAP_PORT_61=63 REMAP_PORT_62=63 REMAP_PORT_63=63
+
+led 0 stop
+led 0 prog \
+ 02 FD 42 80 02 FF 42 00 02 FE 42 00 02 FA 42 7E \
+ 02 FB 42 24 06 F9 D2 00 74 1E 02 F9 42 03 67 AC \
+ 67 C3 67 52 86 FE 67 C3 67 52 86 FE 67 C3 67 52 \
+ 86 FE 67 C3 67 52 86 FE 06 FB D6 FE 74 1E 86 FC \
+ 3E FA 06 FE 88 4A 03 71 4C 67 84 57 67 84 57 67 \
+ 98 57 06 FE 88 80 4A 00 27 97 75 4F 90 4A 00 27 \
+ 4A 01 27 B7 97 71 69 77 42 06 F9 D6 FC 74 7C 02 \
+ F9 4A 07 37 4E 07 02 FC 42 00 4E 07 06 F9 0A 07 \
+ 71 4F 77 42 16 FF 06 FD 17 4D DA 07 74 95 12 FF \
+ 52 00 86 FD 57 86 FF 57 16 FF 06 FD 07 4D DA 07 \
+ 74 A9 12 FF 52 00 86 FD 57 86 FF 57 06 FE C2 FC \
+ 98 98 12 F4 50 C2 FC 98 98 F2 F0 14 06 F4 C2 03 \
+ 88 77 D1 06 FE C2 FC 98 98 F2 E0 14 06 FE C2 03 \
+ 88 18 71 E2 80 18 71 DD 67 98 67 98 57 67 98 67 \
+ 84 57 80 18 71 EB 67 84 67 98 57 67 84 67 84 57 \
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+led 0 start
+led auto on
+
+led 1 stop
+led 1 prog \
+ 02 FD 42 80 02 FF 42 00 02 FE 42 00 02 FA 42 7E \
+ 02 FB 42 24 06 F9 D2 00 74 1E 02 F9 42 03 67 AC \
+ 67 C3 67 52 86 FE 67 C3 67 52 86 FE 67 C3 67 52 \
+ 86 FE 67 C3 67 52 86 FE 06 FB D6 FE 74 1E 86 FC \
+ 3E FA 06 FE 88 4A 03 71 4C 67 84 57 67 84 57 67 \
+ 98 57 06 FE 88 80 4A 00 27 97 75 4F 90 4A 00 27 \
+ 4A 01 27 B7 97 71 69 77 42 06 F9 D6 FC 74 7C 02 \
+ F9 4A 07 37 4E 07 02 FC 42 00 4E 07 06 F9 0A 07 \
+ 71 4F 77 42 16 FF 06 FD 17 4D DA 07 74 95 12 FF \
+ 52 00 86 FD 57 86 FF 57 16 FF 06 FD 07 4D DA 07 \
+ 74 A9 12 FF 52 00 86 FD 57 86 FF 57 06 FE C2 FC \
+ 98 98 12 F4 50 C2 FC 98 98 F2 F0 14 06 F4 C2 03 \
+ 88 77 D1 06 FE C2 FC 98 98 F2 E0 14 06 FE C2 03 \
+ 88 18 71 E2 80 18 71 DD 67 98 67 98 57 67 98 67 \
+ 84 57 80 18 71 EB 67 84 67 98 57 67 84 67 84 57 \
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+led 1 start
+led auto on
diff --git a/device/accton/x86_64-accton_as7312_54xs-r0/minigraph.xml b/device/accton/x86_64-accton_as7312_54xs-r0/minigraph.xml
new file mode 100644
index 000000000000..30f9962d1f11
--- /dev/null
+++ b/device/accton/x86_64-accton_as7312_54xs-r0/minigraph.xml
@@ -0,0 +1,1184 @@
+
+
+
+
+
+ ARISTA01T0
+ 10.0.0.33
+ sonic
+ 10.0.0.32
+ 1
+ 180
+ 60
+
+
+ sonic
+ 10.0.0.0
+ ARISTA01T2
+ 10.0.0.1
+ 1
+ 180
+ 60
+
+
+ ARISTA02T0
+ 10.0.0.35
+ sonic
+ 10.0.0.34
+ 1
+ 180
+ 60
+
+
+ sonic
+ 10.0.0.2
+ ARISTA02T2
+ 10.0.0.3
+ 1
+ 180
+ 60
+
+
+ ARISTA03T0
+ 10.0.0.37
+ sonic
+ 10.0.0.36
+ 1
+ 180
+ 60
+
+
+ sonic
+ 10.0.0.4
+ ARISTA03T2
+ 10.0.0.5
+ 1
+ 180
+ 60
+
+
+ ARISTA04T0
+ 10.0.0.39
+ sonic
+ 10.0.0.38
+ 1
+ 180
+ 60
+
+
+ sonic
+ 10.0.0.6
+ ARISTA04T2
+ 10.0.0.7
+ 1
+ 180
+ 60
+
+
+ ARISTA05T0
+ 10.0.0.41
+ sonic
+ 10.0.0.40
+ 1
+ 180
+ 60
+
+
+ sonic
+ 10.0.0.8
+ ARISTA05T2
+ 10.0.0.9
+ 1
+ 180
+ 60
+
+
+ ARISTA06T0
+ 10.0.0.43
+ sonic
+ 10.0.0.42
+ 1
+ 180
+ 60
+
+
+ sonic
+ 10.0.0.10
+ ARISTA06T2
+ 10.0.0.11
+ 1
+ 180
+ 60
+
+
+ ARISTA07T0
+ 10.0.0.45
+ sonic
+ 10.0.0.44
+ 1
+ 180
+ 60
+
+
+ sonic
+ 10.0.0.12
+ ARISTA07T2
+ 10.0.0.13
+ 1
+ 180
+ 60
+
+
+ ARISTA08T0
+ 10.0.0.47
+ sonic
+ 10.0.0.46
+ 1
+ 180
+ 60
+
+
+ sonic
+ 10.0.0.14
+ ARISTA08T2
+ 10.0.0.15
+ 1
+ 180
+ 60
+
+
+ ARISTA09T0
+ 10.0.0.49
+ sonic
+ 10.0.0.48
+ 1
+ 180
+ 60
+
+
+ sonic
+ 10.0.0.16
+ ARISTA09T2
+ 10.0.0.17
+ 1
+ 180
+ 60
+
+
+ ARISTA10T0
+ 10.0.0.51
+ sonic
+ 10.0.0.50
+ 1
+ 180
+ 60
+
+
+ sonic
+ 10.0.0.18
+ ARISTA10T2
+ 10.0.0.19
+ 1
+ 180
+ 60
+
+
+ ARISTA11T0
+ 10.0.0.53
+ sonic
+ 10.0.0.52
+ 1
+ 180
+ 60
+
+
+ sonic
+ 10.0.0.20
+ ARISTA11T2
+ 10.0.0.21
+ 1
+ 180
+ 60
+
+
+ ARISTA12T0
+ 10.0.0.55
+ sonic
+ 10.0.0.54
+ 1
+ 180
+ 60
+
+
+ sonic
+ 10.0.0.22
+ ARISTA12T2
+ 10.0.0.23
+ 1
+ 180
+ 60
+
+
+ ARISTA13T0
+ 10.0.0.57
+ sonic
+ 10.0.0.56
+ 1
+ 180
+ 60
+
+
+ sonic
+ 10.0.0.24
+ ARISTA13T2
+ 10.0.0.25
+ 1
+ 180
+ 60
+
+
+ ARISTA14T0
+ 10.0.0.59
+ sonic
+ 10.0.0.58
+ 1
+ 180
+ 60
+
+
+ sonic
+ 10.0.0.26
+ ARISTA14T2
+ 10.0.0.27
+ 1
+ 180
+ 60
+
+
+ ARISTA15T0
+ 10.0.0.61
+ sonic
+ 10.0.0.60
+ 1
+ 180
+ 60
+
+
+ sonic
+ 10.0.0.28
+ ARISTA15T2
+ 10.0.0.29
+ 1
+ 180
+ 60
+
+
+ ARISTA16T0
+ 10.0.0.63
+ sonic
+ 10.0.0.62
+ 1
+ 180
+ 60
+
+
+ sonic
+ 10.0.0.30
+ ARISTA16T2
+ 10.0.0.31
+ 1
+ 180
+ 60
+
+
+
+
+ 65100
+ sonic
+
+
+ 10.0.0.33
+
+
+
+
+ 10.0.0.1
+
+
+
+
+ 10.0.0.35
+
+
+
+
+ 10.0.0.3
+
+
+
+
+ 10.0.0.37
+
+
+
+
+ 10.0.0.5
+
+
+
+
+ 10.0.0.39
+
+
+
+
+ 10.0.0.7
+
+
+
+
+ 10.0.0.41
+
+
+
+
+ 10.0.0.9
+
+
+
+
+ 10.0.0.43
+
+
+
+
+ 10.0.0.11
+
+
+
+
+ 10.0.0.45
+
+
+
+
+ 10.0.0.13
+
+
+
+
+ 10.0.0.47
+
+
+
+
+ 10.0.0.15
+
+
+
+
+ 10.0.0.49
+
+
+
+
+ 10.0.0.17
+
+
+
+
+ 10.0.0.51
+
+
+
+
+ 10.0.0.19
+
+
+
+
+ 10.0.0.53
+
+
+
+
+ 10.0.0.21
+
+
+
+
+ 10.0.0.55
+
+
+
+
+ 10.0.0.23
+
+
+
+
+ 10.0.0.57
+
+
+
+
+ 10.0.0.25
+
+
+
+
+ 10.0.0.59
+
+
+
+
+ 10.0.0.27
+
+
+
+
+ 10.0.0.61
+
+
+
+
+ 10.0.0.29
+
+
+
+
+ 10.0.0.63
+
+
+
+
+ 10.0.0.31
+
+
+
+
+
+
+
+ 64001
+ ARISTA01T0
+
+
+
+ 65200
+ ARISTA01T2
+
+
+
+ 64002
+ ARISTA02T0
+
+
+
+ 65200
+ ARISTA02T2
+
+
+
+ 64003
+ ARISTA03T0
+
+
+
+ 65200
+ ARISTA03T2
+
+
+
+ 64004
+ ARISTA04T0
+
+
+
+ 65200
+ ARISTA04T2
+
+
+
+ 64005
+ ARISTA05T0
+
+
+
+ 65200
+ ARISTA05T2
+
+
+
+ 64006
+ ARISTA06T0
+
+
+
+ 65200
+ ARISTA06T2
+
+
+
+ 64007
+ ARISTA07T0
+
+
+
+ 65200
+ ARISTA07T2
+
+
+
+ 64008
+ ARISTA08T0
+
+
+
+ 65200
+ ARISTA08T2
+
+
+
+ 64009
+ ARISTA09T0
+
+
+
+ 65200
+ ARISTA09T2
+
+
+
+ 64010
+ ARISTA10T0
+
+
+
+ 65200
+ ARISTA10T2
+
+
+
+ 64011
+ ARISTA11T0
+
+
+
+ 65200
+ ARISTA11T2
+
+
+
+ 64012
+ ARISTA12T0
+
+
+
+ 65200
+ ARISTA12T2
+
+
+
+ 64013
+ ARISTA13T0
+
+
+
+ 65200
+ ARISTA13T2
+
+
+
+ 64014
+ ARISTA14T0
+
+
+
+ 65200
+ ARISTA14T2
+
+
+
+ 64015
+ ARISTA15T0
+
+
+
+ 65200
+ ARISTA15T2
+
+
+
+ 64016
+ ARISTA16T0
+
+
+
+ 65200
+ ARISTA16T2
+
+
+
+
+
+
+
+
+
+ HostIP
+ Loopback0
+
+ 10.1.0.32/32
+
+ 10.1.0.32/32
+
+
+
+
+
+
+
+ sonic
+
+
+
+
+
+ Ethernet0
+ 10.0.0.0/31
+
+
+
+ Ethernet1
+ 10.0.0.2/31
+
+
+
+ Ethernet2
+ 10.0.0.4/31
+
+
+
+ Ethernet3
+ 10.0.0.6/31
+
+
+
+ Ethernet4
+ 10.0.0.8/31
+
+
+
+ Ethernet5
+ 10.0.0.10/31
+
+
+
+ Ethernet6
+ 10.0.0.12/31
+
+
+
+ Ethernet7
+ 10.0.0.14/31
+
+
+
+ Ethernet8
+ 10.0.0.16/31
+
+
+
+ Ethernet9
+ 10.0.0.18/31
+
+
+
+ Ethernet10
+ 10.0.0.20/31
+
+
+
+ Ethernet11
+ 10.0.0.22/31
+
+
+
+ Ethernet12
+ 10.0.0.24/31
+
+
+
+ Ethernet13
+ 10.0.0.26/31
+
+
+
+ Ethernet14
+ 10.0.0.28/31
+
+
+
+ Ethernet15
+ 10.0.0.30/31
+
+
+
+ Ethernet16
+ 10.0.0.32/31
+
+
+
+ Ethernet17
+ 10.0.0.34/31
+
+
+
+ Ethernet18
+ 10.0.0.36/31
+
+
+
+ Ethernet19
+ 10.0.0.38/31
+
+
+
+ Ethernet20
+ 10.0.0.40/31
+
+
+
+ Ethernet21
+ 10.0.0.42/31
+
+
+
+ Ethernet22
+ 10.0.0.44/31
+
+
+
+ Ethernet23
+ 10.0.0.46/31
+
+
+
+ Ethernet24
+ 10.0.0.48/31
+
+
+
+ Ethernet25
+ 10.0.0.50/31
+
+
+
+ Ethernet26
+ 10.0.0.52/31
+
+
+
+ Ethernet27
+ 10.0.0.54/31
+
+
+
+ Ethernet28
+ 10.0.0.56/31
+
+
+
+ Ethernet29
+ 10.0.0.58/31
+
+
+
+ Ethernet30
+ 10.0.0.60/31
+
+
+
+ Ethernet31
+ 10.0.0.62/31
+
+
+
+ Ethernet32
+ 10.0.0.64/31
+
+
+
+ Ethernet33
+ 10.0.0.66/31
+
+
+
+ Ethernet34
+ 10.0.0.68/31
+
+
+
+ Ethernet35
+ 10.0.0.70/31
+
+
+
+ Ethernet36
+ 10.0.0.72/31
+
+
+
+ Ethernet37
+ 10.0.0.74/31
+
+
+
+ Ethernet38
+ 10.0.0.76/31
+
+
+
+ Ethernet39
+ 10.0.0.78/31
+
+
+
+ Ethernet40
+ 10.0.0.80/31
+
+
+
+ Ethernet41
+ 10.0.0.82/31
+
+
+
+ Ethernet42
+ 10.0.0.84/31
+
+
+
+ Ethernet43
+ 10.0.0.86/31
+
+
+
+ Ethernet44
+ 10.0.0.88/31
+
+
+
+ Ethernet45
+ 10.0.0.90/31
+
+
+
+ Ethernet46
+ 10.0.0.92/31
+
+
+
+ Ethernet47
+ 10.0.0.94/31
+
+
+
+ Ethernet48
+ 10.0.0.96/31
+
+
+
+ Ethernet52
+ 10.0.0.98/31
+
+
+
+ Ethernet56
+ 10.0.0.100/31
+
+
+
+ Ethernet60
+ 10.0.0.102/31
+
+
+
+ Ethernet64
+ 10.0.0.104/31
+
+
+
+ Ethernet68
+ 10.0.0.106/31
+
+
+
+
+
+
+
+
+
+
+
+ DeviceInterfaceLink
+ sonic
+ Ethernet0
+ ARISTA01T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ sonic
+ Ethernet1
+ ARISTA02T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ sonic
+ Ethernet2
+ ARISTA03T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ sonic
+ Ethernet3
+ ARISTA04T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ sonic
+ Ethernet4
+ ARISTA05T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ sonic
+ Ethernet5
+ ARISTA06T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ sonic
+ Ethernet6
+ ARISTA07T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ sonic
+ Ethernet7
+ ARISTA08T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ sonic
+ Ethernet8
+ ARISTA09T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ sonic
+ Ethernet9
+ ARISTA10T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ sonic
+ Ethernet10
+ ARISTA11T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ sonic
+ Ethernet11
+ ARISTA12T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ sonic
+ Ethernet12
+ ARISTA13T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ sonic
+ Ethernet13
+ ARISTA14T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ sonic
+ Ethernet14
+ ARISTA15T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ sonic
+ Ethernet15
+ ARISTA16T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ sonic
+ Ethernet16
+ ARISTA01T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ sonic
+ Ethernet17
+ ARISTA02T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ sonic
+ Ethernet18
+ ARISTA03T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ sonic
+ Ethernet19
+ ARISTA04T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ sonic
+ Ethernet20
+ ARISTA05T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ sonic
+ Ethernet21
+ ARISTA06T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ sonic
+ Ethernet22
+ ARISTA07T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ sonic
+ Ethernet23
+ ARISTA08T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ sonic
+ Ethernet24
+ ARISTA09T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ sonic
+ Ethernet25
+ ARISTA10T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ sonic
+ Ethernet26
+ ARISTA11T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ sonic
+ Ethernet27
+ ARISTA12T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ sonic
+ Ethernet28
+ ARISTA13T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ sonic
+ Ethernet29
+ ARISTA14T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ sonic
+ Ethernet30
+ ARISTA15T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ sonic
+ Ethernet31
+ ARISTA16T0
+ Ethernet1
+
+
+
+
+ sonic
+ Accton-AS7312-54XS
+
+
+
+
+
+
+ sonic
+
+
+ DhcpResources
+
+
+
+
+ NtpResources
+
+ 0.debian.pool.ntp.org;1.debian.pool.ntp.org;2.debian.pool.ntp.org;3.debian.pool.ntp.org
+
+
+ SyslogResources
+
+
+
+
+
+
+
+
+ sonic
+ Accton-AS7312-54XS
+
diff --git a/device/accton/x86_64-accton_as7312_54xs-r0/plugins/eeprom.py b/device/accton/x86_64-accton_as7312_54xs-r0/plugins/eeprom.py
new file mode 100644
index 000000000000..7681caafeef4
--- /dev/null
+++ b/device/accton/x86_64-accton_as7312_54xs-r0/plugins/eeprom.py
@@ -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)
diff --git a/device/accton/x86_64-accton_as7312_54xs-r0/plugins/psuutil.py b/device/accton/x86_64-accton_as7312_54xs-r0/plugins/psuutil.py
new file mode 100644
index 000000000000..d73e65bf7981
--- /dev/null
+++ b/device/accton/x86_64-accton_as7312_54xs-r0/plugins/psuutil.py
@@ -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 = {
+ 2: "11-0053",
+ 1: "10-0050",
+ }
+
+ 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
diff --git a/device/accton/x86_64-accton_as7312_54xs-r0/plugins/sfputil.py b/device/accton/x86_64-accton_as7312_54xs-r0/plugins/sfputil.py
new file mode 100644
index 000000000000..956b6b352f9c
--- /dev/null
+++ b/device/accton/x86_64-accton_as7312_54xs-r0/plugins/sfputil.py
@@ -0,0 +1,215 @@
+# sfputil.py
+#
+# Platform-specific SFP transceiver interface for SONiC
+#
+
+try:
+ import time
+ 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 = 0
+ PORT_END = 71
+ PORTS_IN_BLOCK = 72
+ QSFP_PORT_START = 48
+ QSFP_PORT_END = 72
+
+ BASE_VAL_PATH = "/sys/class/i2c-adapter/i2c-{0}/{1}-0050/"
+
+ _port_to_is_present = {}
+ _port_to_lp_mode = {}
+
+ _port_to_eeprom_mapping = {}
+ _cpld_mapping = {
+ 0: "4-0060",
+ 1: "5-0062",
+ 2: "6-0064",
+ }
+ _port_to_i2c_mapping = {
+ 0: 18,
+ 1: 19,
+ 2: 20,
+ 3: 21,
+ 4: 22,
+ 5: 23,
+ 6: 24,
+ 7: 25,
+ 8: 26,
+ 9: 27,
+ 10: 28,
+ 11: 29,
+ 12: 30,
+ 13: 31,
+ 14: 32,
+ 15: 33,
+ 16: 34,
+ 17: 35,
+ 18: 36,
+ 19: 37,
+ 20: 38,
+ 21: 39,
+ 22: 40,
+ 23: 41,
+ 24: 42,
+ 25: 43,
+ 26: 44,
+ 27: 45,
+ 28: 46,
+ 29: 47,
+ 30: 48,
+ 31: 49,
+ 32: 50,
+ 33: 51,
+ 34: 52,
+ 35: 53,
+ 36: 54,
+ 37: 55,
+ 38: 56,
+ 39: 57,
+ 40: 58,
+ 41: 59,
+ 42: 60,
+ 43: 61,
+ 44: 62,
+ 45: 63,
+ 46: 64,
+ 47: 65,
+ 48: 66, #QSFP49
+ 49: 66,
+ 50: 66,
+ 51: 66,
+ 52: 67, #QSFP50
+ 53: 67,
+ 54: 67,
+ 55: 67,
+ 56: 68, #QSFP51
+ 57: 68,
+ 58: 68,
+ 59: 68,
+ 60: 69, #QSFP52
+ 61: 69,
+ 62: 69,
+ 63: 69,
+ 64: 70, #QSFP53
+ 65: 70,
+ 66: 70,
+ 67: 70,
+ 68: 71, #QSFP54
+ 69: 71,
+ 70: 71,
+ 71: 71,
+ }
+
+ @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.QSFP_PORT_START
+
+ @property
+ def qsfp_port_end(self):
+ return self.QSFP_PORT_END
+
+ @property
+ def qsfp_ports(self):
+ return range(self.QSFP_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(0, self.port_end+1):
+ self.port_to_eeprom_mapping[x] = eeprom_path.format(
+ self._port_to_i2c_mapping[x])
+
+ SfpUtilBase.__init__(self)
+
+
+ # For port 48~51 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.QSFP_PORT_START):
+ cage_num = (port_num - self.QSFP_PORT_START)/4
+ cage_num = cage_num + self.QSFP_PORT_START
+
+ return cage_num
+
+ # For cage 0~23 and 48~51 are at cpld2, others are at cpld3.
+ def get_cpld_num(self, port_num):
+ cpld_i = 1
+ cage_num = self.get_cage_num(port_num)
+ if (port_num > 23 and port_num < self.QSFP_PORT_START):
+ cpld_i = 2
+
+ if (cage_num >= 52):
+ cpld_i = 2
+
+ return cpld_i
+
+ 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)
+ cpld_i = self.get_cpld_num(port_num)
+
+ cpld_ps = self._cpld_mapping[cpld_i]
+ path = "/sys/bus/i2c/devices/{0}/module_present_{1}"
+ port_ps = path.format(cpld_ps, cage_num+1)
+
+ 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(self, port_num):
+ raise NotImplementedError
+
+ def set_low_power_mode(self, port_num, lpmode):
+ raise NotImplementedError
+
+ 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)
+ cpld_i = self.get_cpld_num(port_num)
+ cpld_ps = self._cpld_mapping[cpld_i]
+ path = "/sys/bus/i2c/devices/{0}/module_reset_{1}"
+ port_ps = path.format(cpld_ps, cage_num+1)
+ try:
+ reg_file = open(port_ps, 'w')
+ except IOError as e:
+ print "Error: unable to open file: %s" % str(e)
+ return False
+
+ reg_value = '0'
+
+ reg_file.write(reg_value)
+ reg_file.close()
+
+ return True
diff --git a/device/arista/x86_64-arista_7050_qx32/Arista-7050-Q16S64/sai.profile b/device/arista/x86_64-arista_7050_qx32/Arista-7050-Q16S64/sai.profile
index 0175b59a5da3..5c613675c37f 100644
--- a/device/arista/x86_64-arista_7050_qx32/Arista-7050-Q16S64/sai.profile
+++ b/device/arista/x86_64-arista_7050_qx32/Arista-7050-Q16S64/sai.profile
@@ -1,2 +1,2 @@
-SAI_INIT_CONFIG_FILE=/etc/bcm/td2-a7050-qx32-16x40G+32x10G+8x40G.config.bcm
+SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/td2-a7050-qx32-16x40G+32x10G+8x40G.config.bcm
SAI_NUM_ECMP_MEMBERS=32
diff --git a/device/arista/x86_64-arista_7050_qx32/Arista-7050-Q16S64/td2-a7050-qx32-16x40G+32x10G+8x40G.config.bcm b/device/arista/x86_64-arista_7050_qx32/Arista-7050-Q16S64/td2-a7050-qx32-16x40G+32x10G+8x40G.config.bcm
new file mode 100644
index 000000000000..6d72e20b2104
--- /dev/null
+++ b/device/arista/x86_64-arista_7050_qx32/Arista-7050-Q16S64/td2-a7050-qx32-16x40G+32x10G+8x40G.config.bcm
@@ -0,0 +1,707 @@
+#/******************************************************************************
+# *
+# * File: config.bcm.cloverdales (7050-QX32)
+# * Name:
+# *
+# * Description: This file contains SDK properties for an Arista
+# * Cloverdales platform.
+# *
+# *-----------------------------------------------------------------------------
+# ******************************************************************************/
+####################################################################
+# BCM Config file for Cloverdale platform
+# - 16x40g + 32x10g + 8x40G Portmode
+
+# Old LPM only configuration
+# l2_mem_entries=163840
+# l3_mem_entries=90112
+# l3_alpm_enable=0
+# ipv6_lpm_128b_enable=0
+#
+# ALPM enable
+l3_alpm_enable=2
+ipv6_lpm_128b_enable=1
+l2_mem_entries=32768
+l3_mem_entries=16384
+
+# From old config file
+os=unix
+higig2_hdr_mode=1
+
+# Parity
+parity_correction=1
+parity_enable=1
+stat_if_parity_enable=0
+
+# l2 thread related config vars
+l2xmsg_hostbuf_size=8192
+l2xmsg_mode=1
+
+bcm_num_cos=8
+bcm_stat_interval=2000000
+lls_num_l2uc=12
+max_vp_lags=0
+miim_intr_enable=0
+mmu_lossless=0
+module_64ports=0
+scache_filename=/tmp/scache
+schan_intr_enable=0
+stable_size=0x2000000
+tdma_timeout_usec=5000000
+
+# for GLC transceiver
+phy_an_c73=0x0
+phy_an_c37=0x3
+
+###########################
+#port_init_speed_xe=40000
+#port_init_speed_xe.0=40000
+
+#load_firmware=0x0102
+load_firmware.0=2
+
+#########################
+# All ports are in oversubscription mode
+pbmp_oversubscribe=0x1fffffffffffffffffffffffffe
+pbmp_xport_xe.0=0x1fffffffffffffffffffffffffe
+
+##########################################
+#skip_L2_USER_ENTRY=0
+phy_aux_voltage_enable=1
+###############################
+serdes_fiber_pref=1
+###############################
+mdio_output_delay.0=0x0d
+###############################
+serdes_sgmii_m=0
+xgxs_lcpll_xtal_refclk=1
+xgxs_lcpll_xtal_refclk.0=1
+xgxs_lcpll_xtal_refclk.1=1
+xgxs_lcpll_xtal_refclk.2=1
+xgxs_lcpll_xtal_refclk.3=1
+tdma_intr_enable=1
+tslam_intr_enable=1
+tslam_dma_enable.2=1
+tslam_dma_enable.3=1
+#dport_map_port=0
+#pci2eb_overrid=0
+#bcm_xlate_port_enable.0=0
+#xgxs_pdetect_1=0
+table_dma_enable.0=1
+table_dma_enable.1=1
+table_dma_enable.2=1
+table_dma_enable.3=1
+
+
+phy_84328_1.0=1
+phy_84328_5.0=1
+phy_84328_9.0=1
+phy_84328_13.0=1
+phy_84328_101.0=1
+phy_84328_102.0=1
+phy_84328_103.0=1
+phy_84328_104.0=1
+
+phy_an_c37_1.0=0
+phy_an_c37_5.0=0
+phy_an_c37_9.0=0
+phy_an_c37_13.0=0
+phy_an_c37_17.0=0
+phy_an_c37_21.0=0
+phy_an_c37_25.0=0
+phy_an_c37_29.0=0
+phy_an_c37_33.0=0
+phy_an_c37_37.0=0
+phy_an_c37_41.0=0
+phy_an_c37_45.0=0
+phy_an_c37_49.0=0
+phy_an_c37_53.0=0
+phy_an_c37_57.0=0
+phy_an_c37_61.0=0
+phy_an_c37_65.0=3
+phy_an_c37_66.0=3
+phy_an_c37_67.0=3
+phy_an_c37_68.0=3
+phy_an_c37_69.0=3
+phy_an_c37_70.0=3
+phy_an_c37_71.0=3
+phy_an_c37_72.0=3
+phy_an_c37_73.0=3
+phy_an_c37_74.0=3
+phy_an_c37_75.0=3
+phy_an_c37_76.0=3
+phy_an_c37_77.0=3
+phy_an_c37_78.0=3
+phy_an_c37_79.0=3
+phy_an_c37_80.0=3
+phy_an_c37_81.0=3
+phy_an_c37_82.0=3
+phy_an_c37_83.0=3
+phy_an_c37_84.0=3
+phy_an_c37_85.0=3
+phy_an_c37_86.0=3
+phy_an_c37_87.0=3
+phy_an_c37_88.0=3
+phy_an_c37_89.0=3
+phy_an_c37_90.0=3
+phy_an_c37_91.0=3
+phy_an_c37_92.0=3
+phy_an_c37_93.0=3
+phy_an_c37_94.0=3
+phy_an_c37_95.0=3
+phy_an_c37_96.0=3
+phy_an_c37_97.0=0
+phy_an_c37_98.0=0
+phy_an_c37_99.0=0
+phy_an_c37_100.0=0
+phy_an_c37_101.0=0
+phy_an_c37_102.0=0
+phy_an_c37_103.0=0
+phy_an_c37_104.0=0
+
+phy_an_c73_1.0=2
+phy_an_c73_5.0=2
+phy_an_c73_9.0=2
+phy_an_c73_13.0=2
+phy_an_c73_17.0=2
+phy_an_c73_21.0=2
+phy_an_c73_25.0=2
+phy_an_c73_29.0=2
+phy_an_c73_33.0=2
+phy_an_c73_37.0=2
+phy_an_c73_41.0=2
+phy_an_c73_45.0=2
+phy_an_c73_49.0=2
+phy_an_c73_53.0=2
+phy_an_c73_57.0=2
+phy_an_c73_61.0=2
+phy_an_c73_65.0=0
+phy_an_c73_66.0=0
+phy_an_c73_67.0=0
+phy_an_c73_68.0=0
+phy_an_c73_69.0=0
+phy_an_c73_70.0=0
+phy_an_c73_71.0=0
+phy_an_c73_72.0=0
+phy_an_c73_73.0=0
+phy_an_c73_74.0=0
+phy_an_c73_75.0=0
+phy_an_c73_76.0=0
+phy_an_c73_77.0=0
+phy_an_c73_78.0=0
+phy_an_c73_79.0=0
+phy_an_c73_80.0=0
+phy_an_c73_81.0=0
+phy_an_c73_82.0=0
+phy_an_c73_83.0=0
+phy_an_c73_84.0=0
+phy_an_c73_85.0=0
+phy_an_c73_86.0=0
+phy_an_c73_87.0=0
+phy_an_c73_88.0=0
+phy_an_c73_89.0=0
+phy_an_c73_90.0=0
+phy_an_c73_91.0=0
+phy_an_c73_92.0=0
+phy_an_c73_93.0=0
+phy_an_c73_94.0=0
+phy_an_c73_95.0=0
+phy_an_c73_96.0=0
+phy_an_c73_97.0=2
+phy_an_c73_98.0=2
+phy_an_c73_99.0=2
+phy_an_c73_100.0=2
+phy_an_c73_101.0=2
+phy_an_c73_102.0=2
+phy_an_c73_103.0=2
+phy_an_c73_104.0=2
+
+phy_aux_voltage_enable_1.0=0x1
+phy_aux_voltage_enable_5.0=0x1
+phy_aux_voltage_enable_9.0=0x1
+phy_aux_voltage_enable_13.0=0x1
+phy_aux_voltage_enable_101.0=0x1
+phy_aux_voltage_enable_102.0=0x1
+phy_aux_voltage_enable_103.0=0x1
+phy_aux_voltage_enable_104.0=0x1
+
+phy_ext_rom_boot.0=0
+
+phy_ext_rom_boot_1.0=0x0
+phy_ext_rom_boot_5.0=0x0
+phy_ext_rom_boot_9.0=0x0
+phy_ext_rom_boot_13.0=0x0
+phy_ext_rom_boot_101.0=0x0
+phy_ext_rom_boot_102.0=0x0
+phy_ext_rom_boot_103.0=0x0
+phy_ext_rom_boot_104.0=0x0
+
+
+phy_line_tx_mode_1.0=1
+phy_line_tx_mode_5.0=1
+phy_line_tx_mode_9.0=1
+phy_line_tx_mode_13.0=1
+phy_line_tx_mode_101.0=1
+phy_line_tx_mode_102.0=1
+phy_line_tx_mode_103.0=1
+phy_line_tx_mode_104.0=1
+
+
+phy_rx_polarity_flip_1.0=0x0
+phy_rx_polarity_flip_5.0=0x0
+phy_rx_polarity_flip_9.0=0x0
+phy_rx_polarity_flip_13.0=0x0
+phy_rx_polarity_flip_101.0=0x0
+phy_rx_polarity_flip_102.0=0x0
+phy_rx_polarity_flip_103.0=0x0
+phy_rx_polarity_flip_104.0=0x0
+
+phy_system_tx_mode_1.0=0
+phy_system_tx_mode_5.0=0
+phy_system_tx_mode_9.0=0
+phy_system_tx_mode_13.0=0
+phy_system_tx_mode_101.0=0
+phy_system_tx_mode_102.0=0
+phy_system_tx_mode_103.0=0
+phy_system_tx_mode_104.0=0
+
+
+phy_tx_polarity_flip_1.0=0x0
+phy_tx_polarity_flip_5.0=0x0
+phy_tx_polarity_flip_9.0=0x0
+phy_tx_polarity_flip_13.0=0x0
+phy_tx_polarity_flip_101.0=0x0
+phy_tx_polarity_flip_102.0=0x0
+phy_tx_polarity_flip_103.0=0x0
+phy_tx_polarity_flip_104.0=0x0
+
+
+phy_xaui_rx_polarity_flip_1.0=0x0
+phy_xaui_rx_polarity_flip_5.0=0x0
+phy_xaui_rx_polarity_flip_9.0=0x0
+phy_xaui_rx_polarity_flip_13.0=0x0
+phy_xaui_rx_polarity_flip_17.0=0x0
+phy_xaui_rx_polarity_flip_21.0=0x0
+phy_xaui_rx_polarity_flip_25.0=0x0
+phy_xaui_rx_polarity_flip_29.0=0x0
+phy_xaui_rx_polarity_flip_33.0=0x0
+phy_xaui_rx_polarity_flip_37.0=0x0
+phy_xaui_rx_polarity_flip_41.0=0x0
+phy_xaui_rx_polarity_flip_45.0=0x0
+phy_xaui_rx_polarity_flip_49.0=0x0
+phy_xaui_rx_polarity_flip_53.0=0x0
+phy_xaui_rx_polarity_flip_57.0=0x0
+phy_xaui_rx_polarity_flip_61.0=0x0
+phy_xaui_rx_polarity_flip_65.0=0x0
+phy_xaui_rx_polarity_flip_66.0=0x0
+phy_xaui_rx_polarity_flip_67.0=0x0
+phy_xaui_rx_polarity_flip_68.0=0x0
+phy_xaui_rx_polarity_flip_69.0=0x0
+phy_xaui_rx_polarity_flip_70.0=0x0
+phy_xaui_rx_polarity_flip_71.0=0x0
+phy_xaui_rx_polarity_flip_72.0=0x0
+phy_xaui_rx_polarity_flip_73.0=0x0
+phy_xaui_rx_polarity_flip_74.0=0x0
+phy_xaui_rx_polarity_flip_75.0=0x0
+phy_xaui_rx_polarity_flip_76.0=0x0
+phy_xaui_rx_polarity_flip_77.0=0x0
+phy_xaui_rx_polarity_flip_78.0=0x0
+phy_xaui_rx_polarity_flip_79.0=0x0
+phy_xaui_rx_polarity_flip_80.0=0x0
+phy_xaui_rx_polarity_flip_81.0=0x0
+phy_xaui_rx_polarity_flip_82.0=0x0
+phy_xaui_rx_polarity_flip_83.0=0x0
+phy_xaui_rx_polarity_flip_84.0=0x0
+phy_xaui_rx_polarity_flip_85.0=0x0
+phy_xaui_rx_polarity_flip_86.0=0x0
+phy_xaui_rx_polarity_flip_87.0=0x0
+phy_xaui_rx_polarity_flip_88.0=0x0
+phy_xaui_rx_polarity_flip_89.0=0x0
+phy_xaui_rx_polarity_flip_90.0=0x0
+phy_xaui_rx_polarity_flip_91.0=0x0
+phy_xaui_rx_polarity_flip_92.0=0x0
+phy_xaui_rx_polarity_flip_93.0=0x0
+phy_xaui_rx_polarity_flip_94.0=0x0
+phy_xaui_rx_polarity_flip_95.0=0x0
+phy_xaui_rx_polarity_flip_96.0=0x0
+phy_xaui_rx_polarity_flip_97.0=0x0
+phy_xaui_rx_polarity_flip_98.0=0x0
+phy_xaui_rx_polarity_flip_99.0=0x0
+phy_xaui_rx_polarity_flip_100.0=0x0
+phy_xaui_rx_polarity_flip_101.0=0x0
+phy_xaui_rx_polarity_flip_102.0=0x0
+phy_xaui_rx_polarity_flip_103.0=0x0
+phy_xaui_rx_polarity_flip_104.0=0x0
+
+phy_xaui_tx_polarity_flip_1.0=0x0
+phy_xaui_tx_polarity_flip_5.0=0x0
+phy_xaui_tx_polarity_flip_9.0=0x0
+phy_xaui_tx_polarity_flip_13.0=0x0
+phy_xaui_tx_polarity_flip_17.0=0x0
+phy_xaui_tx_polarity_flip_21.0=0x0
+phy_xaui_tx_polarity_flip_25.0=0x0
+phy_xaui_tx_polarity_flip_29.0=0x0
+phy_xaui_tx_polarity_flip_33.0=0x0
+phy_xaui_tx_polarity_flip_37.0=0x0
+phy_xaui_tx_polarity_flip_41.0=0x0
+phy_xaui_tx_polarity_flip_45.0=0x0
+phy_xaui_tx_polarity_flip_49.0=0x0
+phy_xaui_tx_polarity_flip_53.0=0x0
+phy_xaui_tx_polarity_flip_57.0=0x0
+phy_xaui_tx_polarity_flip_61.0=0x0
+phy_xaui_tx_polarity_flip_65.0=0x0
+phy_xaui_tx_polarity_flip_66.0=0x0
+phy_xaui_tx_polarity_flip_67.0=0x0
+phy_xaui_tx_polarity_flip_68.0=0x0
+phy_xaui_tx_polarity_flip_69.0=0x0
+phy_xaui_tx_polarity_flip_70.0=0x0
+phy_xaui_tx_polarity_flip_71.0=0x0
+phy_xaui_tx_polarity_flip_72.0=0x0
+phy_xaui_tx_polarity_flip_73.0=0x0
+phy_xaui_tx_polarity_flip_74.0=0x0
+phy_xaui_tx_polarity_flip_75.0=0x0
+phy_xaui_tx_polarity_flip_76.0=0x0
+phy_xaui_tx_polarity_flip_77.0=0x0
+phy_xaui_tx_polarity_flip_78.0=0x0
+phy_xaui_tx_polarity_flip_79.0=0x0
+phy_xaui_tx_polarity_flip_80.0=0x0
+phy_xaui_tx_polarity_flip_81.0=0x0
+phy_xaui_tx_polarity_flip_82.0=0x0
+phy_xaui_tx_polarity_flip_83.0=0x0
+phy_xaui_tx_polarity_flip_84.0=0x0
+phy_xaui_tx_polarity_flip_85.0=0x0
+phy_xaui_tx_polarity_flip_86.0=0x0
+phy_xaui_tx_polarity_flip_87.0=0x0
+phy_xaui_tx_polarity_flip_88.0=0x0
+phy_xaui_tx_polarity_flip_89.0=0x0
+phy_xaui_tx_polarity_flip_90.0=0x0
+phy_xaui_tx_polarity_flip_91.0=0x0
+phy_xaui_tx_polarity_flip_92.0=0x0
+phy_xaui_tx_polarity_flip_93.0=0x0
+phy_xaui_tx_polarity_flip_94.0=0x0
+phy_xaui_tx_polarity_flip_95.0=0x0
+phy_xaui_tx_polarity_flip_96.0=0x0
+phy_xaui_tx_polarity_flip_97.0=0x0
+phy_xaui_tx_polarity_flip_98.0=0x0
+phy_xaui_tx_polarity_flip_99.0=0x0
+phy_xaui_tx_polarity_flip_100.0=0x0
+phy_xaui_tx_polarity_flip_101.0=0x0
+phy_xaui_tx_polarity_flip_102.0=0x0
+phy_xaui_tx_polarity_flip_103.0=0x0
+phy_xaui_tx_polarity_flip_104.0=0x0
+
+port_init_autoneg_17.0=0
+port_init_autoneg_21.0=0
+port_init_autoneg_25.0=0
+port_init_autoneg_29.0=0
+port_init_autoneg_33.0=0
+port_init_autoneg_37.0=0
+port_init_autoneg_41.0=0
+port_init_autoneg_45.0=0
+port_init_autoneg_49.0=0
+port_init_autoneg_53.0=0
+port_init_autoneg_57.0=0
+port_init_autoneg_61.0=0
+port_init_autoneg_65.0=0
+port_init_autoneg_66.0=0
+port_init_autoneg_67.0=0
+port_init_autoneg_68.0=0
+port_init_autoneg_69.0=0
+port_init_autoneg_70.0=0
+port_init_autoneg_71.0=0
+port_init_autoneg_72.0=0
+port_init_autoneg_73.0=0
+port_init_autoneg_74.0=0
+port_init_autoneg_75.0=0
+port_init_autoneg_76.0=0
+port_init_autoneg_77.0=0
+port_init_autoneg_78.0=0
+port_init_autoneg_79.0=0
+port_init_autoneg_80.0=0
+port_init_autoneg_81.0=0
+port_init_autoneg_82.0=0
+port_init_autoneg_83.0=0
+port_init_autoneg_84.0=0
+port_init_autoneg_85.0=0
+port_init_autoneg_86.0=0
+port_init_autoneg_87.0=0
+port_init_autoneg_88.0=0
+port_init_autoneg_89.0=0
+port_init_autoneg_90.0=0
+port_init_autoneg_91.0=0
+port_init_autoneg_92.0=0
+port_init_autoneg_93.0=0
+port_init_autoneg_94.0=0
+port_init_autoneg_95.0=0
+port_init_autoneg_96.0=0
+port_init_autoneg_97.0=0
+port_init_autoneg_98.0=0
+port_init_autoneg_99.0=0
+port_init_autoneg_100.0=0
+
+port_init_cl72_hg.0=0x11
+
+
+portmap_1.0=125:40
+portmap_5.0=121:40
+portmap_9.0=13:40
+portmap_13.0=9:40
+portmap_17.0=17:40
+portmap_21.0=21:40
+portmap_25.0=25:40
+portmap_29.0=29:40
+portmap_33.0=37:40
+portmap_37.0=33:40
+portmap_41.0=45:40
+portmap_45.0=41:40
+portmap_49.0=53:40
+portmap_53.0=49:40
+portmap_57.0=69:40
+portmap_61.0=65:40
+portmap_65.0=77:10
+portmap_66.0=78:10
+portmap_67.0=79:10
+portmap_68.0=80:10
+portmap_69.0=73:10
+portmap_70.0=74:10
+portmap_71.0=75:10
+portmap_72.0=76:10
+portmap_73.0=93:10
+portmap_74.0=94:10
+portmap_75.0=95:10
+portmap_76.0=96:10
+portmap_77.0=89:10
+portmap_78.0=90:10
+portmap_79.0=91:10
+portmap_80.0=92:10
+portmap_81.0=101:10
+portmap_82.0=102:10
+portmap_83.0=103:10
+portmap_84.0=104:10
+portmap_85.0=97:10
+portmap_86.0=98:10
+portmap_87.0=99:10
+portmap_88.0=100:10
+portmap_89.0=109:10
+portmap_90.0=110:10
+portmap_91.0=111:10
+portmap_92.0=112:10
+portmap_93.0=105:10
+portmap_94.0=106:10
+portmap_95.0=107:10
+portmap_96.0=108:10
+portmap_97.0=61:40
+portmap_98.0=57:40
+portmap_99.0=81:40
+portmap_100.0=85:40
+portmap_101.0=117:40
+portmap_102.0=113:40
+portmap_103.0=5:40
+portmap_104.0=1:40
+
+port_phy_addr_1.0=0x4
+port_phy_addr_5.0=0x0
+port_phy_addr_9.0=0x2c
+port_phy_addr_13.0=0x28
+port_phy_addr_17.0=0x7f
+port_phy_addr_21.0=0x7f
+port_phy_addr_25.0=0x7f
+port_phy_addr_29.0=0x7f
+port_phy_addr_33.0=0x7f
+port_phy_addr_37.0=0x7f
+port_phy_addr_41.0=0x7f
+port_phy_addr_45.0=0x7f
+port_phy_addr_49.0=0x7f
+port_phy_addr_53.0=0x7f
+port_phy_addr_57.0=0x7f
+port_phy_addr_61.0=0x7f
+port_phy_addr_65.0=0x7f
+port_phy_addr_66.0=0x7f
+port_phy_addr_67.0=0x7f
+port_phy_addr_68.0=0x7f
+port_phy_addr_69.0=0x7f
+port_phy_addr_70.0=0x7f
+port_phy_addr_71.0=0x7f
+port_phy_addr_72.0=0x7f
+port_phy_addr_73.0=0x7f
+port_phy_addr_74.0=0x7f
+port_phy_addr_75.0=0x7f
+port_phy_addr_76.0=0x7f
+port_phy_addr_77.0=0x7f
+port_phy_addr_78.0=0x7f
+port_phy_addr_79.0=0x7f
+port_phy_addr_80.0=0x7f
+port_phy_addr_81.0=0x7f
+port_phy_addr_82.0=0x7f
+port_phy_addr_83.0=0x7f
+port_phy_addr_84.0=0x7f
+port_phy_addr_85.0=0x7f
+port_phy_addr_86.0=0x7f
+port_phy_addr_87.0=0x7f
+port_phy_addr_88.0=0x7f
+port_phy_addr_89.0=0x7f
+port_phy_addr_90.0=0x7f
+port_phy_addr_91.0=0x7f
+port_phy_addr_92.0=0x7f
+port_phy_addr_93.0=0x7f
+port_phy_addr_94.0=0x7f
+port_phy_addr_95.0=0x7f
+port_phy_addr_96.0=0x7f
+port_phy_addr_97.0=0x7f
+port_phy_addr_98.0=0x7f
+port_phy_addr_99.0=0x7f
+port_phy_addr_100.0=0x7f
+port_phy_addr_101.0=0x54
+port_phy_addr_102.0=0x50
+port_phy_addr_103.0=0x7c
+port_phy_addr_104.0=0x78
+
+port_phy_clause_1.0=0x2d
+port_phy_clause_5.0=0x2d
+port_phy_clause_9.0=0x2d
+port_phy_clause_13.0=0x2d
+port_phy_clause_101.0=0x2d
+port_phy_clause_102.0=0x2d
+port_phy_clause_103.0=0x2d
+port_phy_clause_104.0=0x2d
+
+port_phy_id0_1.0=0x600d
+port_phy_id0_5.0=0x600d
+port_phy_id0_9.0=0x600d
+port_phy_id0_13.0=0x600d
+port_phy_id0_101.0=0x600d
+port_phy_id0_102.0=0x600d
+port_phy_id0_103.0=0x600d
+port_phy_id0_104.0=0x600d
+
+port_phy_id1_1.0=0x8500
+port_phy_id1_5.0=0x8500
+port_phy_id1_9.0=0x8500
+port_phy_id1_13.0=0x8500
+port_phy_id1_101.0=0x8500
+port_phy_id1_102.0=0x8500
+port_phy_id1_103.0=0x8500
+port_phy_id1_104.0=0x8500
+
+xgxs_rx_lane_map_1.0=0x0123
+xgxs_rx_lane_map_5.0=0x0123
+xgxs_rx_lane_map_9.0=0x0123
+xgxs_rx_lane_map_13.0=0x0123
+xgxs_rx_lane_map_17.0=0x2031
+xgxs_rx_lane_map_21.0=0x2031
+xgxs_rx_lane_map_25.0=0x2031
+xgxs_rx_lane_map_29.0=0x2031
+xgxs_rx_lane_map_33.0=0x3120
+xgxs_rx_lane_map_37.0=0x3120
+xgxs_rx_lane_map_41.0=0x3120
+xgxs_rx_lane_map_45.0=0x3120
+xgxs_rx_lane_map_49.0=0x3120
+xgxs_rx_lane_map_53.0=0x3120
+xgxs_rx_lane_map_57.0=0x3120
+xgxs_rx_lane_map_61.0=0x3120
+xgxs_rx_lane_map_65.0=0x3120
+xgxs_rx_lane_map_69.0=0x3120
+xgxs_rx_lane_map_73.0=0x3120
+xgxs_rx_lane_map_77.0=0x3120
+xgxs_rx_lane_map_81.0=0x3120
+xgxs_rx_lane_map_85.0=0x3120
+xgxs_rx_lane_map_89.0=0x3120
+xgxs_rx_lane_map_93.0=0x3120
+xgxs_rx_lane_map_97.0=0x1302
+xgxs_rx_lane_map_98.0=0x1302
+xgxs_rx_lane_map_99.0=0x0213
+xgxs_tx_lane_map_100.0=0x0213
+xgxs_tx_lane_map_101.0=0x0123
+xgxs_tx_lane_map_102.0=0x0123
+xgxs_tx_lane_map_103.0=0x0123
+xgxs_tx_lane_map_104.0=0x0123
+
+xgxs_tx_lane_map_1.0=0x0123
+xgxs_tx_lane_map_5.0=0x0123
+xgxs_tx_lane_map_9.0=0x0123
+xgxs_tx_lane_map_13.0=0x0123
+xgxs_tx_lane_map_17.0=0x1302
+xgxs_tx_lane_map_21.0=0x1302
+xgxs_tx_lane_map_25.0=0x1302
+xgxs_tx_lane_map_29.0=0x1302
+xgxs_tx_lane_map_33.0=0x3120
+xgxs_tx_lane_map_37.0=0x3120
+xgxs_tx_lane_map_41.0=0x3120
+xgxs_tx_lane_map_45.0=0x3120
+xgxs_tx_lane_map_49.0=0x3120
+xgxs_tx_lane_map_53.0=0x3120
+xgxs_tx_lane_map_57.0=0x3120
+xgxs_tx_lane_map_61.0=0x3120
+xgxs_tx_lane_map_65.0=0x3120
+xgxs_tx_lane_map_69.0=0x3120
+xgxs_tx_lane_map_73.0=0x3120
+xgxs_tx_lane_map_77.0=0x3120
+xgxs_tx_lane_map_81.0=0x3120
+xgxs_tx_lane_map_85.0=0x3120
+xgxs_tx_lane_map_89.0=0x3120
+xgxs_tx_lane_map_93.0=0x3120
+xgxs_tx_lane_map_97.0=0x2031
+xgxs_tx_lane_map_98.0=0x2031
+xgxs_tx_lane_map_99.0=0x0213
+xgxs_rx_lane_map_100.0=0x0213
+xgxs_rx_lane_map_101.0=0x0123
+xgxs_rx_lane_map_102.0=0x0123
+xgxs_rx_lane_map_103.0=0x0123
+xgxs_rx_lane_map_104.0=0x0123
+
+serdes_firmware_mode_1.0=1
+serdes_firmware_mode_5.0=1
+serdes_firmware_mode_9.0=1
+serdes_firmware_mode_13.0=1
+serdes_firmware_mode_17.0=2
+serdes_firmware_mode_21.0=2
+serdes_firmware_mode_25.0=2
+serdes_firmware_mode_29.0=2
+serdes_firmware_mode_33.0=2
+serdes_firmware_mode_37.0=2
+serdes_firmware_mode_41.0=2
+serdes_firmware_mode_45.0=2
+serdes_firmware_mode_49.0=2
+serdes_firmware_mode_53.0=2
+serdes_firmware_mode_57.0=2
+serdes_firmware_mode_61.0=2
+serdes_firmware_mode_65.0=2
+serdes_firmware_mode_66.0=2
+serdes_firmware_mode_67.0=2
+serdes_firmware_mode_68.0=2
+serdes_firmware_mode_69.0=2
+serdes_firmware_mode_70.0=2
+serdes_firmware_mode_71.0=2
+serdes_firmware_mode_72.0=2
+serdes_firmware_mode_73.0=2
+serdes_firmware_mode_74.0=2
+serdes_firmware_mode_75.0=2
+serdes_firmware_mode_76.0=2
+serdes_firmware_mode_77.0=2
+serdes_firmware_mode_78.0=2
+serdes_firmware_mode_79.0=2
+serdes_firmware_mode_80.0=2
+serdes_firmware_mode_81.0=2
+serdes_firmware_mode_82.0=2
+serdes_firmware_mode_83.0=2
+serdes_firmware_mode_84.0=2
+serdes_firmware_mode_85.0=2
+serdes_firmware_mode_86.0=2
+serdes_firmware_mode_87.0=2
+serdes_firmware_mode_88.0=2
+serdes_firmware_mode_89.0=2
+serdes_firmware_mode_90.0=2
+serdes_firmware_mode_91.0=2
+serdes_firmware_mode_92.0=2
+serdes_firmware_mode_93.0=2
+serdes_firmware_mode_94.0=2
+serdes_firmware_mode_95.0=2
+serdes_firmware_mode_96.0=2
+serdes_firmware_mode_97.0=2
+serdes_firmware_mode_98.0=2
+serdes_firmware_mode_99.0=2
+serdes_firmware_mode_100.0=2
+serdes_firmware_mode_101.0=1
+serdes_firmware_mode_102.0=1
+serdes_firmware_mode_103.0=1
+serdes_firmware_mode_104.0=1
diff --git a/device/arista/x86_64-arista_7050_qx32/Arista-7050-QX32/qos.json b/device/arista/x86_64-arista_7050_qx32/Arista-7050-QX32/qos.json.j2
similarity index 100%
rename from device/arista/x86_64-arista_7050_qx32/Arista-7050-QX32/qos.json
rename to device/arista/x86_64-arista_7050_qx32/Arista-7050-QX32/qos.json.j2
diff --git a/device/arista/x86_64-arista_7050_qx32/Arista-7050-QX32/sai.profile b/device/arista/x86_64-arista_7050_qx32/Arista-7050-QX32/sai.profile
index 938d37180676..27d83fcc20e9 100644
--- a/device/arista/x86_64-arista_7050_qx32/Arista-7050-QX32/sai.profile
+++ b/device/arista/x86_64-arista_7050_qx32/Arista-7050-QX32/sai.profile
@@ -1,2 +1,2 @@
-SAI_INIT_CONFIG_FILE=/etc/bcm/td2-a7050-qx32-32x40G.config.bcm
+SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/td2-a7050-qx32-32x40G.config.bcm
SAI_NUM_ECMP_MEMBERS=32
diff --git a/device/arista/x86_64-arista_7050_qx32/Arista-7050-QX32/td2-a7050-qx32-32x40G.config.bcm b/device/arista/x86_64-arista_7050_qx32/Arista-7050-QX32/td2-a7050-qx32-32x40G.config.bcm
new file mode 100644
index 000000000000..701a8480dcb3
--- /dev/null
+++ b/device/arista/x86_64-arista_7050_qx32/Arista-7050-QX32/td2-a7050-qx32-32x40G.config.bcm
@@ -0,0 +1,873 @@
+#/******************************************************************************
+# *
+# * File: config.bcm.cloverdales (7050-QX32)
+# * Name:
+# *
+# * Description: This file contains SDK properties for an Arista
+# * Cloverdales platform.
+# *
+# *-----------------------------------------------------------------------------
+# ******************************************************************************/
+####################################################################
+# BCM Config file for Cloverdale platform
+# - 32x40g Portmode
+
+# Old LPM only configuration
+# l2_mem_entries=163840
+# l3_mem_entries=90112
+# l3_alpm_enable=0
+# ipv6_lpm_128b_enable=0
+#
+# ALPM enable
+l3_alpm_enable=2
+ipv6_lpm_128b_enable=1
+l2_mem_entries=32768
+l3_mem_entries=16384
+
+# From old config file
+os=unix
+higig2_hdr_mode=1
+
+# Parity
+parity_correction=1
+parity_enable=1
+stat_if_parity_enable=0
+
+# l2 thread related config vars
+l2xmsg_hostbuf_size=8192
+l2xmsg_mode=1
+
+bcm_num_cos=8
+bcm_stat_interval=2000000
+lls_num_l2uc=12
+max_vp_lags=0
+miim_intr_enable=0
+mmu_lossless=0
+module_64ports=0
+scache_filename=/tmp/scache
+schan_intr_enable=0
+stable_size=0x2000000
+tdma_timeout_usec=5000000
+
+# for GLC transceiver
+phy_an_c73=0x0
+phy_an_c37=0x3
+
+###########################
+#port_init_speed_xe=40000
+#port_init_speed_xe.0=40000
+
+#load_firmware=0x0102
+load_firmware.0=2
+
+#########################
+# All ports are in oversubscription mode
+pbmp_oversubscribe=0x1fffffffffffffffffffffffffe
+pbmp_xport_xe.0=0x1fffffffe
+
+phy_84328_1.0=1
+phy_84328_2.0=1
+phy_84328_29.0=1
+phy_84328_3.0=1
+phy_84328_30.0=1
+phy_84328_31.0=1
+phy_84328_32.0=1
+phy_84328_4.0=1
+phy_an_c37_1.0=3
+phy_an_c37_10.0=3
+phy_an_c37_11.0=3
+phy_an_c37_12.0=3
+phy_an_c37_13.0=3
+phy_an_c37_14.0=3
+phy_an_c37_15.0=3
+phy_an_c37_16.0=3
+phy_an_c37_17.0=3
+phy_an_c37_18.0=3
+phy_an_c37_19.0=3
+phy_an_c37_2.0=3
+phy_an_c37_20.0=3
+phy_an_c37_21.0=3
+phy_an_c37_22.0=3
+phy_an_c37_23.0=3
+phy_an_c37_24.0=3
+phy_an_c37_25.0=3
+phy_an_c37_26.0=3
+phy_an_c37_27.0=3
+phy_an_c37_28.0=3
+phy_an_c37_29.0=3
+phy_an_c37_3.0=3
+phy_an_c37_30.0=3
+phy_an_c37_31.0=3
+phy_an_c37_32.0=3
+phy_an_c37_4.0=3
+phy_an_c37_5.0=3
+phy_an_c37_6.0=3
+phy_an_c37_7.0=3
+phy_an_c37_8.0=3
+phy_an_c37_9.0=3
+phy_an_c73_1.0=1
+phy_an_c73_10.0=1
+phy_an_c73_11.0=1
+phy_an_c73_12.0=1
+phy_an_c73_13.0=1
+phy_an_c73_14.0=1
+phy_an_c73_15.0=1
+phy_an_c73_16.0=1
+phy_an_c73_17.0=1
+phy_an_c73_18.0=1
+phy_an_c73_19.0=1
+phy_an_c73_2.0=1
+phy_an_c73_20.0=1
+phy_an_c73_21.0=1
+phy_an_c73_22.0=1
+phy_an_c73_23.0=1
+phy_an_c73_24.0=1
+phy_an_c73_25.0=1
+phy_an_c73_26.0=1
+phy_an_c73_27.0=1
+phy_an_c73_28.0=1
+phy_an_c73_29.0=1
+phy_an_c73_3.0=1
+phy_an_c73_30.0=1
+phy_an_c73_31.0=1
+phy_an_c73_32.0=1
+phy_an_c73_4.0=1
+phy_an_c73_5.0=1
+phy_an_c73_6.0=1
+phy_an_c73_7.0=1
+phy_an_c73_8.0=1
+phy_an_c73_9.0=1
+phy_aux_voltage_enable_1.0=0x1
+phy_aux_voltage_enable_2.0=0x1
+phy_aux_voltage_enable_29.0=0x1
+phy_aux_voltage_enable_3.0=0x1
+phy_aux_voltage_enable_30.0=0x1
+phy_aux_voltage_enable_31.0=0x1
+phy_aux_voltage_enable_32.0=0x1
+phy_aux_voltage_enable_4.0=0x1
+phy_ext_rom_boot.0=0
+phy_ext_rom_boot_1.0=0x0
+phy_ext_rom_boot_2.0=0x0
+phy_ext_rom_boot_29.0=0x0
+phy_ext_rom_boot_3.0=0x0
+phy_ext_rom_boot_30.0=0x0
+phy_ext_rom_boot_31.0=0x0
+phy_ext_rom_boot_32.0=0x0
+phy_ext_rom_boot_4.0=0x0
+phy_line_tx_mode_1.0=1
+phy_line_tx_mode_2.0=1
+phy_line_tx_mode_29.0=1
+phy_line_tx_mode_3.0=1
+phy_line_tx_mode_30.0=1
+phy_line_tx_mode_31.0=1
+phy_line_tx_mode_32.0=1
+phy_line_tx_mode_4.0=1
+phy_rx_polarity_flip_1.0=0x0
+phy_rx_polarity_flip_2.0=0x0
+phy_rx_polarity_flip_29.0=0x0
+phy_rx_polarity_flip_3.0=0x0
+phy_rx_polarity_flip_30.0=0x0
+phy_rx_polarity_flip_31.0=0x0
+phy_rx_polarity_flip_32.0=0x0
+phy_rx_polarity_flip_4.0=0x0
+phy_system_tx_mode_1.0=0
+phy_system_tx_mode_2.0=0
+phy_system_tx_mode_29.0=0
+phy_system_tx_mode_3.0=0
+phy_system_tx_mode_30.0=0
+phy_system_tx_mode_31.0=0
+phy_system_tx_mode_32.0=0
+phy_system_tx_mode_4.0=0
+phy_tx_polarity_flip_1.0=0x0
+phy_tx_polarity_flip_2.0=0x0
+phy_tx_polarity_flip_29.0=0x0
+phy_tx_polarity_flip_3.0=0x0
+phy_tx_polarity_flip_30.0=0x0
+phy_tx_polarity_flip_31.0=0x0
+phy_tx_polarity_flip_32.0=0x0
+phy_tx_polarity_flip_4.0=0x0
+phy_xaui_rx_polarity_flip_1.0=0x0
+phy_xaui_rx_polarity_flip_10.0=0x0
+phy_xaui_rx_polarity_flip_11.0=0x0
+phy_xaui_rx_polarity_flip_12.0=0x0
+phy_xaui_rx_polarity_flip_13.0=0x0
+phy_xaui_rx_polarity_flip_14.0=0x0
+phy_xaui_rx_polarity_flip_15.0=0x0
+phy_xaui_rx_polarity_flip_16.0=0x0
+phy_xaui_rx_polarity_flip_17.0=0x0
+phy_xaui_rx_polarity_flip_18.0=0x0
+phy_xaui_rx_polarity_flip_19.0=0x0
+phy_xaui_rx_polarity_flip_2.0=0x0
+phy_xaui_rx_polarity_flip_20.0=0x0
+phy_xaui_rx_polarity_flip_21.0=0x0
+phy_xaui_rx_polarity_flip_22.0=0x0
+phy_xaui_rx_polarity_flip_23.0=0x0
+phy_xaui_rx_polarity_flip_24.0=0x0
+phy_xaui_rx_polarity_flip_25.0=0x0
+phy_xaui_rx_polarity_flip_26.0=0x0
+phy_xaui_rx_polarity_flip_27.0=0x0
+phy_xaui_rx_polarity_flip_28.0=0x0
+phy_xaui_rx_polarity_flip_29.0=0x0
+phy_xaui_rx_polarity_flip_3.0=0x0
+phy_xaui_rx_polarity_flip_30.0=0x0
+phy_xaui_rx_polarity_flip_31.0=0x0
+phy_xaui_rx_polarity_flip_32.0=0x0
+phy_xaui_rx_polarity_flip_4.0=0x0
+phy_xaui_rx_polarity_flip_5.0=0x0
+phy_xaui_rx_polarity_flip_6.0=0x0
+phy_xaui_rx_polarity_flip_7.0=0x0
+phy_xaui_rx_polarity_flip_8.0=0x0
+phy_xaui_rx_polarity_flip_9.0=0x0
+phy_xaui_tx_polarity_flip_1.0=0x0
+phy_xaui_tx_polarity_flip_10.0=0x0
+phy_xaui_tx_polarity_flip_11.0=0x0
+phy_xaui_tx_polarity_flip_12.0=0x0
+phy_xaui_tx_polarity_flip_13.0=0x0
+phy_xaui_tx_polarity_flip_14.0=0x0
+phy_xaui_tx_polarity_flip_15.0=0x0
+phy_xaui_tx_polarity_flip_16.0=0x0
+phy_xaui_tx_polarity_flip_17.0=0x0
+phy_xaui_tx_polarity_flip_18.0=0x0
+phy_xaui_tx_polarity_flip_19.0=0x0
+phy_xaui_tx_polarity_flip_2.0=0x0
+phy_xaui_tx_polarity_flip_20.0=0x0
+phy_xaui_tx_polarity_flip_21.0=0x0
+phy_xaui_tx_polarity_flip_22.0=0x0
+phy_xaui_tx_polarity_flip_23.0=0x0
+phy_xaui_tx_polarity_flip_24.0=0x0
+phy_xaui_tx_polarity_flip_25.0=0x0
+phy_xaui_tx_polarity_flip_26.0=0x0
+phy_xaui_tx_polarity_flip_27.0=0x0
+phy_xaui_tx_polarity_flip_28.0=0x0
+phy_xaui_tx_polarity_flip_29.0=0x0
+phy_xaui_tx_polarity_flip_3.0=0x0
+phy_xaui_tx_polarity_flip_30.0=0x0
+phy_xaui_tx_polarity_flip_31.0=0x0
+phy_xaui_tx_polarity_flip_32.0=0x0
+phy_xaui_tx_polarity_flip_4.0=0x0
+phy_xaui_tx_polarity_flip_5.0=0x0
+phy_xaui_tx_polarity_flip_6.0=0x0
+phy_xaui_tx_polarity_flip_7.0=0x0
+phy_xaui_tx_polarity_flip_8.0=0x0
+phy_xaui_tx_polarity_flip_9.0=0x0
+port_init_autoneg_10.0=0
+port_init_autoneg_11.0=0
+port_init_autoneg_12.0=0
+port_init_autoneg_13.0=0
+port_init_autoneg_14.0=0
+port_init_autoneg_15.0=0
+port_init_autoneg_16.0=0
+port_init_autoneg_17.0=0
+port_init_autoneg_18.0=0
+port_init_autoneg_19.0=0
+port_init_autoneg_20.0=0
+port_init_autoneg_21.0=0
+port_init_autoneg_22.0=0
+port_init_autoneg_23.0=0
+port_init_autoneg_24.0=0
+port_init_autoneg_25.0=0
+port_init_autoneg_26.0=0
+port_init_autoneg_27.0=0
+port_init_autoneg_28.0=0
+port_init_autoneg_5.0=0
+port_init_autoneg_6.0=0
+port_init_autoneg_7.0=0
+port_init_autoneg_8.0=0
+port_init_autoneg_9.0=0
+port_init_cl72_hg.0=0x11
+port_phy_addr_1.0=0x4
+port_phy_addr_10.0=0x7f
+port_phy_addr_11.0=0x7f
+port_phy_addr_12.0=0x7f
+port_phy_addr_13.0=0x7f
+port_phy_addr_14.0=0x7f
+port_phy_addr_15.0=0x7f
+port_phy_addr_16.0=0x7f
+port_phy_addr_17.0=0x7f
+port_phy_addr_18.0=0x7f
+port_phy_addr_19.0=0x7f
+port_phy_addr_2.0=0x0
+port_phy_addr_20.0=0x7f
+port_phy_addr_21.0=0x7f
+port_phy_addr_22.0=0x7f
+port_phy_addr_23.0=0x7f
+port_phy_addr_24.0=0x7f
+port_phy_addr_25.0=0x7f
+port_phy_addr_26.0=0x7f
+port_phy_addr_27.0=0x7f
+port_phy_addr_28.0=0x7f
+port_phy_addr_29.0=0x54
+port_phy_addr_3.0=0x2c
+port_phy_addr_30.0=0x50
+port_phy_addr_31.0=0x7c
+port_phy_addr_32.0=0x78
+port_phy_addr_4.0=0x28
+port_phy_addr_5.0=0x7f
+port_phy_addr_6.0=0x7f
+port_phy_addr_7.0=0x7f
+port_phy_addr_8.0=0x7f
+port_phy_addr_9.0=0x7f
+port_phy_clause_1.0=0x2d
+port_phy_clause_2.0=0x2d
+port_phy_clause_29.0=0x2d
+port_phy_clause_3.0=0x2d
+port_phy_clause_30.0=0x2d
+port_phy_clause_31.0=0x2d
+port_phy_clause_32.0=0x2d
+port_phy_clause_4.0=0x2d
+port_phy_id0_1.0=0x600d
+port_phy_id0_2.0=0x600d
+port_phy_id0_29.0=0x600d
+port_phy_id0_3.0=0x600d
+port_phy_id0_30.0=0x600d
+port_phy_id0_31.0=0x600d
+port_phy_id0_32.0=0x600d
+port_phy_id0_4.0=0x600d
+port_phy_id1_1.0=0x8500
+port_phy_id1_2.0=0x8500
+port_phy_id1_29.0=0x8500
+port_phy_id1_3.0=0x8500
+port_phy_id1_30.0=0x8500
+port_phy_id1_31.0=0x8500
+port_phy_id1_32.0=0x8500
+port_phy_id1_4.0=0x8500
+portmap_1.0=125:40
+portmap_10.0=33:40
+portmap_11.0=45:40
+portmap_12.0=41:40
+portmap_13.0=53:40
+portmap_14.0=49:40
+portmap_15.0=69:40
+portmap_16.0=65:40
+portmap_17.0=77:40
+portmap_18.0=73:40
+portmap_19.0=93:40
+portmap_2.0=121:40
+portmap_20.0=89:40
+portmap_21.0=101:40
+portmap_22.0=97:40
+portmap_23.0=109:40
+portmap_24.0=105:40
+portmap_25.0=61:40
+portmap_26.0=57:40
+portmap_27.0=81:40
+portmap_28.0=85:40
+portmap_29.0=117:40
+portmap_3.0=13:40
+portmap_30.0=113:40
+portmap_31.0=5:40
+portmap_32.0=1:40
+portmap_4.0=9:40
+portmap_5.0=17:40
+portmap_6.0=21:40
+portmap_7.0=25:40
+portmap_8.0=29:40
+portmap_9.0=37:40
+serdes_firmware_mode_1.0=1
+serdes_firmware_mode_10.0=2
+serdes_firmware_mode_11.0=2
+serdes_firmware_mode_12.0=2
+serdes_firmware_mode_13.0=2
+serdes_firmware_mode_14.0=2
+serdes_firmware_mode_15.0=2
+serdes_firmware_mode_16.0=2
+serdes_firmware_mode_17.0=2
+serdes_firmware_mode_18.0=2
+serdes_firmware_mode_19.0=2
+serdes_firmware_mode_2.0=1
+serdes_firmware_mode_20.0=2
+serdes_firmware_mode_21.0=2
+serdes_firmware_mode_22.0=2
+serdes_firmware_mode_23.0=2
+serdes_firmware_mode_24.0=2
+serdes_firmware_mode_25.0=2
+serdes_firmware_mode_26.0=2
+serdes_firmware_mode_27.0=2
+serdes_firmware_mode_28.0=2
+serdes_firmware_mode_29.0=1
+serdes_firmware_mode_3.0=1
+serdes_firmware_mode_30.0=1
+serdes_firmware_mode_31.0=1
+serdes_firmware_mode_32.0=1
+serdes_firmware_mode_4.0=1
+serdes_firmware_mode_5.0=2
+serdes_firmware_mode_6.0=2
+serdes_firmware_mode_7.0=2
+serdes_firmware_mode_8.0=2
+serdes_firmware_mode_9.0=2
+xgxs_lcpll_xtal_refclk.0=1
+xgxs_rx_lane_map_1.0=0x0123
+xgxs_rx_lane_map_10.0=0x3120
+xgxs_rx_lane_map_11.0=0x3120
+xgxs_rx_lane_map_12.0=0x3120
+xgxs_rx_lane_map_13.0=0x3120
+xgxs_rx_lane_map_14.0=0x3120
+xgxs_rx_lane_map_15.0=0x3120
+xgxs_rx_lane_map_16.0=0x3120
+xgxs_rx_lane_map_17.0=0x3120
+xgxs_rx_lane_map_18.0=0x3120
+xgxs_rx_lane_map_19.0=0x3120
+xgxs_rx_lane_map_2.0=0x0123
+xgxs_rx_lane_map_20.0=0x3120
+xgxs_rx_lane_map_21.0=0x3120
+xgxs_rx_lane_map_22.0=0x3120
+xgxs_rx_lane_map_23.0=0x3120
+xgxs_rx_lane_map_24.0=0x3120
+xgxs_rx_lane_map_25.0=0x2031
+xgxs_rx_lane_map_26.0=0x2031
+xgxs_rx_lane_map_27.0=0x0213
+xgxs_rx_lane_map_28.0=0x0213
+xgxs_rx_lane_map_29.0=0x0123
+xgxs_rx_lane_map_3.0=0x0123
+xgxs_rx_lane_map_30.0=0x0123
+xgxs_rx_lane_map_31.0=0x0123
+xgxs_rx_lane_map_32.0=0x0123
+xgxs_rx_lane_map_4.0=0x0123
+xgxs_rx_lane_map_5.0=0x2031
+xgxs_rx_lane_map_6.0=0x2031
+xgxs_rx_lane_map_7.0=0x2031
+xgxs_rx_lane_map_8.0=0x2031
+xgxs_rx_lane_map_9.0=0x3120
+xgxs_tx_lane_map_1.0=0x0123
+xgxs_tx_lane_map_10.0=0x3120
+xgxs_tx_lane_map_11.0=0x3120
+xgxs_tx_lane_map_12.0=0x3120
+xgxs_tx_lane_map_13.0=0x3120
+xgxs_tx_lane_map_14.0=0x3120
+xgxs_tx_lane_map_15.0=0x3120
+xgxs_tx_lane_map_16.0=0x3120
+xgxs_tx_lane_map_17.0=0x3120
+xgxs_tx_lane_map_18.0=0x3120
+xgxs_tx_lane_map_19.0=0x3120
+xgxs_tx_lane_map_2.0=0x0123
+xgxs_tx_lane_map_20.0=0x3120
+xgxs_tx_lane_map_21.0=0x3120
+xgxs_tx_lane_map_22.0=0x3120
+xgxs_tx_lane_map_23.0=0x3120
+xgxs_tx_lane_map_24.0=0x3120
+xgxs_tx_lane_map_25.0=0x2031
+xgxs_tx_lane_map_26.0=0x2031
+xgxs_tx_lane_map_27.0=0x0213
+xgxs_tx_lane_map_28.0=0x0213
+xgxs_tx_lane_map_29.0=0x0123
+xgxs_tx_lane_map_3.0=0x0123
+xgxs_tx_lane_map_30.0=0x0123
+xgxs_tx_lane_map_31.0=0x0123
+xgxs_tx_lane_map_32.0=0x0123
+xgxs_tx_lane_map_4.0=0x0123
+xgxs_tx_lane_map_5.0=0x1302
+xgxs_tx_lane_map_6.0=0x1302
+xgxs_tx_lane_map_7.0=0x1302
+xgxs_tx_lane_map_8.0=0x1302
+xgxs_tx_lane_map_9.0=0x3120
+
+##########################################
+#skip_L2_USER_ENTRY=0
+phy_aux_voltage_enable=1
+###############################
+serdes_fiber_pref=1
+###############################
+mdio_output_delay.0=0x0d
+###############################
+serdes_sgmii_m=0
+xgxs_lcpll_xtal_refclk=1
+xgxs_lcpll_xtal_refclk.1=1
+xgxs_lcpll_xtal_refclk.2=1
+xgxs_lcpll_xtal_refclk.3=1
+tdma_intr_enable=1
+tslam_intr_enable=1
+tslam_dma_enable.2=1
+tslam_dma_enable.3=1
+#dport_map_port=0
+#dport_map_enable=0
+#dport_map_indexed=0
+#bcm_xlate_port_enable.0=0
+#xgxs_pdetect_1=0
+table_dma_enable.0=1
+table_dma_enable.1=1
+table_dma_enable.2=1
+table_dma_enable.3=1
+serdes_driver_current_lane0_1=2
+serdes_pre_driver_current_lane0_1=2
+serdes_preemphasis_lane0_1=0x8fc0
+serdes_driver_current_lane1_1=2
+serdes_pre_driver_current_lane1_1=2
+serdes_preemphasis_lane1_1=0x8fc0
+serdes_driver_current_lane2_1=2
+serdes_pre_driver_current_lane2_1=2
+serdes_preemphasis_lane2_1=0x8fc0
+serdes_driver_current_lane3_1=2
+serdes_pre_driver_current_lane3_1=2
+serdes_preemphasis_lane3_1=0x8fc0
+serdes_driver_current_lane0_2=3
+serdes_pre_driver_current_lane0_2=2
+serdes_preemphasis_lane0_2=0x8fc0
+serdes_driver_current_lane1_2=3
+serdes_pre_driver_current_lane1_2=2
+serdes_preemphasis_lane1_2=0x8fc0
+serdes_driver_current_lane2_2=3
+serdes_pre_driver_current_lane2_2=2
+serdes_preemphasis_lane2_2=0x8fc0
+serdes_driver_current_lane3_2=3
+serdes_pre_driver_current_lane3_2=2
+serdes_preemphasis_lane3_2=0x8fc0
+serdes_driver_current_lane0_3=2
+serdes_pre_driver_current_lane0_3=2
+serdes_preemphasis_lane0_3=0x8fc0
+serdes_driver_current_lane1_3=2
+serdes_pre_driver_current_lane1_3=2
+serdes_preemphasis_lane1_3=0x8fc0
+serdes_driver_current_lane2_3=2
+serdes_pre_driver_current_lane2_3=2
+serdes_preemphasis_lane2_3=0x8fc0
+serdes_driver_current_lane3_3=2
+serdes_pre_driver_current_lane3_3=2
+serdes_preemphasis_lane3_3=0x8fc0
+serdes_driver_current_lane0_4=2
+serdes_pre_driver_current_lane0_4=2
+serdes_preemphasis_lane0_4=0x8fc0
+serdes_driver_current_lane1_4=2
+serdes_pre_driver_current_lane1_4=2
+serdes_preemphasis_lane1_4=0x8fc0
+serdes_driver_current_lane2_4=2
+serdes_pre_driver_current_lane2_4=2
+serdes_preemphasis_lane2_4=0x8fc0
+serdes_driver_current_lane3_4=2
+serdes_pre_driver_current_lane3_4=2
+serdes_preemphasis_lane3_4=0x8fc0
+serdes_driver_current_lane0_5=4
+serdes_pre_driver_current_lane0_5=4
+serdes_preemphasis_lane0_5=0xbf00
+serdes_driver_current_lane1_5=4
+serdes_pre_driver_current_lane1_5=4
+serdes_preemphasis_lane1_5=0xbf00
+serdes_driver_current_lane2_5=4
+serdes_pre_driver_current_lane2_5=4
+serdes_preemphasis_lane2_5=0xbf00
+serdes_driver_current_lane3_5=4
+serdes_pre_driver_current_lane3_5=4
+serdes_preemphasis_lane3_5=0xbf00
+serdes_driver_current_lane0_6=4
+serdes_pre_driver_current_lane0_6=4
+serdes_preemphasis_lane0_6=0xbb10
+serdes_driver_current_lane1_6=4
+serdes_pre_driver_current_lane1_6=4
+serdes_preemphasis_lane1_6=0xbb10
+serdes_driver_current_lane2_6=4
+serdes_pre_driver_current_lane2_6=4
+serdes_preemphasis_lane2_6=0xbb10
+serdes_driver_current_lane3_6=4
+serdes_pre_driver_current_lane3_6=4
+serdes_preemphasis_lane3_6=0xbb10
+serdes_driver_current_lane0_7=3
+serdes_pre_driver_current_lane0_7=3
+serdes_preemphasis_lane0_7=0xcad0
+serdes_driver_current_lane1_7=3
+serdes_pre_driver_current_lane1_7=3
+serdes_preemphasis_lane1_7=0xcad0
+serdes_driver_current_lane2_7=3
+serdes_pre_driver_current_lane2_7=3
+serdes_preemphasis_lane2_7=0xcad0
+serdes_driver_current_lane3_7=3
+serdes_pre_driver_current_lane3_7=3
+serdes_preemphasis_lane3_7=0xcad0
+serdes_driver_current_lane0_8=3
+serdes_pre_driver_current_lane0_8=3
+serdes_preemphasis_lane0_8=0xcad0
+serdes_driver_current_lane1_8=3
+serdes_pre_driver_current_lane1_8=3
+serdes_preemphasis_lane1_8=0xcad0
+serdes_driver_current_lane2_8=3
+serdes_pre_driver_current_lane2_8=3
+serdes_preemphasis_lane2_8=0xcad0
+serdes_driver_current_lane3_8=3
+serdes_pre_driver_current_lane3_8=3
+serdes_preemphasis_lane3_8=0xcad0
+serdes_driver_current_lane0_9=3
+serdes_pre_driver_current_lane0_9=3
+serdes_preemphasis_lane0_9=0xc2f0
+serdes_driver_current_lane1_9=3
+serdes_pre_driver_current_lane1_9=3
+serdes_preemphasis_lane1_9=0xc2f0
+serdes_driver_current_lane2_9=3
+serdes_pre_driver_current_lane2_9=3
+serdes_preemphasis_lane2_9=0xc2f0
+serdes_driver_current_lane3_9=3
+serdes_pre_driver_current_lane3_9=3
+serdes_preemphasis_lane3_9=0xc2f0
+serdes_driver_current_lane0_10=3
+serdes_pre_driver_current_lane0_10=3
+serdes_preemphasis_lane0_10=0xc6e0
+serdes_driver_current_lane1_10=3
+serdes_pre_driver_current_lane1_10=3
+serdes_preemphasis_lane1_10=0xc6e0
+serdes_driver_current_lane2_10=3
+serdes_pre_driver_current_lane2_10=3
+serdes_preemphasis_lane2_10=0xc6e0
+serdes_driver_current_lane3_10=3
+serdes_pre_driver_current_lane3_10=3
+serdes_preemphasis_lane3_10=0xc6e0
+serdes_driver_current_lane0_11=3
+serdes_pre_driver_current_lane0_11=3
+serdes_preemphasis_lane0_11=0xc2f0
+serdes_driver_current_lane1_11=3
+serdes_pre_driver_current_lane1_11=3
+serdes_preemphasis_lane1_11=0xc2f0
+serdes_driver_current_lane2_11=3
+serdes_pre_driver_current_lane2_11=3
+serdes_preemphasis_lane2_11=0xc2f0
+serdes_driver_current_lane3_11=3
+serdes_pre_driver_current_lane3_11=3
+serdes_preemphasis_lane3_11=0xc2f0
+serdes_driver_current_lane0_12=3
+serdes_pre_driver_current_lane0_12=3
+serdes_preemphasis_lane0_12=0xc2f0
+serdes_driver_current_lane1_12=3
+serdes_pre_driver_current_lane1_12=3
+serdes_preemphasis_lane1_12=0xc2f0
+serdes_driver_current_lane2_12=3
+serdes_pre_driver_current_lane2_12=3
+serdes_preemphasis_lane2_12=0xc2f0
+serdes_driver_current_lane3_12=3
+serdes_pre_driver_current_lane3_12=3
+serdes_preemphasis_lane3_12=0xc2f0
+serdes_driver_current_lane0_13=3
+serdes_pre_driver_current_lane0_13=3
+serdes_preemphasis_lane0_13=0xc2f0
+serdes_driver_current_lane1_13=3
+serdes_pre_driver_current_lane1_13=3
+serdes_preemphasis_lane1_13=0xc2f0
+serdes_driver_current_lane2_13=3
+serdes_pre_driver_current_lane2_13=3
+serdes_preemphasis_lane2_13=0xc2f0
+serdes_driver_current_lane3_13=3
+serdes_pre_driver_current_lane3_13=3
+serdes_preemphasis_lane3_13=0xc2f0
+serdes_driver_current_lane0_14=3
+serdes_pre_driver_current_lane0_14=3
+serdes_preemphasis_lane0_14=0xc2f0
+serdes_driver_current_lane1_14=3
+serdes_pre_driver_current_lane1_14=3
+serdes_preemphasis_lane1_14=0xc2f0
+serdes_driver_current_lane2_14=3
+serdes_pre_driver_current_lane2_14=3
+serdes_preemphasis_lane2_14=0xc2f0
+serdes_driver_current_lane3_14=3
+serdes_pre_driver_current_lane3_14=3
+serdes_preemphasis_lane3_14=0xc2f0
+serdes_driver_current_lane0_15=3
+serdes_pre_driver_current_lane0_15=3
+serdes_preemphasis_lane0_15=0xc2f0
+serdes_driver_current_lane1_15=3
+serdes_pre_driver_current_lane1_15=3
+serdes_preemphasis_lane1_15=0xc2f0
+serdes_driver_current_lane2_15=3
+serdes_pre_driver_current_lane2_15=3
+serdes_preemphasis_lane2_15=0xc2f0
+serdes_driver_current_lane3_15=3
+serdes_pre_driver_current_lane3_15=3
+serdes_preemphasis_lane3_15=0xc2f0
+serdes_driver_current_lane0_16=3
+serdes_pre_driver_current_lane0_16=3
+serdes_preemphasis_lane0_16=0xc2f0
+serdes_driver_current_lane1_16=3
+serdes_pre_driver_current_lane1_16=3
+serdes_preemphasis_lane1_16=0xc2f0
+serdes_driver_current_lane2_16=3
+serdes_pre_driver_current_lane2_16=3
+serdes_preemphasis_lane2_16=0xc2f0
+serdes_driver_current_lane3_16=3
+serdes_pre_driver_current_lane3_16=3
+serdes_preemphasis_lane3_16=0xc2f0
+serdes_driver_current_lane0_17=3
+serdes_pre_driver_current_lane0_17=3
+serdes_preemphasis_lane0_17=0xc2f0
+serdes_driver_current_lane1_17=3
+serdes_pre_driver_current_lane1_17=3
+serdes_preemphasis_lane1_17=0xc2f0
+serdes_driver_current_lane2_17=3
+serdes_pre_driver_current_lane2_17=3
+serdes_preemphasis_lane2_17=0xc2f0
+serdes_driver_current_lane3_17=3
+serdes_pre_driver_current_lane3_17=3
+serdes_preemphasis_lane3_17=0xc2f0
+serdes_driver_current_lane0_18=3
+serdes_pre_driver_current_lane0_18=3
+serdes_preemphasis_lane0_18=0xc2f0
+serdes_driver_current_lane1_18=3
+serdes_pre_driver_current_lane1_18=3
+serdes_preemphasis_lane1_18=0xc2f0
+serdes_driver_current_lane2_18=3
+serdes_pre_driver_current_lane2_18=3
+serdes_preemphasis_lane2_18=0xc2f0
+serdes_driver_current_lane3_18=3
+serdes_pre_driver_current_lane3_18=3
+serdes_preemphasis_lane3_18=0xc2f0
+serdes_driver_current_lane0_19=3
+serdes_pre_driver_current_lane0_19=3
+serdes_preemphasis_lane0_19=0xc2f0
+serdes_driver_current_lane1_19=3
+serdes_pre_driver_current_lane1_19=3
+serdes_preemphasis_lane1_19=0xc2f0
+serdes_driver_current_lane2_19=3
+serdes_pre_driver_current_lane2_19=3
+serdes_preemphasis_lane2_19=0xc2f0
+serdes_driver_current_lane3_19=3
+serdes_pre_driver_current_lane3_19=3
+serdes_preemphasis_lane3_19=0xc2f0
+serdes_driver_current_lane0_20=3
+serdes_pre_driver_current_lane0_20=3
+serdes_preemphasis_lane0_20=0xc2f0
+serdes_driver_current_lane1_20=3
+serdes_pre_driver_current_lane1_20=3
+serdes_preemphasis_lane1_20=0xc2f0
+serdes_driver_current_lane2_20=3
+serdes_pre_driver_current_lane2_20=3
+serdes_preemphasis_lane2_20=0xc2f0
+serdes_driver_current_lane3_20=3
+serdes_pre_driver_current_lane3_20=3
+serdes_preemphasis_lane3_20=0xc2f0
+serdes_driver_current_lane0_21=3
+serdes_pre_driver_current_lane0_21=3
+serdes_preemphasis_lane0_21=0xc6e0
+serdes_driver_current_lane1_21=3
+serdes_pre_driver_current_lane1_21=3
+serdes_preemphasis_lane1_21=0xc6e0
+serdes_driver_current_lane2_21=3
+serdes_pre_driver_current_lane2_21=3
+serdes_preemphasis_lane2_21=0xc6e0
+serdes_driver_current_lane3_21=3
+serdes_pre_driver_current_lane3_21=3
+serdes_preemphasis_lane3_21=0xc6e0
+serdes_driver_current_lane0_22=3
+serdes_pre_driver_current_lane0_22=3
+serdes_preemphasis_lane0_22=0xc6e0
+serdes_driver_current_lane1_22=3
+serdes_pre_driver_current_lane1_22=3
+serdes_preemphasis_lane1_22=0xc6e0
+serdes_driver_current_lane2_22=3
+serdes_pre_driver_current_lane2_22=3
+serdes_preemphasis_lane2_22=0xc6e0
+serdes_driver_current_lane3_22=3
+serdes_pre_driver_current_lane3_22=3
+serdes_preemphasis_lane3_22=0xc6e0
+serdes_driver_current_lane0_23=3
+serdes_pre_driver_current_lane0_23=3
+serdes_preemphasis_lane0_23=0xcad0
+serdes_driver_current_lane1_23=3
+serdes_pre_driver_current_lane1_23=3
+serdes_preemphasis_lane1_23=0xcad0
+serdes_driver_current_lane2_23=3
+serdes_pre_driver_current_lane2_23=3
+serdes_preemphasis_lane2_23=0xcad0
+serdes_driver_current_lane3_23=3
+serdes_pre_driver_current_lane3_23=3
+serdes_preemphasis_lane3_23=0xcad0
+serdes_driver_current_lane0_24=3
+serdes_pre_driver_current_lane0_24=3
+serdes_preemphasis_lane0_24=0xcad0
+serdes_driver_current_lane1_24=3
+serdes_pre_driver_current_lane1_24=3
+serdes_preemphasis_lane1_24=0xcad0
+serdes_driver_current_lane2_24=3
+serdes_pre_driver_current_lane2_24=3
+serdes_preemphasis_lane2_24=0xcad0
+serdes_driver_current_lane3_24=3
+serdes_pre_driver_current_lane3_24=3
+serdes_preemphasis_lane3_24=0xcad0
+serdes_driver_current_lane0_25=5
+serdes_pre_driver_current_lane0_25=5
+serdes_preemphasis_lane0_25=0xc2f0
+serdes_driver_current_lane1_25=5
+serdes_pre_driver_current_lane1_25=5
+serdes_preemphasis_lane1_25=0xc2f0
+serdes_driver_current_lane2_25=5
+serdes_pre_driver_current_lane2_25=5
+serdes_preemphasis_lane2_25=0xc2f0
+serdes_driver_current_lane3_25=5
+serdes_pre_driver_current_lane3_25=5
+serdes_preemphasis_lane3_25=0xc2f0
+serdes_driver_current_lane0_26=5
+serdes_pre_driver_current_lane0_26=5
+serdes_preemphasis_lane0_26=0xc2f0
+serdes_driver_current_lane1_26=5
+serdes_pre_driver_current_lane1_26=5
+serdes_preemphasis_lane1_26=0xc2f0
+serdes_driver_current_lane2_26=5
+serdes_pre_driver_current_lane2_26=5
+serdes_preemphasis_lane2_26=0xc2f0
+serdes_driver_current_lane3_26=5
+serdes_pre_driver_current_lane3_26=5
+serdes_preemphasis_lane3_26=0xc2f0
+serdes_driver_current_lane0_27=5
+serdes_pre_driver_current_lane0_27=5
+serdes_preemphasis_lane0_27=0xc2f0
+serdes_driver_current_lane1_27=5
+serdes_pre_driver_current_lane1_27=5
+serdes_preemphasis_lane1_27=0xc2f0
+serdes_driver_current_lane2_27=5
+serdes_pre_driver_current_lane2_27=5
+serdes_preemphasis_lane2_27=0xc2f0
+serdes_driver_current_lane3_27=5
+serdes_pre_driver_current_lane3_27=5
+serdes_preemphasis_lane3_27=0xc2f0
+serdes_driver_current_lane0_28=8
+serdes_pre_driver_current_lane0_28=6
+serdes_preemphasis_lane0_28=0xc2f0
+serdes_driver_current_lane1_28=8
+serdes_pre_driver_current_lane1_28=6
+serdes_preemphasis_lane1_28=0xc2f0
+serdes_driver_current_lane2_28=8
+serdes_pre_driver_current_lane2_28=6
+serdes_preemphasis_lane2_28=0xc2f0
+serdes_driver_current_lane3_28=8
+serdes_pre_driver_current_lane3_28=6
+serdes_preemphasis_lane3_28=0xc2f0
+serdes_driver_current_lane0_29=2
+serdes_pre_driver_current_lane0_29=2
+serdes_preemphasis_lane0_29=0x8fc0
+serdes_driver_current_lane1_29=2
+serdes_pre_driver_current_lane1_29=2
+serdes_preemphasis_lane1_29=0x8fc0
+serdes_driver_current_lane2_29=2
+serdes_pre_driver_current_lane2_29=2
+serdes_preemphasis_lane2_29=0x8fc0
+serdes_driver_current_lane3_29=2
+serdes_pre_driver_current_lane3_29=2
+serdes_preemphasis_lane3_29=0x8fc0
+serdes_driver_current_lane0_30=2
+serdes_pre_driver_current_lane0_30=2
+serdes_preemphasis_lane0_30=0x8fc0
+serdes_driver_current_lane1_30=2
+serdes_pre_driver_current_lane1_30=2
+serdes_preemphasis_lane1_30=0x8fc0
+serdes_driver_current_lane2_30=2
+serdes_pre_driver_current_lane2_30=2
+serdes_preemphasis_lane2_30=0x8fc0
+serdes_driver_current_lane3_30=2
+serdes_pre_driver_current_lane3_30=2
+serdes_preemphasis_lane3_30=0x8fc0
+serdes_driver_current_lane0_31=2
+serdes_pre_driver_current_lane0_31=2
+serdes_preemphasis_lane0_31=0x8fc0
+serdes_driver_current_lane1_31=2
+serdes_pre_driver_current_lane1_31=2
+serdes_preemphasis_lane1_31=0x8fc0
+serdes_driver_current_lane2_31=2
+serdes_pre_driver_current_lane2_31=2
+serdes_preemphasis_lane2_31=0x8fc0
+serdes_driver_current_lane3_31=2
+serdes_pre_driver_current_lane3_31=2
+serdes_preemphasis_lane3_31=0x8fc0
+serdes_driver_current_lane0_32=2
+serdes_pre_driver_current_lane0_32=2
+serdes_preemphasis_lane0_32=0x8fc0
+serdes_driver_current_lane1_32=2
+serdes_pre_driver_current_lane1_32=2
+serdes_preemphasis_lane1_32=0x8fc0
+serdes_driver_current_lane2_32=2
+serdes_pre_driver_current_lane2_32=2
+serdes_preemphasis_lane2_32=0x8fc0
+serdes_driver_current_lane3_32=2
+serdes_pre_driver_current_lane3_32=2
+serdes_preemphasis_lane3_32=0x8fc0
diff --git a/device/arista/x86_64-arista_7050_qx32/plugins/led_control.py b/device/arista/x86_64-arista_7050_qx32/plugins/led_control.py
index 31effbaf11c6..8d387e513c6c 100644
--- a/device/arista/x86_64-arista_7050_qx32/plugins/led_control.py
+++ b/device/arista/x86_64-arista_7050_qx32/plugins/led_control.py
@@ -1,98 +1,6 @@
-#!/usr/bin/env python
-#
-# led_control.py
-#
-# Platform-specific LED control functionality for SONiC
-#
-
try:
- from sonic_led.led_control_base import LedControlBase
- import swsssdk
+ import arista.utils.sonic_leds as arista_leds
except ImportError, e:
- raise ImportError (str(e) + " - required module not found")
-
-
-class LedControl(LedControlBase):
- """Platform specific LED control class"""
- PORT_TABLE_PREFIX = "PORT_TABLE:"
-
- SONIC_PORT_NAME_PREFIX = "Ethernet"
-
- LED_SYSFS_PATH_BREAKOUT_CAPABLE = "/sys/class/leds/qsfp{0}_{1}/brightness"
- LED_SYSFS_PATH_NO_BREAKOUT = "/sys/class/leds/qsfp{0}/brightness"
-
- QSFP_BREAKOUT_START_IDX = 1
- QSFP_BREAKOUT_END_IDX = 24
- QSFP_NO_BREAKOUT_START_IDX = 25
- QSFP_NO_BREAKOUT_END_IDX = 32
-
- LED_COLOR_OFF = 0
- LED_COLOR_GREEN = 1
- LED_COLOR_YELLOW = 2
-
- # Helper method to map SONiC port name to Arista QSFP index
- def _port_name_to_qsfp_index(self, port_name):
- # Strip "Ethernet" off port name
- if not port_name.startswith(self.SONIC_PORT_NAME_PREFIX):
- return -1
-
- sonic_port_num = int(port_name[len(self.SONIC_PORT_NAME_PREFIX):])
-
- swss = swsssdk.SonicV2Connector()
- swss.connect(swss.APPL_DB)
-
- lanes = swss.get(swss.APPL_DB, self.PORT_TABLE_PREFIX + port_name, 'lanes')
-
- # SONiC port nums are 0-based and increment by 4
- # Arista QSFP indices are 1-based and increment by 1
- return (((sonic_port_num/4) + 1), sonic_port_num%4, len(lanes.split(',')))
-
- # Concrete implementation of port_link_state_change() method
- def port_link_state_change(self, port, state):
- qsfp_index, lane_index, lanes = self._port_name_to_qsfp_index(port)
-
- # Ignore invalid QSFP indices
- if qsfp_index <= 0 or lanes <= 0 or lanes > 4:
- return
-
- # QSFP indices 1-24 are breakout-capable and have four LEDs, and each LED indicate one lane.
- # whereas indices 25-32 are not breakout-capable, and only have one
- if qsfp_index <= self.QSFP_BREAKOUT_END_IDX:
- # assuming 40G, then we need to control four lanes
- led_sysfs_paths = [ self.LED_SYSFS_PATH_BREAKOUT_CAPABLE.format(qsfp_index, i) for i in range(lane_index + 1, lane_index + 1 + lanes) ]
- else:
- led_sysfs_paths = [ self.LED_SYSFS_PATH_NO_BREAKOUT.format(qsfp_index) ]
-
- for led_sysfs_path in led_sysfs_paths:
- led_file = open(led_sysfs_path, "w")
-
- if state == "up":
- led_file.write("%d" % self.LED_COLOR_GREEN)
- else:
- led_file.write("%d" % self.LED_COLOR_OFF)
-
- led_file.close()
-
- # Constructor
- def __init__(self):
- # Initialize all front-panel status LEDs to green
- with open("/sys/class/leds/status/brightness", "w") as f:
- f.write("1")
- with open("/sys/class/leds/fan_status/brightness", "w") as f:
- f.write("1")
- with open("/sys/class/leds/psu1/brightness", "w") as f:
- f.write("1")
- with open("/sys/class/leds/psu2/brightness", "w") as f:
- f.write("1")
-
- # Initialize: Turn all front panel QSFP LEDs off
- for qsfp_index in range(self.QSFP_BREAKOUT_START_IDX, self.QSFP_BREAKOUT_END_IDX + 1):
- for lane in range(1, 5):
- led_sysfs_path = self.LED_SYSFS_PATH_BREAKOUT_CAPABLE.format(qsfp_index, lane)
- with open(led_sysfs_path, 'w') as led_file:
- led_file.write("%d" % self.LED_COLOR_OFF)
+ raise ImportError (str(e) + "- required module not found")
- for qsfp_index in range(self.QSFP_NO_BREAKOUT_START_IDX, self.QSFP_NO_BREAKOUT_END_IDX + 1):
- led_sysfs_path = self.LED_SYSFS_PATH_NO_BREAKOUT.format(qsfp_index)
- with open(led_sysfs_path, 'w') as led_file:
- led_file.write("%d" % self.LED_COLOR_OFF)
+LedControl = arista_leds.getLedControl()
diff --git a/device/arista/x86_64-arista_7050_qx32/sensors.conf b/device/arista/x86_64-arista_7050_qx32/sensors.conf
index 469f63eaf1e4..481c9ec30114 100644
--- a/device/arista/x86_64-arista_7050_qx32/sensors.conf
+++ b/device/arista/x86_64-arista_7050_qx32/sensors.conf
@@ -2,11 +2,11 @@
# ------------------------------------------------
#
-bus "i2c-2" "SCD SMBus master 0 bus 0"
-bus "i2c-3" "SCD SMBus master 0 bus 1"
-bus "i2c-5" "SCD SMBus master 0 bus 3"
-bus "i2c-6" "SCD SMBus master 0 bus 4"
-bus "i2c-7" "SCD SMBus master 0 bus 5"
+bus "i2c-2" "SCD 0000:04:00.0 SMBus master 0 bus 0"
+bus "i2c-3" "SCD 0000:04:00.0 SMBus master 0 bus 1"
+bus "i2c-5" "SCD 0000:04:00.0 SMBus master 0 bus 3"
+bus "i2c-6" "SCD 0000:04:00.0 SMBus master 0 bus 4"
+bus "i2c-7" "SCD 0000:04:00.0 SMBus master 0 bus 5"
chip "k10temp-pci-00c3"
label temp1 "Cpu temp sensor"
diff --git a/device/arista/x86_64-arista_7050_qx32s/Arista-7050-QX-32S/buffers.json.j2 b/device/arista/x86_64-arista_7050_qx32s/Arista-7050-QX-32S/buffers.json.j2
index 551f73ca0477..b67cf577ab75 100644
--- a/device/arista/x86_64-arista_7050_qx32s/Arista-7050-QX-32S/buffers.json.j2
+++ b/device/arista/x86_64-arista_7050_qx32s/Arista-7050-QX-32S/buffers.json.j2
@@ -1,128 +1,3 @@
-{# Default values which will be used if no actual configura available #}
-{% set default_cable = '300m' %}
-{% set default_speed = '100G' %}
-{% set default_ports_num = 32 -%}
+{%- set default_topo = 't1' %}
+{%- include 'buffers_config.j2' %}
-{# Port configuration to cable length look-up table #}
-{# Each record describes mapping of DUT (DUT port) role and neighbor role to cable length #}
-{# Roles described in the minigraph #}
-{% set ports2cable = {
- 'torrouter_server' : '5m',
- 'leafrouter_torrouter' : '40m',
- 'spinerouter_leafrouter' : '300m'
- }
-%}
-
-{%- macro cable_length(port_name) -%}
- {%- set cable_len = [] -%}
- {%- for local_port in DEVICE_NEIGHBOR -%}
- {%- if local_port == port_name -%}
- {%- if DEVICE_NEIGHBOR_METADATA[DEVICE_NEIGHBOR[local_port].name] -%}
- {%- set neighbor = DEVICE_NEIGHBOR_METADATA[DEVICE_NEIGHBOR[local_port].name] -%}
- {%- set neighbor_role = neighbor.type -%}
- {%- set roles1 = switch_role + '_' + neighbor_role %}
- {%- set roles2 = neighbor_role + '_' + switch_role -%}
- {%- set roles1 = roles1 | lower -%}
- {%- set roles2 = roles2 | lower -%}
- {%- if roles1 in ports2cable -%}
- {%- if cable_len.append(ports2cable[roles1]) -%}{%- endif -%}
- {%- elif roles2 in ports2cable -%}
- {%- if cable_len.append(ports2cable[roles2]) -%}{%- endif -%}
- {%- endif -%}
- {%- endif -%}
- {%- endif -%}
- {%- endfor -%}
- {%- if cable_len -%}
- {{ cable_len.0 }}
- {%- else -%}
- {{ default_cable }}
- {%- endif -%}
-{% endmacro %}
-
-{%- if DEVICE_METADATA is defined %}
-{%- set switch_role = DEVICE_METADATA['localhost']['type'] %}
-{%- endif -%}
-
-{# Generate list of ports if not defined #}
-{% if PORT is not defined %}
- {% set PORT = [] %}
- {% for port_idx in range(0,default_ports_num) %}
- {% if PORT.append("Ethernet%d" % (port_idx*4)) %}{% endif %}
- {% endfor %}
-{% endif -%}
-
-{% set port_names_list = [] %}
-{% for port in PORT %}
- {%- if port_names_list.append(port) %}{% endif %}
-{% endfor %}
-{% set port_names = port_names_list | join(',') -%}
-
-{
- "CABLE_LENGTH": {
- "AZURE": {
- {% for port in PORT %}
- {% set cable = cable_length(port) -%}
- "{{ port }}": "{{ cable }}"{%- if not loop.last -%},{% endif %}
-
- {% endfor %}
- }
- },
- "BUFFER_POOL": {
- "ingress_lossless_pool": {
- "size": "12766208",
- "type": "ingress",
- "mode": "dynamic"
- },
- "egress_lossless_pool": {
- "size": "12766208",
- "type": "egress",
- "mode": "static"
- },
- "egress_lossy_pool": {
- "size": "8072396",
- "type": "egress",
- "mode": "dynamic"
- }
- },
- "BUFFER_PROFILE": {
- "ingress_lossless_profile": {
- "pool":"[BUFFER_POOL|ingress_lossless_pool]",
- "xon":"18432",
- "xoff":"40560",
- "size":"41808",
- "dynamic_th":"-4",
- "xon_offset":"2496"
- },
- "ingress_lossy_profile": {
- "pool":"[BUFFER_POOL|ingress_lossless_pool]",
- "size":"0",
- "dynamic_th":"3"
- },
- "egress_lossless_profile": {
- "pool":"[BUFFER_POOL|egress_lossless_pool]",
- "size":"0",
- "static_th":"12766208"
- },
- "egress_lossy_profile": {
- "pool":"[BUFFER_POOL|egress_lossy_pool]",
- "size":"1518",
- "dynamic_th":"3"
- }
- },
- "BUFFER_PG": {
- "{{ port_names }}|3-4": {
- "profile" : "[BUFFER_PROFILE|ingress_lossless_profile]"
- },
- "{{ port_names }}|0-1": {
- "profile" : "[BUFFER_PROFILE|ingress_lossy_profile]"
- }
- },
- "BUFFER_QUEUE": {
- "{{ port_names }}|3-4": {
- "profile" : "[BUFFER_PROFILE|egress_lossless_profile]"
- },
- "{{ port_names }}|0-1": {
- "profile" : "[BUFFER_PROFILE|egress_lossy_profile]"
- }
- }
-}
diff --git a/device/arista/x86_64-arista_7050_qx32s/Arista-7050-QX-32S/buffers_defaults_t1.j2 b/device/arista/x86_64-arista_7050_qx32s/Arista-7050-QX-32S/buffers_defaults_t1.j2
new file mode 100644
index 000000000000..2d0cc548be30
--- /dev/null
+++ b/device/arista/x86_64-arista_7050_qx32s/Arista-7050-QX-32S/buffers_defaults_t1.j2
@@ -0,0 +1,45 @@
+{%- set default_cable = '300m' %}
+
+{%- macro generate_port_lists(PORT_ALL) %}
+ {# Generate list of ports #}
+ {% for port_idx in range(0,32) %}
+ {% if PORT_ALL.append("Ethernet%d" % (port_idx * 4)) %}{% endif %}
+ {% endfor %}
+{%- endmacro %}
+
+{%- macro generate_buffer_pool_and_profiles() %}
+ "BUFFER_POOL": {
+ "ingress_lossless_pool": {
+ "size": "12766208",
+ "type": "ingress",
+ "mode": "dynamic"
+ },
+ "egress_lossless_pool": {
+ "size": "12766208",
+ "type": "egress",
+ "mode": "static"
+ },
+ "egress_lossy_pool": {
+ "size": "8072396",
+ "type": "egress",
+ "mode": "dynamic"
+ }
+ },
+ "BUFFER_PROFILE": {
+ "ingress_lossy_profile": {
+ "pool":"[BUFFER_POOL|ingress_lossless_pool]",
+ "size":"0",
+ "dynamic_th":"3"
+ },
+ "egress_lossless_profile": {
+ "pool":"[BUFFER_POOL|egress_lossless_pool]",
+ "size":"0",
+ "static_th":"12766208"
+ },
+ "egress_lossy_profile": {
+ "pool":"[BUFFER_POOL|egress_lossy_pool]",
+ "size":"1518",
+ "dynamic_th":"3"
+ }
+ },
+{%- endmacro %}
diff --git a/device/arista/x86_64-arista_7050_qx32s/Arista-7050-QX-32S/pg_profile_lookup.ini b/device/arista/x86_64-arista_7050_qx32s/Arista-7050-QX-32S/pg_profile_lookup.ini
new file mode 100644
index 000000000000..a1181e7befff
--- /dev/null
+++ b/device/arista/x86_64-arista_7050_qx32s/Arista-7050-QX-32S/pg_profile_lookup.ini
@@ -0,0 +1,11 @@
+# PG lossless profiles.
+# speed cable size xon xoff threshold xon_offset
+ 40000 5m 41808 18432 40560 -4 2496
+ 50000 5m 41808 18432 40560 -4 2496
+ 100000 5m 41808 18432 40560 -4 2496
+ 40000 40m 41808 18432 40560 -4 2496
+ 50000 40m 41808 18432 40560 -4 2496
+ 100000 40m 41808 18432 40560 -4 2496
+ 40000 300m 41808 18432 40560 -4 2496
+ 50000 300m 41808 18432 40560 -4 2496
+ 100000 300m 41808 18432 40560 -4 2496
diff --git a/device/arista/x86_64-arista_7050_qx32s/Arista-7050-QX-32S/port_config.ini b/device/arista/x86_64-arista_7050_qx32s/Arista-7050-QX-32S/port_config.ini
index fda62e998c1a..857b126bf833 100644
--- a/device/arista/x86_64-arista_7050_qx32s/Arista-7050-QX-32S/port_config.ini
+++ b/device/arista/x86_64-arista_7050_qx32s/Arista-7050-QX-32S/port_config.ini
@@ -1,33 +1,33 @@
-# name lanes alias index
-Ethernet0 9,10,11,12 Ethernet5/1 5
-Ethernet4 13,14,15,16 Ethernet6/1 6
-Ethernet8 17,18,19,20 Ethernet7/1 7
-Ethernet12 21,22,23,24 Ethernet8/1 8
-Ethernet16 29,30,31,32 Ethernet9/1 9
-Ethernet20 25,26,27,28 Ethernet10/1 10
-Ethernet24 33,34,35,36 Ethernet11/1 11
-Ethernet28 37,38,39,40 Ethernet12/1 12
-Ethernet32 45,46,47,48 Ethernet13/1 13
-Ethernet36 41,42,43,44 Ethernet14/1 14
-Ethernet40 49,50,51,52 Ethernet15/1 15
-Ethernet44 53,54,55,56 Ethernet16/1 16
-Ethernet48 69,70,71,72 Ethernet17/1 17
-Ethernet52 65,66,67,68 Ethernet18/1 18
-Ethernet56 73,74,75,76 Ethernet19/1 19
-Ethernet60 77,78,79,80 Ethernet20/1 20
-Ethernet64 93,94,95,96 Ethernet21/1 21
-Ethernet68 89,90,91,92 Ethernet22/1 22
-Ethernet72 97,98,99,100 Ethernet23/1 23
-Ethernet76 101,102,103,104 Ethernet24/1 24
-Ethernet80 109,110,111,112 Ethernet25/1 25
-Ethernet84 105,106,107,108 Ethernet26/1 26
-Ethernet88 121,122,123,124 Ethernet27/1 27
-Ethernet92 125,126,127,128 Ethernet28/1 28
-Ethernet96 61,62,63,64 Ethernet29 29
-Ethernet100 57,58,59,60 Ethernet30 30
-Ethernet104 81,82,83,84 Ethernet31 31
-Ethernet108 85,86,87,88 Ethernet32 32
-Ethernet112 117,118,119,120 Ethernet33 33
-Ethernet116 113,114,115,116 Ethernet34 34
-Ethernet120 1,2,3,4 Ethernet35 35
-Ethernet124 5,6,7,8 Ethernet36 36
+# name lanes alias index speed
+Ethernet0 9,10,11,12 Ethernet5/1 5 40000
+Ethernet4 13,14,15,16 Ethernet6/1 6 40000
+Ethernet8 17,18,19,20 Ethernet7/1 7 40000
+Ethernet12 21,22,23,24 Ethernet8/1 8 40000
+Ethernet16 29,30,31,32 Ethernet9/1 9 40000
+Ethernet20 25,26,27,28 Ethernet10/1 10 40000
+Ethernet24 33,34,35,36 Ethernet11/1 11 40000
+Ethernet28 37,38,39,40 Ethernet12/1 12 40000
+Ethernet32 45,46,47,48 Ethernet13/1 13 40000
+Ethernet36 41,42,43,44 Ethernet14/1 14 40000
+Ethernet40 49,50,51,52 Ethernet15/1 15 40000
+Ethernet44 53,54,55,56 Ethernet16/1 16 40000
+Ethernet48 69,70,71,72 Ethernet17/1 17 40000
+Ethernet52 65,66,67,68 Ethernet18/1 18 40000
+Ethernet56 73,74,75,76 Ethernet19/1 19 40000
+Ethernet60 77,78,79,80 Ethernet20/1 20 40000
+Ethernet64 93,94,95,96 Ethernet21/1 21 40000
+Ethernet68 89,90,91,92 Ethernet22/1 22 40000
+Ethernet72 97,98,99,100 Ethernet23/1 23 40000
+Ethernet76 101,102,103,104 Ethernet24/1 24 40000
+Ethernet80 109,110,111,112 Ethernet25/1 25 40000
+Ethernet84 105,106,107,108 Ethernet26/1 26 40000
+Ethernet88 121,122,123,124 Ethernet27/1 27 40000
+Ethernet92 125,126,127,128 Ethernet28/1 28 40000
+Ethernet96 61,62,63,64 Ethernet29 29 40000
+Ethernet100 57,58,59,60 Ethernet30 30 40000
+Ethernet104 81,82,83,84 Ethernet31 31 40000
+Ethernet108 85,86,87,88 Ethernet32 32 40000
+Ethernet112 117,118,119,120 Ethernet33 33 40000
+Ethernet116 113,114,115,116 Ethernet34 34 40000
+Ethernet120 1,2,3,4 Ethernet35 35 40000
+Ethernet124 5,6,7,8 Ethernet36 36 40000
diff --git a/device/arista/x86_64-arista_7050_qx32s/Arista-7050-QX-32S/qos.json b/device/arista/x86_64-arista_7050_qx32s/Arista-7050-QX-32S/qos.json.j2
similarity index 100%
rename from device/arista/x86_64-arista_7050_qx32s/Arista-7050-QX-32S/qos.json
rename to device/arista/x86_64-arista_7050_qx32s/Arista-7050-QX-32S/qos.json.j2
diff --git a/device/arista/x86_64-arista_7050_qx32s/minigraph.xml b/device/arista/x86_64-arista_7050_qx32s/minigraph.xml
index f28c9a9ae6cb..f8b99096ab24 100644
--- a/device/arista/x86_64-arista_7050_qx32s/minigraph.xml
+++ b/device/arista/x86_64-arista_7050_qx32s/minigraph.xml
@@ -2,623 +2,8 @@
-
- ARISTA01T0
- 10.0.0.33
- sonic
- 10.0.0.32
- 1
- 180
- 60
-
-
- sonic
- 10.0.0.0
- ARISTA01T2
- 10.0.0.1
- 1
- 180
- 60
-
-
- ARISTA02T0
- 10.0.0.35
- sonic
- 10.0.0.34
- 1
- 180
- 60
-
-
- sonic
- 10.0.0.2
- ARISTA02T2
- 10.0.0.3
- 1
- 180
- 60
-
-
- ARISTA03T0
- 10.0.0.37
- sonic
- 10.0.0.36
- 1
- 180
- 60
-
-
- sonic
- 10.0.0.4
- ARISTA03T2
- 10.0.0.5
- 1
- 180
- 60
-
-
- ARISTA04T0
- 10.0.0.39
- sonic
- 10.0.0.38
- 1
- 180
- 60
-
-
- sonic
- 10.0.0.6
- ARISTA04T2
- 10.0.0.7
- 1
- 180
- 60
-
-
- ARISTA05T0
- 10.0.0.41
- sonic
- 10.0.0.40
- 1
- 180
- 60
-
-
- sonic
- 10.0.0.8
- ARISTA05T2
- 10.0.0.9
- 1
- 180
- 60
-
-
- ARISTA06T0
- 10.0.0.43
- sonic
- 10.0.0.42
- 1
- 180
- 60
-
-
- sonic
- 10.0.0.10
- ARISTA06T2
- 10.0.0.11
- 1
- 180
- 60
-
-
- ARISTA07T0
- 10.0.0.45
- sonic
- 10.0.0.44
- 1
- 180
- 60
-
-
- sonic
- 10.0.0.12
- ARISTA07T2
- 10.0.0.13
- 1
- 180
- 60
-
-
- ARISTA08T0
- 10.0.0.47
- sonic
- 10.0.0.46
- 1
- 180
- 60
-
-
- sonic
- 10.0.0.14
- ARISTA08T2
- 10.0.0.15
- 1
- 180
- 60
-
-
- ARISTA09T0
- 10.0.0.49
- sonic
- 10.0.0.48
- 1
- 180
- 60
-
-
- sonic
- 10.0.0.16
- ARISTA09T2
- 10.0.0.17
- 1
- 180
- 60
-
-
- ARISTA10T0
- 10.0.0.51
- sonic
- 10.0.0.50
- 1
- 180
- 60
-
-
- sonic
- 10.0.0.18
- ARISTA10T2
- 10.0.0.19
- 1
- 180
- 60
-
-
- ARISTA11T0
- 10.0.0.53
- sonic
- 10.0.0.52
- 1
- 180
- 60
-
-
- sonic
- 10.0.0.20
- ARISTA11T2
- 10.0.0.21
- 1
- 180
- 60
-
-
- ARISTA12T0
- 10.0.0.55
- sonic
- 10.0.0.54
- 1
- 180
- 60
-
-
- sonic
- 10.0.0.22
- ARISTA12T2
- 10.0.0.23
- 1
- 180
- 60
-
-
- ARISTA13T0
- 10.0.0.57
- sonic
- 10.0.0.56
- 1
- 180
- 60
-
-
- sonic
- 10.0.0.24
- ARISTA13T2
- 10.0.0.25
- 1
- 180
- 60
-
-
- ARISTA14T0
- 10.0.0.59
- sonic
- 10.0.0.58
- 1
- 180
- 60
-
-
- sonic
- 10.0.0.26
- ARISTA14T2
- 10.0.0.27
- 1
- 180
- 60
-
-
- ARISTA15T0
- 10.0.0.61
- sonic
- 10.0.0.60
- 1
- 180
- 60
-
-
- sonic
- 10.0.0.28
- ARISTA15T2
- 10.0.0.29
- 1
- 180
- 60
-
-
- ARISTA16T0
- 10.0.0.63
- sonic
- 10.0.0.62
- 1
- 180
- 60
-
-
- sonic
- 10.0.0.30
- ARISTA16T2
- 10.0.0.31
- 1
- 180
- 60
-
-
- 65100
- sonic
-
-
- 10.0.0.33
-
-
-
-
- 10.0.0.1
-
-
-
-
- 10.0.0.35
-
-
-
-
- 10.0.0.3
-
-
-
-
- 10.0.0.37
-
-
-
-
- 10.0.0.5
-
-
-
-
- 10.0.0.39
-
-
-
-
- 10.0.0.7
-
-
-
-
- 10.0.0.41
-
-
-
-
- 10.0.0.9
-
-
-
-
- 10.0.0.43
-
-
-
-
- 10.0.0.11
-
-
-
-
- 10.0.0.45
-
-
-
-
- 10.0.0.13
-
-
-
-
- 10.0.0.47
-
-
-
-
- 10.0.0.15
-
-
-
-
- 10.0.0.49
-
-
-
-
- 10.0.0.17
-
-
-
-
- 10.0.0.51
-
-
-
-
- 10.0.0.19
-
-
-
-
- 10.0.0.53
-
-
-
-
- 10.0.0.21
-
-
-
-
- 10.0.0.55
-
-
-
-
- 10.0.0.23
-
-
-
-
- 10.0.0.57
-
-
-
-
- 10.0.0.25
-
-
-
-
- 10.0.0.59
-
-
-
-
- 10.0.0.27
-
-
-
-
- 10.0.0.61
-
-
-
-
- 10.0.0.29
-
-
-
-
- 10.0.0.63
-
-
-
-
- 10.0.0.31
-
-
-
-
-
-
-
- 64001
- ARISTA01T0
-
-
-
- 65200
- ARISTA01T2
-
-
-
- 64002
- ARISTA02T0
-
-
-
- 65200
- ARISTA02T2
-
-
-
- 64003
- ARISTA03T0
-
-
-
- 65200
- ARISTA03T2
-
-
-
- 64004
- ARISTA04T0
-
-
-
- 65200
- ARISTA04T2
-
-
-
- 64005
- ARISTA05T0
-
-
-
- 65200
- ARISTA05T2
-
-
-
- 64006
- ARISTA06T0
-
-
-
- 65200
- ARISTA06T2
-
-
-
- 64007
- ARISTA07T0
-
-
-
- 65200
- ARISTA07T2
-
-
-
- 64008
- ARISTA08T0
-
-
-
- 65200
- ARISTA08T2
-
-
-
- 64009
- ARISTA09T0
-
-
-
- 65200
- ARISTA09T2
-
-
-
- 64010
- ARISTA10T0
-
-
-
- 65200
- ARISTA10T2
-
-
-
- 64011
- ARISTA11T0
-
-
-
- 65200
- ARISTA11T2
-
-
-
- 64012
- ARISTA12T0
-
-
-
- 65200
- ARISTA12T2
-
-
-
- 64013
- ARISTA13T0
-
-
-
- 65200
- ARISTA13T2
-
-
-
- 64014
- ARISTA14T0
-
-
-
- 65200
- ARISTA14T2
-
-
-
- 64015
- ARISTA15T0
-
-
-
- 65200
- ARISTA15T2
-
-
-
- 64016
- ARISTA16T0
-
-
-
- 65200
- ARISTA16T2
-
-
@@ -645,162 +30,162 @@
- Ethernet1/1
+ Ethernet5/1
10.0.0.0/31
- Ethernet2/1
+ Ethernet6/1
10.0.0.2/31
- Ethernet3/1
+ Ethernet7/1
10.0.0.4/31
- Ethernet4/1
+ Ethernet8/1
10.0.0.6/31
- Ethernet5/1
+ Ethernet9/1
10.0.0.8/31
- Ethernet6/1
+ Ethernet10/1
10.0.0.10/31
- Ethernet7/1
+ Ethernet11/1
10.0.0.12/31
- Ethernet8/1
+ Ethernet12/1
10.0.0.14/31
- Ethernet9/1
+ Ethernet13/1
10.0.0.16/31
- Ethernet10/1
+ Ethernet14/1
10.0.0.18/31
- Ethernet11/1
+ Ethernet15/1
10.0.0.20/31
- Ethernet12/1
+ Ethernet16/1
10.0.0.22/31
- Ethernet13/1
+ Ethernet17/1
10.0.0.24/31
- Ethernet14/1
+ Ethernet18/1
10.0.0.26/31
- Ethernet15/1
+ Ethernet19/1
10.0.0.28/31
- Ethernet16/1
+ Ethernet20/1
10.0.0.30/31
- Ethernet17/1
+ Ethernet21/1
10.0.0.32/31
- Ethernet18/1
+ Ethernet22/1
10.0.0.34/31
- Ethernet19/1
+ Ethernet23/1
10.0.0.36/31
- Ethernet20/1
+ Ethernet24/1
10.0.0.38/31
- Ethernet21/1
+ Ethernet25/1
10.0.0.40/31
- Ethernet22/1
+ Ethernet26/1
10.0.0.42/31
- Ethernet23/1
+ Ethernet27/1
10.0.0.44/31
- Ethernet24/1
+ Ethernet28/1
10.0.0.46/31
- Ethernet25
+ Ethernet29
10.0.0.48/31
- Ethernet26
+ Ethernet30
10.0.0.50/31
- Ethernet27
+ Ethernet31
10.0.0.52/31
- Ethernet28
+ Ethernet32
10.0.0.54/31
- Ethernet29
+ Ethernet33
10.0.0.56/31
- Ethernet30
+ Ethernet34
10.0.0.58/31
- Ethernet31
+ Ethernet35
10.0.0.60/31
- Ethernet32
+ Ethernet36
10.0.0.62/31
@@ -812,230 +197,6 @@
-
- DeviceInterfaceLink
- sonic
- Ethernet1/1
- ARISTA01T2
- Ethernet1
-
-
- DeviceInterfaceLink
- sonic
- Ethernet2/1
- ARISTA02T2
- Ethernet1
-
-
- DeviceInterfaceLink
- sonic
- Ethernet3/1
- ARISTA03T2
- Ethernet1
-
-
- DeviceInterfaceLink
- sonic
- Ethernet4/1
- ARISTA04T2
- Ethernet1
-
-
- DeviceInterfaceLink
- sonic
- Ethernet5/1
- ARISTA05T2
- Ethernet1
-
-
- DeviceInterfaceLink
- sonic
- Ethernet6/1
- ARISTA06T2
- Ethernet1
-
-
- DeviceInterfaceLink
- sonic
- Ethernet7/1
- ARISTA07T2
- Ethernet1
-
-
- DeviceInterfaceLink
- sonic
- Ethernet8/1
- ARISTA08T2
- Ethernet1
-
-
- DeviceInterfaceLink
- sonic
- Ethernet9/1
- ARISTA09T2
- Ethernet1
-
-
- DeviceInterfaceLink
- sonic
- Ethernet10/1
- ARISTA10T2
- Ethernet1
-
-
- DeviceInterfaceLink
- sonic
- Ethernet11/1
- ARISTA11T2
- Ethernet1
-
-
- DeviceInterfaceLink
- sonic
- Ethernet12/1
- ARISTA12T2
- Ethernet1
-
-
- DeviceInterfaceLink
- sonic
- Ethernet13/1
- ARISTA13T2
- Ethernet1
-
-
- DeviceInterfaceLink
- sonic
- Ethernet14/1
- ARISTA14T2
- Ethernet1
-
-
- DeviceInterfaceLink
- sonic
- Ethernet15/1
- ARISTA15T2
- Ethernet1
-
-
- DeviceInterfaceLink
- sonic
- Ethernet16/1
- ARISTA16T2
- Ethernet1
-
-
- DeviceInterfaceLink
- sonic
- Ethernet17/1
- ARISTA01T0
- Ethernet1
-
-
- DeviceInterfaceLink
- sonic
- Ethernet18/1
- ARISTA02T0
- Ethernet1
-
-
- DeviceInterfaceLink
- sonic
- Ethernet19/1
- ARISTA03T0
- Ethernet1
-
-
- DeviceInterfaceLink
- sonic
- Ethernet20/1
- ARISTA04T0
- Ethernet1
-
-
- DeviceInterfaceLink
- sonic
- Ethernet21/1
- ARISTA05T0
- Ethernet1
-
-
- DeviceInterfaceLink
- sonic
- Ethernet22/1
- ARISTA06T0
- Ethernet1
-
-
- DeviceInterfaceLink
- sonic
- Ethernet23/1
- ARISTA07T0
- Ethernet1
-
-
- DeviceInterfaceLink
- sonic
- Ethernet24/1
- ARISTA08T0
- Ethernet1
-
-
- DeviceInterfaceLink
- sonic
- Ethernet25
- ARISTA09T0
- Ethernet1
-
-
- DeviceInterfaceLink
- sonic
- Ethernet26
- ARISTA10T0
- Ethernet1
-
-
- DeviceInterfaceLink
- sonic
- Ethernet27
- ARISTA11T0
- Ethernet1
-
-
- DeviceInterfaceLink
- sonic
- Ethernet28
- ARISTA12T0
- Ethernet1
-
-
- DeviceInterfaceLink
- sonic
- Ethernet29
- ARISTA13T0
- Ethernet1
-
-
- DeviceInterfaceLink
- sonic
- Ethernet30
- ARISTA14T0
- Ethernet1
-
-
- DeviceInterfaceLink
- sonic
- Ethernet31
- ARISTA15T0
- Ethernet1
-
-
- DeviceInterfaceLink
- sonic
- Ethernet32
- ARISTA16T0
- Ethernet1
-
diff --git a/device/arista/x86_64-arista_7050_qx32s/plugins/led_control.py b/device/arista/x86_64-arista_7050_qx32s/plugins/led_control.py
index 6424516a59d9..8d387e513c6c 100644
--- a/device/arista/x86_64-arista_7050_qx32s/plugins/led_control.py
+++ b/device/arista/x86_64-arista_7050_qx32s/plugins/led_control.py
@@ -1,93 +1,6 @@
-#!/usr/bin/env python
-#
-# led_control.py
-#
-# Platform-specific LED control functionality for SONiC
-#
-
try:
- from sonic_led.led_control_base import LedControlBase
+ import arista.utils.sonic_leds as arista_leds
except ImportError, e:
- raise ImportError (str(e) + " - required module not found")
-
-
-class LedControl(LedControlBase):
- """Platform specific LED control class"""
-
- SONIC_PORT_NAME_PREFIX = "Ethernet"
-
- LED_SYSFS_PATH_BREAKOUT_CAPABLE = "/sys/class/leds/qsfp{0}_{1}/brightness"
- LED_SYSFS_PATH_NO_BREAKOUT = "/sys/class/leds/qsfp{0}/brightness"
-
- QSFP_BREAKOUT_START_IDX = 1
- QSFP_BREAKOUT_END_IDX = 24
- QSFP_NO_BREAKOUT_START_IDX = 25
- QSFP_NO_BREAKOUT_END_IDX = 32
-
- LED_QSFP_OFFSET = 4
-
- LED_COLOR_OFF = 0
- LED_COLOR_GREEN = 1
- LED_COLOR_YELLOW = 2
-
- # Helper method to map SONiC port name to Arista QSFP index
- def _port_name_to_qsfp_index(self, port_name):
- # Strip "Ethernet" off port name
- if not port_name.startswith(self.SONIC_PORT_NAME_PREFIX):
- return -1
-
- sonic_port_num = int(port_name[len(self.SONIC_PORT_NAME_PREFIX):])
-
- # SONiC port nums are 0-based and increment by 4
- # Arista QSFP indices are 1-based and increment by 1
- return ((sonic_port_num/4) + 1)
-
- # Concrete implementation of port_link_state_change() method
- def port_link_state_change(self, port, state):
- qsfp_index = self._port_name_to_qsfp_index(port)
-
- # Ignore invalid QSFP indices
- if qsfp_index <= 0:
- return
-
- # QSFP indices 1-24 are breakout-capable and have four LEDs, and each LED indicate one lane.
- # whereas indices 25-32 are not breakout-capable, and only have one
- if qsfp_index <= self.QSFP_BREAKOUT_END_IDX:
- # assuming 40G, then we need to control four lanes
- led_sysfs_paths = [ self.LED_SYSFS_PATH_BREAKOUT_CAPABLE.format(qsfp_index + self.LED_QSFP_OFFSET, i) for i in range(1, 5) ]
- else:
- led_sysfs_paths = [ self.LED_SYSFS_PATH_NO_BREAKOUT.format(qsfp_index + self.LED_QSFP_OFFSET) ]
-
- for led_sysfs_path in led_sysfs_paths:
- led_file = open(led_sysfs_path, "w")
-
- if state == "up":
- led_file.write("%d" % self.LED_COLOR_GREEN)
- else:
- led_file.write("%d" % self.LED_COLOR_OFF)
-
- led_file.close()
-
- # Constructor
- def __init__(self):
- # Initialize all front-panel status LEDs to green
- with open("/sys/class/leds/status/brightness", "w") as f:
- f.write("1")
- with open("/sys/class/leds/fan_status/brightness", "w") as f:
- f.write("1")
- with open("/sys/class/leds/psu1/brightness", "w") as f:
- f.write("1")
- with open("/sys/class/leds/psu2/brightness", "w") as f:
- f.write("1")
-
- # Initialize: Turn all front panel QSFP LEDs off
- for qsfp_index in range(self.QSFP_BREAKOUT_START_IDX, self.QSFP_BREAKOUT_END_IDX + 1):
- for lane in range(1, 5):
- led_sysfs_path = self.LED_SYSFS_PATH_BREAKOUT_CAPABLE.format(qsfp_index + self.LED_QSFP_OFFSET, lane)
- with open(led_sysfs_path, 'w') as led_file:
- led_file.write("%d" % self.LED_COLOR_OFF)
+ raise ImportError (str(e) + "- required module not found")
- for qsfp_index in range(self.QSFP_NO_BREAKOUT_START_IDX, self.QSFP_NO_BREAKOUT_END_IDX + 1):
- led_sysfs_path = self.LED_SYSFS_PATH_NO_BREAKOUT.format(qsfp_index + self.LED_QSFP_OFFSET)
- with open(led_sysfs_path, 'w') as led_file:
- led_file.write("%d" % self.LED_COLOR_OFF)
+LedControl = arista_leds.getLedControl()
diff --git a/device/arista/x86_64-arista_7050_qx32s/sensors.conf b/device/arista/x86_64-arista_7050_qx32s/sensors.conf
index 9c2dd38597a3..6030de90eea5 100644
--- a/device/arista/x86_64-arista_7050_qx32s/sensors.conf
+++ b/device/arista/x86_64-arista_7050_qx32s/sensors.conf
@@ -2,11 +2,11 @@
# ------------------------------------------------
#
-bus "i2c-2" "SCD SMBus master 0 bus 0"
-bus "i2c-3" "SCD SMBus master 0 bus 1"
-bus "i2c-5" "SCD SMBus master 0 bus 3"
-bus "i2c-6" "SCD SMBus master 0 bus 4"
-bus "i2c-7" "SCD SMBus master 0 bus 5"
+bus "i2c-2" "SCD 0000:02:00.0 SMBus master 0 bus 0"
+bus "i2c-3" "SCD 0000:02:00.0 SMBus master 0 bus 1"
+bus "i2c-5" "SCD 0000:02:00.0 SMBus master 0 bus 3"
+bus "i2c-6" "SCD 0000:02:00.0 SMBus master 0 bus 4"
+bus "i2c-7" "SCD 0000:02:00.0 SMBus master 0 bus 5"
chip "k10temp-pci-00c3"
label temp1 "Cpu temp sensor"
diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32-T1 b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32-T1
new file mode 120000
index 000000000000..42c11d5f05fb
--- /dev/null
+++ b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32-T1
@@ -0,0 +1 @@
+Arista-7060CX-32S-C32
\ No newline at end of file
diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/qos.json b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/qos.json.j2
similarity index 79%
rename from device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/qos.json
rename to device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/qos.json.j2
index b724b48c2c23..84f74ecab3be 100644
--- a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/qos.json
+++ b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-C32/qos.json.j2
@@ -127,35 +127,23 @@
}
},
"WRED_PROFILE": {
- "AZURE_LOSSY" : {
- "wred_green_enable":"true",
- "wred_yellow_enable":"true",
- "ecn":"ecn_all",
- "red_max_threshold":"512000",
- "red_min_threshold":"512000",
- "yellow_max_threshold":"512000",
- "yellow_min_threshold":"512000",
- "green_max_threshold": "184320",
- "green_min_threshold": "184320"
- },
"AZURE_LOSSLESS" : {
"wred_green_enable":"true",
"wred_yellow_enable":"true",
+ "wred_red_enable":"true",
"ecn":"ecn_all",
- "red_max_threshold":"512000",
- "red_min_threshold":"512000",
- "yellow_max_threshold":"512000",
- "yellow_min_threshold":"512000",
- "green_max_threshold": "184320",
- "green_min_threshold": "184320"
+ "red_max_threshold":"312000",
+ "red_min_threshold":"104000",
+ "yellow_max_threshold":"312000",
+ "yellow_min_threshold":"104000",
+ "green_max_threshold": "312000",
+ "green_min_threshold": "104000"
}
},
"QUEUE": {
- "Ethernet0,Ethernet4,Ethernet8,Ethernet12,Ethernet16,Ethernet20,Ethernet24,Ethernet28,Ethernet32,Ethernet36,Ethernet40,Ethernet44,Ethernet48,Ethernet52,Ethernet56,Ethernet60,Ethernet64,Ethernet68,Ethernet72,Ethernet76,Ethernet80,Ethernet84,Ethernet88,Ethernet92,Ethernet96,Ethernet100,Ethernet104,Ethernet108,Ethernet112,Ethernet116,Ethernet120,Ethernet124|0-1" : {
- "wred_profile" : "[WRED_PROFILE|AZURE_LOSSY]"
- },
"Ethernet0,Ethernet4,Ethernet8,Ethernet12,Ethernet16,Ethernet20,Ethernet24,Ethernet28,Ethernet32,Ethernet36,Ethernet40,Ethernet44,Ethernet48,Ethernet52,Ethernet56,Ethernet60,Ethernet64,Ethernet68,Ethernet72,Ethernet76,Ethernet80,Ethernet84,Ethernet88,Ethernet92,Ethernet96,Ethernet100,Ethernet104,Ethernet108,Ethernet112,Ethernet116,Ethernet120,Ethernet124|3-4" : {
- "scheduler" : "[SCHEDULER|scheduler.0]"
+ "scheduler" : "[SCHEDULER|scheduler.0]",
+ "wred_profile" : "[WRED_PROFILE|AZURE_LOSSLESS]"
},
"Ethernet0,Ethernet4,Ethernet8,Ethernet12,Ethernet16,Ethernet20,Ethernet24,Ethernet28,Ethernet32,Ethernet36,Ethernet40,Ethernet44,Ethernet48,Ethernet52,Ethernet56,Ethernet60,Ethernet64,Ethernet68,Ethernet72,Ethernet76,Ethernet80,Ethernet84,Ethernet88,Ethernet92,Ethernet96,Ethernet100,Ethernet104,Ethernet108,Ethernet112,Ethernet116,Ethernet120,Ethernet124|0" : {
"scheduler" : "[SCHEDULER|scheduler.1]"
diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-D48C8/qos.json b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-D48C8/qos.json.j2
similarity index 79%
rename from device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-D48C8/qos.json
rename to device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-D48C8/qos.json.j2
index 8149f1f111ce..5142832ecae4 100644
--- a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-D48C8/qos.json
+++ b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-D48C8/qos.json.j2
@@ -127,35 +127,23 @@
}
},
"WRED_PROFILE": {
- "AZURE_LOSSY" : {
- "wred_green_enable":"true",
- "wred_yellow_enable":"true",
- "ecn":"ecn_all",
- "red_max_threshold":"512000",
- "red_min_threshold":"512000",
- "yellow_max_threshold":"512000",
- "yellow_min_threshold":"512000",
- "green_max_threshold": "184320",
- "green_min_threshold": "184320"
- },
"AZURE_LOSSLESS" : {
"wred_green_enable":"true",
"wred_yellow_enable":"true",
+ "wred_red_enable":"true",
"ecn":"ecn_all",
- "red_max_threshold":"512000",
- "red_min_threshold":"512000",
- "yellow_max_threshold":"512000",
- "yellow_min_threshold":"512000",
- "green_max_threshold": "184320",
- "green_min_threshold": "184320"
+ "red_max_threshold":"312000",
+ "red_min_threshold":"104000",
+ "yellow_max_threshold":"312000",
+ "yellow_min_threshold":"104000",
+ "green_max_threshold": "312000",
+ "green_min_threshold": "104000"
}
},
"QUEUE": {
- "Ethernet0,Ethernet2,Ethernet4,Ethernet6,Ethernet8,Ethernet10,Ethernet12,Ethernet14,Ethernet16,Ethernet18,Ethernet20,Ethernet22,Ethernet24,Ethernet28,Ethernet32,Ethernet36,Ethernet40,Ethernet42,Ethernet44,Ethernet46,Ethernet48,Ethernet50,Ethernet52,Ethernet54,Ethernet56,Ethernet58,Ethernet60,Ethernet62,Ethernet64,Ethernet66,Ethernet68,Ethernet70,Ethernet72,Ethernet74,Ethernet76,Ethernet78,Ethernet80,Ethernet82,Ethernet84,Ethernet86,Ethernet88,Ethernet92,Ethernet96,Ethernet100,Ethernet104,Ethernet106,Ethernet108,Ethernet110,Ethernet112,Ethernet114,Ethernet116,Ethernet118,Ethernet120,Ethernet122,Ethernet124,Ethernet126|0-1": {
- "wred_profile" : "[WRED_PROFILE|AZURE_LOSSY]"
- },
"Ethernet0,Ethernet2,Ethernet4,Ethernet6,Ethernet8,Ethernet10,Ethernet12,Ethernet14,Ethernet16,Ethernet18,Ethernet20,Ethernet22,Ethernet24,Ethernet28,Ethernet32,Ethernet36,Ethernet40,Ethernet42,Ethernet44,Ethernet46,Ethernet48,Ethernet50,Ethernet52,Ethernet54,Ethernet56,Ethernet58,Ethernet60,Ethernet62,Ethernet64,Ethernet66,Ethernet68,Ethernet70,Ethernet72,Ethernet74,Ethernet76,Ethernet78,Ethernet80,Ethernet82,Ethernet84,Ethernet86,Ethernet88,Ethernet92,Ethernet96,Ethernet100,Ethernet104,Ethernet106,Ethernet108,Ethernet110,Ethernet112,Ethernet114,Ethernet116,Ethernet118,Ethernet120,Ethernet122,Ethernet124,Ethernet126|3-4": {
- "scheduler" : "[SCHEDULER|scheduler.0]"
+ "scheduler" : "[SCHEDULER|scheduler.0]",
+ "wred_profile" : "[WRED_PROFILE|AZURE_LOSSLESS]"
},
"Ethernet0,Ethernet2,Ethernet4,Ethernet6,Ethernet8,Ethernet10,Ethernet12,Ethernet14,Ethernet16,Ethernet18,Ethernet20,Ethernet22,Ethernet24,Ethernet28,Ethernet32,Ethernet36,Ethernet40,Ethernet42,Ethernet44,Ethernet46,Ethernet48,Ethernet50,Ethernet52,Ethernet54,Ethernet56,Ethernet58,Ethernet60,Ethernet62,Ethernet64,Ethernet66,Ethernet68,Ethernet70,Ethernet72,Ethernet74,Ethernet76,Ethernet78,Ethernet80,Ethernet82,Ethernet84,Ethernet86,Ethernet88,Ethernet92,Ethernet96,Ethernet100,Ethernet104,Ethernet106,Ethernet108,Ethernet110,Ethernet112,Ethernet114,Ethernet116,Ethernet118,Ethernet120,Ethernet122,Ethernet124,Ethernet126|0": {
"scheduler" : "[SCHEDULER|scheduler.1]"
diff --git a/device/dell/x86_64-dell_z9100_c2538-r0/Force10-Z9100/qos.json b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/qos.json.j2
similarity index 79%
rename from device/dell/x86_64-dell_z9100_c2538-r0/Force10-Z9100/qos.json
rename to device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/qos.json.j2
index b724b48c2c23..84f74ecab3be 100644
--- a/device/dell/x86_64-dell_z9100_c2538-r0/Force10-Z9100/qos.json
+++ b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/qos.json.j2
@@ -127,35 +127,23 @@
}
},
"WRED_PROFILE": {
- "AZURE_LOSSY" : {
- "wred_green_enable":"true",
- "wred_yellow_enable":"true",
- "ecn":"ecn_all",
- "red_max_threshold":"512000",
- "red_min_threshold":"512000",
- "yellow_max_threshold":"512000",
- "yellow_min_threshold":"512000",
- "green_max_threshold": "184320",
- "green_min_threshold": "184320"
- },
"AZURE_LOSSLESS" : {
"wred_green_enable":"true",
"wred_yellow_enable":"true",
+ "wred_red_enable":"true",
"ecn":"ecn_all",
- "red_max_threshold":"512000",
- "red_min_threshold":"512000",
- "yellow_max_threshold":"512000",
- "yellow_min_threshold":"512000",
- "green_max_threshold": "184320",
- "green_min_threshold": "184320"
+ "red_max_threshold":"312000",
+ "red_min_threshold":"104000",
+ "yellow_max_threshold":"312000",
+ "yellow_min_threshold":"104000",
+ "green_max_threshold": "312000",
+ "green_min_threshold": "104000"
}
},
"QUEUE": {
- "Ethernet0,Ethernet4,Ethernet8,Ethernet12,Ethernet16,Ethernet20,Ethernet24,Ethernet28,Ethernet32,Ethernet36,Ethernet40,Ethernet44,Ethernet48,Ethernet52,Ethernet56,Ethernet60,Ethernet64,Ethernet68,Ethernet72,Ethernet76,Ethernet80,Ethernet84,Ethernet88,Ethernet92,Ethernet96,Ethernet100,Ethernet104,Ethernet108,Ethernet112,Ethernet116,Ethernet120,Ethernet124|0-1" : {
- "wred_profile" : "[WRED_PROFILE|AZURE_LOSSY]"
- },
"Ethernet0,Ethernet4,Ethernet8,Ethernet12,Ethernet16,Ethernet20,Ethernet24,Ethernet28,Ethernet32,Ethernet36,Ethernet40,Ethernet44,Ethernet48,Ethernet52,Ethernet56,Ethernet60,Ethernet64,Ethernet68,Ethernet72,Ethernet76,Ethernet80,Ethernet84,Ethernet88,Ethernet92,Ethernet96,Ethernet100,Ethernet104,Ethernet108,Ethernet112,Ethernet116,Ethernet120,Ethernet124|3-4" : {
- "scheduler" : "[SCHEDULER|scheduler.0]"
+ "scheduler" : "[SCHEDULER|scheduler.0]",
+ "wred_profile" : "[WRED_PROFILE|AZURE_LOSSLESS]"
},
"Ethernet0,Ethernet4,Ethernet8,Ethernet12,Ethernet16,Ethernet20,Ethernet24,Ethernet28,Ethernet32,Ethernet36,Ethernet40,Ethernet44,Ethernet48,Ethernet52,Ethernet56,Ethernet60,Ethernet64,Ethernet68,Ethernet72,Ethernet76,Ethernet80,Ethernet84,Ethernet88,Ethernet92,Ethernet96,Ethernet100,Ethernet104,Ethernet108,Ethernet112,Ethernet116,Ethernet120,Ethernet124|0" : {
"scheduler" : "[SCHEDULER|scheduler.1]"
diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/sai.profile.j2 b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/sai.profile.j2
index bef6932f1eac..638fd28b0765 100644
--- a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/sai.profile.j2
+++ b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/sai.profile.j2
@@ -2,12 +2,12 @@
{%- if DEVICE_METADATA is defined -%}
{%- set switch_role = DEVICE_METADATA['localhost']['type'] -%}
{%- if switch_role.lower() == 'torrouter' %}
-{% set sai_profile_contents = 'SAI_INIT_CONFIG_FILE=/etc/bcm/th-a7060-cx32s-32x40G.config.bcm' -%}
+{% set sai_profile_contents = 'SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/th-a7060-cx32s-32x40G-t0.config.bcm' -%}
{%- else %}
-{%- set sai_profile_contents = 'SAI_INIT_CONFIG_FILE=/etc/bcm/th-a7060-cx32s-32x40G-t1.config.bcm' -%}
+{%- set sai_profile_contents = 'SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/th-a7060-cx32s-32x40G-t1.config.bcm' -%}
{%- endif %}
{%- else %}
-{%- set sai_profile_contents = 'SAI_INIT_CONFIG_FILE=/etc/bcm/th-a7060-cx32s-32x40G-t1.config.bcm' -%}
+{%- set sai_profile_contents = 'SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/th-a7060-cx32s-32x40G-t1.config.bcm' -%}
{%- endif %}
{# Write the contents of sai_ profile_filename to sai.profile file #}
{{ sai_profile_contents }}
diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/th-a7060-cx32s-32x40G-t0.config.bcm b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/th-a7060-cx32s-32x40G-t0.config.bcm
new file mode 100644
index 000000000000..0cb4ae4a474a
--- /dev/null
+++ b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/th-a7060-cx32s-32x40G-t0.config.bcm
@@ -0,0 +1,444 @@
+# Arista 7060CX-32S
+
+phy_an_allow_pll_change=1
+arl_clean_timeout_usec=15000000
+asf_mem_profile=2
+bcm_num_cos=8
+bcm_stat_flags=1
+bcm_stat_jumbo=9236
+cdma_timeout_usec=15000000
+dma_desc_timeout_usec=15000000
+higig2_hdr_mode=1
+ipv6_lpm_128b_enable=1
+l3_alpm_enable=2
+lpm_scaling_enable=0
+l2xmsg_mode=1
+max_vp_lags=0
+miim_intr_enable=0
+module_64ports=1
+os=unix
+oversubscribe_mode=1
+ptp_bs_fref.0=25000000
+ptp_ts_pll_fref.0=25000000
+robust_hash_disable_egress_vlan.0=1
+robust_hash_disable_mpls.0=1
+robust_hash_disable_vlan.0=1
+tdma_timeout_usec.0=15000000
+tslam_timeout_usec.0=15000000
+pbmp_xport_xe.0=0x7ffffffffffffffffffffffffffffffffe
+phy_an_allow_pll_change_hg.0=0
+phy_an_c73_1.0=1
+phy_an_c73_2.0=1
+phy_an_c73_3.0=1
+phy_an_c73_4.0=1
+phy_an_c73_5.0=1
+phy_an_c73_6.0=1
+phy_an_c73_7.0=1
+phy_an_c73_8.0=1
+phy_an_c73_34.0=1
+phy_an_c73_35.0=1
+phy_an_c73_36.0=1
+phy_an_c73_37.0=1
+phy_an_c73_38.0=1
+phy_an_c73_39.0=1
+phy_an_c73_40.0=1
+phy_an_c73_41.0=1
+phy_an_c73_68.0=1
+phy_an_c73_69.0=1
+phy_an_c73_70.0=1
+phy_an_c73_71.0=1
+phy_an_c73_72.0=1
+phy_an_c73_73.0=1
+phy_an_c73_74.0=1
+phy_an_c73_75.0=1
+phy_an_c73_102.0=1
+phy_an_c73_103.0=1
+phy_an_c73_104.0=1
+phy_an_c73_105.0=1
+phy_an_c73_106.0=1
+phy_an_c73_107.0=1
+phy_an_c73_108.0=1
+phy_an_c73_109.0=1
+phy_an_fec_1.0=1
+phy_an_fec_2.0=1
+phy_an_fec_3.0=1
+phy_an_fec_4.0=1
+phy_an_fec_5.0=1
+phy_an_fec_6.0=1
+phy_an_fec_7.0=1
+phy_an_fec_8.0=1
+phy_an_fec_9.0=1
+phy_an_fec_10.0=1
+phy_an_fec_11.0=1
+phy_an_fec_12.0=1
+phy_an_fec_13.0=1
+phy_an_fec_14.0=1
+phy_an_fec_15.0=1
+phy_an_fec_16.0=1
+phy_an_fec_17.0=1
+phy_an_fec_18.0=1
+phy_an_fec_19.0=1
+phy_an_fec_20.0=1
+phy_an_fec_21.0=1
+phy_an_fec_22.0=1
+phy_an_fec_23.0=1
+phy_an_fec_24.0=1
+phy_an_fec_25.0=1
+phy_an_fec_26.0=1
+phy_an_fec_27.0=1
+phy_an_fec_28.0=1
+phy_an_fec_29.0=1
+phy_an_fec_30.0=1
+phy_an_fec_31.0=1
+phy_an_fec_32.0=1
+phy_an_fec_34.0=1
+phy_an_fec_38.0=1
+phy_an_fec_39.0=1
+phy_an_fec_40.0=1
+phy_an_fec_41.0=1
+phy_an_fec_42.0=1
+phy_an_fec_43.0=1
+phy_an_fec_44.0=1
+phy_an_fec_45.0=1
+phy_an_fec_46.0=1
+phy_an_fec_47.0=1
+phy_an_fec_48.0=1
+phy_an_fec_49.0=1
+phy_an_fec_50.0=1
+phy_an_fec_51.0=1
+phy_an_fec_52.0=1
+phy_an_fec_53.0=1
+phy_an_fec_54.0=1
+phy_an_fec_55.0=1
+phy_an_fec_56.0=1
+phy_an_fec_57.0=1
+phy_an_fec_58.0=1
+phy_an_fec_59.0=1
+phy_an_fec_60.0=1
+phy_an_fec_61.0=1
+phy_an_fec_62.0=1
+phy_an_fec_63.0=1
+phy_an_fec_64.0=1
+phy_an_fec_65.0=1
+phy_an_fec_68.0=1
+phy_an_fec_69.0=1
+phy_an_fec_70.0=1
+phy_an_fec_71.0=1
+phy_an_fec_72.0=1
+phy_an_fec_73.0=1
+phy_an_fec_74.0=1
+phy_an_fec_75.0=1
+phy_an_fec_76.0=1
+phy_an_fec_77.0=1
+phy_an_fec_78.0=1
+phy_an_fec_79.0=1
+phy_an_fec_80.0=1
+phy_an_fec_81.0=1
+phy_an_fec_82.0=1
+phy_an_fec_83.0=1
+phy_an_fec_84.0=1
+phy_an_fec_85.0=1
+phy_an_fec_86.0=1
+phy_an_fec_87.0=1
+phy_an_fec_88.0=1
+phy_an_fec_89.0=1
+phy_an_fec_90.0=1
+phy_an_fec_91.0=1
+phy_an_fec_92.0=1
+phy_an_fec_93.0=1
+phy_an_fec_94.0=1
+phy_an_fec_95.0=1
+phy_an_fec_96.0=1
+phy_an_fec_97.0=1
+phy_an_fec_98.0=1
+phy_an_fec_99.0=1
+phy_an_fec_102.0=1
+phy_an_fec_103.0=1
+phy_an_fec_104.0=1
+phy_an_fec_105.0=1
+phy_an_fec_106.0=1
+phy_an_fec_107.0=1
+phy_an_fec_108.0=1
+phy_an_fec_109.0=1
+phy_an_fec_110.0=1
+phy_an_fec_111.0=1
+phy_an_fec_112.0=1
+phy_an_fec_113.0=1
+phy_an_fec_114.0=1
+phy_an_fec_115.0=1
+phy_an_fec_116.0=1
+phy_an_fec_117.0=1
+phy_an_fec_118.0=1
+phy_an_fec_119.0=1
+phy_an_fec_120.0=1
+phy_an_fec_121.0=1
+phy_an_fec_122.0=1
+phy_an_fec_123.0=1
+phy_an_fec_124.0=1
+phy_an_fec_125.0=1
+phy_an_fec_126.0=1
+phy_an_fec_127.0=1
+phy_an_fec_128.0=1
+phy_an_fec_129.0=1
+phy_an_fec_130.0=1
+phy_an_fec_131.0=1
+phy_an_fec_132.0=1
+phy_an_fec_133.0=1
+phy_xaui_rx_polarity_flip_1.0=0x1
+phy_xaui_rx_polarity_flip_2.0=0x5
+phy_xaui_rx_polarity_flip_3.0=0x1
+phy_xaui_rx_polarity_flip_4.0=0x7
+phy_xaui_rx_polarity_flip_5.0=0xc
+phy_xaui_rx_polarity_flip_6.0=0xf
+phy_xaui_rx_polarity_flip_7.0=0xc
+phy_xaui_rx_polarity_flip_8.0=0xf
+phy_xaui_rx_polarity_flip_34.0=0x0
+phy_xaui_rx_polarity_flip_35.0=0x7
+phy_xaui_rx_polarity_flip_36.0=0x4
+phy_xaui_rx_polarity_flip_37.0=0x7
+phy_xaui_rx_polarity_flip_38.0=0x4
+phy_xaui_rx_polarity_flip_39.0=0x6
+phy_xaui_rx_polarity_flip_40.0=0x1
+phy_xaui_rx_polarity_flip_41.0=0x2
+phy_xaui_rx_polarity_flip_68.0=0xd
+phy_xaui_rx_polarity_flip_69.0=0x6
+phy_xaui_rx_polarity_flip_70.0=0x1
+phy_xaui_rx_polarity_flip_71.0=0x8
+phy_xaui_rx_polarity_flip_72.0=0x7
+phy_xaui_rx_polarity_flip_73.0=0xc
+phy_xaui_rx_polarity_flip_74.0=0x7
+phy_xaui_rx_polarity_flip_75.0=0x8
+phy_xaui_rx_polarity_flip_102.0=0xb
+phy_xaui_rx_polarity_flip_103.0=0xc
+phy_xaui_rx_polarity_flip_104.0=0x3
+phy_xaui_rx_polarity_flip_105.0=0xc
+phy_xaui_rx_polarity_flip_106.0=0xb
+phy_xaui_rx_polarity_flip_107.0=0x5
+phy_xaui_rx_polarity_flip_108.0=0x1
+phy_xaui_rx_polarity_flip_109.0=0x9
+phy_xaui_tx_polarity_flip_1.0=0x0
+phy_xaui_tx_polarity_flip_2.0=0xe
+phy_xaui_tx_polarity_flip_3.0=0x2
+phy_xaui_tx_polarity_flip_4.0=0xe
+phy_xaui_tx_polarity_flip_5.0=0xc
+phy_xaui_tx_polarity_flip_6.0=0xf
+phy_xaui_tx_polarity_flip_7.0=0xc
+phy_xaui_tx_polarity_flip_8.0=0xf
+phy_xaui_tx_polarity_flip_34.0=0x0
+phy_xaui_tx_polarity_flip_35.0=0xe
+phy_xaui_tx_polarity_flip_36.0=0x0
+phy_xaui_tx_polarity_flip_37.0=0xe
+phy_xaui_tx_polarity_flip_38.0=0xf
+phy_xaui_tx_polarity_flip_39.0=0xe
+phy_xaui_tx_polarity_flip_40.0=0x6
+phy_xaui_tx_polarity_flip_41.0=0xb
+phy_xaui_tx_polarity_flip_68.0=0x9
+phy_xaui_tx_polarity_flip_69.0=0xb
+phy_xaui_tx_polarity_flip_70.0=0xd
+phy_xaui_tx_polarity_flip_71.0=0x9
+phy_xaui_tx_polarity_flip_72.0=0x6
+phy_xaui_tx_polarity_flip_73.0=0xc
+phy_xaui_tx_polarity_flip_74.0=0x9
+phy_xaui_tx_polarity_flip_75.0=0x9
+phy_xaui_tx_polarity_flip_102.0=0x6
+phy_xaui_tx_polarity_flip_103.0=0xb
+phy_xaui_tx_polarity_flip_104.0=0x6
+phy_xaui_tx_polarity_flip_105.0=0xb
+phy_xaui_tx_polarity_flip_106.0=0x6
+phy_xaui_tx_polarity_flip_107.0=0xf
+phy_xaui_tx_polarity_flip_108.0=0x6
+phy_xaui_tx_polarity_flip_109.0=0xc
+portmap_1.0=1:40
+portmap_2.0=5:40
+portmap_3.0=9:40
+portmap_4.0=13:40
+portmap_5.0=17:40
+portmap_6.0=21:40
+portmap_7.0=25:40
+portmap_8.0=29:40
+portmap_34.0=33:40
+portmap_35.0=37:40
+portmap_36.0=41:40
+portmap_37.0=45:40
+portmap_38.0=49:40
+portmap_39.0=53:40
+portmap_40.0=57:40
+portmap_41.0=61:40
+portmap_68.0=65:40
+portmap_69.0=69:40
+portmap_70.0=73:40
+portmap_71.0=77:40
+portmap_72.0=81:40
+portmap_73.0=85:40
+portmap_74.0=89:40
+portmap_75.0=93:40
+portmap_102.0=97:40
+portmap_103.0=101:40
+portmap_104.0=105:40
+portmap_105.0=109:40
+portmap_106.0=113:40
+portmap_107.0=117:40
+portmap_108.0=121:40
+portmap_109.0=125:40
+port_phy_addr_1.0=0xff
+port_phy_addr_2.0=0xff
+port_phy_addr_3.0=0xff
+port_phy_addr_4.0=0xff
+port_phy_addr_5.0=0xff
+port_phy_addr_6.0=0xff
+port_phy_addr_7.0=0xff
+port_phy_addr_8.0=0xff
+port_phy_addr_34.0=0xff
+port_phy_addr_35.0=0xff
+port_phy_addr_36.0=0xff
+port_phy_addr_37.0=0xff
+port_phy_addr_38.0=0xff
+port_phy_addr_39.0=0xff
+port_phy_addr_40.0=0xff
+port_phy_addr_41.0=0xff
+port_phy_addr_68.0=0xff
+port_phy_addr_69.0=0xff
+port_phy_addr_70.0=0xff
+port_phy_addr_71.0=0xff
+port_phy_addr_72.0=0xff
+port_phy_addr_73.0=0xff
+port_phy_addr_74.0=0xff
+port_phy_addr_75.0=0xff
+port_phy_addr_102.0=0xff
+port_phy_addr_103.0=0xff
+port_phy_addr_104.0=0xff
+port_phy_addr_105.0=0xff
+port_phy_addr_106.0=0xff
+port_phy_addr_107.0=0xff
+port_phy_addr_108.0=0xff
+port_phy_addr_109.0=0xff
+xgxs_rx_lane_map_1.0=0x3210
+xgxs_rx_lane_map_2.0=0x3210
+xgxs_rx_lane_map_3.0=0x3210
+xgxs_rx_lane_map_4.0=0x3210
+xgxs_rx_lane_map_5.0=0x0123
+xgxs_rx_lane_map_6.0=0x2301
+xgxs_rx_lane_map_7.0=0x0123
+xgxs_rx_lane_map_8.0=0x2301
+xgxs_rx_lane_map_34.0=0x0123
+xgxs_rx_lane_map_35.0=0x0321
+xgxs_rx_lane_map_36.0=0x0321
+xgxs_rx_lane_map_37.0=0x0321
+xgxs_rx_lane_map_38.0=0x1230
+xgxs_rx_lane_map_39.0=0x2301
+xgxs_rx_lane_map_40.0=0x1230
+xgxs_rx_lane_map_41.0=0x2103
+xgxs_rx_lane_map_68.0=0x1230
+xgxs_rx_lane_map_69.0=0x2301
+xgxs_rx_lane_map_70.0=0x1230
+xgxs_rx_lane_map_71.0=0x2103
+xgxs_rx_lane_map_72.0=0x1230
+xgxs_rx_lane_map_73.0=0x2301
+xgxs_rx_lane_map_74.0=0x1230
+xgxs_rx_lane_map_75.0=0x2103
+xgxs_rx_lane_map_102.0=0x3210
+xgxs_rx_lane_map_103.0=0x3210
+xgxs_rx_lane_map_104.0=0x3210
+xgxs_rx_lane_map_105.0=0x3210
+xgxs_rx_lane_map_106.0=0x3210
+xgxs_rx_lane_map_107.0=0x3210
+xgxs_rx_lane_map_108.0=0x3210
+xgxs_rx_lane_map_109.0=0x3210
+xgxs_tx_lane_map_1.0=0x0321
+xgxs_tx_lane_map_2.0=0x2301
+xgxs_tx_lane_map_3.0=0x0321
+xgxs_tx_lane_map_4.0=0x2301
+xgxs_tx_lane_map_5.0=0x0123
+xgxs_tx_lane_map_6.0=0x0123
+xgxs_tx_lane_map_7.0=0x0123
+xgxs_tx_lane_map_8.0=0x0123
+xgxs_tx_lane_map_34.0=0x2301
+xgxs_tx_lane_map_35.0=0x0321
+xgxs_tx_lane_map_36.0=0x2301
+xgxs_tx_lane_map_37.0=0x0321
+xgxs_tx_lane_map_38.0=0x0123
+xgxs_tx_lane_map_39.0=0x1230
+xgxs_tx_lane_map_40.0=0x2301
+xgxs_tx_lane_map_41.0=0x1032
+xgxs_tx_lane_map_68.0=0x0123
+xgxs_tx_lane_map_69.0=0x1230
+xgxs_tx_lane_map_70.0=0x2301
+xgxs_tx_lane_map_71.0=0x1032
+xgxs_tx_lane_map_72.0=0x0123
+xgxs_tx_lane_map_73.0=0x1230
+xgxs_tx_lane_map_74.0=0x2301
+xgxs_tx_lane_map_75.0=0x1032
+xgxs_tx_lane_map_102.0=0x0321
+xgxs_tx_lane_map_103.0=0x2301
+xgxs_tx_lane_map_104.0=0x0321
+xgxs_tx_lane_map_105.0=0x2301
+xgxs_tx_lane_map_106.0=0x0321
+xgxs_tx_lane_map_107.0=0x2301
+xgxs_tx_lane_map_108.0=0x0321
+xgxs_tx_lane_map_109.0=0x2301
+serdes_driver_current_1=0x4
+serdes_preemphasis_1=0x145c00
+serdes_driver_current_2=0x4
+serdes_preemphasis_2=0x145c00
+serdes_driver_current_3=0x8
+serdes_preemphasis_3=0x185800
+serdes_driver_current_4=0x8
+serdes_preemphasis_4=0x185800
+serdes_driver_current_5=0x8
+serdes_preemphasis_5=0x185800
+serdes_driver_current_6=0x8
+serdes_preemphasis_6=0x185800
+serdes_driver_current_7=0xf
+serdes_preemphasis_7=0x205000
+serdes_driver_current_8=0xf
+serdes_preemphasis_8=0x205000
+serdes_driver_current_34=0xf
+serdes_preemphasis_34=0x205000
+serdes_driver_current_35=0xf
+serdes_preemphasis_35=0x205000
+serdes_driver_current_36=0xf
+serdes_preemphasis_36=0x205000
+serdes_driver_current_37=0xf
+serdes_preemphasis_37=0x205000
+serdes_driver_current_38=0x8
+serdes_preemphasis_38=0x185800
+serdes_driver_current_39=0x8
+serdes_preemphasis_39=0x185800
+serdes_driver_current_40=0x8
+serdes_preemphasis_40=0x185800
+serdes_driver_current_41=0x8
+serdes_preemphasis_41=0x185800
+serdes_driver_current_68=0x4
+serdes_preemphasis_68=0x145c00
+serdes_driver_current_69=0x4
+serdes_preemphasis_69=0x145c00
+serdes_driver_current_70=0x4
+serdes_preemphasis_70=0x145c00
+serdes_driver_current_71=0x4
+serdes_preemphasis_71=0x145c00
+serdes_driver_current_72=0x4
+serdes_preemphasis_72=0x145c00
+serdes_driver_current_73=0x4
+serdes_preemphasis_73=0x145c00
+serdes_driver_current_74=0x4
+serdes_preemphasis_74=0x145c00
+serdes_driver_current_75=0x4
+serdes_preemphasis_75=0x145c00
+serdes_driver_current_102=0x4
+serdes_preemphasis_102=0x145c00
+serdes_driver_current_103=0x4
+serdes_preemphasis_103=0x145c00
+serdes_driver_current_104=0x4
+serdes_preemphasis_104=0x145c00
+serdes_driver_current_105=0x4
+serdes_preemphasis_105=0x145c00
+serdes_driver_current_106=0x4
+serdes_preemphasis_106=0x145c00
+serdes_driver_current_107=0x4
+serdes_preemphasis_107=0x145c00
+serdes_driver_current_108=0x4
+serdes_preemphasis_108=0x145c00
+serdes_driver_current_109=0x4
+serdes_preemphasis_109=0x145c00
+
+mmu_init_config="MSFT-TH-Tier0"
diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/th-a7060-cx32s-32x40G-t1.config.bcm b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/th-a7060-cx32s-32x40G-t1.config.bcm
new file mode 100644
index 000000000000..c3218645ac2d
--- /dev/null
+++ b/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/th-a7060-cx32s-32x40G-t1.config.bcm
@@ -0,0 +1,444 @@
+# Arista 7060CX-32S
+
+phy_an_allow_pll_change=1
+arl_clean_timeout_usec=15000000
+asf_mem_profile=2
+bcm_num_cos=8
+bcm_stat_flags=1
+bcm_stat_jumbo=9236
+cdma_timeout_usec=15000000
+dma_desc_timeout_usec=15000000
+higig2_hdr_mode=1
+ipv6_lpm_128b_enable=1
+l3_alpm_enable=2
+lpm_scaling_enable=0
+l2xmsg_mode=1
+max_vp_lags=0
+miim_intr_enable=0
+module_64ports=1
+os=unix
+oversubscribe_mode=1
+ptp_bs_fref.0=25000000
+ptp_ts_pll_fref.0=25000000
+robust_hash_disable_egress_vlan.0=1
+robust_hash_disable_mpls.0=1
+robust_hash_disable_vlan.0=1
+tdma_timeout_usec.0=15000000
+tslam_timeout_usec.0=15000000
+pbmp_xport_xe.0=0x7ffffffffffffffffffffffffffffffffe
+phy_an_allow_pll_change_hg.0=0
+phy_an_c73_1.0=1
+phy_an_c73_2.0=1
+phy_an_c73_3.0=1
+phy_an_c73_4.0=1
+phy_an_c73_5.0=1
+phy_an_c73_6.0=1
+phy_an_c73_7.0=1
+phy_an_c73_8.0=1
+phy_an_c73_34.0=1
+phy_an_c73_35.0=1
+phy_an_c73_36.0=1
+phy_an_c73_37.0=1
+phy_an_c73_38.0=1
+phy_an_c73_39.0=1
+phy_an_c73_40.0=1
+phy_an_c73_41.0=1
+phy_an_c73_68.0=1
+phy_an_c73_69.0=1
+phy_an_c73_70.0=1
+phy_an_c73_71.0=1
+phy_an_c73_72.0=1
+phy_an_c73_73.0=1
+phy_an_c73_74.0=1
+phy_an_c73_75.0=1
+phy_an_c73_102.0=1
+phy_an_c73_103.0=1
+phy_an_c73_104.0=1
+phy_an_c73_105.0=1
+phy_an_c73_106.0=1
+phy_an_c73_107.0=1
+phy_an_c73_108.0=1
+phy_an_c73_109.0=1
+phy_an_fec_1.0=1
+phy_an_fec_2.0=1
+phy_an_fec_3.0=1
+phy_an_fec_4.0=1
+phy_an_fec_5.0=1
+phy_an_fec_6.0=1
+phy_an_fec_7.0=1
+phy_an_fec_8.0=1
+phy_an_fec_9.0=1
+phy_an_fec_10.0=1
+phy_an_fec_11.0=1
+phy_an_fec_12.0=1
+phy_an_fec_13.0=1
+phy_an_fec_14.0=1
+phy_an_fec_15.0=1
+phy_an_fec_16.0=1
+phy_an_fec_17.0=1
+phy_an_fec_18.0=1
+phy_an_fec_19.0=1
+phy_an_fec_20.0=1
+phy_an_fec_21.0=1
+phy_an_fec_22.0=1
+phy_an_fec_23.0=1
+phy_an_fec_24.0=1
+phy_an_fec_25.0=1
+phy_an_fec_26.0=1
+phy_an_fec_27.0=1
+phy_an_fec_28.0=1
+phy_an_fec_29.0=1
+phy_an_fec_30.0=1
+phy_an_fec_31.0=1
+phy_an_fec_32.0=1
+phy_an_fec_34.0=1
+phy_an_fec_38.0=1
+phy_an_fec_39.0=1
+phy_an_fec_40.0=1
+phy_an_fec_41.0=1
+phy_an_fec_42.0=1
+phy_an_fec_43.0=1
+phy_an_fec_44.0=1
+phy_an_fec_45.0=1
+phy_an_fec_46.0=1
+phy_an_fec_47.0=1
+phy_an_fec_48.0=1
+phy_an_fec_49.0=1
+phy_an_fec_50.0=1
+phy_an_fec_51.0=1
+phy_an_fec_52.0=1
+phy_an_fec_53.0=1
+phy_an_fec_54.0=1
+phy_an_fec_55.0=1
+phy_an_fec_56.0=1
+phy_an_fec_57.0=1
+phy_an_fec_58.0=1
+phy_an_fec_59.0=1
+phy_an_fec_60.0=1
+phy_an_fec_61.0=1
+phy_an_fec_62.0=1
+phy_an_fec_63.0=1
+phy_an_fec_64.0=1
+phy_an_fec_65.0=1
+phy_an_fec_68.0=1
+phy_an_fec_69.0=1
+phy_an_fec_70.0=1
+phy_an_fec_71.0=1
+phy_an_fec_72.0=1
+phy_an_fec_73.0=1
+phy_an_fec_74.0=1
+phy_an_fec_75.0=1
+phy_an_fec_76.0=1
+phy_an_fec_77.0=1
+phy_an_fec_78.0=1
+phy_an_fec_79.0=1
+phy_an_fec_80.0=1
+phy_an_fec_81.0=1
+phy_an_fec_82.0=1
+phy_an_fec_83.0=1
+phy_an_fec_84.0=1
+phy_an_fec_85.0=1
+phy_an_fec_86.0=1
+phy_an_fec_87.0=1
+phy_an_fec_88.0=1
+phy_an_fec_89.0=1
+phy_an_fec_90.0=1
+phy_an_fec_91.0=1
+phy_an_fec_92.0=1
+phy_an_fec_93.0=1
+phy_an_fec_94.0=1
+phy_an_fec_95.0=1
+phy_an_fec_96.0=1
+phy_an_fec_97.0=1
+phy_an_fec_98.0=1
+phy_an_fec_99.0=1
+phy_an_fec_102.0=1
+phy_an_fec_103.0=1
+phy_an_fec_104.0=1
+phy_an_fec_105.0=1
+phy_an_fec_106.0=1
+phy_an_fec_107.0=1
+phy_an_fec_108.0=1
+phy_an_fec_109.0=1
+phy_an_fec_110.0=1
+phy_an_fec_111.0=1
+phy_an_fec_112.0=1
+phy_an_fec_113.0=1
+phy_an_fec_114.0=1
+phy_an_fec_115.0=1
+phy_an_fec_116.0=1
+phy_an_fec_117.0=1
+phy_an_fec_118.0=1
+phy_an_fec_119.0=1
+phy_an_fec_120.0=1
+phy_an_fec_121.0=1
+phy_an_fec_122.0=1
+phy_an_fec_123.0=1
+phy_an_fec_124.0=1
+phy_an_fec_125.0=1
+phy_an_fec_126.0=1
+phy_an_fec_127.0=1
+phy_an_fec_128.0=1
+phy_an_fec_129.0=1
+phy_an_fec_130.0=1
+phy_an_fec_131.0=1
+phy_an_fec_132.0=1
+phy_an_fec_133.0=1
+phy_xaui_rx_polarity_flip_1.0=0x1
+phy_xaui_rx_polarity_flip_2.0=0x5
+phy_xaui_rx_polarity_flip_3.0=0x1
+phy_xaui_rx_polarity_flip_4.0=0x7
+phy_xaui_rx_polarity_flip_5.0=0xc
+phy_xaui_rx_polarity_flip_6.0=0xf
+phy_xaui_rx_polarity_flip_7.0=0xc
+phy_xaui_rx_polarity_flip_8.0=0xf
+phy_xaui_rx_polarity_flip_34.0=0x0
+phy_xaui_rx_polarity_flip_35.0=0x7
+phy_xaui_rx_polarity_flip_36.0=0x4
+phy_xaui_rx_polarity_flip_37.0=0x7
+phy_xaui_rx_polarity_flip_38.0=0x4
+phy_xaui_rx_polarity_flip_39.0=0x6
+phy_xaui_rx_polarity_flip_40.0=0x1
+phy_xaui_rx_polarity_flip_41.0=0x2
+phy_xaui_rx_polarity_flip_68.0=0xd
+phy_xaui_rx_polarity_flip_69.0=0x6
+phy_xaui_rx_polarity_flip_70.0=0x1
+phy_xaui_rx_polarity_flip_71.0=0x8
+phy_xaui_rx_polarity_flip_72.0=0x7
+phy_xaui_rx_polarity_flip_73.0=0xc
+phy_xaui_rx_polarity_flip_74.0=0x7
+phy_xaui_rx_polarity_flip_75.0=0x8
+phy_xaui_rx_polarity_flip_102.0=0xb
+phy_xaui_rx_polarity_flip_103.0=0xc
+phy_xaui_rx_polarity_flip_104.0=0x3
+phy_xaui_rx_polarity_flip_105.0=0xc
+phy_xaui_rx_polarity_flip_106.0=0xb
+phy_xaui_rx_polarity_flip_107.0=0x5
+phy_xaui_rx_polarity_flip_108.0=0x1
+phy_xaui_rx_polarity_flip_109.0=0x9
+phy_xaui_tx_polarity_flip_1.0=0x0
+phy_xaui_tx_polarity_flip_2.0=0xe
+phy_xaui_tx_polarity_flip_3.0=0x2
+phy_xaui_tx_polarity_flip_4.0=0xe
+phy_xaui_tx_polarity_flip_5.0=0xc
+phy_xaui_tx_polarity_flip_6.0=0xf
+phy_xaui_tx_polarity_flip_7.0=0xc
+phy_xaui_tx_polarity_flip_8.0=0xf
+phy_xaui_tx_polarity_flip_34.0=0x0
+phy_xaui_tx_polarity_flip_35.0=0xe
+phy_xaui_tx_polarity_flip_36.0=0x0
+phy_xaui_tx_polarity_flip_37.0=0xe
+phy_xaui_tx_polarity_flip_38.0=0xf
+phy_xaui_tx_polarity_flip_39.0=0xe
+phy_xaui_tx_polarity_flip_40.0=0x6
+phy_xaui_tx_polarity_flip_41.0=0xb
+phy_xaui_tx_polarity_flip_68.0=0x9
+phy_xaui_tx_polarity_flip_69.0=0xb
+phy_xaui_tx_polarity_flip_70.0=0xd
+phy_xaui_tx_polarity_flip_71.0=0x9
+phy_xaui_tx_polarity_flip_72.0=0x6
+phy_xaui_tx_polarity_flip_73.0=0xc
+phy_xaui_tx_polarity_flip_74.0=0x9
+phy_xaui_tx_polarity_flip_75.0=0x9
+phy_xaui_tx_polarity_flip_102.0=0x6
+phy_xaui_tx_polarity_flip_103.0=0xb
+phy_xaui_tx_polarity_flip_104.0=0x6
+phy_xaui_tx_polarity_flip_105.0=0xb
+phy_xaui_tx_polarity_flip_106.0=0x6
+phy_xaui_tx_polarity_flip_107.0=0xf
+phy_xaui_tx_polarity_flip_108.0=0x6
+phy_xaui_tx_polarity_flip_109.0=0xc
+portmap_1.0=1:40
+portmap_2.0=5:40
+portmap_3.0=9:40
+portmap_4.0=13:40
+portmap_5.0=17:40
+portmap_6.0=21:40
+portmap_7.0=25:40
+portmap_8.0=29:40
+portmap_34.0=33:40
+portmap_35.0=37:40
+portmap_36.0=41:40
+portmap_37.0=45:40
+portmap_38.0=49:40
+portmap_39.0=53:40
+portmap_40.0=57:40
+portmap_41.0=61:40
+portmap_68.0=65:40
+portmap_69.0=69:40
+portmap_70.0=73:40
+portmap_71.0=77:40
+portmap_72.0=81:40
+portmap_73.0=85:40
+portmap_74.0=89:40
+portmap_75.0=93:40
+portmap_102.0=97:40
+portmap_103.0=101:40
+portmap_104.0=105:40
+portmap_105.0=109:40
+portmap_106.0=113:40
+portmap_107.0=117:40
+portmap_108.0=121:40
+portmap_109.0=125:40
+port_phy_addr_1.0=0xff
+port_phy_addr_2.0=0xff
+port_phy_addr_3.0=0xff
+port_phy_addr_4.0=0xff
+port_phy_addr_5.0=0xff
+port_phy_addr_6.0=0xff
+port_phy_addr_7.0=0xff
+port_phy_addr_8.0=0xff
+port_phy_addr_34.0=0xff
+port_phy_addr_35.0=0xff
+port_phy_addr_36.0=0xff
+port_phy_addr_37.0=0xff
+port_phy_addr_38.0=0xff
+port_phy_addr_39.0=0xff
+port_phy_addr_40.0=0xff
+port_phy_addr_41.0=0xff
+port_phy_addr_68.0=0xff
+port_phy_addr_69.0=0xff
+port_phy_addr_70.0=0xff
+port_phy_addr_71.0=0xff
+port_phy_addr_72.0=0xff
+port_phy_addr_73.0=0xff
+port_phy_addr_74.0=0xff
+port_phy_addr_75.0=0xff
+port_phy_addr_102.0=0xff
+port_phy_addr_103.0=0xff
+port_phy_addr_104.0=0xff
+port_phy_addr_105.0=0xff
+port_phy_addr_106.0=0xff
+port_phy_addr_107.0=0xff
+port_phy_addr_108.0=0xff
+port_phy_addr_109.0=0xff
+xgxs_rx_lane_map_1.0=0x3210
+xgxs_rx_lane_map_2.0=0x3210
+xgxs_rx_lane_map_3.0=0x3210
+xgxs_rx_lane_map_4.0=0x3210
+xgxs_rx_lane_map_5.0=0x0123
+xgxs_rx_lane_map_6.0=0x2301
+xgxs_rx_lane_map_7.0=0x0123
+xgxs_rx_lane_map_8.0=0x2301
+xgxs_rx_lane_map_34.0=0x0123
+xgxs_rx_lane_map_35.0=0x0321
+xgxs_rx_lane_map_36.0=0x0321
+xgxs_rx_lane_map_37.0=0x0321
+xgxs_rx_lane_map_38.0=0x1230
+xgxs_rx_lane_map_39.0=0x2301
+xgxs_rx_lane_map_40.0=0x1230
+xgxs_rx_lane_map_41.0=0x2103
+xgxs_rx_lane_map_68.0=0x1230
+xgxs_rx_lane_map_69.0=0x2301
+xgxs_rx_lane_map_70.0=0x1230
+xgxs_rx_lane_map_71.0=0x2103
+xgxs_rx_lane_map_72.0=0x1230
+xgxs_rx_lane_map_73.0=0x2301
+xgxs_rx_lane_map_74.0=0x1230
+xgxs_rx_lane_map_75.0=0x2103
+xgxs_rx_lane_map_102.0=0x3210
+xgxs_rx_lane_map_103.0=0x3210
+xgxs_rx_lane_map_104.0=0x3210
+xgxs_rx_lane_map_105.0=0x3210
+xgxs_rx_lane_map_106.0=0x3210
+xgxs_rx_lane_map_107.0=0x3210
+xgxs_rx_lane_map_108.0=0x3210
+xgxs_rx_lane_map_109.0=0x3210
+xgxs_tx_lane_map_1.0=0x0321
+xgxs_tx_lane_map_2.0=0x2301
+xgxs_tx_lane_map_3.0=0x0321
+xgxs_tx_lane_map_4.0=0x2301
+xgxs_tx_lane_map_5.0=0x0123
+xgxs_tx_lane_map_6.0=0x0123
+xgxs_tx_lane_map_7.0=0x0123
+xgxs_tx_lane_map_8.0=0x0123
+xgxs_tx_lane_map_34.0=0x2301
+xgxs_tx_lane_map_35.0=0x0321
+xgxs_tx_lane_map_36.0=0x2301
+xgxs_tx_lane_map_37.0=0x0321
+xgxs_tx_lane_map_38.0=0x0123
+xgxs_tx_lane_map_39.0=0x1230
+xgxs_tx_lane_map_40.0=0x2301
+xgxs_tx_lane_map_41.0=0x1032
+xgxs_tx_lane_map_68.0=0x0123
+xgxs_tx_lane_map_69.0=0x1230
+xgxs_tx_lane_map_70.0=0x2301
+xgxs_tx_lane_map_71.0=0x1032
+xgxs_tx_lane_map_72.0=0x0123
+xgxs_tx_lane_map_73.0=0x1230
+xgxs_tx_lane_map_74.0=0x2301
+xgxs_tx_lane_map_75.0=0x1032
+xgxs_tx_lane_map_102.0=0x0321
+xgxs_tx_lane_map_103.0=0x2301
+xgxs_tx_lane_map_104.0=0x0321
+xgxs_tx_lane_map_105.0=0x2301
+xgxs_tx_lane_map_106.0=0x0321
+xgxs_tx_lane_map_107.0=0x2301
+xgxs_tx_lane_map_108.0=0x0321
+xgxs_tx_lane_map_109.0=0x2301
+serdes_driver_current_1=0x4
+serdes_preemphasis_1=0x145c00
+serdes_driver_current_2=0x4
+serdes_preemphasis_2=0x145c00
+serdes_driver_current_3=0x8
+serdes_preemphasis_3=0x185800
+serdes_driver_current_4=0x8
+serdes_preemphasis_4=0x185800
+serdes_driver_current_5=0x8
+serdes_preemphasis_5=0x185800
+serdes_driver_current_6=0x8
+serdes_preemphasis_6=0x185800
+serdes_driver_current_7=0xf
+serdes_preemphasis_7=0x205000
+serdes_driver_current_8=0xf
+serdes_preemphasis_8=0x205000
+serdes_driver_current_34=0xf
+serdes_preemphasis_34=0x205000
+serdes_driver_current_35=0xf
+serdes_preemphasis_35=0x205000
+serdes_driver_current_36=0xf
+serdes_preemphasis_36=0x205000
+serdes_driver_current_37=0xf
+serdes_preemphasis_37=0x205000
+serdes_driver_current_38=0x8
+serdes_preemphasis_38=0x185800
+serdes_driver_current_39=0x8
+serdes_preemphasis_39=0x185800
+serdes_driver_current_40=0x8
+serdes_preemphasis_40=0x185800
+serdes_driver_current_41=0x8
+serdes_preemphasis_41=0x185800
+serdes_driver_current_68=0x4
+serdes_preemphasis_68=0x145c00
+serdes_driver_current_69=0x4
+serdes_preemphasis_69=0x145c00
+serdes_driver_current_70=0x4
+serdes_preemphasis_70=0x145c00
+serdes_driver_current_71=0x4
+serdes_preemphasis_71=0x145c00
+serdes_driver_current_72=0x4
+serdes_preemphasis_72=0x145c00
+serdes_driver_current_73=0x4
+serdes_preemphasis_73=0x145c00
+serdes_driver_current_74=0x4
+serdes_preemphasis_74=0x145c00
+serdes_driver_current_75=0x4
+serdes_preemphasis_75=0x145c00
+serdes_driver_current_102=0x4
+serdes_preemphasis_102=0x145c00
+serdes_driver_current_103=0x4
+serdes_preemphasis_103=0x145c00
+serdes_driver_current_104=0x4
+serdes_preemphasis_104=0x145c00
+serdes_driver_current_105=0x4
+serdes_preemphasis_105=0x145c00
+serdes_driver_current_106=0x4
+serdes_preemphasis_106=0x145c00
+serdes_driver_current_107=0x4
+serdes_preemphasis_107=0x145c00
+serdes_driver_current_108=0x4
+serdes_preemphasis_108=0x145c00
+serdes_driver_current_109=0x4
+serdes_preemphasis_109=0x145c00
+
+mmu_init_config="MSFT-TH-Tier1"
diff --git a/device/arista/x86_64-arista_7170_64c/Arista-7170-64C/port_config.ini b/device/arista/x86_64-arista_7170_64c/Arista-7170-64C/port_config.ini
new file mode 100644
index 000000000000..1020ea1382c2
--- /dev/null
+++ b/device/arista/x86_64-arista_7170_64c/Arista-7170-64C/port_config.ini
@@ -0,0 +1,67 @@
+# name lanes alias port
+Ethernet0 444,445,446,447 Ethernet1/1 1
+Ethernet4 52,53,54,55 Ethernet2/1 2
+Ethernet8 436,437,438,439 Ethernet3/1 3
+Ethernet12 432,433,434,435 Ethernet4/1 4
+Ethernet16 412,413,414,415 Ethernet5/1 5
+Ethernet20 424,425,426,427 Ethernet6/1 6
+Ethernet24 404,405,406,407 Ethernet7/1 7
+Ethernet28 0,1,2,3 Ethernet8/1 8
+Ethernet32 12,13,14,15 Ethernet9/1 9
+Ethernet36 8,9,10,11 Ethernet10/1 10
+Ethernet40 24,25,26,27 Ethernet11/1 11
+Ethernet44 32,33,34,35 Ethernet12/1 12
+Ethernet48 44,45,46,47 Ethernet13/1 13
+Ethernet52 40,41,42,43 Ethernet14/1 14
+Ethernet56 396,397,398,399 Ethernet15/1 15
+Ethernet60 392,393,394,395 Ethernet16/1 16
+Ethernet64 260,261,262,263 Ethernet17/1 17
+Ethernet68 384,385,386,387 Ethernet18/1 18
+Ethernet72 180,181,182,183 Ethernet19/1 19
+Ethernet76 172,173,174,175 Ethernet20/1 20
+Ethernet80 160,161,162,163 Ethernet21/1 21
+Ethernet84 164,165,166,167 Ethernet22/1 22
+Ethernet88 148,149,150,151 Ethernet23/1 23
+Ethernet92 140,141,142,143 Ethernet24/1 24
+Ethernet96 272,273,274,275 Ethernet25/1 25
+Ethernet100 132,133,134,135 Ethernet26/1 26
+Ethernet104 280,281,282,283 Ethernet27/1 27
+Ethernet108 284,285,286,287 Ethernet28/1 28
+Ethernet112 304,305,306,307 Ethernet29/1 29
+Ethernet116 292,293,294,295 Ethernet30/1 30
+Ethernet120 312,313,314,315 Ethernet31/1 31
+Ethernet124 316,317,318,319 Ethernet32/1 32
+Ethernet128 56,57,58,59 Ethernet33/1 33
+Ethernet132 60,61,62,63 Ethernet34/1 34
+Ethernet136 428,429,430,431 Ethernet35/1 35
+Ethernet140 440,441,442,443 Ethernet36/1 36
+Ethernet144 420,421,422,423 Ethernet37/1 37
+Ethernet148 416,417,418,419 Ethernet38/1 38
+Ethernet152 128,129,130,131 Ethernet39/1 39
+Ethernet156 408,409,410,411 Ethernet40/1 40
+Ethernet160 4,5,6,7 Ethernet41/1 41
+Ethernet164 16,17,18,19 Ethernet42/1 42
+Ethernet168 28,29,30,31 Ethernet43/1 43
+Ethernet172 20,21,22,23 Ethernet44/1 44
+Ethernet176 36,37,38,39 Ethernet45/1 45
+Ethernet180 48,49,50,51 Ethernet46/1 46
+Ethernet184 388,389,390,391 Ethernet47/1 47
+Ethernet188 400,401,402,403 Ethernet48/1 48
+Ethernet192 256,257,258,259 Ethernet49/1 49
+Ethernet196 264,265,266,267 Ethernet50/1 50
+Ethernet200 176,177,178,179 Ethernet51/1 51
+Ethernet204 184,185,186,187 Ethernet52/1 52
+Ethernet208 168,169,170,171 Ethernet53/1 53
+Ethernet212 156,157,158,159 Ethernet54/1 54
+Ethernet216 144,145,146,147 Ethernet55/1 55
+Ethernet220 152,153,154,155 Ethernet56/1 56
+Ethernet224 136,137,138,139 Ethernet57/1 57
+Ethernet228 268,269,270,271 Ethernet58/1 58
+Ethernet232 288,289,290,291 Ethernet59/1 59
+Ethernet236 276,277,278,279 Ethernet60/1 60
+Ethernet240 296,297,298,299 Ethernet61/1 61
+Ethernet244 300,301,302,303 Ethernet62/1 62
+Ethernet248 188,189,190,191 Ethernet63/1 63
+Ethernet252 308,309,310,311 Ethernet64/1 64
+Ethernet256 64 Ethernet65 65
+Ethernet260 65 Ethernet66 66
diff --git a/device/arista/x86_64-arista_7170_64c/fancontrol b/device/arista/x86_64-arista_7170_64c/fancontrol
new file mode 100644
index 000000000000..639185a7119f
--- /dev/null
+++ b/device/arista/x86_64-arista_7170_64c/fancontrol
@@ -0,0 +1,10 @@
+INTERVAL=5
+DEVPATH=hwmon1=devices/pci0000:00/0000:00:1c.0/0000:06:00.0/i2c-8/8-004c hwmon3=devices/pci0000:ff/0000:ff:0b.3/i2c-93/93-0060
+DEVNAME=hwmon1=max6658 hwmon3=rook_cpld
+FCTEMPS=hwmon3/pwm4=hwmon1/temp1_input hwmon3/pwm3=hwmon1/temp1_input hwmon3/pwm2=hwmon1/temp1_input hwmon3/pwm1=hwmon1/temp1_input
+FCFANS=hwmon3/pwm4=hwmon3/fan4_input hwmon3/pwm3=hwmon3/fan3_input hwmon3/pwm2=hwmon3/fan2_input hwmon3/pwm1=hwmon3/fan1_input
+MINTEMP=hwmon3/pwm4=50 hwmon3/pwm3=50 hwmon3/pwm2=50 hwmon3/pwm1=50
+MINPWM=hwmon3/pwm4=128 hwmon3/pwm3=128 hwmon3/pwm2=128 hwmon3/pwm1=128
+MAXTEMP=hwmon3/pwm4=60 hwmon3/pwm3=60 hwmon3/pwm2=60 hwmon3/pwm1=60
+MINSTART=hwmon3/pwm4=128 hwmon3/pwm3=128 hwmon3/pwm2=128 hwmon3/pwm1=128
+MINSTOP=hwmon3/pwm4=128 hwmon3/pwm3=128 hwmon3/pwm2=128 hwmon3/pwm1=128
diff --git a/device/arista/x86_64-arista_7170_64c/minigraph.xml b/device/arista/x86_64-arista_7170_64c/minigraph.xml
new file mode 100644
index 000000000000..2b2586cf7596
--- /dev/null
+++ b/device/arista/x86_64-arista_7170_64c/minigraph.xml
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ HostIP
+ Loopback0
+
+ 100.1.0.1/32
+
+ 100.1.0.1/32
+
+
+
+
+
+
+ ManagementIP1
+ Management0
+
+ 172.24.37.166/18
+
+ 172.24.37.166/18
+
+
+
+
+
+
+ sonic
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ sonic
+ Arista-7170-64C
+
+
+
+
+
+
+
+ sonic
+ Arista-7170-64C
+
diff --git a/device/arista/x86_64-arista_7170_64c/plugins/eeprom.py b/device/arista/x86_64-arista_7170_64c/plugins/eeprom.py
new file mode 100644
index 000000000000..d439e442ee33
--- /dev/null
+++ b/device/arista/x86_64-arista_7170_64c/plugins/eeprom.py
@@ -0,0 +1,8 @@
+#!/usr/bin/env python
+
+try:
+ import arista.utils.sonic_eeprom as arista_eeprom
+except ImportError as e:
+ raise ImportError("%s - required module not found" % str(e))
+
+board = arista_eeprom.getTlvInfoDecoder()
diff --git a/device/arista/x86_64-arista_7170_64c/plugins/led_control.py b/device/arista/x86_64-arista_7170_64c/plugins/led_control.py
new file mode 100644
index 000000000000..fae2d504beb6
--- /dev/null
+++ b/device/arista/x86_64-arista_7170_64c/plugins/led_control.py
@@ -0,0 +1,8 @@
+#!/usr/bin/env python
+
+try:
+ import arista.utils.sonic_leds as arista_leds
+except ImportError as e:
+ raise ImportError("%s - required module not found" % str(e))
+
+LedControl = arista_leds.getLedControl()
diff --git a/device/arista/x86_64-arista_7170_64c/plugins/psuutil.py b/device/arista/x86_64-arista_7170_64c/plugins/psuutil.py
new file mode 100644
index 000000000000..1a8682ae3c67
--- /dev/null
+++ b/device/arista/x86_64-arista_7170_64c/plugins/psuutil.py
@@ -0,0 +1,12 @@
+# psuutil.py
+#
+# Platform-specific PSU interface for SONiC
+#
+
+try:
+ import arista.utils.sonic_psu as arista_psuutil
+except ImportError as e:
+ raise ImportError("%s - required module not found" % str(e))
+
+
+PsuUtil = arista_psuutil.getPsuUtil()
diff --git a/device/arista/x86_64-arista_7170_64c/plugins/sfputil.py b/device/arista/x86_64-arista_7170_64c/plugins/sfputil.py
new file mode 100644
index 000000000000..1357ad786434
--- /dev/null
+++ b/device/arista/x86_64-arista_7170_64c/plugins/sfputil.py
@@ -0,0 +1,8 @@
+#!/usr/bin/env python
+
+try:
+ import arista.utils.sonic_sfputil as arista_sfputil
+except ImportError as e:
+ raise ImportError("%s - required module not found" % str(e))
+
+SfpUtil = arista_sfputil.getSfpUtil()
diff --git a/device/arista/x86_64-arista_7170_64c/sensors.conf b/device/arista/x86_64-arista_7170_64c/sensors.conf
new file mode 100644
index 000000000000..196769f95c0c
--- /dev/null
+++ b/device/arista/x86_64-arista_7170_64c/sensors.conf
@@ -0,0 +1,53 @@
+# libsensors configuration file for DCS-7260CX3-64
+# ------------------------------------------------
+
+bus "i2c-6" "SCD 0000:06:00.0 SMBus master 0 bus 5"
+bus "i2c-7" "SCD 0000:06:00.0 SMBus master 0 bus 6"
+bus "i2c-8" "SCD 0000:06:00.0 SMBus master 0 bus 7"
+bus "i2c-81" "SCD 0000:ff:0b.3 SMBus master 0 bus 0"
+bus "i2c-93" "SCD 0000:ff:0b.3 SMBus master 3 bus 0"
+bus "i2c-96" "SCD 0000:ff:0b.3 SMBus master 3 bus 3"
+
+chip "max6658-i2c-8-4c"
+ label temp1 "Temp sensor near ASIC"
+
+ set temp1_max 100
+ set temp1_crit 110
+
+ ignore temp2
+
+chip "dps1900-i2c-6-58"
+ label temp1 "PSU1 primary hotspot temp"
+ label temp2 "PSU1 inlet temp"
+ label temp3 "PSU1 exhaust temp"
+
+ # setting maximum and critical thresholds is not supported for this psu
+ # fault and warning limits defined internally by hardware
+
+ ignore fan2
+ ignore fan3
+
+chip "dps1900-i2c-7-58"
+ label temp1 "PSU2 primary hotspot temp"
+ label temp2 "PSU2 inlet temp"
+ label temp3 "PSU2 exhaust temp"
+
+ # setting maximum and critical thresholds is not supported for this psu
+ # fault and warning limits defined internally by hardware
+
+ ignore fan2
+ ignore fan3
+
+chip "max6658-i2c-81-4c"
+ label temp1 "Rear air temp1"
+ label temp2 "Rear air temp2"
+
+ set temp1_max 50
+ set temp1_crit 60
+ set temp2_max 50
+ set temp2_crit 60
+
+chip "lm73-i2c-96-48"
+ label temp1 "Front air temp"
+
+ set temp1_max 65
diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/qos.json b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/qos.json.j2
similarity index 79%
rename from device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/qos.json
rename to device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/qos.json.j2
index 2aa5a902448b..06efa3591771 100644
--- a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/qos.json
+++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/qos.json.j2
@@ -127,35 +127,23 @@
}
},
"WRED_PROFILE": {
- "AZURE_LOSSY" : {
- "wred_green_enable":"true",
- "wred_yellow_enable":"true",
- "ecn":"ecn_all",
- "red_max_threshold":"512000",
- "red_min_threshold":"512000",
- "yellow_max_threshold":"512000",
- "yellow_min_threshold":"512000",
- "green_max_threshold": "184320",
- "green_min_threshold": "184320"
- },
"AZURE_LOSSLESS" : {
"wred_green_enable":"true",
"wred_yellow_enable":"true",
+ "wred_red_enable":"true",
"ecn":"ecn_all",
- "red_max_threshold":"512000",
- "red_min_threshold":"512000",
- "yellow_max_threshold":"512000",
- "yellow_min_threshold":"512000",
- "green_max_threshold": "184320",
- "green_min_threshold": "184320"
+ "red_max_threshold":"312000",
+ "red_min_threshold":"104000",
+ "yellow_max_threshold":"312000",
+ "yellow_min_threshold":"104000",
+ "green_max_threshold": "312000",
+ "green_min_threshold": "104000"
}
},
"QUEUE": {
- "Ethernet0,Ethernet2,Ethernet4,Ethernet6,Ethernet8,Ethernet10,Ethernet12,Ethernet14,Ethernet16,Ethernet18,Ethernet20,Ethernet22,Ethernet24,Ethernet26,Ethernet28,Ethernet30,Ethernet32,Ethernet34,Ethernet36,Ethernet38,Ethernet40,Ethernet42,Ethernet44,Ethernet46,Ethernet48,Ethernet52,Ethernet56,Ethernet60,Ethernet64,Ethernet68,Ethernet72,Ethernet76,Ethernet80,Ethernet82,Ethernet84,Ethernet86,Ethernet88,Ethernet90,Ethernet92,Ethernet94,Ethernet96,Ethernet98,Ethernet100,Ethernet102,Ethernet104,Ethernet106,Ethernet108,Ethernet110,Ethernet112,Ethernet114,Ethernet116,Ethernet118,Ethernet120,Ethernet122,Ethernet124,Ethernet126,Ethernet128,Ethernet130,Ethernet132,Ethernet134,Ethernet136,Ethernet138,Ethernet140,Ethernet142,Ethernet144,Ethernet146,Ethernet148,Ethernet150,Ethernet152,Ethernet154,Ethernet156,Ethernet158,Ethernet160,Ethernet162,Ethernet164,Ethernet166,Ethernet168,Ethernet170,Ethernet172,Ethernet174,Ethernet176,Ethernet178,Ethernet180,Ethernet182,Ethernet184,Ethernet186,Ethernet188,Ethernet190,Ethernet192,Ethernet194,Ethernet196,Ethernet198,Ethernet200,Ethernet202,Ethernet204,Ethernet206,Ethernet208,Ethernet210,Ethernet212,Ethernet214,Ethernet216,Ethernet218,Ethernet220,Ethernet222,Ethernet224,Ethernet226,Ethernet228,Ethernet230,Ethernet232,Ethernet234,Ethernet236,Ethernet238,Ethernet240,Ethernet242,Ethernet244,Ethernet246,Ethernet248,Ethernet250,Ethernet252,Ethernet254|0-1" : {
- "wred_profile" : "[WRED_PROFILE|AZURE_LOSSY]"
- },
"Ethernet0,Ethernet2,Ethernet4,Ethernet6,Ethernet8,Ethernet10,Ethernet12,Ethernet14,Ethernet16,Ethernet18,Ethernet20,Ethernet22,Ethernet24,Ethernet26,Ethernet28,Ethernet30,Ethernet32,Ethernet34,Ethernet36,Ethernet38,Ethernet40,Ethernet42,Ethernet44,Ethernet46,Ethernet48,Ethernet52,Ethernet56,Ethernet60,Ethernet64,Ethernet68,Ethernet72,Ethernet76,Ethernet80,Ethernet82,Ethernet84,Ethernet86,Ethernet88,Ethernet90,Ethernet92,Ethernet94,Ethernet96,Ethernet98,Ethernet100,Ethernet102,Ethernet104,Ethernet106,Ethernet108,Ethernet110,Ethernet112,Ethernet114,Ethernet116,Ethernet118,Ethernet120,Ethernet122,Ethernet124,Ethernet126,Ethernet128,Ethernet130,Ethernet132,Ethernet134,Ethernet136,Ethernet138,Ethernet140,Ethernet142,Ethernet144,Ethernet146,Ethernet148,Ethernet150,Ethernet152,Ethernet154,Ethernet156,Ethernet158,Ethernet160,Ethernet162,Ethernet164,Ethernet166,Ethernet168,Ethernet170,Ethernet172,Ethernet174,Ethernet176,Ethernet178,Ethernet180,Ethernet182,Ethernet184,Ethernet186,Ethernet188,Ethernet190,Ethernet192,Ethernet194,Ethernet196,Ethernet198,Ethernet200,Ethernet202,Ethernet204,Ethernet206,Ethernet208,Ethernet210,Ethernet212,Ethernet214,Ethernet216,Ethernet218,Ethernet220,Ethernet222,Ethernet224,Ethernet226,Ethernet228,Ethernet230,Ethernet232,Ethernet234,Ethernet236,Ethernet238,Ethernet240,Ethernet242,Ethernet244,Ethernet246,Ethernet248,Ethernet250,Ethernet252,Ethernet254|3-4" : {
- "scheduler" : "[SCHEDULER|scheduler.0]"
+ "scheduler" : "[SCHEDULER|scheduler.0]",
+ "wred_profile" : "[WRED_PROFILE|AZURE_LOSSLESS]"
},
"Ethernet0,Ethernet2,Ethernet4,Ethernet6,Ethernet8,Ethernet10,Ethernet12,Ethernet14,Ethernet16,Ethernet18,Ethernet20,Ethernet22,Ethernet24,Ethernet26,Ethernet28,Ethernet30,Ethernet32,Ethernet34,Ethernet36,Ethernet38,Ethernet40,Ethernet42,Ethernet44,Ethernet46,Ethernet48,Ethernet52,Ethernet56,Ethernet60,Ethernet64,Ethernet68,Ethernet72,Ethernet76,Ethernet80,Ethernet82,Ethernet84,Ethernet86,Ethernet88,Ethernet90,Ethernet92,Ethernet94,Ethernet96,Ethernet98,Ethernet100,Ethernet102,Ethernet104,Ethernet106,Ethernet108,Ethernet110,Ethernet112,Ethernet114,Ethernet116,Ethernet118,Ethernet120,Ethernet122,Ethernet124,Ethernet126,Ethernet128,Ethernet130,Ethernet132,Ethernet134,Ethernet136,Ethernet138,Ethernet140,Ethernet142,Ethernet144,Ethernet146,Ethernet148,Ethernet150,Ethernet152,Ethernet154,Ethernet156,Ethernet158,Ethernet160,Ethernet162,Ethernet164,Ethernet166,Ethernet168,Ethernet170,Ethernet172,Ethernet174,Ethernet176,Ethernet178,Ethernet180,Ethernet182,Ethernet184,Ethernet186,Ethernet188,Ethernet190,Ethernet192,Ethernet194,Ethernet196,Ethernet198,Ethernet200,Ethernet202,Ethernet204,Ethernet206,Ethernet208,Ethernet210,Ethernet212,Ethernet214,Ethernet216,Ethernet218,Ethernet220,Ethernet222,Ethernet224,Ethernet226,Ethernet228,Ethernet230,Ethernet232,Ethernet234,Ethernet236,Ethernet238,Ethernet240,Ethernet242,Ethernet244,Ethernet246,Ethernet248,Ethernet250,Ethernet252,Ethernet254|0" : {
"scheduler" : "[SCHEDULER|scheduler.1]"
diff --git a/device/celestica/x86_64-cel_seastone-r0/Seastone-DX010-10-50/port_config.ini b/device/celestica/x86_64-cel_seastone-r0/Seastone-DX010-10-50/port_config.ini
index 16b89088aab8..383cc5a6a7ab 100644
--- a/device/celestica/x86_64-cel_seastone-r0/Seastone-DX010-10-50/port_config.ini
+++ b/device/celestica/x86_64-cel_seastone-r0/Seastone-DX010-10-50/port_config.ini
@@ -1,113 +1,113 @@
-# name lanes alias
-Ethernet0 65 Eth1/1
-Ethernet1 66 Eth1/2
-Ethernet2 67 Eth1/3
-Ethernet3 68 Eth1/4
-Ethernet4 69 Eth2/1
-Ethernet5 70 Eth2/2
-Ethernet6 71 Eth2/3
-Ethernet7 72 Eth2/4
-Ethernet8 73 Eth3/1
-Ethernet9 74 Eth3/2
-Ethernet10 75 Eth3/3
-Ethernet11 76 Eth3/4
-Ethernet12 77 Eth4/1
-Ethernet13 78 Eth4/2
-Ethernet14 79 Eth4/3
-Ethernet15 80 Eth4/4
-Ethernet16 33 Eth5/1
-Ethernet17 34 Eth5/2
-Ethernet18 35 Eth5/3
-Ethernet19 36 Eth5/4
-Ethernet20 37 Eth6/1
-Ethernet21 38 Eth6/2
-Ethernet22 39 Eth6/3
-Ethernet23 40 Eth6/4
-Ethernet24 41 Eth7/1
-Ethernet25 42 Eth7/2
-Ethernet26 43 Eth7/3
-Ethernet27 44 Eth7/4
-Ethernet28 45 Eth8/1
-Ethernet29 46 Eth8/2
-Ethernet30 47 Eth8/3
-Ethernet31 48 Eth8/4
-Ethernet32 49 Eth9/1
-Ethernet33 50 Eth9/2
-Ethernet34 51 Eth9/3
-Ethernet35 52 Eth9/4
-Ethernet36 53 Eth10/1
-Ethernet37 54 Eth10/2
-Ethernet38 55 Eth10/3
-Ethernet39 56 Eth10/4
-Ethernet40 57 Eth11/1
-Ethernet41 58 Eth11/2
-Ethernet42 59 Eth11/3
-Ethernet43 60 Eth11/4
-Ethernet44 61 Eth12/1
-Ethernet45 62 Eth12/2
-Ethernet46 63 Eth12/3
-Ethernet47 64 Eth12/4
-Ethernet48 81 Eth13/1
-Ethernet49 82 Eth13/2
-Ethernet50 83 Eth13/3
-Ethernet51 84 Eth13/4
-Ethernet52 85 Eth14/1
-Ethernet53 86 Eth14/2
-Ethernet54 87 Eth14/3
-Ethernet55 88 Eth14/4
-Ethernet56 89 Eth15/1
-Ethernet57 90 Eth15/2
-Ethernet58 91 Eth15/3
-Ethernet59 92 Eth15/4
-Ethernet60 93 Eth16/1
-Ethernet61 94 Eth16/2
-Ethernet62 95 Eth16/3
-Ethernet63 96 Eth16/4
-Ethernet64 97 Eth17/1
-Ethernet65 98 Eth17/2
-Ethernet66 99 Eth17/3
-Ethernet67 100 Eth17/4
-Ethernet68 101 Eth18/1
-Ethernet69 102 Eth18/2
-Ethernet70 103 Eth18/3
-Ethernet71 104 Eth18/4
-Ethernet72 105 Eth19/1
-Ethernet73 106 Eth19/2
-Ethernet74 107 Eth19/3
-Ethernet75 108 Eth19/4
-Ethernet76 109 Eth20/1
-Ethernet77 110 Eth20/2
-Ethernet78 111 Eth20/3
-Ethernet79 112 Eth20/4
-Ethernet80 1 Eth21/1
-Ethernet81 2 Eth21/2
-Ethernet82 3 Eth21/3
-Ethernet83 4 Eth21/4
-Ethernet84 5 Eth22/1
-Ethernet85 6 Eth22/2
-Ethernet86 7 Eth22/3
-Ethernet87 8 Eth22/4
-Ethernet88 9 Eth23/1
-Ethernet89 10 Eth23/2
-Ethernet90 11 Eth23/3
-Ethernet91 12 Eth23/4
-Ethernet92 13 Eth24/1
-Ethernet93 14 Eth24/2
-Ethernet94 15 Eth24/3
-Ethernet95 16 Eth24/4
-Ethernet96 17,18 Eth25/1
-Ethernet98 19,20 Eth25/2
-Ethernet100 21,22 Eth26/1
-Ethernet102 23,24 Eth26/2
-Ethernet104 25,26 Eth27/1
-Ethernet106 27,28 Eth27/2
-Ethernet108 29,30 Eth28/1
-Ethernet110 31,32 Eth28/2
-Ethernet112 113,114 Eth29/1
-Ethernet114 115,116 Eth29/2
-Ethernet116 117,118 Eth30/1
-Ethernet118 119,120 Eth30/2
-Ethernet120 121,122 Eth31/1
-Ethernet122 123,124 Eth31/2
-Ethernet124 125,126 Eth32/1
-Ethernet126 127,128 Eth32/2
+# name lanes alias index speed
+Ethernet0 65 Eth1/1 0 10000
+Ethernet1 66 Eth1/2 0 10000
+Ethernet2 67 Eth1/3 0 10000
+Ethernet3 68 Eth1/4 0 10000
+Ethernet4 69 Eth2/1 1 10000
+Ethernet5 70 Eth2/2 1 10000
+Ethernet6 71 Eth2/3 1 10000
+Ethernet7 72 Eth2/4 1 10000
+Ethernet8 73 Eth3/1 2 10000
+Ethernet9 74 Eth3/2 2 10000
+Ethernet10 75 Eth3/3 2 10000
+Ethernet11 76 Eth3/4 2 10000
+Ethernet12 77 Eth4/1 3 10000
+Ethernet13 78 Eth4/2 3 10000
+Ethernet14 79 Eth4/3 3 10000
+Ethernet15 80 Eth4/4 3 10000
+Ethernet16 33 Eth5/1 4 10000
+Ethernet17 34 Eth5/2 4 10000
+Ethernet18 35 Eth5/3 4 10000
+Ethernet19 36 Eth5/4 4 10000
+Ethernet20 37 Eth6/1 5 10000
+Ethernet21 38 Eth6/2 5 10000
+Ethernet22 39 Eth6/3 5 10000
+Ethernet23 40 Eth6/4 5 10000
+Ethernet24 41 Eth7/1 6 10000
+Ethernet25 42 Eth7/2 6 10000
+Ethernet26 43 Eth7/3 6 10000
+Ethernet27 44 Eth7/4 6 10000
+Ethernet28 45 Eth8/1 7 10000
+Ethernet29 46 Eth8/2 7 10000
+Ethernet30 47 Eth8/3 7 10000
+Ethernet31 48 Eth8/4 7 10000
+Ethernet32 49 Eth9/1 8 10000
+Ethernet33 50 Eth9/2 8 10000
+Ethernet34 51 Eth9/3 8 10000
+Ethernet35 52 Eth9/4 8 10000
+Ethernet36 53 Eth10/1 9 10000
+Ethernet37 54 Eth10/2 9 10000
+Ethernet38 55 Eth10/3 9 10000
+Ethernet39 56 Eth10/4 9 10000
+Ethernet40 57 Eth11/1 10 10000
+Ethernet41 58 Eth11/2 10 10000
+Ethernet42 59 Eth11/3 10 10000
+Ethernet43 60 Eth11/4 10 10000
+Ethernet44 61 Eth12/1 11 10000
+Ethernet45 62 Eth12/2 11 10000
+Ethernet46 63 Eth12/3 11 10000
+Ethernet47 64 Eth12/4 11 10000
+Ethernet48 81 Eth13/1 12 10000
+Ethernet49 82 Eth13/2 12 10000
+Ethernet50 83 Eth13/3 12 10000
+Ethernet51 84 Eth13/4 12 10000
+Ethernet52 85 Eth14/1 13 10000
+Ethernet53 86 Eth14/2 13 10000
+Ethernet54 87 Eth14/3 13 10000
+Ethernet55 88 Eth14/4 13 10000
+Ethernet56 89 Eth15/1 14 10000
+Ethernet57 90 Eth15/2 14 10000
+Ethernet58 91 Eth15/3 14 10000
+Ethernet59 92 Eth15/4 14 10000
+Ethernet60 93 Eth16/1 15 10000
+Ethernet61 94 Eth16/2 15 10000
+Ethernet62 95 Eth16/3 15 10000
+Ethernet63 96 Eth16/4 15 10000
+Ethernet64 97 Eth17/1 16 10000
+Ethernet65 98 Eth17/2 16 10000
+Ethernet66 99 Eth17/3 16 10000
+Ethernet67 100 Eth17/4 16 10000
+Ethernet68 101 Eth18/1 17 10000
+Ethernet69 102 Eth18/2 17 10000
+Ethernet70 103 Eth18/3 17 10000
+Ethernet71 104 Eth18/4 17 10000
+Ethernet72 105 Eth19/1 18 10000
+Ethernet73 106 Eth19/2 18 10000
+Ethernet74 107 Eth19/3 18 10000
+Ethernet75 108 Eth19/4 18 10000
+Ethernet76 109 Eth20/1 19 10000
+Ethernet77 110 Eth20/2 19 10000
+Ethernet78 111 Eth20/3 19 10000
+Ethernet79 112 Eth20/4 19 10000
+Ethernet80 1 Eth21/1 20 10000
+Ethernet81 2 Eth21/2 20 10000
+Ethernet82 3 Eth21/3 20 10000
+Ethernet83 4 Eth21/4 20 10000
+Ethernet84 5 Eth22/1 21 10000
+Ethernet85 6 Eth22/2 21 10000
+Ethernet86 7 Eth22/3 21 10000
+Ethernet87 8 Eth22/4 21 10000
+Ethernet88 9 Eth23/1 22 10000
+Ethernet89 10 Eth23/2 22 10000
+Ethernet90 11 Eth23/3 22 10000
+Ethernet91 12 Eth23/4 22 10000
+Ethernet92 13 Eth24/1 23 10000
+Ethernet93 14 Eth24/2 23 10000
+Ethernet94 15 Eth24/3 23 10000
+Ethernet95 16 Eth24/4 23 10000
+Ethernet96 17,18 Eth25/1 24 50000
+Ethernet98 19,20 Eth25/2 24 50000
+Ethernet100 21,22 Eth26/1 25 50000
+Ethernet102 23,24 Eth26/2 25 50000
+Ethernet104 25,26 Eth27/1 26 50000
+Ethernet106 27,28 Eth27/2 26 50000
+Ethernet108 29,30 Eth28/1 27 50000
+Ethernet110 31,32 Eth28/2 27 50000
+Ethernet112 113,114 Eth29/1 28 50000
+Ethernet114 115,116 Eth29/2 28 50000
+Ethernet116 117,118 Eth30/1 29 50000
+Ethernet118 119,120 Eth30/2 29 50000
+Ethernet120 121,122 Eth31/1 30 50000
+Ethernet122 123,124 Eth31/2 30 50000
+Ethernet124 125,126 Eth32/1 31 50000
+Ethernet126 127,128 Eth32/2 31 50000
diff --git a/device/celestica/x86_64-cel_seastone-r0/Seastone-DX010-50/port_config.ini b/device/celestica/x86_64-cel_seastone-r0/Seastone-DX010-50/port_config.ini
index 70553360da28..3e2a0ebeafd5 100644
--- a/device/celestica/x86_64-cel_seastone-r0/Seastone-DX010-50/port_config.ini
+++ b/device/celestica/x86_64-cel_seastone-r0/Seastone-DX010-50/port_config.ini
@@ -1,65 +1,65 @@
-# name lanes alias
-Ethernet0 65,66 Eth1/1
-Ethernet2 67,68 Eth1/2
-Ethernet4 69,70 Eth2/1
-Ethernet6 71,72 Eth2/2
-Ethernet8 73,74 Eth3/1
-Ethernet10 75,76 Eth3/2
-Ethernet12 77,78 Eth4/1
-Ethernet14 79,80 Eth4/2
-Ethernet16 33,34 Eth5/1
-Ethernet18 35,36 Eth5/2
-Ethernet20 37,38 Eth6/1
-Ethernet22 39,40 Eth6/2
-Ethernet24 41,42 Eth7/1
-Ethernet26 43,44 Eth7/2
-Ethernet28 45,46 Eth8/1
-Ethernet30 47,48 Eth8/2
-Ethernet32 49,50 Eth9/1
-Ethernet34 51,52 Eth9/2
-Ethernet36 53,54 Eth10/1
-Ethernet38 55,56 Eth10/2
-Ethernet40 57,58 Eth11/1
-Ethernet42 59,60 Eth11/2
-Ethernet44 61,62 Eth12/1
-Ethernet46 63,64 Eth12/2
-Ethernet48 81,82 Eth13/1
-Ethernet50 83,84 Eth13/2
-Ethernet52 85,86 Eth14/1
-Ethernet54 87,88 Eth14/2
-Ethernet56 89,90 Eth15/1
-Ethernet58 91,92 Eth15/2
-Ethernet60 93,94 Eth16/1
-Ethernet62 95,96 Eth16/2
-Ethernet64 97,98 Eth17/1
-Ethernet66 99,100 Eth17/2
-Ethernet68 101,102 Eth18/1
-Ethernet70 103,104 Eth18/2
-Ethernet72 105,106 Eth19/1
-Ethernet74 107,108 Eth19/2
-Ethernet76 109,110 Eth20/1
-Ethernet78 111,112 Eth20/2
-Ethernet80 1,2 Eth21/1
-Ethernet82 3,4 Eth21/2
-Ethernet84 5,6 Eth22/1
-Ethernet86 7,8 Eth22/2
-Ethernet88 9,10 Eth23/1
-Ethernet90 11,12 Eth23/2
-Ethernet92 13,14 Eth24/1
-Ethernet94 15,16 Eth24/2
-Ethernet96 17,18 Eth25/1
-Ethernet98 19,20 Eth25/2
-Ethernet100 21,22 Eth26/1
-Ethernet102 23,24 Eth26/2
-Ethernet104 25,26 Eth27/1
-Ethernet106 27,28 Eth27/2
-Ethernet108 29,30 Eth28/1
-Ethernet110 31,32 Eth28/2
-Ethernet112 113,114 Eth29/1
-Ethernet114 115,116 Eth29/2
-Ethernet116 117,118 Eth30/1
-Ethernet118 119,120 Eth30/2
-Ethernet120 121,122 Eth31/1
-Ethernet122 123,124 Eth31/2
-Ethernet124 125,126 Eth32/1
-Ethernet126 127,128 Eth32/2
+# name lanes alias index speed
+Ethernet0 65,66 Eth1/1 0 50000
+Ethernet2 67,68 Eth1/2 0 50000
+Ethernet4 69,70 Eth2/1 1 50000
+Ethernet6 71,72 Eth2/2 1 50000
+Ethernet8 73,74 Eth3/1 2 50000
+Ethernet10 75,76 Eth3/2 2 50000
+Ethernet12 77,78 Eth4/1 3 50000
+Ethernet14 79,80 Eth4/2 3 50000
+Ethernet16 33,34 Eth5/1 4 50000
+Ethernet18 35,36 Eth5/2 4 50000
+Ethernet20 37,38 Eth6/1 5 50000
+Ethernet22 39,40 Eth6/2 5 50000
+Ethernet24 41,42 Eth7/1 6 50000
+Ethernet26 43,44 Eth7/2 6 50000
+Ethernet28 45,46 Eth8/1 7 50000
+Ethernet30 47,48 Eth8/2 7 50000
+Ethernet32 49,50 Eth9/1 8 50000
+Ethernet34 51,52 Eth9/2 8 50000
+Ethernet36 53,54 Eth10/1 9 50000
+Ethernet38 55,56 Eth10/2 9 50000
+Ethernet40 57,58 Eth11/1 10 50000
+Ethernet42 59,60 Eth11/2 10 50000
+Ethernet44 61,62 Eth12/1 11 50000
+Ethernet46 63,64 Eth12/2 11 50000
+Ethernet48 81,82 Eth13/1 12 50000
+Ethernet50 83,84 Eth13/2 12 50000
+Ethernet52 85,86 Eth14/1 13 50000
+Ethernet54 87,88 Eth14/2 13 50000
+Ethernet56 89,90 Eth15/1 14 50000
+Ethernet58 91,92 Eth15/2 14 50000
+Ethernet60 93,94 Eth16/1 15 50000
+Ethernet62 95,96 Eth16/2 15 50000
+Ethernet64 97,98 Eth17/1 16 50000
+Ethernet66 99,100 Eth17/2 16 50000
+Ethernet68 101,102 Eth18/1 17 50000
+Ethernet70 103,104 Eth18/2 17 50000
+Ethernet72 105,106 Eth19/1 18 50000
+Ethernet74 107,108 Eth19/2 18 50000
+Ethernet76 109,110 Eth20/1 19 50000
+Ethernet78 111,112 Eth20/2 19 50000
+Ethernet80 1,2 Eth21/1 20 50000
+Ethernet82 3,4 Eth21/2 20 50000
+Ethernet84 5,6 Eth22/1 21 50000
+Ethernet86 7,8 Eth22/2 21 50000
+Ethernet88 9,10 Eth23/1 22 50000
+Ethernet90 11,12 Eth23/2 22 50000
+Ethernet92 13,14 Eth24/1 23 50000
+Ethernet94 15,16 Eth24/2 23 50000
+Ethernet96 17,18 Eth25/1 24 50000
+Ethernet98 19,20 Eth25/2 24 50000
+Ethernet100 21,22 Eth26/1 25 50000
+Ethernet102 23,24 Eth26/2 25 50000
+Ethernet104 25,26 Eth27/1 26 50000
+Ethernet106 27,28 Eth27/2 26 50000
+Ethernet108 29,30 Eth28/1 27 50000
+Ethernet110 31,32 Eth28/2 27 50000
+Ethernet112 113,114 Eth29/1 28 50000
+Ethernet114 115,116 Eth29/2 28 50000
+Ethernet116 117,118 Eth30/1 29 50000
+Ethernet118 119,120 Eth30/2 29 50000
+Ethernet120 121,122 Eth31/1 30 50000
+Ethernet122 123,124 Eth31/2 30 50000
+Ethernet124 125,126 Eth32/1 31 50000
+Ethernet126 127,128 Eth32/2 31 50000
diff --git a/device/celestica/x86_64-cel_seastone-r0/Seastone-DX010/port_config.ini b/device/celestica/x86_64-cel_seastone-r0/Seastone-DX010/port_config.ini
index 9f039e003488..94282c3379e4 100644
--- a/device/celestica/x86_64-cel_seastone-r0/Seastone-DX010/port_config.ini
+++ b/device/celestica/x86_64-cel_seastone-r0/Seastone-DX010/port_config.ini
@@ -1,33 +1,33 @@
-# name lanes alias
-Ethernet0 65,66,67,68 Eth1
-Ethernet4 69,70,71,72 Eth2
-Ethernet8 73,74,75,76 Eth3
-Ethernet12 77,78,79,80 Eth4
-Ethernet16 33,34,35,36 Eth5
-Ethernet20 37,38,39,40 Eth6
-Ethernet24 41,42,43,44 Eth7
-Ethernet28 45,46,47,48 Eth8
-Ethernet32 49,50,51,52 Eth9
-Ethernet36 53,54,55,56 Eth10
-Ethernet40 57,58,59,60 Eth11
-Ethernet44 61,62,63,64 Eth12
-Ethernet48 81,82,83,84 Eth13
-Ethernet52 85,86,87,88 Eth14
-Ethernet56 89,90,91,92 Eth15
-Ethernet60 93,94,95,96 Eth16
-Ethernet64 97,98,99,100 Eth17
-Ethernet68 101,102,103,104 Eth18
-Ethernet72 105,106,107,108 Eth19
-Ethernet76 109,110,111,112 Eth20
-Ethernet80 1,2,3,4 Eth21
-Ethernet84 5,6,7,8 Eth22
-Ethernet88 9,10,11,12 Eth23
-Ethernet92 13,14,15,16 Eth24
-Ethernet96 17,18,19,20 Eth25
-Ethernet100 21,22,23,24 Eth26
-Ethernet104 25,26,27,28 Eth27
-Ethernet108 29,30,31,32 Eth28
-Ethernet112 113,114,115,116 Eth29
-Ethernet116 117,118,119,120 Eth30
-Ethernet120 121,122,123,124 Eth31
-Ethernet124 125,126,127,128 Eth32
+# name lanes alias index speed
+Ethernet0 65,66,67,68 Eth1 0 100000
+Ethernet4 69,70,71,72 Eth2 1 100000
+Ethernet8 73,74,75,76 Eth3 2 100000
+Ethernet12 77,78,79,80 Eth4 3 100000
+Ethernet16 33,34,35,36 Eth5 4 100000
+Ethernet20 37,38,39,40 Eth6 5 100000
+Ethernet24 41,42,43,44 Eth7 6 100000
+Ethernet28 45,46,47,48 Eth8 7 100000
+Ethernet32 49,50,51,52 Eth9 8 100000
+Ethernet36 53,54,55,56 Eth10 9 100000
+Ethernet40 57,58,59,60 Eth11 10 100000
+Ethernet44 61,62,63,64 Eth12 11 100000
+Ethernet48 81,82,83,84 Eth13 12 100000
+Ethernet52 85,86,87,88 Eth14 13 100000
+Ethernet56 89,90,91,92 Eth15 14 100000
+Ethernet60 93,94,95,96 Eth16 15 100000
+Ethernet64 97,98,99,100 Eth17 16 100000
+Ethernet68 101,102,103,104 Eth18 17 100000
+Ethernet72 105,106,107,108 Eth19 18 100000
+Ethernet76 109,110,111,112 Eth20 19 100000
+Ethernet80 1,2,3,4 Eth21 20 100000
+Ethernet84 5,6,7,8 Eth22 21 100000
+Ethernet88 9,10,11,12 Eth23 22 100000
+Ethernet92 13,14,15,16 Eth24 23 100000
+Ethernet96 17,18,19,20 Eth25 24 100000
+Ethernet100 21,22,23,24 Eth26 25 100000
+Ethernet104 25,26,27,28 Eth27 26 100000
+Ethernet108 29,30,31,32 Eth28 27 100000
+Ethernet112 113,114,115,116 Eth29 28 100000
+Ethernet116 117,118,119,120 Eth30 29 100000
+Ethernet120 121,122,123,124 Eth31 30 100000
+Ethernet124 125,126,127,128 Eth32 31 100000
diff --git a/device/celestica/x86_64-cel_seastone-r0/fancontrol b/device/celestica/x86_64-cel_seastone-r0/fancontrol
index ba3010c7c9cc..8d5cbccb9d00 100644
--- a/device/celestica/x86_64-cel_seastone-r0/fancontrol
+++ b/device/celestica/x86_64-cel_seastone-r0/fancontrol
@@ -2,11 +2,11 @@
INTERVAL=10
DEVPATH=hwmon6=devices/pci0000:00/0000:00:13.0/i2c-1/i2c-13/13-002e hwmon7=devices/pci0000:00/0000:00:13.0/i2c-1/i2c-13/13-004d
DEVNAME=hwmon6=emc2305 hwmon7=emc2305
-FCTEMPS=hwmon6/device/pwm1=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-5/5-0048/hwmon/hwmon1/temp1_input hwmon6/device/pwm2=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-5/5-0048/hwmon/hwmon1/temp1_input hwmon6/device/pwm3=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-5/5-0048/hwmon/hwmon1/temp1_input hwmon6/device/pwm4=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-5/5-0048/hwmon/hwmon1/temp1_input hwmon6/device/pwm5=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-5/5-0048/hwmon/hwmon1/temp1_input hwmon6/device/pwm1=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-6/6-0049/hwmon/hwmon2/temp1_input hwmon6/device/pwm2=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-6/6-0049/hwmon/hwmon2/temp1_input hwmon6/device/pwm3=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-6/6-0049/hwmon/hwmon2/temp1_input hwmon6/device/pwm4=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-6/6-0049/hwmon/hwmon2/temp1_input hwmon6/device/pwm5=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-6/6-0049/hwmon/hwmon2/temp1_input hwmon6/device/pwm1=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-7/7-004a/hwmon/hwmon3/temp1_input hwmon6/device/pwm2=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-7/7-004a/hwmon/hwmon3/temp1_input hwmon6/device/pwm3=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-7/7-004a/hwmon/hwmon3/temp1_input hwmon6/device/pwm4=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-7/7-004a/hwmon/hwmon3/temp1_input hwmon6/device/pwm5=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-7/7-004a/hwmon/hwmon3/temp1_input hwmon6/device/pwm1=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-14/14-0048/hwmon/hwmon4/temp1_input hwmon6/device/pwm2=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-14/14-0048/hwmon/hwmon4/temp1_input hwmon6/device/pwm3=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-14/14-0048/hwmon/hwmon4/temp1_input hwmon6/device/pwm4=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-14/14-0048/hwmon/hwmon4/temp1_input hwmon6/device/pwm5=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-14/14-0048/hwmon/hwmon4/temp1_input hwmon6/device/pwm1=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-15/15-004e/hwmon/hwmon5/temp1_input hwmon6/device/pwm2=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-15/15-004e/hwmon/hwmon5/temp1_input hwmon6/device/pwm3=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-15/15-004e/hwmon/hwmon5/temp1_input hwmon6/device/pwm4=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-15/15-004e/hwmon/hwmon5/temp1_input hwmon6/device/pwm5=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-15/15-004e/hwmon/hwmon5/temp1_input hwmon7/device/pwm1=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-5/5-0048/hwmon/hwmon1/temp1_input hwmon7/device/pwm2=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-5/5-0048/hwmon/hwmon1/temp1_input hwmon7/device/pwm3=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-5/5-0048/hwmon/hwmon1/temp1_input hwmon7/device/pwm4=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-5/5-0048/hwmon/hwmon1/temp1_input hwmon7/device/pwm5=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-5/5-0048/hwmon/hwmon1/temp1_input hwmon7/device/pwm1=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-6/6-0049/hwmon/hwmon2/temp1_input hwmon7/device/pwm2=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-6/6-0049/hwmon/hwmon2/temp1_input hwmon7/device/pwm3=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-6/6-0049/hwmon/hwmon2/temp1_input hwmon7/device/pwm4=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-6/6-0049/hwmon/hwmon2/temp1_input hwmon7/device/pwm5=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-6/6-0049/hwmon/hwmon2/temp1_input hwmon7/device/pwm1=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-7/7-004a/hwmon/hwmon3/temp1_input hwmon7/device/pwm2=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-7/7-004a/hwmon/hwmon3/temp1_input hwmon7/device/pwm3=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-7/7-004a/hwmon/hwmon3/temp1_input hwmon7/device/pwm4=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-7/7-004a/hwmon/hwmon3/temp1_input hwmon7/device/pwm5=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-7/7-004a/hwmon/hwmon3/temp1_input hwmon7/device/pwm1=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-14/14-0048/hwmon/hwmon4/temp1_input hwmon7/device/pwm2=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-14/14-0048/hwmon/hwmon4/temp1_input hwmon7/device/pwm3=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-14/14-0048/hwmon/hwmon4/temp1_input hwmon7/device/pwm4=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-14/14-0048/hwmon/hwmon4/temp1_input hwmon7/device/pwm5=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-14/14-0048/hwmon/hwmon4/temp1_input hwmon7/device/pwm1=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-15/15-004e/hwmon/hwmon5/temp1_input hwmon7/device/pwm2=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-15/15-004e/hwmon/hwmon5/temp1_input hwmon7/device/pwm3=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-15/15-004e/hwmon/hwmon5/temp1_input hwmon7/device/pwm4=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-15/15-004e/hwmon/hwmon5/temp1_input hwmon7/device/pwm5=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-15/15-004e/hwmon/hwmon5/temp1_input
-FCFANS= hwmon7/device/pwm5=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-13/13-004d/pwm5 hwmon7/device/pwm4=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-13/13-004d/pwm4 hwmon7/device/pwm3=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-13/13-004d/pwm3 hwmon7/device/pwm2=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-13/13-004d/pwm2 hwmon7/device/pwm1=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-13/13-004d/pwm1 hwmon6/device/pwm5=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-13/13-002e/pwm5 hwmon6/device/pwm4=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-13/13-002e/pwm4 hwmon6/device/pwm3=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-13/13-002e/pwm3 hwmon6/device/pwm2=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-13/13-002e/pwm2 hwmon6/device/pwm1=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-13/13-002e/pwm1
-MINTEMP=hwmon6/device/pwm1=25 hwmon6/device/pwm2=25 hwmon6/device/pwm3=25 hwmon6/device/pwm4=25 hwmon6/device/pwm5=25 hwmon7/device/pwm1=25 hwmon7/device/pwm2=25 hwmon7/device/pwm3=25 hwmon7/device/pwm4=25 hwmon7/device/pwm5=25
-MAXTEMP=hwmon6/device/pwm1=40 hwmon6/device/pwm2=40 hwmon6/device/pwm3=40 hwmon6/device/pwm4=40 hwmon6/device/pwm5=40 hwmon7/device/pwm1=40 hwmon7/device/pwm2=40 hwmon7/device/pwm3=40 hwmon7/device/pwm4=40 hwmon7/device/pwm5=40
-MINSTART=hwmon6/device/pwm1=75 hwmon6/device/pwm2=75 hwmon6/device/pwm3=75 hwmon6/device/pwm4=75 hwmon6/device/pwm5=75 hwmon7/device/pwm1=75 hwmon7/device/pwm2=75 hwmon7/device/pwm3=75 hwmon7/device/pwm4=75 hwmon7/device/pwm5=75
-MINSTOP=hwmon6/device/pwm1=50 hwmon6/device/pwm2=50 hwmon6/device/pwm3=50 hwmon6/device/pwm4=50 hwmon6/device/pwm5=50 hwmon7/device/pwm1=50 hwmon7/device/pwm2=50 hwmon7/device/pwm3=50 hwmon7/device/pwm4=50 hwmon7/device/pwm5=50
-MINPWM=hwmon6/device/pwm1=50 hwmon6/device/pwm2=50 hwmon6/device/pwm3=50 hwmon6/device/pwm4=50 hwmon6/device/pwm5=50 hwmon7/device/pwm1=50 hwmon7/device/pwm2=50 hwmon7/device/pwm3=50 hwmon7/device/pwm4=50 hwmon7/device/pwm5=50
+FCTEMPS=hwmon6/device/pwm1=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-5/5-0048/hwmon/hwmon1/temp1_input hwmon6/device/pwm2=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-5/5-0048/hwmon/hwmon1/temp1_input hwmon6/device/pwm3=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-5/5-0048/hwmon/hwmon1/temp1_input hwmon6/device/pwm4=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-5/5-0048/hwmon/hwmon1/temp1_input hwmon6/device/pwm5=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-5/5-0048/hwmon/hwmon1/temp1_input hwmon7/device/pwm1=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-5/5-0048/hwmon/hwmon1/temp1_input hwmon7/device/pwm2=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-5/5-0048/hwmon/hwmon1/temp1_input hwmon7/device/pwm3=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-5/5-0048/hwmon/hwmon1/temp1_input hwmon7/device/pwm4=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-5/5-0048/hwmon/hwmon1/temp1_input hwmon7/device/pwm5=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-5/5-0048/hwmon/hwmon1/temp1_input
+FCFANS=hwmon7/device/pwm5=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-13/13-004d/pwm5 hwmon7/device/pwm4=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-13/13-004d/pwm4 hwmon7/device/pwm3=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-13/13-004d/pwm3 hwmon7/device/pwm2=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-13/13-004d/pwm2 hwmon7/device/pwm1=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-13/13-004d/pwm1 hwmon6/device/pwm5=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-13/13-002e/pwm5 hwmon6/device/pwm4=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-13/13-002e/pwm4 hwmon6/device/pwm3=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-13/13-002e/pwm3 hwmon6/device/pwm2=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-13/13-002e/pwm2 hwmon6/device/pwm1=/sys/devices/pci0000:00/0000:00:13.0/i2c-1/i2c-13/13-002e/pwm1
+MINTEMP=hwmon6/device/pwm1=26 hwmon6/device/pwm2=26 hwmon6/device/pwm3=26 hwmon6/device/pwm4=26 hwmon6/device/pwm5=26 hwmon7/device/pwm1=26 hwmon7/device/pwm2=26 hwmon7/device/pwm3=26 hwmon7/device/pwm4=26 hwmon7/device/pwm5=26
+MAXTEMP=hwmon6/device/pwm1=45 hwmon6/device/pwm2=45 hwmon6/device/pwm3=45 hwmon6/device/pwm4=45 hwmon6/device/pwm5=45 hwmon7/device/pwm1=45 hwmon7/device/pwm2=45 hwmon7/device/pwm3=45 hwmon7/device/pwm4=45 hwmon7/device/pwm5=45
+MINSTART=hwmon6/device/pwm1=89 hwmon6/device/pwm2=89 hwmon6/device/pwm3=89 hwmon6/device/pwm4=89 hwmon6/device/pwm5=89 hwmon7/device/pwm1=89 hwmon7/device/pwm2=89 hwmon7/device/pwm3=89 hwmon7/device/pwm4=89 hwmon7/device/pwm5=89
+MINSTOP=hwmon6/device/pwm1=89 hwmon6/device/pwm2=89 hwmon6/device/pwm3=89 hwmon6/device/pwm4=89 hwmon6/device/pwm5=89 hwmon7/device/pwm1=89 hwmon7/device/pwm2=89 hwmon7/device/pwm3=89 hwmon7/device/pwm4=89 hwmon7/device/pwm5=89
+MINPWM=hwmon6/device/pwm1=89 hwmon6/device/pwm2=89 hwmon6/device/pwm3=89 hwmon6/device/pwm4=89 hwmon6/device/pwm5=89 hwmon7/device/pwm1=89 hwmon7/device/pwm2=89 hwmon7/device/pwm3=89 hwmon7/device/pwm4=89 hwmon7/device/pwm5=89
MAXPWM=hwmon6/device/pwm1=255 hwmon6/device/pwm2=255 hwmon6/device/pwm3=255 hwmon6/device/pwm4=255 hwmon6/device/pwm5=255 hwmon7/device/pwm1=255 hwmon7/device/pwm2=255 hwmon7/device/pwm3=255 hwmon7/device/pwm4=255 hwmon7/device/pwm5=255
diff --git a/device/celestica/x86_64-cel_seastone-r0/plugins/psuutil.py b/device/celestica/x86_64-cel_seastone-r0/plugins/psuutil.py
new file mode 100644
index 000000000000..510c03a43ff1
--- /dev/null
+++ b/device/celestica/x86_64-cel_seastone-r0/plugins/psuutil.py
@@ -0,0 +1,91 @@
+#
+# psuutil.py
+# Platform-specific PSU status interface for SONiC
+#
+
+import os
+
+
+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)
+ # DX010 PSU pin mapping
+ self.psu = [
+ {'base': self.get_gpio_base()},
+ {'abs':27, 'power':22},
+ {'abs':28, 'power':25}
+ ]
+
+ def get_gpio_base(self):
+ sys_gpio_dir = "/sys/class/gpio"
+ for r in os.listdir(sys_gpio_dir):
+ if "gpiochip" in r:
+ return int(r[8:],10)
+ return 216 #Reserve
+
+
+ # Get a psu status and presence
+ def read_psu_statuses(self, pinnum):
+ sys_gpio_dir = "/sys/class/gpio"
+ gpio_base = self.psu[0]['base']
+
+ gpio_dir = sys_gpio_dir + '/gpio' + str(gpio_base+pinnum)
+ gpio_file = gpio_dir + "/value"
+
+ try:
+ with open(gpio_file, 'r') as fd:
+ retval = fd.read()
+ except IOError:
+ raise IOError("Unable to open " + gpio_file + "file !")
+
+ retval = retval.rstrip('\r\n')
+ return retval
+
+ 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
+ """
+ DX010_MAX_PSUS = 2
+ return DX010_MAX_PSUS
+
+ def get_psu_status(self, index):
+ """
+ Retrieves the oprational status of power supply unit (PSU) defined
+ by 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
+ """
+ status = 0
+ psu_status = self.read_psu_statuses(self.psu[index]['power'])
+ psu_status = int(psu_status, 10)
+ # Check for PSU status
+ if (psu_status == 1):
+ status = 1
+
+ return status
+
+ def get_psu_presence(self, index):
+ """
+ Retrieves the presence status of power supply unit (PSU) defined
+ by 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_absence = self.read_psu_statuses(self.psu[index]['abs'])
+ psu_absence = (int(psu_absence, 10))
+ # Check for PSU presence
+ if (psu_absence == 0):
+ status = 1
+
+ return status
diff --git a/device/celestica/x86_64-cel_seastone-r0/sensors.conf b/device/celestica/x86_64-cel_seastone-r0/sensors.conf
index 11461a0afef9..6ce4540b226e 100644
--- a/device/celestica/x86_64-cel_seastone-r0/sensors.conf
+++ b/device/celestica/x86_64-cel_seastone-r0/sensors.conf
@@ -36,30 +36,33 @@ chip "dps460-i2c-*-5b"
set in3_crit 13.0
set in3_lcrit 11.0
-# These sensors located on Main Switch Board.
+# These sensors located on CPU Board.
chip "dx010_lm75b-i2c-*-48"
- label temp1 "Front-panel temp sensor 1"
+ label temp1 "CPU_external temp sensor"
set temp1_max 43
set temp1_max_hyst 28
-chip "dx010_lm75b-i2c-*-49"
- label temp1 "Front-panel temp sensor 2"
+chip "dx010_lm75b-i2c-*-4e"
+ label temp1 "Rear_panel temp sensor"
set temp1_max 43
set temp1_max_hyst 28
-chip "dx010_lm75b-i2c-*-4a"
- label temp1 "ASIC temp sensor"
+# These sensors located on Main Switch Board.
+bus "i2c-5" "i2c-1-mux (chan_id 3)"
+chip "dx010_lm75b-i2c-5-48"
+ label temp1 "Front_panel left temp sensor"
set temp1_max 43
set temp1_max_hyst 28
-# These sensors located on CPU Board.
-chip "dx010_lm75b-i2c-*-48"
- label temp1 "Rear-panel temp sensor 1"
+bus "i2c-6" "i2c-1-mux (chan_id 4)"
+chip "dx010_lm75b-i2c-6-49"
+ label temp1 "Front_panel right temp sensor"
set temp1_max 43
set temp1_max_hyst 28
-chip "dx010_lm75b-i2c-*-4e"
- label temp1 "Rear-panel temp sensor 2"
+bus "i2c-7" "i2c-1-mux (chan_id 5)"
+chip "dx010_lm75b-i2c-7-4a"
+ label temp1 "Switch_external temp sensor"
set temp1_max 43
set temp1_max_hyst 28
diff --git a/device/dell/x86_64-dell_s6000_s1220-r0/Force10-S6000/qos.json b/device/dell/x86_64-dell_s6000_s1220-r0/Force10-S6000/qos.json.j2
similarity index 100%
rename from device/dell/x86_64-dell_s6000_s1220-r0/Force10-S6000/qos.json
rename to device/dell/x86_64-dell_s6000_s1220-r0/Force10-S6000/qos.json.j2
diff --git a/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/qos.json b/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/qos.json.j2
similarity index 55%
rename from device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/qos.json
rename to device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/qos.json.j2
index e3a84924fd15..054a8f832cd4 100644
--- a/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/qos.json
+++ b/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/qos.json.j2
@@ -1,3 +1,30 @@
+{%- set PORT_ALL = [] %}
+
+{%- if PORT is not defined %}
+ {%- for port_idx in range(0,64) %}
+ {%- if PORT_ALL.append("Ethernet%d" % (port_idx)) %}{%- endif %}
+ {%- endfor %}
+{%- else %}
+ {%- for port in PORT %}
+ {%- if PORT_ALL.append(port) %}{%- endif %}
+ {%- endfor %}
+{%- endif %}
+
+{%- 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 %}
+
+{%- 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(',') %}
+
{
"TC_TO_PRIORITY_GROUP_MAP": {
"AZURE": {
@@ -118,7 +145,7 @@
}
},
"PORT_QOS_MAP": {
- "Ethernet0,Ethernet1,Ethernet2,Ethernet3,Ethernet4,Ethernet5,Ethernet6,Ethernet7,Ethernet8,Ethernet9,Ethernet10,Ethernet11,Ethernet12,Ethernet13,Ethernet14,Ethernet15,Ethernet16,Ethernet17,Ethernet18,Ethernet19,Ethernet20,Ethernet21,Ethernet22,Ethernet23,Ethernet24,Ethernet25,Ethernet26,Ethernet27,Ethernet28,Ethernet29,Ethernet30,Ethernet31,Ethernet32,Ethernet33,Ethernet34,Ethernet35,Ethernet36,Ethernet37,Ethernet38,Ethernet39,Ethernet40,Ethernet41,Ethernet42,Ethernet43,Ethernet44,Ethernet45,Ethernet46,Ethernet47,Ethernet48,Ethernet49,Ethernet50,Ethernet51,Ethernet52,Ethernet53,Ethernet54,Ethernet55,Ethernet56,Ethernet57,Ethernet58,Ethernet59,Ethernet60,Ethernet61,Ethernet62,Ethernet63": {
+ "{{ 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]",
@@ -141,14 +168,14 @@
}
},
"QUEUE": {
- "Ethernet0,Ethernet1,Ethernet2,Ethernet3,Ethernet4,Ethernet5,Ethernet6,Ethernet7,Ethernet8,Ethernet9,Ethernet10,Ethernet11,Ethernet12,Ethernet13,Ethernet14,Ethernet15,Ethernet16,Ethernet17,Ethernet18,Ethernet19,Ethernet20,Ethernet21,Ethernet22,Ethernet23,Ethernet24,Ethernet25,Ethernet26,Ethernet27,Ethernet28,Ethernet29,Ethernet30,Ethernet31,Ethernet32,Ethernet33,Ethernet34,Ethernet35,Ethernet36,Ethernet37,Ethernet38,Ethernet39,Ethernet40,Ethernet41,Ethernet42,Ethernet43,Ethernet44,Ethernet45,Ethernet46,Ethernet47,Ethernet48,Ethernet49,Ethernet50,Ethernet51,Ethernet52,Ethernet53,Ethernet54,Ethernet55,Ethernet56,Ethernet57,Ethernet58,Ethernet59,Ethernet60,Ethernet61,Ethernet62,Ethernet63|3-4" : {
+ "{{ port_names_active }}|3-4" : {
"scheduler" : "[SCHEDULER|scheduler.0]",
"wred_profile" : "[WRED_PROFILE|AZURE_LOSSLESS]"
},
- "Ethernet0,Ethernet1,Ethernet2,Ethernet3,Ethernet4,Ethernet5,Ethernet6,Ethernet7,Ethernet8,Ethernet9,Ethernet10,Ethernet11,Ethernet12,Ethernet13,Ethernet14,Ethernet15,Ethernet16,Ethernet17,Ethernet18,Ethernet19,Ethernet20,Ethernet21,Ethernet22,Ethernet23,Ethernet24,Ethernet25,Ethernet26,Ethernet27,Ethernet28,Ethernet29,Ethernet30,Ethernet31,Ethernet32,Ethernet33,Ethernet34,Ethernet35,Ethernet36,Ethernet37,Ethernet38,Ethernet39,Ethernet40,Ethernet41,Ethernet42,Ethernet43,Ethernet44,Ethernet45,Ethernet46,Ethernet47,Ethernet48,Ethernet49,Ethernet50,Ethernet51,Ethernet52,Ethernet53,Ethernet54,Ethernet55,Ethernet56,Ethernet57,Ethernet58,Ethernet59,Ethernet60,Ethernet61,Ethernet62,Ethernet63|0" : {
+ "{{ port_names_active }}|0" : {
"scheduler" : "[SCHEDULER|scheduler.1]"
},
- "Ethernet0,Ethernet1,Ethernet2,Ethernet3,Ethernet4,Ethernet5,Ethernet6,Ethernet7,Ethernet8,Ethernet9,Ethernet10,Ethernet11,Ethernet12,Ethernet13,Ethernet14,Ethernet15,Ethernet16,Ethernet17,Ethernet18,Ethernet19,Ethernet20,Ethernet21,Ethernet22,Ethernet23,Ethernet24,Ethernet25,Ethernet26,Ethernet27,Ethernet28,Ethernet29,Ethernet30,Ethernet31,Ethernet32,Ethernet33,Ethernet34,Ethernet35,Ethernet36,Ethernet37,Ethernet38,Ethernet39,Ethernet40,Ethernet41,Ethernet42,Ethernet43,Ethernet44,Ethernet45,Ethernet46,Ethernet47,Ethernet48,Ethernet49,Ethernet50,Ethernet51,Ethernet52,Ethernet53,Ethernet54,Ethernet55,Ethernet56,Ethernet57,Ethernet58,Ethernet59,Ethernet60,Ethernet61,Ethernet62,Ethernet63|1" : {
+ "{{ port_names_active }}|1" : {
"scheduler" : "[SCHEDULER|scheduler.2]"
}
}
diff --git a/device/dell/x86_64-dell_z9100_c2538-r0/Force10-Z9100-T0/buffers_defaults_t0.j2 b/device/dell/x86_64-dell_z9100_c2538-r0/Force10-Z9100-T0/buffers_defaults_t0.j2
index 77c5761b9b30..83d99c78201b 100644
--- a/device/dell/x86_64-dell_z9100_c2538-r0/Force10-Z9100-T0/buffers_defaults_t0.j2
+++ b/device/dell/x86_64-dell_z9100_c2538-r0/Force10-Z9100-T0/buffers_defaults_t0.j2
@@ -28,7 +28,7 @@
"size": "11213696",
"type": "ingress",
"mode": "dynamic",
- "xoff": "8356608"
+ "xoff": "6387264"
},
"egress_lossy_pool": {
"size": "9532224",
diff --git a/device/dell/x86_64-dell_z9100_c2538-r0/Force10-Z9100-T0/qos.json b/device/dell/x86_64-dell_z9100_c2538-r0/Force10-Z9100-T0/qos.json.j2
similarity index 79%
rename from device/dell/x86_64-dell_z9100_c2538-r0/Force10-Z9100-T0/qos.json
rename to device/dell/x86_64-dell_z9100_c2538-r0/Force10-Z9100-T0/qos.json.j2
index 09cb63d5d474..57bb4c532177 100644
--- a/device/dell/x86_64-dell_z9100_c2538-r0/Force10-Z9100-T0/qos.json
+++ b/device/dell/x86_64-dell_z9100_c2538-r0/Force10-Z9100-T0/qos.json.j2
@@ -127,35 +127,23 @@
}
},
"WRED_PROFILE": {
- "AZURE_LOSSY" : {
- "wred_green_enable":"true",
- "wred_yellow_enable":"true",
- "ecn":"ecn_all",
- "red_max_threshold":"512000",
- "red_min_threshold":"512000",
- "yellow_max_threshold":"512000",
- "yellow_min_threshold":"512000",
- "green_max_threshold": "184320",
- "green_min_threshold": "184320"
- },
"AZURE_LOSSLESS" : {
"wred_green_enable":"true",
"wred_yellow_enable":"true",
+ "wred_red_enable":"true",
"ecn":"ecn_all",
- "red_max_threshold":"512000",
- "red_min_threshold":"512000",
- "yellow_max_threshold":"512000",
- "yellow_min_threshold":"512000",
- "green_max_threshold": "184320",
- "green_min_threshold": "184320"
+ "red_max_threshold":"312000",
+ "red_min_threshold":"104000",
+ "yellow_max_threshold":"312000",
+ "yellow_min_threshold":"104000",
+ "green_max_threshold": "312000",
+ "green_min_threshold": "104000"
}
},
"QUEUE": {
- "Ethernet0,Ethernet2,Ethernet4,Ethernet6,Ethernet8,Ethernet10,Ethernet12,Ethernet14,Ethernet16,Ethernet18,Ethernet20,Ethernet22,Ethernet24,Ethernet28,Ethernet32,Ethernet36,Ethernet40,Ethernet42,Ethernet44,Ethernet46,Ethernet48,Ethernet50,Ethernet52,Ethernet54,Ethernet56,Ethernet58,Ethernet60,Ethernet62,Ethernet64,Ethernet66,Ethernet68,Ethernet70,Ethernet72,Ethernet74,Ethernet76,Ethernet78,Ethernet80,Ethernet82,Ethernet84,Ethernet86,Ethernet88,Ethernet90,Ethernet92,Ethernet94,Ethernet96,Ethernet98,Ethernet100,Ethernet102,Ethernet104,Ethernet108,Ethernet112,Ethernet116,Ethernet120,Ethernet122,Ethernet124,Ethernet126|0-1": {
- "wred_profile" : "[WRED_PROFILE|AZURE_LOSSY]"
- },
"Ethernet0,Ethernet2,Ethernet4,Ethernet6,Ethernet8,Ethernet10,Ethernet12,Ethernet14,Ethernet16,Ethernet18,Ethernet20,Ethernet22,Ethernet24,Ethernet28,Ethernet32,Ethernet36,Ethernet40,Ethernet42,Ethernet44,Ethernet46,Ethernet48,Ethernet50,Ethernet52,Ethernet54,Ethernet56,Ethernet58,Ethernet60,Ethernet62,Ethernet64,Ethernet66,Ethernet68,Ethernet70,Ethernet72,Ethernet74,Ethernet76,Ethernet78,Ethernet80,Ethernet82,Ethernet84,Ethernet86,Ethernet88,Ethernet90,Ethernet92,Ethernet94,Ethernet96,Ethernet98,Ethernet100,Ethernet102,Ethernet104,Ethernet108,Ethernet112,Ethernet116,Ethernet120,Ethernet122,Ethernet124,Ethernet126|3-4": {
- "scheduler" : "[SCHEDULER|scheduler.0]"
+ "scheduler" : "[SCHEDULER|scheduler.0]",
+ "wred_profile" : "[WRED_PROFILE|AZURE_LOSSLESS]"
},
"Ethernet0,Ethernet2,Ethernet4,Ethernet6,Ethernet8,Ethernet10,Ethernet12,Ethernet14,Ethernet16,Ethernet18,Ethernet20,Ethernet22,Ethernet24,Ethernet28,Ethernet32,Ethernet36,Ethernet40,Ethernet42,Ethernet44,Ethernet46,Ethernet48,Ethernet50,Ethernet52,Ethernet54,Ethernet56,Ethernet58,Ethernet60,Ethernet62,Ethernet64,Ethernet66,Ethernet68,Ethernet70,Ethernet72,Ethernet74,Ethernet76,Ethernet78,Ethernet80,Ethernet82,Ethernet84,Ethernet86,Ethernet88,Ethernet90,Ethernet92,Ethernet94,Ethernet96,Ethernet98,Ethernet100,Ethernet102,Ethernet104,Ethernet108,Ethernet112,Ethernet116,Ethernet120,Ethernet122,Ethernet124,Ethernet126|0": {
"scheduler" : "[SCHEDULER|scheduler.1]"
diff --git a/device/dell/x86_64-dell_z9100_c2538-r0/Force10-Z9100/buffers_defaults_t1.j2 b/device/dell/x86_64-dell_z9100_c2538-r0/Force10-Z9100/buffers_defaults_t1.j2
index 5c654ab9e8a1..912f72a4c07c 100644
--- a/device/dell/x86_64-dell_z9100_c2538-r0/Force10-Z9100/buffers_defaults_t1.j2
+++ b/device/dell/x86_64-dell_z9100_c2538-r0/Force10-Z9100/buffers_defaults_t1.j2
@@ -14,7 +14,7 @@
"size": "10443264",
"type": "ingress",
"mode": "dynamic",
- "xoff": "4625920"
+ "xoff": "7335744"
},
"egress_lossy_pool": {
"size": "8877440",
diff --git a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/qos.json b/device/dell/x86_64-dell_z9100_c2538-r0/Force10-Z9100/qos.json.j2
similarity index 79%
rename from device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/qos.json
rename to device/dell/x86_64-dell_z9100_c2538-r0/Force10-Z9100/qos.json.j2
index b724b48c2c23..84f74ecab3be 100644
--- a/device/arista/x86_64-arista_7060_cx32s/Arista-7060CX-32S-Q32/qos.json
+++ b/device/dell/x86_64-dell_z9100_c2538-r0/Force10-Z9100/qos.json.j2
@@ -127,35 +127,23 @@
}
},
"WRED_PROFILE": {
- "AZURE_LOSSY" : {
- "wred_green_enable":"true",
- "wred_yellow_enable":"true",
- "ecn":"ecn_all",
- "red_max_threshold":"512000",
- "red_min_threshold":"512000",
- "yellow_max_threshold":"512000",
- "yellow_min_threshold":"512000",
- "green_max_threshold": "184320",
- "green_min_threshold": "184320"
- },
"AZURE_LOSSLESS" : {
"wred_green_enable":"true",
"wred_yellow_enable":"true",
+ "wred_red_enable":"true",
"ecn":"ecn_all",
- "red_max_threshold":"512000",
- "red_min_threshold":"512000",
- "yellow_max_threshold":"512000",
- "yellow_min_threshold":"512000",
- "green_max_threshold": "184320",
- "green_min_threshold": "184320"
+ "red_max_threshold":"312000",
+ "red_min_threshold":"104000",
+ "yellow_max_threshold":"312000",
+ "yellow_min_threshold":"104000",
+ "green_max_threshold": "312000",
+ "green_min_threshold": "104000"
}
},
"QUEUE": {
- "Ethernet0,Ethernet4,Ethernet8,Ethernet12,Ethernet16,Ethernet20,Ethernet24,Ethernet28,Ethernet32,Ethernet36,Ethernet40,Ethernet44,Ethernet48,Ethernet52,Ethernet56,Ethernet60,Ethernet64,Ethernet68,Ethernet72,Ethernet76,Ethernet80,Ethernet84,Ethernet88,Ethernet92,Ethernet96,Ethernet100,Ethernet104,Ethernet108,Ethernet112,Ethernet116,Ethernet120,Ethernet124|0-1" : {
- "wred_profile" : "[WRED_PROFILE|AZURE_LOSSY]"
- },
"Ethernet0,Ethernet4,Ethernet8,Ethernet12,Ethernet16,Ethernet20,Ethernet24,Ethernet28,Ethernet32,Ethernet36,Ethernet40,Ethernet44,Ethernet48,Ethernet52,Ethernet56,Ethernet60,Ethernet64,Ethernet68,Ethernet72,Ethernet76,Ethernet80,Ethernet84,Ethernet88,Ethernet92,Ethernet96,Ethernet100,Ethernet104,Ethernet108,Ethernet112,Ethernet116,Ethernet120,Ethernet124|3-4" : {
- "scheduler" : "[SCHEDULER|scheduler.0]"
+ "scheduler" : "[SCHEDULER|scheduler.0]",
+ "wred_profile" : "[WRED_PROFILE|AZURE_LOSSLESS]"
},
"Ethernet0,Ethernet4,Ethernet8,Ethernet12,Ethernet16,Ethernet20,Ethernet24,Ethernet28,Ethernet32,Ethernet36,Ethernet40,Ethernet44,Ethernet48,Ethernet52,Ethernet56,Ethernet60,Ethernet64,Ethernet68,Ethernet72,Ethernet76,Ethernet80,Ethernet84,Ethernet88,Ethernet92,Ethernet96,Ethernet100,Ethernet104,Ethernet108,Ethernet112,Ethernet116,Ethernet120,Ethernet124|0" : {
"scheduler" : "[SCHEDULER|scheduler.1]"
diff --git a/device/ingrasys/x86_64-ingrasys_s9130_32x-r0/INGRASYS-S9130-32X/qos.json b/device/ingrasys/x86_64-ingrasys_s9130_32x-r0/INGRASYS-S9130-32X/qos.json.j2
similarity index 100%
rename from device/ingrasys/x86_64-ingrasys_s9130_32x-r0/INGRASYS-S9130-32X/qos.json
rename to device/ingrasys/x86_64-ingrasys_s9130_32x-r0/INGRASYS-S9130-32X/qos.json.j2
diff --git a/device/ingrasys/x86_64-ingrasys_s9230_64x-r0/INGRASYS-S9230-64X/qos.json b/device/ingrasys/x86_64-ingrasys_s9230_64x-r0/INGRASYS-S9230-64X/qos.json.j2
similarity index 100%
rename from device/ingrasys/x86_64-ingrasys_s9230_64x-r0/INGRASYS-S9230-64X/qos.json
rename to device/ingrasys/x86_64-ingrasys_s9230_64x-r0/INGRASYS-S9230-64X/qos.json.j2
diff --git a/device/mellanox/x86_64-mlnx_lssn2700-r0/LS-SN2700/qos.json b/device/mellanox/x86_64-mlnx_lssn2700-r0/LS-SN2700/qos.json.j2
similarity index 100%
rename from device/mellanox/x86_64-mlnx_lssn2700-r0/LS-SN2700/qos.json
rename to device/mellanox/x86_64-mlnx_lssn2700-r0/LS-SN2700/qos.json.j2
diff --git a/device/mellanox/x86_64-mlnx_msn2100-r0/ACS-MSN2100/qos.json b/device/mellanox/x86_64-mlnx_msn2100-r0/ACS-MSN2100/qos.json.j2
similarity index 100%
rename from device/mellanox/x86_64-mlnx_msn2100-r0/ACS-MSN2100/qos.json
rename to device/mellanox/x86_64-mlnx_msn2100-r0/ACS-MSN2100/qos.json.j2
diff --git a/device/mellanox/x86_64-mlnx_msn2410-r0/ACS-MSN2410/qos.json b/device/mellanox/x86_64-mlnx_msn2410-r0/ACS-MSN2410/qos.json.j2
similarity index 100%
rename from device/mellanox/x86_64-mlnx_msn2410-r0/ACS-MSN2410/qos.json
rename to device/mellanox/x86_64-mlnx_msn2410-r0/ACS-MSN2410/qos.json.j2
diff --git a/device/mellanox/x86_64-mlnx_msn2700-r0/ACS-MSN2700/qos.json b/device/mellanox/x86_64-mlnx_msn2700-r0/ACS-MSN2700/qos.json.j2
similarity index 100%
rename from device/mellanox/x86_64-mlnx_msn2700-r0/ACS-MSN2700/qos.json
rename to device/mellanox/x86_64-mlnx_msn2700-r0/ACS-MSN2700/qos.json.j2
diff --git a/device/mellanox/x86_64-mlnx_msn2700-r0/Mellanox-SN2700-D48C8/qos.json b/device/mellanox/x86_64-mlnx_msn2700-r0/Mellanox-SN2700-D48C8/qos.json.j2
similarity index 100%
rename from device/mellanox/x86_64-mlnx_msn2700-r0/Mellanox-SN2700-D48C8/qos.json
rename to device/mellanox/x86_64-mlnx_msn2700-r0/Mellanox-SN2700-D48C8/qos.json.j2
diff --git a/device/mellanox/x86_64-mlnx_msn2740-r0/ACS-MSN2740/qos.json b/device/mellanox/x86_64-mlnx_msn2740-r0/ACS-MSN2740/qos.json
deleted file mode 120000
index ae738e606a9d..000000000000
--- a/device/mellanox/x86_64-mlnx_msn2740-r0/ACS-MSN2740/qos.json
+++ /dev/null
@@ -1 +0,0 @@
-../../x86_64-mlnx_msn2700-r0/ACS-MSN2700/qos.json
\ No newline at end of file
diff --git a/device/mellanox/x86_64-mlnx_msn2740-r0/ACS-MSN2740/qos.json.j2 b/device/mellanox/x86_64-mlnx_msn2740-r0/ACS-MSN2740/qos.json.j2
new file mode 120000
index 000000000000..eccf286dc879
--- /dev/null
+++ b/device/mellanox/x86_64-mlnx_msn2740-r0/ACS-MSN2740/qos.json.j2
@@ -0,0 +1 @@
+../../x86_64-mlnx_msn2700-r0/ACS-MSN2700/qos.json.j2
\ No newline at end of file
diff --git a/dockers/docker-base/etc/rsyslog.conf b/dockers/docker-base/etc/rsyslog.conf
index 8cd8928e2b14..cf5509a3e8b3 100644
--- a/dockers/docker-base/etc/rsyslog.conf
+++ b/dockers/docker-base/etc/rsyslog.conf
@@ -29,8 +29,10 @@ $ModLoad imuxsock # provides support for local system logging
###########################
#### GLOBAL DIRECTIVES ####
###########################
-#Set remote syslog server
-*.* @127.0.0.1:514
+
+# Set remote syslog server
+template (name="ForwardFormatInContainer" type="string" string="<%PRI%>%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag%%msg:::sp-if-no-1st-sp%%msg%")
+*.* action(type="omfwd" target="127.0.0.1" port="514" protocol="udp" Template="ForwardFormatInContainer")
#
# Use traditional timestamp format.
diff --git a/dockers/docker-database/Dockerfile.j2 b/dockers/docker-database/Dockerfile.j2
index 4690e1587c14..712ada91a904 100644
--- a/dockers/docker-database/Dockerfile.j2
+++ b/dockers/docker-database/Dockerfile.j2
@@ -1,5 +1,8 @@
FROM docker-config-engine
+ARG docker_container_name
+RUN [ -f /etc/rsyslog.conf ] && sed -ri "s/%syslogtag%/$docker_container_name\/%syslogtag%/;" /etc/rsyslog.conf
+
# Make apt-get non-interactive
ENV DEBIAN_FRONTEND=noninteractive
diff --git a/dockers/docker-dhcp-relay/Dockerfile.j2 b/dockers/docker-dhcp-relay/Dockerfile.j2
index 2c2bdcaecbf7..7382664c64f3 100644
--- a/dockers/docker-dhcp-relay/Dockerfile.j2
+++ b/dockers/docker-dhcp-relay/Dockerfile.j2
@@ -1,5 +1,8 @@
FROM docker-config-engine
+ARG docker_container_name
+RUN [ -f /etc/rsyslog.conf ] && sed -ri "s/%syslogtag%/$docker_container_name\/%syslogtag%/;" /etc/rsyslog.conf
+
# Make apt-get non-interactive
ENV DEBIAN_FRONTEND=noninteractive
diff --git a/dockers/docker-fpm-frr/Dockerfile.j2 b/dockers/docker-fpm-frr/Dockerfile.j2
index 332a0cdd508d..4796552d20c7 100644
--- a/dockers/docker-fpm-frr/Dockerfile.j2
+++ b/dockers/docker-fpm-frr/Dockerfile.j2
@@ -1,26 +1,34 @@
FROM docker-config-engine
-## Make apt-get non-interactive
+ARG docker_container_name
+RUN [ -f /etc/rsyslog.conf ] && sed -ri "s/%syslogtag%/$docker_container_name\/%syslogtag%/;" /etc/rsyslog.conf
+
+# Make apt-get non-interactive
ENV DEBIAN_FRONTEND=noninteractive
+# Update apt's cache of available packages
RUN apt-get update
+# Install required packages
RUN apt-get install -y libdbus-1-3 libdaemon0 libjansson4 libc-ares2 iproute
-COPY \
-{% for deb in docker_fpm_frr_debs.split(' ') -%}
-debs/{{ deb }}{{' '}}
-{%- endfor -%}
-debs/
+{% if docker_fpm_frr_debs.strip() -%}
+# Copy locally-built Debian package dependencies
+{%- for deb in docker_fpm_frr_debs.split(' ') %}
+COPY debs/{{ deb }} /debs/
+{%- endfor %}
-RUN dpkg -i \
-{% for deb in docker_fpm_frr_debs.split(' ') -%}
-debs/{{ deb }}{{' '}}
+# Install locally-built Debian packages and implicitly install their dependencies
+{%- for deb in docker_fpm_frr_debs.split(' ') %}
+RUN dpkg_apt() { [ -f $1 ] && { dpkg -i $1 || apt-get -y install -f; } || return 1; }; dpkg_apt /debs/{{ deb }}
{%- endfor %}
+{%- endif %}
-## Clean up
-RUN apt-get clean -y; apt-get autoclean -y; apt-get autoremove -y
-RUN rm -rf /debs
+# Clean up
+RUN apt-get clean -y
+RUN apt-get autoclean -y
+RUN apt-get autoremove -y
+RUN rm -rf /debs ~/.cache
COPY ["*.j2", "/usr/share/sonic/templates/"]
COPY ["start.sh", "config.sh", "/usr/bin/"]
diff --git a/dockers/docker-fpm-frr/base_image_files/vtysh b/dockers/docker-fpm-frr/base_image_files/vtysh
index 8f8cb2e67960..24016bd96b2c 100755
--- a/dockers/docker-fpm-frr/base_image_files/vtysh
+++ b/dockers/docker-fpm-frr/base_image_files/vtysh
@@ -1,10 +1,16 @@
#!/bin/bash
-DOCKER_EXEC_FLAGS="i"
-
# Determine whether stdout is on a terminal
if [ -t 1 ] ; then
- DOCKER_EXEC_FLAGS+="t"
+ # Prepare a function to send HUP signal to vtysh in the container
+ # we mark the new instance of vtysh with the current tty as a tag
+ TTY=$(tty)
+ function cleanup
+ {
+ docker exec -i bgp pkill -HUP -f "vtysh $TTY"
+ }
+ trap cleanup HUP
+ docker exec -ti bgp vtysh "$TTY" "$@"
+else
+ docker exec -i bgp vtysh "$@"
fi
-
-docker exec -$DOCKER_EXEC_FLAGS bgp vtysh "$@"
diff --git a/dockers/docker-fpm-frr/isolate.j2 b/dockers/docker-fpm-frr/isolate.j2
index 7b7fecf9fa9e..cfcd023ea1f3 100755
--- a/dockers/docker-fpm-frr/isolate.j2
+++ b/dockers/docker-fpm-frr/isolate.j2
@@ -5,7 +5,7 @@ sed -n -e '9,$p' < "$0" | vtysh "$@"
## Exit with vtysh return code
exit $?
-## vtysh script start from next line, which line number MUST eqaul in 'sed' command above
+## vtysh script start from next line, which line number MUST equal in 'sed' command above
configure terminal
router bgp {{ DEVICE_METADATA['localhost']['bgp_asn'] }}
diff --git a/dockers/docker-fpm-frr/unisolate.j2 b/dockers/docker-fpm-frr/unisolate.j2
index f2129556747b..2a0780745d75 100755
--- a/dockers/docker-fpm-frr/unisolate.j2
+++ b/dockers/docker-fpm-frr/unisolate.j2
@@ -5,7 +5,7 @@ sed -n -e '9,$p' < "$0" | vtysh "$@"
## Exit with vtysh return code
exit $?
-## vtysh script start from next line, which line number MUST eqaul in 'sed' command above
+## vtysh script start from next line, which line number MUST equal in 'sed' command above
configure terminal
router bgp {{ DEVICE_METADATA['localhost']['bgp_asn'] }}
diff --git a/dockers/docker-fpm-quagga/Dockerfile.j2 b/dockers/docker-fpm-quagga/Dockerfile.j2
index 8836459e4e93..39037f3d042d 100644
--- a/dockers/docker-fpm-quagga/Dockerfile.j2
+++ b/dockers/docker-fpm-quagga/Dockerfile.j2
@@ -1,5 +1,8 @@
FROM docker-config-engine
+ARG docker_container_name
+RUN [ -f /etc/rsyslog.conf ] && sed -ri "s/%syslogtag%/$docker_container_name\/%syslogtag%/;" /etc/rsyslog.conf
+
# Make apt-get non-interactive
ENV DEBIAN_FRONTEND=noninteractive
diff --git a/dockers/docker-fpm-quagga/base_image_files/vtysh b/dockers/docker-fpm-quagga/base_image_files/vtysh
index 8f8cb2e67960..24016bd96b2c 100755
--- a/dockers/docker-fpm-quagga/base_image_files/vtysh
+++ b/dockers/docker-fpm-quagga/base_image_files/vtysh
@@ -1,10 +1,16 @@
#!/bin/bash
-DOCKER_EXEC_FLAGS="i"
-
# Determine whether stdout is on a terminal
if [ -t 1 ] ; then
- DOCKER_EXEC_FLAGS+="t"
+ # Prepare a function to send HUP signal to vtysh in the container
+ # we mark the new instance of vtysh with the current tty as a tag
+ TTY=$(tty)
+ function cleanup
+ {
+ docker exec -i bgp pkill -HUP -f "vtysh $TTY"
+ }
+ trap cleanup HUP
+ docker exec -ti bgp vtysh "$TTY" "$@"
+else
+ docker exec -i bgp vtysh "$@"
fi
-
-docker exec -$DOCKER_EXEC_FLAGS bgp vtysh "$@"
diff --git a/dockers/docker-fpm-quagga/bgpd.conf.j2 b/dockers/docker-fpm-quagga/bgpd.conf.j2
index 1adb660ec00a..ee3aba2c23c3 100644
--- a/dockers/docker-fpm-quagga/bgpd.conf.j2
+++ b/dockers/docker-fpm-quagga/bgpd.conf.j2
@@ -78,6 +78,7 @@ router bgp {{ DEVICE_METADATA['localhost']['bgp_asn'] }}
neighbor {{ neighbor_addr }} allowas-in 1
{% endif %}
neighbor {{ neighbor_addr }} activate
+ neighbor {{ neighbor_addr }} soft-reconfiguration inbound
maximum-paths 64
exit-address-family
{% endif %}
@@ -87,6 +88,7 @@ router bgp {{ DEVICE_METADATA['localhost']['bgp_asn'] }}
neighbor {{ neighbor_addr }} allowas-in 1
{% endif %}
neighbor {{ neighbor_addr }} activate
+ neighbor {{ neighbor_addr }} soft-reconfiguration inbound
maximum-paths 64
exit-address-family
{% endif %}
diff --git a/dockers/docker-fpm-quagga/isolate.j2 b/dockers/docker-fpm-quagga/isolate.j2
index 7b7fecf9fa9e..cfcd023ea1f3 100755
--- a/dockers/docker-fpm-quagga/isolate.j2
+++ b/dockers/docker-fpm-quagga/isolate.j2
@@ -5,7 +5,7 @@ sed -n -e '9,$p' < "$0" | vtysh "$@"
## Exit with vtysh return code
exit $?
-## vtysh script start from next line, which line number MUST eqaul in 'sed' command above
+## vtysh script start from next line, which line number MUST equal in 'sed' command above
configure terminal
router bgp {{ DEVICE_METADATA['localhost']['bgp_asn'] }}
diff --git a/dockers/docker-fpm-quagga/unisolate.j2 b/dockers/docker-fpm-quagga/unisolate.j2
index f2129556747b..2a0780745d75 100755
--- a/dockers/docker-fpm-quagga/unisolate.j2
+++ b/dockers/docker-fpm-quagga/unisolate.j2
@@ -5,7 +5,7 @@ sed -n -e '9,$p' < "$0" | vtysh "$@"
## Exit with vtysh return code
exit $?
-## vtysh script start from next line, which line number MUST eqaul in 'sed' command above
+## vtysh script start from next line, which line number MUST equal in 'sed' command above
configure terminal
router bgp {{ DEVICE_METADATA['localhost']['bgp_asn'] }}
diff --git a/dockers/docker-lldp-sv2/Dockerfile.j2 b/dockers/docker-lldp-sv2/Dockerfile.j2
index f75e4ea31422..fb91af231592 100644
--- a/dockers/docker-lldp-sv2/Dockerfile.j2
+++ b/dockers/docker-lldp-sv2/Dockerfile.j2
@@ -1,5 +1,8 @@
FROM docker-config-engine
+ARG docker_container_name
+RUN [ -f /etc/rsyslog.conf ] && sed -ri "s/%syslogtag%/$docker_container_name\/%syslogtag%/;" /etc/rsyslog.conf
+
# Make apt-get non-interactive
ENV DEBIAN_FRONTEND=noninteractive
diff --git a/dockers/docker-orchagent/Dockerfile.j2 b/dockers/docker-orchagent/Dockerfile.j2
index 3d6671996358..0df8e9ba1bb4 100755
--- a/dockers/docker-orchagent/Dockerfile.j2
+++ b/dockers/docker-orchagent/Dockerfile.j2
@@ -1,5 +1,8 @@
FROM docker-config-engine
+ARG docker_container_name
+RUN [ -f /etc/rsyslog.conf ] && sed -ri "s/%syslogtag%/$docker_container_name\/%syslogtag%/;" /etc/rsyslog.conf
+
## Make apt-get non-interactive
ENV DEBIAN_FRONTEND=noninteractive
diff --git a/dockers/docker-orchagent/supervisord.conf b/dockers/docker-orchagent/supervisord.conf
index 84beaed440a3..dc28e3369ca5 100644
--- a/dockers/docker-orchagent/supervisord.conf
+++ b/dockers/docker-orchagent/supervisord.conf
@@ -61,10 +61,10 @@ stdout_logfile=syslog
stderr_logfile=syslog
[program:arp_update]
-command=bash -c "/usr/bin/arp_update; sleep 300"
+command=/usr/bin/arp_update
priority=8
autostart=false
-autorestart=true
+autorestart=unexpected
stdout_logfile=syslog
stderr_logfile=syslog
diff --git a/dockers/docker-platform-monitor/Dockerfile.j2 b/dockers/docker-platform-monitor/Dockerfile.j2
index 95e9d150ea2c..c53ed494c474 100755
--- a/dockers/docker-platform-monitor/Dockerfile.j2
+++ b/dockers/docker-platform-monitor/Dockerfile.j2
@@ -1,5 +1,8 @@
FROM docker-config-engine
+ARG docker_container_name
+RUN [ -f /etc/rsyslog.conf ] && sed -ri "s/%syslogtag%/$docker_container_name\/%syslogtag%/;" /etc/rsyslog.conf
+
# Make apt-get non-interactive
ENV DEBIAN_FRONTEND=noninteractive
diff --git a/dockers/docker-router-advertiser/Dockerfile.j2 b/dockers/docker-router-advertiser/Dockerfile.j2
index 5007daf122cf..c6c770bb7677 100644
--- a/dockers/docker-router-advertiser/Dockerfile.j2
+++ b/dockers/docker-router-advertiser/Dockerfile.j2
@@ -1,5 +1,8 @@
FROM docker-config-engine
+ARG docker_container_name
+RUN [ -f /etc/rsyslog.conf ] && sed -ri "s/%syslogtag%/$docker_container_name\/%syslogtag%/;" /etc/rsyslog.conf
+
# Make apt-get non-interactive
ENV DEBIAN_FRONTEND=noninteractive
diff --git a/dockers/docker-snmp-sv2/Dockerfile.j2 b/dockers/docker-snmp-sv2/Dockerfile.j2
index 2605e9b50c2d..e463d00441c7 100644
--- a/dockers/docker-snmp-sv2/Dockerfile.j2
+++ b/dockers/docker-snmp-sv2/Dockerfile.j2
@@ -1,5 +1,8 @@
FROM docker-config-engine
+ARG docker_container_name
+RUN [ -f /etc/rsyslog.conf ] && sed -ri "s/%syslogtag%/$docker_container_name\/%syslogtag%/;" /etc/rsyslog.conf
+
# Enable -O for all Python calls
ENV PYTHONOPTIMIZE 1
diff --git a/dockers/docker-sonic-mgmt/Dockerfile.j2 b/dockers/docker-sonic-mgmt/Dockerfile.j2
index 9396c7e56c0c..cd2fd5ff37dd 100644
--- a/dockers/docker-sonic-mgmt/Dockerfile.j2
+++ b/dockers/docker-sonic-mgmt/Dockerfile.j2
@@ -30,6 +30,8 @@ RUN apt-get install -y rsyslog psmisc
# Remove cffi 1.5.2, will install 1.10.0 by pip later
RUN apt-get remove -y python-cffi python-cffi-backend
+# Remove pycparser 2.14, will install >=2.17 by pip later
+RUN apt-get remove -y python-ply python-pycparser
RUN easy_install pip
diff --git a/dockers/docker-sonic-telemetry/Dockerfile.j2 b/dockers/docker-sonic-telemetry/Dockerfile.j2
index bbb15db69aaa..51d272c2a212 100644
--- a/dockers/docker-sonic-telemetry/Dockerfile.j2
+++ b/dockers/docker-sonic-telemetry/Dockerfile.j2
@@ -1,5 +1,8 @@
FROM docker-config-engine
+ARG docker_container_name
+RUN [ -f /etc/rsyslog.conf ] && sed -ri "s/%syslogtag%/$docker_container_name\/%syslogtag%/;" /etc/rsyslog.conf
+
## Make apt-get non-interactive
ENV DEBIAN_FRONTEND=noninteractive
diff --git a/dockers/docker-teamd/Dockerfile.j2 b/dockers/docker-teamd/Dockerfile.j2
index f604433a6c3f..f405fdde10e2 100644
--- a/dockers/docker-teamd/Dockerfile.j2
+++ b/dockers/docker-teamd/Dockerfile.j2
@@ -1,5 +1,8 @@
FROM docker-config-engine
+ARG docker_container_name
+RUN [ -f /etc/rsyslog.conf ] && sed -ri "s/%syslogtag%/$docker_container_name\/%syslogtag%/;" /etc/rsyslog.conf
+
## Make apt-get non-interactive
ENV DEBIAN_FRONTEND=noninteractive
diff --git a/files/Aboot/boot0.j2 b/files/Aboot/boot0.j2
index ee77746676e0..ab2cdedb6383 100644
--- a/files/Aboot/boot0.j2
+++ b/files/Aboot/boot0.j2
@@ -169,6 +169,11 @@ platform_specific() {
aboot_machine=arista_7260cx3_64
flash_size=28000
fi
+ if [ "$sid" = "Alhambra" ] || [ "$sid" = "AlhambraSsd" ]; then
+ aboot_machine=arista_7170_64c
+ flash_size=28000
+ echo "hugepages=128" >> /tmp/append
+ fi
if [ "$platform" = "rook" ]; then
if [ -x /bin/readprefdl ]; then
readprefdl -f /tmp/.system-prefdl -d > /mnt/flash/.system-prefdl
@@ -176,6 +181,7 @@ platform_specific() {
cp /etc/prefdl /mnt/flash/.system-prefdl
chmod a+r /mnt/flash/.system-prefdl
fi
+ echo "reassign_prefmem" >> /tmp/append
fi
if [ $flash_size -ge 28000 ]; then
diff --git a/files/build_templates/buffers_config.j2 b/files/build_templates/buffers_config.j2
index 20019d20afae..23503017f179 100644
--- a/files/build_templates/buffers_config.j2
+++ b/files/build_templates/buffers_config.j2
@@ -90,11 +90,20 @@ def
{%- endfor %}
{%- endif %}
-{%- set port_names_list_all = [] %}
-{%- for port in PORT_ALL %}
- {%- if port_names_list_all.append(port) %}{%- endif %}
+{%- 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 %}
+
+{%- set port_names_list_active = [] %}
+{%- for port in PORT_ACTIVE %}
+ {%- if port_names_list_active.append(port) %}{%- endif %}
{%- endfor %}
-{%- set port_names_all = port_names_list_all | join(',') %}
+{%- set port_names_active = port_names_list_active | join(',') %}
{
"CABLE_LENGTH": {
@@ -112,27 +121,27 @@ def
{% endif %}
{%- if defs.generate_profile_lists is defined %}
-{{ defs.generate_profile_lists(port_names_all) }},
+{{ defs.generate_profile_lists(port_names_active) }},
{% endif %}
{%- if defs.generate_pg_profils is defined %}
{{ defs.generate_pg_profils }},
{% else %}
"BUFFER_PG": {
- "{{ port_names_all }}|0-1": {
+ "{{ port_names_active }}|0-1": {
"profile" : "[BUFFER_PROFILE|ingress_lossy_profile]"
}
},
{% endif %}
{% if defs.generate_queue_buffers is defined %}
-{{ defs.generate_queue_buffers(port_names_all) }}
+{{ defs.generate_queue_buffers(port_names_active) }}
{% else %}
"BUFFER_QUEUE": {
- "{{ port_names_all }}|3-4": {
+ "{{ port_names_active }}|3-4": {
"profile" : "[BUFFER_PROFILE|egress_lossless_profile]"
},
- "{{ port_names_all }}|0-1": {
+ "{{ port_names_active }}|0-1": {
"profile" : "[BUFFER_PROFILE|egress_lossy_profile]"
}
}
diff --git a/files/build_templates/enable_counters.service b/files/build_templates/enable_counters.service
new file mode 100644
index 000000000000..95424474cb15
--- /dev/null
+++ b/files/build_templates/enable_counters.service
@@ -0,0 +1,8 @@
+[Unit]
+Description=Enable SONiC counters
+PartOf=swss.service
+
+[Service]
+Type=oneshot
+ExecStart=/bin/bash -c 'sleep 60 ; /usr/bin/counterpoll queue enable ; /usr/bin/counterpoll port enable ; /usr/bin/pfcwd counter_poll enable'
+RemainAfterExit=yes
diff --git a/files/build_templates/enable_counters.timer b/files/build_templates/enable_counters.timer
new file mode 100644
index 000000000000..40a91525a712
--- /dev/null
+++ b/files/build_templates/enable_counters.timer
@@ -0,0 +1,9 @@
+[Unit]
+Description=Delays the SONiC counters gathering until SONiC has started
+
+[Timer]
+OnBootSec=2min
+Unit=enable_counters.service
+
+[Install]
+WantedBy=timers.target
diff --git a/files/build_templates/snmp.service.j2 b/files/build_templates/snmp.service.j2
index f0612a9cfcb6..93ef869b86e1 100644
--- a/files/build_templates/snmp.service.j2
+++ b/files/build_templates/snmp.service.j2
@@ -1,12 +1,9 @@
[Unit]
Description=SNMP container
-Requires=updategraph.service swss.service
-After=updategraph.service swss.service
+Requires=updategraph.service swss.service enable_counters.service
+After=updategraph.service swss.service enable_counters.service
[Service]
ExecStartPre=/usr/bin/{{docker_container_name}}.sh start
ExecStart=/usr/bin/{{docker_container_name}}.sh attach
ExecStop=/usr/bin/{{docker_container_name}}.sh stop
-
-[Install]
-WantedBy=multi-user.target
diff --git a/files/build_templates/snmp.timer b/files/build_templates/snmp.timer
new file mode 100644
index 000000000000..464cf01459ba
--- /dev/null
+++ b/files/build_templates/snmp.timer
@@ -0,0 +1,9 @@
+[Unit]
+Description=Delays snmp container until SONiC has started
+
+[Timer]
+OnBootSec=3min 30 sec
+Unit=snmp.service
+
+[Install]
+WantedBy=timers.target
diff --git a/files/build_templates/sonic_debian_extension.j2 b/files/build_templates/sonic_debian_extension.j2
index d0afa4659667..ad22394ff000 100644
--- a/files/build_templates/sonic_debian_extension.j2
+++ b/files/build_templates/sonic_debian_extension.j2
@@ -58,6 +58,7 @@ sudo cp $IMAGE_CONFIGS/environment/motd $FILESYSTEM_ROOT/etc/
# Create all needed directories
sudo mkdir -p $FILESYSTEM_ROOT/etc/sonic/
+sudo mkdir -p $FILESYSTEM_ROOT/var/cache/sonic/
sudo mkdir -p $FILESYSTEM_ROOT_USR_SHARE_SONIC_TEMPLATES/
# Install dependencies for SONiC config engine
@@ -89,6 +90,12 @@ sudo cp {{platform_common_py2_wheel_path}} $FILESYSTEM_ROOT/$PLATFORM_COMMON_PY2
sudo https_proxy=$https_proxy LANG=C chroot $FILESYSTEM_ROOT pip install $PLATFORM_COMMON_PY2_WHEEL_NAME
sudo rm -rf $FILESYSTEM_ROOT/$PLATFORM_COMMON_PY2_WHEEL_NAME
+# Install built Python Click package (and its dependencies via 'apt-get -y install -f')
+# Do this before installing sonic-utilities so that it doesn't attempt to install
+# an older version as part of its dependencies
+sudo dpkg --root=$FILESYSTEM_ROOT -i target/debs/python-click*_all.deb || \
+ sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y install -f
+
# Install SONiC Utilities (and its dependencies via 'apt-get -y install -f')
sudo dpkg --root=$FILESYSTEM_ROOT -i target/debs/python-sonic-utilities_*.deb || \
sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y install -f
@@ -179,6 +186,7 @@ sudo cp $IMAGE_CONFIGS/asn/deployment_id_asn_map.yml $FILESYSTEM_ROOT/etc/sonic/
# Copy sudoers configuration file
sudo cp $IMAGE_CONFIGS/sudoers/sudoers $FILESYSTEM_ROOT/etc/
+sudo cp $IMAGE_CONFIGS/sudoers/sudoers.lecture $FILESYSTEM_ROOT/etc/
# Copy control plane ACL management daemon files
sudo cp $IMAGE_CONFIGS/caclmgrd/caclmgrd.service $FILESYSTEM_ROOT/etc/systemd/system/
@@ -275,6 +283,14 @@ sudo LANG=C chroot $FILESYSTEM_ROOT fuser -km /sys || true
sudo LANG=C chroot $FILESYSTEM_ROOT umount -lf /sys
{% endif %}
+# Copy systemd timer configuration
+# It implements delayed start of services
+sudo cp $BUILD_TEMPLATES/enable_counters.timer $FILESYSTEM_ROOT/etc/systemd/system/
+sudo cp $BUILD_TEMPLATES/enable_counters.service $FILESYSTEM_ROOT/etc/systemd/system/
+sudo cp $BUILD_TEMPLATES/snmp.timer $FILESYSTEM_ROOT/etc/systemd/system/
+sudo LANG=C chroot $FILESYSTEM_ROOT systemctl enable enable_counters.timer
+sudo LANG=C chroot $FILESYSTEM_ROOT systemctl enable snmp.timer
+
sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get remove -y python-dev
sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get clean -y
sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get autoremove -y
diff --git a/files/image_config/caclmgrd/caclmgrd b/files/image_config/caclmgrd/caclmgrd
index 0dc59766b3d5..a7ec952ca21f 100755
--- a/files/image_config/caclmgrd/caclmgrd
+++ b/files/image_config/caclmgrd/caclmgrd
@@ -89,6 +89,32 @@ class ControlPlaneAclManager(object):
if proc.returncode != 0:
log_error("Error running command '{}'".format(cmd))
+ def parse_int_to_tcp_flags(self, hex_value):
+ tcp_flags_str = ""
+ if hex_value & 0x01:
+ tcp_flags_str += "FIN,"
+ if hex_value & 0x02:
+ tcp_flags_str += "SYN,"
+ if hex_value & 0x04:
+ tcp_flags_str += "RST,"
+ if hex_value & 0x08:
+ tcp_flags_str += "PSH,"
+ if hex_value & 0x10:
+ tcp_flags_str += "ACK,"
+ if hex_value & 0x20:
+ tcp_flags_str += "URG,"
+ # iptables doesn't handle the flags below now. It has some special keys for it:
+ # --ecn-tcp-cwr This matches if the TCP ECN CWR (Congestion Window Received) bit is set.
+ # --ecn-tcp-ece This matches if the TCP ECN ECE (ECN Echo) bit is set.
+ # if hex_value & 0x40:
+ # tcp_flags_str += "ECE,"
+ # if hex_value & 0x80:
+ # tcp_flags_str += "CWR,"
+
+ # Delete the trailing comma
+ tcp_flags_str = tcp_flags_str[:-1]
+ return tcp_flags_str
+
def get_acl_rules_and_translate_to_iptables_commands(self):
"""
Retrieves current ACL tables and rules from Config DB, translates
@@ -121,6 +147,10 @@ class ControlPlaneAclManager(object):
iptables_cmds.append("ip6tables -F")
iptables_cmds.append("ip6tables -X")
+ # Add iptables commands to allow all IPv4 and IPv6 traffic from localhost
+ iptables_cmds.append("iptables -A INPUT -s 127.0.0.1 -i lo -j ACCEPT")
+ iptables_cmds.append("ip6tables -A INPUT -s ::1 -i lo -j ACCEPT")
+
# Get current ACL tables and rules from Config DB
self._tables_db_info = self.config_db.get_table(self.ACL_TABLE)
self._rules_db_info = self.config_db.get_table(self.ACL_RULE)
@@ -191,32 +221,15 @@ class ControlPlaneAclManager(object):
rule_cmd += " --dport {}".format(dst_port)
- # If there are TCP flags present, append them
- if "TCP_FLAGS" in rule_props and rule_props["TCP_FLAGS"]:
- tcp_flags = int(rule_props["TCP_FLAGS"], 16)
-
- if tcp_flags > 0:
- rule_cmd += " --tcp-flags "
-
- if tcp_flags & 0x01:
- rule_cmd += "FIN,"
- if tcp_flags & 0x02:
- rule_cmd += "SYN,"
- if tcp_flags & 0x04:
- rule_cmd += "RST,"
- if tcp_flags & 0x08:
- rule_cmd += "PSH,"
- if tcp_flags & 0x10:
- rule_cmd += "ACK,"
- if tcp_flags & 0x20:
- rule_cmd += "URG,"
- if tcp_flags & 0x40:
- rule_cmd += "ECE,"
- if tcp_flags & 0x80:
- rule_cmd += "CWR,"
-
- # Delete the trailing comma
- rule_cmd = rule_cmd[:-1]
+ # If there are TCP flags present and ip protocol is TCP, append them
+ if ip_protocol == "tcp" and "TCP_FLAGS" in rule_props and rule_props["TCP_FLAGS"]:
+ tcp_flags, tcp_flags_mask = rule_props["TCP_FLAGS"].split("/")
+
+ tcp_flags = int(tcp_flags, 16)
+ tcp_flags_mask = int(tcp_flags_mask, 16)
+
+ if tcp_flags_mask > 0:
+ rule_cmd += " --tcp-flags {mask} {flags}".format(mask = self.parse_int_to_tcp_flags(tcp_flags_mask), flags = self.parse_int_to_tcp_flags(tcp_flags))
# Append the packet action as the jump target
rule_cmd += " -j {}".format(rule_props["PACKET_ACTION"])
diff --git a/files/image_config/interfaces/interfaces-config.sh b/files/image_config/interfaces/interfaces-config.sh
index 75660e713e7f..a702917419ca 100755
--- a/files/image_config/interfaces/interfaces-config.sh
+++ b/files/image_config/interfaces/interfaces-config.sh
@@ -1,6 +1,6 @@
#!/bin/bash
-ifdown eth0
+ifdown --force eth0
sonic-cfggen -d -t /usr/share/sonic/templates/interfaces.j2 > /etc/network/interfaces
diff --git a/files/image_config/platform/rc.local b/files/image_config/platform/rc.local
index de54d141ef7e..b99ecdbcee9d 100755
--- a/files/image_config/platform/rc.local
+++ b/files/image_config/platform/rc.local
@@ -11,6 +11,9 @@
#
# By default this script does nothing.
+SONIC_VERSION=$(sonic-cfggen -y /etc/sonic/sonic_version.yml -v build_version)
+FIRST_BOOT_FILE="/host/image-${SONIC_VERSION}/platform/firsttime"
+
# In case the unit is migrating from another NOS, save the logs
log_migration() {
echo $1 >> /host/migration/migration.log
@@ -85,6 +88,51 @@ update_mgmt_interface_macaddr() {
sed -i "/eth0/ s/ATTR{address}==\"$old_mac\"/ATTR{address}==\"$new_mac\"/g" /etc/udev/rules.d/70-persistent-net.rules
}
+firsttime_exit() {
+ rm -rf $FIRST_BOOT_FILE
+ exit 0
+}
+
+# Given a string of tuples of the form field=value, extract the value for a field
+# In : $string, $field
+# Out: $value
+value_extract() {
+ set -- $string
+ for x in "$@"; do
+ case "$x" in
+ $field=*)
+ value="${x#$field=}"
+ esac
+ done
+}
+
+# Set up previous and next reboot cause files
+process_reboot_cause() {
+ REBOOT_CAUSE_FILE="/var/cache/sonic/reboot-cause.txt"
+ PREVIOUS_REBOOT_CAUSE_FILE="/var/cache/sonic/previous-reboot-cause.txt"
+
+ # Set the previous reboot cause accordingly
+ # If this is the first boot after an image install, state that as the
+ # cause. Otherwise, move REBOOT_CAUSE_FILE to PREVIOUS_REBOOT_CAUSE_FILE.
+ # REBOOT_CAUSE_FILE should always exist, but we add the else case
+ # to ensure we always generate PREVIOUS_REBOOT_CAUSE_FILE here
+ if [ -f $FIRST_BOOT_FILE ]; then
+ echo "SONiC image installation" > $PREVIOUS_REBOOT_CAUSE_FILE
+ elif [ -f $REBOOT_CAUSE_FILE ]; then
+ mv -f $REBOOT_CAUSE_FILE $PREVIOUS_REBOOT_CAUSE_FILE
+ else
+ echo "Unknown reboot cause" > $PREVIOUS_REBOOT_CAUSE_FILE
+ fi
+
+ # Set the default cause for the next reboot
+ echo "Unexpected reboot" > $REBOOT_CAUSE_FILE
+}
+
+#### 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
@@ -161,38 +209,16 @@ fi
. /host/machine.conf
-echo "install platform dependent packages at the first boot time"
-
-firsttime_exit()
-{
- rm /host/image-$sonic_version/platform/firsttime
- exit 0
-}
-
-# Given a string of tuples of the form field=value, extract the value for a field
-# In : $string, $field
-# Out: $value
-value_extract()
-{
-set -- $string
-for x in "$@"; do
- case "$x" in
- $field=*)
- value="${x#$field=}"
- esac
-done
-}
-
-eval sonic_version=$(cat /etc/sonic/sonic_version.yml | grep build_version | cut -f2 -d" ")
+if [ -f $FIRST_BOOT_FILE ]; then
-if [ -f /host/image-$sonic_version/platform/firsttime ]; then
+ echo "First boot detected. Performing first boot tasks..."
if [ -n "$aboot_platform" ]; then
platform=$aboot_platform
elif [ -n "$onie_platform" ]; then
platform=$onie_platform
else
- echo "Unknown sonic platform"
+ echo "Unknown SONiC platform"
firsttime_exit
fi
@@ -216,15 +242,15 @@ if [ -f /host/image-$sonic_version/platform/firsttime ]; then
touch /tmp/pending_config_initialization
fi
- if [ -d /host/image-$sonic_version/platform/$platform ]; then
- dpkg -i /host/image-$sonic_version/platform/$platform/*.deb
+ if [ -d /host/image-$SONIC_VERSION/platform/$platform ]; then
+ dpkg -i /host/image-$SONIC_VERSION/platform/$platform/*.deb
fi
# If the unit booted into SONiC from another NOS's grub,
# we now install a grub for SONiC.
if [ -n "$onie_platform" ] && [ -n "$migration" ]; then
- grub_bin=$(ls /host/image-$sonic_version/platform/x86_64-grub/grub-pc-bin*.deb 2> /dev/null)
+ grub_bin=$(ls /host/image-$SONIC_VERSION/platform/x86_64-grub/grub-pc-bin*.deb 2> /dev/null)
if [ -z "$grub_bin" ]; then
log_migration "Unable to locate grub package !"
firsttime_exit
@@ -302,7 +328,7 @@ if [ -f /host/image-$sonic_version/platform/firsttime ]; then
mv /host/grub.cfg /host/grub/grub.cfg
fi
- rm /host/image-$sonic_version/platform/firsttime
+ firsttime_exit
fi
exit 0
diff --git a/files/image_config/sudoers/sudoers b/files/image_config/sudoers/sudoers
index 4d651957afe2..66ca00f9de95 100644
--- a/files/image_config/sudoers/sudoers
+++ b/files/image_config/sudoers/sudoers
@@ -10,6 +10,7 @@ Defaults env_reset
#Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Defaults env_keep += "VTYSH_PAGER"
+Defaults lecture_file = /etc/sudoers.lecture
# Host alias specification
diff --git a/files/image_config/sudoers/sudoers.lecture b/files/image_config/sudoers/sudoers.lecture
new file mode 100644
index 000000000000..e89340092c70
--- /dev/null
+++ b/files/image_config/sudoers/sudoers.lecture
@@ -0,0 +1,4 @@
+
+Make sure your account has RW permission to current device.
+Otherwise sudo requests will be rejected.
+
diff --git a/files/initramfs-tools/arista-convertfs.j2 b/files/initramfs-tools/arista-convertfs.j2
index dfd2fc1d7407..cd3b381aa276 100644
--- a/files/initramfs-tools/arista-convertfs.j2
+++ b/files/initramfs-tools/arista-convertfs.j2
@@ -105,6 +105,7 @@ for x in "$@"; do
loop=*)
x1="${x#loop=}"
image_dir="${x1%/*}"
+ ;;
esac
done
root_dev="$ROOT"
@@ -168,12 +169,14 @@ umount "$root_mnt"
#### Lines below will modify the root file system, so any failure will be trapped to shell for manual interventions.
-# Create a new partition table (content in flash_dev will be deleted)
-err_msg="Error: repartitioning $flash_dev failed"
-cmd="echo ';' | sfdisk $flash_dev || (sleep 3; blockdev --rereadpt $flash_dev && fdisk -l $flash_dev | grep -q ${root_dev}.*Linux)"
-run_cmd "$cmd" "$err_msg"
+if [ $(echo -n "$root_dev" | tail -c 1) == "1" ]; then
+ # Create a new partition table (content in flash_dev will be deleted)
+ err_msg="Error: repartitioning $flash_dev failed"
+ cmd="echo ';' | sfdisk $flash_dev || (sleep 3; blockdev --rereadpt $flash_dev && fdisk -l $flash_dev | grep -q ${root_dev}.*Linux)"
+ run_cmd "$cmd" "$err_msg"
+fi
-sleep 5
+sleep 2
err_msg="Error: timeout in waiting for $root_dev after repartition"
cmd="wait_for_root_dev"
run_cmd "$cmd" "$err_msg"
diff --git a/files/scripts/arp_update b/files/scripts/arp_update
index cfd87c1dc51f..ab44ca6a4580 100755
--- a/files/scripts/arp_update
+++ b/files/scripts/arp_update
@@ -4,14 +4,17 @@
# arp_update: Send gratuitous ARP requests to VLAN member neighbors to refresh
# the neighbors state.
-VLAN=`sonic-cfggen -d -v 'VLAN.keys() | join(" ") if VLAN'`
-for vlan in $VLAN; do
- # generate a list of arping commands:
- # arping -q -w 0 -c 1 -i ;
- # arping -q -w 0 -c 1 -i ;
- # ...
- arpingcmd="sed -e 's/ / -i /' -e 's/^/arping -q -w 0 -c 1 /' -e 's/$/;/'"
- ipcmd="ip -4 neigh show | grep $vlan | cut -d ' ' -f 1,3 | $arpingcmd"
+while /bin/true; do
+ VLAN=`sonic-cfggen -d -v 'VLAN.keys() | join(" ") if VLAN'`
+ for vlan in $VLAN; do
+ # generate a list of arping commands:
+ # arping -q -w 0 -c 1 -i ;
+ # arping -q -w 0 -c 1 -i ;
+ # ...
+ arpingcmd="sed -e 's/ / -i /' -e 's/^/arping -q -w 0 -c 1 /' -e 's/$/;/'"
+ ipcmd="ip -4 neigh show | grep $vlan | cut -d ' ' -f 1,3 | $arpingcmd"
- eval `eval $ipcmd`
+ eval `eval $ipcmd`
+ done
+ sleep 300
done
diff --git a/platform/broadcom/docker-syncd-brcm/Dockerfile.j2 b/platform/broadcom/docker-syncd-brcm/Dockerfile.j2
index 042e7e764fd1..bd6d6cc35706 100755
--- a/platform/broadcom/docker-syncd-brcm/Dockerfile.j2
+++ b/platform/broadcom/docker-syncd-brcm/Dockerfile.j2
@@ -1,5 +1,8 @@
FROM docker-config-engine
+ARG docker_container_name
+RUN [ -f /etc/rsyslog.conf ] && sed -ri "s/%syslogtag%/$docker_container_name\/%syslogtag%/;" /etc/rsyslog.conf
+
## Make apt-get non-interactive
ENV DEBIAN_FRONTEND=noninteractive
diff --git a/platform/broadcom/docker-syncd-brcm/start.sh b/platform/broadcom/docker-syncd-brcm/start.sh
index d2180bce1ed7..cc0a0948e9aa 100755
--- a/platform/broadcom/docker-syncd-brcm/start.sh
+++ b/platform/broadcom/docker-syncd-brcm/start.sh
@@ -18,6 +18,7 @@ else
fi
fi
+rm -f /var/run/sswsyncd/sswsyncd.socket
supervisorctl start syncd
# Function: wait until syncd has created the socket for bcmcmd to connect to
@@ -33,5 +34,6 @@ wait_syncd() {
# If this platform has an initialization file for the Broadcom LED microprocessor, load it
if [ -r ${PLATFORM_DIR}/led_proc_init.soc ]; then
wait_syncd
- /usr/bin/bcmcmd -t 60 "rcload ${PLATFORM_DIR}/led_proc_init.soc"
+ sleep 60 # wait until bcm sdk is ready to get a request
+ supervisorctl start ledinit
fi
diff --git a/platform/broadcom/docker-syncd-brcm/supervisord.conf b/platform/broadcom/docker-syncd-brcm/supervisord.conf
index 1af5d70a1d0c..fe590ede18c5 100644
--- a/platform/broadcom/docker-syncd-brcm/supervisord.conf
+++ b/platform/broadcom/docker-syncd-brcm/supervisord.conf
@@ -26,3 +26,11 @@ autostart=false
autorestart=false
stdout_logfile=syslog
stderr_logfile=syslog
+
+[program:ledinit]
+command=/usr/bin/bcmcmd -t 60 "rcload /usr/share/sonic/platform/led_proc_init.soc"
+priority=4
+autostart=false
+autorestart=false
+stdout_logfile=syslog
+stderr_logfile=syslog
diff --git a/platform/broadcom/libsaithrift-dev.mk b/platform/broadcom/libsaithrift-dev.mk
index d5b2c8d35dd0..1c38f0edc7d3 100644
--- a/platform/broadcom/libsaithrift-dev.mk
+++ b/platform/broadcom/libsaithrift-dev.mk
@@ -1,6 +1,6 @@
# libsaithrift-dev package
-LIBSAITHRIFT_DEV_BRCM = libsaithrift-dev_1.2.1_amd64.deb
+LIBSAITHRIFT_DEV_BRCM = libsaithrift-dev_1.3.0_amd64.deb
$(LIBSAITHRIFT_DEV_BRCM)_SRC_PATH = $(SRC_PATH)/sonic-sairedis/SAI
$(LIBSAITHRIFT_DEV_BRCM)_DEPENDS += $(LIBTHRIFT) $(LIBTHRIFT_DEV) $(THRIFT_COMPILER) $(BRCM_SAI) $(BRCM_SAI_DEV)
$(LIBSAITHRIFT_DEV_BRCM)_RDEPENDS += $(LIBTHRIFT) $(BRCM_SAI)
diff --git a/platform/broadcom/platform-modules-arista.mk b/platform/broadcom/platform-modules-arista.mk
index ec7566318c8d..633435c0550a 100644
--- a/platform/broadcom/platform-modules-arista.mk
+++ b/platform/broadcom/platform-modules-arista.mk
@@ -20,3 +20,4 @@ $(eval $(call add_extra_package,$(ARISTA_PLATFORM_MODULE),$(ARISTA_PLATFORM_MODU
export ARISTA_PLATFORM_MODULE ARISTA_PLATFORM_MODULE_PYTHON2 ARISTA_PLATFORM_MODULE_PYTHON3 ARISTA_PLATFORM_MODULE_DRIVERS
+export ARISTA_SCD_DRIVER_CONFIG=m
diff --git a/platform/broadcom/platform-modules-cel.mk b/platform/broadcom/platform-modules-cel.mk
index 09e8b374e861..96cb59144fa5 100644
--- a/platform/broadcom/platform-modules-cel.mk
+++ b/platform/broadcom/platform-modules-cel.mk
@@ -1,6 +1,6 @@
# Celestica DX010 Platform modules
-CEL_DX010_PLATFORM_MODULE_VERSION = 0.6
+CEL_DX010_PLATFORM_MODULE_VERSION = 0.8
export CEL_DX010_PLATFORM_MODULE_VERSION
diff --git a/platform/broadcom/python-saithrift.mk b/platform/broadcom/python-saithrift.mk
index 5f9b88eafea4..53456e06ddb6 100644
--- a/platform/broadcom/python-saithrift.mk
+++ b/platform/broadcom/python-saithrift.mk
@@ -1,6 +1,6 @@
# python-saithrift package
-PYTHON_SAITHRIFT_BRCM = python-saithrift_1.2.1_amd64.deb
+PYTHON_SAITHRIFT_BRCM = python-saithrift_1.3.0_amd64.deb
$(PYTHON_SAITHRIFT_BRCM)_SRC_PATH = $(SRC_PATH)/sonic-sairedis/SAI
$(PYTHON_SAITHRIFT_BRCM)_DEPENDS += $(BRCM_SAI_DEV) $(THRIFT_COMPILER) $(PYTHON_THRIFT) $(LIBTHRIFT_DEV)
SONIC_DPKG_DEBS += $(PYTHON_SAITHRIFT_BRCM)
diff --git a/platform/broadcom/sai.mk b/platform/broadcom/sai.mk
index 0012e8a8106a..611592c98182 100644
--- a/platform/broadcom/sai.mk
+++ b/platform/broadcom/sai.mk
@@ -1,9 +1,9 @@
-BRCM_SAI = libsaibcm_3.1.3.4-13_amd64.deb
-$(BRCM_SAI)_URL = "https://sonicstorage.blob.core.windows.net/packages/libsaibcm_3.1.3.4-13_amd64.deb?sv=2015-04-05&sr=b&sig=Y7mQMOnQEzwb%2FG%2BY9dcEX0Y9tQBDCK2UmF4TjIz3Zn8%3D&se=2155-04-24T09%3A52%3A42Z&sp=r"
+BRCM_SAI = libsaibcm_3.1.3.5-3_amd64.deb
+$(BRCM_SAI)_URL = "https://sonicstorage.blob.core.windows.net/packages/libsaibcm_3.1.3.5-3_amd64.deb?sv=2015-04-05&sr=b&sig=lzB9IHpJuMEENr9N9W0LBFamJ7mpvRVWgigfQmpIrPc%3D&se=2155-06-05T09%3A13%3A41Z&sp=r"
-BRCM_SAI_DEV = libsaibcm-dev_3.1.3.4-13_amd64.deb
+BRCM_SAI_DEV = libsaibcm-dev_3.1.3.5-3_amd64.deb
$(eval $(call add_derived_package,$(BRCM_SAI),$(BRCM_SAI_DEV)))
-$(BRCM_SAI_DEV)_URL = "https://sonicstorage.blob.core.windows.net/packages/libsaibcm-dev_3.1.3.4-13_amd64.deb?sv=2015-04-05&sr=b&sig=YYjwAt47PlCYJgW0RtEsdcmGAc52UdAzHEd5qVKImxc%3D&se=2155-04-24T09%3A53%3A45Z&sp=r"
+$(BRCM_SAI_DEV)_URL = "https://sonicstorage.blob.core.windows.net/packages/libsaibcm-dev_3.1.3.5-3_amd64.deb?sv=2015-04-05&sr=b&sig=WoRAz6j8G3Xk%2BT3MOmhp5f%2BvWggw%2BgGgk2JtDJHkKjs%3D&se=2155-06-05T09%3A14%3A46Z&sp=r"
SONIC_ONLINE_DEBS += $(BRCM_SAI) $(BRCM_SAI_DEV)
$(BRCM_SAI_DEV)_DEPENDS += $(BRCM_SAI)
diff --git a/platform/broadcom/sdk.mk b/platform/broadcom/sdk.mk
index 05d51fc28d07..2ffa374b1ba5 100644
--- a/platform/broadcom/sdk.mk
+++ b/platform/broadcom/sdk.mk
@@ -1,4 +1,4 @@
-BRCM_OPENNSL_KERNEL = opennsl-modules-3.16.0-5-amd64_3.4.1.11-2_amd64.deb
-$(BRCM_OPENNSL_KERNEL)_URL = "https://sonicstorage.blob.core.windows.net/packages/opennsl-modules-3.16.0-5-amd64_3.4.1.11-2_amd64.deb?sv=2015-04-05&sr=b&sig=xtf8nafmS1pcqx5hhBsfmLNSx2BeqmwN4Dwq5uwM1bo%3D&se=2031-11-16T21%3A54%3A27Z&sp=r"
+BRCM_OPENNSL_KERNEL = opennsl-modules-3.16.0-5-amd64_3.4.1.11-5_amd64.deb
+$(BRCM_OPENNSL_KERNEL)_URL = "https://sonicstorage.blob.core.windows.net/packages/opennsl-modules-3.16.0-5-amd64_3.4.1.11-5_amd64.deb?sv=2015-04-05&sr=b&sig=VefDUeIdEvgV1007LX9P3aRmMAeO4hnMcIAyXkOBEp8%3D&se=2032-03-19T18%3A23%3A58Z&sp=r"
SONIC_ONLINE_DEBS += $(BRCM_OPENNSL_KERNEL)
diff --git a/platform/broadcom/sonic-platform-modules-arista b/platform/broadcom/sonic-platform-modules-arista
index a35c7eddaf94..c114bb1f903a 160000
--- a/platform/broadcom/sonic-platform-modules-arista
+++ b/platform/broadcom/sonic-platform-modules-arista
@@ -1 +1 @@
-Subproject commit a35c7eddaf945a1ff09ea71b47f69b6ddba5e892
+Subproject commit c114bb1f903a5630c3a02d450a026949c323defd
diff --git a/platform/broadcom/sonic-platform-modules-cel b/platform/broadcom/sonic-platform-modules-cel
index 7875e46964fc..5ec0c5e5d4fe 160000
--- a/platform/broadcom/sonic-platform-modules-cel
+++ b/platform/broadcom/sonic-platform-modules-cel
@@ -1 +1 @@
-Subproject commit 7875e46964fcc329ff92a80c379c026da530221f
+Subproject commit 5ec0c5e5d4fe8f2ec1ab5a6abefa7d168a81ca98
diff --git a/platform/cavium/docker-syncd-cavm/Dockerfile.j2 b/platform/cavium/docker-syncd-cavm/Dockerfile.j2
index a35abf576f6d..9f6e872ff1e1 100755
--- a/platform/cavium/docker-syncd-cavm/Dockerfile.j2
+++ b/platform/cavium/docker-syncd-cavm/Dockerfile.j2
@@ -1,5 +1,8 @@
FROM docker-config-engine
+ARG docker_container_name
+RUN [ -f /etc/rsyslog.conf ] && sed -ri "s/%syslogtag%/$docker_container_name\/%syslogtag%/;" /etc/rsyslog.conf
+
## Make apt-get non-interactive
ENV DEBIAN_FRONTEND=noninteractive
diff --git a/platform/centec/docker-syncd-centec/Dockerfile.j2 b/platform/centec/docker-syncd-centec/Dockerfile.j2
index d9b12bb426e4..7fa2bd2ae0e4 100755
--- a/platform/centec/docker-syncd-centec/Dockerfile.j2
+++ b/platform/centec/docker-syncd-centec/Dockerfile.j2
@@ -1,5 +1,8 @@
FROM docker-config-engine
+ARG docker_container_name
+RUN [ -f /etc/rsyslog.conf ] && sed -ri "s/%syslogtag%/$docker_container_name\/%syslogtag%/;" /etc/rsyslog.conf
+
## Make apt-get non-interactive
ENV DEBIAN_FRONTEND=noninteractive
diff --git a/platform/marvell/docker-syncd-mrvl/Dockerfile.j2 b/platform/marvell/docker-syncd-mrvl/Dockerfile.j2
index 7676b3f2ffa1..6e7c34d644d5 100755
--- a/platform/marvell/docker-syncd-mrvl/Dockerfile.j2
+++ b/platform/marvell/docker-syncd-mrvl/Dockerfile.j2
@@ -1,5 +1,8 @@
FROM docker-config-engine
+ARG docker_container_name
+RUN [ -f /etc/rsyslog.conf ] && sed -ri "s/%syslogtag%/$docker_container_name\/%syslogtag%/;" /etc/rsyslog.conf
+
## Make apt-get non-interactive
ENV DEBIAN_FRONTEND=noninteractive
diff --git a/platform/mellanox/docker-syncd-mlnx-rpc.mk b/platform/mellanox/docker-syncd-mlnx-rpc.mk
index f27242ce17dc..d6011884c45c 100644
--- a/platform/mellanox/docker-syncd-mlnx-rpc.mk
+++ b/platform/mellanox/docker-syncd-mlnx-rpc.mk
@@ -2,7 +2,7 @@
DOCKER_SYNCD_MLNX_RPC = docker-syncd-mlnx-rpc.gz
$(DOCKER_SYNCD_MLNX_RPC)_PATH = $(PLATFORM_PATH)/docker-syncd-mlnx-rpc
-$(DOCKER_SYNCD_MLNX_RPC)_DEPENDS += $(SYNCD_RPC) $(LIBTHRIFT)
+$(DOCKER_SYNCD_MLNX_RPC)_DEPENDS += $(SYNCD_RPC) $(LIBTHRIFT) $(MLNX_SFPD)
$(DOCKER_SYNCD_MLNX_RPC)_LOAD_DOCKERS += $(DOCKER_SYNCD_MLNX)
SONIC_DOCKER_IMAGES += $(DOCKER_SYNCD_MLNX_RPC)
ifeq ($(ENABLE_SYNCD_RPC),y)
diff --git a/platform/mellanox/docker-syncd-mlnx.mk b/platform/mellanox/docker-syncd-mlnx.mk
index 2da5961fc046..6ac895d2eb9c 100644
--- a/platform/mellanox/docker-syncd-mlnx.mk
+++ b/platform/mellanox/docker-syncd-mlnx.mk
@@ -2,7 +2,7 @@
DOCKER_SYNCD_MLNX = docker-syncd-mlnx.gz
$(DOCKER_SYNCD_MLNX)_PATH = $(PLATFORM_PATH)/docker-syncd-mlnx
-$(DOCKER_SYNCD_MLNX)_DEPENDS += $(SYNCD) $(PYTHON_SDK_API)
+$(DOCKER_SYNCD_MLNX)_DEPENDS += $(SYNCD) $(PYTHON_SDK_API) $(MLNX_SFPD)
$(DOCKER_SYNCD_MLNX)_LOAD_DOCKERS += $(DOCKER_CONFIG_ENGINE)
SONIC_DOCKER_IMAGES += $(DOCKER_SYNCD_MLNX)
ifneq ($(ENABLE_SYNCD_RPC),y)
diff --git a/platform/mellanox/docker-syncd-mlnx/Dockerfile.j2 b/platform/mellanox/docker-syncd-mlnx/Dockerfile.j2
index 966ef35ac9c8..73a16fac2a4b 100755
--- a/platform/mellanox/docker-syncd-mlnx/Dockerfile.j2
+++ b/platform/mellanox/docker-syncd-mlnx/Dockerfile.j2
@@ -1,5 +1,8 @@
FROM docker-config-engine
+ARG docker_container_name
+RUN [ -f /etc/rsyslog.conf ] && sed -ri "s/%syslogtag%/$docker_container_name\/%syslogtag%/;" /etc/rsyslog.conf
+
## Make apt-get non-interactive
ENV DEBIAN_FRONTEND=noninteractive
diff --git a/platform/mellanox/docker-syncd-mlnx/start.sh b/platform/mellanox/docker-syncd-mlnx/start.sh
index 623316050475..3adbd04d536a 100755
--- a/platform/mellanox/docker-syncd-mlnx/start.sh
+++ b/platform/mellanox/docker-syncd-mlnx/start.sh
@@ -5,3 +5,5 @@ rm -f /var/run/rsyslogd.pid
supervisorctl start rsyslogd
supervisorctl start syncd
+
+supervisorctl start mlnx-sfpd
diff --git a/platform/mellanox/docker-syncd-mlnx/supervisord.conf b/platform/mellanox/docker-syncd-mlnx/supervisord.conf
index 1af5d70a1d0c..8860bd6c0205 100644
--- a/platform/mellanox/docker-syncd-mlnx/supervisord.conf
+++ b/platform/mellanox/docker-syncd-mlnx/supervisord.conf
@@ -26,3 +26,11 @@ autostart=false
autorestart=false
stdout_logfile=syslog
stderr_logfile=syslog
+
+[program:mlnx-sfpd]
+command=/usr/bin/mlnx-sfpd
+priority=4
+autostart=false
+autorestart=false
+stdout_logfile=syslog
+stderr_logfile=syslog
diff --git a/platform/mellanox/fw.mk b/platform/mellanox/fw.mk
index 73d1236f5a9a..579c5e5e4986 100644
--- a/platform/mellanox/fw.mk
+++ b/platform/mellanox/fw.mk
@@ -1,6 +1,6 @@
# mellanox firmware
-MLNX_FW_VERSION = 13.1620.0222
+MLNX_FW_VERSION = 13.1701.0008
MLNX_FW_FILE = fw-SPC-rel-$(subst .,_,$(MLNX_FW_VERSION))-EVB.mfa
$(MLNX_FW_FILE)_URL = $(MLNX_SDK_BASE_URL)/$(MLNX_FW_FILE)
SONIC_ONLINE_FILES += $(MLNX_FW_FILE)
diff --git a/platform/mellanox/hw-management.mk b/platform/mellanox/hw-management.mk
index dcbce4564ee8..70dd2d330167 100644
--- a/platform/mellanox/hw-management.mk
+++ b/platform/mellanox/hw-management.mk
@@ -1,6 +1,6 @@
# Mellanox HW Management
-MLNX_HW_MANAGEMENT_VERSION = V1.0.0160
+MLNX_HW_MANAGEMENT_VERSION = V1.0.0190
export MLNX_HW_MANAGEMENT_VERSION
diff --git a/platform/mellanox/libsaithrift-dev.mk b/platform/mellanox/libsaithrift-dev.mk
index e91252e5ab0e..23133a5b5aeb 100644
--- a/platform/mellanox/libsaithrift-dev.mk
+++ b/platform/mellanox/libsaithrift-dev.mk
@@ -1,6 +1,6 @@
# libsaithrift-dev package
-LIBSAITHRIFT_DEV_MLNX = libsaithrift-dev_1.2.1_amd64.deb
+LIBSAITHRIFT_DEV_MLNX = libsaithrift-dev_1.3.0_amd64.deb
$(LIBSAITHRIFT_DEV_MLNX)_SRC_PATH = $(SRC_PATH)/sonic-sairedis/SAI
$(LIBSAITHRIFT_DEV_MLNX)_DEPENDS += $(LIBTHRIFT) $(LIBTHRIFT_DEV) $(THRIFT_COMPILER) $(MLNX_SAI) $(MLNX_SAI_DEV)
$(LIBSAITHRIFT_DEV_MLNX)_RDEPENDS += $(LIBTHRIFT) $(MLNX_SAI)
diff --git a/platform/mellanox/mft.mk b/platform/mellanox/mft.mk
index 2fb3af338d75..9f9c65ec5176 100644
--- a/platform/mellanox/mft.mk
+++ b/platform/mellanox/mft.mk
@@ -1,9 +1,17 @@
# Mellanox SAI
-MFT = mft-4.5.0-31.amd64.deb
+MFT_VERSION = 4.9.0
+MFT_REVISION = 38
+
+export MFT_VERSION MFT_REVISION
+
+MFT = mft-$(MFT_VERSION)-$(MFT_REVISION).amd64.deb
$(MFT)_SRC_PATH = $(PLATFORM_PATH)/mft
$(MFT)_DEPENDS += $(LINUX_HEADERS) $(LINUX_HEADERS_COMMON)
SONIC_MAKE_DEBS += $(MFT)
-KERNEL_MFT = kernel-mft-dkms_4.5.0-$(KVERSION)_all.deb
+KERNEL_MFT = kernel-mft-dkms_$(MFT_VERSION)-$(KVERSION)_all.deb
$(eval $(call add_derived_package,$(MFT),$(KERNEL_MFT)))
+
+MFT_OEM = mft-oem-$(MFT_VERSION)-$(MFT_REVISION).amd64.deb
+$(eval $(call add_derived_package,$(MFT),$(MFT_OEM)))
diff --git a/platform/mellanox/mft/Makefile b/platform/mellanox/mft/Makefile
index eea78cd76031..450e59eec44b 100644
--- a/platform/mellanox/mft/Makefile
+++ b/platform/mellanox/mft/Makefile
@@ -1,12 +1,12 @@
.ONESHELL:
SHELL = /bin/bash
-MFT_NAME = mft-4.5.0-31-x86_64-deb
+MFT_NAME = mft-$(MFT_VERSION)-$(MFT_REVISION)-x86_64-deb
MFT_TGZ = $(MFT_NAME).tgz
-SRC_DEB = kernel-mft-dkms_4.5.0-31_all.deb
+SRC_DEB = kernel-mft-dkms_$(MFT_VERSION)-$(MFT_REVISION)_all.deb
-MAIN_TARGET = mft-4.5.0-31.amd64.deb
-DERIVED_TARGETS = kernel-mft-dkms_4.5.0-$(KVERSION)_all.deb
+MAIN_TARGET = mft-$(MFT_VERSION)-$(MFT_REVISION).amd64.deb
+DERIVED_TARGETS = kernel-mft-dkms_$(MFT_VERSION)-$(KVERSION)_all.deb mft-oem-$(MFT_VERSION)-$(MFT_REVISION).amd64.deb
$(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% :
rm -rf $(MFT_NAME)
@@ -21,11 +21,11 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% :
fi
done
- tar xvf `sudo dkms mkdriverdisk kernel-mft-dkms/4.5.0 -a all -d ubuntu -k $(KVERSION) --media tar | grep "Disk image location" | cut -d':' -f2`
+ tar xvf `sudo dkms mkdriverdisk kernel-mft-dkms/$(MFT_VERSION) -a all -d ubuntu -k $(KVERSION) --media tar | grep "Disk image location" | cut -d':' -f2`
popd
# fix timestamp because we do not actually build tools, only kernel
- touch $(MFT_NAME)/DEBS/$*
- mv $(MFT_NAME)/SDEBS/ubuntu-drivers/3.16.0/$(DERIVED_TARGETS) $(MFT_NAME)/DEBS/$* $(DEST)
+ touch $(MFT_NAME)/DEBS/*
+ mv $(MFT_NAME)/SDEBS/ubuntu-drivers/3.16.0/kernel-mft-dkms_$(MFT_VERSION)-$(KVERSION)_all.deb $(MFT_NAME)/DEBS/* $(DEST)
$(addprefix $(DEST)/, $(DERIVED_TARGETS)): $(DEST)/% : $(DEST)/$(MAIN_TARGET)
diff --git a/platform/mellanox/mlnx-sai.mk b/platform/mellanox/mlnx-sai.mk
index 53e74021bb84..e22705a88e3a 100644
--- a/platform/mellanox/mlnx-sai.mk
+++ b/platform/mellanox/mlnx-sai.mk
@@ -1,7 +1,7 @@
# Mellanox SAI
-MLNX_SAI_VERSION = SAIRel1.11.5-master
-MLNX_SAI_REVISION = 957f61820e441e490081cb3724f702ed507f7477
+MLNX_SAI_VERSION = SAIRel1.12.1-master
+MLNX_SAI_REVISION = fe6e9d418223de9debd5348bb61af514b1df15f5
export MLNX_SAI_VERSION MLNX_SAI_REVISION
diff --git a/platform/mellanox/mlnx-sfpd.mk b/platform/mellanox/mlnx-sfpd.mk
new file mode 100644
index 000000000000..416dd7d0f2cd
--- /dev/null
+++ b/platform/mellanox/mlnx-sfpd.mk
@@ -0,0 +1,5 @@
+# mlnx-sfpd (SONiC MLNX platform sfp event monitoring daemon) Debian package
+
+MLNX_SFPD = python-mlnx-sfpd_1.0-1_all.deb
+$(MLNX_SFPD)_SRC_PATH = $(PLATFORM_PATH)/mlnx-sfpd
+SONIC_PYTHON_STDEB_DEBS += $(MLNX_SFPD)
diff --git a/platform/mellanox/mlnx-sfpd/scripts/mlnx-sfpd b/platform/mellanox/mlnx-sfpd/scripts/mlnx-sfpd
new file mode 100644
index 000000000000..e91dbb7a8aa6
--- /dev/null
+++ b/platform/mellanox/mlnx-sfpd/scripts/mlnx-sfpd
@@ -0,0 +1,199 @@
+#!/usr/bin/env python
+'''
+This code is for a mlnx platform specific daemon, mlnx-sfpd.
+Which listen to the SDK for the SFP change event and post the event to DB.
+'''
+
+from __future__ import print_function
+import sys, errno
+import os
+import time
+import syslog
+import signal
+import json
+from python_sdk_api.sx_api import *
+from swsssdk import SonicV2Connector
+
+VERSION = '1.0'
+
+SYSLOG_IDENTIFIER = "mlnx-sfpd"
+
+REDIS_HOSTIP = "127.0.0.1"
+
+SDK_SFP_STATE_IN = 0x1
+SDK_SFP_STATE_OUT = 0x2
+STATUS_PLUGIN = '1'
+STATUS_PLUGOUT = '0'
+STATUS_UNKNOWN = '2'
+
+sfp_value_status_dict = {SDK_SFP_STATE_IN:STATUS_PLUGIN, SDK_SFP_STATE_OUT:STATUS_PLUGOUT}
+
+#========================== Syslog wrappers ==========================
+
+def log_info(msg, also_print_to_console=False):
+ syslog.openlog(SYSLOG_IDENTIFIER)
+ syslog.syslog(syslog.LOG_INFO, msg)
+ syslog.closelog()
+
+ if also_print_to_console:
+ print(msg)
+
+def log_warning(msg, also_print_to_console=False):
+ syslog.openlog(SYSLOG_IDENTIFIER)
+ syslog.syslog(syslog.LOG_WARNING, msg)
+ syslog.closelog()
+
+ if also_print_to_console:
+ print(msg)
+
+def log_error(msg, also_print_to_console=False):
+ syslog.openlog(SYSLOG_IDENTIFIER)
+ syslog.syslog(syslog.LOG_ERR, msg)
+ syslog.closelog()
+
+ if also_print_to_console:
+ print(msg)
+
+#========================== Signal Handling ==========================
+
+def signal_handler(sig, frame):
+ if sig == signal.SIGHUP:
+ log_info("Caught SIGHUP - ignoring...")
+ return
+ elif sig == signal.SIGINT:
+ log_info("Caught SIGINT - exiting...")
+ sys.exit(128 + sig)
+ elif sig == signal.SIGTERM:
+ log_info("Caught SIGTERM - exiting...")
+ sys.exit(128 + sig)
+ else:
+ log_warning("Caught unhandled signal '" + sig + "'")
+
+
+def sx_recv(fd_p, handle):
+ # recv parameters
+ pkt_size = 2000
+ pkt_size_p = new_uint32_t_p()
+ uint32_t_p_assign(pkt_size_p, pkt_size)
+ pkt = new_uint8_t_arr(pkt_size)
+ recv_info_p = new_sx_receive_info_t_p()
+ pmpe_t = sx_event_pmpe_t()
+ logical_port_list = new_sx_port_log_id_t_arr(4)
+ port_attributes_list = new_sx_port_attributes_t_arr(64)
+ port_cnt_p = new_uint32_t_p()
+ uint32_t_p_assign(port_cnt_p,64)
+ label_port_list = []
+
+ rc = sx_lib_host_ifc_recv(fd_p, pkt, pkt_size_p, recv_info_p)
+ if rc != 0:
+ log_error("event receive exit with error, rc %d" % rc)
+ exit(rc)
+
+ pmpe_t = recv_info_p.event_info.pmpe
+ port_list_size = pmpe_t.list_size
+ logical_port_list = pmpe_t.log_port_list
+ module_state = pmpe_t.module_state
+
+ for i in range(0, port_list_size):
+ logical_port = sx_port_log_id_t_arr_getitem(logical_port_list, i)
+ rc = sx_api_port_device_get(handle, 1 , 0, port_attributes_list, port_cnt_p)
+ port_cnt = uint32_t_p_value(port_cnt_p)
+
+ for i in range(0,port_cnt):
+ port_attributes = sx_port_attributes_t_arr_getitem(port_attributes_list,i)
+ if port_attributes.log_port == logical_port:
+ lable_port = port_attributes.port_mapping.module_port
+ break
+ label_port_list.append(lable_port)
+
+ return label_port_list, module_state
+
+def send_sfp_notification(db, interface, state):
+ sfp_notify = [interface,state]
+ msg = json.dumps(sfp_notify,separators=(',',':'))
+ db.publish('STATE_DB','TRANSCEIVER_NOTIFY', msg)
+ return
+
+# main start
+def main():
+ # Register our signal handlers
+ signal.signal(signal.SIGHUP, signal_handler)
+ signal.signal(signal.SIGINT, signal_handler)
+ signal.signal(signal.SIGTERM, signal_handler)
+
+ #open SDK handler
+ log_info("starting mlnx-sfpd...")
+ rc, handle = sx_api_open(None)
+ retry_time = 1
+ while rc != SX_STATUS_SUCCESS:
+ time.sleep(2**retry_time)
+ retry_time += 1
+ rc, handle = sx_api_open(None)
+ if retry_time > 20:
+ log_error("Failed to open api handle.\nPlease check that SDK is running.")
+ sys.exit(errno.EACCES)
+
+ #open recv fd
+ rx_fd_p = new_sx_fd_t_p()
+ rc = sx_api_host_ifc_open(handle, rx_fd_p)
+ if rc != 0:
+ log_error("sx_api_host_ifc_open exit with error, rc %d" % rc)
+ exit(rc)
+
+ # set up general host ifc parameters
+ swid = 0
+ cmd = SX_ACCESS_CMD_REGISTER
+ uc_p = new_sx_user_channel_t_p()
+ uc_p.type = SX_USER_CHANNEL_TYPE_FD
+ uc_p.channel.fd = rx_fd_p
+ trap_id = SX_TRAP_ID_PMPE
+
+ rc = sx_api_host_ifc_trap_id_register_set(handle, cmd, swid, trap_id, uc_p)
+ if rc != 0:
+ log_error("sx_api_host_ifc_trap_id_register_set exit with error, rc %d" % rc)
+ exit(rc)
+
+ #connect to state db for notification sending
+ state_db = SonicV2Connector(host=REDIS_HOSTIP)
+ state_db.connect(state_db.STATE_DB)
+
+ #main loop for sfp event listening
+ log_info("mlnx-sfpd started")
+ while True:
+ state = STATUS_UNKNOWN
+ port_list, module_state = sx_recv(rx_fd_p, handle)
+ if module_state in sfp_value_status_dict: state = sfp_value_status_dict[module_state]
+
+ if state != STATUS_UNKNOWN:
+ for port in port_list:
+ log_info("SFP on port %d state %s" % (port, state))
+ send_sfp_notification(state_db, str(port), state)
+
+ log_info("sfp change event handling done")
+
+ '''
+ # TODO: clean open handlers before exit, need find out which errors can be raised by SDK in this case.
+ # unregister trap id
+ cmd = SX_ACCESS_CMD_DEREGISTER
+ rc = sx_api_host_ifc_trap_id_register_set(handle, cmd, swid, trap_id, uc_p)
+ if rc != 0:
+ log_error("sx_api_host_ifc_trap_id_register_set exit with error, rc %d" % rc)
+ exit(rc)
+
+ # close read fp
+ rc = sx_api_host_ifc_close(handle, rx_fd_p)
+ if rc != 0:
+ log_error("sx_api_host_ifc_close exit with error, rc %d" % rc)
+ exit(rc)
+
+ # close sdk handler
+ rc = sx_api_close(handle)
+ if rc != 0:
+ log_error("exit with error, rc %d" % rc)
+ exit(rc)
+
+ log_info("mlnx-sfpd exited")
+ '''
+
+if __name__ == '__main__':
+ main()
diff --git a/platform/mellanox/mlnx-sfpd/setup.py b/platform/mellanox/mlnx-sfpd/setup.py
new file mode 100644
index 000000000000..ea9b895cb1f4
--- /dev/null
+++ b/platform/mellanox/mlnx-sfpd/setup.py
@@ -0,0 +1,28 @@
+from setuptools import setup
+
+setup(
+ name='mlnx-sfpd',
+ version='1.0',
+ description='SFP event mmonitoring daemon for SONiC on mellanox platform',
+ license='Apache 2.0',
+ author='SONiC Community',
+ url='https://github.com/Azure/sonic-buildimage/',
+ maintainer='Kebo Liu',
+ maintainer_email='kebol@mellanox.com',
+ scripts=[
+ 'scripts/mlnx-sfpd',
+ ],
+ classifiers=[
+ 'Development Status :: 4 - Beta',
+ 'Environment :: No Input/Output (Daemon)',
+ 'Intended Audience :: Developers',
+ 'Intended Audience :: Information Technology',
+ 'Intended Audience :: System Administrators',
+ 'License :: OSI Approved :: Apache Software License',
+ 'Natural Language :: English',
+ 'Operating System :: POSIX :: Linux',
+ 'Programming Language :: Python :: 2.7',
+ 'Topic :: System :: Hardware',
+ ],
+ keywords='sonic SONiC SFP sfp MELLANOX mellanox daemon SFPD sfpd',
+)
diff --git a/platform/mellanox/one-image.mk b/platform/mellanox/one-image.mk
index 6f478ba76a51..5360a4c27745 100644
--- a/platform/mellanox/one-image.mk
+++ b/platform/mellanox/one-image.mk
@@ -3,7 +3,7 @@
SONIC_ONE_IMAGE = sonic-mellanox.bin
$(SONIC_ONE_IMAGE)_MACHINE = mellanox
$(SONIC_ONE_IMAGE)_IMAGE_TYPE = onie
-$(SONIC_ONE_IMAGE)_INSTALLS += $(SX_KERNEL) $(KERNEL_MFT) $(MFT) $(MLNX_HW_MANAGEMENT)
+$(SONIC_ONE_IMAGE)_INSTALLS += $(SX_KERNEL) $(KERNEL_MFT) $(MFT_OEM) $(MFT) $(MLNX_HW_MANAGEMENT)
$(SONIC_ONE_IMAGE)_DOCKERS += $(SONIC_INSTALL_DOCKER_IMAGES)
$(SONIC_ONE_IMAGE)_FILES += $(MLNX_FW_FILE)
SONIC_INSTALLERS += $(SONIC_ONE_IMAGE)
diff --git a/platform/mellanox/python-saithrift.mk b/platform/mellanox/python-saithrift.mk
index de4b02369b84..5f9d22a238c4 100644
--- a/platform/mellanox/python-saithrift.mk
+++ b/platform/mellanox/python-saithrift.mk
@@ -1,6 +1,6 @@
# python-saithrift package
-PYTHON_SAITHRIFT_MLNX = python-saithrift_1.2.1_amd64.deb
+PYTHON_SAITHRIFT_MLNX = python-saithrift_1.3.0_amd64.deb
$(PYTHON_SAITHRIFT_MLNX)_SRC_PATH = $(SRC_PATH)/sonic-sairedis/SAI
$(PYTHON_SAITHRIFT_MLNX)_DEPENDS += $(MLNX_SAI_DEV) $(MLNX_SAI) $(THRIFT_COMPILER) $(PYTHON_THRIFT) $(LIBTHRIFT_DEV)
SONIC_DPKG_DEBS += $(PYTHON_SAITHRIFT_MLNX)
diff --git a/platform/mellanox/rules.mk b/platform/mellanox/rules.mk
index 1651f4a66806..ff5c96fe0042 100644
--- a/platform/mellanox/rules.mk
+++ b/platform/mellanox/rules.mk
@@ -10,6 +10,7 @@ include $(PLATFORM_PATH)/one-image.mk
include $(PLATFORM_PATH)/libsaithrift-dev.mk
include $(PLATFORM_PATH)/python-saithrift.mk
include $(PLATFORM_PATH)/docker-ptf-mlnx.mk
+include $(PLATFORM_PATH)/mlnx-sfpd.mk
SONIC_ALL += $(SONIC_ONE_IMAGE) \
$(DOCKER_FPM)
diff --git a/platform/mellanox/sdk.mk b/platform/mellanox/sdk.mk
index f301032846c3..88bfe76d0f0d 100644
--- a/platform/mellanox/sdk.mk
+++ b/platform/mellanox/sdk.mk
@@ -1,5 +1,5 @@
-MLNX_SDK_BASE_URL = https://github.com/Mellanox/SAI-Implementation/raw/957f61820e441e490081cb3724f702ed507f7477/sdk
-MLNX_SDK_VERSION = 4.2.7303
+MLNX_SDK_BASE_URL = https://github.com/Mellanox/SAI-Implementation/raw/5be04c71508e0688ae004ed838b998dba521f693/sdk
+MLNX_SDK_VERSION = 4.2.8103
MLNX_SDK_RDEBS += $(APPLIBS) $(IPROUTE2_MLNX) $(SX_ACL_RM) $(SX_COMPLIB) \
$(SX_EXAMPLES) $(SX_GEN_UTILS) $(SX_SCEW) $(SX_SDN_HAL) \
$(SXD_LIBS) $(TESTX)
diff --git a/platform/nephos/docker-syncd-nephos/Dockerfile.j2 b/platform/nephos/docker-syncd-nephos/Dockerfile.j2
index e0248d460a12..b25272be1a0d 100755
--- a/platform/nephos/docker-syncd-nephos/Dockerfile.j2
+++ b/platform/nephos/docker-syncd-nephos/Dockerfile.j2
@@ -1,5 +1,8 @@
FROM docker-config-engine
+ARG docker_container_name
+RUN [ -f /etc/rsyslog.conf ] && sed -ri "s/%syslogtag%/$docker_container_name\/%syslogtag%/;" /etc/rsyslog.conf
+
## Make apt-get non-interactive
ENV DEBIAN_FRONTEND=noninteractive
diff --git a/platform/p4/docker-sonic-p4/Dockerfile.j2 b/platform/p4/docker-sonic-p4/Dockerfile.j2
index 95ac5cc1646d..971d7a962ed3 100644
--- a/platform/p4/docker-sonic-p4/Dockerfile.j2
+++ b/platform/p4/docker-sonic-p4/Dockerfile.j2
@@ -1,5 +1,8 @@
FROM docker-config-engine
+ARG docker_container_name
+RUN [ -f /etc/rsyslog.conf ] && sed -ri "s/%syslogtag%/$docker_container_name\/%syslogtag%/;" /etc/rsyslog.conf
+
## Make apt-get non-interactive
ENV DEBIAN_FRONTEND=noninteractive
@@ -76,4 +79,4 @@ COPY ["files/arp_update", "/usr/bin"]
RUN echo "docker-sonic-p4" > /etc/hostname
RUN touch /etc/quagga/zebra.conf
-ENTRYPOINT ["/bin/bash"]
\ No newline at end of file
+ENTRYPOINT ["/bin/bash"]
diff --git a/platform/p4/docker-sonic-p4/supervisord.conf b/platform/p4/docker-sonic-p4/supervisord.conf
index 46178e9f11f5..5815689f9301 100644
--- a/platform/p4/docker-sonic-p4/supervisord.conf
+++ b/platform/p4/docker-sonic-p4/supervisord.conf
@@ -133,9 +133,9 @@ stdout_logfile=syslog
stderr_logfile=syslog
[program:arp_update]
-command=bash -c "/usr/bin/arp_update; sleep 300"
+command=/usr/bin/arp_update
priority=15
autostart=false
-autorestart=true
+autorestart=unexpected
stdout_logfile=syslog
stderr_logfile=syslog
diff --git a/platform/p4/one-aboot.mk b/platform/p4/one-aboot.mk
new file mode 100644
index 000000000000..95babf045c00
--- /dev/null
+++ b/platform/p4/one-aboot.mk
@@ -0,0 +1,12 @@
+# sonic broadcom one image installer
+
+SONIC_ONE_ABOOT_IMAGE = sonic-aboot-p4.swi
+$(SONIC_ONE_ABOOT_IMAGE)_MACHINE = p4
+$(SONIC_ONE_ABOOT_IMAGE)_IMAGE_TYPE = aboot
+$(SONIC_ONE_ABOOT_IMAGE)_INSTALLS += $(ARISTA_PLATFORM_MODULE_DRIVERS) $(ARISTA_PLATFORM_MODULE_PYTHON2) $(ARISTA_PLATFORM_MODULE_PYTHON3) $(ARISTA_PLATFORM_MODULE)
+
+# FIXME: this is a temporary workaround for testing the platform driver
+$(SONIC_ONE_ABOOT_IMAGE)_DOCKERS += docker-platform-monitor.gz
+# $(SONIC_ONE_ABOOT_IMAGE)_DOCKERS += $(SONIC_INSTALL_DOCKER_IMAGES)
+
+SONIC_INSTALLERS += $(SONIC_ONE_ABOOT_IMAGE)
diff --git a/platform/p4/platform-modules-arista.mk b/platform/p4/platform-modules-arista.mk
new file mode 100644
index 000000000000..ec7566318c8d
--- /dev/null
+++ b/platform/p4/platform-modules-arista.mk
@@ -0,0 +1,22 @@
+# Arista Platform modules
+
+ARISTA_PLATFORM_MODULE_VERSION = 1.0
+
+export ARISTA_PLATFORM_MODULE_VERSION
+
+ARISTA_PLATFORM_MODULE = sonic-platform-arista_$(ARISTA_PLATFORM_MODULE_VERSION)_amd64.deb
+$(ARISTA_PLATFORM_MODULE)_SRC_PATH = $(PLATFORM_PATH)/sonic-platform-modules-arista
+$(ARISTA_PLATFORM_MODULE)_DEPENDS += $(LINUX_HEADERS) $(LINUX_HEADERS_COMMON)
+SONIC_MAKE_DEBS += $(ARISTA_PLATFORM_MODULE)
+
+ARISTA_PLATFORM_MODULE_PYTHON2 = python-sonic-platform-arista_$(ARISTA_PLATFORM_MODULE_VERSION)_all.deb
+$(eval $(call add_extra_package,$(ARISTA_PLATFORM_MODULE),$(ARISTA_PLATFORM_MODULE_PYTHON2)))
+
+ARISTA_PLATFORM_MODULE_PYTHON3 = python3-sonic-platform-arista_$(ARISTA_PLATFORM_MODULE_VERSION)_all.deb
+$(eval $(call add_extra_package,$(ARISTA_PLATFORM_MODULE),$(ARISTA_PLATFORM_MODULE_PYTHON3)))
+
+ARISTA_PLATFORM_MODULE_DRIVERS = drivers-sonic-platform-arista_$(ARISTA_PLATFORM_MODULE_VERSION)_amd64.deb
+$(eval $(call add_extra_package,$(ARISTA_PLATFORM_MODULE),$(ARISTA_PLATFORM_MODULE_DRIVERS)))
+
+export ARISTA_PLATFORM_MODULE ARISTA_PLATFORM_MODULE_PYTHON2 ARISTA_PLATFORM_MODULE_PYTHON3 ARISTA_PLATFORM_MODULE_DRIVERS
+
diff --git a/platform/p4/rules.mk b/platform/p4/rules.mk
index 7fe6a60fadac..ea3e31e973e2 100644
--- a/platform/p4/rules.mk
+++ b/platform/p4/rules.mk
@@ -1,4 +1,6 @@
# include $(PLATFORM_PATH)/p4-softswitch.mk
+include $(PLATFORM_PATH)/platform-modules-arista.mk
+include $(PLATFORM_PATH)/one-aboot.mk
include $(PLATFORM_PATH)/tenjin.mk
include $(PLATFORM_PATH)/p4-hlir.mk
include $(PLATFORM_PATH)/p4c-bm.mk
diff --git a/platform/p4/sonic-platform-modules-arista b/platform/p4/sonic-platform-modules-arista
new file mode 160000
index 000000000000..02b22ae91135
--- /dev/null
+++ b/platform/p4/sonic-platform-modules-arista
@@ -0,0 +1 @@
+Subproject commit 02b22ae91135d4e4a9e11e06656dcff3056e2c7f
diff --git a/platform/vs/docker-sonic-vs/Dockerfile.j2 b/platform/vs/docker-sonic-vs/Dockerfile.j2
index 0c242bb373ef..2d9b72aa3298 100644
--- a/platform/vs/docker-sonic-vs/Dockerfile.j2
+++ b/platform/vs/docker-sonic-vs/Dockerfile.j2
@@ -1,5 +1,8 @@
FROM docker-config-engine
+ARG docker_container_name
+RUN [ -f /etc/rsyslog.conf ] && sed -ri "s/%syslogtag%/$docker_container_name\/%syslogtag%/;" /etc/rsyslog.conf
+
## Make apt-get non-interactive
ENV DEBIAN_FRONTEND=noninteractive
diff --git a/platform/vs/docker-sonic-vs/orchagent.sh b/platform/vs/docker-sonic-vs/orchagent.sh
index 7e250dfa20e9..26dae28a6e15 100755
--- a/platform/vs/docker-sonic-vs/orchagent.sh
+++ b/platform/vs/docker-sonic-vs/orchagent.sh
@@ -1,8 +1,10 @@
#!/usr/bin/env bash
+export platform=vs
+
MAC_ADDRESS=`ip link show eth0 | grep ether | awk '{print $2}'`
-# Create a folder for SsWW record files
+# Create a folder for SwSS record files
mkdir -p /var/log/swss
ORCHAGENT_ARGS="-d /var/log/swss "
diff --git a/platform/vs/docker-sonic-vs/supervisord.conf b/platform/vs/docker-sonic-vs/supervisord.conf
index 571c802cda1e..a4b24334d1bd 100644
--- a/platform/vs/docker-sonic-vs/supervisord.conf
+++ b/platform/vs/docker-sonic-vs/supervisord.conf
@@ -116,10 +116,10 @@ stdout_logfile=syslog
stderr_logfile=syslog
[program:arp_update]
-command=bash -c "/usr/bin/arp_update; sleep 300"
+command=/usr/bin/arp_update
priority=15
autostart=false
-autorestart=true
+autorestart=unexpected
stdout_logfile=syslog
stderr_logfile=syslog
diff --git a/platform/vs/tests/conftest.py b/platform/vs/tests/conftest.py
index 0752b86fde1b..9256597f5e37 100644
--- a/platform/vs/tests/conftest.py
+++ b/platform/vs/tests/conftest.py
@@ -90,6 +90,11 @@ def __init__(self, ctn_name, pid, i):
def __del__(self):
if self.cleanup:
+ pids = subprocess.check_output("ip netns pids %s" % (self.nsname), shell=True)
+ if pids:
+ for pid in pids.split('\n'):
+ if len(pid) > 0:
+ os.system("kill %s" % int(pid))
os.system("ip netns delete %s" % self.nsname)
def runcmd(self, cmd):
diff --git a/rules/config b/rules/config
index 86d106637de2..1505dfd71782 100644
--- a/rules/config
+++ b/rules/config
@@ -40,9 +40,9 @@ DEFAULT_PASSWORD = YourPaSsWoRd
# by default for TOR switch
# ENABLE_PFCWD_ON_START = y
-# SONIC_CONFIG_DEBUG - install debug packages
+# SONIC_INSTALL_DEBUG_TOOLS - installs debugging tools in baseline docker
# Uncomment next line to enable:
-# SONIC_CONFIG_DEBUG = y
+# SONIC_INSTALL_DEBUG_TOOLS = y
# SONIC_ROUTING_STACK - specify the routing-stack being elected to drive SONiC's control-plane.
# Quagga will be the default routing-stack for all the SONiC platforms. Other supported
@@ -56,5 +56,13 @@ SONIC_ROUTING_STACK = quagga
# Enable Origanization Extensions - Specific to the deployment scenarios of the Organization
ENABLE_ORGANIZATION_EXTENSIONS = y
+# Debugging option allows sonic debian packages to get built including symbols
+# information. Profiling option, disables compiler optimizations (-O0) as well
+# as includes symbols information. Given that 'profiling' option is a superset
+# of 'debugging' one, user should only enable either one option or the other --
+# if both options are enabled, the 'profiling' one will prevail.
+#SONIC_DEBUGGING_ON = y
+#SONIC_PROFILING_ON = y
+
# ENABLE_SYSTEM_TELEMETRY - build docker-sonic-telemetry for system telemetry support
# ENABLE_SYSTEM_TELEMETRY = y
diff --git a/rules/docker-base.mk b/rules/docker-base.mk
index 4a419008e915..1bdaaa0b4de0 100644
--- a/rules/docker-base.mk
+++ b/rules/docker-base.mk
@@ -5,7 +5,7 @@ $(DOCKER_BASE)_PATH = $(DOCKERS_PATH)/docker-base
$(DOCKER_BASE)_DEPENDS += $(SUPERVISOR)
$(DOCKER_BASE)_DEPENDS += $(LIBWRAP)
-ifeq ($(SONIC_CONFIG_DEBUG),y)
+ifeq ($(SONIC_INSTALL_DEBUG_TOOLS),y)
GDB = gdb
VIM = vim
OPENSSH = openssh-client
diff --git a/rules/libnl3.mk b/rules/libnl3.mk
index 70ffa87963d0..30e27c5c5157 100644
--- a/rules/libnl3.mk
+++ b/rules/libnl3.mk
@@ -1,7 +1,9 @@
# libnl3
-LIBNL3_VERSION = 3.2.27-1
+LIBNL3_VERSION_BASE = 3.2.27
+LIBNL3_VERSION = $(LIBNL3_VERSION_BASE)-2
+export LIBNL3_VERSION_BASE
export LIBNL3_VERSION
LIBNL3 = libnl-3-200_$(LIBNL3_VERSION)_amd64.deb
diff --git a/rules/python-click.mk b/rules/python-click.mk
new file mode 100644
index 000000000000..0212f5e5584a
--- /dev/null
+++ b/rules/python-click.mk
@@ -0,0 +1,16 @@
+# python-click package
+#
+# Python Click versions < 6.7 have a bug which causes bash completion
+# functionality to stop working after two sublevels. sonic-utilities depends
+# on this package, and the most recent version provided by Debian Jessie and
+# Stretch is v6.6. We build version 6.7 from source in order to fix this bug.
+# TODO: If we upgrade to a distro which provides a version >= 6.7 we will no
+# longer need to build this.
+
+PYTHON_CLICK_VERSION = 6.7-4
+
+export PYTHON_CLICK_VERSION
+
+PYTHON_CLICK = python-click_$(PYTHON_CLICK_VERSION)_all.deb
+$(PYTHON_CLICK)_SRC_PATH = $(SRC_PATH)/python-click
+SONIC_MAKE_DEBS += $(PYTHON_CLICK)
diff --git a/slave.mk b/slave.mk
index f642d3341a5c..57e09d4c74ad 100644
--- a/slave.mk
+++ b/slave.mk
@@ -76,10 +76,22 @@ endif
ifeq ($(USERNAME),)
override USERNAME := $(DEFAULT_USERNAME)
+else
+$(warning USERNAME given on command line: could be visible to other users)
endif
ifeq ($(PASSWORD),)
override PASSWORD := $(DEFAULT_PASSWORD)
+else
+$(warning PASSWORD given on command line: could be visible to other users)
+endif
+
+ifeq ($(SONIC_DEBUGGING_ON),y)
+DEB_BUILD_OPTIONS_GENERIC := "nostrip"
+endif
+
+ifeq ($(SONIC_PROFILING_ON),y)
+DEB_BUILD_OPTIONS_GENERIC := "nostrip noopt"
endif
ifeq ($(SONIC_BUILD_JOBS),)
@@ -100,18 +112,20 @@ $(info "CONFIGURED_PLATFORM" : "$(if $(PLATFORM),$(PLATFORM),$(CONFI
$(info "SONIC_CONFIG_PRINT_DEPENDENCIES" : "$(SONIC_CONFIG_PRINT_DEPENDENCIES)")
$(info "SONIC_BUILD_JOBS" : "$(SONIC_BUILD_JOBS)")
$(info "SONIC_CONFIG_MAKE_JOBS" : "$(SONIC_CONFIG_MAKE_JOBS)")
-$(info "DEFAULT_USERNAME" : "$(DEFAULT_USERNAME)")
-$(info "DEFAULT_PASSWORD" : "$(DEFAULT_PASSWORD)")
+$(info "USERNAME" : "$(USERNAME)")
+$(info "PASSWORD" : "$(PASSWORD)")
$(info "ENABLE_DHCP_GRAPH_SERVICE" : "$(ENABLE_DHCP_GRAPH_SERVICE)")
$(info "SHUTDOWN_BGP_ON_START" : "$(SHUTDOWN_BGP_ON_START)")
$(info "ENABLE_PFCWD_ON_START" : "$(ENABLE_PFCWD_ON_START)")
-$(info "SONIC_CONFIG_DEBUG" : "$(SONIC_CONFIG_DEBUG)")
+$(info "SONIC_INSTALL_DEBUG_TOOLS" : "$(SONIC_INSTALL_DEBUG_TOOLS)")
$(info "ROUTING_STACK" : "$(SONIC_ROUTING_STACK)")
$(info "ENABLE_SYNCD_RPC" : "$(ENABLE_SYNCD_RPC)")
$(info "ENABLE_ORGANIZATION_EXTENSIONS" : "$(ENABLE_ORGANIZATION_EXTENSIONS)")
$(info "HTTP_PROXY" : "$(HTTP_PROXY)")
$(info "HTTPS_PROXY" : "$(HTTPS_PROXY)")
$(info "ENABLE_SYSTEM_TELEMETRY" : "$(ENABLE_SYSTEM_TELEMETRY)")
+$(info "SONIC_DEBUGGING_ON" : "$(SONIC_DEBUGGING_ON)")
+$(info "SONIC_PROFILING_ON" : "$(SONIC_PROFILING_ON)")
$(info )
###############################################################################
@@ -197,7 +211,7 @@ $(addprefix $(DEBS_PATH)/, $(SONIC_MAKE_DEBS)) : $(DEBS_PATH)/% : .platform $$(a
# Apply series of patches if exist
if [ -f $($*_SRC_PATH).patch/series ]; then pushd $($*_SRC_PATH) && QUILT_PATCHES=../$(notdir $($*_SRC_PATH)).patch quilt push -a; popd; fi
# Build project and take package
- make DEST=$(shell pwd)/$(DEBS_PATH) -C $($*_SRC_PATH) $(shell pwd)/$(DEBS_PATH)/$* $(LOG)
+ DEB_BUILD_OPTIONS="${DEB_BUILD_OPTIONS_GENERIC}" make DEST=$(shell pwd)/$(DEBS_PATH) -C $($*_SRC_PATH) $(shell pwd)/$(DEBS_PATH)/$* $(LOG)
# Clean up
if [ -f $($*_SRC_PATH).patch/series ]; then pushd $($*_SRC_PATH) && quilt pop -a -f; popd; fi
$(FOOTER)
@@ -220,8 +234,8 @@ $(addprefix $(DEBS_PATH)/, $(SONIC_DPKG_DEBS)) : $(DEBS_PATH)/% : .platform $$(a
pushd $($*_SRC_PATH) $(LOG)
[ ! -f ./autogen.sh ] || ./autogen.sh $(LOG)
$(if $($*_DPKG_TARGET),
- DEB_BUILD_OPTIONS=$($*_DEB_BUILD_OPTIONS) dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --as-root -T$($*_DPKG_TARGET) $(LOG),
- DEB_BUILD_OPTIONS=$($*_DEB_BUILD_OPTIONS) dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) $(LOG)
+ DEB_BUILD_OPTIONS="${DEB_BUILD_OPTIONS_GENERIC} ${$*_DEB_BUILD_OPTIONS}" dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --as-root -T$($*_DPKG_TARGET) $(LOG),
+ DEB_BUILD_OPTIONS="${DEB_BUILD_OPTIONS_GENERIC} ${$*_DEB_BUILD_OPTIONS}" dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) $(LOG)
)
popd $(LOG)
# Clean up
@@ -368,6 +382,7 @@ $(addprefix $(TARGET_PATH)/, $(SONIC_SIMPLE_DOCKER_IMAGES)) : $(TARGET_PATH)/%.g
--build-arg user=$(USER) \
--build-arg uid=$(UID) \
--build-arg guid=$(GUID) \
+ --build-arg docker_container_name=$($*.gz_CONTAINER_NAME) \
-t $* $($*.gz_PATH) $(LOG)
docker save $* | gzip -c > $@
# Clean up
@@ -398,6 +413,7 @@ $(addprefix $(TARGET_PATH)/, $(SONIC_DOCKER_IMAGES)) : $(TARGET_PATH)/%.gz : .pl
--build-arg user=$(USER) \
--build-arg uid=$(UID) \
--build-arg guid=$(GUID) \
+ --build-arg docker_container_name=$($*.gz_CONTAINER_NAME) \
-t $* $($*.gz_PATH) $(LOG)
docker save $* | gzip -c > $@
# Clean up
@@ -431,6 +447,7 @@ $(addprefix $(TARGET_PATH)/, $(SONIC_INSTALLERS)) : $(TARGET_PATH)/% : \
$(IGB_DRIVER) \
$(IXGBE_DRIVER) \
$(SONIC_DEVICE_DATA) \
+ $(PYTHON_CLICK) \
$(SONIC_UTILS) \
$(LIBWRAP) \
$(LIBPAM_TACPLUS) \
@@ -484,8 +501,14 @@ $(addprefix $(TARGET_PATH)/, $(SONIC_INSTALLERS)) : $(TARGET_PATH)/% : \
DIRTY_SUFFIX="$(shell date +%Y%m%d\.%H%M%S)"
export DIRTY_SUFFIX
- ./build_debian.sh "$(USERNAME)" "$(shell perl -e 'print crypt("$(PASSWORD)", "salt"),"\n"')" $(LOG)
- TARGET_MACHINE=$($*_MACHINE) IMAGE_TYPE=$($*_IMAGE_TYPE) ./build_image.sh $(LOG)
+
+ USERNAME="$(USERNAME)" \
+ PASSWORD="$(PASSWORD)" \
+ ./build_debian.sh $(LOG)
+
+ TARGET_MACHINE=$($*_MACHINE) \
+ IMAGE_TYPE=$($*_IMAGE_TYPE) \
+ ./build_image.sh $(LOG)
$(foreach docker, $($*_DOCKERS), \
rm -f $($(docker)_CONTAINER_NAME).sh
diff --git a/sonic-slave/Dockerfile b/sonic-slave/Dockerfile
index 213daf1a8e47..8949db34a973 100644
--- a/sonic-slave/Dockerfile
+++ b/sonic-slave/Dockerfile
@@ -193,8 +193,6 @@ RUN apt-get update && apt-get install -y \
python-netaddr \
python-ipaddr \
python-yaml \
-# For sonic utilities
- python3-netaddr \
# For lockfile
procmail \
# For gtest
@@ -213,7 +211,17 @@ RUN apt-get update && apt-get install -y \
linuxdoc-tools \
lynx \
texlive-latex-extra \
- texlive-latex-recommended
+ texlive-latex-recommended \
+# For python-click build
+ python-sphinx \
+ python-docutils \
+ python3-all \
+ python3-setuptools \
+ python3-sphinx \
+ python3-docutils \
+ python3-requests \
+ python3-pytest \
+ python3-colorama
# For linux build
RUN apt-get -y build-dep linux
diff --git a/src/libnl3/Makefile b/src/libnl3/Makefile
index 6f50e4e389fa..bf5ba60ab91d 100644
--- a/src/libnl3/Makefile
+++ b/src/libnl3/Makefile
@@ -15,18 +15,13 @@ DERIVED_TARGETS = libnl-3-dev_$(LIBNL3_VERSION)_amd64.deb \
$(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% :
# Obtaining the libnl3
- rm -rf ./libnl3
- git clone https://github.com/qiluo-msft/libnl3.git
- pushd ./libnl3
- git checkout -f b77c0e49cb
+ rm -rf ./libnl3-$(LIBNL3_VERSION_BASE)
+ wget -O libnl3_$(LIBNL3_VERSION_BASE).orig.tar.gz -N "https://sonicstorage.blob.core.windows.net/packages/libnl3_$(LIBNL3_VERSION_BASE).orig.tar.gz?sv=2015-04-05&sr=b&sig=b4DnqrIsyVBDLmYhw7qwfaUJWqGCX2lDVMmmx7ihfrU%3D&se=2028-06-16T21%3A06%3A00Z&sp=r"
+ wget -O libnl3_$(LIBNL3_VERSION).dsc -N "https://sonicstorage.blob.core.windows.net/packages/libnl3_$(LIBNL3_VERSION).dsc?sv=2015-04-05&sr=b&sig=AWTX45oDbeGA%2BRJZyiCcHmeIfCAgSeNV3IqopOBaRDg%3D&se=2028-06-16T21%3A05%3A30Z&sp=r"
+ wget -O libnl3_$(LIBNL3_VERSION).debian.tar.xz -N "https://sonicstorage.blob.core.windows.net/packages/libnl3_$(LIBNL3_VERSION).debian.tar.xz?sv=2015-04-05&sr=b&sig=upIZ9dp5WEcLqp3ODeWKJXq5pJWCfeT0TIM0bx76wxM%3D&se=2028-06-16T21%3A04%3A44Z&sp=r"
+ dpkg-source -x libnl3_$(LIBNL3_VERSION).dsc
- # Patch
- export QUILT_PATCHES=debian/patches
- quilt push
- quilt push
- quilt push
- quilt push
- quilt push
+ pushd ./libnl3-$(LIBNL3_VERSION_BASE)
dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS)
popd
diff --git a/src/python-click/Makefile b/src/python-click/Makefile
new file mode 100644
index 000000000000..4deb27257fd2
--- /dev/null
+++ b/src/python-click/Makefile
@@ -0,0 +1,26 @@
+.ONESHELL:
+SHELL = /bin/bash
+.SHELLFLAGS += -e
+
+MAIN_TARGET = python-click_$(PYTHON_CLICK_VERSION)_all.deb
+
+$(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% :
+ # Remove any stale files
+ rm -rf ./python-click
+
+ # Clone python-click Debian repo
+ git clone https://salsa.debian.org/debian/python-click
+
+ pushd ./python-click
+
+ # Reset HEAD to the commit of the proper tag
+ # NOTE: Using "git checkout " here detaches our HEAD,
+ # which stg doesn't like, so we use this method instead
+ git reset --hard debian/$(PYTHON_CLICK_VERSION)
+
+ # Build source and Debian packages
+ dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS)
+ popd
+
+ # Move the newly-built .deb package to the destination directory
+ mv $* $(DEST)/
diff --git a/src/sonic-config-engine/tests/sample-dell-6100-t0-minigraph.xml b/src/sonic-config-engine/tests/sample-dell-6100-t0-minigraph.xml
new file mode 100644
index 000000000000..536a2c8a73c7
--- /dev/null
+++ b/src/sonic-config-engine/tests/sample-dell-6100-t0-minigraph.xml
@@ -0,0 +1,770 @@
+
+
+
+
+
+ ARISTA01T1
+ 10.0.0.1
+ s6100-dev-1
+ 10.0.0.0
+ 1
+ 180
+ 60
+
+
+ ARISTA02T1
+ 10.0.0.5
+ s6100-dev-1
+ 10.0.0.4
+ 1
+ 180
+ 60
+
+
+ ARISTA03T1
+ 10.0.0.9
+ s6100-dev-1
+ 10.0.0.8
+ 1
+ 180
+ 60
+
+
+ ARISTA04T1
+ 10.0.0.13
+ s6100-dev-1
+ 10.0.0.12
+ 1
+ 180
+ 60
+
+
+ ARISTA01T1
+ FC00::2
+ s6100-dev-1
+ FC00::1
+ 1
+ 180
+ 60
+
+
+ ARISTA02T1
+ FC00::A
+ s6100-dev-1
+ FC00::9
+ 1
+ 180
+ 60
+
+
+ ARISTA03T1
+ FC00::12
+ s6100-dev-1
+ FC00::11
+ 1
+ 180
+ 60
+
+
+ ARISTA04T1
+ FC00::1A
+ s6100-dev-1
+ FC00::19
+ 1
+ 180
+ 60
+
+
+
+
+ 64601
+ s6100-dev-1
+
+
+ BGPPeer
+ 10.0.0.1
+
+
+
+
+
+ BGPPeer
+ 10.0.0.5
+
+
+
+
+
+ BGPPeer
+ 10.0.0.9
+
+
+
+
+
+ BGPPeer
+ 10.0.0.13
+
+
+
+
+
+ BGPPeer
+ FC00::2
+
+
+
+
+
+ BGPPeer
+ FC00::A
+
+
+
+
+
+ BGPPeer
+ FC00::12
+
+
+
+
+
+ BGPPeer
+ FC00::1A
+
+
+
+
+
+
+
+
+ 64802
+ ARISTA01T1
+
+
+
+ 64802
+ ARISTA02T1
+
+
+
+ 64802
+ ARISTA03T1
+
+
+
+ 64802
+ ARISTA04T1
+
+
+
+
+
+
+
+
+
+ HostIP
+ Loopback0
+
+ 10.1.0.32/32
+
+ 10.1.0.32/32
+
+
+ HostIP1
+ Loopback0
+
+ FC00:1::32/128
+
+ FC00:1::32/128
+
+
+
+
+ HostIP
+ eth0
+
+ 10.0.0.243/23
+
+ 10.0.0.243/23
+
+
+
+
+
+ s6100-dev-1
+
+
+ PortChannelInterface
+ PortChannel1
+ fortyGigE1/1/1;fortyGigE1/1/2
+
+
+
+ PortChannelInterface
+ PortChannel4
+ fortyGigE1/1/5;fortyGigE1/1/6
+
+
+
+ PortChannelInterface
+ PortChannel16
+ fortyGigE1/2/1;fortyGigE1/2/2
+
+
+
+ PortChannelInterface
+ PortChannel20
+ fortyGigE1/2/5;fortyGigE1/2/6
+
+
+
+
+
+ VlanInterface
+ Vlan2
+ fortyGigE1/1/7;fortyGigE1/1/8;fortyGigE1/1/9;fortyGigE1/1/10;fortyGigE1/1/11;fortyGigE1/1/12;fortyGigE1/1/13;fortyGigE1/1/14;fortyGigE1/1/15;fortyGigE1/1/16;fortyGigE1/3/1;fortyGigE1/3/5;fortyGigE1/3/6;fortyGigE1/3/7;fortyGigE1/3/8;fortyGigE1/3/9;fortyGigE1/3/10;fortyGigE1/3/11;fortyGigE1/2/7;fortyGigE1/2/8;fortyGigE1/2/9;fortyGigE1/2/10;fortyGigE1/2/11;fortyGigE1/2/12;fortyGigE1/2/13;fortyGigE1/2/14;fortyGigE1/2/15;fortyGigE1/2/16;fortyGigE1/4/1;fortyGigE1/4/5;fortyGigE1/4/6;fortyGigE1/4/7;fortyGigE1/4/8;fortyGigE1/4/9;fortyGigE1/4/10;fortyGigE1/4/11
+ False
+ 0.0.0.0/0
+
+ 2
+ 2
+ 172.0.0.0/21
+
+
+
+
+ IPInterface
+
+ PortChannel1
+ 10.0.0.0/31
+
+
+ IPInterface
+
+ PortChannel4
+ 10.0.0.4/31
+
+
+ IPInterface
+
+ PortChannel16
+ 10.0.0.8/31
+
+
+ IPInterface
+
+ PortChannel20
+ 10.0.0.12/31
+
+
+ IPInterface
+
+ PortChannel1
+ FC00::1/126
+
+
+ IPInterface
+
+ PortChannel4
+ FC00::9/126
+
+
+ IPInterface
+
+ PortChannel16
+ FC00::11/126
+
+
+ IPInterface
+
+ PortChannel20
+ FC00::19/126
+
+
+ IPInterface
+
+ Vlan2
+ 172.0.0.1/21
+
+
+
+
+
+
+
+
+
+
+
+ DeviceInterfaceLink
+ true
+ 40000
+ ARISTA01T1
+ Ethernet1
+ true
+ s6100-dev-1
+ fortyGigE1/1/1
+
+
+ DeviceInterfaceLink
+ true
+ 40000
+ ARISTA01T1
+ Ethernet2
+ true
+ s6100-dev-1
+ fortyGigE1/1/2
+
+
+ DeviceInterfaceLink
+ true
+ 40000
+ ARISTA02T1
+ Ethernet1
+ true
+ s6100-dev-1
+ fortyGigE1/1/5
+
+
+ DeviceInterfaceLink
+ true
+ 40000
+ ARISTA02T1
+ Ethernet2
+ true
+ s6100-dev-1
+ fortyGigE1/1/6
+
+
+ DeviceInterfaceLink
+ true
+ 40000
+ ARISTA03T1
+ Ethernet1
+ true
+ s6100-dev-1
+ fortyGigE1/2/1
+
+
+ DeviceInterfaceLink
+ true
+ 40000
+ ARISTA03T1
+ Ethernet2
+ true
+ s6100-dev-1
+ fortyGigE1/2/2
+
+
+ DeviceInterfaceLink
+ true
+ 40000
+ ARISTA04T1
+ Ethernet1
+ true
+ s6100-dev-1
+ fortyGigE1/2/5
+
+
+ DeviceInterfaceLink
+ true
+ 40000
+ ARISTA04T1
+ Ethernet2
+ true
+ s6100-dev-1
+ fortyGigE1/2/6
+
+
+ DeviceInterfaceLink
+ true
+ 40000
+ s6100-dev-1
+ fortyGigE1/1/7
+ true
+ server-01
+ 0
+
+
+ DeviceInterfaceLink
+ true
+ 40000
+ s6100-dev-1
+ fortyGigE1/1/8
+ true
+ server-02
+ 0
+
+
+ DeviceInterfaceLink
+ true
+ 40000
+ s6100-dev-1
+ fortyGigE1/1/9
+ true
+ server-03
+ 0
+
+
+ DeviceInterfaceLink
+ true
+ 40000
+ s6100-dev-1
+ fortyGigE1/1/10
+ true
+ server-04
+ 0
+
+
+ DeviceInterfaceLink
+ true
+ 40000
+ s6100-dev-1
+ fortyGigE1/1/11
+ true
+ server-05
+ 0
+
+
+ DeviceInterfaceLink
+ true
+ 40000
+ s6100-dev-1
+ fortyGigE1/1/12
+ true
+ server-06
+ 0
+
+
+ DeviceInterfaceLink
+ true
+ 40000
+ s6100-dev-1
+ fortyGigE1/1/13
+ true
+ server-07
+ 0
+
+
+ DeviceInterfaceLink
+ true
+ 40000
+ s6100-dev-1
+ fortyGigE1/1/14
+ true
+ server-08
+ 0
+
+
+ DeviceInterfaceLink
+ true
+ 40000
+ s6100-dev-1
+ fortyGigE1/1/15
+ true
+ server-09
+ 0
+
+
+ DeviceInterfaceLink
+ true
+ 40000
+ s6100-dev-1
+ fortyGigE1/1/16
+ true
+ server-10
+ 0
+
+
+ DeviceInterfaceLink
+ true
+ 40000
+ s6100-dev-1
+ fortyGigE1/3/1
+ true
+ server-11
+ 0
+
+
+ DeviceInterfaceLink
+ true
+ 40000
+ s6100-dev-1
+ fortyGigE1/3/5
+ true
+ server-12
+ 0
+
+
+ DeviceInterfaceLink
+ true
+ 40000
+ s6100-dev-1
+ fortyGigE1/3/6
+ true
+ server-13
+ 0
+
+
+ DeviceInterfaceLink
+ true
+ 40000
+ s6100-dev-1
+ fortyGigE1/3/7
+ true
+ server-14
+ 0
+
+
+ DeviceInterfaceLink
+ true
+ 40000
+ s6100-dev-1
+ fortyGigE1/3/8
+ true
+ server-15
+ 0
+
+
+ DeviceInterfaceLink
+ true
+ 40000
+ s6100-dev-1
+ fortyGigE1/3/9
+ true
+ server-16
+ 0
+
+
+ DeviceInterfaceLink
+ true
+ 40000
+ s6100-dev-1
+ fortyGigE1/3/10
+ true
+ server-17
+ 0
+
+
+ DeviceInterfaceLink
+ true
+ 40000
+ s6100-dev-1
+ fortyGigE1/3/11
+ true
+ server-18
+ 0
+
+
+ DeviceInterfaceLink
+ true
+ 40000
+ s6100-dev-1
+ fortyGigE1/2/7
+ true
+ server-19
+ 0
+
+
+ DeviceInterfaceLink
+ true
+ 40000
+ s6100-dev-1
+ fortyGigE1/2/8
+ true
+ server-20
+ 0
+
+
+ DeviceInterfaceLink
+ true
+ 40000
+ s6100-dev-1
+ fortyGigE1/2/9
+ true
+ server-21
+ 0
+
+
+ DeviceInterfaceLink
+ true
+ 40000
+ s6100-dev-1
+ fortyGigE1/2/10
+ true
+ server-22
+ 0
+
+
+ DeviceInterfaceLink
+ true
+ 40000
+ s6100-dev-1
+ fortyGigE1/2/11
+ true
+ server-23
+ 0
+
+
+ DeviceInterfaceLink
+ true
+ 40000
+ s6100-dev-1
+ fortyGigE1/2/12
+ true
+ server-24
+ 0
+
+
+ DeviceInterfaceLink
+ true
+ 40000
+ s6100-dev-1
+ fortyGigE1/2/13
+ true
+ server-25
+ 0
+
+
+ DeviceInterfaceLink
+ true
+ 40000
+ s6100-dev-1
+ fortyGigE1/2/14
+ true
+ server-26
+ 0
+
+
+ DeviceInterfaceLink
+ true
+ 40000
+ s6100-dev-1
+ fortyGigE1/2/15
+ true
+ server-27
+ 0
+
+
+ DeviceInterfaceLink
+ true
+ 40000
+ s6100-dev-1
+ fortyGigE1/2/16
+ true
+ server-28
+ 0
+
+
+ DeviceInterfaceLink
+ true
+ 40000
+ s6100-dev-1
+ fortyGigE1/4/1
+ true
+ server-29
+ 0
+
+
+ DeviceInterfaceLink
+ true
+ 40000
+ s6100-dev-1
+ fortyGigE1/4/5
+ true
+ server-30
+ 0
+
+
+ DeviceInterfaceLink
+ true
+ 40000
+ s6100-dev-1
+ fortyGigE1/4/6
+ true
+ server-31
+ 0
+
+
+ DeviceInterfaceLink
+ true
+ 40000
+ s6100-dev-1
+ fortyGigE1/4/7
+ true
+ server-32
+ 0
+
+
+ DeviceInterfaceLink
+ true
+ 40000
+ s6100-dev-1
+ fortyGigE1/4/8
+ true
+ server-33
+ 0
+
+
+ DeviceInterfaceLink
+ true
+ 40000
+ s6100-dev-1
+ fortyGigE1/4/9
+ true
+ server-34
+ 0
+
+
+ DeviceInterfaceLink
+ true
+ 40000
+ s6100-dev-1
+ fortyGigE1/4/10
+ true
+ server-35
+ 0
+
+
+ DeviceInterfaceLink
+ true
+ 40000
+ s6100-dev-1
+ fortyGigE1/4/11
+ true
+ server-36
+ 0
+
+
+
+
+ s6100-dev-1
+ Force10-S6100
+
+ 10.0.0.243
+
+
+
+
+
+
+
+ s6100-dev-1
+
+
+ ErspanDestinationIpv4
+
+ 10.0.0.16
+
+
+
+
+
+
+ s6100-dev-1
+ Force10-S6100
+
\ No newline at end of file
diff --git a/src/sonic-config-engine/tests/sample_output/bgpd.conf b/src/sonic-config-engine/tests/sample_output/bgpd.conf
index 4416b4628569..86ce28f3b67d 100644
--- a/src/sonic-config-engine/tests/sample_output/bgpd.conf
+++ b/src/sonic-config-engine/tests/sample_output/bgpd.conf
@@ -32,6 +32,7 @@ router bgp 65100
address-family ipv4
neighbor 10.0.0.57 allowas-in 1
neighbor 10.0.0.57 activate
+ neighbor 10.0.0.57 soft-reconfiguration inbound
maximum-paths 64
exit-address-family
neighbor 10.0.0.59 remote-as 64600
@@ -39,6 +40,7 @@ router bgp 65100
address-family ipv4
neighbor 10.0.0.59 allowas-in 1
neighbor 10.0.0.59 activate
+ neighbor 10.0.0.59 soft-reconfiguration inbound
maximum-paths 64
exit-address-family
neighbor 10.0.0.61 remote-as 64600
@@ -46,6 +48,7 @@ router bgp 65100
address-family ipv4
neighbor 10.0.0.61 allowas-in 1
neighbor 10.0.0.61 activate
+ neighbor 10.0.0.61 soft-reconfiguration inbound
maximum-paths 64
exit-address-family
neighbor 10.0.0.63 remote-as 64600
@@ -53,6 +56,7 @@ router bgp 65100
address-family ipv4
neighbor 10.0.0.63 allowas-in 1
neighbor 10.0.0.63 activate
+ neighbor 10.0.0.63 soft-reconfiguration inbound
maximum-paths 64
exit-address-family
neighbor fc00::7a remote-as 64600
@@ -60,6 +64,7 @@ router bgp 65100
address-family ipv6
neighbor fc00::7a allowas-in 1
neighbor fc00::7a activate
+ neighbor fc00::7a soft-reconfiguration inbound
maximum-paths 64
exit-address-family
neighbor fc00::7e remote-as 64600
@@ -67,6 +72,7 @@ router bgp 65100
address-family ipv6
neighbor fc00::7e allowas-in 1
neighbor fc00::7e activate
+ neighbor fc00::7e soft-reconfiguration inbound
maximum-paths 64
exit-address-family
neighbor fc00::72 remote-as 64600
@@ -74,6 +80,7 @@ router bgp 65100
address-family ipv6
neighbor fc00::72 allowas-in 1
neighbor fc00::72 activate
+ neighbor fc00::72 soft-reconfiguration inbound
maximum-paths 64
exit-address-family
neighbor fc00::76 remote-as 64600
@@ -81,6 +88,7 @@ router bgp 65100
address-family ipv6
neighbor fc00::76 allowas-in 1
neighbor fc00::76 activate
+ neighbor fc00::76 soft-reconfiguration inbound
maximum-paths 64
exit-address-family
!
diff --git a/src/sonic-config-engine/tests/sample_output/buffers-dell6100.json b/src/sonic-config-engine/tests/sample_output/buffers-dell6100.json
new file mode 100644
index 000000000000..9f2ae6583913
--- /dev/null
+++ b/src/sonic-config-engine/tests/sample_output/buffers-dell6100.json
@@ -0,0 +1,121 @@
+
+{
+ "CABLE_LENGTH": {
+ "AZURE": {
+ "Ethernet0": "5m",
+ "Ethernet1": "5m",
+ "Ethernet2": "5m",
+ "Ethernet3": "5m",
+ "Ethernet4": "5m",
+ "Ethernet5": "5m",
+ "Ethernet6": "5m",
+ "Ethernet7": "5m",
+ "Ethernet8": "5m",
+ "Ethernet9": "5m",
+ "Ethernet10": "5m",
+ "Ethernet11": "5m",
+ "Ethernet12": "5m",
+ "Ethernet13": "5m",
+ "Ethernet14": "5m",
+ "Ethernet15": "5m",
+ "Ethernet16": "5m",
+ "Ethernet17": "5m",
+ "Ethernet18": "5m",
+ "Ethernet19": "5m",
+ "Ethernet20": "5m",
+ "Ethernet21": "5m",
+ "Ethernet22": "5m",
+ "Ethernet23": "5m",
+ "Ethernet24": "5m",
+ "Ethernet25": "5m",
+ "Ethernet26": "5m",
+ "Ethernet27": "5m",
+ "Ethernet28": "5m",
+ "Ethernet29": "5m",
+ "Ethernet30": "5m",
+ "Ethernet31": "5m",
+ "Ethernet32": "5m",
+ "Ethernet33": "5m",
+ "Ethernet34": "5m",
+ "Ethernet35": "5m",
+ "Ethernet36": "5m",
+ "Ethernet37": "5m",
+ "Ethernet38": "5m",
+ "Ethernet39": "5m",
+ "Ethernet40": "5m",
+ "Ethernet41": "5m",
+ "Ethernet42": "5m",
+ "Ethernet43": "5m",
+ "Ethernet44": "5m",
+ "Ethernet45": "5m",
+ "Ethernet46": "5m",
+ "Ethernet47": "5m",
+ "Ethernet48": "5m",
+ "Ethernet49": "5m",
+ "Ethernet50": "5m",
+ "Ethernet51": "5m",
+ "Ethernet52": "5m",
+ "Ethernet53": "5m",
+ "Ethernet54": "5m",
+ "Ethernet55": "5m",
+ "Ethernet56": "5m",
+ "Ethernet57": "5m",
+ "Ethernet58": "5m",
+ "Ethernet59": "5m",
+ "Ethernet60": "5m",
+ "Ethernet61": "5m",
+ "Ethernet62": "5m",
+ "Ethernet63": "5m"
+ }
+ },
+
+ "BUFFER_POOL": {
+ "ingress_lossless_pool": {
+ "size": "11213696",
+ "type": "ingress",
+ "mode": "dynamic",
+ "xoff": "3855488"
+ },
+ "egress_lossy_pool": {
+ "size": "9532224",
+ "type": "egress",
+ "mode": "dynamic"
+ },
+ "egress_lossless_pool": {
+ "size": "15982720",
+ "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"
+ }
+ },
+ "BUFFER_PG": {
+ "Ethernet0,Ethernet1,Ethernet4,Ethernet5,Ethernet6,Ethernet7,Ethernet8,Ethernet9,Ethernet10,Ethernet11,Ethernet12,Ethernet13,Ethernet14,Ethernet15,Ethernet16,Ethernet17,Ethernet20,Ethernet21,Ethernet22,Ethernet23,Ethernet24,Ethernet25,Ethernet26,Ethernet27,Ethernet28,Ethernet29,Ethernet30,Ethernet31,Ethernet32,Ethernet36,Ethernet37,Ethernet38,Ethernet39,Ethernet40,Ethernet41,Ethernet42,Ethernet48,Ethernet52,Ethernet53,Ethernet54,Ethernet55,Ethernet56,Ethernet57,Ethernet58|0-1": {
+ "profile" : "[BUFFER_PROFILE|ingress_lossy_profile]"
+ }
+ },
+
+ "BUFFER_QUEUE": {
+ "Ethernet0,Ethernet1,Ethernet4,Ethernet5,Ethernet6,Ethernet7,Ethernet8,Ethernet9,Ethernet10,Ethernet11,Ethernet12,Ethernet13,Ethernet14,Ethernet15,Ethernet16,Ethernet17,Ethernet20,Ethernet21,Ethernet22,Ethernet23,Ethernet24,Ethernet25,Ethernet26,Ethernet27,Ethernet28,Ethernet29,Ethernet30,Ethernet31,Ethernet32,Ethernet36,Ethernet37,Ethernet38,Ethernet39,Ethernet40,Ethernet41,Ethernet42,Ethernet48,Ethernet52,Ethernet53,Ethernet54,Ethernet55,Ethernet56,Ethernet57,Ethernet58|3-4": {
+ "profile" : "[BUFFER_PROFILE|egress_lossless_profile]"
+ },
+ "Ethernet0,Ethernet1,Ethernet4,Ethernet5,Ethernet6,Ethernet7,Ethernet8,Ethernet9,Ethernet10,Ethernet11,Ethernet12,Ethernet13,Ethernet14,Ethernet15,Ethernet16,Ethernet17,Ethernet20,Ethernet21,Ethernet22,Ethernet23,Ethernet24,Ethernet25,Ethernet26,Ethernet27,Ethernet28,Ethernet29,Ethernet30,Ethernet31,Ethernet32,Ethernet36,Ethernet37,Ethernet38,Ethernet39,Ethernet40,Ethernet41,Ethernet42,Ethernet48,Ethernet52,Ethernet53,Ethernet54,Ethernet55,Ethernet56,Ethernet57,Ethernet58|0-1": {
+ "profile" : "[BUFFER_PROFILE|egress_lossy_profile]"
+ }
+ }
+}
diff --git a/src/sonic-config-engine/tests/sample_output/qos-dell6100.json b/src/sonic-config-engine/tests/sample_output/qos-dell6100.json
new file mode 100644
index 000000000000..0db51148bdc5
--- /dev/null
+++ b/src/sonic-config-engine/tests/sample_output/qos-dell6100.json
@@ -0,0 +1,156 @@
+
+{
+ "TC_TO_PRIORITY_GROUP_MAP": {
+ "AZURE": {
+ "0": "0",
+ "1": "1",
+ "2": "2",
+ "3": "3",
+ "4": "4",
+ "5": "5",
+ "6": "6",
+ "7": "7"
+ }
+ },
+ "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":"3",
+ "4":"4",
+ "5":"0",
+ "6":"0",
+ "7":"0",
+ "8":"1",
+ "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": "25"
+ },
+ "scheduler.1" : {
+ "type":"DWRR",
+ "weight": "30"
+ },
+ "scheduler.2" : {
+ "type":"DWRR",
+ "weight": "20"
+ }
+ },
+ "PORT_QOS_MAP": {
+ "Ethernet0,Ethernet1,Ethernet4,Ethernet5,Ethernet6,Ethernet7,Ethernet8,Ethernet9,Ethernet10,Ethernet11,Ethernet12,Ethernet13,Ethernet14,Ethernet15,Ethernet16,Ethernet17,Ethernet20,Ethernet21,Ethernet22,Ethernet23,Ethernet24,Ethernet25,Ethernet26,Ethernet27,Ethernet28,Ethernet29,Ethernet30,Ethernet31,Ethernet32,Ethernet36,Ethernet37,Ethernet38,Ethernet39,Ethernet40,Ethernet41,Ethernet42,Ethernet48,Ethernet52,Ethernet53,Ethernet54,Ethernet55,Ethernet56,Ethernet57,Ethernet58": {
+ "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]",
+ "pfc_to_queue_map": "[MAP_PFC_PRIORITY_TO_QUEUE|AZURE]",
+ "pfc_enable": "3,4"
+ }
+ },
+ "WRED_PROFILE": {
+ "AZURE_LOSSLESS" : {
+ "wred_green_enable":"true",
+ "wred_yellow_enable":"true",
+ "wred_red_enable":"true",
+ "ecn":"ecn_all",
+ "red_max_threshold":"312000",
+ "red_min_threshold":"104000",
+ "yellow_max_threshold":"312000",
+ "yellow_min_threshold":"104000",
+ "green_max_threshold": "312000",
+ "green_min_threshold": "104000"
+ }
+ },
+ "QUEUE": {
+ "Ethernet0,Ethernet1,Ethernet4,Ethernet5,Ethernet6,Ethernet7,Ethernet8,Ethernet9,Ethernet10,Ethernet11,Ethernet12,Ethernet13,Ethernet14,Ethernet15,Ethernet16,Ethernet17,Ethernet20,Ethernet21,Ethernet22,Ethernet23,Ethernet24,Ethernet25,Ethernet26,Ethernet27,Ethernet28,Ethernet29,Ethernet30,Ethernet31,Ethernet32,Ethernet36,Ethernet37,Ethernet38,Ethernet39,Ethernet40,Ethernet41,Ethernet42,Ethernet48,Ethernet52,Ethernet53,Ethernet54,Ethernet55,Ethernet56,Ethernet57,Ethernet58|3-4" : {
+ "scheduler" : "[SCHEDULER|scheduler.0]",
+ "wred_profile" : "[WRED_PROFILE|AZURE_LOSSLESS]"
+ },
+ "Ethernet0,Ethernet1,Ethernet4,Ethernet5,Ethernet6,Ethernet7,Ethernet8,Ethernet9,Ethernet10,Ethernet11,Ethernet12,Ethernet13,Ethernet14,Ethernet15,Ethernet16,Ethernet17,Ethernet20,Ethernet21,Ethernet22,Ethernet23,Ethernet24,Ethernet25,Ethernet26,Ethernet27,Ethernet28,Ethernet29,Ethernet30,Ethernet31,Ethernet32,Ethernet36,Ethernet37,Ethernet38,Ethernet39,Ethernet40,Ethernet41,Ethernet42,Ethernet48,Ethernet52,Ethernet53,Ethernet54,Ethernet55,Ethernet56,Ethernet57,Ethernet58|0" : {
+ "scheduler" : "[SCHEDULER|scheduler.1]"
+ },
+ "Ethernet0,Ethernet1,Ethernet4,Ethernet5,Ethernet6,Ethernet7,Ethernet8,Ethernet9,Ethernet10,Ethernet11,Ethernet12,Ethernet13,Ethernet14,Ethernet15,Ethernet16,Ethernet17,Ethernet20,Ethernet21,Ethernet22,Ethernet23,Ethernet24,Ethernet25,Ethernet26,Ethernet27,Ethernet28,Ethernet29,Ethernet30,Ethernet31,Ethernet32,Ethernet36,Ethernet37,Ethernet38,Ethernet39,Ethernet40,Ethernet41,Ethernet42,Ethernet48,Ethernet52,Ethernet53,Ethernet54,Ethernet55,Ethernet56,Ethernet57,Ethernet58|1" : {
+ "scheduler" : "[SCHEDULER|scheduler.2]"
+ }
+ }
+}
diff --git a/src/sonic-config-engine/tests/test_j2files.py b/src/sonic-config-engine/tests/test_j2files.py
index aba7feb194ad..ce4b17500f8d 100644
--- a/src/sonic-config-engine/tests/test_j2files.py
+++ b/src/sonic-config-engine/tests/test_j2files.py
@@ -2,6 +2,7 @@
import os
import subprocess
import json
+import shutil
from unittest import TestCase
@@ -15,6 +16,7 @@ def setUp(self):
self.t0_port_config = os.path.join(self.test_dir, 't0-sample-port-config.ini')
self.t1_mlnx_minigraph = os.path.join(self.test_dir, 't1-sample-graph-mlnx.xml')
self.mlnx_port_config = os.path.join(self.test_dir, 'sample-port-config-mlnx.ini')
+ self.dell6100_t0_minigraph = os.path.join(self.test_dir, 'sample-dell-6100-t0-minigraph.xml')
self.output_file = os.path.join(self.test_dir, 'output')
def run_script(self, argument):
@@ -119,6 +121,35 @@ def test_sku_render_template(self):
self.assertTrue(filecmp.cmp(sample_output_file, self.output_file))
+ def test_qos_dell6100_render_template(self):
+ dell_dir_path = os.path.join(self.test_dir, '..', '..', '..', 'device', 'dell', 'x86_64-dell_s6100_c2538-r0', 'Force10-S6100')
+ qos_file = os.path.join(dell_dir_path, 'qos.json.j2')
+ port_config_ini_file = os.path.join(dell_dir_path, 'port_config.ini')
+ argument = '-m ' + self.dell6100_t0_minigraph + ' -p ' + port_config_ini_file + ' -t ' + qos_file + ' > ' + self.output_file
+ self.run_script(argument)
+
+ sample_output_file = os.path.join(self.test_dir, 'sample_output', 'qos-dell6100.json')
+ assert filecmp.cmp(sample_output_file, self.output_file)
+
+ def test_buffers_dell6100_render_template(self):
+ dell_dir_path = os.path.join(self.test_dir, '..', '..', '..', 'device', 'dell', 'x86_64-dell_s6100_c2538-r0', 'Force10-S6100')
+ buffers_file = os.path.join(dell_dir_path, 'buffers.json.j2')
+ port_config_ini_file = os.path.join(dell_dir_path, 'port_config.ini')
+
+ # copy buffers_config.j2 to the Dell S6100 directory to have all templates in one directory
+ buffers_config_file = os.path.join(self.test_dir, '..', '..', '..', 'files', 'build_templates', 'buffers_config.j2')
+ shutil.copy2(buffers_config_file, dell_dir_path)
+
+ argument = '-m ' + self.dell6100_t0_minigraph + ' -p ' + port_config_ini_file + ' -t ' + buffers_file + ' > ' + self.output_file
+ self.run_script(argument)
+
+ # cleanup
+ buffers_config_file_new = os.path.join(dell_dir_path, 'buffers_config.j2')
+ os.remove(buffers_config_file_new)
+
+ sample_output_file = os.path.join(self.test_dir, 'sample_output', 'buffers-dell6100.json')
+ assert filecmp.cmp(sample_output_file, self.output_file)
+
def tearDown(self):
try:
os.remove(self.output_file)
diff --git a/src/sonic-dbsyncd b/src/sonic-dbsyncd
index 1d0b2165e097..94f2700f67f8 160000
--- a/src/sonic-dbsyncd
+++ b/src/sonic-dbsyncd
@@ -1 +1 @@
-Subproject commit 1d0b2165e097ee668c8e982cf3cf413e4f2555d2
+Subproject commit 94f2700f67f87b431c7ce45e4b9d7788707c6732
diff --git a/src/sonic-platform-common b/src/sonic-platform-common
index 9adb75feee6d..76ae431e41dc 160000
--- a/src/sonic-platform-common
+++ b/src/sonic-platform-common
@@ -1 +1 @@
-Subproject commit 9adb75feee6de75bd2e9faf542ac5610edc3fa35
+Subproject commit 76ae431e41dca1255f8056b590668c9ca187f031
diff --git a/src/sonic-platform-daemons b/src/sonic-platform-daemons
index 6d35814d9841..ce83d58b0aff 160000
--- a/src/sonic-platform-daemons
+++ b/src/sonic-platform-daemons
@@ -1 +1 @@
-Subproject commit 6d35814d9841f34effa99fe053a5156602e106f4
+Subproject commit ce83d58b0afffaa3e0b9d57686c814a2b5fd771e
diff --git a/src/sonic-quagga b/src/sonic-quagga
index 0bc6bd6b208e..cde29666c363 160000
--- a/src/sonic-quagga
+++ b/src/sonic-quagga
@@ -1 +1 @@
-Subproject commit 0bc6bd6b208e3701df89c3e231c48f3bdb3d046f
+Subproject commit cde29666c363e34ea7f230bb827644457acedcbc
diff --git a/src/sonic-sairedis b/src/sonic-sairedis
index 4ef45eed56a4..8585fc84d422 160000
--- a/src/sonic-sairedis
+++ b/src/sonic-sairedis
@@ -1 +1 @@
-Subproject commit 4ef45eed56a4ec34c225d2a37cc02efc2131033b
+Subproject commit 8585fc84d422abf74d472702de7ad5ab20aa55e5
diff --git a/src/sonic-swss b/src/sonic-swss
index 4df9c289a6c2..762e7da80142 160000
--- a/src/sonic-swss
+++ b/src/sonic-swss
@@ -1 +1 @@
-Subproject commit 4df9c289a6c2d41e4dee09f3055f0ac6d8e98ded
+Subproject commit 762e7da80142358af0d348dea1143f38aa60a992
diff --git a/src/sonic-swss-common b/src/sonic-swss-common
index b4367a440fb7..8c5dab6b3417 160000
--- a/src/sonic-swss-common
+++ b/src/sonic-swss-common
@@ -1 +1 @@
-Subproject commit b4367a440fb7b188c60774808195164438061bba
+Subproject commit 8c5dab6b341752b4bda3f63917a9c143df778322
diff --git a/src/sonic-utilities b/src/sonic-utilities
index e2a3228843be..4a36190b0bd7 160000
--- a/src/sonic-utilities
+++ b/src/sonic-utilities
@@ -1 +1 @@
-Subproject commit e2a3228843bec8280c965b847f5c168f4d96d231
+Subproject commit 4a36190b0bd7f8e551431af6804060d5cf8ab26a
diff --git a/src/tacacs/nss/0002-Enable-modifying-local-user-permission.patch b/src/tacacs/nss/0002-Enable-modifying-local-user-permission.patch
new file mode 100644
index 000000000000..2c476354705a
--- /dev/null
+++ b/src/tacacs/nss/0002-Enable-modifying-local-user-permission.patch
@@ -0,0 +1,71 @@
+From 7045acb8f530331d3fbabef20bcf2787d3430c55 Mon Sep 17 00:00:00 2001
+From: Taoyu Li
+Date: Thu, 21 Jun 2018 19:21:01 +0000
+Subject: [PATCH] Do authorization and modify user permission even if local
+ user exists
+
+---
+ nss_tacplus.c | 18 ++++++++++--------
+ 1 file changed, 10 insertions(+), 8 deletions(-)
+
+diff --git a/nss_tacplus.c b/nss_tacplus.c
+index 63f01d4..a13c278 100644
+--- a/nss_tacplus.c
++++ b/nss_tacplus.c
+@@ -408,7 +408,7 @@ static int delete_conf_line(const char *name)
+ * conf, it will be written in conf and created by command 'useradd'. When
+ * useradd command use getpwnam(), it will return when username found in conf.
+ */
+-static int create_local_user(const char *name, int level)
++static int create_or_modify_local_user(const char *name, int level, bool existing_user)
+ {
+ FILE *fp;
+ useradd_info_t *user;
+@@ -416,6 +416,7 @@ static int create_local_user(const char *name, int level)
+ int len = 512;
+ int lvl, cnt;
+ bool found = false;
++ const char* command = existing_user ? "/usr/sbin/usermod": "/usr/sbin/useradd";
+
+ fp = fopen(user_conf, "ab+");
+ if(!fp) {
+@@ -458,17 +459,18 @@ static int create_local_user(const char *name, int level)
+ while(lvl >= MIN_TACACS_USER_PRIV) {
+ user = &useradd_grp_list[lvl];
+ if(user->info && user->secondary_grp && user->shell) {
+- snprintf(buf, len, "useradd -G %s \"%s\" -g %d -c \"%s\" -d /home/%s -m -s %s",
+- user->secondary_grp, name, user->gid, user->info, name, user->shell);
++ snprintf(buf, len, "%s -G %s \"%s\" -g %d -c \"%s\" -d /home/%s -m -s %s",
++ command, user->secondary_grp, name, user->gid, user->info, name, user->shell);
++ if(debug) syslog(LOG_DEBUG, "%s", buf);
+ fp = popen(buf, "r");
+ if(!fp || -1 == pclose(fp)) {
+- syslog(LOG_ERR, "%s: useradd popen failed errno=%d %s",
+- nssname, errno, strerror(errno));
++ syslog(LOG_ERR, "%s: %s popen failed errno=%d %s",
++ nssname, command, errno, strerror(errno));
+ delete_conf_line(name);
+ return -1;
+ }
+ if(debug)
+- syslog(LOG_DEBUG, "%s: create local user %s success", nssname, name);
++ syslog(LOG_DEBUG, "%s: %s %s success", nssname, command, name);
+ delete_conf_line(name);
+ return 0;
+ }
+@@ -558,10 +560,10 @@ static int lookup_user_pw(struct pwbuf *pb, int level)
+ if(debug)
+ syslog(LOG_DEBUG, "%s: %s passwd %s found in local", nssname, username,
+ found ? "is" : "isn't");
+- if(0 != ret || found)
++ if(0 != ret)
+ return ret;
+
+- if(0 != create_local_user(username, level))
++ if(0 != create_or_modify_local_user(username, level, found))
+ return -1;
+
+ ret = lookup_pw_local(username, pb, &found);
+--
+2.9.3
+
diff --git a/src/tacacs/nss/Makefile b/src/tacacs/nss/Makefile
index 4f1a337b34b4..259e9b281389 100644
--- a/src/tacacs/nss/Makefile
+++ b/src/tacacs/nss/Makefile
@@ -12,7 +12,8 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% :
git checkout -f 19008ab
# Apply patch
- git apply ../0001-Modify-user-map-profile.patch
+ git am ../0001-Modify-user-map-profile.patch
+ git am ../0002-Enable-modifying-local-user-permission.patch
dpkg-buildpackage -rfakeroot -b -us -uc
popd