diff --git a/build_debian.sh b/build_debian.sh index 128da78aa5f..5c8a85c39d4 100755 --- a/build_debian.sh +++ b/build_debian.sh @@ -243,7 +243,9 @@ sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y in tcptraceroute \ mtr-tiny \ locales \ - dmidecode + dmidecode \ + ftp \ + tftp-hpa #Adds a locale to a debian system in non-interactive mode sudo sed -i '/^#.* en_US.* /s/^#//' $FILESYSTEM_ROOT/etc/locale.gen && \ diff --git a/device/alibaba/x86_64-alibaba_as13-32h-cl-r0/AS13-32H/port_config.ini b/device/alibaba/x86_64-alibaba_as13-32h-cl-r0/AS13-32H/port_config.ini index 5c6ca5db0a7..217409482c1 100644 --- a/device/alibaba/x86_64-alibaba_as13-32h-cl-r0/AS13-32H/port_config.ini +++ b/device/alibaba/x86_64-alibaba_as13-32h-cl-r0/AS13-32H/port_config.ini @@ -1,33 +1,33 @@ -# name lanes alias index -Ethernet1 1,2,3,4 QSFP1 1 -Ethernet2 5,6,7,8 QSFP2 2 -Ethernet3 9,10,11,12 QSFP3 3 -Ethernet4 13,14,15,16 QSFP4 4 -Ethernet5 17,18,19,20 QSFP5 5 -Ethernet6 21,22,23,24 QSFP6 6 -Ethernet7 25,26,27,28 QSFP7 7 -Ethernet8 29,30,31,32 QSFP8 8 -Ethernet9 33,34,35,36 QSFP9 9 -Ethernet10 37,38,39,40 QSFP10 10 -Ethernet11 41,42,43,44 QSFP11 11 -Ethernet12 45,46,47,48 QSFP12 12 -Ethernet13 49,50,51,52 QSFP13 13 -Ethernet14 53,54,55,56 QSFP14 14 -Ethernet15 57,58,59,60 QSFP15 15 -Ethernet16 61,62,63,64 QSFP16 16 -Ethernet17 65,66,67,68 QSFP17 17 -Ethernet18 69,70,71,72 QSFP18 18 -Ethernet19 73,74,75,76 QSFP19 19 -Ethernet20 77,78,79,80 QSFP20 20 -Ethernet21 81,82,83,84 QSFP21 21 -Ethernet22 85,86,87,88 QSFP22 22 -Ethernet23 89,90,91,92 QSFP23 23 -Ethernet24 93,94,95,96 QSFP24 24 -Ethernet25 97,98,99,100 QSFP25 25 -Ethernet26 101,102,103,104 QSFP26 26 -Ethernet27 105,106,107,108 QSFP27 27 -Ethernet28 109,110,111,112 QSFP28 28 -Ethernet29 113,114,115,116 QSFP29 29 -Ethernet30 117,118,119,120 QSFP30 30 -Ethernet31 121,122,123,124 QSFP31 31 -Ethernet32 125,126,127,128 QSFP32 32 +# name lanes alias fec index +Ethernet1 1,2,3,4 QSFP1 rs 1 +Ethernet2 5,6,7,8 QSFP2 rs 2 +Ethernet3 9,10,11,12 QSFP3 rs 3 +Ethernet4 13,14,15,16 QSFP4 rs 4 +Ethernet5 17,18,19,20 QSFP5 rs 5 +Ethernet6 21,22,23,24 QSFP6 rs 6 +Ethernet7 25,26,27,28 QSFP7 rs 7 +Ethernet8 29,30,31,32 QSFP8 rs 8 +Ethernet9 33,34,35,36 QSFP9 rs 9 +Ethernet10 37,38,39,40 QSFP10 rs 10 +Ethernet11 41,42,43,44 QSFP11 rs 11 +Ethernet12 45,46,47,48 QSFP12 rs 12 +Ethernet13 49,50,51,52 QSFP13 rs 13 +Ethernet14 53,54,55,56 QSFP14 rs 14 +Ethernet15 57,58,59,60 QSFP15 rs 15 +Ethernet16 61,62,63,64 QSFP16 rs 16 +Ethernet17 65,66,67,68 QSFP17 rs 17 +Ethernet18 69,70,71,72 QSFP18 rs 18 +Ethernet19 73,74,75,76 QSFP19 rs 19 +Ethernet20 77,78,79,80 QSFP20 rs 20 +Ethernet21 81,82,83,84 QSFP21 rs 21 +Ethernet22 85,86,87,88 QSFP22 rs 22 +Ethernet23 89,90,91,92 QSFP23 rs 23 +Ethernet24 93,94,95,96 QSFP24 rs 24 +Ethernet25 97,98,99,100 QSFP25 rs 25 +Ethernet26 101,102,103,104 QSFP26 rs 26 +Ethernet27 105,106,107,108 QSFP27 rs 27 +Ethernet28 109,110,111,112 QSFP28 rs 28 +Ethernet29 113,114,115,116 QSFP29 rs 29 +Ethernet30 117,118,119,120 QSFP30 rs 30 +Ethernet31 121,122,123,124 QSFP31 rs 31 +Ethernet32 125,126,127,128 QSFP32 rs 32 diff --git a/device/alibaba/x86_64-alibaba_as13-32h-cl-r0/custom_led.bin b/device/alibaba/x86_64-alibaba_as13-32h-cl-r0/custom.bin similarity index 100% rename from device/alibaba/x86_64-alibaba_as13-32h-cl-r0/custom_led.bin rename to device/alibaba/x86_64-alibaba_as13-32h-cl-r0/custom.bin diff --git a/device/alibaba/x86_64-alibaba_as13-32h-cl-r0/led_proc_init.soc b/device/alibaba/x86_64-alibaba_as13-32h-cl-r0/led_proc_init.soc index 28cd4b9bc9f..3f945362e0b 100644 --- a/device/alibaba/x86_64-alibaba_as13-32h-cl-r0/led_proc_init.soc +++ b/device/alibaba/x86_64-alibaba_as13-32h-cl-r0/led_proc_init.soc @@ -4,6 +4,15 @@ #linkscan 250000; port xe,ce linkscan=on #Load LED -#led auto on; led start - - +sleep 10 +vlan clear +sleep 5 +vlan add 1 pbm=ce,cpu ubm=ce,cpu +sleep 5 +vlan remove 1 pbm=ce24,ce25,ce26,ce27,ce28,ce29,ce30,ce31 +sleep 5 +led auto on; led start +sleep 5 +port all en=1 +port xe0,xe1 an=1 +vlan create 250 pbm=xe0,xe1 ubm=xe0,xe1 diff --git a/device/alibaba/x86_64-alibaba_as13-32h-cl-r0/linkscan_led_fw.bin b/device/alibaba/x86_64-alibaba_as13-32h-cl-r0/linkscan_fw.bin similarity index 100% rename from device/alibaba/x86_64-alibaba_as13-32h-cl-r0/linkscan_led_fw.bin rename to device/alibaba/x86_64-alibaba_as13-32h-cl-r0/linkscan_fw.bin diff --git a/device/alibaba/x86_64-alibaba_as13-32h-cl-r0/opennsl-postinit.cfg b/device/alibaba/x86_64-alibaba_as13-32h-cl-r0/opennsl-postinit.cfg deleted file mode 100644 index 7008c14c0ff..00000000000 --- a/device/alibaba/x86_64-alibaba_as13-32h-cl-r0/opennsl-postinit.cfg +++ /dev/null @@ -1,3 +0,0 @@ -linkscan 250000; port xe,ce linkscan=on -sleep 1 -led auto on; led start diff --git a/device/alibaba/x86_64-alibaba_as13-32h-cl-r0/plugins/sfputil.py b/device/alibaba/x86_64-alibaba_as13-32h-cl-r0/plugins/sfputil.py index 9608c5717f0..af42b8e0332 100755 --- a/device/alibaba/x86_64-alibaba_as13-32h-cl-r0/plugins/sfputil.py +++ b/device/alibaba/x86_64-alibaba_as13-32h-cl-r0/plugins/sfputil.py @@ -70,6 +70,11 @@ def __init__(self): x + self.EEPROM_OFFSET) SfpUtilBase.__init__(self) + def _do_write_file(self, file_handle, offset, value): + file_handle.seek(offset) + file_handle.write(hex(value)) + file_handle.close() + def get_presence(self, port_num): # Check for invalid port_num @@ -203,3 +208,39 @@ def tx_disable(self, port_num, disable): return False return True + + def reset_all(self): + result = True + port_sysfs_path = [] + for port in range(self.port_start, self.port_end+1): + if port not in self.qsfp_ports: + continue + + presence = self.get_presence(port) + if not presence: + continue + + try: + port_name = self.get_port_name(port) + sysfs_path = "/".join([self.PORT_INFO_PATH, + port_name, "qsfp_reset"]) + reg_file = open(sysfs_path, "w") + port_sysfs_path.append(sysfs_path) + except IOError as e: + result = False + continue + + self._do_write_file(reg_file, 0, 0) + + time.sleep(1) + + for sysfs_path in port_sysfs_path: + try: + reg_file = open(sysfs_path, "w") + except IOError as e: + result = False + continue + + self._do_write_file(reg_file, 0, 1) + + return result diff --git a/device/alibaba/x86_64-alibaba_as13-32h-cl-r0/td3-as13-32h.config.bcm b/device/alibaba/x86_64-alibaba_as13-32h-cl-r0/td3-as13-32h.config.bcm index 82b47b51fc1..ff00414a929 100644 --- a/device/alibaba/x86_64-alibaba_as13-32h-cl-r0/td3-as13-32h.config.bcm +++ b/device/alibaba/x86_64-alibaba_as13-32h-cl-r0/td3-as13-32h.config.bcm @@ -18,7 +18,7 @@ serdes_lane_config_dfe=on serdes_if_type_ce=14 pbmp_gport_stack.0=0x0000000000000000000000000000000000000000000000000000000000000000 #pbmp_xport_xe=0x48878787f8787808dfe1e0203e1e1e022 -pbmp_xport_xe=0x88888888888888882222222222222222 +pbmp_xport_xe=0x4888888888888888c2222222222222222 #ptp_ts_pll_fref=50000000 #ptp_bs_fref_0=50000000 diff --git a/device/alibaba/x86_64-alibaba_as13-48f8h-cl-r0/AS13-48F8H/port_config.ini b/device/alibaba/x86_64-alibaba_as13-48f8h-cl-r0/AS13-48F8H/port_config.ini index 9e4fd2d930c..ba4a8f30beb 100644 --- a/device/alibaba/x86_64-alibaba_as13-48f8h-cl-r0/AS13-48F8H/port_config.ini +++ b/device/alibaba/x86_64-alibaba_as13-48f8h-cl-r0/AS13-48F8H/port_config.ini @@ -1,57 +1,57 @@ -# name lanes alias index -Ethernet1 49 SFP1 1 -Ethernet2 50 SFP2 2 -Ethernet3 51 SFP3 3 -Ethernet4 52 SFP4 4 -Ethernet5 13 SFP5 5 -Ethernet6 14 SFP6 6 -Ethernet7 15 SFP7 7 -Ethernet8 16 SFP8 8 -Ethernet9 21 SFP9 9 -Ethernet10 22 SFP10 10 -Ethernet11 23 SFP11 11 -Ethernet12 24 SFP12 12 -Ethernet13 29 SFP13 13 -Ethernet14 30 SFP14 14 -Ethernet15 31 SFP15 15 -Ethernet16 32 SFP16 16 -Ethernet17 33 SFP17 17 -Ethernet18 34 SFP18 18 -Ethernet19 35 SFP19 19 -Ethernet20 36 SFP20 20 -Ethernet21 41 SFP21 21 -Ethernet22 42 SFP22 22 -Ethernet23 43 SFP23 23 -Ethernet24 44 SFP24 24 -Ethernet25 1 SFP25 25 -Ethernet26 2 SFP26 26 -Ethernet27 3 SFP27 27 -Ethernet28 4 SFP28 28 -Ethernet29 5 SFP29 29 -Ethernet30 6 SFP30 30 -Ethernet31 7 SFP31 31 -Ethernet32 8 SFP32 32 -Ethernet33 85 SFP33 33 -Ethernet34 86 SFP34 34 -Ethernet35 87 SFP35 35 -Ethernet36 88 SFP36 36 -Ethernet37 93 SFP37 37 -Ethernet38 94 SFP38 38 -Ethernet39 95 SFP39 39 -Ethernet40 96 SFP40 40 -Ethernet41 97 SFP41 41 -Ethernet42 98 SFP42 42 -Ethernet43 99 SFP43 43 -Ethernet44 100 SFP44 44 -Ethernet45 105 SFP45 45 -Ethernet46 106 SFP46 46 -Ethernet47 107 SFP47 47 -Ethernet48 108 SFP48 48 -Ethernet49 57,58,59,60 QSFP1 49 -Ethernet50 61,62,63,64 QSFP2 50 -Ethernet51 121,122,123,124 QSFP3 51 -Ethernet52 113,114,115,116 QSFP4 52 -Ethernet53 125,126,127,128 QSFP5 53 -Ethernet54 65,66,67,68 QSFP6 54 -Ethernet55 77,78,79,80 QSFP7 55 -Ethernet56 69,70,71,72 QSFP8 56 +# name lanes alias fec index +Ethernet1 49 SFP1 rs 1 +Ethernet2 50 SFP2 rs 2 +Ethernet3 51 SFP3 rs 3 +Ethernet4 52 SFP4 rs 4 +Ethernet5 13 SFP5 rs 5 +Ethernet6 14 SFP6 rs 6 +Ethernet7 15 SFP7 rs 7 +Ethernet8 16 SFP8 rs 8 +Ethernet9 21 SFP9 rs 9 +Ethernet10 22 SFP10 rs 10 +Ethernet11 23 SFP11 rs 11 +Ethernet12 24 SFP12 rs 12 +Ethernet13 29 SFP13 rs 13 +Ethernet14 30 SFP14 rs 14 +Ethernet15 31 SFP15 rs 15 +Ethernet16 32 SFP16 rs 16 +Ethernet17 33 SFP17 rs 17 +Ethernet18 34 SFP18 rs 18 +Ethernet19 35 SFP19 rs 19 +Ethernet20 36 SFP20 rs 20 +Ethernet21 41 SFP21 rs 21 +Ethernet22 42 SFP22 rs 22 +Ethernet23 43 SFP23 rs 23 +Ethernet24 44 SFP24 rs 24 +Ethernet25 1 SFP25 rs 25 +Ethernet26 2 SFP26 rs 26 +Ethernet27 3 SFP27 rs 27 +Ethernet28 4 SFP28 rs 28 +Ethernet29 5 SFP29 rs 29 +Ethernet30 6 SFP30 rs 30 +Ethernet31 7 SFP31 rs 31 +Ethernet32 8 SFP32 rs 32 +Ethernet33 85 SFP33 rs 33 +Ethernet34 86 SFP34 rs 34 +Ethernet35 87 SFP35 rs 35 +Ethernet36 88 SFP36 rs 36 +Ethernet37 93 SFP37 rs 37 +Ethernet38 94 SFP38 rs 38 +Ethernet39 95 SFP39 rs 39 +Ethernet40 96 SFP40 rs 40 +Ethernet41 97 SFP41 rs 41 +Ethernet42 98 SFP42 rs 42 +Ethernet43 99 SFP43 rs 43 +Ethernet44 100 SFP44 rs 44 +Ethernet45 105 SFP45 rs 45 +Ethernet46 106 SFP46 rs 46 +Ethernet47 107 SFP47 rs 47 +Ethernet48 108 SFP48 rs 48 +Ethernet49 57,58,59,60 QSFP1 rs 49 +Ethernet50 61,62,63,64 QSFP2 rs 50 +Ethernet51 121,122,123,124 QSFP3 rs 51 +Ethernet52 113,114,115,116 QSFP4 rs 52 +Ethernet53 125,126,127,128 QSFP5 rs 53 +Ethernet54 65,66,67,68 QSFP6 rs 54 +Ethernet55 77,78,79,80 QSFP7 rs 55 +Ethernet56 69,70,71,72 QSFP8 rs 56 diff --git a/device/alibaba/x86_64-alibaba_as13-48f8h-cl-r0/custom_led.bin b/device/alibaba/x86_64-alibaba_as13-48f8h-cl-r0/custom.bin similarity index 100% rename from device/alibaba/x86_64-alibaba_as13-48f8h-cl-r0/custom_led.bin rename to device/alibaba/x86_64-alibaba_as13-48f8h-cl-r0/custom.bin diff --git a/device/alibaba/x86_64-alibaba_as13-48f8h-cl-r0/led_proc_init.soc b/device/alibaba/x86_64-alibaba_as13-48f8h-cl-r0/led_proc_init.soc index 28cd4b9bc9f..1d40062efea 100644 --- a/device/alibaba/x86_64-alibaba_as13-48f8h-cl-r0/led_proc_init.soc +++ b/device/alibaba/x86_64-alibaba_as13-48f8h-cl-r0/led_proc_init.soc @@ -4,6 +4,13 @@ #linkscan 250000; port xe,ce linkscan=on #Load LED -#led auto on; led start - - +#sleep 10 +#vlan clear +#sleep 5 +#vlan add 1 pbm=xe,cpu ubm=xe,cpu +sleep 5 +led auto on; led start +sleep 5 +port xe48,xe49,ce en=1 +port xe48,xe49 an=1 +vlan create 250 pbm=xe48,xe49 ubm=xe48,xe49 diff --git a/device/alibaba/x86_64-alibaba_as13-48f8h-cl-r0/linkscan_led_fw.bin b/device/alibaba/x86_64-alibaba_as13-48f8h-cl-r0/linkscan_fw.bin similarity index 100% rename from device/alibaba/x86_64-alibaba_as13-48f8h-cl-r0/linkscan_led_fw.bin rename to device/alibaba/x86_64-alibaba_as13-48f8h-cl-r0/linkscan_fw.bin diff --git a/device/alibaba/x86_64-alibaba_as13-48f8h-cl-r0/minigraph.xml b/device/alibaba/x86_64-alibaba_as13-48f8h-cl-r0/minigraph.xml index 527255843b7..e8cda030050 100644 --- a/device/alibaba/x86_64-alibaba_as13-48f8h-cl-r0/minigraph.xml +++ b/device/alibaba/x86_64-alibaba_as13-48f8h-cl-r0/minigraph.xml @@ -641,290 +641,20 @@ sonic - - - - - SFP1 - 10.0.0.0/31 - - - - SFP2 - 10.0.0.2/31 - - - - SFP3 - 10.0.0.4/31 - - - - SFP4 - 10.0.0.6/31 - - - - SFP5 - 10.0.0.8/31 - - - - SFP6 - 10.0.0.10/31 - - - - SFP7 - 10.0.0.12/31 - - - - SFP8 - 10.0.0.14/31 - - - - SFP9 - 10.0.0.16/31 - - - - SFP10 - 10.0.0.18/31 - - - - SFP11 - 10.0.0.20/31 - - - - SFP12 - 10.0.0.22/31 - - - - SFP13 - 10.0.0.24/31 - - - - SFP14 - 10.0.0.26/31 - - - - SFP15 - 10.0.0.28/31 - - - - SFP16 - 10.0.0.30/31 - - - - SFP17 - 10.0.0.32/31 - - - - SFP18 - 10.0.0.34/31 - - - - SFP19 - 10.0.0.36/31 - - - - SFP20 - 10.0.0.38/31 - - - - SFP21 - 10.0.0.40/31 - - - - SFP22 - 10.0.0.42/31 - - - - SFP23 - 10.0.0.44/31 - - - - SFP24 - 10.0.0.46/31 - - - - SFP25 - 10.0.0.48/31 - - - - SFP26 - 10.0.0.50/31 - - - - SFP27 - 10.0.0.52/31 - - - - SFP28 - 10.0.0.54/31 - - - - SFP29 - 10.0.0.56/31 - - - - SFP30 - 10.0.0.58/31 - - - - SFP31 - 10.0.0.60/31 - - - - SFP32 - 10.0.0.62/31 - - - - SFP33 - 10.0.0.64/31 - - - - SFP34 - 10.0.0.66/31 - - - - SFP35 - 10.0.0.68/31 - - - - SFP36 - 10.0.0.70/31 - - - - SFP37 - 10.0.0.72/31 - - - - SFP38 - 10.0.0.74/31 - - - - SFP39 - 10.0.0.76/31 - - - - SFP40 - 10.0.0.78/31 - - - - SFP41 - 10.0.0.80/31 - - - - SFP42 - 10.0.0.82/31 - - - - SFP43 - 10.0.0.84/31 - - - - SFP44 - 10.0.0.86/31 - - - - SFP45 - 10.0.0.88/31 - - - - SFP46 - 10.0.0.90/31 - - - - SFP47 - 10.0.0.92/31 - - - - SFP48 - 10.0.0.94/31 - - - - QSFP1 - 10.0.0.96/31 - - - - QSFP2 - 10.0.0.98/31 - - - - QSFP3 - 10.0.0.100/31 - - - - QSFP4 - 10.0.0.102/31 - - - - QSFP5 - 10.0.0.104/31 - - - - QSFP6 - 10.0.0.106/31 - - - - QSFP7 - 10.0.0.108/31 - - - - QSFP8 - 10.0.0.110/31 - - - + + + Vlan100 + SFP1;SFP2;SFP3;SFP4;SFP5;SFP6;SFP7;SFP8;SFP9;SFP10;SFP11;SFP12;SFP13;SFP14;SFP15;SFP16;SFP17;SFP18;SFP19;SFP20;SFP21;SFP22;SFP23;SFP24;SFP25;SFP26;SFP27;SFP28;SFP29;SFP30;SFP31;SFP32;SFP33;SFP34;SFP35;SFP36;SFP37;SFP38;SFP39;SFP40;SFP41;SFP42;SFP43;SFP44;SFP45;SFP46;SFP47;SFP48 + True + + + + 100 + 100 + + + + @@ -939,6 +669,747 @@ + + + true + + + DeviceInterface + + true + true + 1 + SFP1 + + false + 0 + 0 + 25000 + + + DeviceInterface + + true + true + 2 + SFP2 + + false + 0 + 0 + 25000 + + + DeviceInterface + + true + true + 3 + SFP3 + + false + 0 + 0 + 25000 + + + DeviceInterface + + true + true + 4 + SFP4 + + false + 0 + 0 + 25000 + + + DeviceInterface + + true + true + 5 + SFP5 + + false + 0 + 0 + 25000 + + + DeviceInterface + + true + true + 6 + SFP6 + + false + 0 + 0 + 25000 + + + DeviceInterface + + true + true + 7 + SFP7 + + false + 0 + 0 + 25000 + + + DeviceInterface + + true + true + 8 + SFP8 + + false + 0 + 0 + 25000 + + + DeviceInterface + + true + true + 9 + SFP9 + + false + 0 + 0 + 25000 + + + DeviceInterface + + true + true + 10 + SFP10 + + false + 0 + 0 + 25000 + + + + DeviceInterface + + true + true + 11 + SFP11 + + false + 0 + 0 + 25000 + + + DeviceInterface + + true + true + 12 + SFP12 + + false + 0 + 0 + 25000 + + + DeviceInterface + + true + true + 13 + SFP13 + + false + 0 + 0 + 25000 + + + DeviceInterface + + true + true + 14 + SFP14 + + false + 0 + 0 + 25000 + + + DeviceInterface + + true + true + 15 + SFP15 + + false + 0 + 0 + 25000 + + + DeviceInterface + + true + true + 16 + SFP16 + + false + 0 + 0 + 25000 + + + DeviceInterface + + true + true + 17 + SFP17 + + false + 0 + 0 + 25000 + + + DeviceInterface + + true + true + 18 + SFP18 + + false + 0 + 0 + 25000 + + + DeviceInterface + + true + true + 19 + SFP19 + + false + 0 + 0 + 25000 + + + DeviceInterface + + true + true + 20 + SFP20 + + false + 0 + 0 + 25000 + + + DeviceInterface + + true + true + 21 + SFP21 + + false + 0 + 0 + 25000 + + + DeviceInterface + + true + true + 22 + SFP22 + + false + 0 + 0 + 25000 + + + DeviceInterface + + true + true + 23 + SFP23 + + false + 0 + 0 + 25000 + + + DeviceInterface + + true + true + 24 + SFP24 + + false + 0 + 0 + 25000 + + + DeviceInterface + + true + true + 25 + SFP25 + + false + 0 + 0 + 25000 + + + DeviceInterface + + true + true + 26 + SFP26 + + false + 0 + 0 + 25000 + + + DeviceInterface + + true + true + 27 + SFP27 + + false + 0 + 0 + 25000 + + + DeviceInterface + + true + true + 28 + SFP28 + + false + 0 + 0 + 25000 + + + DeviceInterface + + true + true + 29 + SFP29 + + false + 0 + 0 + 25000 + + + DeviceInterface + + true + true + 30 + SFP30 + + false + 0 + 0 + 25000 + + + DeviceInterface + + true + true + 31 + SFP31 + + false + 0 + 0 + 25000 + + + DeviceInterface + + true + true + 32 + SFP32 + + false + 0 + 0 + 25000 + + + DeviceInterface + + true + true + 33 + SFP33 + + false + 0 + 0 + 25000 + + + DeviceInterface + + true + true + 34 + SFP34 + + false + 0 + 0 + 25000 + + + DeviceInterface + + true + true + 35 + SFP35 + + false + 0 + 0 + 25000 + + + DeviceInterface + + true + true + 36 + SFP36 + + false + 0 + 0 + 25000 + + + DeviceInterface + + true + true + 37 + SFP37 + + false + 0 + 0 + 25000 + + + DeviceInterface + + true + true + 38 + SFP38 + + false + 0 + 0 + 25000 + + + DeviceInterface + + true + true + 39 + SFP39 + + false + 0 + 0 + 25000 + + + DeviceInterface + + true + true + 40 + SFP40 + + false + 0 + 0 + 25000 + + + DeviceInterface + + true + true + 41 + SFP41 + + false + 0 + 0 + 25000 + + + DeviceInterface + + true + true + 42 + SFP42 + + false + 0 + 0 + 25000 + + + DeviceInterface + + true + true + 43 + SFP43 + + false + 0 + 0 + 25000 + + + DeviceInterface + + true + true + 44 + SFP44 + + false + 0 + 0 + 25000 + + + DeviceInterface + + true + true + 45 + SFP45 + + false + 0 + 0 + 25000 + + + DeviceInterface + + true + true + 46 + SFP46 + + false + 0 + 0 + 25000 + + + DeviceInterface + + true + true + 47 + SFP47 + + false + 0 + 0 + 25000 + + + DeviceInterface + + true + true + 48 + SFP48 + + false + 0 + 0 + 25000 + + + DeviceInterface + + true + true + 49 + QSFP1 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 50 + QSFP2 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 51 + QSFP3 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 52 + QSFP4 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 53 + QSFP5 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 54 + QSFP6 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 55 + QSFP7 + + false + 0 + 0 + 100000 + + + DeviceInterface + + true + true + 56 + QSFP8 + + false + 0 + 0 + 100000 + + + true + 0 + AS13-48F8H + + + + diff --git a/device/alibaba/x86_64-alibaba_as13-48f8h-cl-r0/opennsl-postinit.cfg b/device/alibaba/x86_64-alibaba_as13-48f8h-cl-r0/opennsl-postinit.cfg deleted file mode 100644 index 7008c14c0ff..00000000000 --- a/device/alibaba/x86_64-alibaba_as13-48f8h-cl-r0/opennsl-postinit.cfg +++ /dev/null @@ -1,3 +0,0 @@ -linkscan 250000; port xe,ce linkscan=on -sleep 1 -led auto on; led start diff --git a/device/alibaba/x86_64-alibaba_as13-48f8h-cl-r0/plugins/sfputil.py b/device/alibaba/x86_64-alibaba_as13-48f8h-cl-r0/plugins/sfputil.py index e969911a97a..f7e53b35c94 100755 --- a/device/alibaba/x86_64-alibaba_as13-48f8h-cl-r0/plugins/sfputil.py +++ b/device/alibaba/x86_64-alibaba_as13-48f8h-cl-r0/plugins/sfputil.py @@ -70,6 +70,11 @@ def __init__(self): x + self.EEPROM_OFFSET) SfpUtilBase.__init__(self) + def _do_write_file(self, file_handle, offset, value): + file_handle.seek(offset) + file_handle.write(hex(value)) + file_handle.close() + def get_presence(self, port_num): # Check for invalid port_num @@ -203,3 +208,39 @@ def tx_disable(self, port_num, disable): return False return True + + def reset_all(self): + result = True + port_sysfs_path = [] + for port in range(self.port_start, self.port_end+1): + if port not in self.qsfp_ports: + continue + + presence = self.get_presence(port) + if not presence: + continue + + try: + port_name = self.get_port_name(port) + sysfs_path = "/".join([self.PORT_INFO_PATH, + port_name, "qsfp_reset"]) + reg_file = open(sysfs_path, "w") + port_sysfs_path.append(sysfs_path) + except IOError as e: + result = False + continue + + self._do_write_file(reg_file, 0, 0) + + time.sleep(1) + + for sysfs_path in port_sysfs_path: + try: + reg_file = open(sysfs_path, "w") + except IOError as e: + result = False + continue + + self._do_write_file(reg_file, 0, 1) + + return result diff --git a/device/alibaba/x86_64-alibaba_as13-48f8h-cl-r0/td3-as13-48f8h.config.bcm b/device/alibaba/x86_64-alibaba_as13-48f8h-cl-r0/td3-as13-48f8h.config.bcm index a49674bb82e..7d8db0ca3f5 100644 --- a/device/alibaba/x86_64-alibaba_as13-48f8h-cl-r0/td3-as13-48f8h.config.bcm +++ b/device/alibaba/x86_64-alibaba_as13-48f8h-cl-r0/td3-as13-48f8h.config.bcm @@ -19,7 +19,7 @@ serdes_if_type_xe=13 serdes_if_type_ce=14 pbmp_gport_stack.0=0x0000000000000000000000000000000000000000000000000000000000000000 #pbmp_xport_xe=0x48878787f8787808dfe1e0203e1e1e022 -pbmp_xport_xe=0x8808787f87808088221e1e1fe1e1e1fe +pbmp_xport_xe=0x48808787f8780808c221e1e1fe1e1e1fe portmap_1.0=1:25 @@ -78,6 +78,8 @@ portmap_110.0=108:25 portmap_115.0=113:100 portmap_123.0=121:100 portmap_127.0=125:100 +portmap_66.0=129:10:m +portmap_130.0=128:10:m phy_chain_tx_lane_map_physical{1.0}=0x0123 phy_chain_rx_lane_map_physical{1.0}=0x1032 diff --git a/device/alibaba/x86_64-alibaba_as23-128h-cl-r0/custom_led.bin b/device/alibaba/x86_64-alibaba_as23-128h-cl-r0/custom.bin similarity index 100% rename from device/alibaba/x86_64-alibaba_as23-128h-cl-r0/custom_led.bin rename to device/alibaba/x86_64-alibaba_as23-128h-cl-r0/custom.bin diff --git a/device/alibaba/x86_64-alibaba_as23-128h-cl-r0/led_proc_init.soc b/device/alibaba/x86_64-alibaba_as23-128h-cl-r0/led_proc_init.soc index 28cd4b9bc9f..cfb257b0a0e 100644 --- a/device/alibaba/x86_64-alibaba_as23-128h-cl-r0/led_proc_init.soc +++ b/device/alibaba/x86_64-alibaba_as23-128h-cl-r0/led_proc_init.soc @@ -4,6 +4,10 @@ #linkscan 250000; port xe,ce linkscan=on #Load LED -#led auto on; led start - - +sleep 20 +vlan clear +sleep 5 +led auto on; led start +port xe0,xe1 en=1 +port xe0,xe1 an=1 +vlan create 250 pbm=xe0,xe1 ubm=xe0,xe1 diff --git a/device/alibaba/x86_64-alibaba_as23-128h-cl-r0/linkscan_led_fw.bin b/device/alibaba/x86_64-alibaba_as23-128h-cl-r0/linkscan_fw.bin similarity index 100% rename from device/alibaba/x86_64-alibaba_as23-128h-cl-r0/linkscan_led_fw.bin rename to device/alibaba/x86_64-alibaba_as23-128h-cl-r0/linkscan_fw.bin diff --git a/device/alibaba/x86_64-alibaba_as23-128h-cl-r0/opennsl-postinit.cfg b/device/alibaba/x86_64-alibaba_as23-128h-cl-r0/opennsl-postinit.cfg deleted file mode 100644 index 7008c14c0ff..00000000000 --- a/device/alibaba/x86_64-alibaba_as23-128h-cl-r0/opennsl-postinit.cfg +++ /dev/null @@ -1,3 +0,0 @@ -linkscan 250000; port xe,ce linkscan=on -sleep 1 -led auto on; led start diff --git a/device/alibaba/x86_64-alibaba_as23-128h-cl-r0/plugins/sfputil.py b/device/alibaba/x86_64-alibaba_as23-128h-cl-r0/plugins/sfputil.py index 2831a75af54..b721bbaee7e 100755 --- a/device/alibaba/x86_64-alibaba_as23-128h-cl-r0/plugins/sfputil.py +++ b/device/alibaba/x86_64-alibaba_as23-128h-cl-r0/plugins/sfputil.py @@ -70,6 +70,11 @@ def __init__(self): x + self.EEPROM_OFFSET) SfpUtilBase.__init__(self) + def _do_write_file(self, file_handle, offset, value): + file_handle.seek(offset) + file_handle.write(hex(value)) + file_handle.close() + def get_presence(self, port_num): # Check for invalid port_num @@ -203,3 +208,40 @@ def tx_disable(self, port_num, disable): return False return True + + def reset_all(self): + result = True + port_sysfs_path = [] + for port in range(self.port_start, self.port_end+1): + if port not in self.qsfp_ports: + continue + + presence = self.get_presence(port) + if not presence: + continue + + try: + port_name = self.get_port_name(port) + sysfs_path = "/".join([self.PORT_INFO_PATH, + port_name, "qsfp_reset"]) + print(sysfs_path) + reg_file = open(sysfs_path, "w") + port_sysfs_path.append(sysfs_path) + except IOError as e: + result = False + continue + + self._do_write_file(reg_file, 0, 0) + + time.sleep(1) + + for sysfs_path in port_sysfs_path: + try: + reg_file = open(sysfs_path, "w") + except IOError as e: + result = False + continue + + self._do_write_file(reg_file, 0, 1) + + return result diff --git a/device/alibaba/x86_64-alibaba_as23-128h-cl-r0/th3-as23-128h.config.bcm b/device/alibaba/x86_64-alibaba_as23-128h-cl-r0/th3-as23-128h.config.bcm index 354e0f2fad0..a47d27958fd 100644 --- a/device/alibaba/x86_64-alibaba_as23-128h-cl-r0/th3-as23-128h.config.bcm +++ b/device/alibaba/x86_64-alibaba_as23-128h-cl-r0/th3-as23-128h.config.bcm @@ -1,4 +1,4 @@ -pbmp_xport_xe.0=0x0ffff0ffff0ffff0ffff0ffff0ffff0ffff1fffe +pbmp_xport_xe.0=0x0ffff0ffff4ffff0ffff0ffff0ffff4ffff1fffe ccm_dma_enable=0 ccmdma_intr_enable=0 ctr_evict_enable=0 @@ -14,6 +14,11 @@ serdes_tx_taps_ce=pam4:0:140:0:0:0:0 init_all_modules=0 mdio_output_delay=64 +portmap_38=257:10 +portmap_118=258:10 +dport_map_port_38=129 +dport_map_port_118=130 + #BC1 portmap_5=9:100:2 portmap_6=11:100:2 diff --git a/files/build_templates/sonic_debian_extension.j2 b/files/build_templates/sonic_debian_extension.j2 index 0eeba7bad96..23ec81d65ac 100644 --- a/files/build_templates/sonic_debian_extension.j2 +++ b/files/build_templates/sonic_debian_extension.j2 @@ -144,6 +144,28 @@ sudo LANG=C chroot $FILESYSTEM_ROOT systemctl enable ntp-config.service sudo cp $IMAGE_CONFIGS/ntp/ntp-config.sh $FILESYSTEM_ROOT/usr/bin/ sudo cp $IMAGE_CONFIGS/ntp/ntp.conf.j2 $FILESYSTEM_ROOT_USR_SHARE_SONIC_TEMPLATES/ +# Copy POAP configuration files and templates +sudo cp $IMAGE_CONFIGS/poap/poap_autoinstall_diag $FILESYSTEM_ROOT/usr/bin/ +sudo chmod a+x $FILESYSTEM_ROOT/usr/bin/poap_autoinstall_diag +sudo cp $IMAGE_CONFIGS/poap/poap.ok $FILESYSTEM_ROOT/etc/sonic +sudo cp $IMAGE_CONFIGS/poap/poap.service $FILESYSTEM_ROOT/etc/systemd/system/ +sudo LANG=C chroot $FILESYSTEM_ROOT systemctl enable poap.service + +# Copy diag_app configuration files and templates +sudo cp $IMAGE_CONFIGS/diag_app/Ali_Diag_V2.0.4.deb $FILESYSTEM_ROOT/home/ + +# Copy port_led configuration files and templates +sudo cp $IMAGE_CONFIGS/port_led/port-led $FILESYSTEM_ROOT/usr/bin/ +sudo chmod a+x $FILESYSTEM_ROOT/usr/bin/port-led +sudo cp $IMAGE_CONFIGS/port_led/port-alarm-led.py $FILESYSTEM_ROOT/usr/local/bin/ +sudo chmod a+x $FILESYSTEM_ROOT/usr/local/bin/port-alarm-led.py +sudo cp $IMAGE_CONFIGS/port_led/sonic_sfp.tar.gz $FILESYSTEM_ROOT/home/ +sudo cp $IMAGE_CONFIGS/port_led/port-alarm-led.service $FILESYSTEM_ROOT/etc/systemd/system/ +sudo tar zxvf $FILESYSTEM_ROOT/home/sonic_sfp.tar.gz -C $FILESYSTEM_ROOT/usr/local/lib/python2.7/dist-packages/ +sudo LANG=C chroot $FILESYSTEM_ROOT systemctl daemon-reload +sudo LANG=C chroot $FILESYSTEM_ROOT systemctl enable port-alarm-led.service +sudo LANG=C chroot $FILESYSTEM_ROOT systemctl start port-alarm-led.service + # Copy warmboot-finalizer files sudo LANG=C cp $IMAGE_CONFIGS/warmboot-finalizer/finalize-warmboot.sh $FILESYSTEM_ROOT/usr/local/bin/finalize-warmboot.sh sudo LANG=C cp $IMAGE_CONFIGS/warmboot-finalizer/warmboot-finalizer.service $FILESYSTEM_ROOT/etc/systemd/system/ diff --git a/files/image_config/diag_app/Ali_Diag_V2.0.4.deb b/files/image_config/diag_app/Ali_Diag_V2.0.4.deb new file mode 100644 index 00000000000..2b88b03c416 Binary files /dev/null and b/files/image_config/diag_app/Ali_Diag_V2.0.4.deb differ diff --git a/files/image_config/interfaces/interfaces.j2 b/files/image_config/interfaces/interfaces.j2 index e2ee58e9c32..525cd66f4fe 100644 --- a/files/image_config/interfaces/interfaces.j2 +++ b/files/image_config/interfaces/interfaces.j2 @@ -44,7 +44,7 @@ iface eth0 {{ 'inet' if prefix | ipv4 else 'inet6' }} static {# TODO: COPP policy type rules #} {% endfor %} {% else %} -iface eth0 inet dhcp +iface eth0 inet manual {% endif %} # {% endblock mgmt_interface %} diff --git a/files/image_config/logrotate/logrotate.d/rsyslog b/files/image_config/logrotate/logrotate.d/rsyslog index 6788762d768..3334b542c2b 100644 --- a/files/image_config/logrotate/logrotate.d/rsyslog +++ b/files/image_config/logrotate/logrotate.d/rsyslog @@ -34,8 +34,6 @@ /var/log/telemetry.log /var/log/quagga/bgpd.log /var/log/quagga/zebra.log -/var/log/swss/sairedis.rec -/var/log/swss/swss.rec { size 1M rotate 5000 @@ -95,3 +93,66 @@ fi endscript } + + +/var/log/swss/sairedis.rec +/var/log/swss/swss.rec +{ + size 20M + rotate 20 + missingok + notifempty + compress + delaycompress + nosharedscripts + prerotate + # Adjust NUM_LOGS_TO_ROTATE to reflect number of log files that trigger this block specified above + NUM_LOGS_TO_ROTATE=8 + + # Adjust LOG_FILE_ROTATE_SIZE_KB to reflect the "size" parameter specified above, in kB + LOG_FILE_ROTATE_SIZE_KB=1024 + + # Reserve space for btmp, wtmp, dpkg.log, monit.log, etc., as well as logs that + # should be disabled, just in case they get created and rotated + RESERVED_SPACE_KB=4096 + + VAR_LOG_SIZE_KB=$(df -k /var/log | sed -n 2p | awk '{ print $2 }') + + # Limit usable space to 90% of the partition minus the reserved space for other logs + USABLE_SPACE_KB=$(( (VAR_LOG_SIZE_KB * 90 / 100) - RESERVED_SPACE_KB)) + + # Set our threshold so as to maintain enough space to write all logs from empty to full + # Most likely, some logs will have non-zero size when this is called, so this errs on the side + # of caution, giving us a bit of a cushion if a log grows quickly and passes its rotation size + THRESHOLD_KB=$((USABLE_SPACE_KB - (NUM_LOGS_TO_ROTATE * LOG_FILE_ROTATE_SIZE_KB * 2))) + + while true; do + USED_KB=$(du -s /var/log | awk '{ print $1; }') + + if [ $USED_KB -lt $THRESHOLD_KB ]; then + break + else + OLDEST_ARCHIVE_FILE=$(find /var/log -type f -printf '%T+ %p\n' | grep -E '.+\.[0-9]+(\.gz)?$' | sort | head -n 1 | awk '{ print $2; }') + + if [ -z "$OLDEST_ARCHIVE_FILE" ]; then + logger -p syslog.err -t "logrotate" "No archive file to delete -- potential for filling up /var/log partition!" + break + fi + + logger -p syslog.info -t "logrotate" "Deleting archive file $OLDEST_ARCHIVE_FILE to free up space" + rm -rf "$OLDEST_ARCHIVE_FILE" + fi + done + endscript + postrotate + if [ $(echo $1 | grep -c "/var/log/swss/") -gt 0 ]; then + pgrep -x orchagent | xargs /bin/kill -HUP 2>/dev/null || true + else + # Calling kill directly instead of 'service rsyslog rotate >/dev/null' due + # to bug in init-system-helpers. Bug has apparently been fixed in v1.47. + # However, Debian Jessie is still using v1.22. + # See https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=672218 + kill -HUP $(cat /var/run/rsyslogd.pid) + fi + endscript +} diff --git a/files/image_config/platform/rc.local b/files/image_config/platform/rc.local index 3596eb18419..c96fcc07cb2 100755 --- a/files/image_config/platform/rc.local +++ b/files/image_config/platform/rc.local @@ -88,8 +88,33 @@ update_mgmt_interface_macaddr() { sed -i "/eth0/ s/ATTR{address}==\"$old_mac\"/ATTR{address}==\"$new_mac\"/g" /etc/udev/rules.d/70-persistent-net.rules } +diag_install() { + echo "Diag install start ..." + sleep 200 + dpkg -i /home/Ali_Diag_V2.0.4.deb +} + +boot_action() { + #cleanos + CLEAN_OS_FILE="/etc/sonic/cleanos" + if [ -f $CLEAN_OS_FILE ]; then + echo "clean up os" + sonic_installer cleanup -y + rm -f $CLEAN_OS_FILE + fi + + decode-syseeprom --init + + #diag install + if [ ! -d /usr/local/CPU_Diag ];then + echo "Diag install" + diag_install > /var/log/diagInstallLog & + fi +} + firsttime_exit() { rm -rf $FIRST_BOOT_FILE + boot_action exit 0 } @@ -354,4 +379,5 @@ if [ -f $FIRST_BOOT_FILE ]; then firsttime_exit fi +boot_action exit 0 diff --git a/files/image_config/poap/poap.ok b/files/image_config/poap/poap.ok new file mode 100644 index 00000000000..e69de29bb2d diff --git a/files/image_config/poap/poap.service b/files/image_config/poap/poap.service new file mode 100644 index 00000000000..639eca04aa4 --- /dev/null +++ b/files/image_config/poap/poap.service @@ -0,0 +1,13 @@ +[Unit] +Description=poap service +Requires=database.service +After=database.service + +[Service] +User=root +ExecStart=/usr/bin/poap_autoinstall_diag +Restart=on-failure +RestartSec=2s + +[Install] +WantedBy=multi-user.target diff --git a/files/image_config/poap/poap_autoinstall_diag b/files/image_config/poap/poap_autoinstall_diag new file mode 100644 index 00000000000..63185689cf6 Binary files /dev/null and b/files/image_config/poap/poap_autoinstall_diag differ diff --git a/files/image_config/port_led/port-alarm-led.py b/files/image_config/port_led/port-alarm-led.py new file mode 100644 index 00000000000..6fbcef975ed --- /dev/null +++ b/files/image_config/port_led/port-alarm-led.py @@ -0,0 +1,589 @@ +#!/usr/bin/python +import threading +import commands +import click +import time +import argparse +import logging +import logging . handlers +from tabulate import tabulate +o0OO00 = "PORT_ALARM_LED" +oo = o0OO00 +i1iII1IiiIiI1 = "/var/log/%s.log" % o0OO00 . lower ( ) +iIiiiI1IiI1I1 = 30 +o0OoOoOO00 = 3 +o0OOO = None +iIiiiI = { + "100G_SR4_QSFP28" : - 5.3 , + "100G_PSM4_QSFP28" : - 7.6 , + "100G_CWDM4_QSFP28" : - 6.5 , + "100G_LR4_QSFP28" : - 9 , + "100G_ER4_QSFP28" : - 17 , + "25G_AOC_SFP28" : - 5.3 , + "25G_SR_SFP28" : - 5.3 + } +o0oO0 = 3 +oo00 = 4 +o00 = 6 +Oo0oO0ooo = 7 +def i1iIIII ( docker , wait_seconds ) : + I1 = 360 / 3 + O0OoOoo00o = 'docker ps | grep %s' % docker + try : + while I1 > 0 : + OoOooOOOO = commands . getoutput ( O0OoOoo00o ) + i11iiII = OoOooOOOO . splitlines ( ) + for I1iiiiI1iII in i11iiII : + IiIi11i = I1iiiiI1iII . strip ( ) . split ( ) + if len ( IiIi11i ) == 10 or len ( IiIi11i ) == 11 : + if IiIi11i [ 8 ] == 'seconds' or IiIi11i [ 8 ] == 'second' : + if int ( IiIi11i [ 7 ] ) > wait_seconds : + return True + elif IiIi11i [ 8 ] == 'minutes' : + if int ( IiIi11i [ 7 ] * 60 ) > wait_seconds : + return True + elif IiIi11i [ 8 ] . startswith ( 'hour' ) or IiIi11i [ 9 ] . startswith ( 'hour' ) : + return True + elif IiIi11i [ 8 ] . startswith ( 'day' ) or IiIi11i [ 8 ] . startswith ( 'week' ) or IiIi11i [ 8 ] . startswith ( 'month' ) : + return True + else : + return False + I1 -= 3 + time . sleep ( 3 ) + except Exception : + iii11iII ( "wait for docker %s startup failed" % docker ) + return False + return False +class oOo ( object ) : + def __init__ ( self , module_name , log_file_name ) : + self . log = logging . getLogger ( module_name ) + self . log . setLevel ( logging . DEBUG ) + ooOoOoo0O = 4 * 1024 * 1024 + OooO0 = 1 + ooO0o0Oo = logging . handlers . RotatingFileHandler ( log_file_name , + maxBytes = ooOoOoo0O , + backupCount = OooO0 ) + ooO0o0Oo . setLevel ( logging . DEBUG ) + o0o0oOOOo0oo = logging . Formatter ( + "%(asctime)s - %(name)s - %(levelname)s - %(message)s" ) + ooO0o0Oo . setFormatter ( o0o0oOOOo0oo ) + self . log . addHandler ( ooO0o0Oo ) + self . log_fn_map = { Oo0oO0ooo : self . log . debug , + o00 : self . log . info , + oo00 : self . log . warning , + o0oO0 : self . log . error } + def sys_log ( self , log_level , info ) : + if log_level in self . log_fn_map : + self . log_fn_map [ log_level ] ( info ) +def oO ( info ) : + o0OOO . sys_log ( Oo0oO0ooo , info ) +def O0ooOooooO ( info ) : + o0OOO . sys_log ( o00 , info ) +def oo0 ( info ) : + o0OOO . sys_log ( oo00 , info ) +def iii11iII ( info ) : + o0OOO . sys_log ( o0oO0 , info ) +class o0OOoo0OO0OOO ( object ) : + def __init__ ( self , mgr ) : + self . sfp_presence = { } + self . mgr = mgr + def sfp_update ( self ) : + O0OoOoo00o = "sudo sfputil show presence" + oo0OooOOo0 , OoOooOOOO = commands . getstatusoutput ( O0OoOoo00o ) + if oo0OooOOo0 != 0 : + iii11iII ( "cmd: %s failed" % O0OoOoo00o ) + return + i11iiII = OoOooOOOO . splitlines ( ) + for I1iiiiI1iII in i11iiII : + if I1iiiiI1iII . startswith ( "Ethernet" ) : + IiII1I11i1I1I = I1iiiiI1iII . split ( ) + if I1iiiiI1iII . find ( "Not present" ) != - 1 : + oO0Oo = "no" + elif I1iiiiI1iII . find ( "Present" ) != - 1 : + oO0Oo = "yes" + else : + continue + O0o0 = IiII1I11i1I1I [ 0 ] + if O0o0 in self . sfp_presence : + if oO0Oo != self . sfp_presence [ O0o0 ] : + self . syncup ( O0o0 , oO0Oo ) + else : + self . syncup ( O0o0 , oO0Oo ) + def sfp_poll ( self ) : + oO0OOoO0 = { } + O0OoOoo00o = "sudo sfputil show presence" + oo0OooOOo0 , OoOooOOOO = commands . getstatusoutput ( O0OoOoo00o ) + if oo0OooOOo0 != 0 : + return None + i11iiII = OoOooOOOO . splitlines ( ) + for I1iiiiI1iII in i11iiII : + if I1iiiiI1iII . startswith ( "Ethernet" ) : + IiII1I11i1I1I = I1iiiiI1iII . split ( ) + if I1iiiiI1iII . find ( "Not present" ) != - 1 : + oO0Oo = "no" + elif I1iiiiI1iII . find ( "Present" ) != - 1 : + oO0Oo = "yes" + else : + continue + O0o0 = IiII1I11i1I1I [ 0 ] + oO0OOoO0 [ O0o0 ] = oO0Oo + iI1ii1Ii = len ( oO0OOoO0 ) + oooo000 = [ 32 , 56 , 128 ] + if iI1ii1Ii not in oooo000 : + return None + return oO0OOoO0 + def syncup ( self , port , presence ) : + iii11iII ( "sync up: port %s presence %s" % ( port , presence ) ) + self . sfp_presence [ port ] = presence + self . mgr . handle_sfp_presence ( port , presence ) + def run ( self ) : + while True : + self . sfp_update ( ) + time . sleep ( o0OoOoOO00 ) +class i1I11i1I ( object ) : + def __init__ ( self , on_count , on_check_interval , off_period ) : + self . on_count = on_count + self . on_check_interval = on_check_interval + self . off_period = off_period + self . dom_sync_task_running = False + self . dom_sync_task = None + self . sfp_detector = None + self . alarm_status = { } + self . admin_status = { } + self . sfp_present = { } + self . port_rx_power_low = { } + self . power_normal_count = { } + self . reasons = { } + self . dom_table = { } + self . port_indice = { } + def initialize ( self ) : + self . sfp_detector = o0OOoo0OO0OOO ( self ) + if self . sfp_detector is None : + iii11iII ( "Failed to create SFP detector." ) + return False + return self . init_all_ports_status ( ) + def init_all_ports_status ( self ) : + if not self . update_ports_admin_status ( ) : + iii11iII ( "Failed to update ports admin status." ) + return False + i11i1I1 = self . admin_status . keys ( ) + ii1I = "default" + for O0o0 in i11i1I1 : + Oo0ooOo0o = self . set_port_alarm_led ( O0o0 , "off" , ii1I ) + if not Oo0ooOo0o : + self . alarm_status [ O0o0 ] = "on" + self . power_normal_count [ O0o0 ] = self . off_period + try : + o0OO0oOO0O0 = self . sfp_detector . sfp_poll ( ) + if not o0OO0oOO0O0 : + iii11iII ( "Failed to get sfp initial status" ) + return False + for O0o0 in i11i1I1 : + self . handle_sfp_presence ( O0o0 , o0OO0oOO0O0 [ O0o0 ] ) + except Exception as iIi1IIIi1 : + iii11iII ( "Failed: sfp detector poll failed, %s" % str ( iIi1IIIi1 ) ) + return False + oO ( "init all ports status done." ) + return True + def update_ports_admin_status ( self ) : + O0OoOoo00o = "show interfaces status" + oo0OooOOo0 , OoOooOOOO = commands . getstatusoutput ( O0OoOoo00o ) + if oo0OooOOo0 != 0 : + iii11iII ( "Failed to exec: %s" % O0OoOoo00o ) + return False + i11iiII = OoOooOOOO . splitlines ( ) + if len ( i11iiII ) < 32 + 2 : + iii11iII ( "Failed: %s outputs length too short." % O0OoOoo00o ) + return False + OOOOoOoo0O0O0 = - 1 + if not i11iiII [ 0 ] . strip ( ) . startswith ( "Interface" ) : + if not i11iiII [ 1 ] . strip ( ) . startswith ( "Interface" ) : + iii11iII ( "Failed: (%s) outputs format invalid" % O0OoOoo00o ) + return False + OOOOoOoo0O0O0 = 1 + else : + OOOOoOoo0O0O0 = 0 + IiII1I11i1I1I = i11iiII [ OOOOoOoo0O0O0 ] . split ( ) + IIiIi1iI = - 1 + for i1IiiiI1iI in range ( len ( IiII1I11i1I1I ) ) : + if IiII1I11i1I1I [ i1IiiiI1iI ] == "Admin" : + IIiIi1iI = i1IiiiI1iI + break + if IIiIi1iI == - 1 : + iii11iII ( "Failed: %s invalid, Admin not found" % O0OoOoo00o ) + return False + iii = 0 + for I1iiiiI1iII in i11iiII : + if I1iiiiI1iII . strip ( ) . startswith ( "Ethernet" ) : + IiII1I11i1I1I = I1iiiiI1iII . split ( ) + if len ( IiII1I11i1I1I ) < IIiIi1iI : + iii11iII ( "Failed: line(%s) format invalid" % I1iiiiI1iII ) + return False + self . admin_status [ IiII1I11i1I1I [ 0 ] ] = IiII1I11i1I1I [ IIiIi1iI ] + self . port_indice [ IiII1I11i1I1I [ 0 ] ] = iii + iii += 1 + oooo000 = [ 32 , 56 , 128 ] + if iii not in oooo000 : + iii11iII ( "Failed: total updated ports %d not expected" % iii ) + return False + return True + def set_port_alarm_led ( self , port , admin_status , reason ) : + iii11iII ( "Set port %s alarm_led %s, reason %s" % ( port , admin_status , reason ) ) + II111iiiI1Ii = "Ethernet" + o0O0OOO0Ooo = port . find ( II111iiiI1Ii ) + if o0O0OOO0Ooo == - 1 : + iii11iII ( "Failed to set port %s alarm to %s" % ( port , admin_status ) ) + return False + try : + i1 = int ( port [ o0O0OOO0Ooo + len ( II111iiiI1Ii ) : ] ) + except Exception as iIi1IIIi1 : + iii11iII ( "Failed to get port from name %s: %s" % ( port , str ( iIi1IIIi1 ) ) ) + return False + O0OoOoo00o = "sudo port-led %s %d" % ( admin_status , i1 ) + oo0OooOOo0 , I1IiiI = commands . getstatusoutput ( O0OoOoo00o ) + if oo0OooOOo0 != 0 : + iii11iII ( "Failed to set port %s alarm to %s, %s" + % ( port , admin_status , I1IiiI ) ) + return False + self . alarm_status [ port ] = admin_status + self . reasons [ port ] = reason + return True + def show_port_alarm_led_status ( self ) : + oO00OOoO00 = [ "Port" , "Status" , "Reason" ] + IiI111111IIII = [ ] + i11i1I1 = self . alarm_status . keys ( ) + for O0o0 in i11i1I1 : + IiI111111IIII . append ( [ O0o0 , self . alarm_status [ O0o0 ] , + self . reasons [ O0o0 ] ] ) + if len ( IiI111111IIII ) : + click . echo ( tabulate ( IiI111111IIII , oO00OOoO00 , tablefmt = 'simple' ) ) + def dump_port_alarm_led ( self ) : + O0OoOoo00o = "sudo port-led show" + OoOooOOOO = commands . getoutput ( O0OoOoo00o ) + O0ooOooooO ( OoOooOOOO ) + def handle_alarm_led ( self , port_name ) : + IIi1 = self . port_rx_power_low . get ( port_name ) + if IIi1 : + if self . alarm_status [ port_name ] == "off" : + if self . sfp_present [ port_name ] : + oO ( "rx low, alarm off, set port %s alarm led on" + % port_name ) + ii1I = "rx power low, sfp present" + self . set_port_alarm_led ( port_name , "on" , ii1I ) + else : + if self . alarm_status [ port_name ] == "on" : + if self . power_normal_count [ port_name ] >= self . off_period : + ii1I = "rx power normal" + self . set_port_alarm_led ( port_name , "off" , ii1I ) + def handle_sfp_presence ( self , port , presence ) : + self . sfp_present [ port ] = presence + if presence == "yes" : + self . handle_alarm_led ( port ) + else : + if self . alarm_status [ port ] == "on" : + oO ( "port %s plugged out, alarm on, set it off" % port ) + ii1I = "sfp not present" + self . set_port_alarm_led ( port , "off" , ii1I ) + if port in self . port_rx_power_low : + self . port_rx_power_low [ port ] = False + self . power_normal_count [ port ] = self . off_period + def handle_rx_power_low ( self , port ) : + self . handle_alarm_led ( port ) + def start_dom_sync_task ( self ) : + self . dom_sync_task_running = True + self . dom_sync_task = threading . Thread ( target = self . dom_sync_proc ) + if self . dom_sync_task is None : + iii11iII ( "Failed to create dom sync task." ) + self . dom_sync_task_running = False + return False + self . dom_sync_task . setDaemon ( True ) + self . dom_sync_task . start ( ) + oO ( "dom sync task started" ) + return True + def update_dom_table ( self ) : + O0OoOoo00o = "sfputil show eeprom -d" + oo0OooOOo0 , OoOooOOOO = commands . getstatusoutput ( O0OoOoo00o ) + if oo0OooOOo0 != 0 : + iii11iII ( "Failed to exec %s" % O0OoOoo00o ) + return + i11iiII = OoOooOOOO . splitlines ( ) + oOoooo0O0Oo = False + o00ooO = { } + OO0OO0O00oO0 = [ ] + oOI1Ii1I1 = "" + for I1iiiiI1iII in i11iiII : + if I1iiiiI1iII . startswith ( "Ethernet" ) : + oOI1Ii1I1 = I1iiiiI1iII . split ( ) [ 0 ] [ : - 1 ] + if I1iiiiI1iII . find ( "not detected" ) != - 1 : + if oOI1Ii1I1 in self . dom_table : + self . dom_table . pop ( oOI1Ii1I1 ) + continue + oOoooo0O0Oo = True + oOI1Ii1I1 = I1iiiiI1iII . split ( ) [ 0 ] [ : - 1 ] + continue + elif oOoooo0O0Oo : + if I1iiiiI1iII == "" : + oOoooo0O0Oo = False + o00ooO [ oOI1Ii1I1 ] = OO0OO0O00oO0 + OO0OO0O00oO0 = [ ] + continue + OO0OO0O00oO0 . append ( I1iiiiI1iII ) + for O0o0 in o00ooO . keys ( ) : + IiI1i = o00ooO [ O0o0 ] + o0O = None + o00iI = None + O0O0Oooo0o = None + oOOoo00O00o = None + O0O00Oo = None + oooooo0O000o = None + OoO = { } + for ooO0O0O0ooOOO in IiI1i : + if ooO0O0O0ooOOO . find ( "TypeOfTransceiver" ) != - 1 : + o0O = ooO0O0O0ooOOO . split ( ) [ 1 ] + elif ooO0O0O0ooOOO . find ( "RXPower:" ) != - 1 : + o00iI = ooO0O0O0ooOOO . split ( ) [ 1 ] + elif ooO0O0O0ooOOO . find ( "RX1Power:" ) != - 1 : + O0O0Oooo0o = ooO0O0O0ooOOO . split ( ) [ 1 ] + elif ooO0O0O0ooOOO . find ( "RX2Power:" ) != - 1 : + oOOoo00O00o = ooO0O0O0ooOOO . split ( ) [ 1 ] + elif ooO0O0O0ooOOO . find ( "RX3Power:" ) != - 1 : + O0O00Oo = ooO0O0O0ooOOO . split ( ) [ 1 ] + elif ooO0O0O0ooOOO . find ( "RX4Power:" ) != - 1 : + oooooo0O000o = ooO0O0O0ooOOO . split ( ) [ 1 ] + OoO [ "TypeOfTransceiver" ] = o0O + if o00iI : + oOOo0O00o = "MonitorData" + iIiIi11 = { "RXPower" : o00iI } + OoO [ oOOo0O00o ] = iIiIi11 + elif O0O0Oooo0o : + oOOo0O00o = "ChannelMonitorValues" + iIiIi11 = { "RX1Power" : O0O0Oooo0o , + "RX2Power" : oOOoo00O00o , + "RX3Power" : O0O00Oo , + "RX4Power" : oooooo0O000o } + OoO [ oOOo0O00o ] = iIiIi11 + else : + if o0O and o0O . find ( "DAC" ) == - 1 : + iii11iII ( "Type not recognized: %s" % o0O ) + continue + self . dom_table [ O0o0 ] = OoO + def dom_sync_proc ( self ) : + OOoO = 0 + while self . dom_sync_task_running is True : + self . update_dom_table ( ) + OO0O000 = { } + iiIiI1i1 = self . dom_table + i11i1I1 = iiIiI1i1 . keys ( ) + OOoO = ( OOoO + 1 ) % 10 + if OOoO == 0 : + oO ( "[DOM sync] ports are:" ) + oO ( i11i1I1 ) + for O0o0 in i11i1I1 : + if "TypeOfTransceiver" not in iiIiI1i1 [ O0o0 ] : + self . port_rx_power_low [ O0o0 ] = False + self . power_normal_count [ O0o0 ] += 1 + oO ( "Port %s TypeOfTransceiver unknown" % O0o0 ) + continue + o0O = iiIiI1i1 [ O0o0 ] [ "TypeOfTransceiver" ] + if o0O is None : + self . port_rx_power_low [ O0o0 ] = False + self . power_normal_count [ O0o0 ] += 1 + oO ( "Port %s TransceiverType is None" % O0o0 ) + continue + if o0O in iIiiiI : + ooooo0O0000oo = iIiiiI [ o0O ] + else : + self . port_rx_power_low [ O0o0 ] = False + self . power_normal_count [ O0o0 ] += 1 + continue + if "ChannelMonitorValues" in iiIiI1i1 [ O0o0 ] : + OoOOo0OOoO = iiIiI1i1 [ O0o0 ] [ "ChannelMonitorValues" ] + ooO0O00Oo0o = False + OOO = 0 + for oo0o0OO0 in range ( 1 , 5 ) : + oooO = "RX%dPower" % oo0o0OO0 + if oooO in OoOOo0OOoO : + o00iI = OoOOo0OOoO [ oooO ] + if o00iI == "-40.0000dBm" or o00iI == "-infdBm" : + OOO += 1 + else : + try : + o0O0OOO0Ooo = o00iI . find ( "dBm" ) + if o0O0OOO0Ooo == - 1 : + oO ( "port %s, %s: can not find dBm" + % ( O0o0 , o00iI ) ) + continue + o00iI = o00iI [ : o0O0OOO0Ooo ] + o00iI = float ( o00iI ) + if o00iI < ooooo0O0000oo : + ooO0O00Oo0o = True + except ValueError as iiii1 : + oO ( "port %s channel %d rx power %s " + "not valid, reason %s" + % ( O0o0 , oo0o0OO0 , o00iI , str ( iiii1 ) ) ) + continue + if OOO >= 2 : + ooO0O00Oo0o = False + if ooO0O00Oo0o : + OO0O000 [ O0o0 ] = { "low_thd" : ooooo0O0000oo , + "channel" : 4 } + else : + self . port_rx_power_low [ O0o0 ] = ooO0O00Oo0o + self . power_normal_count [ O0o0 ] += 1 + self . handle_rx_power_low ( O0o0 ) + elif "MonitorData" in iiIiI1i1 [ O0o0 ] : + ooO0O00Oo0o = False + IIiiIiiI = iiIiI1i1 [ O0o0 ] [ "MonitorData" ] + if "RXPower" in IIiiIiiI : + o00iI = IIiiIiiI [ "RXPower" ] + if o00iI != "-40.0000dBm" and o00iI != "-infdBm" : + try : + o0O0OOO0Ooo = o00iI . find ( "dBm" ) + if o0O0OOO0Ooo == - 1 : + continue + o00iI = o00iI [ : o0O0OOO0Ooo ] + o00iI = float ( o00iI ) + if o00iI < ooooo0O0000oo : + ooO0O00Oo0o = True + except ValueError as iIi1IIIi1 : + oO ( "Port %s rx power %s not valid: %s" + % ( O0o0 , o00iI , str ( iIi1IIIi1 ) ) ) + continue + if ooO0O00Oo0o : + OO0O000 [ O0o0 ] = { "low_thd" : ooooo0O0000oo , + "channel" : 1 } + else : + self . port_rx_power_low [ O0o0 ] = ooO0O00Oo0o + self . power_normal_count [ O0o0 ] += 1 + self . handle_rx_power_low ( O0o0 ) + else : + continue + iiii111II = [ ] + I11iIiI1I1i11 = [ ] + OOoooO00o0oo0 = OO0O000 . keys ( ) + IiIi1I1 = 0 + while IiIi1I1 < self . on_count : + for O0o0 in OOoooO00o0oo0 : + ooO0O00Oo0o = self . confirm_power_low ( + O0o0 , OO0O000 [ O0o0 ] [ "low_thd" ] , + OO0O000 [ O0o0 ] [ "channel" ] ) + if ooO0O00Oo0o : + if O0o0 not in iiii111II : + iiii111II . append ( O0o0 ) + self . power_normal_count [ O0o0 ] = 0 + else : + if O0o0 not in I11iIiI1I1i11 : + I11iIiI1I1i11 . append ( O0o0 ) + self . power_normal_count [ O0o0 ] += 1 + time . sleep ( self . on_check_interval ) + IiIi1I1 += 1 + for oOOoo0000O0o0 in OOoooO00o0oo0 : + if oOOoo0000O0o0 not in I11iIiI1I1i11 : + self . port_rx_power_low [ oOOoo0000O0o0 ] = True + self . power_normal_count [ oOOoo0000O0o0 ] = 0 + else : + self . port_rx_power_low [ oOOoo0000O0o0 ] = False + self . power_normal_count [ oOOoo0000O0o0 ] += 1 + self . handle_alarm_led ( oOOoo0000O0o0 ) + time . sleep ( iIiiiI1IiI1I1 ) + def confirm_power_low ( self , port , low_thd , channel ) : + O00oOOooo = channel + OOO = 0 + IIi1 = False + if channel == 1 : + iI1iIii11Ii = [ "RXPower" ] + else : + iI1iIii11Ii = [ "RX%dPower" % IIi1i1I11Iii for IIi1i1I11Iii in range ( 1 , channel + 1 ) ] + for oooO in iI1iIii11Ii : + O0OoOoo00o = 'sudo sfputil show eeprom -d -p %s|grep "%s:"' % ( port , oooO ) + oo0OooOOo0 , OoOooOOOO = commands . getstatusoutput ( O0OoOoo00o ) + if oo0OooOOo0 != 0 : + if oo0OooOOo0 != 256 : + oO ( "command %s return %d" % ( O0OoOoo00o , oo0OooOOo0 ) ) + return False + try : + i11iiII = OoOooOOOO . splitlines ( ) + I1iiiiI1iII = i11iiII [ 0 ] . strip ( ) + II111iiiI1Ii = "%s: " % oooO + o0O0OOO0Ooo = I1iiiiI1iII . find ( II111iiiI1Ii ) + if o0O0OOO0Ooo == - 1 : + oO ( "%s doesn't contain %s" % ( I1iiiiI1iII , oooO ) ) + continue + ooOo00 = I1iiiiI1iII [ o0O0OOO0Ooo + len ( II111iiiI1Ii ) : ] + if ooOo00 == "-40.0000dBm" or ooOo00 == "-infdBm" : + OOO += 1 + continue + o0O0OOO0Ooo = ooOo00 . find ( "dBm" ) + if o0O0OOO0Ooo == - 1 : + oO ( "%s doesn't contain dBm" % ooOo00 ) + continue + o0oO000oo = ooOo00 [ : o0O0OOO0Ooo ] + o00iI = float ( o0oO000oo ) + if o00iI < low_thd : + IIi1 = True + except Exception as iIi1IIIi1 : + iii11iII ( "Failed to get rx power of port %s: reason %s" + % ( port , str ( iIi1IIIi1 ) ) ) + continue + if O00oOOooo == 1 : + return IIi1 + if OOO >= 2 : + return False + return IIi1 + def run ( self ) : + self . sfp_detector . run ( ) + self . update_ports_admin_status ( ) +def iIIII ( ) : + iIIIiiI1i1i = argparse . ArgumentParser ( + description = '' , version = '1.0.0' , + formatter_class = argparse . RawTextHelpFormatter ) + iIIIiiI1i1i . add_argument ( '-c' , '--oncount' , type = int , + help = 'confirm count of power low before turn on alarm' , + default = 2 ) + iIIIiiI1i1i . add_argument ( '-i' , '--oncheckinterval' , type = int , + help = 'interval between confirm check of power low ' + 'before turning on alarm' , + default = 5 ) + iIIIiiI1i1i . add_argument ( '-p' , '--offperiod' , type = int , + help = 'consecutive period of power normal before ' + 'turn off alarm' , + default = 5 ) + ii1I1i1iiiI = iIIIiiI1i1i . parse_args ( ) + return ii1I1i1iiiI +def I1i11i ( ) : + global o0OOO + o0OOO = oOo ( o0OO00 , i1iII1IiiIiI1 ) + ii1I1i1iiiI = iIIII ( ) + if not i1iIIII ( "syncd" , 10 ) : + iii11iII ( "Failed: syncd not started." ) + exit ( - 1 ) + try : + O0O0Ooo = i1I11i1I ( ii1I1i1iiiI . oncount , ii1I1i1iiiI . oncheckinterval , + ii1I1i1iiiI . offperiod ) + except Exception as iIi1IIIi1 : + iii11iII ( "Failed: cannot instantiates PortAlarmLedMgr, %s." % str ( iIi1IIIi1 ) ) + exit ( - 2 ) + try : + if not O0O0Ooo . initialize ( ) : + iii11iII ( "Failed to initialize PortAlarmLedMgr" ) + exit ( - 3 ) + except Exception as iIi1IIIi1 : + iii11iII ( "Failed to initialize PortAlarmLedMgr, reason %s." % str ( iIi1IIIi1 ) ) + exit ( - 4 ) + try : + if not O0O0Ooo . start_dom_sync_task ( ) : + iii11iII ( "Failed to start dom sync task" ) + exit ( - 5 ) + except Exception as iIi1IIIi1 : + iii11iII ( "Failed to start dom sync task, reason %s." % str ( iIi1IIIi1 ) ) + exit ( - 6 ) + try : + O0O0Ooo . run ( ) + except Exception as iIi1IIIi1 : + iii11iII ( "Failed to run PortAlarmLedMgr, reason is %s" % ( str ( iIi1IIIi1 ) ) ) + exit ( - 7 ) + oO ( "done, about to exit" ) + exit ( 0 ) +if __name__ == '__main__' : + I1i11i ( ) +# dd678faae9ac167bc83abf78e5cb2f3f0688d3a3 diff --git a/files/image_config/port_led/port-alarm-led.service b/files/image_config/port_led/port-alarm-led.service new file mode 100644 index 00000000000..ed45ea1b28c --- /dev/null +++ b/files/image_config/port_led/port-alarm-led.service @@ -0,0 +1,13 @@ +[Unit] +Description=port alarm led service +Requires=database.service +After=database.service + +[Service] +User=root +ExecStart=/usr/local/bin/port-alarm-led.py +Restart=on-failure +RestartSec=30s + +[Install] +WantedBy=multi-user.target diff --git a/files/image_config/port_led/port-led b/files/image_config/port_led/port-led new file mode 100644 index 00000000000..b55c11787a0 --- /dev/null +++ b/files/image_config/port_led/port-led @@ -0,0 +1,190 @@ +#!/usr/bin/python +import click +import subprocess +import commands +fport2ports_cl128 = [ + 1 , 2 , 3 , 4 , 96 , 95 , 94 , 93 , 5 , 6 , 7 , 8 , 92 , 91 , 90 , 89 , + 9 , 10 , 11 , 12 , 88 , 87 , 86 , 85 , 13 , 14 , 15 , 16 , 84 , 83 , 82 , 81 , + 17 , 18 , 19 , 20 , 80 , 79 , 78 , 77 , 21 , 22 , 23 , 24 , 76 , 75 , 74 , 73 , + 25 , 26 , 27 , 28 , 72 , 71 , 70 , 69 , 29 , 30 , 31 , 32 , 68 , 67 , 66 , 65 , + 33 , 34 , 35 , 36 , 128 , 127 , 126 , 125 , 37 , 38 , 39 , 40 , 124 , 123 , 122 , 121 , + 41 , 42 , 43 , 44 , 120 , 119 , 118 , 117 , 45 , 46 , 47 , 48 , 116 , 115 , 114 , 113 , + 49 , 50 , 51 , 52 , 112 , 111 , 110 , 109 , 53 , 54 , 55 , 56 , 108 , 107 , 106 , 105 , + 57 , 58 , 59 , 60 , 104 , 103 , 102 , 101 , 61 , 62 , 63 , 64 , 100 , 99 , 98 , 97 + ] +g_platform = "" +g_hwsku = "" +SONIC_CFGGEN_PATH = '/usr/local/bin/sonic-cfggen' +HWSKU_KEY = 'DEVICE_METADATA.localhost.hwsku' +PLATFORM_KEY = 'DEVICE_METADATA.localhost.platform' +def find_platform_and_hwsku ( ) : + global g_platform + global g_hwsku + try : + ooO0oo0oO0 = subprocess . Popen ( [ SONIC_CFGGEN_PATH , '-H' , '-v' , PLATFORM_KEY ] , + stdout = subprocess . PIPE , + shell = False , + stderr = subprocess . STDOUT ) + oo00 = ooO0oo0oO0 . communicate ( ) [ 0 ] + ooO0oo0oO0 . wait ( ) + o00 = oo00 . rstrip ( '\n' ) + ooO0oo0oO0 = subprocess . Popen ( [ SONIC_CFGGEN_PATH , '-d' , '-v' , HWSKU_KEY ] , + stdout = subprocess . PIPE , + shell = False , + stderr = subprocess . STDOUT ) + oo00 = ooO0oo0oO0 . communicate ( ) [ 0 ] + ooO0oo0oO0 . wait ( ) + OOoO = oo00 . rstrip ( '\n' ) + except OSError , OOo : + raise OSError ( "Cannot detect platform: %s" % str ( OOo ) ) + g_platform = o00 + g_hwsku = OOoO + return True +def set_port_led ( fport , enable ) : + return set_port_led_cl ( fport , enable ) +def get_port_led ( fport ) : + return get_port_led_cl ( fport ) +def show_all_port_led ( ) : + if g_hwsku == "AS13-32H" : + I111IiIi = 32 + elif g_hwsku == "AS13-48F8H" : + I111IiIi = 56 + elif g_hwsku == "AS23-128H" : + I111IiIi = 128 + else : + return + for oooOOOOO in range ( 1 , I111IiIi + 1 ) : + i1iiIII111ii = get_port_led ( oooOOOOO ) + click . echo ( "Port Ethernet%d alarm led is %s" % ( oooOOOOO , i1iiIII111ii ) ) +def get_port_addr_cl ( port ) : + oo0Ooo0 = 2 + I1I11I1I1I = 20 + OooO0OO = 50 + if g_hwsku == "AS13-32H" : + iii11iII = 32 + i1I111I = 48 + elif g_hwsku == "AS13-48F8H" : + iii11iII = 56 + i1I111I = 72 + elif g_hwsku == "AS23-128H" : + iii11iII = 128 + oo0Ooo0 = 4 + i1I111I = 144 + if port > ( iii11iII / 2 ) : + i1I111I = 145 + I1I11I1I1I = 0x30 + OooO0OO = 0x50 + else : + return ( "" , "" ) + OoOo = iii11iII / oo0Ooo0 + IiIiIi = ( port - 1 ) / OoOo + II = 30 + IiiiI1II1I1 = II + ( IiIiIi % 2 ) + oo = I1I11I1I1I + ( ( port - 1 ) % OoOo ) + Ii11iI1i = OooO0OO + ( ( port - 1 ) % OoOo ) + if g_hwsku == "AS23-128H" : + Oo00OOOOO = "%d 0x%d 0x%x" % ( i1I111I , IiiiI1II1I1 , oo ) + O0O = "%d 0x%d 0x%x" % ( i1I111I , IiiiI1II1I1 , Ii11iI1i ) + else : + Oo00OOOOO = "%d 0x%d 0x%d" % ( i1I111I , IiiiI1II1I1 , oo ) + O0O = "%d 0x%d 0x%d" % ( i1I111I , IiiiI1II1I1 , Ii11iI1i ) + return ( Oo00OOOOO , O0O ) +def set_port_led_cl ( fport , enable ) : + if fport < 1 or fport > 128 : + return + if g_hwsku == "AS23-128H" : + oooOOOOO = fport2ports_cl128 [ fport - 1 ] + else : + oooOOOOO = fport + IiiI11Iiiii , ii1I1i1I = get_port_addr_cl ( oooOOOOO ) + if IiiI11Iiiii == "" or ii1I1i1I == "" : + return + if enable == "on" : + iiiIi1i1I = 1 + elif enable == "off" : + iiiIi1i1I = 0 + else : + return + OOO00 = "i2cset -f -y %s %d" % ( IiiI11Iiiii , iiiIi1i1I ) + iIii11I , OOO0OOO00oo = commands . getstatusoutput ( OOO00 ) + if iIii11I != 0 : + click . echo ( "Set port %d LED test mode failed\n%s" % ( fport , OOO0OOO00oo ) ) + return + if enable == "on" : + OOO00 = "i2cset -f -y %s %d" % ( ii1I1i1I , iiiIi1i1I ) + iIii11I , OOO0OOO00oo = commands . getstatusoutput ( OOO00 ) + if iIii11I != 0 : + click . echo ( "Set port %d LED color failed\n%s" % ( fport , OOO0OOO00oo ) ) + return +def get_port_led_cl ( fport ) : + i1iiIII111ii = "unknown" + if fport < 1 or fport > 128 : + return i1iiIII111ii + if g_hwsku == "AS23-128H" : + oooOOOOO = fport2ports_cl128 [ fport - 1 ] + else : + oooOOOOO = fport + IiiI11Iiiii , ii1I1i1I = get_port_addr_cl ( oooOOOOO ) + if IiiI11Iiiii == "" or ii1I1i1I == "" : + return i1iiIII111ii + OOO00 = "i2cget -f -y %s " % IiiI11Iiiii + iiiIi1i1I = 0 + try : + iIii11I , OOO0OOO00oo = commands . getstatusoutput ( OOO00 ) + if iIii11I != 0 : + click . echo ( "Get port %d LED test mode failed" % fport ) + return i1iiIII111ii + iiiIi1i1I = int ( OOO0OOO00oo . splitlines ( ) [ 0 ] , 16 ) + i1iiIII111ii = "on" if ( iiiIi1i1I == 1 ) else "off" + except Exception , OOo : + click . echo ( "Failed to get port %d test mode state %s" % ( fport , str ( OOo ) ) ) + return i1iiIII111ii + return i1iiIII111ii +def play_all ( enable ) : + if g_hwsku == "AS13-32H" : + I111IiIi = 32 + elif g_hwsku == "AS13-48F8H" : + I111IiIi = 56 + elif g_hwsku == "AS23-128H" : + I111IiIi = 128 + else : + return + for oooOOOOO in range ( 1 , I111IiIi + 1 ) : + set_port_led ( oooOOOOO , enable ) +@ click . group ( ) +def port_led ( ) : + i1I11i1iI = find_platform_and_hwsku ( ) + if not i1I11i1iI : + click . echo ( "Failed to get platform and hwsku" ) + return +@ click . command ( ) +@ click . argument ( 'port' , type = click . IntRange ( 1 , 128 ) , required = True ) +def on ( port ) : + set_port_led ( port , "on" ) +@ click . command ( ) +@ click . argument ( 'port' , type = click . IntRange ( 1 , 128 ) , required = True ) +def off ( port ) : + set_port_led ( port , "off" ) +@ click . command ( ) +def onall ( ) : + play_all ( "on" ) +@ click . command ( ) +def offall ( ) : + play_all ( "off" ) +@ click . command ( ) +@ click . argument ( 'port' , type = click . IntRange ( 1 , 128 ) , required = True ) +def status ( port ) : + i1iiIII111ii = get_port_led ( port ) + click . echo ( "port Ethernet%d led is %s" % ( port , i1iiIII111ii ) ) +@ click . command ( ) +def show ( ) : + show_all_port_led ( ) +port_led . add_command ( on ) +port_led . add_command ( off ) +port_led . add_command ( onall ) +port_led . add_command ( offall ) +port_led . add_command ( status ) +port_led . add_command ( show ) +if __name__ == '__main__' : + port_led ( ) +# dd678faae9ac167bc83abf78e5cb2f3f0688d3a3 diff --git a/files/image_config/port_led/sonic_sfp.tar.gz b/files/image_config/port_led/sonic_sfp.tar.gz new file mode 100644 index 00000000000..2bfddd51be2 Binary files /dev/null and b/files/image_config/port_led/sonic_sfp.tar.gz differ diff --git a/files/image_config/updategraph/updategraph b/files/image_config/updategraph/updategraph index 686108727b2..17079f057ef 100755 --- a/files/image_config/updategraph/updategraph +++ b/files/image_config/updategraph/updategraph @@ -53,6 +53,9 @@ check_system_warm_boot copy_list="minigraph.xml snmp.yml acl.json config_db.json frr" if [ -f /tmp/pending_config_migration ]; then copy_config_files_and_directories $copy_list + PLATFORM=`sonic-cfggen -H -v DEVICE_METADATA.localhost.platform` + cp /usr/share/sonic/device/$PLATFORM/minigraph.xml /etc/sonic/minigraph.xml + sonic-cfggen -H -m /etc/sonic/minigraph.xml -j /etc/sonic/init_cfg.json --print-data > /etc/sonic/config_db.json if [ x"${WARM_BOOT}" == x"true" ]; then echo "Warm reboot detected..." elif [ "$enabled" = "true" ]; then @@ -74,7 +77,9 @@ if [ -f /tmp/pending_config_initialization ]; then if [ "$enabled" != "true" ]; then PLATFORM=`sonic-cfggen -H -v DEVICE_METADATA.localhost.platform` PRESET=(`head -n 1 /usr/share/sonic/device/$PLATFORM/default_sku`) - sonic-cfggen -H -k ${PRESET[0]} --preset ${PRESET[1]} > /etc/sonic/config_db.json + #sonic-cfggen -H -k ${PRESET[0]} --preset ${PRESET[1]} > /etc/sonic/config_db.json + cp /usr/share/sonic/device/$PLATFORM/minigraph.xml /etc/sonic/minigraph.xml + sonic-cfggen -H -m /etc/sonic/minigraph.xml -j /etc/sonic/init_cfg.json --print-data > /etc/sonic/config_db.json redis-cli -n $CONFIG_DB_INDEX FLUSHDB sonic-cfggen -j /etc/sonic/config_db.json --write-to-db redis-cli -n $CONFIG_DB_INDEX SET "CONFIG_DB_INITIALIZED" "1" diff --git a/onie-image.conf b/onie-image.conf index 1d7c6f1e8aa..23bba35a02e 100644 --- a/onie-image.conf +++ b/onie-image.conf @@ -4,7 +4,7 @@ ## Partition size in MB ## The default size is 32GB -: ${ONIE_IMAGE_PART_SIZE:=32768} +: ${ONIE_IMAGE_PART_SIZE:=262144} ## Target hardware information : ${TARGET_PLATFORM:=x86_64} diff --git a/platform/broadcom/sonic-platform-modules-cel b/platform/broadcom/sonic-platform-modules-cel index e05ca73b18a..b319df9c68b 160000 --- a/platform/broadcom/sonic-platform-modules-cel +++ b/platform/broadcom/sonic-platform-modules-cel @@ -1 +1 @@ -Subproject commit e05ca73b18a56fed8e08de9362e0fe760f72424a +Subproject commit b319df9c68b29686d072f25c6931bba75b176540 diff --git a/rules/config b/rules/config index 674280a3ca2..8dab2f69e02 100644 --- a/rules/config +++ b/rules/config @@ -28,7 +28,7 @@ SONIC_CONFIG_MAKE_JOBS = $(shell nproc) DEFAULT_USERNAME = admin # DEFAULT_PASSWORD - default password for installer build -DEFAULT_PASSWORD = YourPaSsWoRd +DEFAULT_PASSWORD = admin # ENABLE_DHCP_GRAPH_SERVICE - specify the source of minigraph to generate configuration file. # If set to y SONiC will get the minigraph from graph service. Graph service URL need to be