[Platform] Add Ingrasys S9130-32X and S9230-64X with Nephos Switch ASIC (#1245)

* Add switch ASIC vendor and platforms for Nephos

- What I did
Add switch ASIC vendor: Nephos
Add Nephos platforms: Ingrasys S9130-32X, Ingrasys S9230-64X

- How I did it
Add platform/nephos files
Add platform/nephos/sonic-platform-modules-ingrasys submodule
Add device/ingrasys/x86_64-ingrasys_s9130_32x-r0 files
Add device/ingrasys/x86_64-ingrasys_s9230_64x-r0 files
Add SONiC to support Nephos platform

- How to verify it
To build SONiC installer image and docker images, run the following commands:
make configure PLATFORM=nephos
make target/sonic-nephos.bin
Check system and network feature is worked as well

- Description for the changelog
Add switch ASIC vendor and platforms for Nephos

- A picture of a cute animal (not mandatory but encouraged)

Signed-off-by: Sam Yang <yang.kaiyu@gmail.com>

* Advance sonic-sairedis submodule to include #271 (Add Nephos ASIC)
This commit is contained in:
kaiyu22 2017-12-23 02:04:29 +08:00 committed by lguohan
parent ee73cdec26
commit 63de341dd6
50 changed files with 1567 additions and 1 deletions

3
.gitmodules vendored
View File

@ -68,3 +68,6 @@
[submodule "platform/p4/SAI-P4-BM"]
path = platform/p4/SAI-P4-BM
url = https://github.com/Mellanox/SAI-P4-BM.git
[submodule "platform/nephos/sonic-platform-modules-ingrasys"]
path = platform/nephos/sonic-platform-modules-ingrasys
url = https://github.com/Ingrasys-sonic/sonic-platform-modules-ingrasys-nephos.git

View File

@ -53,6 +53,7 @@ The SONiC installer contains all docker images needed. SONiC uses one image for
- PLATFORM=mellanox
- PLATFORM=cavium
- PLATFORM=centec
- PLATFORM=nephos
- PLATFORM=p4
- PLATFORM=vs
@ -96,9 +97,11 @@ This may take a while, but it is a one-time action, so please be patient.
- docker-orchagent-brcm.gz: docker image for SWitch State Service (SWSS) on Broadcom platform (gzip tar archive)
- docker-orchagent-cavm.gz: docker image for SWitch State Service (SWSS) on Cavium platform (gzip tar archive)
- docker-orchagent-mlnx.gz: docker image for SWitch State Service (SWSS) on Mellanox platform (gzip tar archive)
- docker-orchagent-nephos.gz: docker image for SWitch State Service (SWSS) on Nephos platform (gzip tar archive)
- docker-syncd-brcm.gz: docker image for the daemon to sync database and Broadcom switch ASIC (gzip tar archive)
- docker-syncd-cavm.gz: docker image for the daemon to sync database and Cavium switch ASIC (gzip tar archive)
- docker-syncd-mlnx.gz: docker image for the daemon to sync database and Mellanox switch ASIC (gzip tar archive)
- docker-syncd-nephos.gz: docker image for the daemon to sync database and Nephos switch ASIC (gzip tar archive)
- docker-sonic-p4.gz: docker image for all-in-one for p4 software switch (gzip tar archive)
- docker-sonic-vs.gz: docker image for all-in-one for software virtual switch (gzip tar archive)

View File

@ -144,6 +144,9 @@ sudo chroot $FILESYSTEM_ROOT update-initramfs -u
## Install latest intel igb driver
sudo cp target/debs/igb.ko $FILESYSTEM_ROOT/lib/modules/3.16.0-4-amd64/kernel/drivers/net/ethernet/intel/igb/igb.ko
## Install latest intel ixgbe driver
sudo cp target/debs/ixgbe.ko $FILESYSTEM_ROOT/lib/modules/3.16.0-4-amd64/kernel/drivers/net/ethernet/intel/ixgbe/ixgbe.ko
## Install docker
echo '[INFO] Install docker'
## Install apparmor utils since they're missing and apparmor is enabled in the kernel

View File

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

View File

@ -0,0 +1,2 @@
SAI_INIT_CONFIG_FILE=/usr/share/sonic/platform/led_proc_init.nps
SAI_DSH_CONFIG_FILE=/usr/share/sonic/hwsku/port_config.nps

View File

@ -0,0 +1,12 @@
# Configuration file generated by pwmconfig, changes will be lost
INTERVAL=10
DEVPATH=hwmon5=devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-8/8-002f
DEVNAME=hwmon5=w83795adg
FCTEMPS=hwmon5/device/pwm2=hwmon1/temp1_input hwmon5/device/pwm1=hwmon1/temp1_input
FCFANS=hwmon5/device/pwm2=hwmon5/device/fan8_input hwmon5/device/pwm2=hwmon5/device/fan7_input hwmon5/device/pwm2=hwmon5/device/fan6_input hwmon5/device/pwm2=hwmon5/device/fan5_input hwmon5/device/pwm1=hwmon5/device/fan4_input hwmon5/device/pwm1=hwmon5/device/fan3_input hwmon5/device/pwm1=hwmon5/device/fan2_input hwmon5/device/pwm1=hwmon5/device/fan1_input
# TODO: check the temp value with HW after board ready
MINTEMP=hwmon5/device/pwm2=20 hwmon5/device/pwm1=20
MAXTEMP=hwmon5/device/pwm2=60 hwmon5/device/pwm1=60
MINSTART=hwmon5/device/pwm2=75 hwmon5/device/pwm1=75
MINSTOP=hwmon5/device/pwm2=22 hwmon5/device/pwm1=22

View File

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

View File

@ -0,0 +1,20 @@
#This configuration file is for customer init value feature. Please refer to mtk_cfg.h/mtk_cfg.c for detail.
#1. The lines beginning with # are comment lines. The lines beginning with number are the setting lines.
#2. There are five parameters which can be set.
# 1) the first is unit.
# 2) the second is NPS_CFG_TYPE_XXX. Refer to NPS_CFG_TYPE_T.
# 3) the 3-5 are {param0, param1, value} pairs. Refer to NPS_CFG_VALUE_T. Support HEX format.
# 4) the (unit, NPS_CFG_TYPE_XXX, param0, param1) group is the key to get the correspingding value.
# There should be no same (unit, NPS_CFG_TYPE_XXX, param0, param1) group.
#3. User must follow correct format to apply the setting. Please refer to below commentted example(#0 NPS_CFG_TYPE_L2_ADDR_MODE 0 0 1);
#4. Usage under the linux shell:
# 1) ./image-path/image-name -c cfg-path/NPS_Ari_EVB_24.cfg : mamually specify directory path if they are not in current work dirctory.
# 2) ./image-name -c NPS_Ari_EVB_24.cfg : the image and the NPS_Ari_EVB_24.cfg are in the current work directory.
#unit NPS_CFG_TYPE_XXX param0 param1 value
#---- ---------------- ------ ------ -----
0 NPS_CFG_TYPE_USE_UNIT_PORT 0 0 1
0 NPS_CFG_TYPE_LED_CFG 0 0 1
0 NPS_CFG_TYPE_CPI_PORT_MODE 129 0 0
0 NPS_CFG_TYPE_CPI_PORT_MODE 130 0 0
0 NPS_CFG_TYPE_USER_BUF_CTRL 0 0 1

View File

@ -0,0 +1,151 @@
<DeviceMiniGraph xmlns="Microsoft.Search.Autopilot.Evolution" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<CpgDec>
<IsisRouters xmlns:a="http://schemas.datacontract.org/2004/07/Microsoft.Search.Autopilot.Evolution"/>
<PeeringSessions>
<BGPSession>
<StartRouter>OCPSCH0104001MS</StartRouter>
<StartPeer>10.10.1.26</StartPeer>
<EndRouter>OCPSCH01040GGLF</EndRouter>
<EndPeer>10.10.1.25</EndPeer>
<Multihop>1</Multihop>
<HoldTime>10</HoldTime>
<KeepAliveTime>3</KeepAliveTime>
</BGPSession>
<BGPSession>
<StartRouter>OCPSCH0104002MS</StartRouter>
<StartPeer>10.10.2.26</StartPeer>
<EndRouter>OCPSCH01040GGLF</EndRouter>
<EndPeer>10.10.2.25</EndPeer>
<Multihop>1</Multihop>
<HoldTime>10</HoldTime>
<KeepAliveTime>3</KeepAliveTime>
</BGPSession>
</PeeringSessions>
<Routers xmlns:a="http://schemas.datacontract.org/2004/07/Microsoft.Search.Autopilot.Evolution">
<a:BGPRouterDeclaration>
<a:ASN>64536</a:ASN>
<a:Hostname>OCPSCH01040GGLF</a:Hostname>
<a:Peers>
<BGPPeer>
<Address>10.10.1.26</Address>
<RouteMapIn i:nil="true"/>
<RouteMapOut i:nil="true"/>
</BGPPeer>
<BGPPeer>
<Address>10.10.2.26</Address>
<RouteMapIn i:nil="true"/>
<RouteMapOut i:nil="true"/>
</BGPPeer>
</a:Peers>
<a:RouteMaps/>
</a:BGPRouterDeclaration>
<a:BGPRouterDeclaration>
<a:ASN>64542</a:ASN>
<a:Hostname>OCPSCH0104001MS</a:Hostname>
<a:RouteMaps/>
</a:BGPRouterDeclaration>
<a:BGPRouterDeclaration>
<a:ASN>64543</a:ASN>
<a:Hostname>OCPSCH0104002MS</a:Hostname>
<a:RouteMaps/>
</a:BGPRouterDeclaration>
</Routers>
</CpgDec>
<DpgDec>
<DeviceDataPlaneInfo>
<IPSecTunnels/>
<LoopbackIPInterfaces xmlns:a="http://schemas.datacontract.org/2004/07/Microsoft.Search.Autopilot.Evolution">
<a:LoopbackIPInterface>
<Name>HostIP</Name>
<AttachTo>Loopback0</AttachTo>
<a:Prefix xmlns:b="Microsoft.Search.Autopilot.NetMux">
<b:IPPrefix>100.0.0.9/32</b:IPPrefix>
</a:Prefix>
<a:PrefixStr>100.0.0.9/32</a:PrefixStr>
</a:LoopbackIPInterface>
</LoopbackIPInterfaces>
<ManagementIPInterfaces xmlns:a="http://schemas.datacontract.org/2004/07/Microsoft.Search.Autopilot.Evolution">
</ManagementIPInterfaces>
<MplsInterfaces/>
<MplsTeInterfaces/>
<RsvpInterfaces/>
<Hostname>OCPSCH01040GGLF</Hostname>
<PortChannelInterfaces/>
<VlanInterfaces/>
<IPInterfaces>
<IPInterface>
<Name i:nil="true"/>
<AttachTo>Ethernet0</AttachTo>
<Prefix>10.10.1.25/30</Prefix>
</IPInterface>
<IPInterface>
<Name i:nil="true"/>
<AttachTo>Ethernet4</AttachTo>
<Prefix>10.10.2.25/30</Prefix>
</IPInterface>
</IPInterfaces>
<DataAcls/>
<AclInterfaces/>
<DownstreamSummaries/>
<DownstreamSummarySet xmlns:a="http://schemas.datacontract.org/2004/07/Microsoft.Search.Autopilot.Evolution"/>
</DeviceDataPlaneInfo>
</DpgDec>
<PngDec>
<DeviceInterfaceLinks>
<DeviceLinkBase i:type="DeviceInterfaceLink">
<Bandwidth>40000</Bandwidth>
<ElementType>DeviceInterfaceLink</ElementType>
<EndDevice>OCPSCH0104001MS</EndDevice>
<EndPort>Ethernet24</EndPort>
<StartDevice>OCPSCH01040GGLF</StartDevice>
<StartPort>Ethernet0</StartPort>
</DeviceLinkBase>
<DeviceLinkBase i:type="DeviceInterfaceLink">
<Bandwidth>40000</Bandwidth>
<ElementType>DeviceInterfaceLink</ElementType>
<EndDevice>OCPSCH0104002MS</EndDevice>
<EndPort>Ethernet24</EndPort>
<StartDevice>OCPSCH01040GGLF</StartDevice>
<StartPort>Ethernet4</StartPort>
</DeviceLinkBase>
</DeviceInterfaceLinks>
<Devices>
<Device i:type="LeafRouter">
<Hostname>OCPSCH01040GGLF</Hostname>
<HwSku>INGRASYS-S9130-32X</HwSku>
</Device>
</Devices>
</PngDec>
<MetadataDeclaration>
<Devices xmlns:a="http://schemas.datacontract.org/2004/07/Microsoft.Search.Autopilot.Evolution">
<a:DeviceMetadata>
<a:Name>OCPSCH01040GGLF</a:Name>
<a:Properties>
<a:DeviceProperty>
<a:Name>DhcpResources</a:Name>
<a:Reference i:nil="true"/>
<a:Value></a:Value>
</a:DeviceProperty>
<a:DeviceProperty>
<a:Name>NtpResources</a:Name>
<a:Reference i:nil="true"/>
<a:Value>0.debian.pool.ntp.org;1.debian.pool.ntp.org;2.debian.pool.ntp.org;3.debian.pool.ntp.org</a:Value>
</a:DeviceProperty>
<a:DeviceProperty>
<a:Name>SyslogResources</a:Name>
<a:Reference i:nil="true"/>
<a:Value></a:Value>
</a:DeviceProperty>
<a:DeviceProperty>
<a:Name>ErspanDestinationIpv4</a:Name>
<a:Reference i:nil="true"/>
<a:Value>2.2.2.2</a:Value>
</a:DeviceProperty>
</a:Properties>
</a:DeviceMetadata>
</Devices>
<Properties xmlns:a="http://schemas.datacontract.org/2004/07/Microsoft.Search.Autopilot.Evolution"/>
</MetadataDeclaration>
<Hostname>OCPSCH01040GGLF</Hostname>
<HwSku>INGRASYS-S9130-32X</HwSku>
</DeviceMiniGraph>

View File

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

View File

@ -0,0 +1,187 @@
# sfputil.py
#
# Platform-specific SFP transceiver interface for SONiC
#
try:
import time
from sonic_sfp.sfputilbase import SfpUtilBase
except ImportError as e:
raise ImportError("%s - required module not found" % str(e))
class SfpUtil(SfpUtilBase):
"""Platform-specific SfpUtil class"""
PORT_START = 0
PORT_END = 31
PORTS_IN_BLOCK = 32
EEPROM_OFFSET = 21
ABS_GPIO_BASE_0_15 = 240
ABS_GPIO_BASE_16_31 = 224
LP_MODE_GPIO_BASE_0_15 = 176
LP_MODE_GPIO_BASE_16_31 = 160
RST_GPIO_BASE_0_15 = 144
RST_GPIO_BASE_16_31 = 128
GPIO_VAL_PATH = "/sys/class/gpio/gpio{0}/value"
_port_to_eeprom_mapping = {}
@property
def port_start(self):
return self.PORT_START
@property
def port_end(self):
return self.PORT_END
@property
def qsfp_ports(self):
return range(0, self.PORTS_IN_BLOCK + 1)
@property
def port_to_eeprom_mapping(self):
return self._port_to_eeprom_mapping
def __init__(self):
# Override port_to_eeprom_mapping for class initialization
eeprom_path = '/sys/class/i2c-adapter/i2c-{0}/{0}-0050/eeprom'
for x in range(self.port_start, self.port_end + 1):
port_eeprom_path = eeprom_path.format(x + self.EEPROM_OFFSET)
self.port_to_eeprom_mapping[x] = port_eeprom_path
SfpUtilBase.__init__(self)
def get_presence(self, port_num):
# Check for invalid port_num
if port_num < self.port_start or port_num > self.port_end:
return False
# open corrsponding gpio file
try:
if port_num <= 15:
gpio_base = self.ABS_GPIO_BASE_0_15
else :
gpio_base = self.ABS_GPIO_BASE_16_31
gpio_index = gpio_base + (port_num % 16)
gpio_file_path = self.GPIO_VAL_PATH.format(gpio_index)
gpio_file = open(gpio_file_path)
except IOError as e:
print "Error: unable to open file: %s" % str(e)
return False
# content is a string containing the gpio value
gpio_val = int(gpio_file.readline().rstrip())
gpio_file.close()
# the gpio pin is ACTIVE_LOW but reversed
if gpio_val == 0:
return False
return True
def get_low_power_mode(self, port_num):
# Check for invalid port_num
if port_num < self.port_start or port_num > self.port_end:
return False
# open corrsponding gpio file
try:
if port_num <= 15:
gpio_base = self.LP_MODE_GPIO_BASE_0_15
else :
gpio_base = self.LP_MODE_GPIO_BASE_16_31
gpio_index = gpio_base + (port_num % 16)
gpio_file_path = self.GPIO_VAL_PATH.format(gpio_index)
gpio_file = open(gpio_file_path)
except IOError as e:
print "Error: unable to open file: %s" % str(e)
return False
# content is a string containing the gpio value
gpio_val = int(gpio_file.readline().rstrip())
gpio_file.close()
if gpio_val == 0:
return False
return True
def set_low_power_mode(self, port_num, lpmode):
# Check for invalid port_num
if port_num < self.port_start or port_num > self.port_end:
return False
# open corrsponding gpio file
try:
if port_num <= 15:
gpio_base = self.LP_MODE_GPIO_BASE_0_15
else :
gpio_base = self.LP_MODE_GPIO_BASE_16_31
gpio_index = gpio_base + (port_num % 16)
gpio_file_path = self.GPIO_VAL_PATH.format(gpio_index)
gpio_file = open(gpio_file_path, "r+")
except IOError as e:
print "Error: unable to open file: %s" % str(e)
return False
# the gpio pin is ACTIVE_HIGH
if lpmode is True:
gpio_val = "1"
else:
gpio_val = "0"
# write value to gpio
gpio_file.seek(0)
gpio_file.write(gpio_val)
gpio_file.close()
return True
def reset(self, port_num):
# Check for invalid port_num
if port_num < self.port_start or port_num > self.port_end:
return False
# open corrsponding gpio file
try:
if port_num <= 15:
gpio_base = self.RST_GPIO_BASE_0_15
else :
gpio_base = self.RST_GPIO_BASE_16_31
gpio_index = gpio_base + (port_num % 16)
gpio_file_path = self.GPIO_VAL_PATH.format(gpio_index)
gpio_file = open(gpio_file_path, "w")
except IOError as e:
print "Error: unable to open file: %s" % str(e)
return False
# set the gpio to take port into reset
# the gpio pin is ACTIVE_LOW but reversed
gpio_val = "1"
# write value to gpio
gpio_file.seek(0)
gpio_file.write(gpio_val)
gpio_file.close()
# Sleep 1 second to let it settle
time.sleep(1)
# open corrsponding gpio file
try:
gpio_file = open(gpio_file_path, "w")
except IOError as e:
print "Error: unable to open file: %s" % str(e)
return False
# set gpio back low to take port out of reset
# the gpio pin is ACTIVE_LOW but reversed
gpio_val = "0"
# write value to gpio
gpio_file.seek(0)
gpio_file.write(gpio_val)
gpio_file.close()
return True

View File

@ -0,0 +1,69 @@
# libsensors configuration file
chip "i350bb-*"
ignore loc1
chip "jc42-*"
bus "i2c-8" "i2c-mux-0 (chan_id 7)"
chip "w83795adg-*"
label in0 "0.9V"
set in0_max 0.945
set in0_min 0.855
label in1 "VDD_CORE"
set in1_max 0.945
set in1_min 0.855
label in2 "1.2V"
set in2_max 1.26
set in2_min 1.14
label in3 "1.8V"
set in3_max 1.89
set in3_min 1.71
label in4 "1.01V"
set in4_max 1.0605
set in4_min 0.9595
ignore in5
ignore in6
ignore in7
ignore in11
label in12 "3.3VDD"
set in12_max 3.465
set in12_min 3.135
# in12 and in13 are the same source
ignore in13
label fan1 "FANTRAY 1-A"
label fan2 "FANTRAY 1-B"
label fan3 "FANTRAY 2-A"
label fan4 "FANTRAY 2-B"
label fan5 "FANTRAY 3-A"
label fan6 "FANTRAY 3-B"
label fan7 "FANTRAY 4-A"
label fan8 "FANTRAY 4-B"
ignore temp1
ignore temp2
ignore temp3
ignore temp4
ignore temp5
ignore temp6
ignore intrusion0
chip "tmp75-i2c-*-4A"
label temp1 "BMC board Temp"
set temp1_max 50
set temp1_max_hyst 45
bus "i2c-0" "i2c-main"
chip "tmp75-i2c-*-4F"
label temp1 "x86 CPU board Temp"
set temp1_max 50
set temp1_max_hyst 45
bus "i2c-12" "i2c-mux-1 (chan_id 3)"
chip "tmp75-i2c-*-4C"
label temp1 "rear MAC Temp"
set temp1_max 50
set temp1_max_hyst 45
chip "tmp75-i2c-*-49"
label temp1 "front MAC Temp"
set temp1_max 50
set temp1_max_hyst 45

View File

@ -0,0 +1,65 @@
# name lanes alias index
Ethernet0 7,6,5,4 Ethernet1/1 0
Ethernet4 3,2,1,0 Ethernet2/1 1
Ethernet8 15,14,13,12 Ethernet3/1 2
Ethernet12 11,10,9,8 Ethernet4/1 3
Ethernet16 23,22,21,20 Ethernet5/1 4
Ethernet20 19,18,17,16 Ethernet6/1 5
Ethernet24 31,30,29,28 Ethernet7/1 6
Ethernet28 27,26,25,24 Ethernet8/1 7
Ethernet32 39,38,37,36 Ethernet9/1 8
Ethernet36 35,34,33,32 Ethernet10/1 9
Ethernet40 47,46,45,44 Ethernet11/1 10
Ethernet44 43,42,41,40 Ethernet12/1 11
Ethernet48 55,54,53,52 Ethernet13/1 12
Ethernet52 51,50,49,48 Ethernet14/1 13
Ethernet56 63,62,61,60 Ethernet15/1 14
Ethernet60 59,58,57,56 Ethernet16/1 15
Ethernet64 71,70,69,68 Ethernet17/1 16
Ethernet68 67,66,65,64 Ethernet18/1 17
Ethernet72 79,78,77,76 Ethernet19/1 18
Ethernet76 75,74,73,72 Ethernet20/1 19
Ethernet80 87,86,85,84 Ethernet21/1 20
Ethernet84 83,82,81,80 Ethernet22/1 21
Ethernet88 95,94,93,92 Ethernet23/1 22
Ethernet92 91,90,89,88 Ethernet24/1 23
Ethernet96 97,98,99,100 Ethernet25/1 24
Ethernet100 101,102,103,104 Ethernet26/1 25
Ethernet104 105,106,107,108 Ethernet27/1 26
Ethernet108 109,110,111,112 Ethernet28/1 27
Ethernet112 119,118,117,116 Ethernet29/1 28
Ethernet116 115,114,113,112 Ethernet30/1 29
Ethernet120 127,126,125,124 Ethernet31/1 30
Ethernet124 123,122,121,120 Ethernet32/1 31
Ethernet128 135,134,133,132 Ethernet33/1 32
Ethernet132 131,130,129,128 Ethernet34/1 33
Ethernet136 143,142,141,140 Ethernet35/1 34
Ethernet140 139,138,137,136 Ethernet36/1 35
Ethernet144 151,150,149,148 Ethernet37/1 36
Ethernet148 147,146,145,144 Ethernet38/1 37
Ethernet152 159,158,157,156 Ethernet39/1 38
Ethernet156 155,154,153,152 Ethernet40/1 39
Ethernet160 167,166,165,164 Ethernet41/1 40
Ethernet164 163,162,161,160 Ethernet42/1 41
Ethernet168 175,174,173,172 Ethernet43/1 42
Ethernet172 171,170,169,168 Ethernet44/1 43
Ethernet176 183,182,181,180 Ethernet45/1 44
Ethernet180 179,178,177,176 Ethernet46/1 45
Ethernet184 191,190,189,188 Ethernet47/1 46
Ethernet188 187,186,185,184 Ethernet48/1 47
Ethernet192 199,198,197,196 Ethernet49/1 48
Ethernet196 195,194,193,192 Ethernet50/1 49
Ethernet200 207,206,205,204 Ethernet51/1 50
Ethernet204 203,202,201,200 Ethernet52/1 51
Ethernet208 215,214,213,212 Ethernet53/1 52
Ethernet212 211,210,209,208 Ethernet54/1 53
Ethernet216 223,222,221,220 Ethernet55/1 54
Ethernet220 219,218,217,216 Ethernet56/1 55
Ethernet224 231,230,229,228 Ethernet57/1 56
Ethernet228 227,226,225,224 Ethernet58/1 57
Ethernet232 239,238,237,236 Ethernet59/1 58
Ethernet236 235,234,233,232 Ethernet60/1 59
Ethernet240 247,246,245,244 Ethernet61/1 60
Ethernet244 243,242,241,240 Ethernet62/1 61
Ethernet248 255,254,253,252 Ethernet63/1 62
Ethernet252 251,250,249,248 Ethernet64/1 63

View File

@ -0,0 +1,2 @@
SAI_INIT_CONFIG_FILE=/usr/share/sonic/platform/led_proc_init.nps
SAI_DSH_CONFIG_FILE=/usr/share/sonic/hwsku/port_config.nps

View File

@ -0,0 +1,9 @@
INTERVAL=10
DEVPATH=hwmon7=devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-002f hwmon4=devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-7/7-004e
DEVNAME=hwmon7=w83795adg
FCTEMPS=hwmon7/device/pwm2=hwmon4/temp1_input
FCFANS=hwmon7/device/pwm2=hwmon7/device/fan7_input hwmon7/device/pwm2=hwmon7/device/fan5_input hwmon7/device/pwm2=hwmon7/device/fan3_input hwmon7/device/pwm2=hwmon7/device/fan1_input
MINTEMP=hwmon7/device/pwm2=20
MAXTEMP=hwmon7/device/pwm2=60
MINSTART=hwmon7/device/pwm2=75
MINSTOP=hwmon7/device/pwm2=22

View File

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

View File

@ -0,0 +1,20 @@
#This configuration file is for customer init value feature. Please refer to nps_cfg.h/nps_cfg.c for detail.
#1. The lines beginning with # are comment lines. The lines beginning with number are the setting lines.
#2. There are five parameters which can be set.
# 1) the first is unit.
# 2) the second is NPS_CFG_TYPE_XXX. Refer to NPS_CFG_TYPE_T.
# 3) the 3-5 are {param0, param1, value} pairs. Refer to NPS_CFG_VALUE_T. Support HEX format.
# 4) the (unit, NPS_CFG_TYPE_XXX, param0, param1) group is the key to get the correspingding value.
# There should be no same (unit, NPS_CFG_TYPE_XXX, param0, param1) group.
#3. User must follow correct format to apply the setting. Please refer to below commentted example(#0 NPS_CFG_TYPE_L2_ADDR_MODE 0 0 1);
#4. Usage under the linux shell:
# 1) ./image-path/image-name -c cfg-path/NPS_TAU_EVB_6T4_64.cfg : mamually specify directory path if they are not in current work dirctory.
# 2) ./image-name -c NPS_TAU_EVB_6T4_64.cfg : the image and the NPS_TAU_EVB_3T2_32.cfg are in the current work directory.
#unit NPS_CFG_TYPE_XXX param0 param1 value
#---- ---------------- ------ ------ -----
0 NPS_CFG_TYPE_USE_UNIT_PORT 0 0 1
0 NPS_CFG_TYPE_LED_CFG 0 0 2
0 NPS_CFG_TYPE_CPI_PORT_MODE 129 0 0
0 NPS_CFG_TYPE_CPI_PORT_MODE 130 0 0
0 NPS_CFG_TYPE_USER_BUF_CTRL 0 0 1

View File

@ -0,0 +1,151 @@
<DeviceMiniGraph xmlns="Microsoft.Search.Autopilot.Evolution" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<CpgDec>
<IsisRouters xmlns:a="http://schemas.datacontract.org/2004/07/Microsoft.Search.Autopilot.Evolution"/>
<PeeringSessions>
<BGPSession>
<StartRouter>OCPSCH0104001MS</StartRouter>
<StartPeer>10.10.1.26</StartPeer>
<EndRouter>OCPSCH01040GGLF</EndRouter>
<EndPeer>10.10.1.25</EndPeer>
<Multihop>1</Multihop>
<HoldTime>10</HoldTime>
<KeepAliveTime>3</KeepAliveTime>
</BGPSession>
<BGPSession>
<StartRouter>OCPSCH0104002MS</StartRouter>
<StartPeer>10.10.2.26</StartPeer>
<EndRouter>OCPSCH01040GGLF</EndRouter>
<EndPeer>10.10.2.25</EndPeer>
<Multihop>1</Multihop>
<HoldTime>10</HoldTime>
<KeepAliveTime>3</KeepAliveTime>
</BGPSession>
</PeeringSessions>
<Routers xmlns:a="http://schemas.datacontract.org/2004/07/Microsoft.Search.Autopilot.Evolution">
<a:BGPRouterDeclaration>
<a:ASN>64536</a:ASN>
<a:Hostname>OCPSCH01040GGLF</a:Hostname>
<a:Peers>
<BGPPeer>
<Address>10.10.1.26</Address>
<RouteMapIn i:nil="true"/>
<RouteMapOut i:nil="true"/>
</BGPPeer>
<BGPPeer>
<Address>10.10.2.26</Address>
<RouteMapIn i:nil="true"/>
<RouteMapOut i:nil="true"/>
</BGPPeer>
</a:Peers>
<a:RouteMaps/>
</a:BGPRouterDeclaration>
<a:BGPRouterDeclaration>
<a:ASN>64542</a:ASN>
<a:Hostname>OCPSCH0104001MS</a:Hostname>
<a:RouteMaps/>
</a:BGPRouterDeclaration>
<a:BGPRouterDeclaration>
<a:ASN>64543</a:ASN>
<a:Hostname>OCPSCH0104002MS</a:Hostname>
<a:RouteMaps/>
</a:BGPRouterDeclaration>
</Routers>
</CpgDec>
<DpgDec>
<DeviceDataPlaneInfo>
<IPSecTunnels/>
<LoopbackIPInterfaces xmlns:a="http://schemas.datacontract.org/2004/07/Microsoft.Search.Autopilot.Evolution">
<a:LoopbackIPInterface>
<Name>HostIP</Name>
<AttachTo>Loopback0</AttachTo>
<a:Prefix xmlns:b="Microsoft.Search.Autopilot.NetMux">
<b:IPPrefix>100.0.0.9/32</b:IPPrefix>
</a:Prefix>
<a:PrefixStr>100.0.0.9/32</a:PrefixStr>
</a:LoopbackIPInterface>
</LoopbackIPInterfaces>
<ManagementIPInterfaces xmlns:a="http://schemas.datacontract.org/2004/07/Microsoft.Search.Autopilot.Evolution">
</ManagementIPInterfaces>
<MplsInterfaces/>
<MplsTeInterfaces/>
<RsvpInterfaces/>
<Hostname>OCPSCH01040GGLF</Hostname>
<PortChannelInterfaces/>
<VlanInterfaces/>
<IPInterfaces>
<IPInterface>
<Name i:nil="true"/>
<AttachTo>Ethernet0</AttachTo>
<Prefix>10.10.1.25/30</Prefix>
</IPInterface>
<IPInterface>
<Name i:nil="true"/>
<AttachTo>Ethernet4</AttachTo>
<Prefix>10.10.2.25/30</Prefix>
</IPInterface>
</IPInterfaces>
<DataAcls/>
<AclInterfaces/>
<DownstreamSummaries/>
<DownstreamSummarySet xmlns:a="http://schemas.datacontract.org/2004/07/Microsoft.Search.Autopilot.Evolution"/>
</DeviceDataPlaneInfo>
</DpgDec>
<PngDec>
<DeviceInterfaceLinks>
<DeviceLinkBase i:type="DeviceInterfaceLink">
<Bandwidth>40000</Bandwidth>
<ElementType>DeviceInterfaceLink</ElementType>
<EndDevice>OCPSCH0104001MS</EndDevice>
<EndPort>Ethernet24</EndPort>
<StartDevice>OCPSCH01040GGLF</StartDevice>
<StartPort>Ethernet0</StartPort>
</DeviceLinkBase>
<DeviceLinkBase i:type="DeviceInterfaceLink">
<Bandwidth>40000</Bandwidth>
<ElementType>DeviceInterfaceLink</ElementType>
<EndDevice>OCPSCH0104002MS</EndDevice>
<EndPort>Ethernet24</EndPort>
<StartDevice>OCPSCH01040GGLF</StartDevice>
<StartPort>Ethernet4</StartPort>
</DeviceLinkBase>
</DeviceInterfaceLinks>
<Devices>
<Device i:type="LeafRouter">
<Hostname>OCPSCH01040GGLF</Hostname>
<HwSku>INGRASYS-S9230-64X</HwSku>
</Device>
</Devices>
</PngDec>
<MetadataDeclaration>
<Devices xmlns:a="http://schemas.datacontract.org/2004/07/Microsoft.Search.Autopilot.Evolution">
<a:DeviceMetadata>
<a:Name>OCPSCH01040GGLF</a:Name>
<a:Properties>
<a:DeviceProperty>
<a:Name>DhcpResources</a:Name>
<a:Reference i:nil="true"/>
<a:Value></a:Value>
</a:DeviceProperty>
<a:DeviceProperty>
<a:Name>NtpResources</a:Name>
<a:Reference i:nil="true"/>
<a:Value>0.debian.pool.ntp.org;1.debian.pool.ntp.org;2.debian.pool.ntp.org;3.debian.pool.ntp.org</a:Value>
</a:DeviceProperty>
<a:DeviceProperty>
<a:Name>SyslogResources</a:Name>
<a:Reference i:nil="true"/>
<a:Value></a:Value>
</a:DeviceProperty>
<a:DeviceProperty>
<a:Name>ErspanDestinationIpv4</a:Name>
<a:Reference i:nil="true"/>
<a:Value>2.2.2.2</a:Value>
</a:DeviceProperty>
</a:Properties>
</a:DeviceMetadata>
</Devices>
<Properties xmlns:a="http://schemas.datacontract.org/2004/07/Microsoft.Search.Autopilot.Evolution"/>
</MetadataDeclaration>
<Hostname>OCPSCH01040GGLF</Hostname>
<HwSku>INGRASYS-S9230-64X</HwSku>
</DeviceMiniGraph>

View File

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

View File

@ -0,0 +1,92 @@
#
# psuutil.py
# Platform-specific PSU status interface for SONiC
#
import os.path
try:
from sonic_psu.psu_base import PsuBase
except ImportError as e:
raise ImportError(str(e) + "- required module not found")
class PsuUtil(PsuBase):
"""Platform-specific PSUutil class"""
SYSFS_PSU_DIR = ["/sys/bus/i2c/devices/i2c-17/17-0050",
"/sys/bus/i2c/devices/i2c-18/18-0050"]
def __init__(self):
PsuBase.__init__(self)
# Get sysfs attribute
def get_attr_value(self, attr_path):
retval = 'ERR'
if (not os.path.isfile(attr_path)):
return retval
try:
with open(attr_path, 'r') as fd:
retval = fd.read()
except Exception as error:
logging.error("Unable to open ", attr_path, " file !")
retval = retval.rstrip('\r\n')
return retval
def get_num_psus(self):
"""
Retrieves the number of PSUs available on the device
:return: An integer, the number of PSUs available on the device
"""
MAX_PSUS = 2
return MAX_PSUS
def get_psu_status(self, index):
"""
Retrieves the oprational status of power supply unit (PSU) defined
by index <index>
:param index: An integer, index of the PSU of which to query status
:return: Boolean, True if PSU is operating properly, False if PSU is\
faulty
"""
status = 0
attr_file = 'psu_pg'
attr_path = self.SYSFS_PSU_DIR[index-1] +'/' + attr_file
attr_value = self.get_attr_value(attr_path)
if (attr_value != 'ERR'):
attr_value = int(attr_value, 16)
# Check for PSU status
if (attr_value == 1):
status = 1
return status
def get_psu_presence(self, index):
"""
Retrieves the presence status of power supply unit (PSU) defined
by index <index>
:param index: An integer, index of the PSU of which to query status
:return: Boolean, True if PSU is plugged, False if not
"""
status = 0
psu_absent = 0
attr_file ='psu_abs'
attr_path = self.SYSFS_PSU_DIR[index-1] +'/' + attr_file
attr_value = self.get_attr_value(attr_path)
if (attr_value != 'ERR'):
attr_value = int(attr_value, 16)
# Check for PSU presence
if (attr_value == 0):
status = 1
return status

View File

@ -0,0 +1,293 @@
# sfputil.py
#
# Platform-specific SFP transceiver interface for SONiC
#
try:
import time
from sonic_sfp.sfputilbase import SfpUtilBase
except ImportError as e:
raise ImportError("%s - required module not found" % str(e))
class SfpUtil(SfpUtilBase):
"""Platform-specific SfpUtil class"""
PORT_START = 0
PORT_END = 63
PORTS_IN_BLOCK = 64
#TODO: modify according to port map
EEPROM_OFFSET = 33
CPLD1_PORTS = 12
CPLDx_PORTS = 13
CPLD_OFFSET = 1
CPLD_PRES_BIT = 1
CPLD_RESET_BIT = 0
CPLD_LPMOD_BIT = 2
CPLDx_I2C_ADDR = "33"
CPLD_PORT_STATUS_KEY = "cpld_qsfp_port_status"
CPLD_PORT_CONFIG_KEY = "cpld_qsfp_port_config"
CPLD_REG_PATH = "/sys/bus/i2c/devices/{0}-00{1}/{2}_{3}"
_port_to_eeprom_mapping = {}
_logic_to_phy_port_mapping = {
0: 0,
1: 1,
2: 4,
3: 5,
4: 8,
5: 9,
6: 12,
7: 13,
8: 16,
9: 17,
10: 20,
11: 21,
12: 24,
13: 25,
14: 28,
15: 29,
16: 32,
17: 33,
18: 36,
19: 37,
20: 40,
21: 41,
22: 44,
23: 45,
24: 48,
25: 49,
26: 52,
27: 53,
28: 56,
29: 57,
30: 60,
31: 61,
32: 2,
33: 3,
34: 6,
35: 7,
36: 10,
37: 11,
38: 14,
39: 15,
40: 18,
41: 19,
42: 22,
43: 23,
44: 26,
45: 27,
46: 30,
47: 31,
48: 34,
49: 35,
50: 38,
51: 39,
52: 42,
53: 43,
54: 46,
55: 47,
56: 50,
57: 51,
58: 54,
59: 55,
60: 58,
61: 59,
62: 62,
63: 63
}
@property
def port_start(self):
return self.PORT_START
@property
def port_end(self):
return self.PORT_END
@property
def qsfp_ports(self):
return range(0, self.PORTS_IN_BLOCK + 1)
@property
def port_to_eeprom_mapping(self):
return self._port_to_eeprom_mapping
def __init__(self):
# Override port_to_eeprom_mapping for class initialization
eeprom_path = "/sys/class/i2c-adapter/i2c-{0}/{0}-0050/eeprom"
for x in range(self.port_start, self.port_end + 1):
phy_port = self._logic_to_phy_port_mapping[x]
port_eeprom_path = eeprom_path.format(phy_port + self.EEPROM_OFFSET)
self.port_to_eeprom_mapping[x] = port_eeprom_path
SfpUtilBase.__init__(self)
def qsfp_to_cpld_index(self, port_num):
if port_num < self.CPLD1_PORTS:
cpld_id = 0
cpld_port_index = port_num + 1
else:
cpld_id = 1 + (port_num - self.CPLD1_PORTS) / self.CPLDx_PORTS
cpld_port_index = ((port_num - self.CPLD1_PORTS) % self.CPLDx_PORTS) + 1
return cpld_id, cpld_port_index
def get_presence(self, port_num):
# Check for invalid port_num
if port_num < self.port_start or port_num > self.port_end:
return False
# logic port to physical port mapping
port_num = self._logic_to_phy_port_mapping[port_num]
cpld_id, cpld_port_index = self.qsfp_to_cpld_index(port_num)
i2c_id = self.CPLD_OFFSET + cpld_id
reg_path = self.CPLD_REG_PATH.format(i2c_id, self.CPLDx_I2C_ADDR, \
self.CPLD_PORT_STATUS_KEY, cpld_port_index)
try:
reg_file = open(reg_path)
except IOError as e:
print "Error: unable to open file: %s" % str(e)
return False
# content is a string containing the status register value
content = reg_file.readline().rstrip()
reg_file.close()
reg_value = int(content, 16)
# mask for presence bit (bit 1)
mask = (1 << self.CPLD_PRES_BIT)
# 0 - presence, 1 - absence
if reg_value & mask == 0:
return True
return False
def get_low_power_mode(self, port_num):
# Check for invalid port_num
if port_num < self.port_start or port_num > self.port_end:
return False
# logic port to physical port mapping
port_num = self._logic_to_phy_port_mapping[port_num]
cpld_id, cpld_port_index = self.qsfp_to_cpld_index(port_num)
i2c_id = self.CPLD_OFFSET + cpld_id
reg_path = self.CPLD_REG_PATH.format(i2c_id, self.CPLDx_I2C_ADDR, \
self.CPLD_PORT_CONFIG_KEY, cpld_port_index)
try:
reg_file = open(reg_path)
except IOError as e:
print "Error: unable to open file: %s" % str(e)
return False
# content is a string containing the status register value
content = reg_file.readline().rstrip()
reg_file.close()
reg_value = int(content, 16)
# mask for lp_mod bit (bit 2)
mask = (1 << self.CPLD_LPMOD_BIT)
# 0 - disable, 1 - low power mode
if reg_value & mask == 0:
return False
return True
def set_low_power_mode(self, port_num, lpmode):
# Check for invalid port_num
if port_num < self.port_start or port_num > self.port_end:
return False
# logic port to physical port mapping
port_num = self._logic_to_phy_port_mapping[port_num]
cpld_id, cpld_port_index = self.qsfp_to_cpld_index(port_num)
i2c_id = self.CPLD_OFFSET + cpld_id
reg_path = self.CPLD_REG_PATH.format(i2c_id, self.CPLDx_I2C_ADDR, \
self.CPLD_PORT_CONFIG_KEY, cpld_port_index)
try:
reg_file = open(reg_path, "r+")
except IOError as e:
print "Error: unable to open file: %s" % str(e)
return False
# content is a string containing the status register value
content = reg_file.readline().rstrip()
reg_value = int(content, 16)
# mask for lp_mod bit (bit 2)
mask = (1 << self.CPLD_LPMOD_BIT)
# 1 - low power mode, 0 - high power mode
if lpmode is True:
reg_value = reg_value | mask
else:
reg_value = reg_value & ~mask
# convert value to hex string
content = hex(reg_value)
reg_file.seek(0)
reg_file.write(content)
reg_file.close()
return True
def reset(self, port_num):
# Check for invalid port_num
if port_num < self.port_start or port_num > self.port_end:
return False
# logic port to physical port mapping
port_num = self._logic_to_phy_port_mapping[port_num]
cpld_id, cpld_port_index = self.qsfp_to_cpld_index(port_num)
i2c_id = self.CPLD_OFFSET + cpld_id
reg_path = self.CPLD_REG_PATH.format(i2c_id, self.CPLDx_I2C_ADDR, \
self.CPLD_PORT_CONFIG_KEY, cpld_port_index)
# reset the port
try:
reg_file = open(reg_path, "r+")
except IOError as e:
print "Error: unable to open file: %s" % str(e)
return False
# content is a string containing the status register value
content = reg_file.readline().rstrip()
reg_value = int(content, 16)
# mask for reset bit (bit 0)
mask = (1 << self.CPLD_RESET_BIT)
# 1 - out of reset, 0 - reset
reg_value = reg_value & ~mask
reg_file.seek(0)
reg_file.write(hex(reg_value))
reg_file.close()
# Sleep 1 second to reset done
time.sleep(1)
# take the port out of reset
try:
reg_file = open(reg_path, "w")
except IOError as e:
print "Error: unable to open file: %s" % str(e)
return False
reg_value = reg_value | mask
reg_file.seek(0)
reg_file.write(hex(reg_value))
reg_file.close()
return True

View File

@ -0,0 +1,90 @@
# libsensors configuration file
chip "i350bb-*"
ignore loc1
chip "jc42-*"
bus "i2c-16" "i2c-mux-1 (chan_id 7)"
chip "w83795adg-*"
ignore in0
label in1 "VDD_CORE"
set in1_min 0.90 * 0.98
set in1_max 0.90 * 1.02
ignore in2
label in3 "1.8V"
set in3_min 1.8 * 0.97
set in3_max 1.8 * 1.03
label in4 "3.3V"
compute in4 @/(0.3052), (0.3052)*@
set in4_min 3.3 * 0.95
set in4_max 3.3 * 1.05
label in5 "0.9V"
set in5_min 0.90 * 0.98
set in5_max 0.90 * 1.02
ignore in6
ignore in7
ignore in8
ignore in9
ignore in10
ignore in11
ignore in12
ignore in13
ignore in14
ignore in15
ignore in16
ignore in17
ignore in18
ignore in19
label fan1 "FANTRAY 1"
#label fan2 "FANTRAY 1-B"
ignore fan2
label fan3 "FANTRAY 2"
#label fan4 "FANTRAY 2-B"
ignore fan4
label fan5 "FANTRAY 3"
#label fan6 "FANTRAY 3-B"
ignore fan6
label fan7 "FANTRAY 4"
#label fan8 "FANTRAY 4-B"
ignore fan8
ignore temp1
ignore temp2
ignore temp3
ignore temp4
ignore temp5
ignore temp6
ignore intrusion0
# TODO: need to confirm the critial temp value with HW after board ready
chip "tmp75-i2c-*-4A"
label temp1 "BMC board Temp"
set temp1_max 50
set temp1_max_hyst 45
bus "i2c-0" "SMBus I801 adapter at f000"
chip "tmp75-i2c-*-4F"
label temp1 "x86 CPU board Temp"
set temp1_max 50
set temp1_max_hyst 45
bus "i2c-6" "i2c-0-mux (chan_id 5)"
chip "lm75-i2c-6-4D"
label temp1 "Rear Panel Temp"
set temp1_max 50
set temp1_max_hyst 45
chip "lm75-i2c-6-4E"
label temp1 "Rear MAC Temp"
set temp1_max 50
set temp1_max_hyst 45
bus "i2c-7" "i2c-0-mux (chan_id 6)"
chip "lm75-i2c-7-4D"
label temp1 "Front Panel Temp"
set temp1_max 50
set temp1_max_hyst 45
chip "lm75-i2c-7-4E"
label temp1 "Front MAC Temp"
set temp1_max 50
set temp1_max_hyst 45

View File

@ -0,0 +1 @@
docker-orchagent

View File

@ -18,6 +18,8 @@ if [ "$platform" == "broadcom" ]; then
ORCHAGENT_ARGS+="-m $MAC_ADDRESS"
elif [ "$platform" == "cavium" ]; then
ORCHAGENT_ARGS+="-m $MAC_ADDRESS"
elif [ "$platform" == "nephos" ]; then
ORCHAGENT_ARGS+="-m $MAC_ADDRESS"
fi
exec /usr/bin/orchagent ${ORCHAGENT_ARGS}

View File

@ -3,11 +3,15 @@ Description=switch state service
Requires=database.service
{% if sonic_asic_platform == 'broadcom' %}
Requires=opennsl-modules-3.16.0-4-amd64.service
{% elif sonic_asic_platform == 'nephos' %}
Requires=nps-modules-3.16.0-4-amd64.service
{% endif %}
After=database.service
After=interfaces-config.service
{% if sonic_asic_platform == 'broadcom' %}
After=opennsl-modules-3.16.0-4-amd64.service
{% elif sonic_asic_platform == 'nephos' %}
After=nps-modules-3.16.0-4-amd64.service
{% endif %}
[Service]

View File

@ -0,0 +1,19 @@
# docker image for orchagent
DOCKER_ORCHAGENT_NEPHOS = docker-orchagent-nephos.gz
$(DOCKER_ORCHAGENT_NEPHOS)_PATH = $(DOCKERS_PATH)/docker-orchagent
$(DOCKER_ORCHAGENT_NEPHOS)_DEPENDS += $(SWSS) $(REDIS_TOOLS)
$(DOCKER_ORCHAGENT_NEPHOS)_LOAD_DOCKERS += $(DOCKER_CONFIG_ENGINE)
SONIC_DOCKER_IMAGES += $(DOCKER_ORCHAGENT_NEPHOS)
SONIC_INSTALL_DOCKER_IMAGES += $(DOCKER_ORCHAGENT_NEPHOS)
$(DOCKER_ORCHAGENT_NEPHOS)_CONTAINER_NAME = swss
$(DOCKER_ORCHAGENT_NEPHOS)_RUN_OPT += --net=host --privileged -t
$(DOCKER_ORCHAGENT_NEPHOS)_RUN_OPT += -v /etc/network/interfaces:/etc/network/interfaces:ro
$(DOCKER_ORCHAGENT_NEPHOS)_RUN_OPT += -v /etc/network/interfaces.d/:/etc/network/interfaces.d/:ro
$(DOCKER_ORCHAGENT_NEPHOS)_RUN_OPT += -v /host/machine.conf:/host/machine.conf:ro
$(DOCKER_ORCHAGENT_NEPHOS)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro
$(DOCKER_ORCHAGENT_NEPHOS)_RUN_OPT += -v /var/log/swss:/var/log/swss:rw
$(DOCKER_ORCHAGENT_NEPHOS)_BASE_IMAGE_FILES += swssloglevel:/usr/bin/swssloglevel
$(DOCKER_ORCHAGENT_NEPHOS)_FILES += $(ARP_UPDATE_SCRIPT)

View File

@ -0,0 +1,7 @@
# docker image for docker-ptf-nephos
DOCKER_PTF_NEPHOS = docker-ptf-nephos.gz
$(DOCKER_PTF_NEPHOS)_PATH = $(DOCKERS_PATH)/docker-ptf-saithrift
$(DOCKER_PTF_NEPHOS)_DEPENDS += $(PYTHON_SAITHRIFT_NEPHOS)
$(DOCKER_PTF_NEPHOS)_LOAD_DOCKERS += $(DOCKER_PTF)
#SONIC_DOCKER_IMAGES += $(DOCKER_PTF_NEPHOS)

View File

@ -0,0 +1,17 @@
# docker image for nephos syncd with rpc
DOCKER_SYNCD_NEPHOS_RPC = docker-syncd-nephos-rpc.gz
$(DOCKER_SYNCD_NEPHOS_RPC)_PATH = $(PLATFORM_PATH)/docker-syncd-nephos-rpc
$(DOCKER_SYNCD_NEPHOS_RPC)_DEPENDS += $(SYNCD_RPC) $(LIBTHRIFT)
$(DOCKER_SYNCD_NEPHOS_RPC)_FILES += $(DSSERVE) $(NPX_DIAG)
$(DOCKER_SYNCD_NEPHOS_RPC)_LOAD_DOCKERS += $(DOCKER_SYNCD_NEPHOS)
SONIC_DOCKER_IMAGES += $(DOCKER_SYNCD_NEPHOS_RPC)
ifeq ($(ENABLE_SYNCD_RPC),y)
SONIC_INSTALL_DOCKER_IMAGES += $(DOCKER_SYNCD_NEPHOS_RPC)
endif
$(DOCKER_SYNCD_NEPHOS_RPC)_CONTAINER_NAME = syncd
$(DOCKER_SYNCD_NEPHOS_RPC)_RUN_OPT += --net=host --privileged -t
$(DOCKER_SYNCD_NEPHOS_RPC)_RUN_OPT += -v /host/machine.conf:/etc/machine.conf
$(DOCKER_SYNCD_NEPHOS_RPC)_RUN_OPT += -v /var/run/docker-syncd:/var/run/sswsyncd
$(DOCKER_SYNCD_NEPHOS_RPC)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro

View File

@ -0,0 +1,51 @@
FROM docker-syncd-nephos
## Make apt-get non-interactive
ENV DEBIAN_FRONTEND=noninteractive
COPY \
{% for deb in docker_syncd_nephos_rpc_debs.split(' ') -%}
debs/{{ deb }}{{' '}}
{%- endfor -%}
debs/
RUN dpkg -P syncd
RUN dpkg_apt() { [ -f $1 ] && { dpkg -i $1 || apt-get -y install -f; } || return 1; } ; \
{% for deb in docker_syncd_nephos_rpc_debs.split(' ') -%}
dpkg_apt debs/{{ deb }}{{'; '}}
{%- endfor %}
## Pre-install the fundamental packages
RUN apt-get update \
&& apt-get -y install \
net-tools \
python-pip \
build-essential \
libssl-dev \
libffi-dev \
python-dev \
wget \
cmake \
&& wget https://github.com/nanomsg/nanomsg/archive/1.0.0.tar.gz \
&& tar xvfz 1.0.0.tar.gz \
&& cd nanomsg-1.0.0 \
&& mkdir -p build \
&& cmake . \
&& make install \
&& ldconfig \
&& cd .. \
&& rm -fr nanomsg-1.0.0 \
&& rm -f 1.0.0.tar.gz \
&& pip install cffi==1.7.0 \
&& pip install --upgrade cffi==1.7.0 \
&& pip install nnpy \
&& mkdir -p /opt \
&& cd /opt \
&& wget https://raw.githubusercontent.com/p4lang/ptf/master/ptf_nn/ptf_nn_agent.py \
&& apt-get clean -y; apt-get autoclean -y; apt-get autoremove -y \
&& rm -rf /root/deps
COPY ["ptf_nn_agent.conf", "/etc/supervisor/conf.d/"]
ENTRYPOINT ["/usr/bin/supervisord"]

View File

@ -0,0 +1,10 @@
[program:ptf_nn_agent]
command=/usr/bin/python /opt/ptf_nn_agent.py --device-socket 1@tcp://0.0.0.0:10900 -i 1-3@Ethernet12 --set-iface-rcv-buffer=109430400
process_name=ptf_nn_agent
stdout_logfile=/tmp/ptf_nn_agent.out.log
stderr_logfile=/tmp/ptf_nn_agent.err.log
redirect_stderr=false
autostart=true
autorestart=true
startsecs=1
numprocs=1

View File

@ -0,0 +1,19 @@
# docker image for nephos syncd
DOCKER_SYNCD_NEPHOS = docker-syncd-nephos.gz
$(DOCKER_SYNCD_NEPHOS)_PATH = $(PLATFORM_PATH)/docker-syncd-nephos
$(DOCKER_SYNCD_NEPHOS)_DEPENDS += $(SYNCD)
$(DOCKER_SYNCD_NEPHOS)_FILES += $(DSSERVE) $(NPX_DIAG)
$(DOCKER_SYNCD_NEPHOS)_LOAD_DOCKERS += $(DOCKER_CONFIG_ENGINE)
SONIC_DOCKER_IMAGES += $(DOCKER_SYNCD_NEPHOS)
ifneq ($(ENABLE_SYNCD_RPC),y)
SONIC_INSTALL_DOCKER_IMAGES += $(DOCKER_SYNCD_NEPHOS)
endif
$(DOCKER_SYNCD_NEPHOS)_CONTAINER_NAME = syncd
$(DOCKER_SYNCD_NEPHOS)_RUN_OPT += --net=host --privileged -t
$(DOCKER_SYNCD_NEPHOS)_RUN_OPT += -v /host/machine.conf:/etc/machine.conf
$(DOCKER_SYNCD_NEPHOS)_RUN_OPT += -v /var/run/docker-syncd:/var/run/sswsyncd
$(DOCKER_SYNCD_NEPHOS)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro
$(DOCKER_SYNCD_NEPHOS)_BASE_IMAGE_FILES += npx_diag:/usr/bin/npx_diag

View File

@ -0,0 +1,31 @@
FROM docker-config-engine
## Make apt-get non-interactive
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update
COPY \
{% for deb in docker_syncd_nephos_debs.split(' ') -%}
debs/{{ deb }}{{' '}}
{%- endfor -%}
debs/
RUN dpkg -i \
{% for deb in docker_syncd_nephos_debs.split(' ') -%}
debs/{{ deb }}{{' '}}
{%- endfor %}
## TODO: add kmod into Depends
RUN apt-get install -f kmod
COPY ["files/dsserve", "files/npx_diag", "start.sh", "/usr/bin/"]
RUN chmod +x /usr/bin/dsserve /usr/bin/npx_diag
COPY ["supervisord.conf", "/etc/supervisor/conf.d/"]
## Clean up
RUN apt-get clean -y; apt-get autoclean -y; apt-get autoremove -y
RUN rm -rf /debs
ENTRYPOINT ["/usr/bin/supervisord"]

View File

@ -0,0 +1,3 @@
#!/bin/bash
docker exec -i syncd npx_diag "$@"

View File

@ -0,0 +1,7 @@
#!/usr/bin/env bash
rm -f /var/run/rsyslogd.pid
supervisorctl start rsyslogd
supervisorctl start syncd

View File

@ -0,0 +1,28 @@
[supervisord]
logfile_maxbytes=1MB
logfile_backups=2
nodaemon=true
[program:start.sh]
command=/usr/bin/start.sh
priority=1
autostart=true
autorestart=false
stdout_logfile=syslog
stderr_logfile=syslog
[program:rsyslogd]
command=/usr/sbin/rsyslogd -n
priority=2
autostart=false
autorestart=false
stdout_logfile=syslog
stderr_logfile=syslog
[program:syncd]
command=/usr/bin/syncd_start.sh
priority=3
autostart=false
autorestart=false
stdout_logfile=syslog
stderr_logfile=syslog

View File

@ -0,0 +1,7 @@
# libsaithrift-dev package
LIBSAITHRIFT_DEV_NEPHOS = libsaithrift-dev_0.9.4_amd64.deb
$(LIBSAITHRIFT_DEV_NEPHOS)_SRC_PATH = $(SRC_PATH)/SAI
$(LIBSAITHRIFT_DEV_NEPHOS)_DEPENDS += $(LIBTHRIFT) $(LIBTHRIFT_DEV) $(THRIFT_COMPILER) $(NEPHOS_SAI) $(NEPHOS_SAI_DEV)
$(LIBSAITHRIFT_DEV_NEPHOS)_RDEPENDS += $(LIBTHRIFT) $(NEPHOS_SAI)
#SONIC_DPKG_DEBS += $(LIBSAITHRIFT_DEV_NEPHOS)

View File

@ -0,0 +1,10 @@
# sonic nephos one image installer
SONIC_ONE_IMAGE = sonic-nephos.bin
$(SONIC_ONE_IMAGE)_MACHINE = nephos
$(SONIC_ONE_IMAGE)_IMAGE_TYPE = onie
$(SONIC_ONE_IMAGE)_INSTALLS += $(NEPHOS_NPS_KERNEL)
$(SONIC_ONE_IMAGE)_LAZY_INSTALLS += $(INGRASYS_S9130_32X_PLATFORM_MODULE) \
$(INGRASYS_S9230_64X_PLATFORM_MODULE)
$(SONIC_ONE_IMAGE)_DOCKERS += $(SONIC_INSTALL_DOCKER_IMAGES)
SONIC_INSTALLERS += $(SONIC_ONE_IMAGE)

View File

@ -0,0 +1,18 @@
# Ingrasys S9130-32X and S9230-64X Platform modules
INGRASYS_S9130_32X_PLATFORM_MODULE_VERSION = 1.0.0
INGRASYS_S9230_64X_PLATFORM_MODULE_VERSION = 1.0.0
export INGRASYS_S9130_32X_PLATFORM_MODULE_VERSION
export INGRASYS_S9230_64X_PLATFORM_MODULE_VERSION
INGRASYS_S9130_32X_PLATFORM_MODULE = sonic-platform-ingrasys-s9130-32x_$(INGRASYS_S9130_32X_PLATFORM_MODULE_VERSION)_amd64.deb
$(INGRASYS_S9130_32X_PLATFORM_MODULE)_SRC_PATH = $(PLATFORM_PATH)/sonic-platform-modules-ingrasys
$(INGRASYS_S9130_32X_PLATFORM_MODULE)_DEPENDS += $(LINUX_HEADERS) $(LINUX_HEADERS_COMMON)
$(INGRASYS_S9130_32X_PLATFORM_MODULE)_PLATFORM = x86_64-ingrasys_s9130_32x-r0
SONIC_DPKG_DEBS += $(INGRASYS_S9130_32X_PLATFORM_MODULE)
INGRASYS_S9230_64X_PLATFORM_MODULE = sonic-platform-ingrasys-s9230-64x_$(INGRASYS_S9230_64X_PLATFORM_MODULE_VERSION)_amd64.deb
$(INGRASYS_S9230_64X_PLATFORM_MODULE)_PLATFORM = x86_64-ingrasys_s9230_64x-r0
$(eval $(call add_extra_package,$(INGRASYS_S9130_32X_PLATFORM_MODULE),$(INGRASYS_S9230_64X_PLATFORM_MODULE)))

View File

View File

@ -0,0 +1,6 @@
# python-saithrift package
PYTHON_SAITHRIFT_NEPHOS = python-saithrift_0.9.4_amd64.deb
$(PYTHON_SAITHRIFT_NEPHOS)_SRC_PATH = $(SRC_PATH)/SAI
$(PYTHON_SAITHRIFT_NEPHOS)_DEPENDS += $(NEPHOS_SAI_DEV) $(THRIFT_COMPILER) $(PYTHON_THRIFT) $(LIBTHRIFT_DEV)
#SONIC_DPKG_DEBS += $(PYTHON_SAITHRIFT_NEPHOS)

26
platform/nephos/rules.mk Normal file
View File

@ -0,0 +1,26 @@
include $(PLATFORM_PATH)/sdk.mk
include $(PLATFORM_PATH)/sai.mk
include $(PLATFORM_PATH)/platform-modules-ingrasys.mk
include $(PLATFORM_PATH)/docker-orchagent-nephos.mk
include $(PLATFORM_PATH)/docker-syncd-nephos.mk
include $(PLATFORM_PATH)/docker-syncd-nephos-rpc.mk
include $(PLATFORM_PATH)/one-image.mk
include $(PLATFORM_PATH)/libsaithrift-dev.mk
include $(PLATFORM_PATH)/python-saithrift.mk
#include $(PLATFORM_PATH)/docker-ptf-nephos.mk
NPX_DIAG = npx_diag
$(NPX_DIAG)_URL = "https://github.com/NephosInc/SONiC/raw/master/sdk/npx_diag_2.0.1-20171020"
DSSERVE = dsserve
$(DSSERVE)_URL = "https://sonicstorage.blob.core.windows.net/packages/20170518/dsserve?sv=2015-04-05&sr=b&sig=gyNbgSL%2FvpMXDdpboVkIJcTKMRdGgEaOR9OukHhEsu8%3D&se=2030-03-31T23%3A06%3A35Z&sp=r"
SONIC_ONLINE_FILES += $(NPX_DIAG) $(DSSERVE)
SONIC_ALL += $(SONIC_ONE_IMAGE) $(DOCKER_FPM)
# Inject nephos sai into sairedis
$(LIBSAIREDIS)_DEPENDS += $(NEPHOS_SAI) $(NEPHOS_SAI_DEV) #$(LIBSAITHRIFT_DEV_NEPHOS)
# Runtime dependency on nephos sai is set only for syncd
$(SYNCD)_RDEPENDS += $(NEPHOS_SAI)

9
platform/nephos/sai.mk Normal file
View File

@ -0,0 +1,9 @@
NEPHOS_SAI = libsainps_2.0.2-20171204_amd64.deb
$(NEPHOS_SAI)_URL = "https://github.com/NephosInc/SONiC/raw/master/sai/libsainps_2.0.2-20171204_amd64.deb"
NEPHOS_SAI_DEV = libsainps-dev_2.0.2-20171124_amd64.deb
$(eval $(call add_derived_package,$(NEPHOS_SAI),$(NEPHOS_SAI_DEV)))
$(NEPHOS_SAI_DEV)_URL = "https://github.com/NephosInc/SONiC/raw/master/sai/libsainps-dev_2.0.2-20171124_amd64.deb"
SONIC_ONLINE_DEBS += $(NEPHOS_SAI) $(NEPHOS_SAI_DEV)
$(NEPHOS_SAI_DEV)_DEPENDS += $(NEPHOS_SAI)

4
platform/nephos/sdk.mk Normal file
View File

@ -0,0 +1,4 @@
NEPHOS_NPS_KERNEL = nps-modules-3.16.0-4-amd64_2.0.2-20171204_amd64.deb
$(NEPHOS_NPS_KERNEL)_URL = "https://github.com/NephosInc/SONiC/raw/master/sdk/nps-modules-3.16.0-4-amd64_2.0.2-20171204_amd64.deb"
SONIC_ONLINE_DEBS += $(NEPHOS_NPS_KERNEL)

@ -0,0 +1 @@
Subproject commit e8fd460120b73cc175b509a344345f30a70e3126

8
rules/ixgbe.mk Normal file
View File

@ -0,0 +1,8 @@
# initramfs-tools package
IXGBE_DRIVER_VERSION = 5.2.4
export IXGBE_DRIVER_VERSION
IXGBE_DRIVER = ixgbe.ko
$(IXGBE_DRIVER)_SRC_PATH = $(SRC_PATH)/ixgbe
SONIC_MAKE_DEBS += $(IXGBE_DRIVER)

View File

@ -394,6 +394,7 @@ $(addprefix $(TARGET_PATH)/, $(SONIC_INSTALLERS)) : $(TARGET_PATH)/% : \
$(addprefix $(DEBS_PATH)/,$(INITRAMFS_TOOLS) \
$(LINUX_KERNEL) \
$(IGB_DRIVER) \
$(IXGBE_DRIVER) \
$(SONIC_DEVICE_DATA) \
$(SONIC_UTILS) \
$(LIBPAM_TACPLUS) \

22
src/ixgbe/Makefile Normal file
View File

@ -0,0 +1,22 @@
.ONESHELL:
SHELL = /bin/bash
.SHELLFLAGS += -e
MAIN_TARGET = ixgbe.ko
$(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% :
rm -rf ./ixgbe-$(IXGBE_DRIVER_VERSION)
wget -O ixgbe-$(IXGBE_DRIVER_VERSION).tar.gz "https://sonicstorage.blob.core.windows.net/packages/ixgbe-5.2.4.tar.gz?sv=2015-04-05&sr=b&sig=AaqJHHaPiJRp8R3HKobi0GNDgHAVnqijk6hpahwJ0Mg%3D&se=2154-10-05T22%3A19%3A29Z&sp=r"
tar xzf ixgbe-$(IXGBE_DRIVER_VERSION).tar.gz
# Patch
pushd ./ixgbe-$(IXGBE_DRIVER_VERSION)
# Build the package
pushd src
export BUILD_KERNEL=3.16.0-4-amd64
make
popd
popd
mv ./ixgbe-$(IXGBE_DRIVER_VERSION)/src/$* $(DEST)/

@ -1 +1 @@
Subproject commit 345f179482dbf5258cad088414bc9eb230decd97
Subproject commit 3b817bbe14f1e5177e6200c7a80ab74db4768eaa