Introducción
La plataforma Atlas 50 posee una configuración muy concreta de todos los dispositivos específicos incorporados a ella. Algunos de ellos vienen soportados de forma estable por el núcleo estándar de Linux (www.kernel.org) y otros están en fase de desarrollo o directamente no vienen implementados. Estos factores suponen un grave problema a la hora de enganchar los dispositivos al Sistema Operativo ya que carecemos de la información técnica suficiente acerca del hardware que compone la plataforma Atlas 50, sin duda, de un volumen nada desdeñable.
Para solventar estos problemas de tan bajo nivel, Teldat proporcionó un conjunto de parches agrupados en el archivo linux-2.6.21-atlas.patch que dejan la versión base del Kernel Linux 2.6.21 detalladamente adaptada a la plataforma que tratamos. Aparece un problema añadido cuando deseamos experimentar con un novedoso sistema de ficheros, UBIFS desarrollado por Nokia, ya que aparece estable en la versión 2.6.27 del núcleo para la cual no sirve el parche proporcionado. Es por este motivo por el que partimos del Kernel http://git.infradead.org/users/dedekind/ubifs-v2.6.21.git, un porting hacia atrás (versión 2.6.21) del sistema de ficheros UBIFS que a pesar de no estar rematado del todo ha demostrado corrección durante la investigación.
Descargamos sobre el directorio final los fuentes del backport con el cliente de control de versiones git disponible en el paquete Ubuntu git-core:
> git clone git://git.infradead.org/~dedekind/ubifs-v2.6.21.git final
Initialized empty Git repository in /home/laurel/alum/cmoreno/TelDatsi/LinuxKernel/Atlas50/final/.git/ remote: Counting objects: 442985, done. remote: Compressing objects: 100% (89641/89641), done. remote: Total 442985 (delta 355368), reused 433304 (delta 352620) Receiving objects: 100% (442985/442985), 145.50 MiB | 2498 KiB/s, done. Resolving deltas: 100% (355368/355368), done. Checking out files: 100% (21678/21678), done.
Ahora, aplicamos el parche proporcionado al comienzo del proyecto sobre el directorio contenedor de los fuentes y observamos una serie de irregularidades al parchear:
> patch -p1 < linux-2.6.21-atlas.patch
[...] patching file crypto/tcrypt.c Hunk #1 FAILED at 768. 1 out of 1 hunk FAILED -- saving rejects to file crypto/tcrypt.c.rej [...] patching file drivers/mtd/nand/nand_base.c Hunk #1 succeeded at 2523 (offset -1 lines). [...] patching file include/linux/writeback.h Hunk #1 succeeded at 86 (offset 2 lines). [...] patching file MAINTAINERS Hunk #11 succeeded at 1953 (offset 9 lines). Hunk #12 succeeded at 1980 (offset 9 lines). Hunk #13 succeeded at 2003 (offset 9 lines). Hunk #14 succeeded at 2349 (offset 17 lines). Hunk #15 succeeded at 2488 (offset 17 lines). Hunk #16 succeeded at 2569 (offset 17 lines). Hunk #17 succeeded at 2872 (offset 17 lines). Hunk #18 succeeded at 2955 (offset 17 lines). Hunk #19 succeeded at 3083 (offset 17 lines). Hunk #20 succeeded at 3093 (offset 17 lines). Hunk #21 succeeded at 3130 (offset 17 lines). Hunk #22 succeeded at 3440 (offset 17 lines).
Como estamos aplicando el parche sobre los fuentes de un backport y no sobre los originales, hay pequeñas diferencias que son detectadas por la herramienta “patch” (paquete Ubuntu con mismo nombre). Todas estas diferencias excepto una no suponen inconveniente a la hora de aplicar el parche (Hunk #XX succeeded), el problema aparece con el fichero tcrypt.c que modificaremos manualmente tras observar los motivos de rechazo en tcrypt.c.rej quedando el fragmento conflictivo tal y como mostramos a continuación:
tfm = crypto_alloc_comp(algo, 0, CRYPTO_ALG_ASYNC); if (tfm == NULL) { printk("failed to load transform for %s\n", algo); return; } /* Karlos */
Configuración 2.6.21
Para realizar esta configuración del Kernel Linux tomamos como base la configuración hardware de las máquinas cedidas por Teldat para investigar y experimentar, esto es, la plataforma Atlas 50 básica con su interfaz de red Ethernet más el de consola junto a las opciones extra de un intefaz Ethernet más un interfaz BRI-RDSI, de tal manera que no se añadirá, inicialmente, soporte para aquellas tarjetas y módulos de expansión que fabrica la empresa para aumentar las capacidades del router.
Antes de comenzar a revisar punto por punto la configuración del núcleo recién descargado, establecemos algunos criterios basados en el marco de trabajo habitual de la máquina, esto es, en su puesto de enrutamiento:
- descartaremos a priori todas aquellas opciones destinadas a entornos de desarrollo, depuración o pruebas por su escasa utilidad en el sistema final habiendo sido algunas muy útiles en tiempo de investigación.
- descartaremos asimismo todas las opciones consideradas o marcadas como obsoletas/experimentales en beneficio de tecnologías actuales estables.
- activaremos las opciones de monitorización de los subsistemas críticos o propensos a fallos con el objetivo de detectar problemas y subsanarlos.
- configuraremos un Kernel monolítico, es decir, un núcleo completo permanente en memoria volátil sin soporte para módulos con el objetivo de minimizar latencias de procesamiento a este nivel.
- configuraremos un único usuario en todo el sistema, el ROOT, ya que hacen falta permisos de administración para llevar a cabo las tareas cotidianas del router: (des)activar y configurar interfaces, establecer enrutamientos y filtros a éstos, arrancar menú textual y servicios para la configuración remota/telecarga como la implementación del servidor SSH DropBear…
Estas pautas se fundamentan en dos máximas de toda plataforma de computación cuyo impacto será analizado en cada decisión:
- optimizar rendimiento
- maximizar seguridad
Una vez comentados los criterios iniciales para el desarrollo de esta fase, pasamos a la minuciosa configuración del Kernel para el sistema empotrado que tratamos:
> make CROSS_COMPILE=powerpc-linux- ARCH=powerpc menuconfig
Lógicamente pueden establecerse las variables de entorno en sentencias previas a la mostrada.
El desarrollo transcurre en un colorido sistema textual de menús partiendo de un archivo inicial de configuración donado por los técnicos de Teldat:
[ ] 64-bit kernel Processor support ---> Code maturity level options ---> General setup ---> Loadable module support ---> Block layer ---> Platform support ---> Kernel options ---> Bus options ---> Advanced setup ---> Networking ---> Device Drivers ---> File systems ---> Library routines ---> Kernel hacking ---> Security options ---> Cryptographic options ---> --- Load an Alternate Configuration File Save an Alternate Configuration File
Queda desactivada la opción Kernel para 64 bits debido a que la arquitectura PowerPC está orientada a 32 bits.
Processor support
En este primer submenú, seleccionamos entre los procesadores de la familia PowerPC ofertados, el Motorola MPC8272 correspondiente a la máquina que tratamos. Desactivamos asimismo el soporte multiprocesador al no estar implementado por la arquitectura del microprocesador y porque la plataforma Atlas 50 cuenta con una única CPU.
Processor Type (Freescale 82xx) ---> [ ] Symmetric multi-processing support
Code maturity level options
Desactivamos la siguiente opción para evitar versiones inestables de controladores/subsistemas no siendo el desarrollo de los mismos objetivo de la máquina.
[ ] Prompt for development and/or incomplete code/drivers
General setup
Agregamos nuestra pequeña personalización TelDatsi a la versión exacta del Kernel construido. Desactivamos el soporte para espacio de intercambio puesto que disponemos de una capacidad en memoria RAM (64 MiB) muy superior a la capacidad de la memoria Flash de almacenamiento secundario (16 MiB), por lo que no tiene sentido activar la memoria virtual. Inter Process Communication de System V son un conjunto de librerías para comunicar y sincronizar procesos, los desactivamos ya que no necesitamos mecanismos de sincronización añadidos a los propios del Sistema Operativo. Activamos el BSD Process Accounting, en detrimento de la opcion experimental, para monitorizar procesos en un momento dado forzando la versión 3 de su formato de registro de estadísticas. Desactivamos el soporte para espacios de nombres UTS ya que no es propósito de la plataforma crear servidores virtuales y activamos las opciones de auditoría para detectar problemas en el núcleo. Activamos el soporte para el pseudo-sistema de ficheros SYSFS a través del cual conoceremos los detalles del sistema de ficheros UBIFS y de las capas subyacentes. Quedan desactivados el soporte para almacenar la configuración .config que estamos creando en el propio Kernel y el soporte para el interfaz de intercambio kernel - espacio de usuario al no suponer ninguna ventaja en la funcionalidad del router.
(TelDatsi) Local version - append to kernel release [*] Automatically append version information to the version string [ ] Support for paging of anonymous memory (swap) [ ] System V IPC [*] BSD Process Accounting [*] BSD Process Accounting version 3 file format [ ] Export task/process statistics through netlink (EXPERIMENTAL) [ ] UTS Namespaces [*] Auditing support [*] Enable system-call auditing support [ ] Kernel .config support [*] Create deprecated sysfs files [ ] Kernel->user space relay support (formerly relayfs) [*] Configure standard kernel features (for small systems) --->
Configure standard kernel features (for small systems)
Desactivamos el interfaz de nombres binarios para llamadas al sistema, los símbolos de depuración, el soporte para generar volcados de memoria, y los contadores de eventos en la máquina virtual con lo que ahorramos espacio de código capando tareas de escasa utilidad en el sistema final.
Desactivamos el soporte para “conexión en caliente” porque descartamos la posibilidad de alterar el árbol de dispositivos configurados en la plataforma Atlas 50 sin reprogramación previa.
Queda desactivado también el sistema de ficheros SHMEM utilizado para manejar memoria compartida, quedando reemplazado de esta manera por el RAMFS más apropiado a sistemas empotrados sin memoria SWAP.
Activamos el soporte para los mecanismos de logging y notificación PRINTK y BUG con el objetivo de diagnosticar problemas e inconsistencias en el sistema operativo.
Activamos el uso completo de las estructuras de datos internas al núcleo con objeto de optimizar el rendimiento al disponer de RAM suficiente.
Activamos también el soporte para los mecanismos “fast userspace mutexes” requerido por aplicaciones basadas en GLIBC y “event poll” que mejora algunos algoritmos para ciertos modelos de comunicaciones.
Queda finalmente activado el soporte para el algoritmo SLAB de asignación de memoria que anula la fragmentación interna de las páginas e incrementa el rendimiento frente al desfasado SLOB.
--- Configure standard kernel features (for small systems) [ ] Sysctl syscall support [ ] Load all symbols for debugging/ksymoops [ ] Support for hot-pluggable devices [*] Enable support for printk [*] BUG() support [ ] Enable ELF core dumps [*] Enable full-sized data structures for core [*] Enable futex support [*] Enable eventpoll support [ ] Use full shmem filesystem [*] Use full SLAB allocator [ ] Enable VM event counters for /proc/vmstat
Loadable module support
Desactivamos el soporte para módulos porque buscamos un kernel monolítico con todas y sólo aquellas capacidades que el router requiere.
[ ] Enable loadable module support
Block layer
Activamos la capa de gestión de bloques al ser una capa fundamental del sistema operativo sobre la que apoyan muchos otros servicios. Quedan desactivadas las opciones relativas a la monitorización y soporte de capacidades superiores a 2 TiB por falta de espacio en Flash.
[*] Enable the block layer [ ] Support for Large Block Devices [ ] Support for tracing block io actions [ ] Support for Large Single Files IO Schedulers --->
IO Schedulers
Agregamos soporte para todos los planificadores ofertados por la herramienta, estableciendo por omisión el algoritmo CFQ que distribuye el tiempo equitativamente para todos los procesos en ejecución.
[*] Anticipatory I/O scheduler [*] Deadline I/O scheduler [*] CFQ I/O scheduler Default I/O scheduler (CFQ) --->
Platform support
Seleccionamos la única plataforma ofertada por la herramienta para la familia de microprocesadores que tratamos: Freescale MPC82xx PowerQUICC II.
Machine Type (Freescale MPC82xx ADS) --->
Kernel options
Desactivamos el soporte para instalar el Kernel mas allá del primer gigabyte de RAM al disponer exclusivamente ed 64 MiB. Seleccionamos una frecuencia de interrupción de 300 Hz por parte del reloj y un núcleo expulsivo con la opción del cerrojo global activada para minimizar la latencia a la hora de ejecutar tareas. Activamos el soporte para el formato ELF enfocado a código ejecutable ya que resulta ser el más extendido para ejecutables y bibliotecas y desactivamos el soporte para el formato MISC y la característica SECCOMP ya que en principio, sólo se van a utilizar aplicaciones nativas. Desactivamos el soporte para teclado PS/2 y administración de la energía a falta del hardware apropiado. Activamos el enlace hacia el espacio de usuario PROC que hace visible al menú la configuración hardware que exporta el BootLoader de cada router al variar ésta en función de la licencia adquirida por el usuario. Queda desactivada la opción que envía parámetros por omisión al kernel ya que esta tarea se configura manualmente a través del BootLoader de cada máquina.
[ ] High memory support Timer frequency (300 HZ) ---> Preemption Model (Preemptible Kernel (Low-Latency Desktop)) ---> [*] Preempt The Big Kernel Lock [*] Kernel support for ELF binaries [ ] Kernel support for MISC binaries [ ] PC PS/2 style Keyboard [*] Support for device tree in /proc [ ] Default bootloader kernel arguments [ ] Power Management support [ ] Enable seccomp to safely compute untrusted bytecode
Bus options
Activamos el subsistema bus PCI a través del cual se comunican los periféricos de la plataforma con el procesador MPC8272 dando soporte así a las dos ranuras de expansión que dispone el Atlas 50: PMC-PCI y miniPCI. Quedan desactivadas el resto de opciones por falta de implementación hardware.
[*] PCI support [ ] Enable workaround for MPC826x erratum PCI 9 [ ] PCI Express support PCCARD (PCMCIA/CardBus) support ---> PCI Hotplug Support --->
Advanced setup
[ ] Prompt for advanced kernel configuration options --- Default settings for advanced configuration options are used
A falta de información técnica, dejamos los valores por omisión para las siguientes constantes:
Set maximum low memory (NEW) Set custom kernel base address (NEW) Set custom user task size (NEW) Set the boot link/load address (NEW)
Networking
En los siguientes subapartados de red se van a marcar prácticamente todas las opciones al implementar directamente las necesidades funcionales del router. Quedan desactivados los subsistemas posteriores (radio, infrarrojos, Bluetooth y WiFi) al no formar parte de la plataforma Atlas 50 original.
[*] Networking support Networking options ---> [ ] Amateur Radio support ---> [ ] IrDA (infrared) subsystem support ---> [ ] Bluetooth subsystem support ---> [ ] Generic IEEE 802.11 Networking Stack
Networking options
Activamos la depuración de paquetes con el objetivo de diagnosticar ataques y problemas en las comunicaciones. Asimismo activamos los Sockets Unix muy utilizados en procesos internos al sistema (por ejemplo, syslog) y evitamos el acceso directo a los dispositivos de red desactivando el Packet Socket lo que fuerza el uso de la pila de protocolos correspondiente. Damos soporte al interfaz nativo para gestión de claves XFRM para soportar IPsec a nivel de núcleo activando la cuarta opción y damos soporte a la pila IPsec del proyecto Kame activando la familia de sockets PF_KEY versión 2. Evidentemente, activamos la pila de protocolos estándar de facto en Internet, TCP/IP, con casi todas sus funcionalidades: multicast, tunelling, monitorización, routing condicional y avanzado, detección de ataques, seguridad IPsec, todo esto tanto bajo IPv4 como IPv6. Exceptuamos aquellas opciones en fase experimental y la autoconfiguración IP remota vía BOOTP y RARP para estaciones sin disco ya que no se da el caso. Entre los algoritmos de control de la congestión TCP elegimos el CUBIC (BIC versión 2) por omisión dejando todos marcados para sacar el máximo rendimiento según el escenario de aplicación. Activamos también la funcionalidad de switch Ethernet con soporte para redes virtuales sobre dichos interfaces lo que supone grandes ventajas. Finalmente activamos, por motivos de interoperabilidad, el resto de protocolos ofertados exceptuando el driver en fase experimental y dejamos desactivado el Network Testing ya que se escapa a la funcionalidad del router en su marco de trabajo habitual.
[*] Network packet debugging [ ] Packet socket [*] Unix domain sockets [*] Transformation user configuration interface [*] PF_KEY sockets [*] TCP/IP networking [*] IP: multicasting [*] IP: advanced router Choose IP: FIB lookup algorithm (choose FIB_HASH if unsure) (FIB_HASH) ---> [*] IP: policy routing [*] IP: equal cost multipath [ ] IP: equal cost multipath with caching support (EXPERIMENTAL) [*] IP: verbose route monitoring [ ] IP: kernel level autoconfiguration [*] IP: tunneling [*] IP: GRE tunnels over IP [*] IP: broadcast GRE over IP [*] IP: multicast routing [*] IP: PIM-SM version 1 support [ ] IP: PIM-SM version 2 support [*] IP: TCP syncookie support (disabled per default) [*] IP: AH transformation [*] IP: ESP transformation [*] IP: IPComp transformation [*] IP: IPsec transport mode [*] IP: IPsec tunnel mode [*] IP: IPsec BEET mode [*] INET: socket monitoring interface [*] TCP: advanced congestion control ---> IP: Virtual Server Configuration ---> [*] The IPv6 protocol [*] IPv6: Privacy Extensions support [*] IPv6: Router Preference (RFC 4191) support [*] IPv6: AH transformation [*] IPv6: ESP transformation [*] IPv6: IPComp transformation [*] IPv6: IPsec transport mode [*] IPv6: IPsec tunnel mode [*] IPv6: IPsec BEET mode [*] IPv6: IPv6-in-IPv4 tunnel (SIT driver) [*] IPv6: IPv6-in-IPv6 tunnel [*] Security Marking [*] Network packet filtering framework (Netfilter) ---> [*] 802.1d Ethernet Bridging [*] 802.1Q VLAN Support [*] DECnet Support [*] ANSI/IEEE 802.2 LLC type 2 Support [*] The IPX protocol [*] IPX: Full internal IPX network [*] Appletalk protocol support [*] Appletalk interfaces support [ ] Appletalk-IP driver support QoS and/or fair queueing ---> Network testing --->
Network packet filtering framework (Netfilter)
Activamos el subsistema Netfilter que sirve para filtrar y gestionar paquetes de red al satisfacer directamente innumerables requisitos propios de cualquier plataforma de networking. Activamos en este menú una de sus funcionalidades, el filtrado a nivel IP y ARP, para dar soporte a labores de cortafuegos. Desactivamos la opción referente a la depuración de código por su escasa utilidad fuera del tiempo de investigación y desarrollo.
--- Network packet filtering framework (Netfilter) [ ] Network packet filtering debugging [*] Bridged IP/ARP packets filtering Core Netfilter Configuration ---> IP: Netfilter Configuration ---> Bridge: Netfilter Configuration --->
Core Netfilter Configuration
Activamos el interfaz NETLINK que exporta al espacio de usuario diversa información acerca del funcionamiento de NetFilter con soporte para encolado y logging de paquetes. Activamos también el registro de conexiones por parte de Netfilter en su versión no anticuada con objeto de maximizar la seguridad. Entre los protocolos que debe entender NetFilter, activamos exclusivamente PPtP porque el resto no son implementados en el sistema. Activamos el soporte para todos los “targets”, extensiones de las capacidades de Netfilter a la hora de tratar los paquetes, al igual que para todos los “matches”, diversas reglas que pueden establecerse en el procesado de paquetes, con el fin de maximizar la funcionalidades de routing.
[*] Netfilter netlink interface [*] Netfilter NFQUEUE over NFNETLINK interface [*] Netfilter LOG over NFNETLINK interface [*] Netfilter connection tracking support Netfilter connection tracking support (Layer 3 Independent Connection tracking) --- Connection tracking flow accounting --- Connection mark tracking support [*] Connection tracking security mark support [ ] Amanda backup protocol support [ ] FTP protocol support [ ] IRC protocol support [*] PPtP protocol support [ ] TFTP protocol support --- Netfilter Xtables support (required for ip_tables) [*] "CLASSIFY" target support [*] "CONNMARK" target support [*] "DSCP" target support [*] "MARK" target support [*] "NFQUEUE" target Support [*] "NFLOG" target support [*] "NOTRACK" target support [*] "SECMARK" target support [*] "CONNSECMARK" target support [*] "TCPMSS" target support [*] "comment" match support [*] "connbytes" per-connection counter match support [*] "connmark" connection mark match support [*] "conntrack" connection tracking match support [*] "DCCP" protocol match support [*] "DSCP" match support [*] "ESP" match support [*] "helper" match support [*] "length" match support [*] "limit" match support [*] "mac" address match support [*] "mark" match support [*] IPsec "policy" match support [*] Multiple port match support [*] "physdev" match support [*] "pkttype" packet type match support [*] "quota" match support [*] "realm" match support [*] "state" match support [*] "statistic" match support [*] "string" match support [*] "tcpmss" match support [*] "hashlimit" match support
IP: Netfilter Configuration
En este menú se configura NetFilter para el protocolo IP. Activamos el registro de tráfico IP para poder analizar las conexiones requeridas por el mecanismo NAT/PAT dejando desactivada la compatibilidad para el desfasado esquema dependiente que no utilizamos. Desactivamos la opción obsoleta que permite inyectar paquetes en el espacio de usuario en favor del interfaz NetFilter NFQUEUE activado anteriormente. El soporte para las IP tables queda indiscutiblemente activado al suponer la base de la identificación, filtrado y procesado de paquetes IP. Activamos todas las opciones relativas a este framework; permiten: enrutamientos condicionales, asociar acciones en función de cada paquete (traducción de puertos y direcciones), redirección automática, entre otros. Activamos asimismo el análogo de las IP tables a nivel ARP con sus módulos de filtrado y manipulación de paquetes ARP.
[*] IPv4 connection tracking support (required for NAT) [ ] proc/sysctl compatibility with old connection tracking [ ] IP Userspace queueing via NETLINK (OBSOLETE) [*] IP tables support (required for filtering/masq/NAT) [*] IP range match support [*] TOS match support [*] recent match support [*] ECN match support [*] AH match support [*] TTL match support [*] Owner match support [*] address type match support [*] Packet filtering [*] REJECT target support [*] LOG target support [*] ULOG target support [*] Full NAT [*] MASQUERADE target support [*] REDIRECT target support [*] NETMAP target support [*] SAME target support [*] Packet mangling [*] TOS target support [*] ECN target support [*] TTL target support [*] raw table support (required for NOTRACK/TRACE) [*] ARP tables support [*] ARP packet filtering [*] ARP payload mangling
Bridge: Netfilter Configuration
Activamos este módulo de Netfilter orientado al filtrado y manipulacion de tramas Ethernet junto a toda aquellas extensiones que no hayan quedado obsoletas.
[*] Ethernet Bridge tables (ebtables) support [*] ebt: broute table support [*] ebt: filter table support [*] ebt: nat table support [*] ebt: 802.3 filter support [*] ebt: among filter support [*] ebt: ARP filter support [*] ebt: IP filter support [*] ebt: limit match support [*] ebt: mark filter support [*] ebt: packet type filter support [*] ebt: STP filter support [*] ebt: 802.1Q VLAN filter support [*] ebt: arp reply target support [*] ebt: dnat target support [*] ebt: mark target support [*] ebt: redirect target support [*] ebt: snat target support [*] ebt: log support [ ] ebt: ulog support (OBSOLETE)
QoS and/or fair queueing
Activamos la planificación dinámica del envío de paquetes que determina cuáles son prioritarios, cuáles han de retrasarse y cúales han de desecharse junto a todos los algoritmos propuestos basándolos en un temporizador controlado mediante la función del sistema GETTIMEOFDAY frente a la interrupción de reloj. Esta función del sistema devuelve la cantidad de segundos y microsegundos transcurridos desde la medianoche del 1 de Enero de 1970 y proporciona mejor resolución que la interrupción de reloj a pesar de ser más lenta en su respuesta. Activamos la clasificación de paquetes recibidos bajo la opción Ingress Qdisc junto a todos los algoritmos ofertados para este menester. Activamos de la misma manera el soporte para el uso reglas extendidas en todas sus variedades con el espacio por omisión reservado en pila, y la posibilidad de ejecutar la tipología completa de acciones tras una clasificación válida. Activamos el soporte para el Resource Reservation Protocol (RSVP) en sus versiones IPv4 e IPv6 que permite forzar unas tasas máximas y mínimas de transferencia lo cual resulta de utilidad en comunicaciones de tiempo real (streaming). Quedan desactivados el emulador de red al carecer de sentido en un entorno diferente al de pruebas, y la clasificación de paquetes en función del dispositivo de entrada al poder conseguirse con el match METADATA.
[*] QoS and/or fair queueing Packet scheduler clock source (gettimeofday) ---> --- Queueing/Scheduling [*] Class Based Queueing (CBQ) [*] Hierarchical Token Bucket (HTB) [*] Hierarchical Fair Service Curve (HFSC) [*] Multi Band Priority Queueing (PRIO) [*] Random Early Detection (RED) [*] Stochastic Fairness Queueing (SFQ) [*] True Link Equalizer (TEQL) [*] Token Bucket Filter (TBF) [*] Generic Random Early Detection (GRED) [*] Differentiated Services marker (DSMARK) [ ] Network emulator (NETEM) [*] Ingress Qdisc --- Classification [*] Elementary classification (BASIC) [*] Traffic-Control Index (TCINDEX) [*] Routing decision (ROUTE) [*] Netfilter mark (FW) [*] Universal 32bit comparisons w/ hashing (U32) [*] Performance counters support [*] Netfilter marks support [*] IPv4 Resource Reservation Protocol (RSVP) [*] IPv6 Resource Reservation Protocol (RSVP6) [*] Extended Matches (32) Stack size [*] Simple packet data comparison [*] Multi byte comparison [*] U32 key [*] Metadata [*] Textsearch [*] Actions [*] Traffic Policing [*] Generic actions [*] Probability support [*] Redirecting and Mirroring [*] IPtables targets [*] Packet Editing [*] Simple Example (Debug) [ ] Incoming device classification --- Rate estimator
Device Drivers
En este apartado vamos a descartar de antemano todas aquellas secciones relativas a dispositivos que claramente no forman parte de la plataforma Atlas 50 por su poca o nula utilidad en las labores propias de un router. Otros componentes incorporados a la máquina, en cambio, no vienen soportados por esta version del Kernel, como es el caso del hardware USB interno al microprocesador, así que quedan pendientes de una implementación externa.
Generic Driver Options ---> Connector - unified userspace <-> kernelspace linker ---> Memory Technology Devices (MTD) ---> Parallel port support ---> Plug and Play support ---> Block devices ---> Misc devices ---> ATA/ATAPI/MFM/RLL support ---> SCSI device support ---> Serial ATA (prod) and Parallel ATA (experimental) drivers ---> Multi-device support (RAID and LVM) ---> Fusion MPT device support ---> IEEE 1394 (FireWire) support ---> I2O device support ---> Macintosh device drivers ---> Network device support ---> ISDN subsystem ---> Telephony Support ---> Input device support ---> Character devices ---> I2C support ---> SPI support ---> Dallas's 1-wire bus ---> Hardware Monitoring support ---> Multifunction device drivers ---> Multimedia devices ---> Graphics support ---> Sound ---> HID Devices ---> USB support ---> MMC/SD Card support ---> LED devices ---> InfiniBand support ---> EDAC - error detection and reporting (RAS) (EXPERIMENTAL) ---> Real Time Clock ---> DMA Engine support ---> Auxiliary Display support ---> Virtualization --->
Memory Technology Devices (MTD)
Activamos el soporte para la tecnología Flash ya que la plataforma Atlas 50 cuenta con una memoria NOR de 16MiB de capacidad, motivo por el cual no profundizaremos en los apartados destinados a la implementación hardware NAND. Activamos la opción de particionamiento para poder manejar independientemente cada uno de los fragmentos de la memoria según su propósito (BootLoader, KERNEL, DATA y NVRAM) pero mantenemos desactivadas las opciones anexas ya que es propio BootLoader el que establece la división. Desactivamos la opciones referentes a la concatenación de memorias, porque sólo tenemos una, y a la depuración, que resultó muy útil en tiempo de i+d sin serlo en el producto final. Entre los interfaces exportados hacia el espacio de usuario activamos exclusivamente el orientado a caracteres por cada partición de la Flash siendo necesario para las aplicaciones que montan el sistema de ficheros UBIFS por encima. Quedan desactivadas, por tanto, las opciones relativas al interfaz de bloques, soportado en tiempo de investigación para probar el JFFS2, así como las capas de traducción que muestran como unidades de disco los dispositivos Flash según la tecnología de su implementación.
[*] Memory Technology Device (MTD) support [ ] Debugging [ ] MTD concatenating support [*] MTD partitioning support [ ] RedBoot partition table parsing [ ] Command line partition table parsing --- User Modules And Translation Layers [*] Direct char device access to MTD devices [ ] Common interface to block layer for MTD 'translation layers' [ ] Caching block device access to MTD devices [ ] Readonly block device access to MTD devices [ ] FTL (Flash Translation Layer) support [ ] NFTL (NAND Flash Translation Layer) support [ ] INFTL (Inverse NAND Flash Translation Layer) support [ ] Resident Flash Disk (Flash Translation Layer) support [ ] NAND SSFDC (SmartMedia) read only translation layer RAM/ROM/Flash chip drivers ---> Mapping drivers for chip access ---> Self-contained MTD device drivers ---> NAND Flash Device Drivers ---> OneNAND Flash Device Drivers ---> UBI - Unsorted block images --->
RAM/ROM/Flash chip drivers
En este punto, activamos el soporte para el interfaz universal de detección Flash CFI con la extensión ST Advanced Architecture junto al driver correspondiente al fabricante de la memoria. Quedan desactivados el soporte para otros fabricantes, el soporte para chips que no implementan CFI y la configuración avanzada del controlador.
[*] Detect flash chips by Common Flash Interface (CFI) probe [ ] Detect non-CFI AMD/JEDEC-compatible flash chips [ ] Flash chip driver advanced configuration options [ ] Support for Intel/Sharp flash chips [*] Support for AMD/Fujitsu flash chips [*] Support for ST (Advanced Architecture) flash chips [ ] Support for RAM chips in bus mapping [ ] Support for ROM chips in bus mapping [ ] Support for absent chips in bus mapping [ ] Older (theoretically obsoleted now) drivers for non-CFI chips
Mapping drivers for chip access
Activamos la configuración automática de la Flash en la plataforma mediante el árbol de dispositivos pasado desde el BootLoader en detrimento de la configuración manual implicada en la segunda opción. Quedan desactivadas el resto de opciones por falta de utilidad práctica.
[ ] Support non-linear mappings of flash chips [ ] CFI Flash device in physical memory map [*] Flash device in physical memory map based on OF descirption [ ] Map driver for platform device RAM (mtd-ram)
Self-contained MTD device drivers
En este menú desactivamos todas las opciones a falta de soporte hardware por parte de la plataforma Atlas 50, y por la nula utilidad de los interfaces Flash proyectados hacia dispositivos de bloques o memoria física.
[ ] Ramix PMC551 PCI Mezzanine RAM card support [ ] Uncached system RAM [ ] Physical system RAM [ ] Test driver using RAM [ ] MTD using block device --- Disk-On-Chip Device Drivers [ ] M-Systems Disk-On-Chip 2000 and Millennium (DEPRECATED) [ ] M-Systems Disk-On-Chip Millennium-only alternative driver (DEPRECATED) [ ] M-Systems Disk-On-Chip Millennium Plus
UBI - Unsorted block images
Activamos, por encima de MTD, la capa UBI de gestión de volúmenes lógicos sobre la que asienta el UBIFS elegido como sistema de ficheros raiz. Mantenemos el umbral por omisión de 4096 borrados de diferencia entre los valores máximo y mínimo de cada dispositivo Flash, al ser el valor recomendado para las tecnlogías más longevas como la NOR que tratamos. Este tipo de memorias no admite el marcado de bloques defectuosos por lo que se ignora la proporción reservada para esta labor. Quedan desactivadas la opción de depuración y la emulación MTD sobre los volúmenes lógicos que administra UBI (también denominado GlueUBI) al carecer de sentido en el producto final a pesar de hacerse ambos imprescindibles durante las pruebas de evaluación de los sistemas de ficheros.
[*] Enable UBI (4096) UBI wear-leveling threshold (1) Percentage of reserved eraseblocks for bad eraseblocks handling [ ] Emulate MTD devices --- UBI debugging options [ ] UBI debugging
Network device support
Evidentemente, activamos el soporte para los dispositivos de red agregándole una opción muy curiosa, el protocolo Bonding, que permite multiplicar el ancho de banda en una red Ethernet lógica resultante de combinar entre dos y ocho redes Ethernet físicas por si se quisiera sacar partido de los dos interfaces de este tipo incorporados a la plataforma. Desactivamos el sopore Serial Line Load Balancing EQL al no disponer la plataforma básica de varias líneas serie destinadas a las comunicaciones. Desactivamos la capa intermedia de red orientada a bloques que permite compartir recursos de este tipo para optimizar el rendimiento en la ejecución de la pila de protocolos y desactivamos también los interfaces DUMMY y TUN/TAP por su escasa utilidad fuera de entornos de desarrollo y pruebas. Finalmente, desactivamos el driver FDDI al carecer del hardware apropiado y desactivamos también el anticuado protocolo SLIP (serial line protocol) en favor del PPP (point-to-point protocol) con toda su funcionalidad extra: filtrado, compresión, y soporte para puertos síncronos y asíncronos.
[*] Network device support [ ] Intermediate Functional Block support [ ] Dummy net driver support [*] Bonding driver support [ ] EQL (serial line load balancing) support [ ] Universal TUN/TAP device driver support ARCnet devices ---> PHY device support ---> Ethernet (10 or 100Mbit) ---> Ethernet (1000 Mbit) ---> Ethernet (10000 Mbit) ---> Token Ring devices ---> Wireless LAN (non-hamradio) ---> Wan interfaces ---> [ ] FDDI driver support [*] PPP (point-to-point protocol) support [*] PPP filtering [*] PPP support for async serial ports [*] PPP support for sync tty ports [*] PPP Deflate compression [*] PPP BSD-Compress compression [ ] SLIP (serial line) support
Ahora pasamos a comentar los submenús obviando aquellos asociados a dispositivos no incorporados en el router.
PHY device support
Activamos el soporte para la capa más baja de red PHY que habla directamente con los interfaces físicos, junto a los controladores correspondientes al circuito 88E1011S que transmite las tramas Ethernet por el cable. El resto de las opciones quedan desactivadas por falta de implementación hardware.
[*] PHY Device support and infrastructure --- MII PHY device drivers [*] Drivers for Marvell PHYs [ ] Drivers for Davicom PHYs [ ] Drivers for Quality Semiconductor PHYs [ ] Drivers for the Intel LXT PHYs [ ] Drivers for the Cicada PHYs [ ] Drivers for the Vitesse PHYs [ ] Drivers for SMSC PHYs [ ] Drivers for Broadcom PHYs [ ] Drivers for PHY emulation on fixed speed/link
Ethernet (10 or 100Mbit)
Activamos el soporte, en el rango de velocidades descrito, para la capa de enlace MAC (Medium Access Control) Ethernet que se apoya sobre la capa PHY anterior, junto al controlador correspondiente al módulo FCC (Fast Communications Controllers) de comunicaciones (CPM) encapsulado dentro del MPC8272. El resto de las opciones quedan desactivadas por falta de implementación hardware.
[*] Ethernet (10 or 100Mbit) --- Generic Media Independent Interface device support [ ] Sun Happy Meal 10/100baseT support [ ] Sun GEM support [ ] Sun Cassini support [ ] 3COM cards Tulip family network device support ---> [ ] HP 10/100VG PCLAN (ISA, EISA, PCI) support [ ] EISA, VLB, PCI and on board controllers [*] Freescale Ethernet Driver [ ] Chip has an SCC usable for ethernet [*] Chip has an FCC usable for ethernet
Wan interfaces
Activamos el soporte para redes WAN (World Area Network) al disponer la plataforma de un interfaz BRI-RDSI para tal fin. Activamos la familia de protocolos de enlace HDLC con soporte para todas las configuraciones concretas ofertadas con objeto de maximizar la interoperabilidad al igual que el protocolo de enlace Frame Relay con un máximo por omisión de 8 conexiones lógicas por interfaz físico. Quedan desactivadas las opciones referentes a tarjetas de red WAN ya que ninguna de ellas es utilizada en el Atlas 50.
[*] Wan interfaces support [ ] LanMedia Corp. SSI/V.35, T1/E1, HSSI, T3 boards [*] Generic HDLC layer [*] Raw HDLC support [*] Raw HDLC Ethernet device support [*] Cisco HDLC support [*] Frame Relay support [*] Synchronous Point-to-Point Protocol (PPP) support --- X.25/LAPB support is disabled [ ] Goramo PCI200SYN support [ ] SBE Inc. wanXL support [ ] Cyclades-PC300 support (RS-232/V.35, X.21, T1/E1 boards) [ ] Cyclades PC300 RSV/X21 alternative support [ ] FarSync T-Series support [*] Frame Relay DLCI support (8) Max DLCI per device
Character devices
Desactivamos el soporte de terminales virtuales porque el router carece de interfaces para monitor y teclado forzando así la administración local del mismo a través del interfaz CONSOLE materializado sobre el puerto serie universal implantado para tal efecto. Activamos el soporte para el pseudo-terminal estándar que divide su funcionalidad en dos dispositivos maestro y esclavo, requisito indispensable para aplicaciones de shell remota como Telnet/DropBear. Activamos el interfaz en espacio de usuario para el reloj hardware (DS1338) con su extensión que permite mayor precisión en las medidas, junto al interfaz para acceder a su memoria NVRAM interna (56 bytes). Quedan desactivados los soportes para la generación de números aleatorios y para el resto de los dispositivos por falta de implementación hardware, innecesario en una estación de routing, como por ejemplo el referente a gráficos.
[ ] Virtual terminal [ ] Non-standard serial port support Serial drivers ---> [*] Unix98 PTY support [ ] Legacy (BSD) PTY support IPMI ---> Watchdog Cards ---> [ ] Hardware Random Number Generator Core support [*] /dev/nvram support [*] Generic /dev/rtc emulation [*] Extended RTC operation [ ] Double Talk PC internal speech card support [ ] Siemens R3964 line discipline [ ] Applicom intelligent fieldbus card support [ ] /dev/agpgart (AGP Support) [ ] Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) [ ] RAW driver (/dev/raw/rawN) (OBSOLETE) TPM devices --->
Serial drivers
En este apartado de controladores serie seleccionamos el que corresponde al CPM (Communication Processor Module) incrustado dentro del microprocesador PowerQuicc II de la plataforma junto al puerto sobre el cual se encauzan las comunicaciones. Aquí resulta imprescindible activar el soporte que enlaza dicho puerto serie al interfaz textual de entrada/salida CONSOLE para poder administrar la máquina de forma local.
[ ] 8250/16550 and compatible serial support --- Non-8250 serial port support [ ] Xilinx uartlite serial port support [*] CPM SCC/SMC serial port support [*] Support for console on CPM SCC/SMC serial port [ ] Support for SCC1 serial port [ ] Support for SCC2 serial port [ ] Support for SCC3 serial port [ ] Support for SCC4 serial port [*] Support for SMC1 serial port [ ] Support for SMC2 serial port [ ] Digi International NEO PCI Support
Watchdog Cards
Activamos el temporizador de auxilio en su modalidad software, al no existir soporte hardware en la plataforma, con el fin de proporcionar una vía de monitorización y escape ante bloqueos del sistema. Queda desactivada la opción que evita anular la cuenta atrás para poder gestionarla de forma remota.
[*] Watchdog Timer Support [ ] Disable watchdog shutdown on close --- Watchdog Device Drivers [*] Software watchdog --- PCI-based Watchdog Cards [ ] Berkshire Products PCI-PC Watchdog [ ] PCI-WDT500/501 Watchdog timer
I2C support
En este caso no hay soporte directo del Kernel para el controlador I2C empotrado en la arquitectura PowerQuicc II pero dejamos el interfaz activado para una posible implementación externa. Quedan, por tanto, desactivadas todas las opciones relativas al controlador I2C hardware que sincroniza la comunicación en el bus, así como todos los mensajes de depuración.
[*] I2C support [*] I2C device interface I2C Algorithms ---> I2C Hardware Bus support ---> Miscellaneous I2C Chip support ---> [ ] I2C Core debugging messages [ ] I2C Algorithm debugging messages [ ] I2C Bus debugging messages [ ] I2C Chip debugging messages
File systems
En primer lugar, descartamos todos los sistemas de ficheros propuestos en este menú, orientados a dispositivos tradicionales de bloques, en favor del novedoso UBIFS orientado directamente a tecnologías Flash. Descartamos igualmente los submenús referentes a sistemas de ficheros en red, obsoletos, o para soportes ópticos. Quedan desactivados el automontaje, el soporte en espacio de usuario, las notificaciones y las restricciones de uso por carecer de utilidad en el marco de trabajo habitual de la máquina.
[ ] Second extended fs support [ ] Ext3 journalling file system support [ ] Reiserfs support [ ] JFS filesystem support [ ] XFS filesystem support [ ] OCFS2 file system support [ ] Minix fs support [ ] ROM file system support [ ] Inotify file change notification support [ ] Quota support [ ] Dnotify support [ ] Kernel automounter support [ ] Kernel automounter version 4 support (also supports v3) [ ] Filesystem in Userspace support CD-ROM/DVD Filesystems ---> DOS/FAT/NT Filesystems ---> Pseudo filesystems ---> Miscellaneous filesystems ---> Network File Systems ---> Partition Types ---> Native Language Support --->
Pseudo filesystems
Activamos el soporte para SYSFS y PROC, dos interfaces materializados sobre el sistema de ficheros cuyo objetivo es proporcionar, bajo demanda, información acerca de todo el sistema operativo. Activamos el subinterfaz /PROC/SYS mediante el cual pueden configurarse algunas variables de núcleo en tiempo de ejecución, y desactivamos el subinterfaz /PROC/KCORE de acceso directo a memoria por motivos claros de seguridad. Activamos el soporte para un pseudo-sistema de ficheros temporal sobre memoria volátil dejando desactivada su extensión de control de acceso ante la existencia de un único usuario administrador en el sistema.
[*] /proc file system support [ ] /proc/kcore support [*] Sysctl support (/proc/sys) [*] sysfs file system support [*] Virtual memory file system support (former shm fs) [ ] Tmpfs POSIX Access Control Lists
Miscellaneous filesystems
En este menú es donde seleccionamos el tipo de sistema de ficheros raiz para la estación Linux, se trata del novedoso UBIFS desarrollado por Nokia cuya justificación merece un apartado completo. Activamos este sistema de ficheros excluyendo los innecesarios atributos extendidos e incluyendo las imprescindibles opciones avanzadas de compresión junto a un nivel nulo pero activado de mensajes de depuración para evitar fallos en la compilación. Quedan desactivados el JFFS2 ante las pruebas de rendimiento realizadas y el resto de sistemas de ficheros al desaprovechar las características de la tecnlogía Flash.
[ ] Apple Extended HFS file system support [ ] Journalling Flash File System v2 (JFFS2) support [*] UBIFS file system support [ ] Extended attributes support [*] Advanced compression options [*] LZO compression support [*] ZLIB compression support [*] Enable debugging (0) Default message level (0 = no extra messages, 3 = lots) [ ] Enable extra checks [ ] Compressed ROM file system support (cramfs) [ ] FreeVxFS file system support (VERITAS VxFS(TM) compatible) [ ] OS/2 HPFS file system support [ ] QNX4 file system support (read only) [ ] System V/Xenix/V7/Coherent file system support [ ] UFS file system support (read only)
Native Language Support
Activamos el soporte a nivel de núcleo para todos los juegos de caracteres disponibles por motivos de usabilidad fijando el nativo por omisión al estándar ISO8859-15 correspondiente a lenguas de Europa occidental con el símbolo del euro: español, catalán, eusquera, gallego, inglés, portugués, francés, alemán, italiano, etc.
[*] Base native language support (iso8859-15) Default NLS Option [*] Codepage 437 (United States, Canada) [*] Codepage 737 (Greek) [*] Codepage 775 (Baltic Rim) [*] Codepage 850 (Europe) [*] Codepage 852 (Central/Eastern Europe) [*] Codepage 855 (Cyrillic) [*] Codepage 857 (Turkish) [*] Codepage 860 (Portuguese) [*] Codepage 861 (Icelandic) [*] Codepage 862 (Hebrew) [*] Codepage 863 (Canadian French) [*] Codepage 864 (Arabic) [*] Codepage 865 (Norwegian, Danish) [*] Codepage 866 (Cyrillic/Russian) [*] Codepage 869 (Greek) [*] Simplified Chinese charset (CP936, GB2312) [*] Traditional Chinese charset (Big5) [*] Japanese charsets (Shift-JIS, EUC-JP) [*] Korean charset (CP949, EUC-KR) [*] Thai charset (CP874, TIS-620) [*] Hebrew charsets (ISO-8859-8, CP1255) [*] Windows CP1250 (Slavic/Central European Languages) [*] Windows CP1251 (Bulgarian, Belarusian) [*] ASCII (United States) [*] NLS ISO 8859-1 (Latin 1; Western European Languages) [*] NLS ISO 8859-2 (Latin 2; Slavic/Central European Languages) [*] NLS ISO 8859-3 (Latin 3; Esperanto, Galician, Maltese, Turkish) [*] NLS ISO 8859-4 (Latin 4; old Baltic charset) [*] NLS ISO 8859-5 (Cyrillic) [*] NLS ISO 8859-6 (Arabic) [*] NLS ISO 8859-7 (Modern Greek) [*] NLS ISO 8859-9 (Latin 5; Turkish) [*] NLS ISO 8859-13 (Latin 7; Baltic) [*] NLS ISO 8859-14 (Latin 8; Celtic) [*] NLS ISO 8859-15 (Latin 9; Western European Languages with Euro) [*] NLS KOI8-R (Russian) [*] NLS KOI8-U/RU (Ukrainian, Belarusian) [*] NLS UTF-8
Library routines
Quedan invalidadas todas las opciones correspondientes a este menú formado por bibliotecas modulares para el cálculo de CRCs (comprobaciones de redundancia cíclica) porque estamos configurando un kernel monolítico lo que fuerza la inexistencia de módulos.
--- CRC-CCITT functions --- CRC16 functions --- CRC32 functions --- CRC32c (Castagnoli, et al) Cyclic Redundancy-Check
Kernel hacking
Activamos las marcas de tiempo en los mensajes de depuración procedentes del kernel para ayudar a detectar y solventar problemas a este nivel. Activamos también las comprobaciones adicionales durante la construcción del núcleo para validar la consistencia y coherencia de la configuración que proponemos excepto el chequeo de las cabeceras del mismo porque utilizamos las originales del backport sin alteración alguna. Desactivamos el soporte para una consola de texto inicial ya que desconocemos el software que se esconde tras el BootLoader y desactivamos también la exportación de símbolos anticuados con objeto de ahorrar espacio de núcleo al estar limitados en este aspecto. Finalmente, quedan desactivadas el resto de opciones de depuración por su escasa utilidad fuera de un entorno de investigación y desarrollo.
[*] Show timing information on printks [*] Enable __must_check logic [ ] Magic SysRq key [ ] Enable unused/obsolete exported symbols --- Debug Filesystem [ ] Run 'make headers_check' when building vmlinux [ ] Kernel debugging [ ] Enable serial console thru kgdb port [ ] Support for early boot text console (BootX or OpenFirmware only) [ ] Early debugging (dangerous)
Security options
Mantenemos desactivadas ambas opciones puesto que el modelo de seguridad tradicional de Linux satisface al completo los requisitos de un sistema con un único usuario ROOT.
[ ] Enable access key retention support [ ] Enable different security models
Cryptographic options
En este último menú activamos todos los algoritmos aritméticos ofertados con el objetivo de maximizar la seguridad y la interoperabilidad siendo requeridos muchos de ellos por protocolos diversos. Quedan invalidados aquellos algoritmos exclusivamente modulares puesto que estamos configurando un núcleo monolítico habiendo desactivado anteriormente el soporte para módulos.
--- Cryptographic API --- Cryptographic algorithm manager --- HMAC support [*] Null algorithms [*] MD4 digest algorithm --- MD5 digest algorithm --- SHA1 digest algorithm [*] SHA256 digest algorithm [*] SHA384 and SHA512 digest algorithms [*] Whirlpool digest algorithms [*] Tiger digest algorithms [*] ECB support --- CBC support [*] PCBC support --- DES and Triple DES EDE cipher algorithms [*] FCrypt cipher algorithm [*] Blowfish cipher algorithm [*] Twofish cipher algorithm [*] Serpent cipher algorithm [*] AES cipher algorithms [*] CAST5 (CAST-128) cipher algorithm [*] CAST6 (CAST-256) cipher algorithm [*] TEA, XTEA and XETA cipher algorithms [*] ARC4 cipher algorithm [*] Khazad cipher algorithm [*] Anubis cipher algorithm --- Deflate compression algorithm [*] Michael MIC keyed digest algorithm [*] CRC32c CRC algorithm [*] Camellia cipher algorithms --- LZO compression algorithm Hardware crypto devices --->
El submenú enfocado a los dispositivos hardware de cifrado y descifrado no muestra ninguna opción.
Configuración ocf-linux (2.6.21)
La gran carencia del actual kernel usado es la incompatibilidad con el hardware de cifrado que trae el microprocesador MPC8272 del router. Este hardware utiliza la arquitectura de SEC1 que permite usar los algoritmos DES, 3DES y AES para cifrar/descifrar y MD5 y SHA1 para autenticación. Freescale proporciona un controlador para la arquitectura SEC1 bastante antiguo y preparado para las versiones de kernel 2.4.x. En una primera etapa se intentó adaptar este controlador a la versión 2.6.21, pero presentaba sobretodo incompatibilidades de semántica de símbolos, y se descartó esta opción.
Una segunda aproximación a establecer esta compatibilidad fue ocf-linux. Ocf-linux es un porting del sistema criptográfico OpenBSD/FreeBSD (OCF). Este porting intenta conseguir soporte para el hardware asíncrono de cifrado en el kernel de Linux. El estado actual del desarrollo ofrece compatibilidad con las versiones del kernel 2.4 y 2.6, incluyendo las versiones 2.4.35 y 2.6.26. En concreto, para la versión 2.6.21 no existe parche, pero podemos usar el de la versión 2.6.22 con un cambio. En la versión 2.6.22 el tipo struct platform se denomina struct of_platform. Como el parche es para la versión 2.6.22, tenemos que cambiar la denominación del símbolo struct of_platform a struct platform. Para realizar todos estos cambios, hemos creado el siguiente parche que contempla esta diferencia y además contiene todos los cambios para incluir el soporte de ocf-linux. Este parche no incluye la funcionalidad de generar más entropía para los números aleatorios, ya que da problemas de compilación. Puede descargase aquí.
Las opciones de configuración que cambian son las siguientes:
Activamos la opción de carga y descarga de módulos. Esto cambia la visión de un kernel monolítico a una visión monolítica casi total, a excepción de los módulos encargados de soportar la arquitectura SEC1.
Loadable module support ---> [*] Enable loadable module support [*] Module unloading [ ] Module versioning support [ ] Source checksum for all modules [*] Automatic kernel module loading
Activamos el soporte de ocf-linux. Esto nos permitirá usar el hardware de cifrado, pero con la salvedad de que el módulo que gobierna el criptoprocesador (talitos) funciona en modo síncrono en vez de asíncrono. De esto es lo que nos han informado los desarrolladores en la discusión siguiente: http://sourceforge.net/mailarchive/forum.php?thread_name=20100530044046.GA4484%40mcafee.com&forum_name=ocf-linux-users
Cryptographic options ---> OCF Configuration ---> <M> OCF (Open Cryptograhic Framework) [ ] crypto random --- harvest entropy for /dev/random <M> cryptodev (user space support) <M> cryptosoft (software crypto engine) <M> talitos (HW crypto engine)
En concreto los módulos ocf y cryptodev son los encargados de de proporcionar el API a las aplicaciones que utilizan el hardware de cifrado. El módulo cryptosoft emula un hardware de cifrado por software. Por último, el módulo talitos proporciona soporte para el hardware de cifrado SEC1.
Para cargar estos módulos se debe usar el siguiente orden:
>insmod ocf >insmod cryptodev >insmod talitos
Para descargar estos se debe usar el orden contrario al que fueron cargados, es decir:
>rmmod talitos >rmmod cryptodev >rmmod ocf
Por último, para compilar los módulos se debe usar el siguiente mandato:
>make CROSS_COMPILE=powerpc-linux- ARCH=powerpc modules
Para poder usarlos en el sistema, deben ser transferidos al router mediante scp o consola, y copiados en la carpeta local del router lib/modules/<versión del kernel>. Para averiguar la carpeta correspondiente al kernel basta con hacer un insmod de cualquier módulo. Se imprimirá un mensaje diciendo que no se ha encontrado el módulo en la carpeta <versión del kernel>. Los archivos correspondientes a los módulos tienen extensión .ko.
Compilación e Inserción
Antes de compilar el Kernel debe instalarse el siguiente paquete que no resulta ser más que un wrapper para la herramienta (mkimage) que condensa el núcleo en un único archivo ejecutable:
> sudo apt-get install jigit
El siguiente mandato indica la compilación del núcleo y la construcción de la imagen binaria:
> make CROSS_COMPILE=powerpc-linux- ARCH=powerpc
Después de unos minutos, encontramos la imagen compilada y comprimida del núcleo en el fichero cit.k que no debe sobrepasar los 2 MiB de tamaño al ser la capacidad reservada en Flash para el Kernel:
> ls -la cit.k -rwxr-xr-x 1 cmoreno alum 1925385 2009-04-03 15:50 cit.k
Procedemos a su inserción en la partición Flash correspondiente mediante la operación de carga serie habilitada en el BootLoader:
************************************************** ************************************************** ************************************************** BOOT CODE VERSION: 02.01-B Apr 28 2008 13:17:09 gzip Apr 23 2008 17:04:30 P.C.B.: 93 MASK:0C10 Microcode:00E1 START FROM FLASH BIOS CODE DUMP...................... BIOS DATA DUMP.... End of BIOS dump BIOS CODE VERSION: 02.01-B CLK=262144 KHz BUSCLK=65536 KHz PCICLK=32768 KHz L1 Date: 04/03/09, Friday Time: 16:54:12 SDRAM size: 64 Megabytes BANK 0: 64 Megabytes (detected) I_Cache: ON D_Cache: ON Write-Back FLASH: 16 Mb. NVRAM: 128 Kb. EEPROM: 2048 Bytes. DPRAM: 8192 Bytes. FAST ETHERNET 1 FAST ETHERNET 2 ISAC RDSI_B RDSI_B SECURITY ENGINE PCI device: Host bridge (Bus: 0, Device: 0, Function: 0) (Subs. Vendor: 0x0000, Subs. Device: 0x0000) Current production date: 08 16 Current software license: 9 1 Current serial number: 524/02056 BIOS MAC Add: 00-a0-26-90-08-08 >> . === INITIAL MENU === a) Change Time b) Change Date c) Change Code to Run d) Change Licence e) Load from console (pc_load) f) Disk menu g) Set default name for file loaded from console h) Change BIOS licence l) Load from lan v) Change version control for loading x) Load from console (xmodem) z) Change command line (Linux) r) Reset lram) Load from lan and run without saving lk) Load kernel from lan lf) Load file system from lan 0) Exit >>x Current file name: atlas2g.BIN Press Ctrl+t to change file name ..... New file name (name.ext): atlas2g.bin Xmodem whith chk transfer. Default baud rate: 115200 Press any key to change the baud rate .......... Set baud rate to 115200 and send the file with Xmodem with chk protocol. When the transfer finish, reset baud rate to 9600.
Finalmente, verificamos que el Kernel arranca los controladores y servicios especificados en el apartado anterior de Configuración y carga el sistema UBIFS de ficheros raiz:
Loading Linux. Max compressed size: 2097152 Max uncompressed size: 8388608 .............................................................. Uncompressed Kernel size: 4096256 bytes. flat_tree at: 0x03F7BE9C flat_tree size: 0x00002164 Running Linux Command line: console=ttyCPM0,9600n8n ubi.mtd=2 root=ubi0:rootfs rootfstype=ubifs rw [ 0.000000] Using MPC82xx ADS machine description [ 0.000000] Only using first contiguous memory region<5>Linux version 2.6.21-rc2TelDatsi-g3b2d4c05-dirty (cmoreno@geranio) (gcc version 4.2.1) #1 PREEMPT Fri Apr 3 15:51:17 CEST 2009 [ 0.000000] Zone PFN ranges: [ 0.000000] DMA 0 -> 16384 [ 0.000000] Normal 16384 -> 16384 [ 0.000000] early_node_map[1] active PFN ranges [ 0.000000] 0: 0 -> 16384 [ 0.000000] Built 1 zonelists. Total pages: 16256 [ 0.000000] Kernel command line: console=ttyCPM0,9600n8n ubi.mtd=2 root=ubi0:rootfs rootfstype=ubifs rw [ 0.000000] No pci node on device tree [ 0.000000] PID hash table entries: 256 (order: 8, 1024 bytes) [ 21.019022] cpm_uart: console: compat mode [ 21.840129] Dentry cache hash table entries: 8192 (order: 3, 32768 bytes) [ 21.921457] Inode-cache hash table entries: 4096 (order: 2, 16384 bytes) [ 22.015844] Memory: 60772k/65536k available (3368k kernel code, 4696k reserved, 584k data, 105k bss, 148k init) [ 22.189362] Mount-cache hash table entries: 512 [ 22.244244] NET: Registered protocol family 16 [ 22.296064] PCI: Probing PCI hardware [ 22.340202] Generic PHY: Registered new driver [ 22.392882] NET: Registered protocol family 2 [ 22.472639] IP route cache hash table entries: 1024 (order: 0, 4096 bytes) [ 22.552387] TCP established hash table entries: 2048 (order: 2, 16384 bytes) [ 22.636887] TCP bind hash table entries: 2048 (order: 1, 8192 bytes) [ 22.713324] TCP: Hash tables configured (established 2048 bind 2048) [ 22.789677] TCP reno registered [ 22.836669] audit: initializing netlink socket (disabled) [ 22.897756] audit(1.876:1): initialized [ 22.943773] audit: cannot initialize inotify handle [ 23.004570] io scheduler noop registered [ 23.049549] io scheduler anticipatory registered [ 23.105092] io scheduler deadline registered [ 23.156597] io scheduler cfq registered (default) [ 23.213481] Generic RTC Driver v1.07 [ 23.256271] Macintosh non-volatile memory driver v1.1 [ 23.317138] Software Watchdog Timer: 0.07 initialized. soft_noboot=0 soft_margin=60 sec (nowayout= 0) [ 23.428094] Serial: CPM driver $Revision: 0.02 $ [ 23.483775] ttyCPM0 at MMIO 0xff011a80 (irq = 16) is a CPM UART [ 23.555110] Ethernet Channel Bonding Driver: v3.1.2 (January 20, 2007) [ 23.633504] bonding: Warning: either miimon or arp_interval and arp_ip_target module parameters must be specified, otherwise bonding will not detect link failures! see bonding.txt for details. [ 23.841099] Marvell 88E1101: Registered new driver [ 23.897687] Marvell 88E1111: Registered new driver [ 23.955341] Marvell 88E1145: Registered new driver [ 24.013439] PPP generic driver version 2.4.2 [ 24.064492] PPP Deflate Compression module registered [ 24.125069] PPP BSD Compression module registered [ 24.181652] HDLC support module revision 1.20 [ 24.234063] Cronyx Ltd, Synchronous PPP and CISCO HDLC (c) 1994 [ 24.234085] Linux port (c) 1998 Building Number Three Ltd & Jan "Yenya" Kasprzak. [ 24.395783] DLCI driver v0.35, 4 Jan 1997, mike.mclagan@linux.org. [ 24.469914] fs_enet.c:v1.0 (Aug 8, 2005) [ 24.518113] BB MII Bus: probed [ 24.554849] BB MII Bus: probed [ 24.594544] flash: Found 1 x16 devices at 0x0 in 8-bit bank [ 24.658650] Amd/Fujitsu Extended Query Table at 0x0040 [ 24.721479] flash: CFI does not contain boot bank location. Assuming top. [ 24.803246] number of CFI chips: 1 [ 24.844135] cfi_cmdset_0002: Disabling erase-suspend-program due to code brokenness. [ 24.937432] cmdlinepart partition parsing not available [ 25.000267] RedBoot partition parsing not available [ 25.058990] physmap-flash flash: Using OF partition information [ 25.130253] Creating 4 MTD partitions on "flash": [ 25.186860] 0x00000000-0x00080000 : "BIOS" [ 25.236270] 0x00080000-0x00280000 : "KERNEL" [ 25.287643] 0x00280000-0x00fe0000 : "DATA" [ 25.336892] 0x00fe0000-0x01000000 : "NVRAM" [ 25.387567] UBI: attaching mtd2 to ubi0 [ 25.433194] UBI: physical eraseblock size: 131072 bytes (128 KiB) [ 25.508660] UBI: logical eraseblock size: 130944 bytes [ 25.573620] UBI: smallest flash I/O unit: 1 [ 25.627073] UBI: VID header offset: 64 (aligned 64) [ 25.695209] UBI: data offset: 128 [ 25.774862] UBI: attached mtd2 to ubi0 [ 25.816819] UBI: MTD device name: "DATA" [ 25.875497] UBI: MTD device size: 13 MiB [ 25.934187] UBI: number of good PEBs: 107 [ 25.989742] UBI: number of bad PEBs: 0 [ 26.043196] UBI: max. allowed volumes: 128 [ 26.098750] UBI: wear-leveling threshold: 4096 [ 26.155349] UBI: number of internal volumes: 1 [ 26.208808] UBI: number of user volumes: 1 [ 26.262260] UBI: available PEBs: 0 [ 26.315725] UBI: total number of reserved PEBs: 107 [ 26.374651] UBI: number of PEBs reserved for bad PEB handling: 0 [ 26.446789] UBI: max/mean erase counter: 6/4 [ 26.498120] UBI: background thread "ubi_bgt0d" started, PID 11 [ 26.568378] i2c /dev entries driver [ 26.610717] NET: Registered protocol family 26 [ 26.663792] GACT probability on [ 26.701440] Mirror/redirect action on [ 26.745466] Simple TC action Loaded [ 26.787993] u32 classifier [ 26.819912] Performance counters on [ 26.865998] Actions configured [ 26.907960] Netfilter messages via NETLINK v0.30. [ 26.964707] nf_conntrack version 0.5.0 (512 buckets, 4096 max) [ 27.035313] IPv4 over IPv4 tunneling driver [ 27.085752] GRE over IPv4 tunneling driver [ 27.135494] ip_tables: (C) 2000-2006 Netfilter Core Team [ 27.198819] arp_tables: (C) 2002 David S. Miller [ 27.254076] TCP bic registered [ 27.290542] TCP cubic registered [ 27.329295] TCP westwood registered [ 27.371239] TCP htcp registered [ 27.408957] Initializing XFRM netlink socket [ 27.460448] NET: Registered protocol family 1 [ 27.513046] NET: Registered protocol family 10 [ 27.566884] lo: Disabled Privacy Extensions [ 27.617400] tunl0: Disabled Privacy Extensions [ 27.670507] IPv6 over IPv4 tunneling driver [ 27.720963] sit0: Disabled Privacy Extensions [ 27.773592] NET: Registered protocol family 15 [ 27.826352] Bridge firewalling registered [ 27.874406] Ebtables v2.0 registered [ 27.917538] NET: Registered protocol family 4 [ 27.979039] NET: Registered protocol family 5 [ 28.045688] NET4: DECnet for Linux: V.2.5.68s (C) 1995-2003 Linux DECnet Project Team [ 28.136834] DECnet: Routing cache hash table of 512 buckets, 4Kbytes [ 28.213055] NET: Registered protocol family 12 [ 28.266463] 802.1Q VLAN Support v1.8 Ben Greear <greearb@candelatech.com> [ 28.348176] All bugs added by David S. Miller <davem@redhat.com> [ 28.520256] UBIFS: recovery needed [ 28.676249] UBIFS: recovery completed [ 28.717235] UBIFS: mounted UBI device 0, volume 0, name "rootfs" [ 28.789477] UBIFS: file system size: 12177792 bytes (11892 KiB, 11 MiB, 93 LEBs) [ 28.880646] UBIFS: journal size: 2095104 bytes (2046 KiB, 1 MiB, 16 LEBs) [ 28.968695] UBIFS: media format: 4 (latest is 4) [ 29.030509] UBIFS: default compressor: lzo [ 29.079765] UBIFS: reserved for root: 0 bytes (0 KiB) [ 29.142987] VFS: Mounted root (ubifs filesystem). [ 29.198566] Freeing unused kernel memory: 148k in�
Welcome to the Erik's uClibc development environment. uclibc login: