diff --git a/.gitignore b/.gitignore
index 2222458d1026..2ab113a44eff 100644
--- a/.gitignore
+++ b/.gitignore
@@ -24,11 +24,19 @@ src/snmpd/*
src/thrift/*
!src/thrift/Makefile
src/sonic-device-data/src/device/
+src/sonic-device-data/src/debian/
+src/igb/*
+!src/igb/Makefile
+src/mpdecimal/*
+!src/mpdecimal/Makefile
+src/python3/*
+!src/python3/Makefile
# Autogenerated Dockerfiles
dockers/docker-base/Dockerfile
dockers/docker-config-engine/Dockerfile
dockers/docker-database/Dockerfile
+dockers/docker-dhcp-relay/Dockerfile
dockers/docker-fpm-frr/Dockerfile
dockers/docker-fpm-gobgp/Dockerfile
dockers/docker-fpm-quagga/Dockerfile
@@ -42,3 +50,8 @@ platform/*/docker-syncd-*-rpc/Dockerfile
# Installer-related files and directories
installer/x86_64/platforms/
+
+# Config engine
+src/sonic-config-engine/**/*.pyc
+src/sonic-config-engine/build
+src/sonic-config-engine/sonic_config_engine.egg-info
diff --git a/.gitmodules b/.gitmodules
index 99938c4abaca..454019f9ebdd 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -63,3 +63,6 @@
[submodule "src/sonic-platform-daemons"]
path = src/sonic-platform-daemons
url = https://github.com/Azure/sonic-platform-daemons
+[submodule "platform/broadcom/sonic-platform-modules-accton"]
+ path = platform/broadcom/sonic-platform-modules-accton
+ url = https://github.com/edge-core/sonic-platform-modules-accton.git
diff --git a/README.md b/README.md
index 0c2d30cf6bae..c3d58ae1b538 100644
--- a/README.md
+++ b/README.md
@@ -42,7 +42,7 @@ To build SONiC installer image and docker images, run the following commands:
**NOTE**: We recommend reserving 50G free space to build one platform.
-The SONIiC installer contains all docker images needed. SONiC use one image for all switches devices of a same ASIC vendor. The supported ASIC vendors are:
+The SONiC installer contains all docker images needed. SONiC uses one image for all devices of a same ASIC vendor. The supported ASIC vendors are:
- PLATFORM=broadcom
- PLATFORM=marvell (*pending*)
diff --git a/build_debian.sh b/build_debian.sh
index eed63e6eb070..1e18ec45afbc 100755
--- a/build_debian.sh
+++ b/build_debian.sh
@@ -176,6 +176,7 @@ sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y in
sudo \
vim \
tcpdump \
+ dbus \
ntp \
ntpstat \
openssh-server \
@@ -264,6 +265,8 @@ set /files/etc/sysctl.conf/net.ipv6.conf.default.accept_dad 0
set /files/etc/sysctl.conf/net.ipv6.conf.all.accept_dad 0
set /files/etc/sysctl.conf/net.ipv6.conf.eth0.accept_ra_defrtr 0
+
+set /files/etc/sysctl.conf/net.core.rmem_max 2097152
" -r $FILESYSTEM_ROOT
## docker-py is needed by Ansible docker module
diff --git a/device/accton/x86_64-accton_as7712_32x-r0/Accton-AS7712-32X/port_config.ini b/device/accton/x86_64-accton_as7712_32x-r0/Accton-AS7712-32X/port_config.ini
new file mode 100644
index 000000000000..1fa6d21d9609
--- /dev/null
+++ b/device/accton/x86_64-accton_as7712_32x-r0/Accton-AS7712-32X/port_config.ini
@@ -0,0 +1,33 @@
+# name lanes alias
+Ethernet0 49,50,51,52 hundredGigE1
+Ethernet4 53,54,55,56 hundredGigE2
+Ethernet8 57,58,59,60 hundredGigE3
+Ethernet12 61,62,63,64 hundredGigE4
+Ethernet16 65,66,67,68 hundredGigE5
+Ethernet20 69,70,71,72 hundredGigE6
+Ethernet24 73,74,75,76 hundredGigE7
+Ethernet28 77,78,79,80 hundredGigE8
+Ethernet32 33,34,35,36 hundredGigE9
+Ethernet36 37,38,39,40 hundredGigE10
+Ethernet40 41,42,43,44 hundredGigE11
+Ethernet44 45,46,47,48 hundredGigE12
+Ethernet48 81,82,83,84 hundredGigE13
+Ethernet52 85,86,87,88 hundredGigE14
+Ethernet56 89,90,91,92 hundredGigE15
+Ethernet60 93,94,95,96 hundredGigE16
+Ethernet64 97,98,99,100 hundredGigE17
+Ethernet68 101,102,103,104 hundredGigE18
+Ethernet72 105,106,107,108 hundredGigE19
+Ethernet76 109,110,111,112 hundredGigE20
+Ethernet80 17,18,19,20 hundredGigE21
+Ethernet84 21,22,23,24 hundredGigE22
+Ethernet88 25,26,27,28 hundredGigE23
+Ethernet92 29,30,31,32 hundredGigE24
+Ethernet96 113,114,115,116 hundredGigE25
+Ethernet100 117,118,119,120 hundredGigE26
+Ethernet104 121,122,123,124 hundredGigE27
+Ethernet108 125,126,127,128 hundredGigE28
+Ethernet112 1,2,3,4 hundredGigE29
+Ethernet116 5,6,7,8 hundredGigE30
+Ethernet120 9,10,11,12 hundredGigE31
+Ethernet124 13,14,15,16 hundredGigE32
diff --git a/device/accton/x86_64-accton_as7712_32x-r0/Accton-AS7712-32X/sai.profile b/device/accton/x86_64-accton_as7712_32x-r0/Accton-AS7712-32X/sai.profile
new file mode 100644
index 000000000000..5ed350f24d7f
--- /dev/null
+++ b/device/accton/x86_64-accton_as7712_32x-r0/Accton-AS7712-32X/sai.profile
@@ -0,0 +1,2 @@
+SAI_INIT_CONFIG_FILE=/etc/bcm/th-as7712-32x100G.config.bcm
+
diff --git a/device/accton/x86_64-accton_as7712_32x-r0/installer.conf b/device/accton/x86_64-accton_as7712_32x-r0/installer.conf
new file mode 100644
index 000000000000..14404194ef53
--- /dev/null
+++ b/device/accton/x86_64-accton_as7712_32x-r0/installer.conf
@@ -0,0 +1,3 @@
+CONSOLE_PORT=0x2f8
+CONSOLE_DEV=1
+CONSOLE_SPEED=115200
diff --git a/device/accton/x86_64-accton_as7712_32x-r0/minigraph.xml b/device/accton/x86_64-accton_as7712_32x-r0/minigraph.xml
new file mode 100644
index 000000000000..025985c83675
--- /dev/null
+++ b/device/accton/x86_64-accton_as7712_32x-r0/minigraph.xml
@@ -0,0 +1,1074 @@
+
+
+
+
+
+ ARISTA01T0
+ 10.0.0.33
+ switch1
+ 10.0.0.32
+ 1
+ 180
+ 60
+
+
+ switch1
+ 10.0.0.0
+ ARISTA01T2
+ 10.0.0.1
+ 1
+ 180
+ 60
+
+
+ ARISTA02T0
+ 10.0.0.35
+ switch1
+ 10.0.0.34
+ 1
+ 180
+ 60
+
+
+ switch1
+ 10.0.0.2
+ ARISTA02T2
+ 10.0.0.3
+ 1
+ 180
+ 60
+
+
+ ARISTA03T0
+ 10.0.0.37
+ switch1
+ 10.0.0.36
+ 1
+ 180
+ 60
+
+
+ switch1
+ 10.0.0.4
+ ARISTA03T2
+ 10.0.0.5
+ 1
+ 180
+ 60
+
+
+ ARISTA04T0
+ 10.0.0.39
+ switch1
+ 10.0.0.38
+ 1
+ 180
+ 60
+
+
+ switch1
+ 10.0.0.6
+ ARISTA04T2
+ 10.0.0.7
+ 1
+ 180
+ 60
+
+
+ ARISTA05T0
+ 10.0.0.41
+ switch1
+ 10.0.0.40
+ 1
+ 180
+ 60
+
+
+ switch1
+ 10.0.0.8
+ ARISTA05T2
+ 10.0.0.9
+ 1
+ 180
+ 60
+
+
+ ARISTA06T0
+ 10.0.0.43
+ switch1
+ 10.0.0.42
+ 1
+ 180
+ 60
+
+
+ switch1
+ 10.0.0.10
+ ARISTA06T2
+ 10.0.0.11
+ 1
+ 180
+ 60
+
+
+ ARISTA07T0
+ 10.0.0.45
+ switch1
+ 10.0.0.44
+ 1
+ 180
+ 60
+
+
+ switch1
+ 10.0.0.12
+ ARISTA07T2
+ 10.0.0.13
+ 1
+ 180
+ 60
+
+
+ ARISTA08T0
+ 10.0.0.47
+ switch1
+ 10.0.0.46
+ 1
+ 180
+ 60
+
+
+ switch1
+ 10.0.0.14
+ ARISTA08T2
+ 10.0.0.15
+ 1
+ 180
+ 60
+
+
+ ARISTA09T0
+ 10.0.0.49
+ switch1
+ 10.0.0.48
+ 1
+ 180
+ 60
+
+
+ switch1
+ 10.0.0.16
+ ARISTA09T2
+ 10.0.0.17
+ 1
+ 180
+ 60
+
+
+ ARISTA10T0
+ 10.0.0.51
+ switch1
+ 10.0.0.50
+ 1
+ 180
+ 60
+
+
+ switch1
+ 10.0.0.18
+ ARISTA10T2
+ 10.0.0.19
+ 1
+ 180
+ 60
+
+
+ ARISTA11T0
+ 10.0.0.53
+ switch1
+ 10.0.0.52
+ 1
+ 180
+ 60
+
+
+ switch1
+ 10.0.0.20
+ ARISTA11T2
+ 10.0.0.21
+ 1
+ 180
+ 60
+
+
+ ARISTA12T0
+ 10.0.0.55
+ switch1
+ 10.0.0.54
+ 1
+ 180
+ 60
+
+
+ switch1
+ 10.0.0.22
+ ARISTA12T2
+ 10.0.0.23
+ 1
+ 180
+ 60
+
+
+ ARISTA13T0
+ 10.0.0.57
+ switch1
+ 10.0.0.56
+ 1
+ 180
+ 60
+
+
+ switch1
+ 10.0.0.24
+ ARISTA13T2
+ 10.0.0.25
+ 1
+ 180
+ 60
+
+
+ ARISTA14T0
+ 10.0.0.59
+ switch1
+ 10.0.0.58
+ 1
+ 180
+ 60
+
+
+ switch1
+ 10.0.0.26
+ ARISTA14T2
+ 10.0.0.27
+ 1
+ 180
+ 60
+
+
+ ARISTA15T0
+ 10.0.0.61
+ switch1
+ 10.0.0.60
+ 1
+ 180
+ 60
+
+
+ switch1
+ 10.0.0.28
+ ARISTA15T2
+ 10.0.0.29
+ 1
+ 180
+ 60
+
+
+ ARISTA16T0
+ 10.0.0.63
+ switch1
+ 10.0.0.62
+ 1
+ 180
+ 60
+
+
+ switch1
+ 10.0.0.30
+ ARISTA16T2
+ 10.0.0.31
+ 1
+ 180
+ 60
+
+
+
+
+ 65100
+ switch1
+
+
+ 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
+
+
+
+
+
+
+
+ switch1
+
+
+
+
+
+ Ethernet0
+ 10.0.0.0/31
+
+
+
+ Ethernet4
+ 10.0.0.2/31
+
+
+
+ Ethernet8
+ 10.0.0.4/31
+
+
+
+ Ethernet12
+ 10.0.0.6/31
+
+
+
+ Ethernet16
+ 10.0.0.8/31
+
+
+
+ Ethernet20
+ 10.0.0.10/31
+
+
+
+ Ethernet24
+ 10.0.0.12/31
+
+
+
+ Ethernet28
+ 10.0.0.14/31
+
+
+
+ Ethernet32
+ 10.0.0.16/31
+
+
+
+ Ethernet36
+ 10.0.0.18/31
+
+
+
+ Ethernet40
+ 10.0.0.20/31
+
+
+
+ Ethernet44
+ 10.0.0.22/31
+
+
+
+ Ethernet48
+ 10.0.0.24/31
+
+
+
+ Ethernet52
+ 10.0.0.26/31
+
+
+
+ Ethernet56
+ 10.0.0.28/31
+
+
+
+ Ethernet60
+ 10.0.0.30/31
+
+
+
+ Ethernet64
+ 10.0.0.32/31
+
+
+
+ Ethernet68
+ 10.0.0.34/31
+
+
+
+ Ethernet72
+ 10.0.0.36/31
+
+
+
+ Ethernet76
+ 10.0.0.38/31
+
+
+
+ Ethernet80
+ 10.0.0.40/31
+
+
+
+ Ethernet84
+ 10.0.0.42/31
+
+
+
+ Ethernet88
+ 10.0.0.44/31
+
+
+
+ Ethernet92
+ 10.0.0.46/31
+
+
+
+ Ethernet96
+ 10.0.0.48/31
+
+
+
+ Ethernet100
+ 10.0.0.50/31
+
+
+
+ Ethernet104
+ 10.0.0.52/31
+
+
+
+ Ethernet108
+ 10.0.0.54/31
+
+
+
+ Ethernet112
+ 10.0.0.56/31
+
+
+
+ Ethernet116
+ 10.0.0.58/31
+
+
+
+ Ethernet120
+ 10.0.0.60/31
+
+
+
+ Ethernet124
+ 10.0.0.62/31
+
+
+
+
+
+
+
+
+
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet0
+ ARISTA01T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet4
+ ARISTA02T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet8
+ ARISTA03T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet12
+ ARISTA04T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet16
+ ARISTA05T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet20
+ ARISTA06T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet24
+ ARISTA07T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet28
+ ARISTA08T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet32
+ ARISTA09T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet36
+ ARISTA10T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet40
+ ARISTA11T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet44
+ ARISTA12T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet48
+ ARISTA13T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet52
+ ARISTA14T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet56
+ ARISTA15T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet60
+ ARISTA16T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet64
+ ARISTA01T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet68
+ ARISTA02T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet72
+ ARISTA03T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet76
+ ARISTA04T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet80
+ ARISTA05T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet84
+ ARISTA06T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet88
+ ARISTA07T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet92
+ ARISTA08T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet96
+ ARISTA09T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet100
+ ARISTA10T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet104
+ ARISTA11T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet108
+ ARISTA12T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet112
+ ARISTA13T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet116
+ ARISTA14T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet120
+ ARISTA15T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet124
+ ARISTA16T0
+ Ethernet1
+
+
+
+
+ switch1
+ Accton-AS7712-32X
+
+
+
+
+
+
+ switch1
+
+
+ DhcpResources
+
+
+
+
+ NtpResources
+
+ 0.debian.pool.ntp.org;1.debian.pool.ntp.org;2.debian.pool.ntp.org;3.debian.pool.ntp.org
+
+
+ SyslogResources
+
+
+
+
+
+
+
+
+ switch1
+ Accton-AS7712-32X
+
diff --git a/device/accton/x86_64-accton_as7712_32x-r0/plugins/eeprom.py b/device/accton/x86_64-accton_as7712_32x-r0/plugins/eeprom.py
new file mode 100644
index 000000000000..7681caafeef4
--- /dev/null
+++ b/device/accton/x86_64-accton_as7712_32x-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_as7712_32x-r0/plugins/sfputil.py b/device/accton/x86_64-accton_as7712_32x-r0/plugins/sfputil.py
new file mode 100644
index 000000000000..6dc35d72bb21
--- /dev/null
+++ b/device/accton/x86_64-accton_as7712_32x-r0/plugins/sfputil.py
@@ -0,0 +1,60 @@
+#!/usr/bin/env python
+
+try:
+ from sonic_sfp.sfputilbase import sfputilbase
+except ImportError, e:
+ raise ImportError (str(e) + "- required module not found")
+
+
+class sfputil(sfputilbase):
+ """Platform specific sfputil class"""
+
+ port_start = 0
+ port_end = 31
+ ports_in_block = 32
+
+ port_to_eeprom_mapping = {}
+ port_to_i2c_mapping = {
+ 9 : 18,
+ 10 : 19,
+ 11 : 20,
+ 12 : 21,
+ 1 : 22,
+ 2 : 23,
+ 3 : 24,
+ 4 : 25,
+ 6 : 26,
+ 5 : 27,
+ 8 : 28,
+ 7 : 29,
+ 13 : 30,
+ 14 : 31,
+ 15 : 32,
+ 16 : 33,
+ 17 : 34,
+ 18 : 35,
+ 19 : 36,
+ 20 : 37,
+ 25 : 38,
+ 26 : 39,
+ 27 : 40,
+ 28 : 41,
+ 29 : 42,
+ 30 : 43,
+ 31 : 44,
+ 32 : 45,
+ 21 : 46,
+ 22 : 47,
+ 23 : 48,
+ 24 : 49,
+ }
+
+ _qsfp_ports = range(0, ports_in_block + 1)
+
+ def __init__(self, port_num):
+ # Override port_to_eeprom_mapping for class initialization
+ eeprom_path = '/sys/bus/i2c/devices/{0}-0050/sfp_eeprom'
+ for x in range(self.port_start, self.port_end + 1):
+ port_eeprom_path = eeprom_path.format(self.port_to_i2c_mapping[x+1])
+ self.port_to_eeprom_mapping[x] = port_eeprom_path
+ sfputilbase.__init__(self, port_num)
diff --git a/device/accton/x86_64-accton_as7716_32x-r0/Accton-AS7716-32X/port_config.ini b/device/accton/x86_64-accton_as7716_32x-r0/Accton-AS7716-32X/port_config.ini
new file mode 100644
index 000000000000..1fa6d21d9609
--- /dev/null
+++ b/device/accton/x86_64-accton_as7716_32x-r0/Accton-AS7716-32X/port_config.ini
@@ -0,0 +1,33 @@
+# name lanes alias
+Ethernet0 49,50,51,52 hundredGigE1
+Ethernet4 53,54,55,56 hundredGigE2
+Ethernet8 57,58,59,60 hundredGigE3
+Ethernet12 61,62,63,64 hundredGigE4
+Ethernet16 65,66,67,68 hundredGigE5
+Ethernet20 69,70,71,72 hundredGigE6
+Ethernet24 73,74,75,76 hundredGigE7
+Ethernet28 77,78,79,80 hundredGigE8
+Ethernet32 33,34,35,36 hundredGigE9
+Ethernet36 37,38,39,40 hundredGigE10
+Ethernet40 41,42,43,44 hundredGigE11
+Ethernet44 45,46,47,48 hundredGigE12
+Ethernet48 81,82,83,84 hundredGigE13
+Ethernet52 85,86,87,88 hundredGigE14
+Ethernet56 89,90,91,92 hundredGigE15
+Ethernet60 93,94,95,96 hundredGigE16
+Ethernet64 97,98,99,100 hundredGigE17
+Ethernet68 101,102,103,104 hundredGigE18
+Ethernet72 105,106,107,108 hundredGigE19
+Ethernet76 109,110,111,112 hundredGigE20
+Ethernet80 17,18,19,20 hundredGigE21
+Ethernet84 21,22,23,24 hundredGigE22
+Ethernet88 25,26,27,28 hundredGigE23
+Ethernet92 29,30,31,32 hundredGigE24
+Ethernet96 113,114,115,116 hundredGigE25
+Ethernet100 117,118,119,120 hundredGigE26
+Ethernet104 121,122,123,124 hundredGigE27
+Ethernet108 125,126,127,128 hundredGigE28
+Ethernet112 1,2,3,4 hundredGigE29
+Ethernet116 5,6,7,8 hundredGigE30
+Ethernet120 9,10,11,12 hundredGigE31
+Ethernet124 13,14,15,16 hundredGigE32
diff --git a/device/accton/x86_64-accton_as7716_32x-r0/Accton-AS7716-32X/sai.profile b/device/accton/x86_64-accton_as7716_32x-r0/Accton-AS7716-32X/sai.profile
new file mode 100644
index 000000000000..fb1105b47f7a
--- /dev/null
+++ b/device/accton/x86_64-accton_as7716_32x-r0/Accton-AS7716-32X/sai.profile
@@ -0,0 +1,2 @@
+SAI_INIT_CONFIG_FILE=/etc/bcm/th-as7716-32x100G.config.bcm
+
diff --git a/device/accton/x86_64-accton_as7716_32x-r0/installer.conf b/device/accton/x86_64-accton_as7716_32x-r0/installer.conf
new file mode 100644
index 000000000000..925a32fc0c3a
--- /dev/null
+++ b/device/accton/x86_64-accton_as7716_32x-r0/installer.conf
@@ -0,0 +1,3 @@
+CONSOLE_PORT=0x3f8
+CONSOLE_DEV=0
+CONSOLE_SPEED=115200
diff --git a/device/accton/x86_64-accton_as7716_32x-r0/minigraph.xml b/device/accton/x86_64-accton_as7716_32x-r0/minigraph.xml
new file mode 100644
index 000000000000..e197d4cd7178
--- /dev/null
+++ b/device/accton/x86_64-accton_as7716_32x-r0/minigraph.xml
@@ -0,0 +1,1074 @@
+
+
+
+
+
+ ARISTA01T0
+ 10.0.0.33
+ switch1
+ 10.0.0.32
+ 1
+ 180
+ 60
+
+
+ switch1
+ 10.0.0.0
+ ARISTA01T2
+ 10.0.0.1
+ 1
+ 180
+ 60
+
+
+ ARISTA02T0
+ 10.0.0.35
+ switch1
+ 10.0.0.34
+ 1
+ 180
+ 60
+
+
+ switch1
+ 10.0.0.2
+ ARISTA02T2
+ 10.0.0.3
+ 1
+ 180
+ 60
+
+
+ ARISTA03T0
+ 10.0.0.37
+ switch1
+ 10.0.0.36
+ 1
+ 180
+ 60
+
+
+ switch1
+ 10.0.0.4
+ ARISTA03T2
+ 10.0.0.5
+ 1
+ 180
+ 60
+
+
+ ARISTA04T0
+ 10.0.0.39
+ switch1
+ 10.0.0.38
+ 1
+ 180
+ 60
+
+
+ switch1
+ 10.0.0.6
+ ARISTA04T2
+ 10.0.0.7
+ 1
+ 180
+ 60
+
+
+ ARISTA05T0
+ 10.0.0.41
+ switch1
+ 10.0.0.40
+ 1
+ 180
+ 60
+
+
+ switch1
+ 10.0.0.8
+ ARISTA05T2
+ 10.0.0.9
+ 1
+ 180
+ 60
+
+
+ ARISTA06T0
+ 10.0.0.43
+ switch1
+ 10.0.0.42
+ 1
+ 180
+ 60
+
+
+ switch1
+ 10.0.0.10
+ ARISTA06T2
+ 10.0.0.11
+ 1
+ 180
+ 60
+
+
+ ARISTA07T0
+ 10.0.0.45
+ switch1
+ 10.0.0.44
+ 1
+ 180
+ 60
+
+
+ switch1
+ 10.0.0.12
+ ARISTA07T2
+ 10.0.0.13
+ 1
+ 180
+ 60
+
+
+ ARISTA08T0
+ 10.0.0.47
+ switch1
+ 10.0.0.46
+ 1
+ 180
+ 60
+
+
+ switch1
+ 10.0.0.14
+ ARISTA08T2
+ 10.0.0.15
+ 1
+ 180
+ 60
+
+
+ ARISTA09T0
+ 10.0.0.49
+ switch1
+ 10.0.0.48
+ 1
+ 180
+ 60
+
+
+ switch1
+ 10.0.0.16
+ ARISTA09T2
+ 10.0.0.17
+ 1
+ 180
+ 60
+
+
+ ARISTA10T0
+ 10.0.0.51
+ switch1
+ 10.0.0.50
+ 1
+ 180
+ 60
+
+
+ switch1
+ 10.0.0.18
+ ARISTA10T2
+ 10.0.0.19
+ 1
+ 180
+ 60
+
+
+ ARISTA11T0
+ 10.0.0.53
+ switch1
+ 10.0.0.52
+ 1
+ 180
+ 60
+
+
+ switch1
+ 10.0.0.20
+ ARISTA11T2
+ 10.0.0.21
+ 1
+ 180
+ 60
+
+
+ ARISTA12T0
+ 10.0.0.55
+ switch1
+ 10.0.0.54
+ 1
+ 180
+ 60
+
+
+ switch1
+ 10.0.0.22
+ ARISTA12T2
+ 10.0.0.23
+ 1
+ 180
+ 60
+
+
+ ARISTA13T0
+ 10.0.0.57
+ switch1
+ 10.0.0.56
+ 1
+ 180
+ 60
+
+
+ switch1
+ 10.0.0.24
+ ARISTA13T2
+ 10.0.0.25
+ 1
+ 180
+ 60
+
+
+ ARISTA14T0
+ 10.0.0.59
+ switch1
+ 10.0.0.58
+ 1
+ 180
+ 60
+
+
+ switch1
+ 10.0.0.26
+ ARISTA14T2
+ 10.0.0.27
+ 1
+ 180
+ 60
+
+
+ ARISTA15T0
+ 10.0.0.61
+ switch1
+ 10.0.0.60
+ 1
+ 180
+ 60
+
+
+ switch1
+ 10.0.0.28
+ ARISTA15T2
+ 10.0.0.29
+ 1
+ 180
+ 60
+
+
+ ARISTA16T0
+ 10.0.0.63
+ switch1
+ 10.0.0.62
+ 1
+ 180
+ 60
+
+
+ switch1
+ 10.0.0.30
+ ARISTA16T2
+ 10.0.0.31
+ 1
+ 180
+ 60
+
+
+
+
+ 65100
+ switch1
+
+
+ 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
+
+
+
+
+
+
+
+ switch1
+
+
+
+
+
+ Ethernet0
+ 10.0.0.0/31
+
+
+
+ Ethernet4
+ 10.0.0.2/31
+
+
+
+ Ethernet8
+ 10.0.0.4/31
+
+
+
+ Ethernet12
+ 10.0.0.6/31
+
+
+
+ Ethernet16
+ 10.0.0.8/31
+
+
+
+ Ethernet20
+ 10.0.0.10/31
+
+
+
+ Ethernet24
+ 10.0.0.12/31
+
+
+
+ Ethernet28
+ 10.0.0.14/31
+
+
+
+ Ethernet32
+ 10.0.0.16/31
+
+
+
+ Ethernet36
+ 10.0.0.18/31
+
+
+
+ Ethernet40
+ 10.0.0.20/31
+
+
+
+ Ethernet44
+ 10.0.0.22/31
+
+
+
+ Ethernet48
+ 10.0.0.24/31
+
+
+
+ Ethernet52
+ 10.0.0.26/31
+
+
+
+ Ethernet56
+ 10.0.0.28/31
+
+
+
+ Ethernet60
+ 10.0.0.30/31
+
+
+
+ Ethernet64
+ 10.0.0.32/31
+
+
+
+ Ethernet68
+ 10.0.0.34/31
+
+
+
+ Ethernet72
+ 10.0.0.36/31
+
+
+
+ Ethernet76
+ 10.0.0.38/31
+
+
+
+ Ethernet80
+ 10.0.0.40/31
+
+
+
+ Ethernet84
+ 10.0.0.42/31
+
+
+
+ Ethernet88
+ 10.0.0.44/31
+
+
+
+ Ethernet92
+ 10.0.0.46/31
+
+
+
+ Ethernet96
+ 10.0.0.48/31
+
+
+
+ Ethernet100
+ 10.0.0.50/31
+
+
+
+ Ethernet104
+ 10.0.0.52/31
+
+
+
+ Ethernet108
+ 10.0.0.54/31
+
+
+
+ Ethernet112
+ 10.0.0.56/31
+
+
+
+ Ethernet116
+ 10.0.0.58/31
+
+
+
+ Ethernet120
+ 10.0.0.60/31
+
+
+
+ Ethernet124
+ 10.0.0.62/31
+
+
+
+
+
+
+
+
+
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet0
+ ARISTA01T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet4
+ ARISTA02T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet8
+ ARISTA03T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet12
+ ARISTA04T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet16
+ ARISTA05T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet20
+ ARISTA06T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet24
+ ARISTA07T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet28
+ ARISTA08T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet32
+ ARISTA09T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet36
+ ARISTA10T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet40
+ ARISTA11T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet44
+ ARISTA12T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet48
+ ARISTA13T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet52
+ ARISTA14T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet56
+ ARISTA15T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet60
+ ARISTA16T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet64
+ ARISTA01T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet68
+ ARISTA02T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet72
+ ARISTA03T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet76
+ ARISTA04T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet80
+ ARISTA05T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet84
+ ARISTA06T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet88
+ ARISTA07T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet92
+ ARISTA08T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet96
+ ARISTA09T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet100
+ ARISTA10T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet104
+ ARISTA11T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet108
+ ARISTA12T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet112
+ ARISTA13T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet116
+ ARISTA14T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet120
+ ARISTA15T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet124
+ ARISTA16T0
+ Ethernet1
+
+
+
+
+ switch1
+ Accton-AS7716-32X
+
+
+
+
+
+
+ switch1
+
+
+ DhcpResources
+
+
+
+
+ NtpResources
+
+ 0.debian.pool.ntp.org;1.debian.pool.ntp.org;2.debian.pool.ntp.org;3.debian.pool.ntp.org
+
+
+ SyslogResources
+
+
+
+
+
+
+
+
+ switch1
+ Accton-AS7716-32X
+
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 e246a2e61581..9b8fd2f79186 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
@@ -48,21 +48,23 @@ def port_link_state_change(self, port, state):
if qsfp_index <= 0:
return
- # QSFP indices 1-24 are breakout-capable and have four LEDs,
+ # 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:
- led_sysfs_path = self.LED_SYSFS_PATH_BREAKOUT_CAPABLE.format(qsfp_index, 1)
+ # 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(1, 5) ]
else:
- led_sysfs_path = self.LED_SYSFS_PATH_NO_BREAKOUT.format(qsfp_index)
+ led_sysfs_paths = [ self.LED_SYSFS_PATH_NO_BREAKOUT.format(qsfp_index) ]
- led_file = open(led_sysfs_path, "w")
+ 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)
+ if state == "up":
+ led_file.write("%d" % self.LED_COLOR_GREEN)
+ else:
+ led_file.write("%d" % self.LED_COLOR_OFF)
- led_file.close()
+ led_file.close()
# Constructor
def __init__(self):
diff --git a/device/arista/x86_64-arista_7050_qx32s/Arista-7050-QX32S/port_config.ini b/device/arista/x86_64-arista_7050_qx32s/Arista-7050-QX-32S/port_config.ini
similarity index 100%
rename from device/arista/x86_64-arista_7050_qx32s/Arista-7050-QX32S/port_config.ini
rename to device/arista/x86_64-arista_7050_qx32s/Arista-7050-QX-32S/port_config.ini
diff --git a/device/arista/x86_64-arista_7050_qx32s/Arista-7050-QX32S/sai.profile b/device/arista/x86_64-arista_7050_qx32s/Arista-7050-QX-32S/sai.profile
similarity index 100%
rename from device/arista/x86_64-arista_7050_qx32s/Arista-7050-QX32S/sai.profile
rename to device/arista/x86_64-arista_7050_qx32s/Arista-7050-QX-32S/sai.profile
diff --git a/device/arista/x86_64-arista_7050_qx32s/minigraph.xml b/device/arista/x86_64-arista_7050_qx32s/minigraph.xml
new file mode 100644
index 000000000000..efd30582947a
--- /dev/null
+++ b/device/arista/x86_64-arista_7050_qx32s/minigraph.xml
@@ -0,0 +1,1079 @@
+
+
+
+
+
+ ARISTA01T0
+ 10.0.0.33
+ switch1
+ 10.0.0.32
+ 1
+ 180
+ 60
+
+
+ switch1
+ 10.0.0.0
+ ARISTA01T2
+ 10.0.0.1
+ 1
+ 180
+ 60
+
+
+ ARISTA02T0
+ 10.0.0.35
+ switch1
+ 10.0.0.34
+ 1
+ 180
+ 60
+
+
+ switch1
+ 10.0.0.2
+ ARISTA02T2
+ 10.0.0.3
+ 1
+ 180
+ 60
+
+
+ ARISTA03T0
+ 10.0.0.37
+ switch1
+ 10.0.0.36
+ 1
+ 180
+ 60
+
+
+ switch1
+ 10.0.0.4
+ ARISTA03T2
+ 10.0.0.5
+ 1
+ 180
+ 60
+
+
+ ARISTA04T0
+ 10.0.0.39
+ switch1
+ 10.0.0.38
+ 1
+ 180
+ 60
+
+
+ switch1
+ 10.0.0.6
+ ARISTA04T2
+ 10.0.0.7
+ 1
+ 180
+ 60
+
+
+ ARISTA05T0
+ 10.0.0.41
+ switch1
+ 10.0.0.40
+ 1
+ 180
+ 60
+
+
+ switch1
+ 10.0.0.8
+ ARISTA05T2
+ 10.0.0.9
+ 1
+ 180
+ 60
+
+
+ ARISTA06T0
+ 10.0.0.43
+ switch1
+ 10.0.0.42
+ 1
+ 180
+ 60
+
+
+ switch1
+ 10.0.0.10
+ ARISTA06T2
+ 10.0.0.11
+ 1
+ 180
+ 60
+
+
+ ARISTA07T0
+ 10.0.0.45
+ switch1
+ 10.0.0.44
+ 1
+ 180
+ 60
+
+
+ switch1
+ 10.0.0.12
+ ARISTA07T2
+ 10.0.0.13
+ 1
+ 180
+ 60
+
+
+ ARISTA08T0
+ 10.0.0.47
+ switch1
+ 10.0.0.46
+ 1
+ 180
+ 60
+
+
+ switch1
+ 10.0.0.14
+ ARISTA08T2
+ 10.0.0.15
+ 1
+ 180
+ 60
+
+
+ ARISTA09T0
+ 10.0.0.49
+ switch1
+ 10.0.0.48
+ 1
+ 180
+ 60
+
+
+ switch1
+ 10.0.0.16
+ ARISTA09T2
+ 10.0.0.17
+ 1
+ 180
+ 60
+
+
+ ARISTA10T0
+ 10.0.0.51
+ switch1
+ 10.0.0.50
+ 1
+ 180
+ 60
+
+
+ switch1
+ 10.0.0.18
+ ARISTA10T2
+ 10.0.0.19
+ 1
+ 180
+ 60
+
+
+ ARISTA11T0
+ 10.0.0.53
+ switch1
+ 10.0.0.52
+ 1
+ 180
+ 60
+
+
+ switch1
+ 10.0.0.20
+ ARISTA11T2
+ 10.0.0.21
+ 1
+ 180
+ 60
+
+
+ ARISTA12T0
+ 10.0.0.55
+ switch1
+ 10.0.0.54
+ 1
+ 180
+ 60
+
+
+ switch1
+ 10.0.0.22
+ ARISTA12T2
+ 10.0.0.23
+ 1
+ 180
+ 60
+
+
+ ARISTA13T0
+ 10.0.0.57
+ switch1
+ 10.0.0.56
+ 1
+ 180
+ 60
+
+
+ switch1
+ 10.0.0.24
+ ARISTA13T2
+ 10.0.0.25
+ 1
+ 180
+ 60
+
+
+ ARISTA14T0
+ 10.0.0.59
+ switch1
+ 10.0.0.58
+ 1
+ 180
+ 60
+
+
+ switch1
+ 10.0.0.26
+ ARISTA14T2
+ 10.0.0.27
+ 1
+ 180
+ 60
+
+
+ ARISTA15T0
+ 10.0.0.61
+ switch1
+ 10.0.0.60
+ 1
+ 180
+ 60
+
+
+ switch1
+ 10.0.0.28
+ ARISTA15T2
+ 10.0.0.29
+ 1
+ 180
+ 60
+
+
+ ARISTA16T0
+ 10.0.0.63
+ switch1
+ 10.0.0.62
+ 1
+ 180
+ 60
+
+
+ switch1
+ 10.0.0.30
+ ARISTA16T2
+ 10.0.0.31
+ 1
+ 180
+ 60
+
+
+
+
+ 65100
+ switch1
+
+
+ 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
+
+
+
+
+
+
+
+ switch1
+
+
+
+
+
+ Ethernet1/1
+ 10.0.0.0/31
+
+
+
+ Ethernet2/1
+ 10.0.0.2/31
+
+
+
+ Ethernet3/1
+ 10.0.0.4/31
+
+
+
+ Ethernet4/1
+ 10.0.0.6/31
+
+
+
+ Ethernet5/1
+ 10.0.0.8/31
+
+
+
+ Ethernet6/1
+ 10.0.0.10/31
+
+
+
+ Ethernet7/1
+ 10.0.0.12/31
+
+
+
+ Ethernet8/1
+ 10.0.0.14/31
+
+
+
+ Ethernet9/1
+ 10.0.0.16/31
+
+
+
+ Ethernet10/1
+ 10.0.0.18/31
+
+
+
+ Ethernet11/1
+ 10.0.0.20/31
+
+
+
+ Ethernet12/1
+ 10.0.0.22/31
+
+
+
+ Ethernet13/1
+ 10.0.0.24/31
+
+
+
+ Ethernet14/1
+ 10.0.0.26/31
+
+
+
+ Ethernet15/1
+ 10.0.0.28/31
+
+
+
+ Ethernet16/1
+ 10.0.0.30/31
+
+
+
+ Ethernet17/1
+ 10.0.0.32/31
+
+
+
+ Ethernet18/1
+ 10.0.0.34/31
+
+
+
+ Ethernet19/1
+ 10.0.0.36/31
+
+
+
+ Ethernet20/1
+ 10.0.0.38/31
+
+
+
+ Ethernet21/1
+ 10.0.0.40/31
+
+
+
+ Ethernet22/1
+ 10.0.0.42/31
+
+
+
+ Ethernet23/1
+ 10.0.0.44/31
+
+
+
+ Ethernet24/1
+ 10.0.0.46/31
+
+
+
+ Ethernet25
+ 10.0.0.48/31
+
+
+
+ Ethernet26
+ 10.0.0.50/31
+
+
+
+ Ethernet27
+ 10.0.0.52/31
+
+
+
+ Ethernet28
+ 10.0.0.54/31
+
+
+
+ Ethernet29
+ 10.0.0.56/31
+
+
+
+ Ethernet30
+ 10.0.0.58/31
+
+
+
+ Ethernet31
+ 10.0.0.60/31
+
+
+
+ Ethernet32
+ 10.0.0.62/31
+
+
+
+
+
+
+
+
+
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet1/1
+ ARISTA01T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet2/1
+ ARISTA02T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet3/1
+ ARISTA03T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet4/1
+ ARISTA04T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet5/1
+ ARISTA05T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet6/1
+ ARISTA06T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet7/1
+ ARISTA07T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet8/1
+ ARISTA08T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet9/1
+ ARISTA09T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet10/1
+ ARISTA10T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet11/1
+ ARISTA11T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet12/1
+ ARISTA12T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet13/1
+ ARISTA13T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet14/1
+ ARISTA14T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet15/1
+ ARISTA15T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet16/1
+ ARISTA16T2
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet17/1
+ ARISTA01T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet18/1
+ ARISTA02T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet19/1
+ ARISTA03T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet20/1
+ ARISTA04T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet21/1
+ ARISTA05T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet22/1
+ ARISTA06T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet23/1
+ ARISTA07T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet24/1
+ ARISTA08T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet25
+ ARISTA09T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet26
+ ARISTA10T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet27
+ ARISTA11T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet28
+ ARISTA12T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet29
+ ARISTA13T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet30
+ ARISTA14T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet31
+ ARISTA15T0
+ Ethernet1
+
+
+ DeviceInterfaceLink
+ switch1
+ Ethernet32
+ ARISTA16T0
+ Ethernet1
+
+
+
+
+ switch1
+ Arista-7050-QX-32S
+
+
+
+
+
+
+ switch1
+
+
+ DhcpResources
+
+
+
+
+ NtpResources
+
+ 0.debian.pool.ntp.org;1.debian.pool.ntp.org;2.debian.pool.ntp.org;3.debian.pool.ntp.org
+
+
+ SyslogResources
+
+
+
+
+ ErspanDestinationIpv4
+
+ 2.2.2.2
+
+
+
+
+
+
+ switch1
+ Arista-7050-QX-32S
+
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
new file mode 100644
index 000000000000..582eaacbf918
--- /dev/null
+++ b/device/arista/x86_64-arista_7050_qx32s/plugins/led_control.py
@@ -0,0 +1,84 @@
+#!/usr/bin/env python
+#
+# led_control.py
+#
+# Platform-specific LED control functionality for SONiC
+#
+
+try:
+ from sonic_led.led_control_base import LedControlBase
+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: 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)
+
+ 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)
+
diff --git a/device/dell/x86_64-dell_s6000_s1220-r0/installer.conf b/device/dell/x86_64-dell_s6000_s1220-r0/installer.conf
index eb135bee0ff1..a8fef6185912 100644
--- a/device/dell/x86_64-dell_s6000_s1220-r0/installer.conf
+++ b/device/dell/x86_64-dell_s6000_s1220-r0/installer.conf
@@ -1,5 +1,7 @@
ONIE_PLATFORM_EXTRA_CMDLINE_LINUX="processor.max_cstate=1 intel_idle.max_cstate=0"
+if [ "$install_env" = "onie" ]; then
+
echo "Replace ONIE reboot with Dell reset commands"
# set I2C GPIO mux
@@ -21,3 +23,5 @@ i2cset -y 0 0x31 1 0xfd
EOF
chmod a+x /sbin/reboot
+
+fi
diff --git a/device/dell/x86_64-dell_s6000_s1220-r0/led_proc_init.soc b/device/dell/x86_64-dell_s6000_s1220-r0/led_proc_init.soc
new file mode 100644
index 000000000000..ddda7bdb639a
--- /dev/null
+++ b/device/dell/x86_64-dell_s6000_s1220-r0/led_proc_init.soc
@@ -0,0 +1,43 @@
+# LED microprocessor initialization for Dell s6000
+
+led 0 stop
+led 0 prog 02 31 60 F7 02 01 28 60 F6 D6 F7 70 28 67 44 06 F6 06 F6 80 D2 35 74 06 86 F8 3A 40 67 80 67 44 06 F6 67 80 67 80 67 3C D2 32 70 1C D2 34 70 1C 67 44 06 F6 67 80 67 80 67 80 67 3C 06 F7 F2 01 60 F7 77 11 32 08 97 71 4C 77 80 57 67 61 32 00 32 01 B7 97 71 5C 95 75 74 85 77 7C 02 0A 50 77 56 06 F6 D2 17 75 6C 12 88 FE F6 57 06 F6 E2 17 12 D4 F8 57 16 F8 CA 05 74 80 77 7C 22 0E 87 57 22 0F 87 57
+modreg CMIC_LEDUP0_PORT_ORDER_REMAP_0_3 REMAP_PORT_3=0x31 REMAP_PORT_2=0 REMAP_PORT_1=0 REMAP_PORT_0=0
+modreg CMIC_LEDUP0_PORT_ORDER_REMAP_4_7 REMAP_PORT_7=0x32 REMAP_PORT_6=0 REMAP_PORT_5=0 REMAP_PORT_4=0
+modreg CMIC_LEDUP0_PORT_ORDER_REMAP_8_11 REMAP_PORT_9=0 REMAP_PORT_8=0 REMAP_PORT_11=0x34 REMAP_PORT_10=0
+modreg CMIC_LEDUP0_PORT_ORDER_REMAP_12_15 REMAP_PORT_15=0x33 REMAP_PORT_14=0 REMAP_PORT_13=0 REMAP_PORT_12=0
+modreg CMIC_LEDUP0_PORT_ORDER_REMAP_16_19 REMAP_PORT_19=0x16 REMAP_PORT_18=0x15 REMAP_PORT_17=0x18 REMAP_PORT_16=0x17
+modreg CMIC_LEDUP0_PORT_ORDER_REMAP_20_23 REMAP_PORT_23=0x11 REMAP_PORT_22=0x12 REMAP_PORT_21=0x13 REMAP_PORT_20=0x14
+modreg CMIC_LEDUP0_PORT_ORDER_REMAP_24_27 REMAP_PORT_27=9 REMAP_PORT_26=0xa REMAP_PORT_25=0xb REMAP_PORT_24=0xc
+modreg CMIC_LEDUP0_PORT_ORDER_REMAP_28_31 REMAP_PORT_31=0xe REMAP_PORT_30=0xd REMAP_PORT_29=0x10 REMAP_PORT_28=0xf
+modreg CMIC_LEDUP0_PORT_ORDER_REMAP_32_35 REMAP_PORT_35=0x2e REMAP_PORT_34=0x2d REMAP_PORT_33=0x30 REMAP_PORT_32=0x2f
+modreg CMIC_LEDUP0_PORT_ORDER_REMAP_36_39 REMAP_PORT_39=0x29 REMAP_PORT_38=0x2a REMAP_PORT_37=0x2b REMAP_PORT_36=0x2c
+modreg CMIC_LEDUP0_PORT_ORDER_REMAP_40_43 REMAP_PORT_43=6 REMAP_PORT_42=5 REMAP_PORT_41=8 REMAP_PORT_40=7
+modreg CMIC_LEDUP0_PORT_ORDER_REMAP_44_47 REMAP_PORT_47=1 REMAP_PORT_46=2 REMAP_PORT_45=3 REMAP_PORT_44=4
+modreg CMIC_LEDUP0_PORT_ORDER_REMAP_48_51 REMAP_PORT_51=0x26 REMAP_PORT_50=0x25 REMAP_PORT_49=0x28 REMAP_PORT_48=0x27
+modreg CMIC_LEDUP0_PORT_ORDER_REMAP_52_55 REMAP_PORT_55=0x21 REMAP_PORT_54=0x22 REMAP_PORT_53=0x23 REMAP_PORT_52=0x24
+modreg CMIC_LEDUP0_PORT_ORDER_REMAP_56_59 REMAP_PORT_59=0x19 REMAP_PORT_58=0x1a REMAP_PORT_57=0x1b REMAP_PORT_56=0x1c
+modreg CMIC_LEDUP0_PORT_ORDER_REMAP_60_63 REMAP_PORT_63=0x1e REMAP_PORT_62=0x1d REMAP_PORT_61=0x20 REMAP_PORT_60=0x1f
+led 0 auto on
+led 0 start
+
+led 1 stop
+led 1 prog 02 31 60 F7 02 01 28 60 F6 D6 F7 70 28 67 44 06 F6 06 F6 80 D2 35 74 06 86 F8 3A 40 67 80 67 44 06 F6 67 80 67 80 67 3C D2 32 70 1C D2 34 70 1C 67 44 06 F6 67 80 67 80 67 80 67 3C 06 F7 F2 01 60 F7 77 11 32 08 97 71 4C 77 80 57 67 61 32 00 32 01 B7 97 71 5C 95 75 74 85 77 7C 02 0A 50 77 56 06 F6 D2 17 75 6C 12 88 FE F6 57 06 F6 E2 17 12 D4 F8 57 16 F8 CA 05 74 80 77 7C 22 0E 87 57 22 0F 87 57
+modreg CMIC_LEDUP1_PORT_ORDER_REMAP_0_3 REMAP_PORT_3=0x1e REMAP_PORT_2=0x1d REMAP_PORT_1=0x20 REMAP_PORT_0=0x1f
+modreg CMIC_LEDUP1_PORT_ORDER_REMAP_4_7 REMAP_PORT_7=0x19 REMAP_PORT_6=0x1a REMAP_PORT_5=0x1b REMAP_PORT_4=0x1c
+modreg CMIC_LEDUP1_PORT_ORDER_REMAP_8_11 REMAP_PORT_9=0x23 REMAP_PORT_8=0x24 REMAP_PORT_11=0x21 REMAP_PORT_10=0x22
+modreg CMIC_LEDUP1_PORT_ORDER_REMAP_12_15 REMAP_PORT_15=0x26 REMAP_PORT_14=0x25 REMAP_PORT_13=0x28 REMAP_PORT_12=0x27
+modreg CMIC_LEDUP1_PORT_ORDER_REMAP_16_19 REMAP_PORT_19=0x16 REMAP_PORT_18=0x15 REMAP_PORT_17=0x18 REMAP_PORT_16=0x17
+modreg CMIC_LEDUP1_PORT_ORDER_REMAP_20_23 REMAP_PORT_23=0x11 REMAP_PORT_22=0x12 REMAP_PORT_21=0x13 REMAP_PORT_20=0x14
+modreg CMIC_LEDUP1_PORT_ORDER_REMAP_24_27 REMAP_PORT_27=0x34 REMAP_PORT_26=0 REMAP_PORT_25=0 REMAP_PORT_24=0
+modreg CMIC_LEDUP1_PORT_ORDER_REMAP_28_31 REMAP_PORT_31=0x33 REMAP_PORT_30=0 REMAP_PORT_29=0 REMAP_PORT_28=0
+modreg CMIC_LEDUP1_PORT_ORDER_REMAP_32_35 REMAP_PORT_35=0x2e REMAP_PORT_34=0x2d REMAP_PORT_33=0x30 REMAP_PORT_32=0x2f
+modreg CMIC_LEDUP1_PORT_ORDER_REMAP_36_39 REMAP_PORT_39=0x29 REMAP_PORT_38=0x2a REMAP_PORT_37=0x2b REMAP_PORT_36=0x2c
+modreg CMIC_LEDUP1_PORT_ORDER_REMAP_40_43 REMAP_PORT_43=0x31 REMAP_PORT_42=0 REMAP_PORT_41=0 REMAP_PORT_40=0
+modreg CMIC_LEDUP1_PORT_ORDER_REMAP_44_47 REMAP_PORT_47=0x32 REMAP_PORT_46=0 REMAP_PORT_45=0 REMAP_PORT_44=0
+modreg CMIC_LEDUP1_PORT_ORDER_REMAP_48_51 REMAP_PORT_51=9 REMAP_PORT_50=0xa REMAP_PORT_49=0xb REMAP_PORT_48=0xc
+modreg CMIC_LEDUP1_PORT_ORDER_REMAP_52_55 REMAP_PORT_55=0xe REMAP_PORT_54=0xd REMAP_PORT_53=0x10 REMAP_PORT_52=0xf
+modreg CMIC_LEDUP1_PORT_ORDER_REMAP_56_59 REMAP_PORT_59=6 REMAP_PORT_58=5 REMAP_PORT_57=8 REMAP_PORT_56=7
+modreg CMIC_LEDUP1_PORT_ORDER_REMAP_60_63 REMAP_PORT_63=1 REMAP_PORT_62=2 REMAP_PORT_61=3 REMAP_PORT_60=4
+led 1 auto on
+led 1 start
diff --git a/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/port_config.ini b/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/port_config.ini
index dcdd6548c198..8b09a1e71f74 100644
--- a/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/port_config.ini
+++ b/device/dell/x86_64-dell_s6100_c2538-r0/Force10-S6100/port_config.ini
@@ -1,65 +1,65 @@
-# name lanes alias
-Ethernet0 101,102 fortyGigE1/1/1
-Ethernet1 103,104 fortyGigE1/1/2
-Ethernet2 97,98 fortyGigE1/1/3
-Ethernet3 99,100 fortyGigE1/1/4
-Ethernet4 69,70 fortyGigE1/1/5
-Ethernet5 71,72 fortyGigE1/1/6
-Ethernet6 65,66 fortyGigE1/1/7
-Ethernet7 67,68 fortyGigE1/1/8
-Ethernet8 53,54 fortyGigE1/1/9
-Ethernet9 55,56 fortyGigE1/1/10
-Ethernet10 49,50 fortyGigE1/1/11
-Ethernet11 51,52 fortyGigE1/1/12
-Ethernet12 21,22 fortyGigE1/1/13
-Ethernet13 23,24 fortyGigE1/1/14
-Ethernet14 17,18 fortyGigE1/1/15
-Ethernet15 19,20 fortyGigE1/1/16
-Ethernet16 25,26 fortyGigE1/2/1
-Ethernet17 27,28 fortyGigE1/2/2
-Ethernet18 29,30 fortyGigE1/2/3
-Ethernet19 31,32 fortyGigE1/2/4
-Ethernet20 57,58 fortyGigE1/2/5
-Ethernet21 59,60 fortyGigE1/2/6
-Ethernet22 61,62 fortyGigE1/2/7
-Ethernet23 63,64 fortyGigE1/2/8
-Ethernet24 73,74 fortyGigE1/2/9
-Ethernet25 75,76 fortyGigE1/2/10
-Ethernet26 77,78 fortyGigE1/2/11
-Ethernet27 79,80 fortyGigE1/2/12
-Ethernet28 105,106 fortyGigE1/2/13
-Ethernet29 107,108 fortyGigE1/2/14
-Ethernet30 109,110 fortyGigE1/2/15
-Ethernet31 111,112 fortyGigE1/2/16
-Ethernet32 13,14 fortyGigE1/3/1
-Ethernet33 15,16 fortyGigE1/3/2
-Ethernet34 9,10 fortyGigE1/3/3
-Ethernet35 11,12 fortyGigE1/3/4
-Ethernet36 125,126 fortyGigE1/3/5
-Ethernet37 127,128 fortyGigE1/3/6
-Ethernet38 121,122 fortyGigE1/3/7
-Ethernet39 123,124 fortyGigE1/3/8
-Ethernet40 93,94 fortyGigE1/3/9
-Ethernet41 95,96 fortyGigE1/3/10
-Ethernet42 89,90 fortyGigE1/3/11
-Ethernet43 91,92 fortyGigE1/3/12
-Ethernet44 45,46 fortyGigE1/3/13
-Ethernet45 47,48 fortyGigE1/3/14
-Ethernet46 41,42 fortyGigE1/3/15
-Ethernet47 43,44 fortyGigE1/3/16
-Ethernet48 113,114 fortyGigE1/4/1
-Ethernet49 115,116 fortyGigE1/4/2
-Ethernet50 117,118 fortyGigE1/4/3
-Ethernet51 119,120 fortyGigE1/4/4
-Ethernet52 1,2 fortyGigE1/4/5
-Ethernet53 3,4 fortyGigE1/4/6
-Ethernet54 5,6 fortyGigE1/4/7
-Ethernet55 7,8 fortyGigE1/4/8
-Ethernet56 33,34 fortyGigE1/4/9
-Ethernet57 35,36 fortyGigE1/4/10
-Ethernet58 37,38 fortyGigE1/4/11
-Ethernet59 39,40 fortyGigE1/4/12
-Ethernet60 81,82 fortyGigE1/4/13
-Ethernet61 83,84 fortyGigE1/4/14
-Ethernet62 85,86 fortyGigE1/4/15
-Ethernet63 87,88 fortyGigE1/4/16
+# name lanes alias index
+Ethernet0 101,102 fortyGigE1/1/1 0
+Ethernet1 103,104 fortyGigE1/1/2 1
+Ethernet2 97,98 fortyGigE1/1/3 2
+Ethernet3 99,100 fortyGigE1/1/4 3
+Ethernet4 69,70 fortyGigE1/1/5 4
+Ethernet5 71,72 fortyGigE1/1/6 5
+Ethernet6 65,66 fortyGigE1/1/7 6
+Ethernet7 67,68 fortyGigE1/1/8 7
+Ethernet8 53,54 fortyGigE1/1/9 8
+Ethernet9 55,56 fortyGigE1/1/10 9
+Ethernet10 49,50 fortyGigE1/1/11 10
+Ethernet11 51,52 fortyGigE1/1/12 11
+Ethernet12 21,22 fortyGigE1/1/13 12
+Ethernet13 23,24 fortyGigE1/1/14 13
+Ethernet14 17,18 fortyGigE1/1/15 14
+Ethernet15 19,20 fortyGigE1/1/16 15
+Ethernet16 25,26 fortyGigE1/2/1 16
+Ethernet17 27,28 fortyGigE1/2/2 17
+Ethernet18 29,30 fortyGigE1/2/3 18
+Ethernet19 31,32 fortyGigE1/2/4 19
+Ethernet20 57,58 fortyGigE1/2/5 20
+Ethernet21 59,60 fortyGigE1/2/6 21
+Ethernet22 61,62 fortyGigE1/2/7 22
+Ethernet23 63,64 fortyGigE1/2/8 23
+Ethernet24 73,74 fortyGigE1/2/9 24
+Ethernet25 75,76 fortyGigE1/2/10 25
+Ethernet26 77,78 fortyGigE1/2/11 26
+Ethernet27 79,80 fortyGigE1/2/12 27
+Ethernet28 105,106 fortyGigE1/2/13 28
+Ethernet29 107,108 fortyGigE1/2/14 29
+Ethernet30 109,110 fortyGigE1/2/15 30
+Ethernet31 111,112 fortyGigE1/2/16 31
+Ethernet32 13,14 fortyGigE1/3/1 32
+Ethernet33 15,16 fortyGigE1/3/2 33
+Ethernet34 9,10 fortyGigE1/3/3 34
+Ethernet35 11,12 fortyGigE1/3/4 35
+Ethernet36 125,126 fortyGigE1/3/5 36
+Ethernet37 127,128 fortyGigE1/3/6 37
+Ethernet38 121,122 fortyGigE1/3/7 38
+Ethernet39 123,124 fortyGigE1/3/8 39
+Ethernet40 93,94 fortyGigE1/3/9 40
+Ethernet41 95,96 fortyGigE1/3/10 41
+Ethernet42 89,90 fortyGigE1/3/11 42
+Ethernet43 91,92 fortyGigE1/3/12 43
+Ethernet44 45,46 fortyGigE1/3/13 44
+Ethernet45 47,48 fortyGigE1/3/14 45
+Ethernet46 41,42 fortyGigE1/3/15 46
+Ethernet47 43,44 fortyGigE1/3/16 47
+Ethernet48 113,114 fortyGigE1/4/1 48
+Ethernet49 115,116 fortyGigE1/4/2 49
+Ethernet50 117,118 fortyGigE1/4/3 50
+Ethernet51 119,120 fortyGigE1/4/4 51
+Ethernet52 1,2 fortyGigE1/4/5 52
+Ethernet53 3,4 fortyGigE1/4/6 53
+Ethernet54 5,6 fortyGigE1/4/7 54
+Ethernet55 7,8 fortyGigE1/4/8 55
+Ethernet56 33,34 fortyGigE1/4/9 56
+Ethernet57 35,36 fortyGigE1/4/10 57
+Ethernet58 37,38 fortyGigE1/4/11 58
+Ethernet59 39,40 fortyGigE1/4/12 59
+Ethernet60 81,82 fortyGigE1/4/13 60
+Ethernet61 83,84 fortyGigE1/4/14 61
+Ethernet62 85,86 fortyGigE1/4/15 62
+Ethernet63 87,88 fortyGigE1/4/16 63
diff --git a/dockers/docker-dhcp-relay/Dockerfile b/dockers/docker-dhcp-relay/Dockerfile.j2
similarity index 51%
rename from dockers/docker-dhcp-relay/Dockerfile
rename to dockers/docker-dhcp-relay/Dockerfile.j2
index c3f9f298983e..1a7b7854d554 100644
--- a/dockers/docker-dhcp-relay/Dockerfile
+++ b/dockers/docker-dhcp-relay/Dockerfile.j2
@@ -6,8 +6,17 @@ ENV DEBIAN_FRONTEND=noninteractive
# Update apt's cache of available packages
RUN apt-get update
-# Install isc-dhcp-relay Debian package
-RUN apt-get -y install isc-dhcp-relay
+{% if docker_dhcp_relay_debs.strip() -%}
+# Copy built Debian packages
+{%- for deb in docker_dhcp_relay_debs.split(' ') %}
+COPY debs/{{ deb }} debs/
+{%- endfor %}
+
+# Install built Debian packages and implicitly install their dependencies
+{%- for deb in docker_dhcp_relay_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
diff --git a/dockers/docker-dhcp-relay/isc-dhcp-relay.j2 b/dockers/docker-dhcp-relay/isc-dhcp-relay.j2
index 05e633b7602f..3b76073fa8c6 100644
--- a/dockers/docker-dhcp-relay/isc-dhcp-relay.j2
+++ b/dockers/docker-dhcp-relay/isc-dhcp-relay.j2
@@ -24,6 +24,6 @@ INTERFACES="
{%- endif %}
{%- endfor %}"
-# '-a' option provides option 82 circuit id information
-OPTIONS="-a"
+# '-a' option provides option 82 circuit_id and remote_id information
+OPTIONS="-a %h:%p %P"
diff --git a/dockers/docker-fpm-quagga/base_image_files/bgp_neighbor b/dockers/docker-fpm-quagga/base_image_files/bgp_neighbor
deleted file mode 100755
index d6bd67a0a02d..000000000000
--- a/dockers/docker-fpm-quagga/base_image_files/bgp_neighbor
+++ /dev/null
@@ -1,55 +0,0 @@
-#!/bin/bash -e
-
-usage(){
- echo "Usage: $0 "
- exit 255
-}
-
-[[ $# -ne 2 ]] && usage
-
-COMMAND=$1
-NEIGHBOR_IP=$2
-
-if [ "$COMMAND" == "shutdown" ]; then
- CMD_PREFIX=""
-elif [ "$COMMAND" == "startup" ]; then
- CMD_PREFIX="no"
-else
- usage
-fi
-
-ASN=`vtysh -c "show ip bgp summary" | sed -n "s/.*AS number \([0-9]\+\).*/\1/p"`
-if [ -z "$ASN" ]; then
- exit 255
-fi
-
-[ -f /etc/sonic/bgp_admin.yml ] || echo "bgp_admin_state:" > /etc/sonic/bgp_admin.yml
-
-# Operate on all ipv4 neighbors when "neighbor_ip" = 0.0.0.0
-if [ "$NEIGHBOR_IP" == "0.0.0.0" ] ; then
- for NEIGHBOR in `vtysh -c "show run" | grep nei | grep -oE "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" | sort | uniq`; do
- vtysh -c "configure terminal" -c "router bgp $ASN" -c "$CMD_PREFIX neighbor $NEIGHBOR shutdown"
-
- # Save admin state in config file
- sed -i "/^\s*$NEIGHBOR:/d" /etc/sonic/bgp_admin.yml
- if [ "$COMMAND" == "startup" ]; then
- echo " $NEIGHBOR: on" >> /etc/sonic/bgp_admin.yml
- else
- echo " $NEIGHBOR: off" >> /etc/sonic/bgp_admin.yml
- fi
- done
-
-else
- # Examine bgp neighbor exists first
- vtysh -c "show ip bgp neighbor $NEIGHBOR_IP" | grep -q "BGP neighbor is"
-
- vtysh -c "configure terminal" -c "router bgp $ASN" -c "$CMD_PREFIX neighbor $NEIGHBOR_IP shutdown"
-
- # Save admin state in config file
- sed -i "/^\s*$NEIGHBOR_IP:/d" /etc/sonic/bgp_admin.yml
- if [ "$COMMAND" == "startup" ]; then
- echo " $NEIGHBOR_IP: on" >> /etc/sonic/bgp_admin.yml
- else
- echo " $NEIGHBOR_IP: off" >> /etc/sonic/bgp_admin.yml
- fi
-fi
diff --git a/dockers/docker-fpm-quagga/bgpd.conf.j2 b/dockers/docker-fpm-quagga/bgpd.conf.j2
index 0c848939df9d..5f53d9698b2e 100644
--- a/dockers/docker-fpm-quagga/bgpd.conf.j2
+++ b/dockers/docker-fpm-quagga/bgpd.conf.j2
@@ -19,6 +19,10 @@ log facility local4
!
! bgp multiple-instance
!
+route-map FROM_BGP_SPEAKER_V4 permit 10
+!
+route-map TO_BGP_SPEAKER_V4 deny 10
+!
router bgp {{ minigraph_bgp_asn }}
bgp log-neighbor-changes
bgp bestpath as-path multipath-relax
@@ -53,11 +57,16 @@ router bgp {{ minigraph_bgp_asn }}
{% if bgp_admin_state and bgp_admin_state.has_key(bgp_session['addr']) and bgp_admin_state[bgp_session['addr']]==False or bgp_admin_state and not bgp_admin_state.has_key(bgp_session['addr']) and bgp_admin_state.has_key('all') and bgp_admin_state['all']==False %}
neighbor {{ bgp_session['addr'] }} shutdown
{% endif %}
+{% if bgp_session['addr'] | ipv4 %}
{% if minigraph_devices[inventory_hostname]['type'] == 'ToRRouter' %}
neighbor {{ bgp_session['addr'] }} allowas-in 1
{% endif %}
+{% endif %}
{% if bgp_session['addr'] | ipv6 %}
address-family ipv6
+{% if minigraph_devices[inventory_hostname]['type'] == 'ToRRouter' %}
+ neighbor {{ bgp_session['addr'] }} allowas-in 1
+{% endif %}
neighbor {{ bgp_session['addr'] }} activate
maximum-paths 64
exit-address-family
@@ -65,6 +74,19 @@ router bgp {{ minigraph_bgp_asn }}
{% endif %}
{% endfor %}
{% endblock bgp_sessions %}
+{% block bgp_peers_with_range %}
+{% for bgp_peer in minigraph_bgp_peers_with_range %}
+ neighbor {{ bgp_peer['name'] }} peer-group
+ neighbor {{ bgp_peer['name'] }} passive
+ neighbor {{ bgp_peer['name'] }} remote-as {{deployment_id_asn_map[deployment_id] }}
+ neighbor {{ bgp_peer['name'] }} ebgp-multihop 255
+ neighbor {{ bgp_peer['name'] }} soft-reconfiguration inbound
+ neighbor {{ bgp_peer['name'] }} update-source Loopback0
+ neighbor {{ bgp_peer['name'] }} route-map FROM_BGP_SPEAKER_V4 in
+ neighbor {{ bgp_peer['name'] }} route-map TO_BGP_SPEAKER_V4 out
+ bgp listen range {{ bgp_peer['ip_range'] }} peer-group {{ bgp_peer['name'] }}
+{% endfor %}
+{% endblock bgp_peers_with_range %}
!
{% if minigraph_bgp_asn is not none %}
maximum-paths 64
diff --git a/dockers/docker-fpm-quagga/start.sh b/dockers/docker-fpm-quagga/start.sh
index bc3fbf4e907a..c7df6f20999d 100755
--- a/dockers/docker-fpm-quagga/start.sh
+++ b/dockers/docker-fpm-quagga/start.sh
@@ -2,9 +2,9 @@
mkdir -p /etc/quagga
if [ -f /etc/sonic/bgp_admin.yml ]; then
- sonic-cfggen -m /etc/sonic/minigraph.xml -y /etc/sonic/bgp_admin.yml -t /usr/share/sonic/templates/bgpd.conf.j2 > /etc/quagga/bgpd.conf
+ sonic-cfggen -m /etc/sonic/minigraph.xml -y /etc/sonic/bgp_admin.yml -y /etc/sonic/deployment_id_asn_map.yml -t /usr/share/sonic/templates/bgpd.conf.j2 > /etc/quagga/bgpd.conf
else
- sonic-cfggen -m /etc/sonic/minigraph.xml -t /usr/share/sonic/templates/bgpd.conf.j2 > /etc/quagga/bgpd.conf
+ sonic-cfggen -m /etc/sonic/minigraph.xml -y /etc/sonic/deployment_id_asn_map.yml -t /usr/share/sonic/templates/bgpd.conf.j2 > /etc/quagga/bgpd.conf
fi
sonic-cfggen -m /etc/sonic/minigraph.xml -t /usr/share/sonic/templates/zebra.conf.j2 > /etc/quagga/zebra.conf
diff --git a/dockers/docker-lldp-sv2/lldpd.conf.j2 b/dockers/docker-lldp-sv2/lldpd.conf.j2
index 1943c04ed73f..e3d37d091150 100644
--- a/dockers/docker-lldp-sv2/lldpd.conf.j2
+++ b/dockers/docker-lldp-sv2/lldpd.conf.j2
@@ -1,3 +1,3 @@
{% for member in minigraph_ports.keys() %}
-configure ports {{member}} lldp portidsubtype local {{minigraph_ports[member]['alias']}}
+configure ports {{ member }} lldp portidsubtype local {{ minigraph_ports[member]['alias'] }} description {{ minigraph_neighbors[member]['name'] }}:{{ minigraph_neighbors[member]['port'] }}
{% endfor %}
diff --git a/dockers/docker-orchagent/supervisord.conf b/dockers/docker-orchagent/supervisord.conf
index 770fda701029..a04238472c4c 100644
--- a/dockers/docker-orchagent/supervisord.conf
+++ b/dockers/docker-orchagent/supervisord.conf
@@ -60,7 +60,7 @@ stdout_logfile=syslog
stderr_logfile=syslog
[program:arp_update]
-command=bash -c "/usr/bin/arp_update && sleep 300"
+command=bash -c "/usr/bin/arp_update; sleep 300"
priority=8
autostart=false
autorestart=true
diff --git a/dockers/docker-platform-monitor/Dockerfile.j2 b/dockers/docker-platform-monitor/Dockerfile.j2
index 9b407bdef6bc..423181a3c589 100755
--- a/dockers/docker-platform-monitor/Dockerfile.j2
+++ b/dockers/docker-platform-monitor/Dockerfile.j2
@@ -6,7 +6,8 @@ ENV DEBIAN_FRONTEND=noninteractive
# Update apt's package index files
RUN apt-get update
-RUN apt-get install -y python-pip sensord
+# Install required packages
+RUN apt-get install -y python-pip sensord fancontrol
{% if docker_platform_monitor_debs.strip() %}
# Copy built Debian packages
diff --git a/dockers/docker-platform-monitor/start.sh b/dockers/docker-platform-monitor/start.sh
index b550cc037a5d..cfcf17e4a192 100755
--- a/dockers/docker-platform-monitor/start.sh
+++ b/dockers/docker-platform-monitor/start.sh
@@ -1,16 +1,26 @@
#!/usr/bin/env bash
-mkdir -p /etc/sensors.d
-if [ -e /usr/share/sonic/platform/sensors.conf ]; then
- /bin/cp -rf /usr/share/sonic/platform/sensors.conf /etc/sensors.d/
-fi
-
mkdir -p /var/sonic
echo "# Config files managed by sonic-config-engine" > /var/sonic/config_status
rm -f /var/run/rsyslogd.pid
supervisorctl start rsyslogd
-supervisorctl start lm-sensors
+
+# If this platform has an lm-sensors config file, copy it to it's proper place
+# and start lm-sensors
+if [ -e /usr/share/sonic/platform/sensors.conf ]; then
+ mkdir -p /etc/sensors.d
+ /bin/cp -f /usr/share/sonic/platform/sensors.conf /etc/sensors.d/
+ supervisorctl start lm-sensors
+fi
+
+# If this platform has a fancontrol config file, copy it to it's proper place
+# and start fancontrol
+if [ -e /usr/share/sonic/platform/fancontrol ]; then
+ /bin/cp -f /usr/share/sonic/platform/fancontrol /etc/
+ supervisorctl start fancontrol
+fi
+
supervisorctl start ledd
diff --git a/dockers/docker-platform-monitor/supervisord.conf b/dockers/docker-platform-monitor/supervisord.conf
index 051829eae65f..2753dceb652d 100644
--- a/dockers/docker-platform-monitor/supervisord.conf
+++ b/dockers/docker-platform-monitor/supervisord.conf
@@ -27,9 +27,17 @@ autorestart=false
stdout_logfile=syslog
stderr_logfile=syslog
+[program:fancontrol]
+command=/usr/sbin/fancontrol
+priority=4
+autostart=false
+autorestart=false
+stdout_logfile=syslog
+stderr_logfile=syslog
+
[program:ledd]
command=/usr/bin/ledd
-priority=6
+priority=5
autostart=false
stdout_logfile=syslog
stderr_logfile=syslog
diff --git a/dockers/docker-ptf/Dockerfile.j2 b/dockers/docker-ptf/Dockerfile.j2
index c546ad2fab9c..59360ee4fa2e 100644
--- a/dockers/docker-ptf/Dockerfile.j2
+++ b/dockers/docker-ptf/Dockerfile.j2
@@ -45,7 +45,8 @@ RUN sed --in-place 's/httpredir.debian.org/debian-archive.trafficmanager.net/' /
ipython \
git \
iputils-ping \
- hping3
+ hping3 \
+ curl
## Reinstall scapy by version from p4lang
RUN git clone https://github.com/p4lang/scapy-vxlan.git && cd scapy-vxlan && python setup.py install
@@ -78,6 +79,8 @@ RUN rm -rf /debs \
&& pip install pysubnettree \
&& pip install paramiko \
&& pip install parallel-ssh \
+ && pip install flask \
+ && pip install exabgp==3.4.17\
&& mkdir -p /opt \
&& cd /opt \
&& wget https://raw.githubusercontent.com/p4lang/ptf/master/ptf_nn/ptf_nn_agent.py
diff --git a/files/build_templates/sonic_debian_extension.j2 b/files/build_templates/sonic_debian_extension.j2
index 00398654b12c..647a73b5ce1c 100644
--- a/files/build_templates/sonic_debian_extension.j2
+++ b/files/build_templates/sonic_debian_extension.j2
@@ -138,6 +138,9 @@ sudo bash -c "echo ' all: off' >> $FILESYSTEM_ROOT/etc/sonic/bgp_admin.yml"
# Copy SNMP configuration files
sudo cp $IMAGE_CONFIGS/snmp/snmp.yml $FILESYSTEM_ROOT/etc/sonic/
+# Copy ASN configuration files
+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/
diff --git a/files/image_config/asn/deployment_id_asn_map.yml b/files/image_config/asn/deployment_id_asn_map.yml
new file mode 100644
index 000000000000..36168f828954
--- /dev/null
+++ b/files/image_config/asn/deployment_id_asn_map.yml
@@ -0,0 +1,2 @@
+deployment_id_asn_map:
+ "1" : 65432
diff --git a/files/image_config/logrotate.d/rsyslog b/files/image_config/logrotate.d/rsyslog
index a212ddfce15c..4693288f18cc 100644
--- a/files/image_config/logrotate.d/rsyslog
+++ b/files/image_config/logrotate.d/rsyslog
@@ -1,7 +1,6 @@
/var/log/syslog
/var/log/quagga/*.log
/var/log/teamd.log
-/var/log/swss/*.rec
{
rotate 7
daily
@@ -18,6 +17,20 @@
kill -HUP $(cat /var/run/rsyslogd.pid)
endscript
}
+/var/log/swss/*.rec
+{
+ rotate 7
+ daily
+ maxsize 20M
+ missingok
+ notifempty
+ compress
+ delaycompress
+ sharedscripts
+ postrotate
+ pgrep -x orchagent | xargs /bin/kill -HUP 2>/dev/null || true
+ endscript
+}
/var/log/mail.info
/var/log/mail.warn
/var/log/mail.err
diff --git a/files/image_config/platform/rc.local b/files/image_config/platform/rc.local
index 26f59bf94aad..dad2510ce756 100755
--- a/files/image_config/platform/rc.local
+++ b/files/image_config/platform/rc.local
@@ -29,8 +29,11 @@ if [ -f /host/image-$sonic_version/platform/firsttime ]; then
exit 0
fi
- # Try to take minigraph saved during installation
- if [ -f /host/minigraph.xml ]; then
+ # Try to take old configuration saved during installation
+ if [ -d /host/old_config ]; then
+ rm -f /host/old_config/sonic_version.yml
+ mv -f /host/old_config/* /etc/sonic/
+ elif [ -f /host/minigraph.xml ]; then
mv /host/minigraph.xml /etc/sonic/
else
cp /usr/share/sonic/device/$platform/minigraph.xml /etc/sonic/
diff --git a/installer/x86_64/install.sh b/installer/x86_64/install.sh
index 18669893bcb5..ca8c4d3e47e7 100755
--- a/installer/x86_64/install.sh
+++ b/installer/x86_64/install.sh
@@ -36,7 +36,14 @@ if [ $(id -u) -ne 0 ]
fi
# get running machine from conf file
-[ -r /etc/machine.conf ] && . /etc/machine.conf
+if [ -r /etc/machine.conf ]; then
+ . /etc/machine.conf
+elif [ -r /host/machine.conf ]; then
+ . /host/machine.conf
+else
+ echo "cannot find machine.conf"
+ exit 1
+fi
echo "onie_platform: $onie_platform"
@@ -57,9 +64,10 @@ if [ -d "/etc/sonic" ]; then
else
echo "Installing SONiC in ONIE"
install_env="onie"
- [ -r platforms/$onie_platform ] && source platforms/$onie_platform
fi
+[ -r platforms/$onie_platform ] && . platforms/$onie_platform
+
# Install demo on same block device as ONIE
onie_dev=$(blkid | grep ONIE-BOOT | head -n 1 | awk '{print $1}' | sed -e 's/:.*$//')
blk_dev=$(echo $onie_dev | sed -e 's/[1-9][0-9]*$//' | sed -e 's/\([0-9]\)\(p\)/\1/')
@@ -414,12 +422,11 @@ else
fi
# Decompress the file for the file system directly to the partition
-unzip $ONIE_INSTALLER_PAYLOAD -d $demo_mnt/$image_dir
+unzip -o $ONIE_INSTALLER_PAYLOAD -x "$FILESYSTEM_DOCKERFS" -d $demo_mnt/$image_dir
-if [ -f $demo_mnt/$image_dir/$FILESYSTEM_DOCKERFS ]; then
- TAR_EXTRA_OPTION="--numeric-owner"
- cd $demo_mnt/$image_dir && mkdir -p $DOCKERFS_DIR && tar x $TAR_EXTRA_OPTION -f $FILESYSTEM_DOCKERFS -C $DOCKERFS_DIR && rm -f $FILESYSTEM_DOCKERFS; cd $OLDPWD
-fi
+TAR_EXTRA_OPTION="--numeric-owner"
+mkdir -p $demo_mnt/$image_dir/$DOCKERFS_DIR
+unzip -op $ONIE_INSTALLER_PAYLOAD "$FILESYSTEM_DOCKERFS" | tar xz $TAR_EXTRA_OPTION -f - -C $demo_mnt/$image_dir/$DOCKERFS_DIR
# Create loop device for /var/log to limit its size to $VAR_LOG_SIZE MB
if [ -f $demo_mnt/disk-img/var-log.ext4 ]; then
diff --git a/platform/broadcom/docker-syncd-brcm/start.sh b/platform/broadcom/docker-syncd-brcm/start.sh
index 96e2a9128081..742cf8223132 100755
--- a/platform/broadcom/docker-syncd-brcm/start.sh
+++ b/platform/broadcom/docker-syncd-brcm/start.sh
@@ -1,8 +1,23 @@
#!/usr/bin/env bash
+PLATFORM_DIR=/usr/share/sonic/platform
+
rm -f /var/run/rsyslogd.pid
supervisorctl start rsyslogd
supervisorctl start 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 until syncd has created the socket for bcmcmd to connect to
+ while true; do
+ if [ -e /var/run/sswsyncd/sswsyncd.socket ]; then
+ break
+ fi
+ sleep 1
+ done
+
+ /usr/bin/bcmcmd -t 60 "rcload ${PLATFORM_DIR}/led_proc_init.soc"
+fi
+
diff --git a/platform/broadcom/one-image.mk b/platform/broadcom/one-image.mk
index 3af81b325d77..600e1159b400 100644
--- a/platform/broadcom/one-image.mk
+++ b/platform/broadcom/one-image.mk
@@ -9,6 +9,7 @@ $(SONIC_ONE_IMAGE)_INSTALLS += $(DELL_S6000_PLATFORM_MODULE) \
$(DELL_S6100_PLATFORM_MODULE) \
$(INGRASYS_S8900_54XC_PLATFORM_MODULE) \
$(INGRASYS_S8900_64XC_PLATFORM_MODULE) \
- $(INGRASYS_S9100_PLATFORM_MODULE)
+ $(INGRASYS_S9100_PLATFORM_MODULE) \
+ $(ACCTON_AS7712_32X_PLATFORM_MODULE)
$(SONIC_ONE_IMAGE)_DOCKERS += $(SONIC_INSTALL_DOCKER_IMAGES)
SONIC_INSTALLERS += $(SONIC_ONE_IMAGE)
diff --git a/platform/broadcom/platform-modules-accton.mk b/platform/broadcom/platform-modules-accton.mk
new file mode 100644
index 000000000000..e5357c5e9f14
--- /dev/null
+++ b/platform/broadcom/platform-modules-accton.mk
@@ -0,0 +1,11 @@
+# Accton Platform modules
+
+ACCTON_AS7712_32X_PLATFORM_MODULE_VERSION = 1.0
+
+export ACCTON_AS7712_32X_PLATFORM_MODULE_VERSION
+
+ACCTON_AS7712_32X_PLATFORM_MODULE = sonic-platform-accton-as7712-32x_$(ACCTON_AS7712_32X_PLATFORM_MODULE_VERSION)_amd64.deb
+$(ACCTON_AS7712_32X_PLATFORM_MODULE)_SRC_PATH = $(PLATFORM_PATH)/sonic-platform-modules-accton
+$(ACCTON_AS7712_32X_PLATFORM_MODULE)_DEPENDS += $(LINUX_HEADERS) $(LINUX_HEADERS_COMMON)
+$(ACCTON_AS7712_32X_PLATFORM_MODULE)_PLATFORM = x86_64-accton_as7712_32x-r0
+SONIC_DPKG_DEBS += $(ACCTON_AS7712_32X_PLATFORM_MODULE)
diff --git a/platform/broadcom/rules.mk b/platform/broadcom/rules.mk
index 28e980ca538f..8d584f8765b9 100755
--- a/platform/broadcom/rules.mk
+++ b/platform/broadcom/rules.mk
@@ -4,6 +4,7 @@ include $(PLATFORM_PATH)/platform-modules-s6000.mk
include $(PLATFORM_PATH)/platform-modules-dell.mk
include $(PLATFORM_PATH)/platform-modules-arista.mk
include $(PLATFORM_PATH)/platform-modules-ingrasys.mk
+include $(PLATFORM_PATH)/platform-modules-accton.mk
include $(PLATFORM_PATH)/docker-orchagent-brcm.mk
include $(PLATFORM_PATH)/docker-syncd-brcm.mk
include $(PLATFORM_PATH)/docker-syncd-brcm-rpc.mk
diff --git a/platform/broadcom/sonic-platform-modules-accton b/platform/broadcom/sonic-platform-modules-accton
new file mode 160000
index 000000000000..99607d63220d
--- /dev/null
+++ b/platform/broadcom/sonic-platform-modules-accton
@@ -0,0 +1 @@
+Subproject commit 99607d63220de336a61d81f6b4d1e64062761abe
diff --git a/platform/broadcom/sonic-platform-modules-arista b/platform/broadcom/sonic-platform-modules-arista
index 393e5e1f19fd..75e84737680f 160000
--- a/platform/broadcom/sonic-platform-modules-arista
+++ b/platform/broadcom/sonic-platform-modules-arista
@@ -1 +1 @@
-Subproject commit 393e5e1f19fd33853bb375d70a10fa7cf4613e4a
+Subproject commit 75e84737680f5451eb9c947d01968b972d989bb3
diff --git a/platform/broadcom/sonic-platform-modules-ingrasys b/platform/broadcom/sonic-platform-modules-ingrasys
index 8d0229c94865..50471fdaaa48 160000
--- a/platform/broadcom/sonic-platform-modules-ingrasys
+++ b/platform/broadcom/sonic-platform-modules-ingrasys
@@ -1 +1 @@
-Subproject commit 8d0229c94865228eff63c0d79396d0b924d7c6b1
+Subproject commit 50471fdaaa4849c19a97d8623971450f09903d5d
diff --git a/rules/docker-dhcp-relay.mk b/rules/docker-dhcp-relay.mk
index 7a7a1afeb4db..44d3904d7394 100644
--- a/rules/docker-dhcp-relay.mk
+++ b/rules/docker-dhcp-relay.mk
@@ -2,8 +2,9 @@
DOCKER_DHCP_RELAY = docker-dhcp-relay.gz
$(DOCKER_DHCP_RELAY)_PATH = $(DOCKERS_PATH)/docker-dhcp-relay
+$(DOCKER_DHCP_RELAY)_DEPENDS += $(ISC_DHCP_COMMON) $(ISC_DHCP_RELAY)
$(DOCKER_DHCP_RELAY)_LOAD_DOCKERS = $(DOCKER_CONFIG_ENGINE)
-SONIC_SIMPLE_DOCKER_IMAGES += $(DOCKER_DHCP_RELAY)
+SONIC_DOCKER_IMAGES += $(DOCKER_DHCP_RELAY)
SONIC_INSTALL_DOCKER_IMAGES += $(DOCKER_DHCP_RELAY)
diff --git a/rules/docker-fpm-quagga.mk b/rules/docker-fpm-quagga.mk
index 1e95c96e001b..a9c0511ba173 100644
--- a/rules/docker-fpm-quagga.mk
+++ b/rules/docker-fpm-quagga.mk
@@ -11,4 +11,3 @@ $(DOCKER_FPM_QUAGGA)_RUN_OPT += --net=host --privileged -t
$(DOCKER_FPM_QUAGGA)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro
$(DOCKER_FPM_QUAGGA)_BASE_IMAGE_FILES += vtysh:/usr/bin/vtysh
-$(DOCKER_FPM_QUAGGA)_BASE_IMAGE_FILES += bgp_neighbor:/usr/bin/bgp_neighbor
diff --git a/rules/isc-dhcp.mk b/rules/isc-dhcp.mk
new file mode 100644
index 000000000000..bfceb7676622
--- /dev/null
+++ b/rules/isc-dhcp.mk
@@ -0,0 +1,13 @@
+# isc-dhcp packages
+
+ISC_DHCP_VERSION = 4.3.1-6
+
+export ISC_DHCP_VERSION
+
+ISC_DHCP_COMMON = isc-dhcp-common_$(ISC_DHCP_VERSION)_amd64.deb
+$(ISC_DHCP_COMMON)_SRC_PATH = $(SRC_PATH)/isc-dhcp
+SONIC_MAKE_DEBS += $(ISC_DHCP_COMMON)
+
+ISC_DHCP_RELAY = isc-dhcp-relay_$(ISC_DHCP_VERSION)_amd64.deb
+$(eval $(call add_derived_package,$(ISC_DHCP_COMMON),$(ISC_DHCP_RELAY)))
+
diff --git a/sonic-mgmt/Dockerfile b/sonic-mgmt/Dockerfile
index f462b99cdf45..69c29eb4c716 100644
--- a/sonic-mgmt/Dockerfile
+++ b/sonic-mgmt/Dockerfile
@@ -26,6 +26,9 @@ RUN apt-get install -y default-jre
# For syslog test
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
+
RUN easy_install pip
RUN pip install ipaddr \
@@ -37,6 +40,7 @@ RUN pip install ipaddr \
pyasn1==0.1.9 \
pysnmp==4.2.5 \
jinja2==2.7.2 \
+ cffi==1.10.0 \
paramiko==2.1.2
RUN git clone https://github.com/ansible/ansible
diff --git a/sonic-slave/Dockerfile b/sonic-slave/Dockerfile
index ee37f57ee0b5..20a7fbad89eb 100644
--- a/sonic-slave/Dockerfile
+++ b/sonic-slave/Dockerfile
@@ -216,6 +216,9 @@ RUN apt-get update && apt-get install -y \
# For sonic config engine testing
pyangbind
+# Install dependencies for building isc-dhcp-relay
+RUN apt-get -y build-dep isc-dhcp
+
RUN cd /usr/src/gtest && cmake . && make -C /usr/src/gtest
RUN mkdir /var/run/sshd
@@ -225,8 +228,21 @@ EXPOSE 22
RUN git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git /usr/share/depot_tools
ENV PATH /usr/share/depot_tools:$PATH
-# Install docker engine 1.13.0 inside docker and enable experimental feature
-RUN curl -sSL https://get.docker.com/ | sh && apt-get install -y --force-yes -q docker-engine=1.13.0-0~debian-jessie
+# Install docker engine 17.03.2~ce-0 inside docker and enable experimental feature
+RUN apt-get update
+RUN apt-get install -y \
+ apt-transport-https \
+ ca-certificates \
+ curl \
+ gnupg2 \
+ software-properties-common
+RUN curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
+RUN add-apt-repository \
+ "deb [arch=amd64] https://download.docker.com/linux/debian \
+ $(lsb_release -cs) \
+ stable"
+RUN apt-get update
+RUN apt-get install -y docker-ce=17.03.2~ce-0~debian-jessie
RUN echo "DOCKER_OPTS=\"--experimental\"" >> /etc/default/docker
# Add user
diff --git a/src/isc-dhcp/Makefile b/src/isc-dhcp/Makefile
new file mode 100644
index 000000000000..b043c0bb266c
--- /dev/null
+++ b/src/isc-dhcp/Makefile
@@ -0,0 +1,30 @@
+.ONESHELL:
+SHELL = /bin/bash
+.SHELLFLAGS += -e
+
+MAIN_TARGET = isc-dhcp-common_$(ISC_DHCP_VERSION)_amd64.deb
+DERIVED_TARGETS = isc-dhcp-relay_$(ISC_DHCP_VERSION)_amd64.deb
+
+$(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% :
+ # Remove any stale files
+ rm -rf ./isc-dhcp
+
+ # Clone isc-dhcp repo
+ git clone git://anonscm.debian.org/pkg-dhcp/isc-dhcp.git
+ pushd ./isc-dhcp
+ git checkout -f debian/4.3.1-6
+ popd
+
+ # Apply patch
+ patch -p1 < isc-dhcp-4.3.1_dhcrelay-custom-circuit_id-remote_id-and-bridge-iface-support.patch
+
+ # Build source and Debian packages
+ pushd ./isc-dhcp
+ dpkg-buildpackage -rfakeroot -b -us -uc
+ popd
+
+ # Move the newly-built .deb packages to the destination directory
+ mv $* $(DERIVED_TARGETS) $(DEST)/
+
+$(addprefix $(DEST)/, $(DERIVED_TARGETS)): $(DEST)/% : $(DEST)/$(MAIN_TARGET)
+
diff --git a/src/isc-dhcp/isc-dhcp-4.3.1_dhcrelay-custom-circuit_id-remote_id-and-bridge-iface-support.patch b/src/isc-dhcp/isc-dhcp-4.3.1_dhcrelay-custom-circuit_id-remote_id-and-bridge-iface-support.patch
new file mode 100644
index 000000000000..8d28751da63c
--- /dev/null
+++ b/src/isc-dhcp/isc-dhcp-4.3.1_dhcrelay-custom-circuit_id-remote_id-and-bridge-iface-support.patch
@@ -0,0 +1,289 @@
+This patch adds the following functionality to dhcrelay in isc-dhcp v4.3.1-6:
+* Add customizable Circuit ID and Remote ID fields
+* Support for obtaining name of physical interface of interfaces that are part of a bridge interface
+
+diff -ruN a/isc-dhcp/relay/dhcrelay.c b/isc-dhcp/relay/dhcrelay.c
+--- a/isc-dhcp/relay/dhcrelay.c 2014-08-06 22:35:02.000000000 +0000
++++ b/isc-dhcp/relay/dhcrelay.c 2017-06-08 21:39:53.856192546 +0000
+@@ -73,6 +73,8 @@
+ did not match any known circuit ID. */
+ int missing_circuit_id = 0; /* Circuit ID option in matching RAI option
+ was missing. */
++const char *agent_circuit_id_fmt = NULL; /* Circuit ID custom format string. */
++const char *agent_remote_id_fmt = NULL; /* Remote ID custom format string. */
+ int max_hop_count = 10; /* Maximum hop count */
+
+ #ifdef DHCPv6
+@@ -140,9 +142,19 @@
+ static const char url[] =
+ "For info, please visit https://www.isc.org/software/dhcp/";
+
++#define DHCRELAY_OPTION82_USAGE \
++"circuit_id/remote_id interpreted sequences are:\n" \
++"\n" \
++" %%%% A single %%\n" \
++" %%h Hostname of device\n" \
++" %%p Name of interface that generated the request\n" \
++" %%P Hardware address of interface that generated the request\n" \
++" %%C Client hardware address\n" \
++" %%I DHCP relay agent IP Address\n" \
++
+ #ifdef DHCPv6
+ #define DHCRELAY_USAGE \
+-"Usage: dhcrelay [-4] [-d] [-q] [-a] [-D]\n"\
++"Usage: dhcrelay [-4] [-d] [-q] [-a ] [-D]\n"\
+ " [-A ] [-c ] [-p ]\n" \
+ " [-pf ] [--no-pid]\n"\
+ " [-m append|replace|forward|discard]\n" \
+@@ -154,14 +166,15 @@
+ " -l lower0 [ ... -l lowerN]\n" \
+ " -u upper0 [ ... -u upperN]\n" \
+ " lower (client link): [address%%]interface[#index]\n" \
+-" upper (server link): [address%%]interface"
++" upper (server link): [address%%]interface\n\n" DHCRELAY_OPTION82_USAGE
+ #else
+ #define DHCRELAY_USAGE \
+-"Usage: dhcrelay [-d] [-q] [-a] [-D] [-A ] [-c ] [-p ]\n" \
+-" [-pf ] [--no-pid]\n" \
++"Usage: dhcrelay [-d] [-q] [-a ] [-D]\n" \
++" [-A ] [-c ] [-p ]\n" \
++" [-pf ] [--no-pid]\n"\
+ " [-m append|replace|forward|discard]\n" \
+ " [-i interface0 [ ... -i interfaceN]\n" \
+-" server0 [ ... serverN]\n\n"
++" server0 [ ... serverN]\n\n" DHCRELAY_OPTION82_USAGE
+ #endif
+
+ static void usage() {
+@@ -287,6 +300,15 @@
+ local_family_set = 1;
+ local_family = AF_INET;
+ #endif
++ if (++i == argc)
++ usage();
++
++ if (argv[i] != NULL && argv[i][0] != '-')
++ agent_circuit_id_fmt = argv[i++];
++
++ if (argv[i] != NULL && argv[i][0] != '-')
++ agent_remote_id_fmt = argv[i];
++
+ add_agent_options = 1;
+ } else if (!strcmp(argv[i], "-A")) {
+ #ifdef DHCPv6
+@@ -937,6 +959,166 @@
+ return (-1);
+ }
+
++static int
++_bridgefdbquery(const char *hwAddr, char *interface, int *vlanid) {
++
++#define xstr(s) str(s)
++#define str(s) #s
++#define FDB_STRING_LEN 100
++#define FDB_BUFFER_LEN (FDB_STRING_LEN + 1)
++
++/*
++ * Format for sscanf() to read the 1st, 3th, and 5th
++ * space-delimited fields
++ *
++ * bridge fdb show output
++ * 6c:64:1a:00:06:13 dev swp35 vlan 0 master bridge permanent
++ */
++#define FDB_LINE_FORMAT "%" xstr(FDB_STRING_LEN) "s %*s " \
++ "%" xstr(FDB_STRING_LEN) "s %*s %d %*s"
++
++ char cmdstr[FDB_BUFFER_LEN];
++ char buf[FDB_BUFFER_LEN];
++ char macAddr[FDB_BUFFER_LEN];
++
++ if ((interface == NULL) || (vlanid == NULL)) {
++ return 0;
++ }
++ sprintf(cmdstr, "bridge fdb show | grep -m 1 %s", hwAddr);
++ FILE *cmd = popen(cmdstr, "r");
++
++ if (cmd != NULL) {
++ while (fgets(buf, sizeof(buf), cmd)) {
++ sscanf(buf, FDB_LINE_FORMAT, macAddr, interface, vlanid);
++ log_debug ("bridgefdbquery: macAddr:%s interface: %s vlanid %d",
++ macAddr,
++ interface, *vlanid);
++ }
++ pclose(cmd);
++ return 0;
++ }
++
++ return -1;
++}
++
++/*
++ * Format the message that will be used by circuit_id and remote_id
++ */
++static int
++format_relay_agent_rfc3046_msg(struct interface_info *ip, struct dhcp_packet *packet,
++ const char *format, char *msg, size_t msgn) {
++ size_t len = 0;
++ char hostname[HOST_NAME_MAX + 1] = { 0 };
++ char ifname[IFNAMSIZ + 1] = { 0 };
++ char *buf = msg;
++
++ for ( ; format && *format && len < msgn; ++format) {
++ size_t strn = 0;
++ const char *str = NULL;
++
++ if (*format == '%') {
++ switch (*++format) {
++ case '\0':
++ --format;
++ break;
++
++ case '%': /* A literal '%' */
++ str = "%";
++ break;
++
++ case 'h': /* Hostname */
++ gethostname(hostname, HOST_NAME_MAX);
++ str = hostname;
++ break;
++
++ case 'p': /* Name of interface that we received the request from */
++ /*
++ * Query FDB to identify the exact physical interface only when source MAC address
++ * is present and '20: DHCP relay agent IP address' (giaddr) is not present
++ */
++ if (packet->htype && !packet->giaddr.s_addr) {
++ int ret = 0, vlanid = 0;
++
++ ret = _bridgefdbquery(print_hw_addr(packet->htype, packet->hlen, packet->chaddr),
++ ip->name,
++ &vlanid);
++
++ if (ret < 0) {
++ log_debug("MAC Address: %s (interface:%s vlan:%d) not found in bridge fdb show",
++ print_hw_addr (packet->htype, packet->hlen, packet->chaddr),
++ ip->name,
++ vlanid);
++ strncpy(ifname, ip->name, IFNAMSIZ);
++ }
++ else if (strlen(ip->name) > 0) {
++ char cmdstr[256] = { 0 };
++ char cmdout[256] = { 0 };
++
++ log_debug("Adding option 82 interface name for MAC Address: %s as %s",
++ print_hw_addr (packet->htype, packet->hlen, packet->chaddr),
++ ip->name);
++
++ // Translate SONiC interface name to vendor alias
++ sprintf(cmdstr, "sonic-cfggen -m /etc/sonic/minigraph.xml -v \"minigraph_ports['%s'].alias\"", ip->name);
++
++ FILE *cmd = popen(cmdstr, "r");
++
++ if (cmd != NULL) {
++ while (fgets(cmdout, sizeof(cmdout), cmd)) {
++ // Strip any trailing newline
++ if (cmdout[strlen(cmdout) - 1] == '\n')
++ cmdout[strlen(cmdout) - 1] = '\0';
++
++ log_debug ("Retrieved alias %s for interface %s", buf, ip->name);
++ }
++
++ pclose(cmd);
++ }
++
++ strncpy(ifname, cmdout, IFNAMSIZ);
++ }
++
++ str = ifname;
++ }
++ break;
++
++ case 'P': /* Physical address of interface that we received the request from */
++ str = print_hw_addr(ip->hw_address.hbuf[0], ip->hw_address.hlen - 1, &ip->hw_address.hbuf[1]);
++ break;
++
++ case 'C': /* 24: Client hardware address */
++ str = print_hw_addr(packet->htype, packet->hlen, packet->chaddr);
++ break;
++
++ case 'I': /* 20: DHCP relay agent IP address */
++ str = inet_ntoa(packet->giaddr);
++ break;
++
++ default:
++ log_error("Option %%%c is unrecognized and will not be formatted!", *format);
++ continue;
++ }
++
++ if (str)
++ strn = strlen(str);
++ } else {
++ str = format;
++ strn += 1;
++ }
++
++ // Do we have room?
++ if ((strn+len) > msgn) {
++ return 0;
++ }
++
++ memcpy(buf+len, str, strn);
++ len += strn;
++ }
++
++ return len;
++}
++
++
+ /*
+ * Examine a packet to see if it's a candidate to have a Relay
+ * Agent Information option tacked onto its tail. If it is, tack
+@@ -948,6 +1130,8 @@
+ int is_dhcp = 0, mms;
+ unsigned optlen;
+ u_int8_t *op, *nextop, *sp, *max, *end_pad = NULL;
++ char circuit_id_buf[255] = { '\0', };
++ char remote_id_buf[255] = { '\0', };
+
+ /* If we're not adding agent options to packets, we can skip
+ this. */
+@@ -1077,6 +1261,38 @@
+ op = sp;
+ #endif
+
++ /* option82: custom string for circuit_id */
++ if (agent_circuit_id_fmt) {
++ size_t len = 0;
++
++ len = format_relay_agent_rfc3046_msg(ip, packet, agent_circuit_id_fmt,
++ circuit_id_buf, sizeof(circuit_id_buf));
++
++ if (len > 0) {
++ ip->circuit_id = (uint8_t *)circuit_id_buf;
++ ip->circuit_id_len = len;
++
++ log_debug("sending on %s option82:circuit_id='%s'(%d)",
++ ip->name, (char *)ip->circuit_id, ip->circuit_id_len);
++ }
++ }
++
++ /* option82: custom string for remote_id */
++ if (agent_remote_id_fmt) {
++ size_t len = 0;
++
++ len = format_relay_agent_rfc3046_msg(ip, packet, agent_remote_id_fmt,
++ remote_id_buf, sizeof(remote_id_buf));
++
++ if (len > 0) {
++ ip->remote_id = (uint8_t *)remote_id_buf;
++ ip->remote_id_len = len;
++
++ log_debug("sending on %s option82:remote_id='%s'(%d)",
++ ip->name, (char *)ip->remote_id, ip->remote_id_len);
++ }
++ }
++
+ /* Sanity check. Had better not ever happen. */
+ if ((ip->circuit_id_len > 255) ||(ip->circuit_id_len < 1))
+ log_fatal("Circuit ID length %d out of range [1-255] on "
+
diff --git a/src/sonic-config-engine/minigraph.py b/src/sonic-config-engine/minigraph.py
index 7dc060900886..8d3e82ea1233 100644
--- a/src/sonic-config-engine/minigraph.py
+++ b/src/sonic-config-engine/minigraph.py
@@ -127,10 +127,7 @@ def parse_dpg(dpg, hname):
intfs = []
for ipintf in ipintfs.findall(str(QName(ns, "IPInterface"))):
intfalias = ipintf.find(str(QName(ns, "AttachTo"))).text
- if port_alias_map.has_key(intfalias):
- intfname = port_alias_map[intfalias]
- else:
- intfname = intfalias
+ intfname = port_alias_map.get(intfalias, intfalias)
ipprefix = ipintf.find(str(QName(ns, "Prefix"))).text
ipn = ipaddress.IPNetwork(ipprefix)
ipaddr = ipn.ip
@@ -198,7 +195,7 @@ def parse_dpg(dpg, hname):
pcintfmbr = pcintf.find(str(QName(ns, "AttachTo"))).text
pcmbr_list = pcintfmbr.split(';')
for i, member in enumerate(pcmbr_list):
- pcmbr_list[i] = port_alias_map[member]
+ pcmbr_list[i] = port_alias_map.get(member, member)
pcs[pcintfname] = {'name': pcintfname, 'members': pcmbr_list}
vlanintfs = child.find(str(QName(ns, "VlanInterfaces")))
@@ -210,7 +207,7 @@ def parse_dpg(dpg, hname):
vintfmbr = vintf.find(str(QName(ns, "AttachTo"))).text
vmbr_list = vintfmbr.split(';')
for i, member in enumerate(vmbr_list):
- vmbr_list[i] = port_alias_map[member]
+ vmbr_list[i] = port_alias_map.get(member, member)
vlan_attributes = {'name': vintfname, 'members': vmbr_list, 'vlanid': vlanid}
sonic_vlan_name = "Vlan%s" % vlanid
vlans[sonic_vlan_name] = vlan_attributes
@@ -244,6 +241,7 @@ def parse_dpg(dpg, hname):
def parse_cpg(cpg, hname):
bgp_sessions = []
myasn = None
+ bgp_peers_with_range = []
for child in cpg:
tag = child.tag
if tag == str(QName(ns, "PeeringSessions")):
@@ -270,12 +268,22 @@ def parse_cpg(cpg, hname):
hostname = router.find(str(QName(ns1, "Hostname"))).text
if hostname == hname:
myasn = int(asn)
+ peers = router.find(str(QName(ns1, "Peers")))
+ for bgpPeer in peers.findall(str(QName(ns, "BGPPeer"))):
+ addr = bgpPeer.find(str(QName(ns, "Address"))).text
+ if bgpPeer.find(str(QName(ns1, "PeersRange"))) is not None:
+ name = bgpPeer.find(str(QName(ns1, "Name"))).text
+ ip_range = bgpPeer.find(str(QName(ns1, "PeersRange"))).text
+ bgp_peers_with_range.append({
+ 'name': name,
+ 'ip_range': ip_range
+ })
else:
for bgp_session in bgp_sessions:
if hostname == bgp_session['name']:
bgp_session['asn'] = int(asn)
- return bgp_sessions, myasn
+ return bgp_sessions, myasn, bgp_peers_with_range
def parse_meta(meta, hname):
@@ -284,6 +292,7 @@ def parse_meta(meta, hname):
ntp_servers = []
mgmt_routes = []
erspan_dst = []
+ deployment_id = None
device_metas = meta.find(str(QName(ns, "Devices")))
for device in device_metas.findall(str(QName(ns1, "DeviceMetadata"))):
if device.find(str(QName(ns1, "Name"))).text == hname:
@@ -302,7 +311,9 @@ def parse_meta(meta, hname):
mgmt_routes = value_group
elif name == "ErspanDestinationIpv4":
erspan_dst = value_group
- return syslog_servers, dhcp_servers, ntp_servers, mgmt_routes, erspan_dst
+ elif name == "DeploymentId":
+ deployment_id = value
+ return syslog_servers, dhcp_servers, ntp_servers, mgmt_routes, erspan_dst, deployment_id
def get_console_info(devices, dev, port):
@@ -396,6 +407,8 @@ def parse_xml(filename, platform=None, port_config_file=None):
ntp_servers = []
mgmt_routes = []
erspan_dst = []
+ bgp_peers_with_range = None
+ deployment_id = None
hwsku_qn = QName(ns, "HwSku")
hostname_qn = QName(ns, "Hostname")
@@ -411,13 +424,13 @@ def parse_xml(filename, platform=None, port_config_file=None):
if child.tag == str(QName(ns, "DpgDec")):
(intfs, lo_intfs, mgmt_intf, vlans, pcs, acls) = parse_dpg(child, hostname)
elif child.tag == str(QName(ns, "CpgDec")):
- (bgp_sessions, bgp_asn) = parse_cpg(child, hostname)
+ (bgp_sessions, bgp_asn, bgp_peers_with_range) = parse_cpg(child, hostname)
elif child.tag == str(QName(ns, "PngDec")):
(neighbors, devices, console_dev, console_port, mgmt_dev, mgmt_port) = parse_png(child, hostname)
elif child.tag == str(QName(ns, "UngDec")):
(u_neighbors, u_devices, _, _, _, _) = parse_png(child, hostname)
elif child.tag == str(QName(ns, "MetadataDeclaration")):
- (syslog_servers, dhcp_servers, ntp_servers, mgmt_routes, erspan_dst) = parse_meta(child, hostname)
+ (syslog_servers, dhcp_servers, ntp_servers, mgmt_routes, erspan_dst, deployment_id) = parse_meta(child, hostname)
Tree = lambda: defaultdict(Tree)
@@ -428,6 +441,7 @@ def parse_xml(filename, platform=None, port_config_file=None):
# TODO: alternatively (preferred), implement class containers for multiple-attribute entries, enabling sort by attr
results['minigraph_bgp'] = sorted(bgp_sessions, key=lambda x: x['addr'])
results['minigraph_bgp_asn'] = bgp_asn
+ results['minigraph_bgp_peers_with_range'] = bgp_peers_with_range
# TODO: sort does not work properly on all interfaces of varying lengths. Need to sort by integer group(s).
phyport_intfs = []
@@ -466,6 +480,7 @@ def parse_xml(filename, platform=None, port_config_file=None):
results['ntp_servers'] = ntp_servers
results['forced_mgmt_routes'] = mgmt_routes
results['erspan_dst'] = erspan_dst
+ results['deployment_id'] = deployment_id
return results
diff --git a/src/sonic-config-engine/sonic-cfggen b/src/sonic-config-engine/sonic-cfggen
index 822f02d7fcc2..c0ce51d4bf80 100755
--- a/src/sonic-config-engine/sonic-cfggen
+++ b/src/sonic-config-engine/sonic-cfggen
@@ -49,7 +49,7 @@ def main():
parser=argparse.ArgumentParser(description="Render configuration file from minigraph data and jinja2 template.")
parser.add_argument("-m", "--minigraph", help="minigraph xml file")
parser.add_argument("-p", "--port-config", help="port config file, used with -m")
- parser.add_argument("-y", "--yaml", help="yaml file that contains addtional variables")
+ parser.add_argument("-y", "--yaml", help="yaml file that contains addtional variables", action='append', default=[])
parser.add_argument("-a", "--additional-data", help="addition data, in json string")
group = parser.add_mutually_exclusive_group()
group.add_argument("-t", "--template", help="render the data with the template file")
@@ -79,8 +79,8 @@ def main():
else:
data.update(parse_xml(minigraph))
- if args.yaml != None:
- with open(args.yaml, 'r') as stream:
+ for yaml_file in args.yaml:
+ with open(yaml_file, 'r') as stream:
additional_data = yaml.load(stream)
data.update(additional_data)
diff --git a/src/sonic-config-engine/tests/sample_output/rules_for_dataacl.json b/src/sonic-config-engine/tests/sample_output/rules_for_dataacl.json
index 48fa240c9dc6..709468f9d945 100644
--- a/src/sonic-config-engine/tests/sample_output/rules_for_dataacl.json
+++ b/src/sonic-config-engine/tests/sample_output/rules_for_dataacl.json
@@ -1,6 +1,6 @@
[
{
- "ACL_RULE_TABLE:dataacl:Rule_1":{
+ "ACL_RULE_TABLE:DATAACL:RULE_1":{
"IP_PROTOCOL":17,
"PACKET_ACTION":"FORWARD",
"SRC_IP":"10.0.0.0/8",
@@ -9,7 +9,7 @@
"OP":"SET"
},
{
- "ACL_RULE_TABLE:dataacl:Rule_3":{
+ "ACL_RULE_TABLE:DATAACL:RULE_3":{
"IP_PROTOCOL":17,
"PACKET_ACTION":"FORWARD",
"SRC_IP":"25.0.0.0/8",
@@ -18,7 +18,7 @@
"OP":"SET"
},
{
- "ACL_RULE_TABLE:dataacl:Rule_2":{
+ "ACL_RULE_TABLE:DATAACL:RULE_2":{
"IP_PROTOCOL":17,
"PACKET_ACTION":"FORWARD",
"SRC_IP":"100.64.0.0/10",
@@ -27,12 +27,20 @@
"OP":"SET"
},
{
- "ACL_RULE_TABLE:dataacl:Rule_4":{
+ "ACL_RULE_TABLE:DATAACL:RULE_4":{
"IP_PROTOCOL":6,
"PACKET_ACTION":"FORWARD",
"TCP_FLAGS":"0x10/0x10",
"priority":9996
},
"OP":"SET"
+ },
+ {
+ "ACL_RULE_TABLE:DATAACL:DEFAULT_RULE":{
+ "ETHER_TYPE":"0x0800",
+ "PACKET_ACTION":"DROP",
+ "priority":1
+ },
+ "OP":"SET"
}
]
\ No newline at end of file
diff --git a/src/sonic-config-engine/tests/sample_output/rules_for_everflow.json b/src/sonic-config-engine/tests/sample_output/rules_for_everflow.json
index c31965e31e27..2f39a0dcc4a3 100644
--- a/src/sonic-config-engine/tests/sample_output/rules_for_everflow.json
+++ b/src/sonic-config-engine/tests/sample_output/rules_for_everflow.json
@@ -1,6 +1,6 @@
[
{
- "ACL_RULE_TABLE:everflow:Rule_1":{
+ "ACL_RULE_TABLE:EVERFLOW:RULE_1":{
"DST_IP":"127.0.0.1/32",
"IP_PROTOCOL":6,
"L4_DST_PORT":0,
diff --git a/src/sonic-config-engine/tests/t0-sample-bgp-speaker.xml b/src/sonic-config-engine/tests/t0-sample-bgp-speaker.xml
new file mode 100644
index 000000000000..b5e373ddd868
--- /dev/null
+++ b/src/sonic-config-engine/tests/t0-sample-bgp-speaker.xml
@@ -0,0 +1,346 @@
+
+
+
+
+
+ false
+ switch-t0
+ 10.0.0.56
+ ARISTA01T1
+ 10.0.0.57
+ 1
+ 180
+ 60
+
+
+ switch-t0
+ FC00::71
+ ARISTA01T1
+ FC00::72
+ 1
+ 180
+ 60
+
+
+ false
+ switch-t0
+ 10.0.0.58
+ ARISTA02T1
+ 10.0.0.59
+ 1
+ 180
+ 60
+
+
+ switch-t0
+ FC00::75
+ ARISTA02T1
+ FC00::76
+ 1
+ 180
+ 60
+
+
+ false
+ switch-t0
+ 10.0.0.60
+ ARISTA03T1
+ 10.0.0.61
+ 1
+ 180
+ 60
+
+
+ switch-t0
+ FC00::79
+ ARISTA03T1
+ FC00::7A
+ 1
+ 180
+ 60
+
+
+ false
+ switch-t0
+ 10.0.0.62
+ ARISTA04T1
+ 10.0.0.63
+ 1
+ 180
+ 60
+
+
+ switch-t0
+ FC00::7D
+ ARISTA04T1
+ FC00::7E
+ 1
+ 180
+ 60
+
+
+
+
+ 65100
+ switch-t0
+
+
+ 10.0.0.57
+
+
+
+
+
+ 10.0.0.59
+
+
+
+
+
+ 10.0.0.61
+
+
+
+
+
+ 10.0.0.63
+
+
+
+
+
+ 10.1.0.32
+ BGPSLBPassive
+ 10.10.10.10/26
+
+
+
+
+
+ 64600
+ ARISTA01T1
+
+
+
+ 64600
+ ARISTA02T1
+
+
+
+ 64600
+ ARISTA03T1
+
+
+
+ 64600
+ 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.100/24
+
+ 10.0.0.100/24
+
+
+
+
+
+
+ switch-t0
+
+
+ PortChannel01
+ fortyGigE0/112
+
+
+
+ PortChannel02
+ fortyGigE0/116
+
+
+
+ PortChannel03
+ fortyGigE0/120
+
+
+
+ PortChannel04
+ fortyGigE0/124
+
+
+
+
+
+ Vlan1000
+ fortyGigE0/4;fortyGigE0/8;fortyGigE0/12;fortyGigE0/16;fortyGigE0/20;fortyGigE0/24;fortyGigE0/28;fortyGigE0/32;fortyGigE0/36;fortyGigE0/40;fortyGigE0/44;fortyGigE0/48;fortyGigE0/52;fortyGigE0/56;fortyGigE0/60;fortyGigE0/64;fortyGigE0/68;fortyGigE0/72;fortyGigE0/76;fortyGigE0/80;fortyGigE0/84;fortyGigE0/88;fortyGigE0/92;fortyGigE0/96
+ False
+ 0.0.0.0/0
+
+ 1000
+ 1000
+ 192.168.0.0/27
+
+
+
+
+
+ PortChannel01
+ 10.0.0.56/31
+
+
+
+ PortChannel01
+ FC00::71/126
+
+
+
+ PortChannel02
+ 10.0.0.58/31
+
+
+
+ PortChannel02
+ FC00::75/126
+
+
+
+ PortChannel03
+ 10.0.0.60/31
+
+
+
+ PortChannel03
+ FC00::79/126
+
+
+
+ PortChannel04
+ 10.0.0.62/31
+
+
+
+ PortChannel04
+ FC00::7D/126
+
+
+
+ Vlan1000
+ 192.168.0.1/27
+
+
+
+
+
+
+ PortChannel01;PortChannel02;PortChannel03;PortChannel04
+
+ DataAcl
+
+
+
+
+
+
+
+
+
+ DeviceInterfaceLink
+ ARISTA01T1
+ Ethernet1/1
+ switch-t0
+ fortyGigE0/112
+
+
+ DeviceInterfaceLink
+ ARISTA02T1
+ Ethernet1/1
+ switch-t0
+ fortyGigE0/116
+
+
+ DeviceInterfaceLink
+ ARISTA03T1
+ Ethernet1/1
+ switch-t0
+ fortyGigE0/120
+
+
+ DeviceInterfaceLink
+ ARISTA04T1
+ Ethernet1/1
+ switch-t0
+ fortyGigE0/124
+
+
+
+
+ switch-t0
+ Force10-S6000
+
+
+ ARISTA01T1
+ Arista
+
+
+ ARISTA02T1
+ Arista
+
+
+ ARISTA03T1
+ Arista
+
+
+ ARISTA04T1
+ Arista
+
+
+
+
+
+
+ switch-t0
+
+
+ ErspanDestinationIpv4
+
+ 2.2.2.2
+
+
+ DeploymentId
+ 1
+
+
+
+
+
+
+ switch-t0
+ Force10-S6000
+
diff --git a/src/sonic-config-engine/tests/test_cfggen.py b/src/sonic-config-engine/tests/test_cfggen.py
index a4ad6cb806fc..9a305fd72aac 100644
--- a/src/sonic-config-engine/tests/test_cfggen.py
+++ b/src/sonic-config-engine/tests/test_cfggen.py
@@ -11,6 +11,7 @@ def setUp(self):
self.sample_graph_t0 = os.path.join(self.test_dir, 't0-sample-graph.xml')
self.sample_graph_simple = os.path.join(self.test_dir, 'simple-sample-graph.xml')
self.sample_graph_pc_test = os.path.join(self.test_dir, 'pc-test-graph.xml')
+ self.sample_graph_bgp_speaker = os.path.join(self.test_dir, 't0-sample-bgp-speaker.xml')
self.port_config = os.path.join(self.test_dir, 't0-sample-port-config.ini')
def run_script(self, argument):
@@ -97,3 +98,13 @@ def test_minigraph_neighbors(self):
argument = '-m "' + self.sample_graph_t0 + '" -p "' + self.port_config + '" -v minigraph_neighbors'
output = self.run_script(argument)
self.assertEqual(output.strip(), "{'Ethernet116': {'name': 'ARISTA02T1', 'port': 'Ethernet1/1'}, 'Ethernet124': {'name': 'ARISTA04T1', 'port': 'Ethernet1/1'}, 'Ethernet112': {'name': 'ARISTA01T1', 'port': 'Ethernet1/1'}, 'Ethernet120': {'name': 'ARISTA03T1', 'port': 'Ethernet1/1'}}")
+
+ def test_minigraph_peers_with_range(self):
+ argument = '-m "' + self.sample_graph_bgp_speaker + '" -p "' + self.port_config + '" -v minigraph_bgp_peers_with_range'
+ output = self.run_script(argument)
+ self.assertEqual(output.strip(), "[{'name': 'BGPSLBPassive', 'ip_range': '10.10.10.10/26'}]")
+
+ def test_minigraph_deployment_id(self):
+ argument = '-m "' + self.sample_graph_bgp_speaker + '" -p "' + self.port_config + '" -v deployment_id'
+ output = self.run_script(argument)
+ self.assertEqual(output.strip(), "1")
diff --git a/src/sonic-config-engine/translate_acl b/src/sonic-config-engine/translate_acl
index 584db7b64488..696a433730a9 100755
--- a/src/sonic-config-engine/translate_acl
+++ b/src/sonic-config-engine/translate_acl
@@ -13,11 +13,21 @@ def dump_json(filename, data):
with open(filename, 'w') as outfile:
json.dump(data, outfile, indent=4, sort_keys=True, separators=(',', ':'))
+def default_deny_rule(table_name):
+ rule_props = {}
+ rule_data = {}
+ rule_data["ACL_RULE_TABLE:"+table_name.upper()+":DEFAULT_RULE"] = rule_props
+ rule_data["OP"] = "SET"
+ rule_props["priority"] = 1
+ rule_props["ETHER_TYPE"] = "0x0800"
+ rule_props["PACKET_ACTION"] = "DROP"
+ return rule_data
+
def generate_rule_json(table_name, rule, max_priority, mirror):
rule_idx = rule.config.sequence_id
rule_props = {}
rule_data = {}
- rule_data["ACL_RULE_TABLE:"+table_name+":Rule_"+str(rule_idx)] = rule_props
+ rule_data["ACL_RULE_TABLE:"+table_name.upper()+":RULE_"+str(rule_idx)] = rule_props
rule_data["OP"] = "SET"
rule_props["priority"] = max_priority - rule_idx
@@ -120,7 +130,8 @@ def generate_table_json(aclset, aclname, ports, mirror, max_priority, output_pat
rule_props = generate_rule_json(table_name, aclentry, max_priority, mirror)
if rule_props:
rule_data.append(rule_props)
-
+ if not mirror:
+ rule_data.append(default_deny_rule(table_name))
dump_json(os.path.join(output_path, "rules_for_"+table_name+".json"), rule_data)
def translate_acl_fixed_port(filename, output_path, port, max_priority):
diff --git a/src/sonic-platform-daemons b/src/sonic-platform-daemons
index bd7c31075765..d68c286ba7c9 160000
--- a/src/sonic-platform-daemons
+++ b/src/sonic-platform-daemons
@@ -1 +1 @@
-Subproject commit bd7c310757658396ccfaaf653ede4a931b3d4154
+Subproject commit d68c286ba7c984c98ebfafc2bb5fe24905659e5f
diff --git a/src/sonic-quagga b/src/sonic-quagga
index 5da3e26ecddf..df6b70902b4c 160000
--- a/src/sonic-quagga
+++ b/src/sonic-quagga
@@ -1 +1 @@
-Subproject commit 5da3e26ecddfec6f5983f34b27056b64f67e09d3
+Subproject commit df6b70902b4c29447ac52277cf6d5b7f6abca71e
diff --git a/src/sonic-sairedis b/src/sonic-sairedis
index a8f7f0287a41..38f5ce8bc884 160000
--- a/src/sonic-sairedis
+++ b/src/sonic-sairedis
@@ -1 +1 @@
-Subproject commit a8f7f0287a41740dc12a7bfec62f68de5874ed31
+Subproject commit 38f5ce8bc88452314e97c10dfd4221f79d106a78
diff --git a/src/sonic-swss b/src/sonic-swss
index 83363a7e9ee2..009c8620d306 160000
--- a/src/sonic-swss
+++ b/src/sonic-swss
@@ -1 +1 @@
-Subproject commit 83363a7e9ee27292160261a30c7b0f0e6fbe6a1b
+Subproject commit 009c8620d30672d1039fbf299027b7c5a78ff5a4
diff --git a/src/sonic-utilities b/src/sonic-utilities
index c1b48a6a28f9..5d8f98eeae60 160000
--- a/src/sonic-utilities
+++ b/src/sonic-utilities
@@ -1 +1 @@
-Subproject commit c1b48a6a28f9897ebfebf9989b5cb4a472cf1967
+Subproject commit 5d8f98eeae60f1b5c6c5d6ad7cb4c31019558efd