Les darreres dues setmanes he avançat en diversos fronts, un d'ells és la configuració inicial de la pila des de la línia de comandes, amb libargp, i el suport per a obtindre i canviar aquesta configuració en temps d'execució emprant fsysopts. L'objectiu és aconseguir que el translator d'LwIP accepte les mateixes opcions que el pfinet, de manera que puga substituir aquest de manera transparent per a la resta del sistema.
Per aquesta raó, de nou he partit del codi de pfinet i he realitzat alguns canvis per adaptar-lo a LwIP. El resultat és molt més simple que el codi original, atès que el codi de pfinet realitza la inicialització de la pila des de la pròpia funció de lectura dels paràmetres d'entrada i, a més, té en compte algunes restriccions com la de garantir que només hi ha una única porta d'enllaç per a tot el sistema i altres casos especials. Per tot això, he pogut aconseguir la mateixa funcionalitat eliminant molt del codi original.
Aquest ha estat tot el treball que he pogut fer en la primera setmana, on encara havia de compaginar el GSoC amb els exàmens de la UOC. Afortunadament, a partir del passat dilluns 19 ja m'he pogut dedicar a temps complet només al GSoC. Aquesta darrera setmana la vaig començar afegint el suport per a fsysopts, que només consistia a fer els canvis pertinents a la funció d'anàlisi dels paràmetres d'entrada per garantir que funcionaria bé si es cridava un cop la pila estava ja inicialitzada i funcionant. Pràcticament tot el treball s'ha reduït a tindre cura de la gestió de memòria. Com a curiositat, val a dir que pfinet tenia una fuga de memòria que he pogut arreglar.
Un cop afegida la configuració de la pila des de la línia de comandes, he pogut comprovar que el translator ja admet la configuració de diverses interfícies de xarxa simultànies i l'encaminament entre elles. La limitació de definir una única porta d'enllaç ha quedat enrere, però ara a canvi cal un mecanisme per decidir quina és la porta d'enllaç per defecte. A falta d'haver-ho parlat amb els mantenidors del Hurd, de moment s'estableix la primera porta d'enllaç vàlida llegida com a porta per defecte.
L'altre assumpte destacable de què m'he ocupat esta setmana ha estat l'error que feia fallar el translator quan es combinava amb l'ús del eth-multiplexer, un altre translator que permet compartir la mateixa interfície de xarxa entre diversos servidors. Aquest error ha revelat que el codi de lectura de les dades des de la interfície estava malament perquè la condició de sortida del bucle que llegia les dades era incorrecta: una cadena de pbufs s'acaba quan q->tot_len == q->len
i no quan q->next == 0
. Es interessant observar que està malament al codi d'exemple que es distribuït pels mantenidors d'LwIP.
El pla inicial per aquesta setmana era començar a desenvolupar el suport per a IPv6, però algunes incidències m'han fet perdre una mica de temps. Tanmateix, a dia d'avui, la configuració automàtica d'adreces amb SLAAC, la creació d'adreces link-local i el suport per a treballar en mode de pila doble IPv4-IPv6 ja estan afegits. No explicaré més detalls sobre açò de moment, crec que és un tema molt interessant i paga la pena explicar-ho amb més detall a la propera entrada.