Utilities for working with Metanoia/Proscend VDSL2 SFP Modems.
I personally am happy with the two 180-T's I purchased; one plugged into a Mikrotik hAP ac and the other into a Cisco WS-C3560X-24P. I received very similar VDSL2 sync speeds to a 'regular' router on both lines (70Mbps and 40Mbps respectively) even on the original firmware supplied.
Unfortunately since obtaining FTTP, BT Openreach will no longer allow me to continue any FTTC service and so it is difficult for me to significantly continue development of this project. I do welcome contributions from others and even bug reports.
I have used Lua (compatible with version 5.1) in the hope this work may be found to be useful to the OpenWRT community, a group that benefits from software with low disk space usage dependencies.
To set up your OS to run any of the utilities below, run:
Debian (and probably Ubuntu):
sudo apt install --no-install-recommends lua5.1 luarocks
Now depending on:
If your distro provides lua-posix
35.1 or later (for AF_PACKET
support), then run:
sudo apt install --no-install-recommends lua-posix
Otherwise, run:
sudo apt install --no-install-recommends build-essential liblua5.1-dev sudo luarocks install luaposix
OpenWRT:
opkg install lua lua-posix luarocks
Now run:
luarocks install lua-struct # (*with* hyphen)
Now fetch the project using:
git clone https://github.com/jimdigriz/mt5311.git /opt/mt5311
A one shot utility to query the SFP for information.
To use it, run as root
:
# lua /opt/mt5311/ebm-read.lua eth1 00:11:22:33:44:55 xdsl2LineStatusAttainableRateUs xdsl2LineStatusAttainableRateDs xdsl2LineStatusElectricalLength
reg hex int str
xdsl2LineStatusAttainableRateUs 001a19 6681 ...
xdsl2LineStatusAttainableRateDs 00af60 44896 ..`
xdsl2LineStatusElectricalLength 0000b8 184 ...
The output is in TSV (tab separated variable) format.
You should look at the register.map
file for other registers that you can read, but as well as the names you can provide the register address (integer or hexadecimal) directly.
You can use this tool to scan all the register space:
seq 0x7000 0x7fff | xargs -n1 printf "0x%x\n" | sudo xargs -n 20 lua /opt/mt5311/ebm-read.lua eth1 00:11:22:33:44:55
N.B. this may brick your device, I have no idea what all the registers do, so I suggest you stick to ranges covered in register.map
N.B. WORK IN PROGRESS AND NOT COMPLETE
An AgentX subagent that where possible implements the following MIBs:
To set up your OS, in additional to the steps above, run:
Debian (and probably Ubuntu):
sudo apt install --no-install-recommends snmpd
Now edit /etc/snmp/snmpd.conf
and add the following line:
view systemonly included .1.3.6.1.2.1.2
view systemonly included .1.3.6.1.2.1.31
view systemonly included .1.3.6.1.2.1.10.251
Restart snmpd
with:
sudo systemctl restart snmpd
OpenWRT:
opkg install snmpd
Check the install was correctly done by running the following as root
:
lua /opt/mt5311/snmp-agentx.lua IFACE MACADDR
Where:
IFACE
: name of the host network interface (for example eth1
) the VDSL2 SFP is connected to
MACADDR
: MAC address of the VDSL2 SFP
001122334455
, 00:11:22:33:44:55
and 00-11-22-33-44-55
If there is no error it means everything is are working, otherwise recheck that you followed the installation instructions so far correctly.
...
TODO include systemd
/service
integration
Assuming that you have your SNMP client and MIBs correctly set up on your workstation (apt get install --no-install-recommends snmp snmp-mibs-downloader
), you should be able to see the EBM 'interface' appear using something like the following commands (you may need to adjust your authentication settings):
snmptable -m ALL -Ci -Cw ${COLUMNS:-80} -v 2c -c public 192.0.2.1 IF-MIB::ifTable
snmptable -m ALL -Ci -Cw ${COLUMNS:-80} -v 2c -c public 192.0.2.1 IF-MIB::ifXTable
snmpwalk -m ALL -v 2c -c public 192.0.2.1 VDSL2-LINE-MIB::xdsl2LineTable
snmptable -m ALL -Ci -Cw ${COLUMNS:-80} -v 2c -c public 192.0.2.1 VDSL2-LINE-MIB::xdsl2LineBandTable
snmpwalk -m ALL -v 2c -c public 192.0.2.1 VDSL2-LINE-MIB::xdsl2ChannelStatusTable
snmpwalk -m ALL -v 2c -c public 192.0.2.1 VDSL2-LINE-MIB::xdsl2LineInventoryTable
snmpwalk -m ALL -v 2c -c public 192.0.2.1 VDSL2-LINE-MIB::xdsl2PMLineCurrTable
N.B. you may need to adjust your /etc/snmp/snmpd.conf
on your router for this to work, in particularly the parameters agentaddress
and rocommunity
/rouser
N.B. ignore the warnings Wrong Type (should be BITS): Opaque: 1234
To use this you will need to enable the 'xDSL' module for both 'Discovery' and 'Poller' in the 'Global Settings' menu.
As a recommendation, you should also index your interfaces based on ifName
which is stable, and not ifIndex
.
To use a basic Ethernet Boot & Management (EBM) protocol dissector:
sudo tcpdump -n -i eth0 'ether proto 0x6120' -w - -U | tee dump.pcap | tcpdump -r - -n -v
wireshark -X lua_script:dissector.lua dump.pcap
N.B. dissector.lua
contains my notes on the protocol
If it works, it looks like:
Included are several PCAPs capturing interactions with the SFP using DSLmonitor:
register.map
is a listing of the register addresses and their purpose manually derived from these samples):
xdslTwConfig
being in frame 426
You can see a video of the official tools in use, but below explains how to use the tools.
N.B. below worked fine for me on a Windows 10 VM running under QEMU (using the install media Win10_22H2_English_x64.iso
)
ipconfig /all
from the command prompt to obtain thisDSLAK.dll
not found' I was able to resolve the problem by running DSLmanager first (this may have due to running the installer for WinPCAP)To flash your SFP you follow the process:
WinPcap_4_1_3.exe
DSLmanager.exe
.b
binary firmware file
SFP_180-T_SOS_ROC.b
(aka version 8570) with the SHA256 00c5b9a93d2ef09b19470a53cb8eb4f390f51bc8264fbb761e5dc9853dd4e699
180T-L4TA-8463.b
with the SHA256 2e7a927d4d545c029510522dde6f6e27a047cd494295899cb3b8d43ed6baa9fb
8463
refers to the version number, bigger is (usually) betterDSLmanager.exe
and repeat the processshutdown
and no shutdown
ing the switch interface is not enough to power cycle it