Auteur Sujet: Test Glasfaser-modem 2 telekom ONT 2.5Gbe Synchro OK / IPV4 OK / IPV6 OK  (Lu 17450 fois)

0 Membres et 1 Invité sur ce sujet

hwti

  • Abonné Orange Fibre
  • *
  • Messages: 2 237
  • Chambly (60)
Test Glasfaser-modem 2 telekom ONT 2.5Gbe Synchro OK / IPV4 OK / IPV6 OK
« Réponse #120 le: 12 juin 2023 à 00:49:06 »
impossible de faire un bind sur un fichier non existant
On peut faire un bind sur un dossier, mais ça impose de copier tout le contenu (éventuellement uniquement des symlinks, si ça fonctionne).
Pour pouvoir simplement ajouter des fichiers, il faudrait utiliser overlayfs, mais il n'est pas activé dans le kernel (si on trouve des sources, ou si l'ABI n'a pas été modifiée, on pourrait le compiler nous-mêmes puisqu'on a la config kernel).

benoitm974

  • Abonné Bbox fibre
  • *
  • Messages: 107
  • chatillon 92
Test Glasfaser-modem 2 telekom ONT 2.5Gbe Synchro OK / IPV4 OK / IPV6 OK
« Réponse #121 le: 12 juin 2023 à 00:59:51 »
Le plus simple resterait de savoir démarrer un autre mini_httpd sur un autre port ... ou redémarer le mini_httpd après avoir change le path.. mais on dirait que le daemon smd n'est pas d'accord, il fini par reboot l'OLT quand il ne voit plus son isntance mini_httpd.... pour le bind du dossier il faudrait binder /tmp/www ou /usr/www-ap mais comme mini_httpd a déjà démarré on dirait qu'il ignore le bind.

hwti

  • Abonné Orange Fibre
  • *
  • Messages: 2 237
  • Chambly (60)
Test Glasfaser-modem 2 telekom ONT 2.5Gbe Synchro OK / IPV4 OK / IPV6 OK
« Réponse #122 le: 12 juin 2023 à 01:04:33 »
Oui! ca fonctionne pour sshd avec le /tmp/sh pour que busybox recoive l'applet name 'sh' on a un ssh fonctionnel ! qui vérifie le login 'DTTEL' (car sshd est patché pour l'existance du user aussi) existe dans /var/http_pw par contre il ne vérifie pas le password... puisqu'on bind aussi /bin/login indirectement ...
Donc ils ont patché sshd pour qu'il fonctionne comme telnetd en fait !
Normalement il vérifie le mot de passe lui-même, puisque l'authentification fait partie du protocole, et pas en appelant login.
Sinon c'est /var/cli_pw, pas /var/http_pw.
On peut peut-être aussi injecter une clé publique dans /var/ssh/.ssh/authorized_keys.

Mais là rien n'est permanent, il faudrait s'intéresser à ce qu'il y a sur les JFFS2 (à partir du dump, je voyais des binaires mais les noms étaient bizarres.

Non telnet passe des arguments du coup sh execute et quitte en erreur.
//EDIT: les arguments {slogin} /bin/sh /tmp/slogin -m TELNET -p ::ffff:192.168.100.2
OK, donc ils sont rajouté des arguments spécifiques à sc_cli.

hwti

  • Abonné Orange Fibre
  • *
  • Messages: 2 237
  • Chambly (60)
Test Glasfaser-modem 2 telekom ONT 2.5Gbe Synchro OK / IPV4 OK / IPV6 OK
« Réponse #123 le: 12 juin 2023 à 01:06:38 »
Je me suis dis ça aussi mais les réponse de hal_gpon_ctl ne correspondent pas à ce qu'il y a dans les fichiers :(
/usr/www-ap # hal_gpon_ctl get_sn
argv[0]:hal_gpon_ctl
argv[1]:get_sn
sn:SCOM�;�"
Le SN n'est pas SCOMxxxxxxxx, où les xxxxxxxx en hexa auraient là été décodés en UTF8 (ce qui en limiterait l'utilisé) ?

hwti

  • Abonné Orange Fibre
  • *
  • Messages: 2 237
  • Chambly (60)
Test Glasfaser-modem 2 telekom ONT 2.5Gbe Synchro OK / IPV4 OK / IPV6 OK
« Réponse #124 le: 12 juin 2023 à 01:17:26 »
Le plus simple resterait de savoir démarrer un autre mini_httpd sur un autre port ... ou redémarer le mini_httpd après avoir change le path.. mais on dirait que le daemon smd n'est pas d'accord, il fini par reboot l'OLT quand il ne voit plus son isntance mini_httpd.... pour le bind du dossier il faudrait binder /tmp/www ou /usr/www-ap mais comme mini_httpd a déjà démarré on dirait qu'il ignore le bind.
Normalement c'est -p pour le port, mais je suppose que tu as essayé.
Le message concernant l'adresse déjà utilisée est peut-être pour autre chose (socket unix, et pas TCP).
C'est le genre de choses qu'on peut regarder avec strace (https://github.com/andrew-d/static-binaries/blob/master/binaries/linux/arm/strace pour un binaire utilisable).

Si le smd ou autre n'aime pas que les processus soient tués, c'est gênant.
On doit pouvoir demander d'arrêter des processus, peut-être via ubus (qui ne donne malheureusement pas les paramètres).

benoitm974

  • Abonné Bbox fibre
  • *
  • Messages: 107
  • chatillon 92
Test Glasfaser-modem 2 telekom ONT 2.5Gbe Synchro OK / IPV4 OK / IPV6 OK
« Réponse #125 le: 12 juin 2023 à 14:34:16 »
Je pose le dmesg du boot ca pourra aider à comprendre la sequence.


hwti

  • Abonné Orange Fibre
  • *
  • Messages: 2 237
  • Chambly (60)
Test Glasfaser-modem 2 telekom ONT 2.5Gbe Synchro OK / IPV4 OK / IPV6 OK
« Réponse #126 le: 13 juin 2023 à 01:23:59 »
sercomm : mtd setup!
Kernel boot magic : 0;1;1
Creating 20 MTD partitions on "brcmnand.0":
0x000000000000-0x000000200000 : "CfeROM"
0x000000200000-0x000000600000 : "CfeRAM1"
0x000000600000-0x000000a00000 : "CfeRAM2"
0x000000a00000-0x000000aa0000 : "FlashMAP"
0x000000aa0000-0x000000b40000 : "SN"
0x000000b40000-0x000000c80000 : "Protect"
0x000000c80000-0x000002800000 : "Rootfs1"
0x000002800000-0x000003480000 : "Lib1"
0x000003480000-0x000005000000 : "Rootfs2"
0x000005000000-0x000005c80000 : "Lib2"
0x000005c80000-0x000005d20000 : "Bootflg"
0x000005d20000-0x000005dc0000 : "Rootfs1_Info"
0x000005dc0000-0x000005e60000 : "Lib1_Info"
0x000005e60000-0x000005f00000 : "Rootfs2_Info"
0x000005f00000-0x000005fa0000 : "Lib2_Info"
0x000005fa0000-0x000006220000 : "XMLConfig"
0x000006220000-0x0000064a0000 : "Erasable_XML_CFG"
0x0000064a0000-0x000006e00000 : "AppData"
0x000006e00000-0x000006f40000 : "Yaffs"
0x000006f40000-0x000008000000 : "Reserve"
Donc c'est un bout de code spécifique qui détermine les partitions, le "Kernel boot magic : 0;1;1" vient de "Bootflg".
Dans tous les cas, le bootloader a déjà dû lire Bootflg, pour savoir où charger le kernel (filestruct_full.bin dans Rootfs1 ou Rootfs2).

ubi0: attaching mtd6
ubi0: scanning is finished
ubi0: attached mtd6 (name "Rootfs1", size 27 MiB)
ubi0: PEB size: 131072 bytes (128 KiB), LEB size: 126976 bytes
ubi0: min./max. I/O unit sizes: 2048/2048, sub-page size 2048
ubi0: VID header offset: 2048 (aligned 2048), data offset: 4096
ubi0: good PEBs: 220, bad PEBs: 0, corrupted PEBs: 0
ubi0: user volume: 2, internal volumes: 1, max. volumes count: 128
ubi0: max/mean erase counter: 1/0, WL threshold: 4096, image sequence number: 901840304
ubi0: available PEBs: 113, total reserved PEBs: 107, PEBs reserved for bad PEB handling: 5
ubi0: background thread "ubi_bgt0d" started, PID 402
ubi1: attaching mtd7
ubi1: scanning is finished
ubi1: attached mtd7 (name "Lib1", size 12 MiB)
ubi1: PEB size: 131072 bytes (128 KiB), LEB size: 126976 bytes
ubi1: min./max. I/O unit sizes: 2048/2048, sub-page size 2048
ubi1: VID header offset: 2048 (aligned 2048), data offset: 4096
ubi1: good PEBs: 100, bad PEBs: 0, corrupted PEBs: 0
ubi1: user volume: 1, internal volumes: 1, max. volumes count: 128
ubi1: max/mean erase counter: 1/0, WL threshold: 4096, image sequence number: 309480860
ubi1: available PEBs: 61, total reserved PEBs: 39, PEBs reserved for bad PEB handling: 4
ubi1: background thread "ubi_bgt1d" started, PID 417
block ubiblock0_0: created from ubi0:0(rootfs_ubifs)
VFS: Mounted root (squashfs filesystem) readonly on device 254:0.
devtmpfs: mounted
SC: mount libs(/dev/mtdblock22) to /mnt/rootfs, ret=0
Là encore il y a du code spécifique pour initialiser ubi, l'équivalent de "ubi.mtd=6 ubi.block=0,rootfs_ubifs root=/dev/ubiblock_0_0 ubi.mtd=7".
C'est peut-être gluebi qui crée les mtd20 / mtd21 / mtd22, et bizarrement pour le montage des libs leur code spécifique utilise /dev/mtdblock22 (au lieu de faire "ubi.block=1,lib_squashfs" et d'utiliser /dev/ubiblock_1_0).

benoitm974

  • Abonné Bbox fibre
  • *
  • Messages: 107
  • chatillon 92
Test Glasfaser-modem 2 telekom ONT 2.5Gbe Synchro OK / IPV4 OK / IPV6 OK
« Réponse #127 le: 13 juin 2023 à 03:00:38 »
sercomm : mtd setup!
Kernel boot magic : 0;1;1
Creating 20 MTD partitions on "brcmnand.0":
0x000000000000-0x000000200000 : "CfeROM"
0x000000200000-0x000000600000 : "CfeRAM1"
0x000000600000-0x000000a00000 : "CfeRAM2"
0x000000a00000-0x000000aa0000 : "FlashMAP"
0x000000aa0000-0x000000b40000 : "SN"
0x000000b40000-0x000000c80000 : "Protect"
0x000000c80000-0x000002800000 : "Rootfs1"
0x000002800000-0x000003480000 : "Lib1"
0x000003480000-0x000005000000 : "Rootfs2"
0x000005000000-0x000005c80000 : "Lib2"
0x000005c80000-0x000005d20000 : "Bootflg"
0x000005d20000-0x000005dc0000 : "Rootfs1_Info"
0x000005dc0000-0x000005e60000 : "Lib1_Info"
0x000005e60000-0x000005f00000 : "Rootfs2_Info"
0x000005f00000-0x000005fa0000 : "Lib2_Info"
0x000005fa0000-0x000006220000 : "XMLConfig"
0x000006220000-0x0000064a0000 : "Erasable_XML_CFG"
0x0000064a0000-0x000006e00000 : "AppData"
0x000006e00000-0x000006f40000 : "Yaffs"
0x000006f40000-0x000008000000 : "Reserve"
Donc c'est un bout de code spécifique qui détermine les partitions, le "Kernel boot magic : 0;1;1" vient de "Bootflg".
Dans tous les cas, le bootloader a déjà dû lire Bootflg, pour savoir où charger le kernel (filestruct_full.bin dans Rootfs1 ou Rootfs2).

On peut voir que le boot magic change quand on change du firmware 0 au firmware 1
/usr/www-ap # dmesg | grep magic
Kernel boot magic : 0;1;1
/usr/www-ap # fw_ctl -s
        bootloader0 version:    0100
        valid(fw_0):            1
        bootloader1 version:    0100
        valid(fw_1):            1
        current running fw:     0
        commit fw:              0

------

/usr/www-ap # dmesg | grep magic
Kernel boot magic : 0;2;2
/usr/www-ap # fw_ctl -s
        bootloader0 version:    0100
        valid(fw_0):            1
        bootloader1 version:    0100
        valid(fw_1):            1
        current running fw:     1
        commit fw:              1

ubi0: attaching mtd6
ubi0: scanning is finished
ubi0: attached mtd6 (name "Rootfs1", size 27 MiB)
ubi0: PEB size: 131072 bytes (128 KiB), LEB size: 126976 bytes
ubi0: min./max. I/O unit sizes: 2048/2048, sub-page size 2048
ubi0: VID header offset: 2048 (aligned 2048), data offset: 4096
ubi0: good PEBs: 220, bad PEBs: 0, corrupted PEBs: 0
ubi0: user volume: 2, internal volumes: 1, max. volumes count: 128
ubi0: max/mean erase counter: 1/0, WL threshold: 4096, image sequence number: 901840304
ubi0: available PEBs: 113, total reserved PEBs: 107, PEBs reserved for bad PEB handling: 5
ubi0: background thread "ubi_bgt0d" started, PID 402
ubi1: attaching mtd7
ubi1: scanning is finished
ubi1: attached mtd7 (name "Lib1", size 12 MiB)
ubi1: PEB size: 131072 bytes (128 KiB), LEB size: 126976 bytes
ubi1: min./max. I/O unit sizes: 2048/2048, sub-page size 2048
ubi1: VID header offset: 2048 (aligned 2048), data offset: 4096
ubi1: good PEBs: 100, bad PEBs: 0, corrupted PEBs: 0
ubi1: user volume: 1, internal volumes: 1, max. volumes count: 128
ubi1: max/mean erase counter: 1/0, WL threshold: 4096, image sequence number: 309480860
ubi1: available PEBs: 61, total reserved PEBs: 39, PEBs reserved for bad PEB handling: 4
ubi1: background thread "ubi_bgt1d" started, PID 417
block ubiblock0_0: created from ubi0:0(rootfs_ubifs)
VFS: Mounted root (squashfs filesystem) readonly on device 254:0.
devtmpfs: mounted
SC: mount libs(/dev/mtdblock22) to /mnt/rootfs, ret=0
Là encore il y a du code spécifique pour initialiser ubi, l'équivalent de "ubi.mtd=6 ubi.block=0,rootfs_ubifs root=/dev/ubiblock_0_0 ubi.mtd=7".
C'est peut-être gluebi qui crée les mtd20 / mtd21 / mtd22, et bizarrement pour le montage des libs leur code spécifique utilise /dev/mtdblock22 (au lieu de faire "ubi.block=1,lib_squashfs" et d'utiliser /dev/ubiblock_1_0).

Oui quand tu fais un ubiattach -m X il monte des /dev/mtd supplémentaire et il monte des /dev/mtdblockyy ...

Ausi quand tu fais un fw_ctl -c 0 ou 1 il change juste la partition mtd10 "Bootflg"

/usr/www-ap # fw_ctl -c 1
enter real action -----tclen:0x1,tcoffset:0x8
writeflash: write 0 'st sector,start from 0x0,0x1 bytes
writeflash: total write 0x1 bytes
/usr/www-ap # /data/busybox-armv6l head -c 40 /dev/mtd10
eRcOmM.022������������������������������/usr/www-ap #
/usr/www-ap # fw_ctl -c 0
enter real action -----tclen:0x1,tcoffset:0x8
writeflash: write 0 'st sector,start from 0x0,0x1 bytes
writeflash: total write 0x1 bytes
/usr/www-ap # /data/busybox-armv6l head -c 40 /dev/mtd10
eRcOmM.012������������������������������/usr/www-ap #
/usr/www-ap # fw_ctl -c 3
enter real action -----tclen:0x1,tcoffset:0x8
writeflash: write 0 'st sector,start from 0x0,0x1 bytes
writeflash: total write 0x1 bytes
/usr/www-ap # /data/busybox-armv6l head -c 40 /dev/mtd10
eRcOmM.022������������������������������/

il ne change que le 2nd chiffre je ne sais pas ce que represente les 2 autres ...


benoitm974

  • Abonné Bbox fibre
  • *
  • Messages: 107
  • chatillon 92
Test Glasfaser-modem 2 telekom ONT 2.5Gbe Synchro OK / IPV4 OK / IPV6 OK
« Réponse #128 le: 13 juin 2023 à 03:16:28 »
Bon sinon j'ai compris le fonctionnement de la config XML utiliser par les fichier JSON/CGI/Web

tu peux avoir toute les config en tapant:
cmld_client get_node InternetGatewayDevice.
ou des sous noeud de config avec
cmld_client get_node  InternetGatewayDevice.WANDevice.1.X_SC_GponInterfaceConfig.qui renvoit:
<SERCOMM_CML>
        <Element name="X_SC_GponInterfaceConfig." writable="1" ntchange="0" type="object">
                <Element name="X_SC_SerialNumber" writable="1" ntchange="0" value="53434XXXXXXX" type="string"/>
                <Element name="X_SC_DefaultState" writable="1" ntchange="0" value="Standby" enumeration="Standby,Stop" type="string"/>
                <Element name="Status" dynamic="1" ntchange="0" value="" enumeration="Up,Initializing,EstablishingLink,NoSignal,Dormant,Error,Disabled" type="string"/>
                <Element name="RXPower" dynamic="1" ntchange="0" value="" type="string(16)"/>
                <Element name="TXPower" dynamic="1" ntchange="0" value="" type="string(16)"/>
                <Element name="TransceiverTemperature" dynamic="1" ntchange="0" value="0" type="string(16)"/>
                <Element name="CATVRXPower" dynamic="1" ntchange="0" value="" type="string(16)"/>
                <Element name="RFOutputPower" dynamic="1" ntchange="0" value="" type="string(16)"/>
        </Element>
</SERCOMM_CML>

les valeurs writable="1" sont modifiable avec cmld_client set
Les valeurs dynamic="1" sont 'calculées' au moment du cmld_client get ex:
/usr/www-ap # cmld_client get  InternetGatewayDevice.WANDevice.1.X_SC_GponInterfaceConfig.TXPower
InternetGatewayDevice.WANDevice.1.X_SC_GponInterfaceConfig.TXPower = 2.32dBm

a priori stocké dans /mnt/xml_config ?

Dans sa globalité la config contient énormement de déchet de toutes les config/router que sercom a pu faire (option wifi, nat, firewal, ....)

Il n'y a pas de trace du ploam password non plus ... je suis toujours obligé de le modifié via un appel curl à router.json je n'ai pas isolé la commande ou le fichier qui le contient...



hwti

  • Abonné Orange Fibre
  • *
  • Messages: 2 237
  • Chambly (60)
Test Glasfaser-modem 2 telekom ONT 2.5Gbe Synchro OK / IPV4 OK / IPV6 OK
« Réponse #129 le: 13 juin 2023 à 04:16:36 »
il ne change que le 2nd chiffre je ne sais pas ce que represente les 2 autres ...
Le 1er chiffre est écrit par fwctl_set_one_time_active_fw (fw_ctl -a), à priori :
 - 0 => on boot le firmware indiqué par le 2ème chiffre
 - 1/2 => on boot le firmware 0/1 une fois (donc la valeur est donc probablement remise à 0 automatiquement)
C'est pratique pour les tests, une fois que le boot est réussi on peut faire "fw_ctl -c 3" pour rendre le choix permanent (copier le 3ème chiffre dans le second).

Le 2ème chiffre est le firmware choisi ("commit"), écrit par fwctl_set_default_boot (fw_ctl -c).

Le 3ème chiffre est le firmware en cours d'exécution, lu par fwctl_get_running_fw.
D'ailleurs on voit que dans le test fw_ctl ne le change pas, mais "Kernel boot magic : 0;1;1" / "Kernel boot magic : 0;2;2".
Il doit donc être écrit par le CFE ou le kernel, en fonction de la valeur des deux premiers (et peut-être de vérifications de validité).

Il y a un mélange entre deux conventions, fw_ctl et des APIs utilisent 0/1, mais le magic utilise 1/2 (comme les partitions mtd : Rootfs1/Lib1, Rootfs2/Lib2).

benoitm974

  • Abonné Bbox fibre
  • *
  • Messages: 107
  • chatillon 92
Test Glasfaser-modem 2 telekom ONT 2.5Gbe Synchro OK / IPV4 OK / IPV6 OK
« Réponse #130 le: 14 juin 2023 à 20:01:37 »
Il existe un moyen de faire un appel de script au démarrage si vous voulez que telnet ou un autre service soit démarré à chaque boot. En utilisant un hack de libsl_system.so dans lequel il y a un appel system (hostname %s) utilisant une chaîne en provenance de la config de l'ont, l'appel système est censé définir le nom d'hôte du périphérique pour le partage de stockage si cette entrée existe dans la config. Dans l'exemple ci-dessous, vous devez d'abord créer un script shell /data/up et vous assurer qu'il dispose des droits d'exécution (ex chmod 755) puis crééer l'entrée de config qui déclenchera l'appel system en question. Bref au final ça tient en 3 lignes:

#nous devons d'abord ajouter l'entrée manquante (cmld_client ajoute tout seul tous elements en fonction du schema de la base)
cmld_client add InternetGatewayDevice.Services.StorageService. 1
#puis injectez le nom d'hôte et un appel à notre script après un '&'
cmld_client set InternetGatewayDevice.Services.StorageService.1.X_SC_NetbiosName='a;/data/up&'
cmld_client save
EDIT/ changé l'appel sur suggestion de @hwti

Cet appel arrive au moment du lancement du daemon 'smd' responsable du lancement de tous les daemon / config de l'ONT donc assez tôt dans le processus de boot. D'ailleurs il se lance avant la config vlan/bridge/réseau donc l'ajout de route statique ou de config du bridge devra être retardée ou injecté différemment ou on pourra lancer un script qui s'enregistre aux événements ubus par exemple.

L'important c'était d'avoir au moins 1 point d'entrée dans le boot process ... c'est fait.

au passage je salue à nouveau @hwti pour toutes ses astuces et son temps qui permet d'avancer sur ce projet et de rendre cet ONT de plus en plus intéressant et probablement utilisable chez plusieurs opérateurs maintenant.
« Modifié: 15 juin 2023 à 00:49:43 par benoitm974 »

hwti

  • Abonné Orange Fibre
  • *
  • Messages: 2 237
  • Chambly (60)
Test Glasfaser-modem 2 telekom ONT 2.5Gbe Synchro OK / IPV4 OK / IPV6 OK
« Réponse #131 le: 15 juin 2023 à 00:10:53 »
#nous devons d'abord ajouter l'entrée manquante (cmld_client ajoute tout seul tous elements en fonction du schema de la base)
cmld_client add InternetGatewayDevice.Services.StorageService. 1
#puis injectez le nom d'hôte et un appel à notre script après un '&'
cmld_client set InternetGatewayDevice.Services.StorageService.1.X_SC_NetbiosName='a&/data/up'
cmld_client save
Intéressant comme technique, ça ne m'étonnerait pas qu'on puisse en trouver d'autres encore  8)
L'appel "hostname %s" correspond à "sethostname(name, strlen(name))", s'ils avaient fait directement ça on n'aurait pas cette possibilité de lancement  ;D

En revanche "hostname a&/data/up", ça lance "hostname a" en arrière plan, et /data/up directement.
Donc ça ne fonctionne que si /data/up rend la main, sinon on bloque probablement l'init.
Du coup, est-ce qu'il ne faudrait pas plutôt :
cmld_client set InternetGatewayDevice.Services.StorageService.1.X_SC_NetbiosName='a;/data/up&'
Sinon, même si c'est dans un "StorageService", hostname change le nom d'hôte de l'ONT en général.
Mais ça n'a probablement aucun effet, à moins peut-être qu'on active un client DHCP dans l'ONT (actuellement on utilise son IP fixe 192.168.100.1).
Au pire si le hostname par défaut est autre chose que le "(none)" du kernel, on peut le mettre au début de la chaîne, ou ne rien mettre du tout ("hostname" sans argument affiche la valeur courante) :
cmld_client set InternetGatewayDevice.Services.StorageService.1.X_SC_NetbiosName='>/dev/null;/data/up&'