This is not the ONT you are looking for. Try using the navigation bar {% if site.search_enabled != false %}or search {% endif %}to find what you're looking for or go to the website's home page.
{% endif %}
{% if site.heading_anchors != false %}
{% include vendor/anchor_headings.html html=content beforeHeading="true" anchorBody="" anchorClass="anchor-heading" anchorAttrs="aria-labelledby=\"%html_id%\"" %}
{% else %}
{{ content }}
{% endif %}
{% unless page.has_toc == false %}
{% include nav/toc.html nodes=nav_page_children %}
{% endunless %}
{% capture footer_custom %}
{%- include footer_custom.html -%}
{% endcapture %}
{% if footer_custom != "" or site.last_edit_timestamp or site.gh_edit_link %}
{% endif %}
{% if site.search_enabled != false %}
{% if site.search.button %}
{% endif %}
{% endif %}
{%if site.last_edit_timestamp_script and site.gh_owner_name and site.gh_repository_name and page.path %}
{% endif %}
{% if site.mermaid %}
{% endif %}
================================================
FILE: _ont/ont-adtran-sdx-611.md
================================================
---
title: Adtran SDX 611
has_children: false
layout: default
parent: Adtran
---
# Hardware Specifications
| | |
| --------------- | ---------------------------------------- |
| Vendor/Brand | Adtran |
| Model | SDX 611 (Adtran-611-V2 REV1.0) |
| Chipset | Realtek RTL9601D |
| Flash | 16 MB (Winbond W25Q128JVSQ) |
| RAM | |
| System | |
| Optics | SC/APC (U&T UTG24P05) |
| 2.5GbaseT | No |
| IP address | |
| Web Gui | |
| SSH | |
| Telnet | |
| Serial | ✅ |
| Serial baud | 115200 |
| Serial encoding | 8-N-1 |
| Form Factor | ONT |
## Disassembly
1. Remove the two screws hidden under the rubber feet on the back of the unit
2. Use a plastic pry tool to separate the rear cover, as it is held in place by a snap fit
{% include alert.html content="Be careful when prying the rear cover off, the snap fit clips can break easily." alert="Note" icon="svg-warning" color="yellow" %}
{% include image.html file="sdx611-teardown-1.jpg" alt="Adtran SDX 611 Teardown" caption="Adtran SDX 611: Teardown" %}
{% include image.html file="sdx611-teardown-2.jpg" alt="Adtran SDX 611 Board" caption="Adtran SDX 611: Board" %}
{% include image.html file="sdx611-board-rev.jpg" alt="Adtran SDX 611 Board Revision" caption="Adtran SDX 611: Board revision (Adtran-611-V2 REV1.0)" %}
## Serial
The board has GND, TX and RX headers already soldered. A USB UART adapter such as a CH340G can be used to access the serial console.
| USB TTL(UART) Adapter | Board header |
| --------------------- | ------------ |
| GND | GND |
| TX | RX |
| RX | TX |
{% include alert.html content="Some USB TTL adapters label TX and RX pins the other way around: try to swap them if the connection doesn't work." alert="Note" icon="svg-warning" color="yellow" %}
## Chip identification
| Chip | Function |
| ---------------------- | ------------------ |
| Realtek RTL9601D | GPON SoC |
| U&T UTG24P05 | Optical transceiver (BOSA) |
| Winbond W25Q128JVSQ | 128Mbit (16MB) SPI NOR Flash |
{% include image.html file="sdx611-rtl9601d.jpg" alt="Realtek RTL9601D" caption="Realtek RTL9601D GPON SoC" %}
{% include image.html file="sdx611-utg24p05.jpg" alt="U&T UTG24P05" caption="U&T UTG24P05 Optical Transceiver" %}
{% include image.html file="sdx611-w25q128jvsq.jpg" alt="Winbond W25Q128JVSQ" caption="Winbond W25Q128JVSQ 16MB SPI NOR Flash" %}
# Miscellaneous Links
* [ispreview.co.uk](https://www.ispreview.co.uk/index.php/2022/09/pictured-openreachs-future-2-5gbps-ont-for-fttp-broadband.html)
* [Adtran SDX 611](https://www.adtran.com/solutions/by-segment/products/by-category/fiber-access/optical-network-terminals-ont/611.html)
================================================
FILE: _ont/ont-adtran-sdx-611q.md
================================================
---
title: Adtran SDX 611Q
has_children: false
layout: default
parent: Adtran
---
# Hardware Specifications
| | |
| ------------ | -------- |
| Vendor/Brand | Adtran |
| Model | SDX 611Q |
| Chipset | |
| Flash | |
| RAM | |
| System | |
| 2.5GbaseT | Yes |
| Optics | |
| IP address | |
| Web Gui | |
| SSH | |
| Telnet | |
| Serial | |
| Form Factor | ONT |
# Miscellaneous Links
* [ispreview.co.uk](https://www.ispreview.co.uk/index.php/2022/09/pictured-openreachs-future-2-5gbps-ont-for-fttp-broadband.html)
================================================
FILE: _ont/ont-adtran-sdx-621i.md
================================================
---
title: Adtran SDX 621i
has_children: false
layout: default
parent: Adtran
---
# Hardware Specifications
| | |
| --------------- | -------------------------------- |
| Vendor/Brand | Adtran |
| Model | SDX 621i |
| Chipset | |
| Flash | |
| RAM | |
| System | |
| 2.5GBaseT | No |
| Optics | SC/APC |
| IP address | |
| Web Gui | |
| SSH | |
| Telnet | |
| Serial | |
| Serial baud | |
| Serial encoding | |
| Form Factor | ONT |
## List of software versions
## List of partitions
# Miscellaneous Links
- [Adtran SDX series](https://www.adtran.com/solutions/by-segment/products/by-category/fiber-access/optical-network-terminals-ont)
================================================
FILE: _ont/ont-adtran.md
================================================
---
title: Adtran
has_children: true
layout: default
---
================================================
FILE: _ont/ont-bt-pon-bt-g711ax.md
================================================
---
title: BT-PON BT-G711AX
has_children: false
layout: default
parent: BT-PON
---
# Hardware Specifications
| | |
| --------------- | -------------------------------------------------------------------------- |
| Vendor/Brand | BT-PON |
| Model | BT-G711AX |
| Chipset | Realtek RTL9607Cv2 (Realtek RTL8198D is mentioned too in boot log???) |
| Flash | SPI NAND 128MiB (Winbond W25N01GVZEIG) |
| RAM | DDR3 256MiB |
| CPU | Formosa MIPS interAptiv (multi) V2.0 |
| CPU Clock | 1150MHz |
| Wireless | RTL8192XBR 2x2 2.4Ghz (bgn+ax), RTL8832BR 2x2 5Ghz (an+ac+ax) |
| Bootloader | U-Boot 2020.01 |
| System | Linux 4.4.140 (Realtek MSDK-4.8.5p1 Build 3068) |
| Load addr | 80010000 |
| Ethernet ports | 4x1G |
| POTS ports | 1xRJ11 (Si32192) |
| Optics | SC/UPC (SEMTECH GN25L95) |
| IP address | 192.168.1.1/24 |
| Web Gui | ✅ user `admin`, password `YnQtcG9u` OR user `useradmin`, password `123456` |
| SSH | NO |
| Telnet | ✅ user `supertelnet`, password `supertelnet` |
| FTP | ✅ port 21 |
| Serial | ✅ |
| Serial baud | 115200 |
| Serial encoding | 8-N-1 |
| Form Factor | ONT |
## Serial
{% include image.html file="bt-g711ax-serial.jpg" alt="BT-G711AX" caption="BT-G711AX: serial pinout" %}
You can easily communicate with the ONT using a TTL converter (for example the CH341A programmer in TTL mode) by connecting the converters’ pins to the ONT following the pinout shown in the image above.
Once everything is ok, any TTY client, such as PuTTY, can be used to open the connection with its baud rate set to 115200. At this point, the ONT can be turned on.
Press any key once you see `Hit any key to stop autoboot` (You only have 1 second to do this so be quick) after which you get access to bootloader console which looks like this:
```sh
Phoebus#
```
## List of partitions
`cat /proc/mtd`
| dev | size | erasesize | name |
| ----- | -------- | --------- | ---------------- |
| mtd0 | 000e0000 | 00020000 | "boot" |
| mtd1 | 00020000 | 00020000 | "env" |
| mtd2 | 00020000 | 00020000 | "env2" |
| mtd3 | 00020000 | 00020000 | "static_conf" |
| mtd4 | 07c40000 | 00020000 | "ubi_device" |
| mtd5 | 00a89000 | 0001f000 | "ubi_Config" |
| mtd6 | 00a0d000 | 0001f000 | "ubi_k0" |
| mtd7 | 01911000 | 0001f000 | "ubi_r0" |
| mtd8 | 00a0d000 | 0001f000 | "ubi_k1" |
| mtd9 | 01911000 | 0001f000 | "ubi_r1" |
Only the first 4 partitions with erasesize 0x20000 should be manipulated using mtd devices, the fifth partition `ubi_device` contains the rest of the NAND and is to be manipulated using ubi volumes
## List of volumes (UBI)
`ubinfo -a`
| dev | size | type | name |
| ------ | --------- | ------- | ---------------- |
| ubi0_0 | 11046912B | dynamic | "ubi_Config" |
| ubi0_1 | 10539008B | dynamic | "ubi_k0" |
| ubi0_2 | 26284032B | dynamic | "ubi_r0" |
| ubi0_3 | 10539008B | dynamic | "ubi_k1" |
| ubi0_4 | 26284032B | dynamic | "ubi_r1" |
To back up a volume, `cat` or `dd` the appropriate `/dev/ubi0_X` device to a file or pipe, to restore a volume, use the `ubiupdatevol` utility (or just do it safely via the WebGUI)
This ONT supports dual boot.
Volumes `ubi_k0` and `ubi_r0` respectively contain kernel and rootfs of the first image, while `ubi_k1` and `ubi_r1` contain kernel and rootfs of the second one.
# Useful files and binaries
## Useful files
- `/var/config/config.xml` - Contains the user portion of the configuration
- `/var/config/config_hs.xml` - Contains the "hardware" configuration (which _should not_ be changed)
- `/tmp/omcilog` - OMCI messages logs (must be enabeled, see below)
## Useful binaries
- `flash` - Used to manipulate the config files in a somewhat safe manner
- `nv` - Used to manipulate nvram storage, including persistent config entries via `nv setenv`/`nv getenv`
- `omcicli` - Used to interact with the running OMCI daemon
- `omci_app` - The OMCI daemon
- `diag` - Used to run low-level diagnostics commands on the stick
# Usage
## Enable telnet
Telnet should be enabled by default but if that is not the case, you can enable it by editing configuration file you get in the Web UI. Go to `Admin -> Backup and Restore Settings -> Backup Settings to File` to get the config file in xml format and find `MIB_TELNET_ENABLE` and its value to 1. There is also `telnet` and `telnet_port` under `ACL_IP_TBL`, you should set these to 2 and 23 respectively.
{% include alert.html content="Curiously, there is also `ssh` and `ssh_port` in there but changing these doesn't do anything for enabling SSH, most likely due to lack of ssh capability of this ONT" alert="Info" icon="svg-info" color="blue" %}
After logining in using the credentials in the table above, use the `su` command to gain root access to the shell.
```sh
$ su
#
```
# GPON ONU status
## Getting the operational status of the ONU
```sh
diag gpon get onu-state
```
## Getting OLT vendor information
```sh
# omcicli mib get 131
```
## Querying a particular OMCI ME
```sh
# omcicli mib get MIB_IDX
```
# GPON/OMCI settings
## Getting/Setting ONU GPON Serial Number
```sh
# flash get GPON_SN
GPON_SN=TMBB00000000
# flash set GPON_SN TMBB0A1B2C3D
```
## Getting/Setting ONU GPON PLOAM password
{% include alert.html content="The PLOAM password is stored in ASCII format" alert="Info" icon="svg-info" color="blue" %}
```sh
# flash get GPON_PLOAM_PASSWD
GPON_PLOAM_PASSWD=AAAAAAAAAA
# flash set GPON_PLOAM_PASSWD AAAAAAAAAA
```
## Getting/Setting ONU GPON LOID and LOID password
```sh
# flash get LOID
LOID=user
# flash set LOID user
# flash get LOID_PASSWD
LOID_PASSWD=user
# flash set LOID_PASSWD user
```
## Getting/Setting OMCI software version (ME 7)
```sh
# flash get OMCI_SW_VER1
OMCI_SW_VER1=YOURFIRSTSWVER
# flash set OMCI_SW_VER1 YOURFIRSTSWVER
# flash get OMCI_SW_VER2
OMCI_SW_VER2=YOURSECONDSWVER
# flash set OMCI_SW_VER2 YOURSECONDSWVER
```
## Getting/Setting OMCI hardware version (ME 256)
```sh
# flash get HW_HWVER
HW_HWVER=V2.0
# flash set HW_HWVER MYHWVERSION
```
## Getting/Setting OMCI vendor ID (ME 256)
```sh
# flash get PON_VENDOR_ID
PON_VENDOR_ID=ZTEG
# flash set PON_VENDOR_ID HWTC
```
## Getting/Setting OMCI equipment ID (ME 257)
```sh
# flash get GPON_ONU_MODEL
GPON_ONU_MODEL=DFP-34X-2C2
# flash set GPON_ONU_MODEL DFP-34X-XXX
```
## Getting/Setting OMCI OLT Mode and Fake OMCI
Configure how ONT Stick handle OMCI from OLT:
```sh
# flash get OMCI_OLT_MODE
OMCI_OLT_MODE=1
# flash set OMCI_OLT_MODE 2
```
| Value | Note | OMCI Information |
| ----- | --------------- | ------------------------------------------------------------------------------------------------------ |
| 0 | Default Mode | Stock setting, some values cannot be changed |
| 1 | Huawei OLT Mode | Huawei MA5671a |
| 2 | ZTE OLT Mode | ZTE |
| 3 | Customized Mode | Custom Software/Hardware Version, OMCC, etc... |
Some vendors/wholesale providers/ISPs have explicit LAN Port Number provisioning or proprietary OMCI that the stick cannot understand, this will make the stick reply OK to whatever the OLT sends it via OMCI.
`0` = Disable, `1` = Enable, Default is 0
```sh
# flash get OMCI_FAKE_OK
OMCI_FAKE_OK=0
# flash set OMCI_FAKE_OK 1
```
# Advanced settings
## Transferring files to/from the router
This router has a capability of sharing files using ftp, tftp and netcat.
## Setting management MAC
```sh
# flash get ELAN_MAC_ADDR
ELAN_MAC_ADDR=xxxxxxxxxxxx
# flash set ELAN_MAC_ADDR xxxxxxxxxxxx
```
## Setting management IP
```sh
# flash get LAN_IP_ADDR
LAN_IP_ADDR=192.168.2.1
# flash set LAN_IP_ADDR 192.168.1.1
```
## Rebooting the ONU
```sh
reboot
```
## Getting/Setting the MTU of the L2 bridge
{% include alert.html content="Settings given via diag are not permanent after reboot" alert="Note" icon="svg-info" color="blue" %}
```sh
# diag switch get max-pkt-len port all
Port Speed
----------
0 1538
2 2031
# diag switch set max-pkt-len port all length 2000
```
## Checking the currently active image
```sh
# nv getenv sw_active
sw_active=1
# nv getenv sw_version0
sw_version0=V1_7_8_210412
# nv getenv sw_version1
sw_version1=V1_7_8_210412
```
## Booting to a different image
```sh
# nv setenv sw_commit 0|1
# reboot
```
# Miscellaneous Links
- [Configuration Manual which explains the Web UI of this ONT](https://www.bt-pon.com/download/Configuration_Manual/BT-7xx_and_BT-3xx_series_xPON_ONU_Configuration_Manual.pdf)
- [Datasheet](https://www.bt-pon.com/download/Datasheet/BT-PON_BT-G711AX_XPON_ONU_ONT_Datasheet.pdf)
# Theardown and other photos
{% include image.html file="bt-g711ax-teardown-1.jpg" alt="BT-PON BT-G711AX Board" caption="BT-PON BT-G711AX Board" %}
{% include image.html file="bt-g711ax-teardown-2.jpg" alt="BT-PON BT-G711AX Board (bottom side)" caption="BT-PON BT-G711AX Board (bottom side)" %}
================================================
FILE: _ont/ont-bt-pon.md
================================================
---
title: BT-PON
has_children: true
layout: default
---
================================================
FILE: _ont/ont-calix-801gt.md
================================================
---
title: Calix 801GT
has_children: false
layout: default
parent: Calix
---
# Hardware Specifications
| | |
| --------------- | -------------------------------- |
| Vendor/Brand | Calix |
| Model | 801GT |
| Chipset | |
| Flash | |
| RAM | |
| System | |
| 2.5GBaseT | No |
| Optics | SC/APC |
| IP address | |
| Web Gui | |
| SSH | |
| Telnet | |
| Serial | |
| Serial baud | |
| Serial encoding | |
| Form Factor | ONT |
## List of software versions
## List of partitions
# Miscellaneous Links
- [Calix GigaPoint ONTs](https://www.calix.com/platforms/premises-systems.html)
================================================
FILE: _ont/ont-calix-801gv2.md
================================================
---
title: Calix GigaPoint 801Gv2
has_children: false
layout: default
parent: Calix
---
# Hardware Specifications
| | |
| --------------- | -------------------------------- |
| Vendor/Brand | Calix |
| Model | GigaPoint 801Gv2 |
| Chipset | |
| Flash | |
| RAM | |
| System | |
| 2.5GBaseT | No |
| Optics | SC/APC |
| IP address | |
| Web Gui | |
| SSH | |
| Telnet | |
| Serial | |
| Serial baud | |
| Serial encoding | |
| Form Factor | ONT |
## List of software versions
## List of partitions
# Miscellaneous Links
- [Calix GigaPoint ONTs](https://www.calix.com/platforms/premises-systems.html)
================================================
FILE: _ont/ont-calix-gp1000g.md
================================================
---
title: Calix GP1000g
has_children: false
layout: default
parent: Calix
---
# Hardware Specifications
| | |
| --------------- | -------------------------------- |
| Vendor/Brand | Calix |
| Model | GP1000g |
| Chipset | |
| Flash | |
| RAM | |
| System | |
| 2.5GBaseT | No |
| Optics | SC/APC |
| IP address | |
| Web Gui | |
| SSH | |
| Telnet | |
| Serial | |
| Serial baud | |
| Serial encoding | |
| Form Factor | ONT |
## List of software versions
## List of partitions
# Miscellaneous Links
- [Calix GigaPoint ONTs](https://www.calix.com/platforms/premises-systems.html)
================================================
FILE: _ont/ont-calix-gp1100g.md
================================================
---
title: Calix GP1100G
has_children: false
layout: default
parent: Calix
---
# Hardware Specifications
| | |
| --------------- | -------------------------------- |
| Vendor/Brand | Calix |
| Model | GP1100G |
| Chipset | |
| Flash | |
| RAM | |
| System | |
| 2.5GBaseT | No |
| Optics | SC/APC |
| IP address | |
| Web Gui | |
| SSH | |
| Telnet | |
| Serial | |
| Serial baud | |
| Serial encoding | |
| Form Factor | ONT |
## List of software versions
## List of partitions
# Miscellaneous Links
- [Calix GigaPoint ONTs](https://www.calix.com/platforms/premises-systems.html)
================================================
FILE: _ont/ont-calix.md
================================================
---
title: Calix
has_children: true
layout: default
---
================================================
FILE: _ont/ont-carlitoxxpro-cpgos03-0490-v1.md
================================================
---
title: CarlitoxxPro CPGOS03-0490 v1
has_children: false
redirect_to: /ont-hilink-hl23446
layout: default
parent: CarlitoxxPro
---
================================================
FILE: _ont/ont-carlitoxxpro-cpgos03-0490-v2.md
================================================
---
title: CarlitoxxPro CPGOS03-0490 v2
has_children: false
layout: default
parent: CarlitoxxPro
---
# Hardware Specifications
| | |
| ------------ | ------------------------------------- |
| Vendor/Brand | CarlitoxxPro |
| Model | CPGOS03-0490 v2 |
| Chipset | Realtek RTL9601CI |
| Flash | 8 MB |
| RAM | 64 MB |
| System | Linux (Luna SDK) |
| HSGMII | No |
| Optics | SC/APC |
| IP address | |
| Web Gui | ✅ user `cpAdmin`, password `cpAdmin` |
| SSH | |
| Telnet | ✅ |
| Serial | |
| Form Factor | miniONT SFP |
# Known Bugs
- VLAN swap issue (MEID 171), auto-sensing mode to switch between SGMII/HiSGMII
- You should use the VID/VLAN shown by executing the command `omcicli mib get 84` via telnet to bring up PPPoE
{% include_relative ont-luna-sdk-useful-commands.md
flash='flash'
ploam='asciiAndHex'
%}
# Miscellaneous Links
- [Hacking RTL960x](https://github.com/Anime4000/RTL960x)
- [GPON ONU SFP - CPGOS03-0490 v2.0: Configuration Manual 1.0](https://wiki.rockstable.it/FTTH?action=AttachFile&do=get&target=CPGOS03-0490v2_Configuration-Manual.pdf)
================================================
FILE: _ont/ont-carlitoxxpro.md
================================================
---
title: CarlitoxxPro
has_children: true
layout: default
---
================================================
FILE: _ont/ont-cig-g-97c1.md
================================================
---
title: CIG G-97C1
has_children: false
redirect_to: /ont-nokia-g-010g-p
layout: default
parent: CIG
---
================================================
FILE: _ont/ont-cig-g-97cm.md
================================================
---
title: CIG G-97CM
has_children: false
layout: default
parent: CIG
---
# Hardware Specifications
| | |
| ---------------- | ---------------- |
| Vendor/Brand | CIG |
| Model | G-97CM |
| ODM | ✅ |
| Chipset | Realtek RTL9601B |
| Flash | |
| RAM | |
| System | Linux |
| 2.5GbaseT | No |
| Optics | SC/APC |
| IP address | 192.168.1.1 |
| Web Gui | |
| SSH | |
| Telnet | |
| Serial | ✅ |
| Serial baud | 115200 |
| Serial encoding | 8-N-1 |
| Form Factor | ONT |
# Miscellaneous Links
- [CUG G-97CM DataSheet](https://www.cigtech.com/wp-content/uploads/2018/02/G-97CM_DataSheet_V3.pdf)
================================================
FILE: _ont/ont-cig-g-97cp.md
================================================
---
title: CIG G-97CP
has_children: false
layout: default
parent: CIG
---
# Hardware Specifications
| | |
| ---------------- | ------------------------------------------------------------------------ |
| Vendor/Brand | CIG |
| Model | G-97CP |
| ODM | ✅ |
| Chipset | Realtek RTL9601D |
| Flash | |
| RAM | |
| System | Linux (Luna SDK 1.9.0) |
| 2.5GbaseT | Yes |
| Optics | SC/APC |
| IP address | 192.168.100.1 |
| Web Gui | |
| SSH | ✅ user ```root```, password same as [enable](#enable-password) password |
| Telnet | |
| Serial | ✅ |
| Form Factor | ONT |
{% include image.html file="cig/cig-1.jpg" alt="CIG G-97CP Unidata" caption="CIG G-97CP Unidata @papin" %}
{% include image.html file="cig/cig-2.jpg" alt="CIG G-97CP Unidata" caption="CIG G-97CP Unidata @papin" %}
{% include_relative ont-nokia-use.md username="ont" alertEnablePassword="The following enable password is used to enter GponCLI via serial connection in in firmware where it is not disabled." %}
{% include_relative ont-nokia-useful-command.md %}
# Note
This ONT has the same internal hardware as the [Nokia G-010G-T](/ont-nokia-g-010g-t) and even the same plastic shell of the [ZTE F6005](/ont-zte-f6005).
================================================
FILE: _ont/ont-cig-g-97s.md
================================================
---
title: CIG G-97S
has_children: false
redirect_to: /ont-nokia-g-010s-q
layout: default
parent: CIG
---
================================================
FILE: _ont/ont-cig-g-97sp.md
================================================
---
title: CIG G-97SP
has_children: false
layout: default
parent: CIG
---
# Hardware Specifications
| | |
| ---------------- | --------------- |
| Vendor/Brand | CIG |
| Model | G-97SP |
| ODM | ✅ |
| Chipset | Lantiq PEB98035 |
| CPU | |
| CPU Clock | |
| Flash | |
| RAM | |
| HSGMII | |
| Optics | SC |
| IP address | |
| Web Gui | |
| SSH | |
| Telnet | |
| Serial | |
| Form Factor | miniONT SFP |
# Miscellaneous Links
- [GPON ONT G-95SP Platform Briefing](https://www.cigtech.com/wp-content/uploads/2018/03/G-95SP_DataSheet_V2.pdf)
- [Tech Info Depot Wiki](http://en.techinfodepot.shoutwiki.com/wiki/Cigtech_G-95SP)
- [OpenWrt Forum](https://forum.openwrt.org/t/cigtech-g-95sp-sfp-gpon/63352)
================================================
FILE: _ont/ont-cig.md
================================================
---
title: CIG
has_children: true
layout: default
---
================================================
FILE: _ont/ont-d-link-dpn-100-rev-a2.md
================================================
---
title: D-LINK DPN-100 Rev A2
has_children: false
layout: default
parent: D-LINK
---
# Hardware Specifications
| | |
| ---------------- | --------------- |
| Vendor/Brand | D-LINK |
| Model | DPN-100 Rev A2 |
| Chipset | Lantiq PEB98035 |
| ODM | T&W |
| ODM Product Code | TW2362H-CDEL |
| Flash | 8 MB |
| RAM | 64 MB |
| System | |
| HSGMII | |
| Optics | |
| IP address | |
| Web Gui | |
| SSH | |
| Telnet | |
| Serial | |
| Form Factor | miniONT SFP |
{% include image.html file="dpn-100-rev-a2.jpg" alt="DPN-100 Rev A2" caption="DPN-100 Rev A2" %}
Once you access the stick via ssh you will be presented with a second tier login. The credentials to access the dell shell are: username: `twmanu` , password: `twmanu`.
## Firmware is interchangeable with:
- [Zyxel PMG3000-D20B](/ont-zyxel-pmg3000-d20b)
- [Halny HL-GSFP](/ont-halny-hl-gsfp)
- [Zisa OP151s](/ont-zisa-op151s)
- [T&W TW2362H-CDEL](/ont-t-w-tw2362h-cdel)
# GPON/OMCI settings
{% include alert.html content="All commands start from the twmanu shell." alert="Note" icon="svg-info" color="blue" %}
## Setting ONU GPON Serial Number
{% include alert.html content="The S/N is stored in the ASCII format." alert="Note" icon="svg-info" color="blue" %}
```sh
manufactory
set sn ALCLf0f0f0f0
exit
hal
set sn ALCLf0f0f0f0
```
## Setting ONU GPON PLOAM password
{% include alert.html content="The PLOAM password is stored in the ASCII format." alert="Note" icon="svg-info" color="blue" %}
This can be done easily via the web UI. If you prefer to do it via the shell use:
```sh
manufactory
set password 1234567899
```
or in hex format without any 0x or separator:
```sh
manufactory
set password hex 31323334353637383939
```
## Show ONU GPON info
```sh
show info
```
# Miscellaneous Links
- [Dlink DPN 100 Change of Serial Number and PLOAM Password](https://www.youtube.com/watch?v=5hpMPJCpUaQ)
================================================
FILE: _ont/ont-d-link-dpn-100-rev-c1.md
================================================
---
title: D-LINK DPN-100 Rev C1
has_children: false
layout: default
parent: D-LINK
---
# Hardware Specifications
| | |
| ---------------- | -------------------------------------------------------- |
| Vendor/Brand | D-LINK |
| Model | DPN-100 Rev C1 |
| ODM | CIG |
| ODM Product Code | [G-97S](/ont-cig-g-97s) |
| Chipset | Realtek RTL9601CI |
| Flash | 16MB |
| RAM | 32MB |
| System | Linux (Luna SDK 1.9.0) |
| HSGMII | ✅ |
| Optics | SC/APC |
| IP address | 192.168.100.1 |
| Web Gui | |
| SSH | |
| Telnet | ✅ user `root`, password `admin` (only on R4.2.104.033e) |
| Serial | |
| Form Factor | miniONT SFP |
{% include image.html file="dpn-100-rev-c1.png" alt="DPN-100 Rev C1" caption="DPN-100 Rev C1" %}
## List of software versions
- R4.2.104.033e (Wind - has telnet enabled)
- R4.2.104.039 (Wind - no telnet access)
## List of partitions
| dev | size | erasesize | name |
| ---- | -------- | --------- | -------- |
| mtd0 | 00080000 | 00010000 | "Boot" |
| mtd1 | 00180000 | 00010000 | "Config" |
| mtd2 | 00700000 | 00010000 | "ImageA" |
| mtd3 | 00700000 | 00010000 | "ImageB" |
{% include_relative ont-nokia-useful-command.md %}
# Miscellaneous Links
- [DLINK DPN-100 Ver:C1 uses RTL9601CI](https://github.com/Anime4000/RTL960x/issues/2)
================================================
FILE: _ont/ont-d-link.md
================================================
---
title: D-LINK
has_children: true
layout: default
---
================================================
FILE: _ont/ont-fibermall-gpon-onu-clb+.md
================================================
---
title: FiberMall GPON-ONU-CLB+
has_children: false
layout: default
parent: FiberMall
---
{% include alert.html content="This is a raw GPON ONU SFP transceiver without MAC function. It requires an external PON MAC to operate. For the ONU Stick with integrated MAC, see FiberMall GPON-ONU-STB+. See also SFP Standard and SFP with PON MAC and w/o PON MAC for background." alert="Warning" icon="svg-warning" color="yellow" %}
# Hardware Specifications
| | |
| --------------------- | --------------------------------------------------------------------- |
| Vendor/Brand | FiberMall |
| Model | GPON-ONU-CLB+ |
| Chipset | |
| Optics | SC/UPC |
| Form Factor | SFP |
| PON MAC | ❌ None (raw transceiver, requires external PON MAC) |
## Product Variants
| Part Number | TX Enable | Temperature | Price |
| ---------------- | --------- | ------------ | ------ |
| GPON-ONU-CLB+ | Low level | -5 to 70°C | $15.00 |
| GPON-ONU-ILB+ | Low level | -40 to 85°C | |
| GPON-ONU-CHB+ | High level| -5 to 70°C | |
| GPON-ONU-IHB+ | High level| -40 to 85°C | |
All variants: SFP, TX-1.244G/RX-2.488G, T1310nm/R1490nm, GPON Class B+, no MAC, DDM.
## Datasheet Specifications
### General
| | |
| ---------------------------- | ------------------------------------------ |
| TX Data Rate | 1.244 Gbps (burst mode) |
| RX Data Rate | 2.488 Gbps (continuous mode) |
| Max Distance | 20 km |
| Fiber Type | Single Mode 9/125 µm |
| Class | B+ |
| Power Supply | 3.3V ± 5% (3.135–3.465V) |
| Supply Current | 300 mA max |
| Power Consumption | 1 W |
| Operating Temperature | -5 to 70°C (C-Temp) / -40 to 85°C (I-Temp)|
| DDM | ✅ SFF-8472 |
### Transmitter Optical Characteristics
| Parameter | Min | Typical | Max | Unit |
| ---------------------------------- | ------ | ------- | ------ | ------ |
| Launched Power (avg.) | +0.5 | | +5.0 | dBm |
| Operating Wavelength Range | 1260 | | 1360 | nm |
| Output Spectrum Width (RMS) | | | 1.0 | nm |
| Side Mode Suppression Ratio | 30 | | | dB |
| Extinction Ratio | 9 | | | dB |
| Optical Rise Time | | | 260 | ps |
| Optical Fall Time | | | 260 | ps |
| Output Power After TX Disable | | | -50 | dBm |
| Burst Turn-On Time | | | 12.8 | ns |
| Burst Turn-Off Time | | | 12.8 | ns |
| TX Reflectance | | | -15 | dB |
### Receiver Optical Characteristics
| Parameter | Min | Typical | Max | Unit |
| ---------------------------------- | ------ | ------- | ------ | ------ |
| Wavelength Range | 1480 | | 1500 | nm |
| Sensitivity (BER ≤ 10⁻¹²) | | | -28 | dBm |
| Saturation Optical Power | -8 | | | dBm |
| SD Assert Level | | | -29 | dBm |
| SD Deassert Level | -45 | | | dBm |
| SD Hysteresis | 0.5 | | 6 | dB |
| Receiver Reflectance | | | -12 | dB |
### Electrical Characteristics
| Parameter | Min | Typical | Max | Unit |
| ---------------------------------- | ------ | ------- | ------ | ------ |
| TX Differential Input Voltage | 300 | | 2400 | mV |
| RX Differential Output Voltage | 500 | | 1200 | mV |
| TX Common-Mode Input Voltage | 1.6 | | 2.4 | V |
| Input Differential Impedance | 90 | 100 | 110 | Ω |
| TX Fault Output (Normal) | 0 | | 0.4 | V |
| TX Fault Output (Fault) | 2.4 | | VCC+0.3| V |
| SD Assert Time | | | 100 | µs |
| SD Deassert Time | | | 100 | µs |
Transmitter: 1310 nm DFB laser, LVPECL input (DC coupled). Receiver: 1490 nm Super-TIA, CML output (AC coupled).
### DDM Accuracy
| Parameter | Accuracy |
| ------------ | -------- |
| Temperature | ±3°C |
| Voltage | ±3% |
| Bias Current | ±10 mA |
| TX Power | ±3 dB |
| RX Power | ±3 dB |
## Pin Definition
| Pin | Name | Description |
| --- | ---------- | ---------------------------------------------------------------------------- |
| 1 | VeeT | Transmitter Ground |
| 2 | TX_Fault | Transmitter Fault Indication (LVTTL output: low = normal, high = abnormal) |
| 3 | TX_Burst | **Transmitter Burst Enable Input** (LVTTL) |
| 4 | MOD-DEF(2) | I²C Data (SDA), LVTTL |
| 5 | MOD-DEF(1) | I²C Clock (SCL), LVTTL |
| 6 | MOD-DEF(0) | Module Definition 0, grounded within module |
| 7 | TX_SD | **Transmitter Signal Detect** (LVTTL output, active high) |
| 8 | RX_SD | **Receiver Signal Detect** (LVTTL output: high = signal, low = loss) |
| 9 | VeeR | Receiver Ground |
| 10 | VeeR | Receiver Ground |
| 11 | VeeR | Receiver Ground |
| 12 | RD- | Inverted Receiver Data Out (CML, AC coupled) |
| 13 | RD+ | Receiver Data Out (CML, AC coupled) |
| 14 | VeeR | Receiver Ground |
| 15 | VccR | Receiver Power |
| 16 | VccT | Transmitter Power |
| 17 | VeeT | Transmitter Ground |
| 18 | TD+ | Transmit Data In (LVPECL, DC coupled) |
| 19 | TD- | Inverted Transmit Data In (LVPECL, DC coupled) |
| 20 | VeeT | Transmitter Ground |
{% include alert.html content="Note the key Pin differences vs the STB+ (with MAC): Pin 3 is TX_Burst (burst enable) instead of TX_Disable, Pin 7 is TX_SD (transmitter signal detect) instead of Dying Gasp, and Pin 8 is RX_SD instead of LOS." alert="Note" icon="svg-info" color="blue" %}
### EEPROM (A0h) Key Fields
| Address | Field | Value | Description |
| ------- | --------------- | ------------ | ----------------------------------- |
| 00 | Identifier | 03 | SFP |
| 01 | Ext. Identifier | 04 | Module soldered to motherboard |
| 02 | Connector | 01 | Optical Pigtail |
| 11 | Encoding | 03 | NRZ |
| 12 | BR, Nominal | 0C | 1.2 Gbps |
| 14 | Length (9µm km) | 14 | 20 km |
| 40–55 | Vendor P/N | GPON-ONU-xxB+| ASCII |
| 60–61 | Laser Wavelength| 051E | 1310 nm |
| 92 | Diag. Mon. Type | 68 | Internal calibration, avg. power RX |
## Standards Compliance
- ITU-T G.984.2 (GPON)
- SFP MSA (SFF-8074i)
- SFF-8472 (DDM)
- FCC 47 CFR Part 15, Class B
- FDA 21 CFR 1040.10 and 1040.11 (Laser Notice No. 50)
- IEC-60825 (Class 1 laser safety)
- Telcordia GR-468-CORE
- TR-NWT-000870 ESD Class 2
## Key Differences vs STB+ (with MAC)
| Feature | CLB+ (no MAC) | STB+ (with MAC) |
| -------------------- | ---------------------------- | ------------------------------------ |
| PON MAC | ❌ None | ✅ Integrated |
| Receiver Type | Super-TIA | APD-TIA |
| Power Consumption | 1 W | 2.48 W |
| GPON/EPON Dual-Mode | ❌ GPON only | ✅ Auto-detect GPON/EPON |
| OMCI (G.988) | ❌ | ✅ |
| Pin 3 | TX_Burst (burst enable) | TX_Disable |
| Pin 7 | TX_SD (TX signal detect) | Dying Gasp detect |
| Pin 8 | RX_SD (RX signal detect) | LOS |
| Price | $15.00 | $45.00 |
{% include alert.html content="This page has been created from the vendor datasheet and product listing. Contributions with hands-on information are welcome." alert="Note" icon="svg-info" color="blue" %}
# Miscellaneous Links
- [FiberMall GPON-ONU-CLB+ product page](https://www.fibermall.com/sale-437481-gpon-onu-sfp-tx1310nm-class-b.htm)
- [Datasheet (PDF)](https://www.fibermall.com/file/datasheet/gpon-onu-xxb%2B.pdf)
================================================
FILE: _ont/ont-fibermall-gpon-onu-stb+.md
================================================
---
title: FiberMall GPON-ONU-STB+
has_children: false
layout: default
parent: FiberMall
---
{% include alert.html content="This is an ONU Stick SFP with integrated GPON MAC. For the raw SFP transceiver without MAC, see [FiberMall GPON-ONU-CLB+](/ont-fibermall-gpon-onu-clb+)." alert="Info" icon="svg-info" color="blue" %}
# Hardware Specifications
| | |
| --------------------- | --------------------------------------------------------------------- |
| Vendor/Brand | FiberMall |
| Model | GPON-ONU-STB+ (SC/UPC) / GPON-ONU-STAB+ (SC/APC) |
| Chipset | Unknown |
| Flash | |
| RAM | |
| System | |
| HSGMII | |
| Optics | SC/UPC or SC/APC |
| IP address | |
| Web Gui | |
| SSH | |
| Telnet | |
| Serial | |
| Form Factor | miniONT SFP |
## Product Variants
| Part Number | Connector | Temperature | Price |
| ---------------- | --------- | ------------ | ------ |
| GPON-ONU-STB+ | SC/UPC | 0 to 70°C | $45.00 |
| GPON-ONU-ISTB+ | SC/UPC | -40 to 85°C | |
| GPON-ONU-STAB+ | SC/APC | 0 to 70°C | $45.00 |
| GPON-ONU-ISTAB+ | SC/APC | -40 to 85°C | |
All variants: SFP, TX-1.244G/RX-2.488G, T1310nm/R1490nm, GPON Class B+, MAC inside, RoHS 6, DDM.
## Datasheet Specifications
### General
| | |
| ---------------------------- | ------------------------------------------ |
| TX Data Rate | 1.244 Gbps (burst mode) |
| RX Data Rate | 2.488 Gbps (continuous mode) |
| Max Distance | 20 km |
| Fiber Type | Single Mode 9/125 µm |
| Class | B+ |
| Power Supply | 3.3V ± 5% (3.13–3.47V) |
| Power Dissipation | 2.48 W typical |
| Operating Temperature | 0 to 70°C (C-Temp) / -40 to 85°C (I-Temp) |
| DDM | ✅ SFF-8472 v9.5 |
### Transmitter Optical Characteristics
| Parameter | Min | Typical | Max | Unit |
| ---------------------------------- | ------ | ------- | ------ | ------ |
| Centre Wavelength | 1290 | | 1330 | nm |
| Side Mode Suppression Ratio | 30 | | | dB |
| Optical Spectrum Width (RMS) | | | 1 | nm |
| Average Launch Power | +0.5 | | +5.0 | dBm |
| Power-OFF TX Optical Power | | | -45 | dBm |
| Extinction Ratio | 9 | | | dB |
| Rise/Fall Time (20%-80%) | | | 260 | ps |
| Burst Turn-On Time | | | 12.8 | ns |
| Burst Turn-Off Time | | | 12.8 | ns |
| RIN15 OMA | | | -115 | dB/Hz |
| Optical Return Loss Tolerance | 15 | | | dB |
| TX Reflectance | | | -6 | dB |
| TX and Dispersion Penalty | | | 2 | dB |
### Receiver Optical Characteristics
| Parameter | Min | Typical | Max | Unit |
| ---------------------------------- | ------ | ------- | ------ | ------ |
| Operating Wavelength | 1480 | 1490 | 1500 | nm |
| Sensitivity (BER 10⁻¹²) | | | -28 | dBm |
| Saturation Optical Power | -8 | | | dBm |
| LOS Deassert Level | | | -29 | dBm |
| LOS Assert Level | -40 | | | dBm |
| LOS Hysteresis | 0.5 | | 5 | dB |
| Receiver Reflectance | | | -20 | dB |
| WDM Filter Isolation (1550 nm) | 38 | | | dB |
| WDM Filter Isolation (1650 nm) | 35 | | | dB |
### Electrical Characteristics
| Parameter | Min | Typical | Max | Unit |
| ---------------------------------- | ------ | ------- | ------ | ------ |
| Data Input Differential Swing | 300 | | 1600 | mV |
| Data Output Differential Swing | 300 | | 1200 | mV |
| Input Differential Impedance | 90 | 100 | 110 | Ω |
| TX Disable Voltage (Enable) | 0 | | 0.8 | V |
| TX Disable Voltage (Disable) | 2.0 | | VCC | V |
Transmitter: 1310 nm DFB laser. Receiver: 1490 nm APD-TIA, CML output (AC coupled).
## Pin Definition
| Pin | Name | Description |
| --- | ---------- | ---------------------------------------------------------------------- |
| 1 | VeeT | Transmitter Ground |
| 2 | TX Fault | Transmitter Fault Indication (LVTTL output: low = normal, high = fault)|
| 3 | TX Disable | Transmitter Disable; turns off transmitter laser output |
| 4 | MOD-DEF(2) | SDA I²C Data line |
| 5 | MOD-DEF(1) | SCL I²C Clock line |
| 6 | MOD-DEF(0) | Module Absent, connected to VeeR |
| 7 | RateSelect | **Dying Gasp detect** (input, active low) |
| 8 | LOS | Loss of Signal |
| 9 | VeeR | Receiver Ground |
| 10 | VeeR | Receiver Ground |
| 11 | VeeR | Receiver Ground |
| 12 | RD- | Inverted Received Data Output |
| 13 | RD+ | Received Data Output |
| 14 | VeeR | Receiver Ground |
| 15 | VccR | Receiver Power |
| 16 | VccT | Transmitter Power |
| 17 | VeeT | Transmitter Ground |
| 18 | TD+ | Transmit Data In |
| 19 | TD- | Inverted Transmit Data In |
| 20 | VeeT | Transmitter Ground |
## Standards Compliance
- ITU-T G.984.2 / G.984.2 Amendment 1 (GPON)
- ITU-T G.988 (OMCI)
- SFP MSA (SFF-8074i)
- SFF-8472 v9.5 (DDM)
- FCC 47 CFR Part 15, Class B
- FDA 21 CFR 1040.10 and 1040.11
- IEC-60825 (Class 1 laser safety)
## Notes
- The GPON-ONU-STB+ is described as a **dual-mode ONU stick**: it supports both GPON and EPON ONU OAM and will automatically establish a link with either a GPON OLT or EPON OLT.
- Pin 7 (RateSelect) is repurposed for **Dying Gasp detection** (input, active low).
- Data input is LVPECL compatible, DC coupled internally.
- Receiver is APD-TIA based, providing higher sensitivity than the [non-MAC CLB+ variant](/ont-fibermall-gpon-onu-clb+) which uses Super-TIA.
- This is a complete "PON on a Stick" — an entire FTTH ONU in a slightly oversized SFP that can be plugged into networking equipment (switch, router, PBX, etc.).
{% include alert.html content="This page has been created from the vendor datasheet and product listing. Contributions with hands-on information (chipset identification, firmware details, serial/SSH access, IP address, web GUI, etc.) are very welcome." alert="Note" icon="svg-info" color="blue" %}
# Miscellaneous Links
- [FiberMall GPON-ONU-STAB+ product page (SC/APC)](https://www.fibermall.com/sale-462750-gpon-onu-sticak-sfp-class-b-apc.htm)
- [FiberMall GPON-ONU-STB+ product page (SC/UPC)](https://www.fibermall.com/sale-437801-gpon-onu-sticak-sfp-class-b.htm)
- [Datasheet (PDF)](https://www.fibermall.com/file/datasheet/gpon-onu-stb%2B.pdf)
================================================
FILE: _ont/ont-fibermall.md
================================================
---
title: FiberMall
has_children: true
layout: default
---
================================================
FILE: _ont/ont-fs-com-gpon-onu-stick-with-mac.md
================================================
---
title: FS.com GPON ONU Stick with MAC (GPON-ONU-34-20BI)
has_children: true
alias: SourcePhotonics SPS-34-24T-HP-TDFO
parent: FS.com
layout: default
---
# Hardware Specifications
| | |
| ---------------- | ---------------------------------------- |
| Vendor/Brand | FS.com |
| Model | GPON-ONU-34-20BI |
| ODM | SourcePhotonics |
| ODM Product Code | SPS-34-24T-HP-TDFO |
| Chipset | Lantiq PEB98035 |
| CPU | MIPS 34Kc interAptiv |
| CPU Clock | 400MHz |
| Flash | 16 MB |
| RAM | 64 MB |
| Bootloader | U-Boot 2011.12-lantiq-gpon-1.2.24 |
| System | OpenWRT 14.07_ltq (Kernel 3.10.49) |
| Load addr | 0x80800000 |
| HSGMII | Yes |
| Optics | SC/APC |
| IP address | 192.168.1.10 |
| Web Gui | |
| SSH | ✅ user `ONTUSER`, password `7sp!lwUBz1` |
| Telnet | |
| Serial | ✅ on SFP |
| Serial baud | 115200 |
| Serial encoding | 8-N-1 |
| Form Factor | miniONT SFP |
{% include image.html file="ont-fs.jpg" alt="FS.com GPON ONU" caption="FS.com GPON ONU" %}
{% include image.html file="ont-fs-box.jpg" alt="FS.com GPON ONU in the box" caption="FS.com GPON ONU in the box" %}
## Possible clones
- SourcePhotonics SPS-34-24T-HP-TDFO
## Firmware is interchangeable with:
- [Huawei MA5671A](/ont-huawei-ma5671a)
- [Nokia G-010S-P](/ont-nokia-g-010s-p)
- [Hilink HL23446](/ont-hilink-hl23446)
- {:.text-red-200 } Dasan H650SFP
- {:.text-red-200 } DpOptics D23446
- {:.text-red-200 } Photonics SPS-34-24T-HP-TDFO
## Serial
The stick has a TTL 3.3v UART console (configured as 115200 8-N-1) that can be accessed from the SFP connector.
| USB TTL(UART) Adapter | SFP 20pins Molex connector |
| --------------------- | -------------------------- |
| 3.3V | pin #15 and #16 |
| TX | pin #2 |
| RX | pin #7 |
| GND | pin #14 |
{% include alert.html content="Some USB TTL adapters label TX and RX pins the other way around: try to swap them if the connection doesn't work." alert="Note" icon="svg-warning" color="yellow" %}
## List of software versions
- 6BA1896SPLQA13 (Dec 16 2016)
- 6BA1896SPLQA41
- 6BA1896SPLQA42 (Sep 18 2021)
## List of partitions
Partition layouts change depending on which image is booted, in particular:
When booting image0:
```
mtd2 ---> image0 (linux)
mtd5 --> image1
mtd3 --> rootfs
mtd4 --> rootfs_data
```
When booting image0:
```
mtd2 ---> image0
mtd3 --> image1 (linux)
mtd4 --> rootfs
mtd5 --> rootfs_data
```
For more info [XPONos partition layout](https://github.com/XPONos/linux_lantiq-falcon/commit/456f68f69a84c846a542a9f0ea47c37476535dcb).
### When booting from image0
| dev | size | erasesize | name |
| ---- | -------- | --------- | ------------- |
| mtd0 | 00040000 | 00010000 | "uboot" |
| mtd1 | 00080000 | 00010000 | "uboot_env" |
| mtd2 | 00740000 | 00010000 | "linux" |
| mtd3 | 0061eedc | 00010000 | "rootfs" |
| mtd4 | 00370000 | 00010000 | "rootfs_data" |
| mtd5 | 00800000 | 00010000 | "image1" |
### When booting from image1
| dev | size | erasesize | name |
| ---- | -------- | --------- | ------------- |
| mtd0 | 00040000 | 00010000 | "uboot" |
| mtd1 | 00080000 | 00010000 | "uboot_env" |
| mtd2 | 00740000 | 00010000 | "image0" |
| mtd3 | 00800000 | 00010000 | "linux" |
| mtd4 | 006d8077 | 00010000 | "rootfs" |
| mtd5 | 00410000 | 00010000 | "rootfs_data" |
## List of firmwares and files
- [6BA1896SPLQA13 MTD0/U-Boot](https://mega.nz/file/wptjyYiS#Xj3cijX2bN0FexsZr1Wn7iRG0Wy4Z8vX0NyNBd1kBWo){: .btn } md5hash: 992b31a67c644aa68cf7f9caf956b1f9
- [6BA1896SPLQA13 MTD2/Image0](https://mega.nz/file/1kUlUbgQ#ANS9qH6wCggYshsQ3STD6gxmR_3TL-5MXfdCl5s50Nk){: .btn } md5hash: 5d46a9acc3c5ba8710887aa32b82aeb4
- [6BA1896SPLQA42 MTD0/U-Boot](https://mega.nz/file/FkswHbgL#s7-vaH65EPQ2O5vKeD3bU1_RPwzaKPOJdrCWvPQqDvc){: .btn } md5hash: 992b31a67c644aa68cf7f9caf956b1f9
- [6BA1896SPLQA42 MTD2/Image0](https://mega.nz/file/AgshDICC#md1vLN14JBF3iaNoZBqQH_zwALHmEaOk3_rDm1FfOic){: .btn } md5hash: 04533554bb0c8b997697fbc048159002
# Unlock the device
{% include alert.html content="The following commands are to be used on version 6BA1896SPLQA42, to get the commands for version 6BA1896SPLQA41 please check the following page: [Carlito Firmware](/ont-huawei-ma5671a-carlito)." alert="Note" icon="svg-info" color="blu" %}
## Bootloader unlock from shell
{% include alert.html content="It is strongly recommended that you unlock the bootloader before making any major changes to the firmware." alert="Warning" icon="svg-warning" color="yellow" %}
```sh
fw_setenv bootdelay 5
fw_setenv asc0 0
fw_setenv preboot "gpio set 3;gpio input 2;gpio input 105;gpio input 106;gpio input 107;gpio input 108"
```
## Emergency bootloader unlock via TTL serial
{% include alert.html content="This is not necessary if you have already unlocked the bootloader from the shell as specified above." alert="Warning" icon="svg-warning" color="yellow" %}
If for some reason you are in the situation where you do not have a bootable firmware on your SFP stick you can do an emergency unlock via TTL serial.
To perform the emergency unlock, the following hardware is required:
- TTL-USB adapter,
- SFP adapter to connect the TTL-USB cables to the SFP stick.
The electrical connections are the same as those of the Huawei MA5671A; see the [Huawei root guide](/ont-huawei-ma5671a-root-web) for accurate details on how to connect the TTL-USB to the SFP adapter.
When you are ready with everything plugged in you need to press the button below. A window will open to execute the emergency unlock.
{: .text-center .fs-6 }
{% include alert.html content="This browser is not compatible with the emergency unlock procedure. See the Browser compatibility" alert="Note" icon="svg-warning" color="red" %}
{% include root_lantiq.html modelName="FS GPON ONU Stick" unlockHuaweiShell=false %}
# GPON ONU status
## Getting the operational status of the ONU
```shell
onu ploamsg
```
## Querying a particular OMCI ME
```sh
omci_pipe.sh meg MIB_IDX ME_IN
```
Where `MIB_IDX` is the MIB ID and the `ME_IN` is the ME instance number
## Getting/Setting Speed LAN Mode
To get the LAN Mode:
```sh
onu lanpsg 0
```
The `link_status` variable tells the current speed
| Value (for `sgmii_mode` and `link_status`) | Speed |
| ------------------------------------------ | ---------------------------------- |
| 3 | 1 Gbps / SGMII with auto-neg on |
| 4 | 1 Gbps / SGMII with auto-neg off |
| 5 | 2.5 Gbps / HSGMII with auto-neg on |
To change the default lan mode value you can use `fw_setenv sgmii_mode`. The firmware already has the value set to 5 by default and there should not be any need to change it.
# GPON/OMCI settings
## Setting ONU GPON Serial Number
```sh
set_serial_number ABCD12345678
```
Or:
```sh
sfp_i2c -i8 -s "ABCD12345678"
```
## Getting ONU GPON Serial Number
```sh
fw_printenv | grep nSerial
```
Or:
```sh
sfp_i2c -g
```
## Setting ONU GPON PLOAM password
```sh
sfp_i2c -i11 -s "1234567890"
```
## Setting ONU GPON LOID and LOID password
```sh
sfp_i2c -i9 -s "1234567890"
sfp_i2c -i10 -s "password01"
```
## Setting OMCI equipment ID (ME 257)
```sh
sfp_i2c -i6 -s "YOUR_EQUIPMENT_ID"
```
## Setting OMCI Vendor ID (ME 256)
```sh
sfp_i2c -i7 -s "YOUR_VENDOR_ID"
```
## Setting OMCI hardware version (ME 256)
```sh
sed 's/256 0 HWTC 0000000000000/256 0 HWTC YOUR_ONU_VERSION/' /rom/etc/mibs/data_1g_8q.ini > /etc/mibs/data_1g_8q.ini
```
## Restoring the default ONU hardware version (ME 256)
```sh
cat /rom/etc/mibs/data_1g_8q.ini > /etc/mibs/data_1g_8q.ini
```
## Setting OMCI software version (ME 7)
{% include alert.html content="The patch below is only compatible with the firmware version `6BA1896SPLQA42`" alert="Info" icon="svg-info" color="blue" %}
The image version normally can't be changed because it is hard-coded into the `/opt/lantiq/bin/omcid` binary,
so the binary has to be modified with the following hex patch which removes the hardcoded version.
```
< 000084c0: 9a43 931f f760 d840 9b64 f760 d864 1a00 .C...`.@.d.`.d..
< 000084d0: 1acf 6500 1a20 2268 940a 2205 b468 1a00 ..e.. "h.."..h..
---
> 000084c0: 9a43 931f f760 d840 9b64 f760 d864 6500 .C...`.@.d.`.de.
> 000084d0: 6500 6500 1a20 2268 940a 2205 b468 1a00 e.e.. "h.."..h..
```
{% include alert.html content="Proceed only if your `md5sum /opt/lantiq/bin/omcid` has the correct checksum `7e97163e24c9cb39439589c65b438168`" alert="Info" icon="svg-info" color="blue" %}
This is the patch, encoded in base64
```
QlNESUZGNDA1AAAAAAAAAD4AAAAAAAAA2C8JAAAAAABCWmg5MUFZJlNZYqnvBwAACFBSQWAAAMAA
AAgAQCAAMQwIIwjImgDOdMvi7kinChIMVT3g4EJaaDkxQVkmU1lrJSbUAACFTAjAACAAAAiCAAAI
IABQYAFKQ01INxUgd6Soj2JURm8pUR8XckU4UJBrJSbUQlpoORdyRThQkAAAAAA=
```
Save it on your computer (not on the stick) as `omcid_patch.base64`, then run:
```sh
base64 -d omcid_patch.base64 > omcid.bspatch
bspatch omcid omcid.bspatch
```
{% include alert.html content="If you don't have bspatch installed, most distributions include it in the bsdiff package" alert="Info" icon="svg-info" color="blue" %}
After patching the resulting patched `omcid` should have an md5 checksum of `525139425009c4138e92766645dad7d0`.
If that is also correct, continue by making a backup copy of your original `omcid` on the stick.
```sh
cd /opt/lantiq/bin
cp omcid omcid.original
```
Now, SCP has to be used to copy the modified `omcid` binary in `/opt/lantiq/bin/omcid`.
Before restarting the stick and applying changes, make sure `omcid` has its execution bit set, then reboot the stick and change the image version with the following command:
```sh
chmod ugo+x /opt/lantiq/bin/omcid
```
Is also a good time to set the image0/image1_version: crashes have been reported if they are not set correctly before reboot.
```sh
fw_setenv image0_version YOUR_IMAGE0_VERSION
fw_setenv image1_version YOUR_IMAGE1_VERSION
```
Now the stick can be rebooted.
{% include alert.html content="Be aware that sometimes `omcid` can rewrite the two variables when run in its non-patched state. After reboot, double check the set values are still correct." alert="Info" icon="svg-info" color="blue" %}
# Advanced settings
## Setting `data_1g_8q_us1280_ds512.ini` OMCI MIB file for 2500 Mbps profiles
{% include alert.html content="The patch provided below is only compatible with the firmware version `6BA1896SPLQA42`" alert="Info" icon="svg-info" color="blue" %}
{% include alert.html content="If you need to set the ONU version remember that you will have to do it using the MIB file `/etc/mibs/data_1g_8q_us1280_ds512.ini` instead of `/etc/mibs/data_1g_8q.ini`" alert="Info" icon="svg-info" color="blue" %}
The MIB file `data_1g_8q_us1280_ds512.ini` is very useful to avoid performance problems in situations where 2500 Mbps speed profiles are used. To enable it, run this command:
```sh
fw_setenv mib_file data_1g_8q_us1280_ds512.ini
```
## Setting custom OMCI MIB file
{% include alert.html content="If you need to set the ONU version, remember that you will have to do it using your custom MIB file instead of `/etc/mibs/data_1g_8q.ini`" alert="Info" icon="svg-info" color="blue" %}
Copy the MIB file to /etc/mibs, then run this command:
```sh
fw_setenv mib_file YOUR_MIB_FILENAME
```
## Setting management MAC
```sh
uci set network.lct.macaddr=00:06:B5:07:D6:04
uci set network.host.macaddr=00:06:B5:07:D8:04
uci commit network.lct.macaddr=00:06:B5:07:D6:04
uci commit network.host.macaddr=00:06:B5:07:D8:04
```
## Setting management IP
```sh
fw_setenv ipaddr 192.168.20.60
fw_setenv gatewayip 192.168.20.1
```
## Rebooting the ONU
```sh
reboot
```
## Disable RX_LOS status
{% include alert.html content="The patch provided below is only compatible with the firmware version `6BA1896SPLQA42`" alert="Info" icon="svg-info" color="blue" %}
Some switches/routers (e.g. Mikrotik) do not allow access to the magament interface without the fiber being connected because the SFP reports RX_LOS status It is possible to fix this by modifying the `mod_optic.ko` driver to spoof non RX_LOS status by setting PIN 8 (RX_LOS) to be always low.
This is the change to be made, in hex format:
```
< 00013740: 2404 0003 2405 0001 0c00 0000 ac43 0980 $...$........C..
---
> 00013740: 2404 0003 2405 0000 0c00 0000 ac43 0980 $...$........C..
```
{% include alert.html content="Proceed only if your `md5sum /lib/modules/3.10.49/mod_optic.ko` has the correct checksum `7c718c3410c4120fe98fa7a9a5c6c407`" alert="Info" icon="svg-info" color="blue" %}
This is the patch, encoded in base64:
```
QlNESUZGNDA2AAAAAAAAADYAAAAAAAAAXEEFAAAAAABCWmg5MUFZJlNZ5TTrjgAAB+ZARjAEACAA
AARAACAAMQZMQRppiFkgKGTeXi7kinChIcpp1xxCWmg5MUFZJlNZcaVLvQABOOCAwAAAAQAIAAig
ACClRgZoMhUf9JKbgIk3hdyRThQkHGlS70BCWmg5F3JFOFCQAAAAAA==
```
Save it on your computer (not on the stick) as `mod_optic.base64`, then run:
```sh
base64 -d mod_optic.base64 > mod_optic.bspatch
bspatch mod_optic.ko mod_optic.bspatch
```
{% include alert.html content="If you don't have bspatch installed, most distributions include it in the bsdiff package" alert="Info" icon="svg-info" color="blue" %}
After patching the resulting `mod_optic.ko` should have an md5 checksum of `e14a5a70b023873853afe920870f076e`.
If that is also correct, continue by making a backup copy of your original `mod_optic.ko` on the stick.
```sh
cd /lib/modules/3.10.49/
cp mod_optic.ko mod_optic.ko.original
```
Now use SCP to copy the modified `mod_optic.ko` kernel module in `/lib/modules/3.10.49/mod_optic.ko`.
## TX Fault / Serial
The stick will remain in a perpetual "TX Fault" state as the same SFP pin is used for both serial and TX Fault signaling. If this causes you issues (normally it shouldn't), you can issue the commands below to disable it. Note that this will disable both the TX Fault signal and Serial on the stick after boot.
```sh
fw_setenv asc0 1
fw_setenv preboot "gpio set 3;gpio input 100;gpio input 105;gpio input 106;gpio input 107;gpio input 108"
```
In case you need to re-enable it, issue the following commands from the bootloader (FALCON)
```sh
FALCON => setenv asc0 0
FALCON => saveenv
```
# SFP EEPROM settings
## Reading all EEPROM
```sh
sfp_i2c -r
```
## Getting Firmware version
```sh
strings /opt/lantiq/bin/omcid | grep ^software_Version | awk -F[=,] '{print $2}'
```
## Getting Firmware build time
```sh
strings /opt/lantiq/bin/omcid | grep compiled
```
# EEPROM (I2C slave simulated EEPROM)
The FS GPON-ONU-34-20BI stick does not have a physical EEPROM, the Falcon SOC emulates an EEPROM by exposing it on the I2C interface as required by the SFF-8472 specification.
On the I2C interface, two memories of 256 bytes each will be available at the addresses `1010000X (A0h)` and `1010001X (A2h)`, however the actual available memory from the emulated EEPROM will be 640 bytes each, but only the first 256 bytes will be exposed in the I2C interface.
The FS stick stores the content of the emulated EEPROM in U-Boot env variables to restore it after a reboot:
- `EEPROM0 (A0h)` stored in U-Boot env variable `sfp_a0_low_128`
- `EEPROM1 (A2h)` stored in U-Boot env variable `sfp_a2_info`
## EEPROM0 layout
| address | size | name | default value | description |
| ------- | ---- | --------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- |
| | | **BASE ID FIELDS (SFF-8472)** | | |
| 0 | 1 | Identifier | `0x03` (SFP) | Type of transceiver |
| 1 | 1 | Ext identifier | `0x04` (MOD_DEF 4) | Additional information about the transceiver |
| 2 | 1 | Connector | `0x01` (SC) | Type of media connector |
| 3-10 | 8 | Transceiver | `0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00` | Code for optical compatibility |
| 11 | 1 | Encoding | `0x03` (NRZ) | High speed serial encoding algorithm |
| 12 | 1 | Signaling Rate, Nominal | `0x0C` (1.244Gbps) | Nominal signaling rate |
| 13 | 1 | Rate Identifier | `0x00` (Not used) | Type of rate select functionality |
| 14 | 1 | Length (SMF,km) | `0x14` (20 km) | Link length supported for single-mode fiber, units of km |
| 15 | 1 | Length (SMF) | `0xC8` (200 x 100m) | Link length supported for single-mode fiber, units of 100 m |
| 16 | 1 | Length (50 um, OM2) | `0x00` (No support) | Link length supported for 50 um OM2 fiber, units of 10 m |
| 17 | 1 | Length (62.5 um, OM1) | `0x00` (No support) | Link length supported for 62.5 um OM1 fiber, units of 10 m |
| 18 | 1 | Length copper cable | `0x00` (No support) | Link length supported for copper or direct attach cable, units of m |
| 19 | 1 | Length (50 um, OM3) | `0x00` (No support) | Link length supported for 50 um OM3 fiber, units of 10 m |
| 20-35 | 16 | Vendor name | `0x46 0x53 0x20 0x20 0x20 0x20 0x20 0x20 0x20 0x20 0x20 0x20 0x20 0x20 0x20 0x20` (FS) | SFP vendor name (ASCII) |
| 36 | 1 | Transceiver | `0x00` (No support) | Code for optical compatibility |
| 37-39 | 3 | Vendor OUI | `0x00 0x00 0x00` (No specified) | SFP vendor IEEE company ID |
| 40-55 | 16 | Vendor PN | `0x47 0x50 0x4F 0x4E 0x2D 0x4F 0x4E 0x55 0x2D 0x33 0x34 0x2D 0x32 0x30 0x42 0x49` (GPON-ONU-34-20BI) | Part number provided by SFP vendor (ASCII) |
| 56-59 | 4 | Vendor rev | `0x30 0x31 0x20 0x20` (01) | Revision level for part number provided by vendor (ASCII) |
| 60-61 | 2 | Wavelength | `0x05 0x1E` (1310nm TX) | Laser wavelength |
| 62 | 1 | Fibre Channel Speed 2 | `0x00` (No support) | Transceiver's Fibre Channel speed capabilities |
| 63 | 1 | CC_BASE | | Check code for Base ID Fields (addresses 0 to 62) |
| | | **EXTENDED ID FIELDS (SFF-8472)** | | |
| 64-65 | 2 | Options | `0x00 0x1A` (TX DISABLE, TX FAULT, RX LOS) | Indicates which optional transceiver signals are implemented |
| 66 | 1 | Signaling Rate, max | `0x00` (No specified) | Upper signaling rate margin, units of % |
| 67 | 1 | Signaling Rate, min | `0x00` (No specified) | Lower signaling rate margin, units of % |
| 68-83 | 16 | Vendor SN | Unique in each SFP | Serial number provided by vendor (ASCII) |
| 84-91 | 8 | Date code | Unique in each SFP | Vendor's manufacturing date code |
| 92 | 1 | Diagnostic Monitoring Type | `0x68` (Digital diagnostic, Internally calibrated, Received average power type) | Indicates which type of diagnostic monitoring is implemented |
| 93 | 1 | Enhanced Options | `0xF0` (Alarm/warning flags, soft TX_DISABLE control, soft TX_FAULT monitoring, soft RX_LOS monitoring) | Indicates which optional enhanced features are implemented |
| 94 | 1 | SFF-8472 Compliance | `0x05` (Rev 11.0 of SFF-8472) | Indicates which revision of SFF-8472 the transceiver complies with |
| 95 | 1 | CC_EXT | | Check code for the Extended ID Fields (addresses 64 to 94) |
| | | **VENDOR SPECIFIC FIELDS** | | |
| 96-127 | 32 | Vendor data | `0x20 0x20 0x20...` (Not used) | Vendor specifc data (ASCII) |
| 128-255 | 128 | Reserved | `0x00 0x00 0x00...` | Reserved |
| | | **EXTRA EEPROM FIELDS** | | **Not exposed to I2C interface** |
| 256-639 | 384 | Reserved | `0x00 0x00 0x00...` | Reserved |
## EEPROM1 layout
| address | size | name | default value | description |
| ------- | ---- | --------------------------------- | ------------------------------------------------------------------------------------------- | ----------------------------------------------------------------- |
| | | **DIAGNOSTIC AND CONTROL FIELDS** | | |
| 0-1 | 2 | Temp High Alarm | `0x5F 0x00` (95℃) | Value expressed in two's complement |
| 2-3 | 2 | Temp Low Alarm | `0xCE 0x00` (-50℃) | Value expressed in two's complement |
| 4-5 | 2 | Temp High Warning | `0x5A 0x00` (90℃) | Value expressed in two's complement |
| 6-7 | 2 | Temp Low Warning | `0xD3 0x00` (-45℃) | Value expressed in two's complement |
| 8-9 | 2 | Voltage High Alarm | `0x8C 0xA0` (3.6V) | Value expressed in volt subunits[^subunit] |
| 10-11 | 2 | Voltage Low Alarm | `0x75 0x30` (3.0V) | Value expressed in volt subunits[^subunit] |
| 12-13 | 2 | Voltage High Warning | `0x88 0xB8` (3.5V) | Value expressed in volt subunits[^subunit] |
| 14-15 | 2 | Voltage Low Warning | `0x79 0x18` (3.1V) | Value expressed in milliampere subunits[^subunit] |
| 16-17 | 2 | Bias High Alarm | `0xAF 0xC8` (90mA) | Value expressed in milliampere subunits[^subunit] |
| 18-19 | 2 | Bias Low Alarm | `0x00 0x00` (0mA) | Value expressed in milliampere subunits[^subunit] |
| 20-21 | 2 | Bias High Warning | `0x88 0xB8` (70mA) | Value expressed in milliampere subunits[^subunit] |
| 22-23 | 2 | Bias Low Warning | `0x00 0x00` (0mA) | Value expressed in milliampere subunits[^subunit] |
| 24-25 | 2 | TX Power High Alarm | `0xF6 0x77` (8dBm) | Value expressed in watts subunits[^subunit] |
| 26-27 | 2 | TX Power Low Alarm | `0x15 0xF7` (-2.5dBm) | Value expressed in watts subunits[^subunit] |
| 28-29 | 2 | TX Power High Warning | `0xC3 0xC6` (7dBm) | Value expressed in watts subunits[^subunit] |
| 30-31 | 2 | TX Power Low Warning | `0x1B 0xA7` (-1.5dBm) | Value expressed in watts subunits[^subunit] |
| 32-33 | 2 | RX Power High Alarm | `0x0C 0x5A` (-5dBm) | Value expressed in watts subunits[^subunit] |
| 34-35 | 2 | RX Power Low Alarm | `0x00 0x08` (-31dBm) | Value expressed in watts subunits[^subunit] |
| 36-37 | 2 | RX Power High Warning | `0x09 0xCF` (-6dBm) | Value expressed in watts subunits[^subunit] |
| 38-39 | 2 | RX Power Low Warning | `0x00 0x0A` (-30dBm) | Value expressed in watts subunits[^subunit] |
| 40-45 | 6 | MAC address | Unique in each SFP | Contains the mac address of the SFP, it could also be empty |
| 46-55 | 10 | Reserved | `0x00 0x00 0x00...` | Reserved |
| 56-59 | 4 | RX_PWR(4) Calibration | `0x00 0x00 0x00 0x00` | 4th order RSSI calibration coefficient |
| 60-63 | 4 | RX_PWR(3) Calibration | `0x00 0x00 0x00 0x00` | 3rd order RSSI calibration coefficient |
| 64-67 | 4 | RX_PWR(2) Calibration | `0x00 0x00 0x00 0x00` | 2nd order RSSI calibration coefficient |
| 68-71 | 4 | RX_PWR(1) Calibration | `0x3F 0x80 0x00 0x00` | 1st order RSSI calibration coefficient |
| 72-75 | 4 | RX_PWR(0) Calibration | `0x00 0x00 0x00 0x00` | 0th order RSSI calibration coefficient |
| 76-77 | 2 | TX_I(Slope) Calibration | `0x01 0x00` | Slope for Bias calibration |
| 78-79 | 2 | TX_I(Offset) Calibration | `0x00 0x00` | Offset for Bias calibration |
| 80-81 | 2 | TX_PWR(Slope) Calibration | `0x01 0x00` | Slope for TX Power calibration |
| 82-83 | 2 | TX_PWR(Offset) Calibration | `0x00 0x00` | Offset for TX Power calibration |
| 84-85 | 2 | T(Slope) Calibration | `0x01 0x00` | Slope for Temperature calibration |
| 86-87 | 2 | T(Offset) Calibration | `0x00 0x00` | Offset for Temperature calibration, in units of 256ths °C |
| 88-89 | 2 | V(Slope) Calibration | `0x01 0x00` | Slope for VCC calibration |
| 90-91 | 2 | V(Offset) Calibration | `0x00 0x00` | Offset for VCC calibration |
| 92-94 | 3 | Reserved | `0x00 0x00 0x00` | Reserved |
| 95 | 1 | CC_DMI | | Check code for Base Diagnostic Fields (addresses 0 to 94) |
| 96 | 1 | Temperature MSB | | Internally measured module temperature |
| 97 | 1 | Temperature LSB | | |
| 98 | 1 | Vcc MSB | | Internally measured supply voltage in transceiver |
| 99 | 1 | Vcc LSB | | |
| 100 | 1 | TX Bias MSB | | Internally measured TX Bias Current |
| 101 | 1 | TX Bias LSB | | |
| 102 | 1 | TX Power MSB | | Measured TX output power |
| 103 | 1 | TX Power LSB | | |
| 104 | 1 | RX Power MSB | | Measured RX input power |
| 105 | 1 | RX Power LSB | | |
| 106-109 | 4 | Optional Diagnostics | `0xFF 0xFF 0xFF 0xFF` (No support) | Monitor Data for Optional Laser temperature and TEC current |
| 110 | 1 | Status/Control | `0x82` (Soft TX disable, disable laser, digital TX fault, digital RX LOS, power&data ready) | Optional Status and Control Bits |
| 111 | 1 | Reserved | `0x00` | Reserved |
| 112-113 | 2 | Alarm Flags | Supported | Diagnostic Alarm Flag Status Bits |
| 114 | 1 | Tx Input EQ control | `0xFF` (No support) | Tx Input equalization level control |
| 115 | 1 | Rx Out Emphasis control | `0xFF` (No support) | Rx Output emphasis level control |
| 116-117 | 2 | Warning Flags | Supported | Diagnostic Warning Flag Status Bits |
| 118-119 | 2 | Ext Status/Control | `0x00 0x00` (No support) | Extended module control and status bytes |
| | | **GENERAL USE FIELDS** | | |
| 120-126 | 7 | Vendor Specific | `0x70 0x00 0x00 0x00 0x00 0x00 0x00` | Vendor specific memory addresses |
| 127 | 1 | Table Select | `0x00` | Optional Page Select |
| | | **USER WRITABLE EEPROM** | | |
| 128-190 | 63 | Reserved | `0xFF 0xFF 0xFF...` | Reserved |
| 191-214 | 24 | GPON LOID or PLOAM | Depends on the configuration of the SFP | GPON Logical ONU ID or PLOAM, depends on `GPON LOID/PLOAM switch` |
| 215-231 | 17 | GPON LPWD | Depends on the configuration of the SFP | GPON Logical Password |
| 232 | 1 | GPON LOID/PLOAM switch | Depends on the configuration of the SFP | `0x01` to enable LOID, `0x02` to enable PLOAM |
| 233-240 | 8 | GPON SN | Unique in each SFP | GPON Serial Number (ME 256) |
| 241-247 | 7 | Reserved | `0xFF 0xFF 0xFF...` | Reserved |
| 248-255 | 8 | Vendor Control | `0xFF 0xFF 0xFF...` (Not used) | Vendor specific control functions |
| | | **EXTRA EEPROM FIELDS** | | **Not exposed to I2C interface** |
| 256-511 | 256 | Unknown vendor specific | | Probably not used in current SFPs |
| 512-531 | 20 | GPON Equipment ID | | GPON Equipment ID (ME 257), may not work in some firmwares |
| 532-535 | 4 | GPON Vendor ID | | GPON Vendor ID (ME 256 and more), may not work in some firmware |
| 536-639 | 104 | Reserved | | Reserved |
{% include alert.html content="For more information, see the SFF-8472 Rev 11.0 specification." alert="Info" icon="svg-info" color="blue" %}
# Miscellaneous Links
- [FS.com](https://www.fs.com/it/products/133619.html)
- [General setting of lantiq](https://forum.fibra.click/d/23881-ma5671a-e-vodafone-25-gbps/64)
- [Usage GPON module SFP in Spain](https://forum.mikrotik.com/viewtopic.php?t=116364&start=300)
- [SourcePhotonics SPS-34-24T-HP-TDFO Datasheet](https://www.sourcephotonics.com/wp-content/uploads/2017/08/DS-8085-02_SPS-34-24T-HP-TDFO.pdf)
- [FS.com GPON-ONU-34-20BI Configuration Guide](https://resource.fs.com/mall/doc/20230831180515egrzs6.pdf)
---
[^subunit]: The subunit are 10000 times smaller than the specified unit
================================================
FILE: _ont/ont-fs-com-mod.md
================================================
---
title: FS.com Modded Firmware for Huawei MA5671A and FS.com GPON-ONU-34-20BI
has_children: false
redirect_to: /ont-huawei-ma5671a-fs-mod
layout: default
parent: FS.com GPON ONU Stick with MAC (GPON-ONU-34-20BI)
---
================================================
FILE: _ont/ont-fs-com-onu1710-1g.md
================================================
---
title: FS.com ONU1710-1G
has_children: false
layout: default
parent: FS.com
---
# Hardware Specifications
| | |
| ------------ | -------------------------------------------- |
| Vendor/Brand | FS.com |
| Model | ONU1710-1G |
| P/N | ONU1710-1G |
| SKU | 154796 |
| Chipset | Realtek RTL9601D |
| CPU | MIPS-I 32-bit (big-endian) |
| CPU Clock | 300 MHz |
| RAM | 32 MB (DDR2, 325 MHz) |
| Flash | 4 MB (SPI NOR, ZBIT JEDEC 5E4016) |
| Bootloader | U-Boot 2011.12.NA (Realtek-modified) |
| System | Linux 2.6.30.9 (Luna SDK / RSDK-1.5.6p2) |
| XPON Mode | GPON + EPON dual-mode adaptive |
| Optics | 1x PON (SC/UPC) |
| Power | 12V DC, 5.5mm barrel jack (center positive) |
| Ethernet | 1x GE (1000BASE-T, RJ45) |
| IP address | 192.168.123.1 |
| Web Gui | port 80, user `admin`, password `super&123` |
| SSH | no |
| Telnet | port 23, user `admin`, password `super&123` |
| Serial | 115200 8-N-1 3.3V |
| Form Factor | Desktop ONT |
## Specifications
The ONU1710-1G is an XPON (GPON + EPON) dual-mode adaptive ONT with 1x GE Ethernet port. It supports 1.25 Gbps upstream and 2.5 Gbps downstream (GPON mode), complies with ITU-T G.984/G.987/G.988/G.989 standards, and supports network deployment up to 20 km.
*Adapted from vendor's marketing material.*
## List of software versions
- 10.0.52B.2095 (2025-03-20)
## Default credentials
Only the `user` account is publicly documented by FS.com. The `admin` account was discovered through firmware analysis.
| Username | Password | Access | Notes |
| -------- | ------------- | ---------- | ------------------------------------------------------ |
| `user` | `123456` | Web/Telnet | Limited user account (publicly documented) |
| `admin` | `super&123` | Web/Telnet | Super user / administrator |
## Hardware
{% include image.html file="fs-com-onu1710-1g/pcb.jpg" alt="FS.com ONU1710-1G PCB" caption="FS.com ONU1710-1G PCB" %}
Key components:
- SoC: Realtek RTL9601D (MIPS-I 32-bit, 88-pin)
- RAM: 32 MB DDR2
- Flash: 4 MB SPI NOR (ZBIT JEDEC 5E4016)
- Optical transceiver: Semtech GN25L95 BOSA, SC/UPC connector
- Serial port: 4-pin 2.54mm header (unpopulated) 3.3V 115200 8-N-1
## U-Boot environment
{% include serial_dump.html title="Full printenv output" file="fs-com-onu1710-1g/uboot-env.txt" %}
Key variables:
| Variable | Value (default) | Description |
| -------------- | --------------- | ------------------------------------------------------------------ |
| `sw_active` | `1` | Currently active image slot (0 or 1; both point to same flash) |
| `sw_commit` | `1` | Last committed image slot |
| `sw_tryactive` | `2` | Boot control: `2` = boot by `sw_commit`; `0`/`1` = first-boot try |
| `sw_valid0/1` | `1` | Image slot validity flag |
| `sw_version0/1`| `10.0.52B.2095` | Firmware version string for each slot |
| `ethaddr` | `00:E0:4C:86:70:01` | Factory MAC address |
| `bootdelay` | `2` | U-Boot countdown in seconds before autoboot |
| `serverip` | `192.168.123.100` | TFTP server address for firmware upload |
From the running Linux shell, U-Boot environment variables can be read and written using `/bin/nv getenv ` and `/bin/nv setenv `.
## List of partitions
The flash uses a single-image layout — both image slots (`k0`/`k1`, `r0`/`r1`) point to the same physical offsets.
| dev | offset | size | erasesize | name | type |
| ---- | ---------- | -------- | --------- | -------- | ------------------------------ |
| mtd0 | 0x000000 | 0x02A000 | 0x001000 | "boot" | Preloader + U-Boot (LZMA) |
| mtd1 | 0x02A000 | 0x002000 | 0x001000 | "env" | U-Boot environment (primary) |
| mtd2 | 0x02C000 | 0x002000 | 0x001000 | "env2" | U-Boot environment (backup) |
| mtd3 | 0x02E000 | 0x012000 | 0x001000 | "config" | JFFS2 configuration filesystem |
| mtd4 | 0x040000 | 0x139000 | 0x001000 | "k0" | Kernel uImage (LZMA) |
| mtd5 | 0x179000 | 0x287000 | 0x001000 | "r0" | Root filesystem (SquashFS+LZMA)|
| mtd6 | 0x040000 | 0x139000 | 0x001000 | "k1" | Kernel uImage (same as k0) |
| mtd7 | 0x179000 | 0x287000 | 0x001000 | "r1" | Root filesystem (same as r0) |
To dump the full flash contents over serial from the U-Boot prompt, read it in 1 MB chunks using `sf read` and dump each chunk as hex with `md.b`:
```
sf probe
sf read 0x80000000 0x000000 0x100000
md.b 0x80000000 0x100000
sf read 0x80000000 0x100000 0x100000
md.b 0x80000000 0x100000
sf read 0x80000000 0x200000 0x100000
md.b 0x80000000 0x100000
sf read 0x80000000 0x300000 0x100000
md.b 0x80000000 0x100000
```
Capture the serial output with a terminal emulator, then convert the hex dump to binary.
## Bootup
{% include serial_dump.html title="Full boot log captured on serial port" file="fs-com-onu1710-1g/bootlog.txt" %}
1. **Preloader** (Bismarck 3.5) initializes DDR2 DRAM, decompresses and launches U-Boot
2. **U-Boot** (2s delay, 115200 baud) checks `sw_tryactive`: if it equals `2`, boots by `sw_commit`; otherwise it is a first-boot attempt that sets `sw_tryactive=2`, saves env, and boots the selected image
3. **Kernel** boots with `console=ttyS0,115200`, mounts SquashFS root
4. **`/etc/init.d/rcS`** runs init scripts `rc0`–`rc63` sequentially:
- `rc2`: Mounts `/proc`, ramfs, sysfs, tmpfs `/dev`; mounts JFFS2 config to `/var/config`; brings up `lo` and `nas0`
- `rc3`: Runs `configd`, loads XML config (`config_xmlconfig.sh -b`), inserts kernel modules (`insdrv.sh`), runs SDK init (`runsdk.sh`), starts OMCI (`checkomci`)
- `rc10`: Tunes kernel network parameters (conntrack timeouts, IP forwarding)
- `rc14`: Configures IPv6 sysctl settings
- `rc32`: Launches `startup` daemon and BOSA optical calibration (`rtkbosa.sh`)
- `rc34`: Enables hardware watchdog
- `rc35`: Enables PHY ports
## Filesystem
The root filesystem is a SquashFS image (LZMA-compressed) with 525 files and stripped binaries. Runtime state is kept on a tmpfs (`/var`) and the JFFS2 config partition (mounted at `/var/config`).
```
squashfs-root/
bin/ -- BusyBox 1.12.4 + OMCI tools (omcicli, omci_app, checkomci), boa, iptables,
-- diag, ethctl, flash (aliased as nv), configd, xmlconfig, pondetect, igmpd, ...
etc/
init.d/ -- rcS, rc2, rc3, rc10, rc14, rc32, rc34, rc35
scripts/ -- mnt_cfgfs.sh, insdrv.sh, runsdk.sh, rtkbosa.sh, factory reset helpers
home/httpd/
boa.conf -- Boa v0.94 web server configuration (User 0, Group 0)
web/ -- 243 ASP pages (WAN, LAN, OMCI info, VLAN, QoS, firewall, TR-069, diagnostics, ...)
lib/
librtk.so -- Realtek SDK (~964 KB, largest userspace library)
libmib.so -- MIB management
libomci_*.so -- OMCI stack (API, FAL, GOS, MIB, voice)
libmultilang_*.so -- i18n strings (Chinese + English)
modules/ -- Kernel modules (omcidrv.ko, pf_rtk.ko, epon_drv.ko, igmp_drv.ko,
-- europa_drv.ko, rldp_drv.ko, dpbcaster.ko, ...)
omci/ -- 127 OMCI MIB handler plugins (.so), one per managed entity type
voip/ -- SIP/VoIP libraries
etc/scripts/flash -- Shell script for reading/writing MIB variables via xmlconfig
```
The config partition (`/var/config`) holds `lastgood.xml` (XML runtime config, persisted across reboots) and OMCI MIB state (`omci_mib.cfg`).
Note: the `flash` MIB tool (`/etc/scripts/flash`) and the `nv` U-Boot env tool (`/bin/nv`) are separate commands for different purposes.
# GPON/OMCI settings
## Via web UI
The ONU1710-1G exposes several hidden web UI pages for GPON/OMCI configuration that are not linked in the main navigation. Log in as `admin` and access them by URL.
### Version modification (vermod.asp)
Accessible at `http://192.168.123.1/vermod.asp`, this page allows changing:
- Manufacturer, OUI, Product Class
- Serial Number, Provisioning Code
- Spec Version, Software Version, Hardware Version
- GPON Serial Number
- ELAN MAC Address
- **Export**: Download the current OMCI event log
- **Import**: Upload a shell script that is executed as root (see Security section)
{% include image.html file="fs-com-onu1710-1g/vermod.png" alt="FS.com ONU1710-1G vermod.asp" caption="Version modification page (vermod.asp)" %}
### GPON configuration (gpon.asp)
Accessible at `http://192.168.123.1/gpon.asp`, this page allows changing:
- PLOAM Password (max 10 characters)
- LOID (max 24 characters)
- LOID Password (max 12 characters)
### OMCI information (omci_info.asp)
Accessible at `http://192.168.123.1/omci_info.asp`, this page allows viewing/changing:
- OMCI Software Version 1/2
- CWMP Product Class
- CWMP Hardware Version
- OMCI Vendor ID
### WAN configuration (waneth.asp)
Accessible at `http://192.168.123.1/waneth.asp`, this page supports the following connection types:
- **Bridge**: Transparent L2 bridge (no NAT, no routing)
- **PPPoE**: PPP over Ethernet (typical ISP authentication)
- **IPoE**: IP over Ethernet (DHCP or static IP)
The page also allows configuring NAPT (NAT), IGMP snooping, QoS, default route, and IPv6.
## Via Telnet
Configuration can be done via telnet using the `flash` command (`/etc/scripts/flash`). The user and admin passwords can also be changed through the web UI.
```sh
# LOID and PLOAM password
flash get LOID
flash set LOID YOURLOID
flash get LOID_PASSWD
flash set LOID_PASSWD YOURLOIDPASSWORD
flash get GPON_ONU_PASSWD
flash set GPON_ONU_PASSWD 1234567890
# GPON serial number / vendor ID
flash get GPON_SN
flash set GPON_SN ABCD12345678
flash get PON_VENDOR_ID
flash set PON_VENDOR_ID ABCD
# Hardware / software version strings (reported via OMCI)
flash get HW_HWVER
flash set HW_HWVER 1.0
flash get HW_CWMP_PRODUCTCLASS
flash set HW_CWMP_PRODUCTCLASS MyProduct
# OMCI software version
flash get OMCI_SW_VER1
flash set OMCI_SW_VER1 V1.9.0
flash get OMCI_SW_VER2
flash set OMCI_SW_VER2 V1.9.0
# PON mode (1=GPON, 2=EPON, 3=Ethernet)
flash get PON_MODE
flash set PON_MODE 1
# Bridge mode
flash get DIRECT_BRIDGE_MODE
flash set DIRECT_BRIDGE_MODE 1
# User and admin passwords
flash get USER_PASSWORD
flash set USER_PASSWORD newpassword
flash get SUSER_PASSWORD
flash set SUSER_PASSWORD newpassword
```
# Security considerations
{% include alert.html content="This device has extremely poor security practices and should not be used in any environment where it may be reachable by untrusted parties." alert="Warning" icon="svg-warning" color="red" %}
- **Undocumented default credentials**: The `admin` account (`super&123`) is not mentioned in any FS.com documentation but has full administrative access. The firmware also contains references to additional accounts (`adsl`/`xponadmin`, `xponadmin`/`xponre@1t3k`) in inactive backup config files and hardcoded code paths. These were not usable but are likely leftovers from the Realtek SDK.
- **Unencrypted management protocols**: Both the web interface (HTTP port 80) and Telnet (port 23) transmit credentials and configuration in cleartext. Both are enabled by default.
- **Arbitrary script upload and execution**: The `vermod.asp` page has an "Import" form that posts to `/boaform/formImportOMCIShell`. The handler writes the uploaded file to `/tmp/omcishell` and executes it immediately via `system("/bin/sh /tmp/omcishell")`. Likely an intentional debug feature that allows the `admin` user to execute commands as root without going through telnet.
- **Privilege escalation via auth realm mismatch**: The Boa web server maps `/` to admin credentials and `/boaform/admin` to user credentials. Admin-only handlers like `formImportOMCIShell` can be reached by the low-privilege `user` account by requesting `/boaform/admin/formImportOMCIShell` instead. This gives the unprivileged account full root access.
- **All services run as root**: The web server (Boa), telnet daemon, and OMCI stack all run with root privileges (UID 0).
- **Management services bind on all interfaces**: Boa (port 80) and telnet (port 23) bind to `::` with no iptables rules. When connected to GPON, depending on the ISP's network configuration, these services may be reachable beyond the LAN; though this has not been practically verified.
# Miscellaneous Links
- [FS.com ONU1710-1G Product Page](https://www.fs.com/eu-en/products/154796.html)
- [Hacking RTL960x](https://github.com/Anime4000/RTL960x)
================================================
FILE: _ont/ont-fs-com.md
================================================
---
title: FS.com
has_children: true
layout: default
---
================================================
FILE: _ont/ont-genexis-ft-g2110c-2.5g.md
================================================
---
title: FiberTwist G2110C-2.5G
has_children: false
layout: default
parent: Genexis
---
# Hardware Specifications
| | |
| --------------- | ------------------------------------------------------------ |
| Vendor/Brand | Genexis FiberTwist |
| Model | G2110C-2.5G |
| Chipset | Realtek RTL9601D |
| Flash | 128MB |
| RAM | 32MB |
| System | Linux 3.18 (Luna SDK 3.3) |
| LAN | 2.5GBaseT |
| Optics | SC/APC |
| IP address | 192.168.100.1/24 or 192.168.1.1/24 |
| Web Gui | Can be enabled, locked down by iptables rule and missing CSS |
| SSH | |
| Telnet | ✅ user `company`, password `amyM77yY` |
| Serial | ✅ |
| Serial baud | 115200 |
| Serial encoding | 8-N-1 |
| Form Factor | ONT |
{% include image.html file="ft-g2110c-2.5g-front.jpg" alt="FiberTwist G2110C-2.5G Front" caption="FiberTwist G2110C-2.5G Front" %}
{% include image.html file="ft-g2110c-2.5g-back.jpg" alt="FiberTwist G2110C-2.5G Back" caption="FiberTwist G2110C-2.5G Back" %}
## Optical Header installation backplate
{% include image.html file="ft-g2110c-2.5g-optical-header-1.jpg" alt="FiberTwist G2110C-2.5G Optical Header installation backplate" caption="FiberTwist G2110C-2.5G Optical Header installation backplate" %}
{% include image.html file="ft-g2110c-2.5g-optical-header-2.jpg" alt="FiberTwist G2110C-2.5G Optical Header installation backplate" caption="FiberTwist G2110C-2.5G Optical Header installation backplate" %}
{% include image.html file="ft-g2110c-2.5g-optical-header-3.jpg" alt="FiberTwist G2110C-2.5G Optical Header installation backplate" caption="FiberTwist G2110C-2.5G Optical Header installation backplate" %}
## Serial
The ONT has a TTL 3.3v UART console (configured as 115200 8-N-1) that can be accessed from the top surface. To accept TX line commands, the GND of the TTL adapter should be attached to the ONT's shield:
{% include image.html file="ft-g2110c-2.5g-internal.jpg" alt="FiberTwist G2110C-2.5G Internal" caption="FiberTwist G2110C-2.5G Internal" %}
{% include alert.html content="Some USB TTL adapters label TX and RX pins the other way around: try swapping them if the connection doesn't work." alert="Note" icon="svg-warning" color="yellow" %}
## List of software versions
- C-5.6.1-R
- C-5.7.0-R
- C-5.7.1-DEV3
- C-5.7.1-EFT1
## List of partitions
| dev | size | erasesize | name |
| ----- | -------- | --------- | --------------- |
| mtd0 | 00040000 | 00001000 | "boot" |
| mtd1 | 00002000 | 00001000 | "env" |
| mtd2 | 00002000 | 00001000 | "env2" |
| mtd3 | 0003c000 | 00001000 | "config" |
| mtd4 | 00300000 | 00001000 | "k0" |
| mtd5 | 004c0000 | 00001000 | "r0" |
| mtd6 | 00300000 | 00001000 | "k1" |
| mtd7 | 004c0000 | 00001000 | "r1" |
| mtd8 | 00001000 | 00001000 | "Partition_008" |
| mtd9 | 00001000 | 00001000 | "Partition_009" |
| mtd10 | 00001000 | 00001000 | "Partition_010" |
| mtd11 | 00001000 | 00001000 | "Partition_011" |
| mtd12 | 00300000 | 00001000 | "linux" |
| mtd13 | 004c0000 | 00001000 | "rootfs" |
This ONT supports dual boot.
`k0` and `r0` respectively contain the kernel and firmware of the first image, `k1` and `r1` the kernel and the firmware of the second one
# GPON/OMCI settings
{% include alert.html content="Some variables are write-protected, you need to unlock them before proceeding" alert="Info" icon="svg-info" color="blue" %}
Use the following command to unlock write-protected variables:
```sh
# nv setenv ProtectEnv 0
```
## Getting/Setting ONU GPON Serial Number
{% include alert.html content="If your serial number has letters after the Vendor ID (e.g. ZTEGAAA01234), put them in lower case (e.g. ZTEGaaa01234)" alert="Info" icon="svg-info" color="blue" %}
```sh
# nv setenv GponSn ZTEGaaa01234
```
Reboot the ONT to apply any changes
You can check if the serial number was correctly changed using the following command:
```sh
# diag gpon get serialnumber
ZTEGaaa01234
```
## Getting/Setting ONU GPON PLOAM password
{% include alert.html content="The PLOAM password is stored in ASCII format" alert="Info" icon="svg-info" color="blue" %}
```sh
# /etc/scripts/flash get GPON_PLOAM_PASSWD
GPON_PLOAM_PASSWD=AAAAAAAAAA
# /etc/scripts/flash set GPON_PLOAM_PASSWD AAAAAAAAAA
```
It seems Genexis has also included a U-Boot variable to store the PLOAM. On currently known firmwares (5.6.1 and 5.7.0) it is not read by the `omci_app` daemon.
For future-proofing reasons, set your PLOAM also on the before-mentioned U-Boot env using the following command in the OS shell:
```sh
# nv setenv ploampwd 1234567890
ploampwd=1234567890
```
## Setting OMCI software version (ME 7)
The stock firware does not allow changing of the primary and standby software version.
As the ONT uses the Luna SDK, the `/etc/scripts/flash` shell script can be easily modified by creating a custom firmware with the same set of patches suggested e.g. for the [Technicolor AFM0002](/ont-technicolor-afm0002) ONT.
You can then check if the software version was changed correctly with this command (take a look at the `Version` field):
```sh
# omcicli mib get 7
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
SWImage
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
=================================
EntityID: 0x00
Active: 0
Committed: 0
Valid: 1
*Version: V6.0.10N14*
ProductCode:
ImageHash: 0x00000000000000000000000000000000
=================================
=================================
EntityID: 0x01
Active: 1
Committed: 1
Valid: 1
*Version: V6.0.10N14*
ProductCode:
ImageHash: 0x00000000000000000000000000000000
=================================
```
## Setting OMCI hardware version (ME 256)
```sh
# nv setenv HV G2110CE2V1D0
```
Reboot the ONT to apply the change
## Setting OMCI equipment ID (ME 257)
```sh
# nv setenv ProdName FT-G2110C-2.5G
```
Reboot the ONT to apply the change
# Advanced settings
## Setting management IP
```sh
# /etc/scripts/flash get LAN_IP_ADDR
LAN_IP_ADDR=192.168.1.1
# /etc/scripts/flash set LAN_IP_ADDR 192.168.1.1
```
# Known Bugs
- The web UI can be enabled by modding the firmware, but the daemon will crash if no optical signal is received
# Miscellaneous Links
- [FiberTwist G2110C-2.5G](https://genexis.eu/content/uploads/2020/07/FiberTwist-G2110C-2.5G-Installation-Guide-v1.0-EN.pdf)
================================================
FILE: _ont/ont-genexis-ft-g2110c.md
================================================
---
title: FiberTwist G2110C
has_children: false
layout: default
parent: Genexis
---
# Hardware Specifications
| | |
| --------------- | ------------------ |
| Vendor/Brand | Genexis FiberTwist |
| Model | G2110C |
| Chipset | |
| Flash | |
| RAM | |
| System | |
| LAN | 1 GBaseT |
| Optics | SC/APC |
| IP address | |
| Web Gui | |
| SSH | |
| Telnet | |
| Serial | |
| Serial baud | |
| Serial encoding | |
| Form Factor | ONT |
{% include image.html file="ft-g2110c-front.jpg" alt="FiberTwist G2110C Front" caption="FiberTwist G2110C Front" %}
{% include image.html file="ft-g2110c-back.jpg" alt="FiberTwist G2110C Back" caption="FiberTwist G2110C Back" %}
{% include image.html file="ft-g2110c-ports.jpg" alt="FiberTwist G2110C Ports" caption="FiberTwist G2110C Ports" %}
## Optical Header installation backplate
{% include image.html file="ft-g2110c-optical-header-1.jpg" alt="FiberTwist G2110C-2.5G Optical Header installation backplate" caption="FiberTwist G2110C-2.5G Optical Header installation backplate" %}
# Miscellaneous Links
- [FiberTwist G2110C](https://genexis.eu/wp-content/uploads/2024/08/FiberTwist-G2110C-Installation-Guide-v.3.0-EN.pdf)
================================================
FILE: _ont/ont-genexis.md
================================================
---
title: Genexis
has_children: true
layout: default
---
================================================
FILE: _ont/ont-halny-hl-gsfp.md
================================================
---
title: HALNy HL-GSFP
has_children: false
layout: default
parent: HALNy
---
# Hardware Specifications
| | |
| ---------------- | -------------------- |
| Vendor/Brand | HALNy |
| Model | HL-GSFP |
| ODM | T&W |
| ODM Product Code | TW2362H-CDEL |
| Chipset | Lantiq PEB98035 |
| Flash | 8 MB |
| RAM | 64 MB |
| CPU | MIPS 34Kc interAptiv |
| CPU Clock | 400MHz |
| System | OpenWRT |
| HSGMII | Yes |
| Optics | SC/APC |
| IP address | 192.168.77.154/30 |
| Web Gui | none |
| SSH | port 22666 |
| Telnet | |
| Serial | ✅ |
| Serial baud | 115200 |
| Serial encoding | 8-N-1 |
| Form Factor | miniONT SFP |
{% include image.html file="hl-gsfp-1.png" alt="HALNy HL-GSFP top" caption="HALNy HL-GSFP top" %}
{% include image.html file="hl-gsfp-2.png" alt="HALNy HL-GSFP bottom" caption="HALNy HL-GSFP bottom" %}
## Firmware is interchangeable with:
- [Zyxel PMG3000-D20B](/ont-zyxel-pmg3000-d20b)
- [D-LINK DPN-100-Rev-A2](/ont-d-link-dpn-100-rev-a2)
- [Zisa OP151s](/ont-zisa-op151s)
- [T&W TW2362H-CDEL](/ont-t-w-tw2362h-cdel)
## List of partitions
| dev | size | erasesize | name |
| ---- | -------- | --------- | ------------- |
| mtd0 | 00040000 | 00010000 | "uboot" |
| mtd1 | 00020000 | 00010000 | "uboot_env" |
| mtd2 | 003d0000 | 00010000 | "image0" |
| mtd3 | 003d0000 | 00010000 | "linux" |
| mtd4 | 002a87aa | 00010000 | "rootfs" |
| mtd5 | 000a0000 | 00010000 | "rootfs_data" |
================================================
FILE: _ont/ont-halny.md
================================================
---
title: HALNy
has_children: true
layout: default
---
================================================
FILE: _ont/ont-hilink-hl23446.md
================================================
---
title: Hilink HL23446
has_children: false
alias: CarlitoxxPro CPGOS03-0490 v1
layout: default
parent: Hilink
---
# Hardware Specifications
| | |
| ------------ | -------------------- |
| Vendor/Brand | Hilink |
| Model | HL23446 |
| Chipset | Lantiq PEB98035 |
| Flash | 16 MB |
| RAM | 64 MB |
| CPU | MIPS 34Kc interAptiv |
| CPU Clock | 400MHz |
| System | OpenWRT |
| HSGMII | Yes |
| Optics | SC/APC |
| IP address | |
| Web Gui | ✅ |
| SSH | |
| Telnet | |
| Serial | |
| Form Factor | miniONT SFP |
{% include image.html file="hl23446.png" alt="Hilink HL23446" caption="Hilink HL23446" %}
## Possible Clones
- CarlitoxxPro CPGOS03-0490 **v1**
## Firmware is interchangeable with:
- [Huawei MA5671A](/ont-huawei-ma5671a)
- [Nokia G-010S-P](/ont-nokia-g-010s-p)
- [FS.com GPON ONU Stick with MAC / SourcePhotonics SPS-34-24T-HP-TDFO](/ont-fs-com-gpon-onu-stick-with-mac)
- {:.text-red-200 } Dasan H650SFP
- {:.text-red-200 } DpOptics D23446
- {:.text-red-200 } Photonics SPS-34-24T-HP-TDFO
## List of partitions
| dev | size | erasesize | name |
| ---- | -------- | --------- | ------------- |
| mtd0 | 00040000 | 00010000 | "uboot" |
| mtd1 | 00080000 | 00010000 | "uboot_env" |
| mtd2 | 00740000 | 00010000 | "linux" |
| mtd3 | 0061eedc | 00010000 | "rootfs" |
| mtd4 | 00370000 | 00010000 | "rootfs_data" |
| mtd5 | 00800000 | 00010000 | "image1" |
# Miscellaneous Links
- [Usage GPON module SFP in Spain](https://forum.mikrotik.com/viewtopic.php?t=116364&start=300)
================================================
FILE: _ont/ont-hilink.md
================================================
---
title: Hilink
has_children: true
layout: default
---
================================================
FILE: _ont/ont-hisense-lte3415-sca+.md
================================================
---
title: HiSense LTE3415-SCA+
has_children: false
redirect_to: /ont-technicolor-afm0002
layout: default
parent: HiSense
---
================================================
FILE: _ont/ont-hisense-lte3415-sh+.md
================================================
---
title: HiSense LTE3415-SH+
has_children: false
redirect_to: /ont-technicolor-afm0003
layout: default
parent: HiSense
---
================================================
FILE: _ont/ont-hisense.md
================================================
---
title: HiSense
has_children: true
layout: default
---
================================================
FILE: _ont/ont-huawei-eg8010h.md
================================================
---
title: Huawei EG8010H
has_children: false
layout: default
parent: Huawei
---
# Hardware Specifications
| | |
| ------------ | ------------------------------------------------------------------------------------ |
| Vendor/Brand | Huawei |
| Model | EG8010H |
| ODM | ✅ |
| Chipset | HiSilicon |
| Flash | 128MiB SLC NAND (DS35Q1GA-IB) |
| RAM | 256MiB |
| CPU | HiSilicon A9 dual core (ARMv7) |
| System | Dopra Linux |
| 2.5GBaseT | No |
| Optics | SC/APC and SC/UPC |
| IP address | 192.168.100.1 or 192.168.18.1 |
| Web Gui | ✅ user `root`, password `admin` or `adminHW` and user `Epadmin`, password `adminEp` |
| SSH | |
| Telnet | After enabling, user `root`, password `admin` or `adminHW` |
| | user `Eproot`, password `adminEp` |
| Serial | |
| Form Factor | ONT |
## Hardware revisions
- v1: Horizontal PON port
- v2: Horizontal PON port
- v3: Vertical PON port
- v4: Vertical PON port
- v5: Vertical PON port
- v6: Vertical PON port
## List of software versions
- V5R020C10S035
{% include_relative ont-huawei-useful-command.md %}
================================================
FILE: _ont/ont-huawei-eg8010n.md
================================================
---
title: Huawei EG8010N
has_children: false
layout: default
parent: Huawei
---
# Hardware Specifications
| | |
| ------------ | ------- |
| Vendor/Brand | Huawei |
| Model | EG8010N |
| Chipset | |
| Flash | |
| RAM | |
| CPU | |
| System | |
| 2.5GBaseT | Yes |
| Optics | |
| IP address | |
| Web Gui | |
| SSH | |
| Telnet | |
| Serial | |
| Form Factor | ONT |
================================================
FILE: _ont/ont-huawei-hg8010h.md
================================================
---
title: Huawei HG8010H
has_children: false
layout: default
parent: Huawei
---
# Hardware Specifications
| | |
| ------------ | ---------------------------------------------------------------------------------------------- |
| Vendor/Brand | Huawei |
| Model | HG8010H |
| ODM | ✅ |
| Chipset | HiSilicon SD5116 |
| Flash | 128MiB (SLC NAND DS35Q1GA-IB) |
| RAM | 256MiB |
| CPU | Hisilicon A9 dual core (ARMv7) |
| System | Dopra Linux |
| 2.5GBaseT | No |
| Optics | SC/APC and SC/UPC |
| IP address | 192.168.100.1 |
| Web Gui | ✅ user `root`, password `admin` or `adminHW` and user `telecomadmin`, password `admintelecom` |
| SSH | |
| Telnet | After Enabling user `root`, password `admin` or `adminHW` |
| Serial | |
| Form Factor | ONT |
{% include image.html file="hg8010h.jpg" alt="HG8010H" caption="HG8010H: Horizontal PON port (left, middle); vertical PON port (right)" %}
{% include image.html file="hg8010hvorr.jpg" alt="HG8010Hv3/4/5" caption="Bottom of the HG8010Hv3/4/5" %}
{% include image.html file="hg8010hv6.jpg" alt="HG8010Hv6" caption="Bottom of the HG8010Hv6" %}
## Hardware revisions
- v1: Horizontal PON port
- v2: Horizontal PON port
- v3: Vertical PON port
- v4: Vertical PON port
- v5: Vertical PON port
- v6: Vertical PON port
## List of software versions
- HWTCA31610003
- V3R013C10S112
- V3R015C10S106
- V3R016C10S003 (V300R016C10SPC003B010)
- V3R017C00S100
- V3R017C10S201 (V300R017C10SPC201B255)
- V5R020C10S020 (V500R020C10SPC020B014 - V500R020C10SPC020A2011020049)
- V5R020C10S024 (V500R020C10SPC024B001)
- V5R020C10S025 (V500R020C10SPC025B002)
- V5R020C10S115 (V500R020C10SPC115B270)
- V3R017C10S265
## List of partitions
0x000000000000-0x000000100000 : "bootcode" (1MiB)
0x000000100000-0x000008000000 : "ubilayer_v5" (127MiB)
{% include_relative ont-huawei-useful-command.md %}
# Miscellaneous Links
- [Exploring the Huawei HG8010H GPON ONT](https://www.linux.it/~md/text/gpon-sha2017.pdf)
- [Unlock HG8010Hv3 softmode](https://lafibre.info/orange-installation/unlock-hg8010gv3-softmode/)
- [Notes on a Huawei HG810H (N.B. SSL error)](https://umbriel.fr/blog/Notes_on_a_Huawei_HG8010H.html)
- [Encrypt/Decrypt configuration file of most HuaWei HG routers](https://github.com/clippit/huawei-hg)
# Teardown and other photos
## v1-2
{% include image.html file="hg8010h_teardown_1.jpg" alt="HG8010Hv1/2 Teardown" caption="HG8010Hv1/2: Teardown" %}
{% include image.html file="hg8010h_teardown_2.jpg" alt="HG8010Hv1/2 Teardown" caption="HG8010Hv1/2: Teardown" %}
## v6
{% include image.html file="hg8010h_teardown_1_v6.jpg" alt="HG8010Hv6 Teardown" caption="HG8010Hv6: Teardown" %}
{% include image.html file="hg8010h_teardown_2_v6.jpg" alt="HG8010Hv6 Teardown" caption="HG8010Hv6: Teardown" %}
================================================
FILE: _ont/ont-huawei-hg8110h.md
================================================
---
title: Huawei HG8110H
has_children: false
layout: default
parent: Huawei
---
# Hardware Specifications
| | |
| --------------- | -------------------------------- |
| Vendor/Brand | Huawei |
| Model | HG8110H |
| Chipset | |
| Flash | |
| RAM | |
| System | |
| 2.5GBaseT | No |
| Optics | SC/APC |
| IP address | |
| Web Gui | |
| SSH | |
| Telnet | |
| Serial | |
| Serial baud | |
| Serial encoding | |
| Form Factor | ONT |
## List of software versions
## List of partitions
# Miscellaneous Links
- [Openreach FTTP deployment](https://www.openreach.com/fibre-broadband)
================================================
FILE: _ont/ont-huawei-hg8240h.md
================================================
---
title: Huawei HG8240H
has_children: false
layout: default
parent: Huawei
---
# Hardware Specifications
| | |
| --------------- | -------------------------------- |
| Vendor/Brand | Huawei |
| Model | HG8240H |
| Chipset | |
| Flash | |
| RAM | |
| System | |
| 2.5GBaseT | No |
| Optics | SC/APC |
| IP address | |
| Web Gui | |
| SSH | |
| Telnet | |
| Serial | |
| Serial baud | |
| Serial encoding | |
| Form Factor | ONT |
## List of software versions
## List of partitions
# Miscellaneous Links
- [Openreach FTTP deployment](https://www.openreach.com/fibre-broadband)
================================================
FILE: _ont/ont-huawei-ma5671a-carlito.md
================================================
---
title: Carlito Firmware for Huawei MA5671A
has_children: false
parent: Huawei MA5671A
layout: default
---
{% include alert.html content="Be careful, backup goi_config from uboot before changing the firmware." alert="Info" icon="svg-info" color="blue" %}
# GPON ONU status
## Querying a particular OMCI ME
```sh
omci_pipe.sh meg MIB_IDX ME_IN
```
Where `MIB_IDX` is the MIB ID and `ME_IN` is the ME instance number
## Getting/Setting Speed LAN Mode
To enable the interface to sync at 2.5 Gbps / using HSGMII with auto-neg on:
```sh
fw_setenv sgmii_mode 5
```
To revert the afore-mentioned command:
```sh
fw_setenv sgmii_mode
```
To check the set value fo the LAN Mode:
```sh
onu lanpsg 0
```
The `link_status` variable tells the current speed:
| Value (for `sgmii_mode` and `link_status`) | Speed |
| ------------------------------------------ | ---------------------------------- |
| 3 | 1 Gbps / SGMII with auto-neg on |
| 4 | 1 Gbps / SGMII with auto-neg off |
| 5 | 2.5 Gbps / HSGMII with auto-neg on |
# GPON/OMCI settings
## Getting/Setting OMCI software version (ME 7)
```sh
fw_setenv image0_version V1.7.6-170626
fw_setenv image1_version V1.7.6-170626
```
## Setting ONU GPON PLOAM password
```sh
fw_setenv nPassword "0x30 0x31 0x32 0x33 0x34 0x35 0x36 0x37 0x38 0x39"
```
or
```sh
uci set gpon.ploam.nPassword="0x30 0x31 0x32 0x33 0x34 0x35 0x36 0x37 0x38 0x39"
uci commit
```
## Setting ONU GPON LOID and LOID password
```sh
fw_setenv omci_loid 1234567890
fw_setenv omci_lpwd password01
```
If LOID is disabled in the firmware try alternative software.
## Setting ONU GPON Serial Number
```sh
fw_setenv ont_serial ABCD12345678
```
or
```sh
uci set gpon.ploam.nSerial="0x48 0x57 0x54 0x43 0x9D 0xAC 0xC7 0xA3"
uci commit
```
## Setting and checking oem-generic
```sh
fw_setenv target oem-generic
fw_printenv target=oem-generic
```
================================================
FILE: _ont/ont-huawei-ma5671a-fs-mod.md
================================================
---
title: FS Modded Firmware for Huawei MA5671A and FS.com GPON-ONU-34-20BI
has_children: false
parent: Huawei MA5671A
layout: default
---
{% include alert.html content="The following wiki is only compatible with version 5 or later!" alert="Note" icon="svg-warning" color="red" %}
# Flashing the firmware
Flash the firmware image to image0 or image1 via [SSH](/ont-huawei-ma5671a/#flashing-a-new-rootfs-via-ssh) or via [TTL serial](/ont-huawei-ma5671a-ymodem) as usual.
After flashing, it is absolutely necessary to connect to the SFP via telnet using the IP 192.168.1.10:
```sh
telnet 192.168.1.10
```
Once connected via telnet to the SFP, execute the following commands. Then wait a few minutes until the end of the automatic procedure:
```sh
firstboot
reboot
```
Performing the procedure described above is necessary after each flash of this firmware, otherwise the SFP will not work!
# Login info
| | |
| ------------------ | ---------------------------------------------- |
| Username | root |
| Password | root |
| IP address | 192.168.1.10 |
| Telnet | Always available |
| TTL Serial | Always available |
| SSH | Only after the first configuration (firstboot) |
| Web | NO |
# GPON ONU status
## Getting the operational status of the ONU
```sh
onu ploam_state_get
```
## Getting optical laser status
```sh
otop -g s
```
## Getting information of the OLT vendor
```sh
omci_pipe.sh meg 131 0
```
## Querying a particular OMCI ME
```sh
omci_pipe.sh meg MIB_IDX ME_IN
```
Where `MIB_IDX` is the MIB ID and `ME_IN` is the ME instance number.
## Getting VLAN table rule
```sh
gtop -g "GPE VLAN rule"
```
## Getting GEM port status table
```sh
gtop -g e
```
## Getting/Setting Speed LAN Mode
To get the LAN Mode:
```sh
onu lan_port_status_get 0
```
The `link_status` variable tells the current speed:
| Value (for `sgmii_mode` and `link_status`) | Speed |
| ------------------------------------------ | ---------------------------------- |
| 3 | 1 Gbps / SGMII with auto-neg on |
| 4 | 1 Gbps / SGMII with auto-neg off |
| 5 | 2.5 Gbps / HSGMII with auto-neg on |
To change the default lan mode value you can use `fw_setenv sgmii_mode`. The firmware is already set to 2.5G auto-negotiation, you shouldn't touch it.
# GPON/OMCI settings
## Setting ONU GPON Serial Number
```sh
fw_setenv onu_serial "YOUR_SERIAL_ASCII"
```
## Setting ONU GPON PLOAM password
```sh
fw_setenv onu_ploam "YOUR_PLOAM_ASCII"
```
{% include alert.html content="If your ploam is in HEX convert it to ASCII, any non-printable characters write them in HEX with a slash in front, such as `\0x7F`. If the PLOAM is less than 10 bytes (one printable character counts as one byte, `\0x7F` also counts as one byte) add `\0x00` to the end to get to 10 bytes." alert="Note" icon="svg-info" color="blue" %}
## Setting ONU GPON LOID
```sh
fw_setenv onu_loid "YOUR_LOID"
```
## Setting ONU GPON LOID password
```sh
fw_setenv onu_loid_password "YOUR_LOID_PASSWORD"
```
## Setting OMCI vendor ID (ME 256)
```sh
fw_setenv omci_vendor_id "YOUR_VENDOR_ID"
```
## Setting OMCI equipment ID (ME 257)
```sh
fw_setenv omci_equip_id "YOUR_EQUIP_ID"
```
## Setting OMCI hardware version (ME 256)
```sh
fw_setenv omci_hw_ver "YOUR_HW_VER"
```
## Setting OMCI software version (ME 7)
```sh
fw_setenv image0_version "YOUR_SW_VERSION_0"
fw_setenv image1_version "YOUR_SW_VERSION_1"
```
# Advanced settings
{% include alert.html content="Changing these is normally not necessary and not changing them is a good idea" alert="Note" icon="svg-warning" color="red" %}
## Setting custom OMCI MIB file
Copy the MIB file to /etc/mibs, then run this command:
```sh
fw_setenv mib_file_custom "YOUR_MIB_FILENAME"
```
## Setting management IP
```sh
fw_setenv ipaddr www.xxx.yyy.zzz
```
## Restore SFP to default config
```sh
firstboot
reboot
```
# SFP EEPROM settings
{% include alert.html content="Changing these is normally not necessary and not changing them is a good idea" alert="Note" icon="svg-warning" color="red" %}
## Setting SFP vendor name
```sh
fw_setenv sfp_vendor_name "YOUR_SFP_VENDOR_NAME"
```
## Setting SFP part name
```sh
fw_setenv sfp_part_name "YOUR_SFP_PART_NAME"
```
## Setting SFP vendor revision
```sh
fw_setenv sfp_vendor_rev "YOUR_SFP_VENDOR_REV"
```
## Setting SFP part serial
```sh
fw_setenv sfp_part_serial "YOUR_SFP_PART_SERIAL"
```
## Setting SFP manufacturing date code
```sh
fw_setenv sfp_date_code "YOUR_SFP_DATE_CODE"
```
## Setting SFP vendor data
```sh
fw_setenv sfp_vendor_data "YOUR_SFP_VENDOR_DATA"
```
# List of firmwares and files
- [6BA1896SPLQA42_MODDED_ver5-1.img](https://mega.nz/file/5tNwFC5A#aXOlrZgLZ6sL81CKDOoBmXotLqDTJLQzpvokYU--bz0){: .btn } md5hash: c4f1bbe1695803d3d449f911f43d78ea
- [6BA1896SPLQA42_MODDED_ver4.img](https://mega.nz/file/Q4dFTBqQ#L8N7kPZtSJ7FtbtxRcnxNF-W3b9wDbCeJ82YgnK7moQ){: .btn } md5hash: 63b0cc790c0087a5a1197c89b502b002
- [6BA1896SPLQA42_MODDED_ver3.img](https://mega.nz/file/YkMwHSgR#7Sdk0LIBv3hLQJKQ4TBub4ABtwYyCAdP6Rl2C3RBztw){: .btn } md5hash: 90348ff0ccaad475cf14d9d0a056cf72
================================================
FILE: _ont/ont-huawei-ma5671a-root-web.md
================================================
---
title: Root Procedure for Huawei MA5671A (V3)
has_children: false
parent: Huawei MA5671A
layout: default
---
# Root the stick
Connect the SFP adapter to the TTL adapter according to the following diagram:
| USB TTL (UART) Adapter | wire colour in picture | SFP 20pins Molex connector |
| ---------------------- | ---------------------- | -------------------------- |
| 3.3V | red | 3.3 (pin #15 and #16) |
| TX | green | RX (pin #2) |
| RX | blue | TX (pin #7) |
| GND | black | GND (pin #14) |
{% include image.html file="web-root-procedure/ttl-sfp.jpg" alt="Example of how the molex SFP - TTL connection should look like" caption="Example of how the molex SFP - TTL connection should look like" %}
{% include image.html file="web-root-procedure/sfp-sfp.jpg" alt="Example of how the SFP - molex SFP connection should look like" caption="Example of how the SFP - molex SFP connection should look like" %}
{% include alert.html content="Try PIN 10 or other GND PINs if the connection doesn't work with PIN 14." alert="Note" icon="svg-warning" color="yellow" %}
{% include alert.html content="Some USB TTL adapters label TX and RX pins the other way around: try to swap them if the connection doesn't work." alert="Note" icon="svg-warning" color="yellow" %}
Connect the TTL adapter to the computer, once done press the following button. A window will open that will execute the root.
{: .text-center .fs-6 }
{% include alert.html content="This browser is not compatible with the web-root procedure. See the Browser compatibility" alert="Note" icon="svg-warning" color="red" %}
{% include root_lantiq.html modelName="Huawei MA5671A" unlockHuaweiShell=true %}
{% include alert.html content="If this procedure does not work, you can use this [alternative procedure](/ont-huawei-ma5671a-ymodem)" alert="Info" icon="svg-info" color="blue" %}
# Connect to the stick via SSH
After this is done, reboot the stick, after connecting it to a router via an ethernet mediaconverter or directly plugging it in an SFP port, with the port's IP set to any IP of the `192.168.1.0/24` subnet (the stick has the IP `192.168.1.10`)
{% include alert.html content="If your LAN subnet is `192.168.1.0/24` make sure you have no ip conflicts." alert="Note" icon="svg-warning" color="yellow" %}
{% include alert.html content="On some SFP host devices you might not be able to connect to the stick if there's no optical signal (RX loss), in that case you need to connect the fiber to make changes on the stick" alert="Note" icon="svg-warning" color="yellow" %}
Run the terminal and login to the stick using ssh:
```shell
ssh root@192.168.1.10
```
The password is `admin123`.
{% include alert.html content="If you use a modern OpenSSH version (e.g. >= 8.8) you will have to enable some deprecated algorithms: `ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 -oHostKeyAlgorithms=+ssh-dss root@192.168.1.10`" alert="Info" icon="svg-info" color="blue" %}
# TX Fault / Serial
The stick stays in a perpetual "TX Fault" state since the same SFP pin is used for both serial and TX Fault signaling. If that causes you issues (normally it shouldn't), you can issue the commands below to disable it. Note that it will disable both the TX Fault signal and Serial on the stick after boot.
```sh
fw_setenv asc0 1
fw_setenv preboot "gpio set 3;gpio input 100;gpio input 105;gpio input 106;gpio input 107;gpio input 108"
```
In case you need to re-enable it, issue the following commands from the bootloader (FALCON)
```sh
FALCON => setenv asc0 0
FALCON => saveenv
```
# Miscellaneous Links
- [List of root procedure for Huawei MA5671A](/ont-huawei-ma5671a-root)
================================================
FILE: _ont/ont-huawei-ma5671a-root.md
================================================
---
title: List of Root Procedure for Huawei MA5671A
description: For documentation purposes only. This page contains the history of root procedures for the Huawei MA5671A stick.
has_children: false
parent: Huawei MA5671A
layout: default
nav_exclude: true
search_exclude: true
---
{% include alert.html content="It is strongly recommended that you only ever use the latest version ([Web root procedure](/ont-huawei-ma5671a-root-web)).
" alert="Info" icon="svg-info" color="blue" %}
# Root Procedure for Huawei MA5671A (V3 - Web serial)
Can be accessed via the link [Web root procedure](/ont-huawei-ma5671a-root-web)
{% include alert.html content="If this procedure does not work, you can use this [alternative procedure](/ont-huawei-ma5671a-ymodem). Do not use the V2 and V1 versions under any circumstances." alert="Info" icon="svg-warning" color="red" %}
# Root Procedure for Huawei MA5671A (V2 - Python)
{% include alert.html content="This version remains for documentation purposes only. Please use the latest procedure: [Web root procedure](/ont-huawei-ma5671a-root-web)" alert="Important" icon="svg-warning" color="red" %}
{% include alert.html content="It is strongly recommended that you only ever use the latest version ([Web root procedure](/ont-huawei-ma5671a-root-web)).
" alert="Info" icon="svg-info" color="blue" %}
1. Take the SFP molex and four coloured cables and solder them to the molex according to the following diagram:
| USB TTL (UART) Adapter | wire colour in picture | SFP 20pins Molex connector |
| ---------------------- | ---------------------- | -------------------------- |
| 3.3V | red | pin #15 and #16 |
| TX | orange | pin #2 |
| RX | yellow | pin #7 |
| GND | green | pin #14 |
{% include alert.html content="Use the GND wire as an ON/OFF switch, otherwise there will be a slight delay before data is displayed on the console (putty/TeraTerm)." alert="Important" icon="svg-warning" color="yellow" %}
{% include alert.html content="Try PIN 10 or other GND PINs if the connection doesn't work with PIN 14." alert="Note" icon="svg-warning" color="yellow" %}
{% include alert.html content="Some USB TTL adapters label TX and RX pins the other way around: try to swap them if the connection doesn't work." alert="Note" icon="svg-warning" color="yellow" %}
{:style="counter-reset:none"}
1. Install python and `pyserial` with `pip`
```shell
pip install pyserial
```
1. Make the connections as shown to a TTL adapter except for GND (which should remain detached as it is used as a switch)
{% include image.html file="ma5671a-root-1.jpg" alt="Example of how the sfp-ttl connection should look like" caption="Example of how the sfp-ttl connection should look like" %}
{% include image.html file="new-root-procedure/board-molex-arduino.jpg" alt="Example of how the sfp-ttl connection should look like with a custom board" caption="Example of how the sfp-ttl connection should look like with a custom board" %}
{% include image.html file="ma5671a-root-2.jpg" alt="SFP Molex" caption="SFP Molex" %}
{:style="counter-reset:none"}
1. Open Tera Term (or other serial terminal emulators), find the correct serial port of the TTL adapter, change the port on the script on line 7 instead of `COM8`.
1. After this, run the following python script and connect the GND pin:
```py
import sys
import time
import serial.tools
try:
ser = serial.Serial("COM8", 115200, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS)
print('[+] Use serial port device:', ser.name)
print('[+] Waiting for trigger characters...')
while True:
try:
recv = ser.readline().decode()
except Exception as x:
print("Decode errore", x)
continue
if recv.startswith('U-Boot'):
print('[+] Received! transfer enable command...')
print('[+] Transfer command sequence 1')
t_end = time.time() + 3
while time.time() < t_end:
ser.write(chr(3).encode())
time.sleep(1)
print('[+] Transfer command sequence 2')
ser.write('setenv bootdelay 3\n'.encode())
time.sleep(1)
print('[+] Transfer command sequence 3')
ser.write('setenv asc0 0\n'.encode())
time.sleep(1)
print('[+] Transfer command sequence 4')
ser.write('setenv preboot "gpio set 3;gpio input 2;gpio input 105;gpio input 106;gpio input 107;gpio input 108"\n'.encode())
time.sleep(1)
print('[+] Transfer command sequence 5')
ser.write('saveenv\n'.encode())
time.sleep(3)
print('[+] Transfer command sequence 6')
ser.write('reset\n'.encode())
print('[+] Enable command transfer complete! rebooting...')
break
else:
print(recv)
except Exception as e:
try:
print('[!] Error:', e)
sys.exit(1)
finally:
e = None
del e
except (KeyboardInterrupt, SystemExit):
ser.close()
sys.exit(1)
```
{% include alert.html content="Originally, this other string was used for the `setenv preboot`: `gpio input 105;gpio input 106;gpio input 107;gpio input 108;gpio set 3;gpio set 109;gpio set 110;gpio clear 423;gpio clear 422;gpio clear 325;gpio clear 402;gpio clear 424`" alert="Info" icon="svg-info" color="blue" %}
{:style="counter-reset:none"}
1. Reboot the stick
1. Open Tera Term (or other serial terminal emulators), after it has loaded press `enter` to activate the console
{% include image.html file="new-root-procedure/press-enter.jpg" alt="Press enter to activate the console" caption="Press enter to activate the console" %}
{:style="counter-reset:none"}
1. With `sed` change the default shell from `/opt/lantiq/bin/minishell` to `/bin/ash` by editing the file `/etc/passwd`:
```shell
sed -i "s|/opt/lantiq/bin/minishell|/bin/ash|g" /etc/passwd
```
{% include alert.html content="Do not use `vim`!" alert="Important" icon="svg-warning" color="red" %}
{% include alert.html content="Be aware that kernel panics happen often! If a kernel panic happens wait for the reboot and quickly try again." alert="Important" icon="svg-warning" color="yellow" %}
```shell
[ 34.612000] Kernel panic - not syncing: Fatal exception in interrupt
[ 34.612000] Rebooting in 3 seconds..
```
{% include alert.html content="The cause of these kernel panics could be insufficient supply of power." alert="Info" icon="svg-info" color="blue" %}
{:style="counter-reset:none"}
After this is done, reboot the stick, after connecting it to a router via an ethernet mediaconverter or directly plugging it in an SFP port, with the port's IP set to any IP of the `192.168.1.0/24` subnet (the stick has the IP `192.168.1.10`)
{% include alert.html content="If your LAN subnet is `192.168.1.0/24` make sure you have no ip conflicts." alert="Note" icon="svg-warning" color="yellow" %}
{% include alert.html content="On some SFP host devices you might not be able to connect to the stick if there's no optical signal (RX loss), in that case you need to connect the fiber to make changes on the stick" alert="Note" icon="svg-warning" color="yellow" %}
{:style="counter-reset:none"}
1. Run the terminal and login to the stick with ssh
```shell
ssh root@192.168.1.10
```
The password is `admin123`.
{% include alert.html content="If you use a modern OpenSSH version (e.g. >= 8.8) you will have to enable some deprecated algorithms: `ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 -oHostKeyAlgorithms=+ssh-dss [...]`" alert="Info" icon="svg-info" color="blue" %}
# Root Procedure for Huawei MA5671A (V1 - Tweezers)
{% include alert.html content="This version remains for documentation purposes only. Please use the latest procedure: [Web root procedure](/ont-huawei-ma5671a-root-web)" alert="Important" icon="svg-warning" color="red" %}
{% include alert.html content="This procedure requires the physical disassembly of the stick, and the use of tweezers that can burn the stick, it is highly recommended not to use it." alert="Important" icon="svg-warning" color="red" %}
1. Take the SFP molex and the 4 coloured cables and solder them to the molex according to the following diagram:
| USB TTL (UART) Adapter | wire colour in picture | SFP 20pins Molex connector |
| ---------------------- | ---------------------- | -------------------------- |
| 3.3V | red | pin #15 and #16 |
| TX | orange | pin #2 |
| RX | yellow | pin #7 |
| GND | green | pin #10 |
{% include alert.html content="Use GND wire as ON/OFF switch, otherwise there will be a slight delay before data is displayed on the console (putty/TeraTerm)." alert="Important" icon="svg-warning" color="yellow" %}
{% include image.html file="ma5671a-root-1.jpg" alt="Example of how the sfp-ttl connection should look like" caption="Example of how the sfp-ttl connection should look like" %}
{% include image.html file="ma5671a-root-2.jpg" alt="Molex SFP" caption="Molex SFP" %}
{:style="counter-reset:none"}
1. Disassemble the stick by releasing the metal tabs that hold the cover in place. There are two tabs, one on each side, inside these holes:
{% include image.html file="ma5671a-root-4.jpg" alt="Metal tabs that hold the cover in place" caption="Metal tabs that hold the cover in place" %}
{:style="counter-reset:none"}
1. Once you have removed the metal casing, you are left with the half-naked stick. Note that the release mechanism also comes off easily, so it is recommended to take a photo and to memorise the positioning to be able to put it back together in the case it does come off.
1. Before shorting the stick, connect the previously soldered cables and molex to the USB serial (photo immediately below) and to the stick (via the molex, of course) and check that the jumper on the usb key is set to 3.3V
{% include image.html file="ma5671a-root-8.jpg" alt="TTL" caption="TTL" %}
{:style="counter-reset:none"}
1. The disassembled stick will appear as in the photo: the two pins to be shorted are highlighted in red. In the photo below a wire is used, but a pair of tweezers is sufficient (I used those, in fact). Be careful not to touch anything around the two pins by possibly covering everything else with electrical tape.
{% include image.html file="ma5671a-root-4.jpg" alt="tweezers" caption="tweezers" %}
{% include image.html file="ma5671a-root-6.jpg" alt="tweezers" caption="tweezers" %}
{% include image.html file="ma5671a-root-5.jpg" alt="tweezers and eletrical tape" caption="tweezers and eletrical tape" %}
{% include image.html file="ma5671a-root-6.jpg" alt="tweezers" caption="tweezers" %}
{:style="counter-reset:none"}
1. For the moment connect all cables to the usb key except the green (ground) or red (voltage), otherwise the stick will boot before you can do the following (N.B. for those who bought the uart above RX and TX are reversed). Open and configure Tera Term for serial connection by selecting the correct com port, speed 115200 bauds, english language (otherwise in japanese you can't read anything understandable), then insert the key in the PC (the adapter being already installed is taken for granted), short the 2 pins seen above and, while keeping the pins shorted, connect the missing coloured cable
1. If nothing happens, you have obviously done something wrong with cables, molexes, soldering irons, etc., so you will have to start from the beginning again and work out which step you did wrong.
If you have done everything correctly, you should see something similar to the picture below:
{% include image.html file="ma5671a-root-9.png" alt="serial shell" caption="serial shell" %}
{:style="counter-reset:none"}
1. Remove the short (tweezers or whatever you used), then type 7 and enter. You should see this:
{% include image.html file="ma5671a-root-10.png" alt="serial shell 2" caption="serial shell 2" %}
{:style="counter-reset:none"}
1. From the Tera Term menu `FILE` → `TRANSFER` → `XMODEM` → `SEND` → `[1224abort.bin]` (which is the third of the files downloaded earlier):
{% include image.html file="ma5671a-root-11.png" alt="1224abort.bin" caption="1224abort.bin" %}
{:style="counter-reset:none"}
1. As soon as the file transfer is complete, you have 2 seconds to press `CTRL+C`. If you have not done so, return to step 6. Otherwise, you should see:
{% include image.html file="ma5671a-root-12.png" alt="falcon shell" caption="falcon shell" %}
{:style="counter-reset:none"}
1. To permanently unlock the bootloader, without having to repeat the previous steps, you must give the following commands:
```
FALCON => setenv bootdelay 5
FALCON => setenv asc0 0
FALCON => setenv preboot "gpio set 3;gpio input 100;gpio input 105;gpio input 106;gpio input 107;gpio input 108"
FALCON => saveenv
```
{% include alert.html content="Originally, this other string was used for the `setenv preboot`: `gpio input 105;gpio input 106;gpio input 107;gpio input 108;gpio set 3;gpio set 109;gpio set 110;gpio clear 423;gpio clear 422;gpio clear 325;gpio clear 402;gpio clear 424`" alert="Info" icon="svg-info" color="blue" %}
{% include alert.html content="Instead of taking the next steps, it is recommended to boot and run the `sed` command documented in V2" alert="Warning" icon="svg-warning" color="red" %}
{:style="counter-reset:none"}
1. If you have done everything correctly you can reboot the stick (if you are convinced that everything is ok you could also close it again), disconnect and reconnect either the ground or voltage cable, then again you will have 5 seconds to lock the bootloader by doing a simple CTRL+C using the terminal. Now upload the firmware image of the first mtd2 partition to the stick with the command
```
FALCON => loadb 0x80800000
```
At this point it will appear:
{% include image.html file="ma5671a-root-13.jpg" alt="shell requiring `mtd2` upload" caption="shell requiring `mtd2` upload" %}
{:style="counter-reset:none"}
1. From the Tera Term menu do `FILE` → `TRANSFER` → `KERMIT` → `SEND` → `[mtd2.bin]`.
It will start uploading the file at a speed of about 3-4 KBps: it should take more than half an hour for the upload to complete.
1. Once finished, the image loaded on the stick must also be saved to the corresponding system partition (the first of the 2) with the commands
```
FALCON => sf probe 0
FALCON => sf erase C0000 740000
FALCON => sf write 80800000 C0000 740000
```
1. Check that the stick is configured to boot from partition 0 (We are aware that mtd2 goes on 0 and mtd5 goes on 1, complain to Lantiq about this) with the command:
```
FALCON => printenv committed_image
```
1. If it is 0 there's no need to do anything, otherwise configure the stick to boot from partition 0 with the following commands, then check if the settings were changed correctly.
```
FALCON => setenv committed_image 0
FALCON => saveenv
FALCON => printenv committed_image
```
# Miscellaneous Links
- [Come avere i 2.5 Gbps su un unico dispositivo senza il Fastgate](https://forum.fibra.click/d/17836-come-avere-i-25-gbps-su-un-unico-dispositivo-senza-il-fastgate)
- [Support MA5671A SFP GPON](https://forum.openwrt.org/t/support-ma5671a-sfp-gpon/48042)
- [La fibre Orange à 2Gbps, sur un routeur MikroTik 10Gbps CCR2004, via un ONT SFP+](https://lafibre.info/remplacer-livebox/guide-de-connexion-fibre-directement-sur-un-routeur-voire-meme-en-2gbps/msg832904/#msg832904)
- [Bypassing the HH3K up to 2.5Gbps using a BCM57810S NIC](https://www.dslreports.com/forum/r32230041-Internet-Bypassing-the-HH3K-up-to-2-5Gbps-using-a-BCM57810S-NIC)
================================================
FILE: _ont/ont-huawei-ma5671a-rooted.md
================================================
---
title: Huawei Rooted Firmware for Huawei MA5671A
has_children: false
parent: Huawei MA5671A
layout: default
---
# Usage
## Minishell
This firmware version offers a minishell in addition to the normal sh shell. Commands offered by minishell are as follows:
{% include serial_dump.html file="ma5671a_minishell.txt" alt="Huawei MA5671A minishell" title="Huawei MA5671A minishell" %}
## Root
For general use, minishell does not allow any modifications and [Web root procedure](/ont-huawei-ma5671a-root-web) is required.
# GPON ONU status
## Getting the operational status of the ONU
```sh
onu ploamsg
```
## Querying a particular OMCI ME
```sh
omci_pipe.sh meg MIB_IDX ME_IN
```
Where `MIB_IDX` is the MIB ID and `ME_IN` is the ME instance number
# GPON/OMCI settings
{% include alert.html content="In this firmware, unlike the other ones, all data must be modified in a base64-encoded file. To simplify this, you can use the following web application." alert="Info" icon="svg-info" color="blue" %}
## Web procedure
1. Get `fw_printenv sfp_a2_info` and paste into the form:
{% include alert.html content="Executing these commands requires familiarity with `vim`. If you are not in any way familiar with `vim`, follow these commands precisely." alert="Danger" icon="svg-warning" color="red" %}
{:style="counter-reset:none"}
1. Copy the script's output to the clipboard
1. Run the comman `vim /tmp/sfp_a2.txt` in the stick
1. Press the right mouse button in the terminal or `CTRL`+`V`
1. Press `ESC` command from keyboard
1. Type `:wq`
1. Run:
```shell
fw_setenv sfp_a2_info $(cat /tmp/sfp_a2.txt)
```
## Temporary file procedure
1. Save `sfp_a2_info` in a temporary file
```sh
fw_printenv sfp_a2_info | sed "s/^sfp_a2_info=//" > /tmp/sfp_a2.txt
```
And print a pretty version:
```sh
fw_printenv sfp_a2_info | sed "s/^sfp_a2_info=//" | tr '@' '\n'
```
2. Setting S/N
The S/N is stored on the 6th line, for example `4857544311223344` (where `48575443` is the HEX encoding of `HWTC`):
```
AAAAAAAAAAJIV1RDESIzRP///////////////////wAAAAAAAAAAAAAAAAAA
00000000000000024857544311223344ffffffffffffffffffffffffffffff0000000000000000000000000000
```
The entire S/N, including the PON ID, is first encoded in hexadecimal and then in base64
3. Setting PLOAM Password
The PLOAM Password is stored on the 5th line, for example (`1234567890`):
```
ffffffffffffffff00021437d77db7df7e37e77eb7ef7f37f77d00000000000000000000000000000000000000
//////////8AAhQ31323334353637383930AAAAAAAAAAAAAAAAAAAAAAAAA
```
The entire PLOAM, is first encoded in hexadecimal and then in base64
4. Setting MAC Address
The MAC Address is stored on the 9th line, for example (`48:57:02:da:be:ef`):
```
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASFcC2r7vAAAAAAAAAAAAAAAAAAAA
000000000000000000000000000000000000000000000000485702dabeef000000000000000000000000000000
```
5. Transfer the modified file back into variable `sfp_a2_info`
```sh
fw_setenv sfp_a2_info $(cat /tmp/sfp_a2.txt)
```
## Reviewing and testing
After rebooting, check whether the new variables have been saved correctly:
```sh
fw_printenv nPassword
fw_printenv gSerial
fw_printenv ethaddr
```
## Getting/Setting Speed LAN Mode
To get the LAN Mode:
```sh
onu lanpsg 0
```
The `link_status` variable tells the current speed
| Value (for `sgmii_mode` and `link_status`) | Speed |
| ------------------------------------------ | ---------------------------------- |
| 3 | 1 Gbps / SGMII with auto-neg on |
| 4 | 1 Gbps / SGMII with auto-neg off |
| 5 | 2.5 Gbps / HSGMII with auto-neg on |
To change the default lan mode value you can use `fw_setenv sgmii_mode`. The firmware is already set to 2.5G auto-negotiation, you shouldn't touch it.
# Advanced settings
## Disabling dying gasp
```sh
fw_setenv nDyingGaspEnable 0
```
# Miscellaneous Links
- [Edit sfp_a2_info file](https://forum.openwrt.org/t/support-ma5671a-sfp-gpon/48042/25)
================================================
FILE: _ont/ont-huawei-ma5671a-sf.md
================================================
---
title: SourcePhotonics Firmware for Huawei MA5671A
has_children: false
redirect_to: /ont-fs-com-gpon-onu-stick-with-mac
layout: default
parent: Huawei MA5671A
---
================================================
FILE: _ont/ont-huawei-ma5671a-ymodem.md
================================================
---
title: Root Procedure for Huawei MA5671A (flash firmware)
has_children: false
parent: Huawei MA5671A
layout: default
---
This procedure flashes the firmware on the stick via serial. Some of the firmwares that can be flashed are listed on the [Huawei MA5671A page](/ont-huawei-ma5671a).
{: .text-center .fs-6 }
{% include alert.html content="This browser is not compatible with the web-root procedure. See the Browser compatibility" alert="Note" icon="svg-warning" color="red" %}
================================================
FILE: _tools/molex-ont.md
================================================
---
title: Molex ONT
has_children: false
nav_order: 3
layout: default
---
In some sticks, such as those based on Lantiq chipsets, the serial interface is exposed in the upper pins of the ONT, in order to read them there are two possibilities:
- the use of an SFP molex ([farnell](https://it.farnell.com/en-IT/molex/74441-0001/connector-sfp-rcpt-20pos-smt/dp/2112385)) to which four wires are to be soldered and the other pins removed. This makes the adapter compatible with a single serial combination.
- the use of a board to which the SFP molex is soldered, exposing the main SFP pins.
{% include image.html file="ma5671a-root-1.jpg" alt="Example of how the SFP-TTL adapter is to be connected" caption="Example of how the SFP-TTL adapter is to be connected" %}
{% include image.html file="new-root-procedure/board-molex-arduino.jpg" alt="Example of how the SFP-TTL adapter is to be used with a custom board" caption="Example of how the SFP-TTL adapter is to be used with a custom board" %}
If you want to make your own board, here are some ideas:
{% include image.html file="board-dupont/top.svg" alt="Example of an SFP-TTL custom board" caption="Example of an SFP-TTL custom board" %}
{% include image.html file="board-dupont/bottom.svg" alt="Example of an SFP-TTL custom board" caption="Example of an SFP-TTL custom board" %}
the components to be soldered are instead:
- 1x MOLEX SFP (like Molex-744410001 [lcsc](https://www.lcsc.com/product-detail/Card-Edge-Connectors_MOLEX-744410001_C277615.html), [farnell](https://it.farnell.com/en-IT/molex/74441-0001/connector-sfp-rcpt-20pos-smt/dp/2112385))
- 2x pinout 2x10 (like [MINTRON MTP125-1210S1](https://www.lcsc.com/product-detail/Pin-Header-Female-Header_MINTRON-MTP125-1210S1_C358699.html))
[Example of the final board](https://oshwlab.com/user4091049/sfp-to-ttl-v1) with these components on the EasyEDA platform.
================================================
FILE: _tools/ont-ethtool-print-eeprom.md
================================================
---
title: Ethtool Print EEPROM
has_children: false
layout: default
---
1. Get `ethtool -m` or `ethtool -e` and paste into the form
================================================
FILE: _tools/ont-lantiq-print-eeprom.md
================================================
---
title: Lantiq Print EEPROM
has_children: false
layout: default
---
1. Get `sfp_a0_low_128` or `sfp_a2_info` and paste into the form
================================================
FILE: _tools/speed-gpon-eth.md
================================================
---
title: Theoretical maximum speed calculator
has_children: false
nav_order: 4
description: Tool for calculating maximum speeds
layout: default
---
Ethernet calculator
XG(S)-PON/GPON calculator
================================================
FILE: _tools/ttl-uart-adapter.md
================================================
---
title: TTL UART Adapter
has_children: false
nav_order: 2
layout: default
---
A TTL UART adapter makes it possible to connect the stick's serial interface to a computer via a USB interface. This makes it easy to send commands on modern computers through serial emulation, just like the serial ports of the 1990s.
These adapters are widely used in the modding of SFPs, and in general of most embedded devices, since a serial port is always present in all of them and is also used to de-brick such devices.
TTL adapters can be easily found on Amazon, the most recommended one being:
- DSD TECH USB to TTL Serial Adapter with FTDI FT232RL Chip [Amazon.com](https://www.amazon.com/dp/B07BBPX8B8) [Amazon.it](https://www.amazon.it/dp/B07BBPX8B8)
Alternatively, an [Arduino can be used to emulate a TTL adapter](https://create.arduino.cc/projecthub/PatelDarshil/ways-to-use-arduino-as-usb-to-ttl-converter-475533)
================================================
FILE: assets/css/just-the-docs-dark.scss
================================================
{% include css/just-the-docs.scss.liquid color_scheme="dark" primary_color="blue" %}
================================================
FILE: assets/css/just-the-docs-default.scss
================================================
{% if site.color_scheme and site.color_scheme != "nil" %}
{% assign color_scheme = site.color_scheme %}
{% else %}
{% assign color_scheme = "light" %}
{% endif %}
{% include css/just-the-docs.scss.liquid color_scheme=color_scheme primary_color="blue" %}
================================================
FILE: assets/css/just-the-docs-light.scss
================================================
{% include css/just-the-docs.scss.liquid color_scheme="light" primary_color="blue" %}
================================================
FILE: assets/js/cigpassword.js
================================================
function hexToBytes(hex) {
let bytes = new Uint8Array(hex.length / 2);
for (let i = 0; i < hex.length; i += 2) {
bytes[i / 2] = parseInt(hex.substr(i, 2), 16);
}
return bytes;
}
function cigpassword_gpon(ont_serial, ont_user, length = 0, xgspon = false) {
const hardcoded_key = '01030a1013051764c8061419b49d0500';
const hardcoded_seed = '2345679abcdefghijkmnpqrstuvwxyzACDEFGHJKLMNPQRSTUVWXYZ';
let ont_vendor = ont_serial.substring(0, 4).toUpperCase();
let ont_id = ont_serial.substring(4).toLowerCase();
if (xgspon) {
ont_id = ont_id.toUpperCase();
}
let formatted_serial = `${ont_vendor}${ont_id}`;
let key_bytes = new Uint8Array(hardcoded_key.match(/.{1,2}/g).map(byte => parseInt(byte, 16)));
if (length > 0) {
key_bytes[15] = length;
}
let formatted_serial_user = formatted_serial;
if (ont_user) {
formatted_serial_user += `-${ont_user}`;
}
let hmac = CryptoJS.HmacMD5(formatted_serial_user, CryptoJS.lib.WordArray.create(key_bytes));
let pw_md5_hmac = hexToBytes(hmac.toString(CryptoJS.enc.Hex));
let output = Array(pw_md5_hmac.length);
for (let i = 0; i < pw_md5_hmac.length; i++) {
output[i] = hardcoded_seed[pw_md5_hmac[i] % 0x36];
}
if (length > 0) {
return output.slice(0, length).join('');
} else {
return output.join('');
}
}
================================================
FILE: assets/js/omci-vlan.js
================================================
/* Copyright (C) Erny
* SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
*/
// Convert hex string to binary representation
function hex2bin(hexString){
var result = "";
hexString = hexString.replace(/0x/g, "").replace(/ /g, '').toLowerCase();
for(const hexChr of hexString) {
const bin = parseInt(hexChr, 16).toString(2).padStart(4, '0');
if (!bin.isNaN) {
result += bin;
} else {
throw new Error("The hex string is not valid!");
}
}
return result;
}
// Helper function to splice binary array and convert to decimal
function binSpliceToDec(binArray, len) {
const result = binArray.splice(0, len);
return parseInt(result.join(""), 2);
}
// GPON OMCI VLAN Table parser
function vlanTableParse(hexString) {
const binaryArray = hex2bin(hexString).split('');
var result = new Array();
while(binaryArray.length > 0) {
var vlanRule = new Array();
vlanRule.push(binSpliceToDec(binaryArray, 4));
vlanRule.push(binSpliceToDec(binaryArray, 13));
vlanRule.push(binSpliceToDec(binaryArray, 3));
binaryArray.splice(0, 12); // Padding
vlanRule.push( binSpliceToDec(binaryArray, 4));
vlanRule.push(binSpliceToDec(binaryArray, 13));
vlanRule.push(binSpliceToDec(binaryArray, 3));
binaryArray.splice(0, 8); // Padding
vlanRule.push(binSpliceToDec(binaryArray, 4));
vlanRule.push(binSpliceToDec(binaryArray, 2));
binaryArray.splice(0, 10); // Padding
vlanRule.push(binSpliceToDec(binaryArray, 4));
vlanRule.push(binSpliceToDec(binaryArray, 13));
vlanRule.push(binSpliceToDec(binaryArray, 3));
binaryArray.splice(0, 12); // Padding
vlanRule.push(binSpliceToDec(binaryArray, 4));
vlanRule.push(binSpliceToDec(binaryArray, 13));
vlanRule.push(binSpliceToDec(binaryArray, 3));
result.push(vlanRule);
}
return result;
}
================================================
FILE: assets/js/rootLantiq.js
================================================
const LOAD_ADDR = "80800000"
const IMAGE0_ADDR = "C0000 740000";
const IMAGE1_ADDR = "800000 800000";
async function detectUboot(serial) {
await serial.readLine((line) => {
if (line.startsWith('U-Boot')) {
return true;
}
});
}
async function waitUbootStop(serial, sfpModel, outputMsgCallback) {
const interruptChar = String.fromCharCode(3);
const interval = setInterval(function() {
serial.writeString(interruptChar);
}, 10);
await detectUboot(serial);
outputMsgCallback(`Root in progress: Trigger characters received. DO NOT TOUCH THE ${sfpModel} UNTIL THE PROCEDURE IS COMPLETED!`);
await delay(5000);
clearInterval(interval);
}
async function checkUbootUnlocked(serial) {
let unlocked = false;
await serial.readLine((line) => {
if (line.startsWith('Press SPACE to delay and Ctrl-C to abort autoboot')) {
unlocked = true;
return true
}
}, 2000);
return unlocked;
}
async function waitFailbackShell(serial, outputMsgCallback) {
await serial.readLine((line) => {
if (line.startsWith('Press the [f] key and hit [enter] to enter failsafe mode')) {
return true;
}
});
let interval = setInterval(function() {
serial.writeString('f\n');
}, 10);
outputMsgCallback("Root in progress: Trigger characters received. Waiting for boot to end...");
await delay(3000);
clearInterval(interval);
interval = setInterval(function() {
serial.writeString(String.fromCharCode(10));
}, 10);
await serial.readLine((line) => {
if (line.includes('root@(none)')) {
return true;
}
});
await delay(1000);
clearInterval(interval);
}
async function lantiqRootUboot(port, sfpModel, outputMsgCallback, outputErrorCallback, baudRate = 115200) {
const serial = new SerialReadWrite(port, baudRate);
try {
outputMsgCallback(`Please disconnect the ${sfpModel} from the SFP adapter if it is currently plugged in!`);
await delay(10000);
outputMsgCallback(`Now you need to insert the ${sfpModel} into the SFP adapter, if the procedure does not go ahead, check the connections and then remove and reconnect the ${sfpModel} again`);
while(true) {
await waitUbootStop(serial, sfpModel, outputMsgCallback);
const ubootUnlocked = await checkUbootUnlocked(serial);
if (ubootUnlocked == true) {
break;
}
outputMsgCallback("Root in progress: Set U-Boot bootdelay to 5...");
await serial.writeString('setenv bootdelay 5\n');
await delay(1000);
outputMsgCallback("Root in progress: Enable ASC serial...");
await serial.writeString('setenv asc0 0\n');
await delay(1000);
outputMsgCallback("Root in progress: Set GPIO to unlock serial...");
await serial.writeString('setenv preboot "gpio set 3;gpio input 2;gpio input 105;gpio input 106;gpio input 107;gpio input 108"\n');
await delay(1000);
outputMsgCallback("Root in progress: Save changes...");
await serial.writeString('saveenv\n');
await delay(1000);
outputMsgCallback("Root in progress: Rebooting...");
await serial.writeString('reset\n');
await delay(1000);
}
return true;
} catch (err) {
outputErrorCallback(`Error: ${err.message}`);
return false;
} finally {
await serial.closePort();
}
}
async function unlockHuaweiShell(port, outputMsgCallback, outputErrorCallback, baudRate = 115200) {
const serial = new SerialReadWrite(port, baudRate);
try {
outputMsgCallback("Root in progress: Rebooting...");
await serial.writeString('reset\n');
await delay(1000);
outputMsgCallback("Waiting for reboot");
await waitFailbackShell(serial, outputMsgCallback);
outputMsgCallback("Root in progress: Enable full Linux shell...");
await serial.writeString('mount_root && mkdir -p /overlay/etc && sed "s|/opt/lantiq/bin/minishell|/bin/ash|g" /rom/etc/passwd > /overlay/etc/passwd\n');
await delay(1000);
outputMsgCallback("Root in progress: Umount rootfs partitions...");
await serial.writeString('umount /overlay && umount -a\n');
await delay(1000);
return true;
} catch (err) {
outputErrorCallback(`Error: ${err.message}`);
return false;
} finally {
await serial.closePort();
}
}
async function changeBaudrate(port, newBaudrate, currBaudrate, outputErrorCallback) {
let serial = new SerialReadWrite(port, currBaudrate);
try {
await serial.writeString(`setenv baudrate ${newBaudrate}\n`);
await delay(1000);
await serial.closePort();
serial = new SerialReadWrite(port, newBaudrate);
const interval = setInterval(function() {
serial.writeString(String.fromCharCode(13));
}, 10);
await serial.readLine((line) => {
if (line.startsWith('FALCON')) {
clearInterval(interval);
return true;
}
});
return true;
} catch (err) {
outputErrorCallback(`Error: ${err.message}`);
return false;
} finally {
await serial.closePort();
}
}
async function sendImageMtd(port, data, baudRate, outputErrorCallback, progressCallback) {
const serial = new SerialReadWrite(port, baudRate);
try {
await serial.writeString(`loady 0x${LOAD_ADDR}\n`);
await delay(1000);
await sendXYMini(serial, data, progressCallback);
return true;
} catch (err) {
outputErrorCallback(`Error: ${err.message}`);
return false;
} finally {
await serial.closePort();
}
}
async function waitEndImageLoad(port, baudRate, outputErrorCallback) {
const serial = new SerialReadWrite(port, baudRate);
try {
await serial.readLine((line) => {
if (line.includes('Total Size')) {
return true;
}
});
await delay(1000);
return true;
} catch (err) {
outputErrorCallback(`Error: ${err.message}`);
return false;
} finally {
await serial.closePort();
}
}
async function flashImageMtd(port, image, baudRate, outputErrorCallback) {
const serial = new SerialReadWrite(port, baudRate);
try {
if (image == "image0") {
await serial.writeString(`sf probe 0 && sf erase ${IMAGE0_ADDR} && sf write ${LOAD_ADDR} ${IMAGE0_ADDR} && setenv committed_image 0 && setenv image0_is_valid 1 && saveenv && reset\n`);
} else {
await serial.writeString(`sf probe 0 && sf erase ${IMAGE1_ADDR} && sf write ${LOAD_ADDR} ${IMAGE1_ADDR} && setenv committed_image 1 && setenv image1_is_valid 1 && saveenv && reset\n`);
}
/* Wait to avoid the user from disconnecting the SFP while the image is being flashed */
await delay(1000);
await detectUboot(serial);
return true;
} catch (err) {
outputErrorCallback(`Error: ${err.message}`);
return false;
} finally {
await serial.closePort();
}
}
================================================
FILE: assets/js/serialUtil.js
================================================
function delay(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
class SerialReadWrite {
constructor(port, baudrate) {
this.port = port;
this.baudRate = baudrate;
this.isPortOpen = false;
this.textDecoder = new TextDecoder();
this.textEncoder = new TextEncoder();
}
async openPort() {
await this.port.open({ baudRate: this.baudRate });
}
async closePort() {
await this.port.close();
}
async readBytes(retryError = 5, errorNum = 0) {
let reader = undefined;
if (this.isPortOpen === false) {
await this.openPort();
this.isPortOpen = true;
}
try {
if (reader === undefined) {
reader = this.port.readable.getReader();
}
const promiseResult = await reader.read();
if (promiseResult === undefined) {
return undefined;
}
return promiseResult.value;
} catch (e) {
if (e instanceof DOMException &&
(e.name === "BreakError" || e.name === "FramingError" || e.name === "ParityError")) {
console.log(e);
if (errorNum > retryError) {
throw e;
}
return await this.readBytes(retryError, errorNum++);
} else {
throw e;
}
} finally {
if (reader) {
reader.releaseLock();
reader = undefined;
}
}
}
async readLine(readCallback, timeout = undefined) {
let reader = undefined;
let extraChunk = "";
if (this.isPortOpen === false) {
await this.openPort();
this.isPortOpen = true;
}
while (true) {
try {
if (reader === undefined) {
reader = this.port.readable.getReader();
}
let serialValue;
if (timeout === undefined) {
const { value, done } = await reader.read();
serialValue = value;
} else {
const { value, done } = await Promise.race([
reader.read(),
new Promise((_, reject) => setTimeout(reject, timeout, new Error("timeout")))
]);
serialValue = value;
}
const linesValue = this.textDecoder.decode(serialValue).split('\n');
linesValue[0] = extraChunk + linesValue[0];
extraChunk = linesValue[linesValue.length - 1];
for (const line of linesValue) {
if (readCallback(line) === true) {
return;
}
}
} catch (e) {
if (e instanceof DOMException &&
(e.name === "BreakError" || e.name === "FramingError" || e.name === "ParityError")) {
console.log(e);
} else if (e instanceof Error && e.message === "timeout") {
return;
} else {
throw e;
}
} finally {
if (reader) {
reader.releaseLock();
reader = undefined;
}
}
}
}
async writeBytes(bytes) {
let writer = undefined;
if (this.isPortOpen === false) {
await this.openPort();
this.isPortOpen = true;
}
try {
if (writer === undefined) {
writer = this.port.writable.getWriter();
}
writer.write(bytes);
} finally {
if (writer) {
writer.releaseLock();
writer = undefined;
}
}
}
async writeString(str) {
await this.writeBytes(this.textEncoder.encode(str));
}
}
================================================
FILE: assets/js/vue/vue-lantiq-eeprom.vue
================================================
Info For more information, see the {{ revision }} specification.
================================================
FILE: assets/js/vue-eeprom.js
================================================
const { createApp } = Vue;
const { loadModule } = window['vue3-sfc-loader'];
const options = {
moduleCache: {
vue: Vue,
},
getFile(url) {
return fetch(url).then((resp) =>
resp.ok ? resp.text() : Promise.reject(resp)
);
},
addStyle(styleStr) {
const style = document.createElement('style');
style.textContent = styleStr;
const ref = document.head.getElementsByTagName('style')[0] || null;
document.head.insertBefore(style, ref);
},
log(type, ...args) {
console.log(type, ...args);
},
};
const app = createApp({
components: {
VueLantiqEeprom: Vue.defineAsyncComponent(() =>
loadModule('/assets/js/vue/vue-lantiq-eeprom.vue', options)
),
},
}).mount('#app');
================================================
FILE: assets/js/xymini.js
================================================
/* XYMini Sender - Minimal implementation of file transfer through serial
* Copyright (C) Erny
* SPDX-License-Identifier: MPL-2.0-no-copyleft-exception
*
* Warning: This does not comply with XMODEM and YMODEM standards
*/
const STX = 0x02;
const ACK = 0x06;
const NAK = 0x15;
const EOF = 0x04;
const XYMINI_1K_MAGIC = 0x43;
const PAYLOAD_LEN = 1024;
const BLOCK_LEN = PAYLOAD_LEN + 5;
const CRC_POLY = 0x1021;
function uint16 (n) {
return n & 0xFFFF;
}
function updateCrc(crcIn, incr) {
const xor = uint16(crcIn >> 15);
let result = uint16(crcIn << 1);
if (incr) {
result = uint16(result + 1);
}
if (xor) {
result = uint16(result ^= CRC_POLY);
}
return result;
}
function crc16(data) {
let crc;
for (let i = 0; i < data.length; i++) {
for (let j = 0x80; j; j >>= 1) {
crc = updateCrc(crc, data[i] & j);
}
}
for (let n = 0; n < 16; n++) {
crc = updateCrc(crc, 0);
}
return crc;
}
async function detectXYMini(serial) {
const textDecoder = new TextDecoder();
while (true) {
const value = await serial.readBytes();
if (value[0] == XYMINI_1K_MAGIC) {
console.log("XYMini: detected");
break;
}
}
}
function generateXYMiniBlock(blockId, payload) {
let buf = new Uint8Array(BLOCK_LEN);
let i = 0;
buf[i++] = STX;
buf[i++] = blockId;
buf[i++] = 0xFF - blockId;
if (payload.length > PAYLOAD_LEN) {
throw new Error("Payload too large to be transmitted in one block");
}
for (let j = 0; j < payload.length; j++) {
buf[i++] = payload[j];
}
while (i < BLOCK_LEN - 2) {
buf[i++] = 0xFF;
}
let crcBuf = buf.slice(3, PAYLOAD_LEN + 3)
let crc = crc16(crcBuf);
buf[i++] = (crc >> 8) & 0xFF;
buf[i++] = crc & 0xFF;
return buf;
}
async function sendXYMini(serial, data, progressCallback) {
let blockId = 1;
let size = data.length;
let i = 0;
let nakN = 0;
let wrongCharN = 0;
await detectXYMini(serial);
while(true) {
const payloadSize = Math.min(PAYLOAD_LEN, size);
if (size) {
const payload = data.slice(i, payloadSize + i);
const block = generateXYMiniBlock(blockId, payload);
await serial.writeBytes(block);
} else {
serial.writeBytes(new Uint8Array([EOF]));
}
const value = await serial.readBytes();
if (value[0] == ACK) {
if (!size) {
console.log("XYMini: End of transmission");
return;
}
blockId++;
size -= payloadSize;
i += payloadSize;
nakN = 0;
wrongCharN = 0;
progressCallback(data.length - size);
} else if (value[0] == NAK) {
if (nakN >= 10) {
throw new Error("Received 10 NAK, receiver is rejecting file transmission");
}
console.log("XYMini: NAK");
nakN++;
} else {
if (wrongCharN >= 30) {
throw new Error("Received 30 wrong characters, the receiver is rejecting the transmission or the connection is too noisy");
}
console.log("XYMini: wrong character");
console.log(value);
wrongCharN++;
}
}
}
================================================
FILE: assets/ts/LTF7267-BHA-ploam.ts
================================================
function hexEncode(str: String): String {
var result = "";
for (let i = 0; i < str.length; i++) {
const hex = str.charCodeAt(i).toString(16);
result += hex.padStart(2, "0");
}
return result;
}
function hisensePloam(ascii_ploam: String): String {
const hex_ploam = hexEncode(ascii_ploam);
const hex_padded_ploam = hex_ploam.padEnd(72, "0");
let array: String[] = [];
for (let i = 0; i < 9; i++) {
const ploam_segment = hex_padded_ploam.slice(i * 8, (i + 1) * 8);
let new_ploam_segment = "";
for (let j = 4; j > 0; j--) {
new_ploam_segment = new_ploam_segment + ploam_segment.slice((j - 1) * 2, j * 2);
}
if (new_ploam_segment !== "00000000") {
array.push("INT CFG_ID_PON_REGISTRATION_ID" + i + " = 0x" + new_ploam_segment + ";");
}
}
return array.join("\n");
}
(window as any).hisensePloam = hisensePloam;
================================================
FILE: bin/just-the-docs
================================================
#!/usr/bin/env ruby
gem_dir = File.expand_path("..",File.dirname(__FILE__))
$LOAD_PATH.unshift gem_dir # Look in gem directory for resources first.
exec_type = ARGV[0]
if exec_type == 'rake' then
require 'rake'
require 'pp'
pwd=Dir.pwd
Dir.chdir(gem_dir) # We'll load rakefile from the gem's dir.
Rake.application.init
Rake.application.load_rakefile
Dir.chdir(pwd) # Revert to original pwd for any path args passed to task.
Rake.application.invoke_task(ARGV[1])
end
================================================
FILE: browserconfig.xml
================================================
#27262b
================================================
FILE: docker-compose.yml
================================================
version: "3.3"
services:
typescript:
image: node:20
command: sh -c "cd /mnt && npm ci && npm run build"
restart: on-failure
volumes:
- ./tsup.config.ts:/mnt/tsup.config.ts
- ./package.json:/mnt/package.json
- ./package-lock.json:/mnt/package-lock.json
- ./assets:/mnt/assets
site:
image: jekyll/jekyll:latest
command: jekyll serve --verbose --incremental --force_polling --config _config.yml,_config.docker.yml
environment:
- JEKYLL_ENV=docker
volumes:
- .:/srv/jekyll
ports:
- 4000:4000
depends_on:
typescript:
condition: service_completed_successfully
================================================
FILE: faq.md
================================================
---
title: FAQs & Troubleshooting
has_children: false
nav_order: 2
description:
layout: default
---
{% include alert.html content="Playing with ONTs can cause your serial number/PLOAM password to be banned and faults to the optics, ONTs and OLTs. Always pay close attention to the calibration of the laser, under no circumstances should the calibration be changed." alert="Warning" icon="svg-warning" color="red" %}
================================================
FILE: index.md
================================================
---
title: Hack GPON
has_children: false
nav_order: 1
description: Worldwide wiki on how to access, change and edit ONTs
---
Most ONTs run customized firmware which implement vendor and ISP-specific integrations and are locked down in functionality to match service requirements.
ONTs often perform differently depending on the OLT and the settings applied by the ISP; for convenience it is often desirable to switch from an external ONT to an SFP or vice-versa, but most OLTs perform so many checks on the ONT that a simple replacement is almost impossible.
{% include alert.html content="Playing with ONTs can cause your serial number/PLOAM password to be banned and faults to the optics, ONTs and OLTs. Always pay close attention to the calibration of the laser, under no circumstances should the calibration be changed." alert="Warning" icon="svg-warning" color="red" %}
{% include alert.html content="The material and information contained on this website is for general information purposes only. You should not rely upon the material or information on the website as a basis for making any business, legal or any other decisions. Whilst we endeavour to keep the information up to date and correct, hack-gpon.org makes no representations or warranties of any kind, expressed or implied about the completeness, accuracy, reliability, suitability or availability with respect to the website or the information, products, services or related graphics contained on the website for any purpose. Any reliance you place on such material is therefore strictly at your own risk. We do not take responsibility for broken, bricked, unusable devices. To the extent not prohibited by law, in no circumstances shall hack-gpon.org be liable to you or any other third parties for any loss or damage (including, without limitation, damage for loss of business or loss of profits) arising directly or indirectly from your use of or inability to use this site or any of the material contained in it." alert="Warning" icon="svg-warning" color="yellow" %}
{% include alert.html content="Certain links in this website will lead to websites which are not under the control of hack-gpon.org. When you visit these, you will leave the hack-gpon.org website. hack-gpon.org has no control over and accepts no liability in respect of materials, products or services available on any website which is not under the control of hack-gpon.org." alert="Warning" icon="svg-warning" color="red" %}
{% include alert.html content="This site is maintained and updated by a community of enthusiasts, and therefore in no way replaces or replaces official vendor and provider guides. Use of this content is at your own risk." alert="Warning" icon="svg-warning" color="yellow" %}
{% include alert.html content="You can also help us with the content of this site, on each page you will find a button to edit on GitHub." alert="Tip" icon="svg-info" color="green" %}
{% include alert.html content="This project and its documentation relate *exclusively to the Passive Optical Network (PON) layer* of optical network devices.
We *do not access, modify, or interact with any radio components, wireless interfaces, or transmitters*. As such, the activities described here are *not intended to fall under the scope* of the EU Radio Equipment Directive (RED) (*Directive 2014/53/EU) or the associated **Delegated Regulation (EU) 2022/30* on cybersecurity for internet-connected radio devices. However, any modification involving radio hardware *may trigger RED applicability*. Users are advised to assess regulatory obligations accordingly." alert="Warning" icon="svg-warning" color="yellow" %}
This wiki contains links, codes, tutorials on how to access, edit and modify ONTs.
Are you ready?
[Yes](ont){: .btn .btn-green } [Quick start](quick-start){: .btn .btn-blue }
================================================
FILE: package.json
================================================
{
"scripts": {
"build": "tsup",
"watch": "tsup --watch",
"clean": "rimraf assets/js/generated"
},
"devDependencies": {
"rimraf": "^5.0.1",
"tsup": "^6.7.0"
}
}
================================================
FILE: privacy-policy.md
================================================
---
layout: default
title: Privacy Policy
permalink: /privacy-policy
nav_exclude: true
search_exclude: true
---
# Privacy Policy for hack-gpon.org
At hack-gpon.org, accessible from hack-gpon.org, one of our main priorities is the privacy of our visitors. This Privacy Policy document contains types of information that is collected and recorded by hack-gpon.org and how we use it.
If you have additional questions or require more information about our Privacy Policy, do not hesitate to contact us.
This Privacy Policy applies only to our online activities and is valid for visitors to our website with regards to the information that they shared and/or collect in hack-gpon.org. This policy is not applicable to any information collected offline or via channels other than this website.
# Consent
By using our website, you hereby consent to our Privacy Policy and agree to its terms.
# Information we collect
No personal information is stored in hack-gpon.org, hack-gpon.org exclusively uses the information, personal or otherwise, in the GitHub repository [github.com/hack-gpon/hack-gpon.github.io](https://github.com/hack-gpon/hack-gpon.github.io)
If you make changes, PRs, commits to the git repository your personal information may be displayed on hack-gpon.org.
# How we use your information
We use the information we collect in various ways, including to:
- Provide, operate, and maintain our website
- Improve, personalize, and expand our website
- Understand and analyze how you use our website
- Develop new products, services, features, and functionality
- Communicate with you, either directly or through one of our partners, including for customer service, to provide you with updates and other information relating to the website, and for marketing and promotional purposes
- Send you emails
- Find and prevent fraud
# Log Files
hack-gpon.org follows a standard procedure of using log files. These files log visitors when they visit websites. All hosting companies do this and a part of hosting services’ analytics. The information collected by log files include internet protocol (IP) addresses, browser type, Internet Service Provider (ISP), date and time stamp, referring/exit pages, and possibly the number of clicks. These are not linked to any information that is personally identifiable. The purpose of the information is for analyzing trends, administering the site, tracking users’ movement on the website, and gathering demographic information.
# Advertising Partners Privacy Policies
There are no Advertising Partners
# Third Party Privacy Policies
hack-gpon.org’s Privacy Policy does not apply to other advertisers or websites. Thus, we are advising you to consult the respective Privacy Policies of these third-party ad servers for more detailed information. It may include their practices and instructions about how to opt-out of certain options.
You can choose to disable cookies through your individual browser options. To know more detailed information about cookie management with specific web browsers, it can be found at the browsers’ respective websites.
- [GitHub Privacy Statement](https://docs.github.com/en/site-policy/privacy-policies/github-privacy-statement)
# CCPA Privacy Rights (Do Not Sell My Personal Information)
Under the CCPA, among other rights, California consumers have the right to: Request that a business that collects a consumer’s personal data disclose the categories and specific pieces of personal data that a business has collected about consumers. Request that a business delete any personal data about the consumer that a business has collected. Request that a business that sells a consumer’s personal data, not sell the consumer’s personal data. If you make a request, we have one month to respond to you. If you would like to exercise any of these rights, please contact us.
# GDPR Data Protection Rights
We would like to make sure you are fully aware of all of your data protection rights. Every user is entitled to the following: The right to access – You have the right to request copies of your personal data. We may charge you a small fee for this service. The right to rectification – You have the right to request that we correct any information you believe is inaccurate. You also have the right to request that we complete the information you believe is incomplete. The right to erasure – You have the right to request that we erase your personal data, under certain conditions. The right to restrict processing – You have the right to request that we restrict the processing of your personal data, under certain conditions. The right to object to processing – You have the right to object to our processing of your personal data, under certain conditions. The right to data portability – You have the right to request that we transfer the data that we have collected to another organization, or directly to you, under certain conditions. If you make a request, we have one month to respond to you. If you would like to exercise any of these rights, please contact us.
# Children’s Information
Another part of our priority is adding protection for children while using the internet. We encourage parents and guardians to observe, participate in, and/or monitor and guide their online activity.
hack-gpon.org does not knowingly collect any Personal Identifiable Information from children under the age of 13. If you think that your child provided this kind of information on our website, we strongly encourage you to contact us immediately and we will do our best efforts to promptly remove such information from our records.
================================================
FILE: quick-start.md
================================================
---
title: Quick Start
has_children: false
nav_order: 2
description:
layout: default
---
{% include alert.html content="Playing with ONTs can cause your serial number/PLOAM password to be banned and faults to the optics, ONTs and OLTs. Always pay close attention to the calibration of the laser, under no circumstances should the calibration be changed." alert="Warning" icon="svg-warning" color="red" %}
The information on this page is taken from the GPON/EPON standard and information from the major vendors of GPON/EPON equipment, each individual item containing a verifiable citation in the standard. Feel free to cite this page as: `{{ page.title }}, Hack GPON. Available at: https://hack-gpon.org{{ page.url }}`.
# Fiber Optic Connectors
Numerous connectors, both standard and proprietary, are used in the field of telecommunications equipment, data lines, television and cable, and other industrial fields.
{% include image.html file="quick-start/optic-fiber-connectors.jpg" alt="Some of the most common connectors" caption="Some of the most common connectors" %}
The main connectors are:
- Bionic Connector
- Standard Connector (SC)
- Ferrule Core Connector (FC)
- ST Connector (ST)
- SMA Connector
- Lucent Connector (LC)
- Enterprise Systems Connection Connector (ESCON)
- Fiber Distributed Data Interface Connector (FDDI)
- Opti-Jack Connector
- LX-5 Connector
- Volition Connector
- MT-RJ Connector
- MU Connector
- MT Connector
- E2000 Connector
## Polishing of Fiber Optic Connectors
APC and UPC use different polishing methodologies of fiber optic ferrules, and they define types of fiber patch cable connectors. These determine the quality of the fiber optic lightwave transmission, mostly calculated in optical return loss and insertion loss[^wolon].
{% include image.html file="quick-start/apc-upc.jpg" alt="Picture of APC and UPC connections" caption="Picture of APC and UPC" %}
Angled physical connectors are used on the ONT's side to reduce back-reflections. In case RF signals (1550nm) are introduced, there will be two signals traveling in the downstream direction (1490nm + 1550nm); as RF systems are highly sensitive to reflections the APC connectors reduce the return loss value[^zyxel] and are preferred over UPC.
Next generation systems are planned to operate in wavelengths over 1500nm, making APC connectors on the ONT's side something that will be more commonplace in the future[^zyxel].
# PON Networks[^huawei]
- PON is a kind of passive optical network featuring point-to-multiple-point architecture;
- PON is short for Passive Optical Network;
- PON consists of Optical Line Terminal (OLT), Optical Network Unit (ONU) and Passive Optical Splitter.
- APON: ATM Passive Optical Networks;
- EPON: Ethernet Passive Optical Networks;
- GPON: Gigabit-capable Passive Optical Networks;
- XG(S)-GPON: 10 Gigabit-capable Passive Optical Networks[^standardxgpon];
EPON and GPON are complementary and compete against each other under some aspects. So in the following contents, we'd like to render the EPON and GPON comparison more clear[^fs].
## Why GPON?
- GPON is defined by ITU, International Telecomunication Union[^standardgpon].
- GPON supports Triple-play services, providing a competitive full-service solution[^huawei].
- GPON supports high-bandwidth transmission to break down the bandwidth bottleneck of the access over twisted pair cables, so as to satisfy the requirements of high-bandwidth services, such as IPTV and live TV broadcasts[^huawei].
- GPON supports long-reach (up to 20 km) service coverage to overcome the obstacle of the access technology over twisted pair cables and reduce the network nodes[^huawei].
- With complete standards and high technical requirements, GPON supports integrated services in a good way[^huawei].
- GPON is the choice of large carriers in the international market[^huawei].
- GPON is high broadband efficiency, around 92%[^huawei].
- GPON has integrated QoS handling that makes it better than EPON, because QoS on EPON is higher cost relative to GPON[^fs].
- GPON supports splitting up to 1:128, XG(S)-PON up to 1:256[^fs],[^standardxgpon].
- Security: the data transmitted to ONUs/ONTs is encrypted using the AES mechanism[^telecom].
## Why EPON?
- EPON is defined by IEEE 802.3 standard, ratified as 802.3ah-2004 for 1.25 Gbps (1.0 Gbps prior to 8B/10B coding) and IEEE 802.3av standard for 10Gbps (10G-EPON)[^standard1epon],[^standard10epon].
- 1/1-EPON supports splitting up to 1:32, 10/*-EPON up to 1:128[^fs],[^standard10epon].
- In EPON, both downstream and upstream line rates are 1.25 Gbps, but due to the 8B/10B line encoding, the bit rate for data transmission is 1 Gbps[^medium].
- The use of EPON allows carriers to eliminate complex and expensive ATM and Sonet elements and to simplify their networks, thereby lowering costs to subscribers. Currently, GPON equipment costs are approximately 1.5 to 2 times higher than an EPON[^medium],[^fs].
## Layering model
Layering model and the associated management services are all mapped over Ethernet (directly or via IP).
- GPON supports the encapsulation of other protocols besides Ethernet, such as ATM[^cisco],[^huawei],[^fs].
- XG(S)-PON removes the support of ATM encapsulation[^telecom].
- GPON uses two layers of encapsulation. First, TDM and Ethernet frames are wrapped into GTC Encapsulation Method (GEM) frames, which have a GFP-like format (derived from Generic Frame Procedure ITU G.7401). Secondly, ATM and GEM frames are both encapsulated into GTC frames that are finally transported over the PON[^medium],[^fs].
- The main purpose of GEM frames is to provide a frame-oriented service, as an alternative to ATM, in order to efficiently accommodate Ethernet and TDM frames. With GEM, all traffic is mapped across the GPON network using a variant of SONET/SDH GFP. GEM supports a native transport of voice, video, and data without an added ATM or IP encapsulation layer. That's why GPON supports downstream rates as high as 2.5 Gbps and upstream rates from 155 Mbps to 2.5 Gbps. It is much faster than EPON[^medium].
- However, EPON clearly offers a much simpler and more straightforward solution than GPON. The support of ATM and the double encapsulation of GPON serve no real benefit over a pure Ethernet transport scheme[^medium].
- In EPON, Ethernet frames are carried in their native format over the PON, which greatly simplifies the layering model and the associated management. EPON employs a single layer that uses IP (Internet Protocol) to carry data, voice, and video[^medium],[^fs].
{% include image.html file="epon_gpon.jpg" alt="EPON vs GPON Layers" caption="EPON vs GPON Layer" %}
## Comunication between ONTs and OLT[^fs]
- EPON utilizes IEEE 802.3ah OAM messages for provisioning, fault isolation and performance monitoring in conjunction with SNMP (Simple Network Management Protocol) sets and gets through IETF (Internet Engineering Task Force) and MIBs (Management Information Bases). Additional control messages are MPCP GATEs/REPORTs for bandwidth granting.
- In GPON there are three different types of control messages: OMCI (ONT Management and Control Interface), OAM, and PLOAM (Physical Layer OAM). Their roles are shown in the table below.
| Control channel | Format | Used for |
| --------------- | --------------- | ------------------------------------------------------------------------------------------------------------------ |
| OMCI | Ethernet or ATM | Provisioning of ONT service defining layers above the GTC |
| Embedded OAM | Header overhead | BW granting, encryption key switching, and DBA |
| PLOAM | ATM | Auto discovery and all other PMD and GTC management info. PLOAM messages are directed to ONTs or FF for broadcasts |
## Wavelength[^huaweimultiplexing]
PON adopts Wavelength Division Multiplexing (WDM) technology, facilitating bidirectional communication over a single fiber.
To separate upstream/downstream signals of multiple users over a single fiber, PON adopts two multiplexing mechanism:
- In downstream direction, data packets are transmitted in a broadcast manner;
- In upstream direction, data packets are transmitted using TDMA.
{% include image.html file="quick-start/optical-fiber-transmission-windows.svg" alt="Fiber Optic Operation Wavelength and Window" caption="Fiber Optic Operation Wavelength and Window" %}
| | GPON | 1/1-EPON | XG(S)-GPON | 10/1-EPON | 10/10-EPON |
| ---------- | ------------------------- | ------------------------- | --------------------------- | --------------------------- | --------------------------- |
| Upstream | 1310 nm (1260 nm-1360 nm) | 1310 nm (1260 nm-1360 nm) | 1270 nm (1260 nm-1280 nm) | 1310 nm (1260 nm-1360 nm) | 1270 nm (1260 nm-1280 nm) |
| Downstream | 1490 nm (1480 nm-1500 nm) | 1490 nm (1480 nm-1500 nm) | 1577.5 nm (1575 nm-1580 nm) | 1577.5 nm (1575 nm-1580 nm) | 1577.5 nm (1575 nm-1580 nm) |
| RF-Overlay | 1550 nm (1550 nm-1560 nm) | 1550 nm (1550 nm-1560 nm) | 1550 nm (1550 nm-1560 nm) | 1550 nm (1550 nm-1560 nm) | 1550 nm (1550 nm-1560 nm) |
# Power Budget[^zyxel],[^cisco]
- Splitter attenuation
| Splitter Type | Attenuation |
| ------------- | ----------- |
| 1:2 | ≤ 3.5 dB |
| 1:4 | ≤ 7.0 dB |
| 1:8 | ≤ 10.5 dB |
| 1:16 | ≤ 14.0 dB |
| 1:32 | ≤ 17.5 dB |
| 1:64 | ≤ 20.5 dB |
| 1:128 | ≤ 24.0 dB |
- Loop attenuation: ≤ 0.5 dB (Per Km)
- Connector attenuation: ≤ 0.3 dB (Per Connector)
# Classes for laser[^cisco]
| | Class A | Class B | Class B+ | Class C |
| ------------ | ------- | ------- | -------- | ------- |
| Minimum loss | 5 dB | 10 dB | 13 dB | 15 dB |
| Maximun loss | 20 dB | 25 dB | 28 dB | 30 dB |
The requirements of a particular class may be more stringent for one system type than for another.
[^standardgpon]: *G.984.1: Gigabit-capable passive optical networks (GPON): General characteristics* https://www.itu.int/rec/T-REC-G.984.1
[^standardxgpon]: *G.987.1: 10-Gigabit-capable passive optical networks (XG-PON): General requirements* https://www.itu.int/rec/T-REC-G.987.1
[^standard1epon]: *IEEE 802.3ah-2004: IEEE Standard for Information technology-- Local and metropolitan area networks-- Part 3: CSMA/CD Access Method and Physical Layer Specifications Amendment: Media Access Control Parameters, Physical Layers, and Management Parameters for Subscriber Access Networks* https://standards.ieee.org/ieee/802.3ah/3179/
[^standard10epon]: *IEEE 802.3av-2009: IEEE Standard for Information technology-- Local and metropolitan area networks-- Specific requirements-- Part 3: CSMA/CD Access Method and Physical Layer Specifications Amendment 1: Physical Layer Specifications and Management Parameters for 10 Gb/s Passive Optical Networks* https://standards.ieee.org/ieee/802.3av/4060/
[^fs]: *Comparison of EPON and GPON* https://community.fs.com/blog/comparison-of-epon-and-gpon.html
[^zyxel]: *GPON E2E Fundamentals*, Zyxel 2018
[^huawei]: *GPON Fundamentals*, Huawei 2010 http://jm.telecoms.free.fr/QCM_Fibre/GPON-Fundamentals_Huawei.pdf
[^broadbandforum]: *GPON in FTTx Broadband Deployments*, Broadband Forum 2010 https://www.broadband-forum.org/download/MR-246.pdf
[^wolon]: *Fiber SFP Module Compatibility with APC, UPC, PC* https://www.wolonte.com/news.asp?id=599
[^cisco]: *Understand GPON Technology* https://www.cisco.com/c/en/us/support/docs/switches/catalyst-pon-series/216230-understand-gpon-technology.html
[^medium]: *HTFuture: EPON vs GPON Standard* https://medium.com/@ivyhtfuture/epon-vs-gpon-standard-b8ec20c55bb3
[^telecom]: *Fifty Years of Fixed Optical Networks Evolution: A Survey of Architectural and Technological Developments in a Layered Approach* https://doi.org/10.3390/telecom3040035
[^huaweimultiplexing]: *GPON Principle---Data Multiplexing* https://forum.huawei.com/enterprise/en/gpon-principle-data-multiplexing/thread/458243-100181
================================================
FILE: rakefile
================================================
Dir.glob('lib/tasks/*.rake').each {|r| import r}
================================================
FILE: site.webmanifest
================================================
{
"name": "Hack GPON",
"short_name": "Hack GPON",
"icons": [
{
"src": "/android-chrome-192x192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "/android-chrome-512x512.png",
"sizes": "512x512",
"type": "image/png"
}
],
"theme_color": "#27262b",
"background_color": "#27262b",
"start_url": "https://hack-gpon.org/",
"display": "standalone"
}
================================================
FILE: tsup.config.ts
================================================
import { defineConfig } from 'tsup'
export default defineConfig({
entry: ['assets/ts/'],
splitting: false,
sourcemap: true,
clean: true,
outDir: 'assets/js/generated'
})