[Ingrasys] update port_config.ini and sfputil for ingrasys platforms (#952)

* [Ingrasys] update port_config.ini and sfputil for ingrasys platforms

- What I did

Update port_config.ini on S8810-32Q/S8900-54XC/S8900-64XC/S9100-C32 platforms

- How I did it

Update alias field and add port field in port_config.ini

- How to verify it

Check with the "sfputil show eeprom" command. If no error occurs, it is passed.

- Description for the changelog

Update port_config.ini on S8810-32Q/S8900-54XC/S8900-64XC/S9100-C32 platforms

* [Ingrasys] remove debug message in sfputil.py on S8810-32Q

- What I did

remove debug message in sfputil.py on S8810-32Q

- How I did it

remove print in get_low_power_mode() and set_low_power_mode()

- How to verify it

There should be no debug message when executing "sfputil show lpmode"
and "sfputil lpmode on Ethernet0"command.

- Description for the changelog

remove debug message in sfputil.py on S8810-32Q

- A picture of a cute animal (not mandatory but encouraged)
This commit is contained in:
cytsai0409 2017-09-14 10:18:26 +08:00 committed by lguohan
parent 686e227dcc
commit e4cae4e889
6 changed files with 534 additions and 251 deletions

View File

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

View File

@ -1,61 +1,147 @@
#!/usr/bin/env python
# sfputil.py
#
# Platform-specific SFP transceiver interface for SONiC
#
try:
from sonic_sfp.sfputilbase import sfputilbase
except ImportError, e:
raise ImportError (str(e) + "- required module not found")
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"""
class SfpUtil(SfpUtilBase):
"""Platform-specific SfpUtil class"""
port_start = 0
port_end = 31
ports_in_block = 32
PORT_START = 0
PORT_END = 31
PORTS_IN_BLOCK = 32
port_to_eeprom_mapping = {}
#FIXME
port_to_i2c_mapping = {
0: 18,
1: 19,
2: 20,
3: 21,
4: 22,
5: 23,
6: 24,
7: 25,
8: 26,
9: 27,
10: 28,
11: 29,
12: 30,
13: 31,
14: 32,
15: 33,
16: 34,
17: 35,
18: 36,
19: 37,
20: 38,
21: 39,
22: 40,
23: 41,
24: 42,
25: 43,
26: 44,
27: 45,
28: 46,
29: 47,
30: 48,
31: 49
}
EEPROM_OFFSET = 18
_qsfp_ports = range(0, ports_in_block + 1)
ABS_GPIO_BASE = 224
#INT_GPIO_BASE = 192
LP_GPIO_BASE = 160
RST_GPIO_BASE = 128
BASE_DIR_PATH = "/sys/class/gpio/gpio{0}/direction"
BASE_VAL_PATH = "/sys/class/gpio/gpio{0}/value"
def __init__(self, port_num):
_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'
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(self.port_to_i2c_mapping[x])
self.port_to_eeprom_mapping[x] = port_eeprom_path
sfputilbase.__init__(self, port_num)
self._port_to_eeprom_mapping[x] = eeprom_path.format(x + self.EEPROM_OFFSET)
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
try:
abs_device_file = self.BASE_VAL_PATH.format(
port_num + self.ABS_GPIO_BASE)
val_file = open(abs_device_file)
except IOError as e:
print "Error: unable to open file: %s" % str(e)
return False
content = val_file.readline().rstrip()
# content is a string, either "0" or "1"
if content == "1":
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
try:
lpmode_val_device_file = self.BASE_VAL_PATH.format(
port_num + self.LP_GPIO_BASE)
val_file = open(lpmode_val_device_file)
except IOError as e:
print "Error: unable to open file: %s" % str(e)
return False
content = val_file.readline().rstrip()
# content is a string, either "0" or "1"
if content == "1":
return True
return False
def set_low_power_mode(self, port_num, lpmode):
# Check for invalid port_num
if port_num < self.port_start or port_num > self.port_end:
return False
try:
lpmode_val_device_file = self.BASE_VAL_PATH.format(
port_num + self.LP_GPIO_BASE)
val_file = open(lpmode_val_device_file, "w")
except IOError as e:
print "Error: unable to open file: %s" % str(e)
return False
val_file.write("1" if lpmode is True else "0")
val_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
try:
reset_val_device_file = self.BASE_VAL_PATH.format(
port_num + self.RST_GPIO_BASE)
val_file = open(reset_val_device_file, "w")
except IOError as e:
print "Error: unable to open file: %s" % str(e)
return False
val_file.write("1")
val_file.close()
# Sleep 1 second to allow it to settle
time.sleep(1)
try:
reset_val_device_file = self.BASE_VAL_PATH.format(
port_num + self.RST_GPIO_BASE)
val_file = open(reset_val_device_file, "w")
except IOError as e:
print "Error: unable to open file: %s" % str(e)
return False
val_file.write("0")
val_file.close()
return True

View File

@ -1,55 +1,55 @@
# name lanes alias
Ethernet0 1
Ethernet1 2
Ethernet2 3
Ethernet3 4
Ethernet4 5
Ethernet5 6
Ethernet6 7
Ethernet7 8
Ethernet8 9
Ethernet9 10
Ethernet10 11
Ethernet11 12
Ethernet12 21
Ethernet13 22
Ethernet14 23
Ethernet15 24
Ethernet16 33
Ethernet17 34
Ethernet18 35
Ethernet19 36
Ethernet20 37
Ethernet21 38
Ethernet22 39
Ethernet23 40
Ethernet24 41
Ethernet25 42
Ethernet26 43
Ethernet27 44
Ethernet28 49
Ethernet29 50
Ethernet30 51
Ethernet31 52
Ethernet32 53
Ethernet33 54
Ethernet34 55
Ethernet35 56
Ethernet36 65
Ethernet37 66
Ethernet38 67
Ethernet39 68
Ethernet40 69
Ethernet41 70
Ethernet42 71
Ethernet43 72
Ethernet44 81
Ethernet45 82
Ethernet46 83
Ethernet47 84
Ethernet48 85,86,87,88
Ethernet52 97,98,99,100
Ethernet56 101,102,103,104
Ethernet60 105,106,107,108
Ethernet64 109,110,111,112
Ethernet68 117,118,119,120
# name lanes alias port
Ethernet0 1 Ethernet1 0
Ethernet1 2 Ethernet2 1
Ethernet2 3 Ethernet3 2
Ethernet3 4 Ethernet4 3
Ethernet4 5 Ethernet5 4
Ethernet5 6 Ethernet6 5
Ethernet6 7 Ethernet7 6
Ethernet7 8 Ethernet8 7
Ethernet8 9 Ethernet9 8
Ethernet9 10 Ethernet10 9
Ethernet10 11 Ethernet11 10
Ethernet11 12 Ethernet12 11
Ethernet12 21 Ethernet13 12
Ethernet13 22 Ethernet14 13
Ethernet14 23 Ethernet15 14
Ethernet15 24 Ethernet16 15
Ethernet16 33 Ethernet17 16
Ethernet17 34 Ethernet18 17
Ethernet18 35 Ethernet19 18
Ethernet19 36 Ethernet20 19
Ethernet20 37 Ethernet21 20
Ethernet21 38 Ethernet22 21
Ethernet22 39 Ethernet23 22
Ethernet23 40 Ethernet24 23
Ethernet24 41 Ethernet25 24
Ethernet25 42 Ethernet26 25
Ethernet26 43 Ethernet27 26
Ethernet27 44 Ethernet28 27
Ethernet28 49 Ethernet29 28
Ethernet29 50 Ethernet30 29
Ethernet30 51 Ethernet31 30
Ethernet31 52 Ethernet32 31
Ethernet32 53 Ethernet33 32
Ethernet33 54 Ethernet34 33
Ethernet34 55 Ethernet35 34
Ethernet35 56 Ethernet36 35
Ethernet36 65 Ethernet37 36
Ethernet37 66 Ethernet38 37
Ethernet38 67 Ethernet39 38
Ethernet39 68 Ethernet40 39
Ethernet40 69 Ethernet41 40
Ethernet41 70 Ethernet42 41
Ethernet42 71 Ethernet43 42
Ethernet43 72 Ethernet44 43
Ethernet44 81 Ethernet45 44
Ethernet45 82 Ethernet46 45
Ethernet46 83 Ethernet47 46
Ethernet47 84 Ethernet48 47
Ethernet48 85,86,87,88 Ethernet49/1 48
Ethernet52 97,98,99,100 Ethernet50/1 49
Ethernet56 101,102,103,104 Ethernet51/1 50
Ethernet60 105,106,107,108 Ethernet52/1 51
Ethernet64 109,110,111,112 Ethernet53/1 52
Ethernet68 117,118,119,120 Ethernet54/1 53

View File

@ -1,19 +1,27 @@
#!/usr/bin/env python
# sfputil.py
#
# Platform-specific SFP transceiver interface for SONiC
#
try:
from sonic_sfp.sfputilbase import sfputilbase
except ImportError, e:
raise ImportError (str(e) + "- required module not found")
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"""
class SfpUtil(SfpUtilBase):
"""Platform-specific SfpUtil class"""
port_start = 0
port_end = 53
ports_in_block = 54
PORT_START = 0
PORT_END = 53
QSFP_PORT_START = 48
PORTS_IN_BLOCK = 54
BASE_DIR_PATH = "/sys/class/gpio/gpio{0}/direction"
BASE_VAL_PATH = "/sys/class/gpio/gpio{0}/value"
port_to_eeprom_mapping = {}
_port_to_eeprom_mapping = {}
port_to_i2c_mapping = {
0: 18,
1: 19,
@ -71,12 +79,201 @@ class sfputil(sfputilbase):
53: 71
}
_qsfp_ports = range(0, ports_in_block + 1)
abs_to_gpio_mapping = {
0: 192,
1: 193,
2: 194,
3: 195,
4: 196,
5: 197,
6: 198,
7: 199,
8: 200,
9: 201,
10: 202,
11: 203,
12: 204,
13: 205,
14: 206,
15: 207,
16: 176,
17: 177,
18: 178,
19: 179,
20: 180,
21: 181,
22: 182,
23: 183,
24: 184,
25: 185,
26: 186,
27: 187,
28: 188,
29: 189,
30: 190,
31: 191,
32: 160,
33: 161,
34: 162,
35: 163,
36: 164,
37: 165,
38: 166,
39: 167,
40: 168,
41: 169,
42: 170,
43: 171,
44: 172,
45: 173,
46: 174,
47: 175,
48: 240,
49: 241,
50: 242,
51: 243,
52: 244,
53: 245
}
def __init__(self, port_num):
lpmode_to_gpio_mapping = {
48: 224,
49: 225,
50: 226,
51: 227,
52: 228,
53: 229
}
reset_to_gpio_mapping = {
48: 208,
49: 209,
50: 210,
51: 211,
52: 212,
53: 213
}
@property
def port_start(self):
return self.PORT_START
@property
def qsfp_port_start(self):
return self.QSFP_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'
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(self.port_to_i2c_mapping[x])
self.port_to_eeprom_mapping[x] = port_eeprom_path
sfputilbase.__init__(self, port_num)
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
try:
abs_device_file = self.BASE_VAL_PATH.format(
self.abs_to_gpio_mapping[port_num])
val_file = open(abs_device_file)
except IOError as e:
print "Error: unable to open file: %s" % str(e)
return False
content = val_file.readline().rstrip()
# content is a string, either "0" or "1"
if content == "1":
return True
return False
def get_low_power_mode(self, port_num):
# Check for invalid port_num
if port_num < self.qsfp_port_start or port_num > self.port_end:
return False
try:
lpmode_val_device_file = self.BASE_VAL_PATH.format(
self.lpmode_to_gpio_mapping[port_num])
val_file = open(lpmode_val_device_file)
except IOError as e:
print "Error: unable to open file: %s" % str(e)
return False
content = val_file.readline().rstrip()
# content is a string, either "0" or "1"
if content == "1":
return True
return False
def set_low_power_mode(self, port_num, lpmode):
# Check for invalid port_num
if port_num < self.qsfp_port_start or port_num > self.port_end:
return False
try:
lpmode_val_device_file = self.BASE_VAL_PATH.format(
self.lpmode_to_gpio_mapping[port_num])
val_file = open(lpmode_val_device_file, "w")
except IOError as e:
print "Error: unable to open file: %s" % str(e)
return False
val_file.write("1" if lpmode is True else "0")
val_file.close()
return True
def reset(self, port_num):
# Check for invalid port_num
if port_num < self.qsfp_port_start or port_num > self.port_end:
print "Error: unable to reset non-QSFP module: port %s" % str(port_num)
return False
try:
print "port %s" % str(port_num)
reset_val_device_file = self.BASE_VAL_PATH.format(
self.reset_to_gpio_mapping[port_num])
val_file = open(reset_val_device_file, "w")
except IOError as e:
print "Error: unable to open file: %s" % str(e)
return False
val_file.write("1")
val_file.close()
# Sleep 1 second to allow it to settle
time.sleep(1)
try:
reset_val_device_file = self.BASE_VAL_PATH.format(
self.reset_to_gpio_mapping[port_num])
val_file = open(reset_val_device_file, "w")
except IOError as e:
print "Error: unable to open file: %s" % str(e)
return False
val_file.write("0")
val_file.close()
return True

View File

@ -1,65 +1,65 @@
# name lanes alias
Ethernet0 17
Ethernet1 18
Ethernet2 19
Ethernet3 20
Ethernet4 24
Ethernet5 23
Ethernet6 22
Ethernet7 21
Ethernet8 28
Ethernet9 27
Ethernet10 26
Ethernet11 25
Ethernet12 32
Ethernet13 31
Ethernet14 30
Ethernet15 29
Ethernet16 1
Ethernet17 2
Ethernet18 3
Ethernet19 4
Ethernet20 8
Ethernet21 7
Ethernet22 6
Ethernet23 5
Ethernet24 12
Ethernet25 11
Ethernet26 10
Ethernet27 9
Ethernet28 13
Ethernet29 14
Ethernet30 15
Ethernet31 16
Ethernet32 33
Ethernet33 34
Ethernet34 35
Ethernet35 36
Ethernet36 38
Ethernet37 39
Ethernet38 40
Ethernet39 37
Ethernet40 41
Ethernet41 42
Ethernet42 43
Ethernet43 44
Ethernet44 48
Ethernet45 45
Ethernet46 46
Ethernet47 47
Ethernet48 49,50,51,52
Ethernet52 53,54,55,56
Ethernet56 57,58,59,60
Ethernet60 61,62,63,64
Ethernet64 65,66,67,68
Ethernet68 69,70,71,72
Ethernet72 73,74,75,76
Ethernet76 77,78,79,80
Ethernet80 81,82,83,84
Ethernet84 85,86,87,88
Ethernet88 89,90,91,92
Ethernet92 93,94,95,96
Ethernet96 97,98,99,100
Ethernet100 101,102,103,104
Ethernet104 105,106,107,108
Ethernet108 109,110,111,112
# name lanes alias port
Ethernet0 17 Ethernet1 0
Ethernet1 18 Ethernet2 1
Ethernet2 19 Ethernet3 2
Ethernet3 20 Ethernet4 3
Ethernet4 24 Ethernet5 4
Ethernet5 23 Ethernet6 5
Ethernet6 22 Ethernet7 6
Ethernet7 21 Ethernet8 7
Ethernet8 28 Ethernet9 8
Ethernet9 27 Ethernet10 9
Ethernet10 26 Ethernet11 10
Ethernet11 25 Ethernet12 11
Ethernet12 32 Ethernet13 12
Ethernet13 31 Ethernet14 13
Ethernet14 30 Ethernet15 14
Ethernet15 29 Ethernet16 15
Ethernet16 1 Ethernet17 16
Ethernet17 2 Ethernet18 17
Ethernet18 3 Ethernet19 18
Ethernet19 4 Ethernet20 19
Ethernet20 8 Ethernet21 20
Ethernet21 7 Ethernet22 21
Ethernet22 6 Ethernet23 22
Ethernet23 5 Ethernet24 23
Ethernet24 12 Ethernet25 24
Ethernet25 11 Ethernet26 25
Ethernet26 10 Ethernet27 26
Ethernet27 9 Ethernet28 27
Ethernet28 13 Ethernet29 28
Ethernet29 14 Ethernet30 29
Ethernet30 15 Ethernet31 30
Ethernet31 16 Ethernet32 31
Ethernet32 33 Ethernet33 32
Ethernet33 34 Ethernet34 33
Ethernet34 35 Ethernet35 34
Ethernet35 36 Ethernet36 35
Ethernet36 38 Ethernet37 36
Ethernet37 39 Ethernet38 37
Ethernet38 40 Ethernet39 38
Ethernet39 37 Ethernet40 39
Ethernet40 41 Ethernet41 40
Ethernet41 42 Ethernet42 41
Ethernet42 43 Ethernet43 42
Ethernet43 44 Ethernet44 43
Ethernet44 48 Ethernet45 44
Ethernet45 45 Ethernet46 45
Ethernet46 46 Ethernet47 46
Ethernet47 47 Ethernet48 47
Ethernet48 49,50,51,52 Ethernet49/1 48
Ethernet52 53,54,55,56 Ethernet50/1 49
Ethernet56 57,58,59,60 Ethernet51/1 50
Ethernet60 61,62,63,64 Ethernet52/1 51
Ethernet64 65,66,67,68 Ethernet53/1 52
Ethernet68 69,70,71,72 Ethernet54/1 53
Ethernet72 73,74,75,76 Ethernet55/1 54
Ethernet76 77,78,79,80 Ethernet56/1 55
Ethernet80 81,82,83,84 Ethernet57/1 56
Ethernet84 85,86,87,88 Ethernet58/1 57
Ethernet88 89,90,91,92 Ethernet59/1 58
Ethernet92 93,94,95,96 Ethernet60/1 59
Ethernet96 97,98,99,100 Ethernet61/1 60
Ethernet100 101,102,103,104 Ethernet62/1 61
Ethernet104 105,106,107,108 Ethernet63/1 62
Ethernet108 109,110,111,112 Ethernet64/1 63

View File

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