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.
- VDSL2 SFP Modem:
- Metanoia MT-V5311 - seems to be the OEM
- Proscend 180-T
- ALLNET ALL4781-VDSL2-SFP
- Useful non-official public materials regarding the modem:
- Proscend SOS/ROC Firmware Update
- RevK®'s ramblings - VDSL SFP and FireBrick
- Duxtel:
- Forums:
- GitHub Projects
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 (forAF_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:
- RFC 5650 - Definitions of Managed Objects for Very High Speed Digital Subscriber Line 2 (VDSL2)
- RFC 3728 - Definitions of Managed Objects for Very High Speed Digital Subscriber Lines (VDSL)
- RFC 4070 - Definitions of Managed Object Extensions for Very High Speed Digital Subscriber Lines (VDSL) Using Multiple Carrier Modulation (MCM) Line Coding
- RFC 4706 - Definitions of Managed Objects for Asymmetric Digital Subscriber Line 2 (ADSL2)
- RFC 2662 - Definitions of Managed Objects for the ADSL Lines
- RFC 2863 - The Interfaces Group MIB
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:# mib-2 interfaces view systemonly included .1.3.6.1.2.1.2 # IF-MIB view systemonly included .1.3.6.1.2.1.31 # VDSL2-LINE-MIB 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 exampleeth1
) the VDSL2 SFP is connected to- this must be the untagged (native/non-VLANed) interface to the SFP
MACADDR
: MAC address of the VDSL2 SFP- set to the MAC address printed on your SFP
- case insensitive and accepts the formats
001122334455
,00:11:22:33:44:55
and00-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:
- output of using the "Dump SOC" button available in DSLmonitor (
register.map
is a listing of the register addresses and their purpose manually derived from these samples):- version 8570 - supposedly actually implements ROC and SOS support:
- files:
- packet capture includes connecting to the SFP
- version 8463 - ignores CO requesting ROC and SOS support:
- files:
- packet capture includes connecting to the SFP
- version 8255:
- files:
- packet capture includes connecting to the SFP and having the 'Port Status' section open and running for a while
- "Dump SOC" starts at (roughly) frame number 409 with the value of
xdslTwConfig
being in frame 426
- version 8570 - supposedly actually implements ROC and SOS support:
- capture of the SFP disconnecting us when another client connects
- clicking the 'Disconnect' button in DSLmonitor whilst the 'Port Status' section open, waiting a while, clicking 'Connect' and then waiting till showtime
- CO: Central Office (ie. DSLAM/exchange)
- elsewhere referred to as 'xTU-C' (central) and 'Ot'
- CPE: Customer Premises Equipment (ie. user modem)
- elsewhere referred to as 'xTU-R' (remote) and 'Rt'
- SOS (Save Our Showtime): rapidly responds to spontaneous changes in copper network conditions which would typically result in a dropout
- ROC (Robust Overhead Channel): complementary feature to SOS which enables CO to maintain connectivity with your modem in the event of spontaneous changes in copper network conditions
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
)
- click on 'Connect' (second icon down on the left)
- use only 'Port 1'
- Local MAC: set to MAC address of your local NIC
ipconfig /all
from the command prompt to obtain this
- Device MAC: set to the MAC address printed on your SFP
- click on 'OK'
- if it errors claiming '
DSLAK.dll
not found' I was able to resolve the problem by running DSLmanager first (this may have due to running the installer for WinPCAP)
- if it errors claiming '
- select the statistics window (third icon down on the left)
To flash your SFP you follow the process:
- install both x64 and x86 version of VS C++
- run
WinPcap_4_1_3.exe
- run
DSLmanager.exe
- select the NIC that the SFP is plugged into
- set the 'Device MAC' to the MAC address printed on your SFP
- click on the 'EBM' button
- you will be asked to select a
.b
binary firmware file- firmwares I have used:
SFP_180-T_SOS_ROC.b
(aka version 8570) with the SHA25600c5b9a93d2ef09b19470a53cb8eb4f390f51bc8264fbb761e5dc9853dd4e699
180T-L4TA-8463.b
with the SHA2562e7a927d4d545c029510522dde6f6e27a047cd494295899cb3b8d43ed6baa9fb
8463
refers to the version number, bigger is (usually) better
- firmwares I have used:
- now wait as the flashing takes place
- this will not take long (a minute or so) but do not worry as the window remains unresponsive for the duration
- scroll to the bottom of the log window and wait for it to display a "Upgrade Flash Success"
- if it fails, I have seen this once and your mileage may vary, unplug the SFP and reseat it, close
DSLmanager.exe
and repeat the process
- if it fails, I have seen this once and your mileage may vary, unplug the SFP and reseat it, close
- close DSLmanager
- after upgrade, power cycle SFP (unplug, put it back in)
shutdown
andno shutdown
ing the switch interface is not enough to power cycle it