# LimeApp - DashBoard impro notes Ya existe una propuesta en el figma: https://www.figma.com/file/auIzuiYMoZcFicqtd0MvU1/LimeApp---General?node-id=0%3A1 ## Trabajo Previo - (Frontend) Limeapp RX tiene no usa react query. Refactor from old system to react query https://github.com/libremesh/lime-app/pull/334 Parece q en los packages q usa en el backend necesitan algo de amor: - (Backend) ubus-lime-metrics https://github.com/libremesh/lime-packages/pull/937 - No tiene tests - Split logic from rpcd - (Backend) ubus-lime-utils https://github.com/libremesh/lime-packages/pull/939 - Split logic from rpcd ### Donde pongo estos TODOS? - cliqueable el nombre del nodo, si lo ves q puedas ver el detalle y q tb puedas saltar a el - Botón para reiniciar un nodo con wait time - Crear campanita q te avisa si hay cosas sin resolver - ~~El metrics no deberia correr todos los tests de velocidad automaticamente, deberia ser ondemand~~ - ### Notas - Llamadas actuales al Back: `lime-metrics`, `iwinfo`, `lime-utils` - Refactor of old lime packages rpcd to new system https://github.com/ /lime-packages/pull/923/ - Ubus SI q expone iwinfo. Esto tiene q ver? `lime-packages/packages/lime-app/files/usr/share/rpcd/acl.d/iwinfo.json` ```bash ubus -v list iwinfo 'iwinfo' @786afd0d "devices":{} "info":{"device":"String"} "scan":{"device":"String"} "assoclist":{"device":"String","mac":"String"} "freqlist":{"device":"String"} "txpowerlist":{"device":"String"} "countrylist":{"device":"String"} "survey":{"device":"String"} "phyname":{"section":"String"} ``` - Habria q buscar un libreria (o a lo peor un wrapper) para `iw` para integrar en ubus. (probablemente iwinfo usa iw. Seria un buen sitio donde mirar) ## Ideas para añadir al dashboard ### **Chain info** Cada radio maneja mas de una antena, ejemplo una horizontal y una vertical, para mejorar la relacion signal/noise. Cada chain es una antena en la radio. Información sobre cada una de las radios. Ejemplo, si el chain esta muerto (signal -87). > un paquete de openwrt que hay que ver como esta echo adentro es libiwinfo-lua en particular lo interesante es ver si llama adentro directamente las llamadas de librerias C de iwinfo (y quisas podria ser facil extender para que nos pase las informacion de los chains por ejemplo) o si es un wrapper del mando iwinfo y ene se caso no nos interesa extender eso https://openwrt.org/packages/pkgdata/libiwinfo-lua https://github.com/openwrt/openwrt/tree/openwrt-21.02/package/network/utils/iwinfo #### Dudas - Es esto la alineacion?? Mostrar alerta si los chain son muy diferentes NO: habrian q aparecer los numeros de las chains. Se deberian llamar `A/B` x la calcomania... #### Tasks: - [ ] Habilitar un package que exponga el resultado `iw dev wlan0 station dump`, donde se consige la info de la chain en `signal` 0. El wrapper lua de iwconfig se puede encontrar el codigo en el makefile q encontramos 1. mirar si el wrapper lua utiliza iw config por detras en c entonces podemos extenderlo rapidamente 2. Si solo es un wrapper alrededor de iwconfig no nos interesa 3. En el caso de q no nos interese tendriamos q mirar el codigo de iw a ver si podemos sacar cosas de ahi como una libreria ya q lua puede hacer llamadas a librerias de c comn unos wrappers muy livianos - [ ] Proponer frontend en el figma ------ Utils q no sirven: ```bash ubus -v call network.wireless status ubus -v call iwinfo info '{"device": "wlan0"}' ubus -v call network.interface dump iw dev wlan0 station dump ``` ### **Estado de conexiones ethernet en el switch (wan y lan)** * El nuevo openwrt usa [DSA](https://openwrt.org/docs/guide-user/network/dsa/dsa-mini-tutorial) (distributed switch arquitecture). Investigar como, ver kernel level. De Gio: > aca te paso unos mandos para ver el tema de los puertos en router no DSA swconfig list swconfig dev switch0 show uno de los problemas es que no hay una manera 100% confiable de determinar que puerto real corresponde con el numerito que aparece en swconfig algo de informacion te lo encuentras en /etc/board.json en aparatos con soporte mas modernos tambien hay /proc/device-tree de todas formas acuerdate de montar esto siempre de forma modular y reusable, muy problemente nos acabará sirviendo esta informacion tambien en la parte de ruteo etc. * Cuales son los puertos conectados directamente a la cpu? Puertos 4 y 5 en librerouter estan soldados directamente a la placa asi q van a aparecer siempre conectados (investigar opción de la limeapp `is this a librerouter` para q la app tenga un flow concreto). `cat /etc/board.json | grep model -A3` https://github.com/libremesh/lime-packages/pull/959 #### Notas: - se podria usar `ip link show`? `ethtool`? NO: swconfig // DSA -> mirar si ubus tiene un modulo ya - Se puede diferenciar cual es `wan` y cual `lan`? ### **Alertas** > Como hacerlo? Persistencia estado de red: Historico de como esta la red en el mejor estado por si algo falla poder avisar. (control estadistico de procesos) - Este nodo no tiene ninguna buena conexion (menor de un threshold -67? color rojo de la interfaz cuando estas alineando) - Load (sacado del uptime ) (por arriba de 2) de algun nodo se fue al carajo ``` root@ql-berta:~# cat /proc/loadavg 0.13 0.20 0.24 1/61 31281 ``` ### **Camino de la red** Usar last known path para saber cual es el camino roto: `cat /etc/last_internet_path`. Pero ver como lo hace actualmente, si lo hace. ## Notes ### Ejemplos de prints #### iwinfo * `ubus -v call iwinfo info '{"device": "wlan0"}'` ```json { "phy": "phy0", "ssid": "XXXXXXX", "bssid": "XX:XX:XX:XX:XX:XX", "country": "TZ", "mode": "Client", "channel": 40, "frequency": 5200, "frequency_offset": 0, "txpower": 20, "txpower_offset": 5, "quality": 39, "quality_max": 70, "signal": -71, "noise": -95, "bitrate": 180000, "encryption": { "enabled": true, "wpa": [ 2 ], "authentication": [ "psk" ], "ciphers": [ "ccmp" ] }, "htmodes": [ "HT20", "HT40" ], "hwmodes": [ "a", "n" ], "hardware": { "id": [ 5772, 42, 1911, 59397 ], "name": "Ubiquiti airOS XM" } } ``` #### network.wireless * `ubus -v call network.wireless status` ```json { "radio0": { "up": true, "pending": false, "autostart": true, "disabled": false, "retry_setup_failed": false, "config": { "hwmode": "11a", "country": "TZ", "phy": "phy0", "distance": 5000, "txpower": 27, "htmode": "HT20", "channel": "161" }, "interfaces": [ { "section": "wifinet2", "ifname": "wlan0", "config": { "ssid": "MIWIFI_seYb", "mode": "sta", "key": "Barpatxoca8888", "encryption": "psk2", "mode": "sta", "network": [ "wwan" ] } } ] } } ``` #### network.interface * `ubus -v call network.interface dump` ```json { "interface": [ { "interface": "lan", "up": true, "pending": false, "available": true, "autostart": true, "dynamic": false, "uptime": 10418, "l3_device": "br-lan", "proto": "static", "device": "br-lan", "updated": [ "addresses" ], "metric": 0, "dns_metric": 0, "delegation": true, "ipv4-address": [ { "address": "10.1.61.129", "mask": 27 } ], "ipv6-address": [ ], "ipv6-prefix": [ ], "ipv6-prefix-assignment": [ ], "route": [ ], "dns-server": [ "8.8.8.8" ], "dns-search": [ ], "neighbors": [ ], "inactive": { "ipv4-address": [ ], "ipv6-address": [ ], "route": [ ], "dns-server": [ ], "dns-search": [ ], "neighbors": [ ] }, "data": { } }, { "interface": "loopback", "up": true, "pending": false, "available": true, "autostart": true, "dynamic": false, "uptime": 10418, "l3_device": "lo", "proto": "static", "device": "lo", "updated": [ "addresses" ], "metric": 0, "dns_metric": 0, "delegation": true, "ipv4-address": [ { "address": "127.0.0.1", "mask": 8 } ], "ipv6-address": [ ], "ipv6-prefix": [ ], "ipv6-prefix-assignment": [ ], "route": [ ], "dns-server": [ ], "dns-search": [ ], "neighbors": [ ], "inactive": { "ipv4-address": [ ], "ipv6-address": [ ], "route": [ ], "dns-server": [ ], "dns-search": [ ], "neighbors": [ ] }, "data": { } }, { "interface": "mesh0", "up": false, "pending": false, "available": false, "autostart": true, "dynamic": false, "proto": "none", "device": "wif0", "data": { }, "errors": [ { "subsystem": "interface", "code": "NO_DEVICE" } ] }, { "interface": "mesh1", "up": false, "pending": false, "available": false, "autostart": true, "dynamic": false, "proto": "none", "device": "wif1_t", "data": { }, "errors": [ { "subsystem": "interface", "code": "NO_DEVICE" } ] }, { "interface": "wif1", "up": false, "pending": false, "available": false, "autostart": true, "dynamic": false, "proto": "none", "data": { }, "errors": [ { "subsystem": "interface", "code": "NO_DEVICE" } ] }, { "interface": "wwan", "up": true, "pending": false, "available": true, "autostart": true, "dynamic": false, "uptime": 10406, "l3_device": "wlan0", "proto": "dhcp", "device": "wlan0", "updated": [ "addresses", "routes", "data" ], "metric": 0, "dns_metric": 0, "delegation": true, "ipv4-address": [ { "address": "192.168.1.128", "mask": 24 } ], "ipv6-address": [ ], "ipv6-prefix": [ ], "ipv6-prefix-assignment": [ ], "route": [ { "target": "0.0.0.0", "mask": 0, "nexthop": "192.168.1.1", "source": "192.168.1.128/32" } ], "dns-server": [ "212.230.135.2", "212.230.135.1" ], "dns-search": [ "home" ], "neighbors": [ ], "inactive": { "ipv4-address": [ ], "ipv6-address": [ ], "route": [ ], "dns-server": [ ], "dns-search": [ ], "neighbors": [ ] }, "data": { "leasetime": 86400 } } ] } ``` #### iw * `iw dev wlan0 station dump` ``` Station 44:ad:b1:90:f0:fa (on wlan0) inactive time: 10 ms rx bytes: 161213085 rx packets: 316295 tx bytes: 15316106 tx packets: 75178 tx retries: 6625 tx failed: 41 beacon loss: 0 beacon rx: 93820 rx drop misc: 248 signal: -76 [-77, -83] dBm signal avg: -75 [-75, -82] dBm beacon signal avg: -74 dBm tx bitrate: 90.0 MBit/s MCS 10 40MHz short GI rx bitrate: 81.0 MBit/s MCS 4 40MHz rx duration: 0 us last ack signal:19 dBm expected throughput: 37.994Mbps authorized: yes authenticated: yes associated: yes preamble: long WMM/WME: yes MFP: no TDLS peer: no DTIM period: 1 beacon interval:100 short slot time:yes connected time: 9666 seconds ```