# 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
```