Guía de Módulos

Nota: el nombre de cada módulo lleva a su descripción en 2MIL.

 

TIPOS

Este módulo ha sido creado con el fin de centralizar la declaración de tipos en 2MIL. Contiene tipos que son sinónimos de algunos ya existentes y otros que son declarados a partir de constructores (record, list of, gtype).A continuación se describe la utilidad de algunos de los tipos definidos en este módulo:

Id_fuente: identifica una fuente a auditar en particular.
Nro_instancia: número asociado a una fuente para determinar una instancia de la misma.
Nro_pl: índice en una lista de puntos límites,
Pto_lim
: valor asociado a un índice en una lista de puntos límites. Valor del punto límite.
User_id: string que identifica a un usuario.
Proc: nombre de un procedimiento.
Proc?: determina si una línea ha sido o no procesada en la tabla de información a audiar del repositorio INFO_A_AUDI.
Param: identifica parámetros de tipo general que serán usados en distintos procedimientos.
Prioridad: determina, en la tabla que contiene la información de configuración del repositorio INFO_CONFI, la prioridad a tener en cuenta al auditar una fuente. Prioridad sobre la historia del sistema o sobre lo configurado.
Id_accion: identifica una acción a tomar ante el exceso de un punto límite.
Cod_intrus: código de intrusión que identifica el tipo de una secuencia de acciones registrada en la tabla contenida en el repositorio INFO_HISTO_TIPADA.
Lista_nro_param: lista de índices de una lista de parámetros.
UGP: usuario-grupo-permiso. Tipo para asociar permisos de acceso a archivos con un usuario y un grupo.
PPs: registro que asocia un permiso de un usuario y/o grupo a un archivo.
ACL: lista de todos los archivos con sus respectivos permisos. (Lista de Control de Acceso).
Pl/accs: registro que asocia un punto límite con una secuencia de acciones a tomar.
Acc/pconf: asocia una acción con las lista de parámetros necesarios para la configuración del reactor que lleva a cabo esa acción.


CONFI_LINEA

Este módulo abstrae una línea de la tabla de la información de configuración de las fuentes. Oculta la representación utilizada para almacenar los campos: identificador de fuente, nro. de instancia, lista de puntos límites con acciones asociadas y prioridad entre historia y configuración. La función del módulo es brindar acceso (lectura y modificación) a los diversos campos, así como también otorgar nuevas líneas. Su rol contribuye al del módulo que lo contiene (INFO_CONFI).


CONFI_TABLA

Este módulo abstrae la tabla de la información de configuración de las fuentes formada por las líneas del módulo anterior. Oculta la implementación propiamente dicha de la tabla: organización de las líneas, representación, etc. Su función es proveer métodos que hagan posible agregar, borrar y recuperar líneas, además de crear una nueva tabla. Su rol también contribuye al del módulo que lo contiene (INFO_CONFI).


INFO_CONFI

Módulo lógico que contiene los dos anteriores y brinda en su interfaz todos lo métodos necesarios para acceso a las líneas y campos de la estructura que abstrae. Precisamente ésta es su función. Tiene como rol formar parte del conjunto de repositorios, los cuales constituyen la parte pasiva del sistema que contiene la información con la que éste opera.


HT_LINEA

Este módulo abstrae una línea de la tabla que contiene las intrusiones tipadas. Oculta la representación utilizada para almacenar los campos: código de intrusión y lista de eventos. La función del módulo es brindar acceso (lectura y modificación) a los diversos campos, así como también otorgar nuevas líneas. Su rol contribuye al del módulo que lo contiene (INFO_HISTO_TIPADA).


HT_TABLA

Este módulo abstrae la tabla que contiene las intrusiones tipadas formada por las líneas del módulo anterior. Oculta la implementación propiamente dicha de la tabla: organización de las líneas, representación, etc. Su función es proveer métodos que hagan posible agregar y borrar líneas de la tabla, además de crear una nueva tabla. También presenta un método que, dada una lista de eventos, detecta entradas que coincidan con la lista dada. Esta función retorna un código de intrusión si se cumple:
• los últimos n (n>1) eventos de la lista que recibe como parámetro coinciden con los n primeros de una y sólo una de aquellas que hay almacenadas, ó
• los últimos n (n>1) eventos de la lista recibida coinciden exactamente con los n eventos de alguna de las almacenadas
Es decir, la función retornará un código de intrusión en presencia de una coincidencia parcial única ó de una coincidencia exacta. En caso de darse varias coincidencias parciales, si no hay una exacta no se obtendra un código.
Esto es para permitir que se tomen acciones sobre "subataques" de ataques que comiezan de igual manera. Se evita que sea necesario esperar a que el ataque en curso se defina de manera única respecto de la lista para tomar acción. Ejemplo:

e1, ...., e15, f16, ..., f20 A1
e1, ...., e15, g16, ..., g22 A2
e1, ...., e15 A3

Es importante destacar que al realizar la comparación entre los eventos la función ignora la parte del evento que corresponde al número de instancia, permitiendo así que las coincidencias sean independientes de la instancia de la fuente que produjo la excepción. Esto permite que la historia pueda contener intrusiones que no fueron generadas por el sistema, como por ejemplo aquellas provenientes de un paquete obtenido del fabricante.
El rol del este módulo también contribuye al de aquel que lo contiene
(INFO_HISTO_TIPADA).


INFO_HISTO_TIPADA

Módulo lógico que contiene los dos anteriores y brinda en su interfaz todos lo métodos necesarios para acceso a las líneas y campos de la estructura que abstrae. Precisamente ésta es su función. Tiene como rol formar parte del conjunto de repositorios, los cuales constituyen la parte pasiva del sistema que contiene la información con la que éste opera.


HSP_LINEA

Este módulo abstrae una línea de la tabla que contiene las anotaciones realizadas por el sistema tras la violación de un punto límite. Oculta la representación utilizada para almacenar los campos: fecha, hora, identificador de usuario, identificador de fuente, nro. de instancia, nro. de punto límite y lista de acciones tomadas. La función del módulo es brindar acceso (lectura y modificación) a los diversos campos, así como también otorgar nuevas líneas. Su rol contribuye al del módulo que lo contiene (INFO_HISTO_SIN_PROC).


HSP_TABLA

Este módulo abstrae la tabla que contiene las anotaciones realizadas por el sistema tras la violación de un punto límite. Oculta la implementación propiamente dicha de la tabla: organización de las líneas, representación, etc. Su función es proveer métodos que hagan posible agregar, borrar y recuperar (en forma secuencial) las líneas, además de crear una nueva tabla. Su rol también contribuye al del módulo que lo contiene (INFO_HISTO_SIN_PROC).


INFO_HISTO_SIN_PROC

Módulo lógico que contiene los dos anteriores y brinda en su interfaz todos lo métodos necesarios para acceso a las líneas y campos de la estructura que abstrae. Precisamente ésta es su función. Tiene como rol formar parte del conjunto de repositorios, los cuales constituyen la parte pasiva del sistema que contiene la información con la que éste opera.


AUDI_LINEA

Este módulo abstrae una línea de la tabla que contiene las anotaciones realizadas por los diversos traductores cuando detectan cambios en las fuentes que monitorean. Oculta la representación utilizada para almacenar los campos: línea procesada si/no, fecha, hora, identificador de usuario, identificador de fuente, nro. de instancia, y dos parámetros de uso general. La función del módulo es brindar acceso (lectura y modificación) a los diversos campos, así como también otorgar nuevas líneas. Su rol contribuye al del módulo que lo contiene (INFO_A_AUDI).


AUDI_TABLA

Este módulo abstrae la tabla que contiene las anotaciones realizadas por los diversos traductores cuando detectan cambios en las fuentes que monitorean. Oculta la implementación propiamente dicha de la tabla: organización de las líneas, representación, etc. Su función es proveer métodos que hagan posible agregar, borrar y recuperar las líneas, además de crear una nueva tabla. La interfaz incluye una función para recuperar directamente la primer línea (considerándolas ordenada por fecha y hora en forma creciente) que no haya sido sujeta a una auditoría. Su rol también contribuye al del módulo que lo contiene (INFO_A_AUDI).


INFO_A_AUDI

Módulo lógico que contiene los dos anteriores y brinda en su interfaz todos lo métodos necesarios para acceso a las líneas y campos de la estructura que abstrae. Precisamente ésta es su función. Tiene como rol formar parte del conjunto de repositorios, los cuales constituyen la parte pasiva del sistema que contiene la información con la que éste opera.


ACCIONES_DISPONIBLES

Este módulo mantiene una lista de las acciones entre las que puede elegir el usuario para que el sistema lleve a cabo ante la violación de un punto límite. Oculta la representación de dicha lista. Su función es la de permitir la adición de una nueva acción a la lista o la recuperación de la lista completa. Tiene como rol formar parte del conjunto de repositorios, los cuales constituyen la parte pasiva del sistema que contiene la información con la que éste opera.


FUENTES_DISPONIBLES

Este módulo mantiene una lista de los tipos de fuentes entre los que puede elegir el usuario para que el sistema audite. Además se encarga de llevar un control de las instacias de cada tipo de fuente que están siendo evaluadas en determinado momento. Oculta la representación de dicha lista y el mecanismo de control de las instancias. Su función es la de permitir la adición de una nueva fuente la lista, la recuperación de la lista completa y el pedido y devolución de los números de instancia. Ante un pedido de intancia para determinada fuente, el módulo responde otorgando un número que la identificará de manera única. Tiene como rol formar parte del conjunto de repositorios, los cuales constituyen la parte pasiva del sistema que contiene la información con la que éste opera.


ADM_EVENTOS

Es el módulo que contiene al sistema de manimipulación de eventos. Presenta los métodos de intefaz necesarios para que otros módulos anoten o borren procedimientos o listas de procedimientos en la tabla que oculta y los procedimientos a ser llamados para anunciar un evento. Para esto cuenta con las funciones:
- add_event_procs: espera el nombre del evento y la lista de procedimientos a invocar cuando ocurra ese evento, cada uno con los valores de parámetros fijos y una lista ordenada de los índices de aquellos parámetros que acompañan al evento que deben ser pasados al procedimiento. Agrega la entrada correspondiente a esa asociación en la tabla de eventos.
- remove_event_proc: recibe un nombre de evento, un nombre de procedimiento y una lista de valores de parámetros fijos. Elimina de las entradas de la tabla correspondientes al evento dado la ocurrencia del procedimiento indicado cuando los valores de los parámetros fijos son iguales a los pasados como parámetro, si la lista de parámetros es vacía ignora esta última condición.
- remove_event: recibe como parámetro un nombre de evento. Elimina de la tabla toda entrada correspondiente a ese evento. Es utilizada cuando un procedimiento deja de anunciar un evento dado.
- announce: recibe un evento y una lista de parámetros. Busca en la tabla los procedimientos asociados a tal evento y realiza las llamadas correspondientes con los parámetros fijos indicados y los que vienen con el evento en el orden especificado por la ordenada de índices correspondiente.
- announce_r:
funciona de igual forma que la anterior sólo que, además, causa que el anunciante se bloquee esperando un retorno, luego de llamar al procedimiento correspondiente devuelve el valor retornado por éste.

Ante el anuncio de un evento el administrador de eventos invocará todos los procedimientos que estén asociados a tal evento. Si hay varias entradas para el mismo evento los procedimientos correspondientes serán ejecutados en cualquier orden. Si asociada a un evento se encuentra una lista ordenada de procedimientos, estos serán ejecutados en ese orden y secuencialmente. A continuación, si el evento había sido anunciado con announce_r, el manipulador de eventos retorna el valor de retorno del procedimiento invocado a aquel que anunció el evento. Es por esto que announce_r funcionará con eventos que tengan asociado sólo un procedimiento y no una lista.

Una entrada en la tabla de eventos donde el nombre del evento contenga un asterisco (*) hará que los procedimientos asociados a esa entrada sean invocados siempre que un evento coincidente con la forma del nombre sea anunciado. Por ejemplo una entrada como:

  traductor_para_* AUDITORIA : : new_var_estado

hará que cada vez que PAQUETES levante el evento traductor_para_f (donde f es un identificador de fuente cualquiera) se invoque el procedimiento new_var_estado del módulo AUDITORIA. Esto permite ahorrar gran cantidad de entradas análogas en el administrador de eventos.

Los sectretos ocultados por este módulo son: la representación de las asociaciones entre eventos y procedimientos, el mecanismo por el cual el anuncio de un evento provoca la invocación de los procedimientos asociados y el manejo de los parámetros en una u otra dirección.

El rol en el estilo es particular ya que representa el mecanismo por el cual la invocación implícita puede ser llevada a cabo. En otras palabras, el administrador de eventos tiene como rol el de manipulador de eventos (event handler).


AUDITOR

Este módulo reacciona a los eventos nueva_info levantados por los traductores cada vez que escriben en INFO_A_AUDI. Recupera la primer línea sin procesar de esa tabla y la marca como procesada.Con los datos obtenidos actualiza la variable de estado correspondiente y determina, utilizando la información de INFO_CONFI, si el cambio procesado excede alguno de los puntos límites, en cuyo caso levanta el evento exceso_pl. La función que realiza esto es auditar_nueva_info. El módulo posee otras funciones (new_var_estado y del_var_estado) que le permiten agregar o eliminar variables de estado según se incorporen o eliminen instancias de fuentes. Las funciones reaccionan a los eventos traductor_para_f y desactivar_traductor respectivamente. Los secretos del módulo son: la representación de las variables de estado, la forma en que estas se actualizan y el mecanismo por el cual se determina si se ha excedido un punto límite. Su rol contribuye al del módulo que lo contiene (AUDITORIA).


TRADUCTOR_EVENTOS

Reacciona, mediante la función traducir_evento, al evento exceso_pl levantado por AUDITOR. Genera un evento concantenando los datos recibidos (id_fuente, nro_instancia y nro_pl) y lo agrega a una lista de eventos pasados que mantiene oculta. Determina, a partir de la prioridad registrada para esa instancia de fuente en INFO_CONFI, si debe buscar una coincidencia entre las intrusiones pasadas. Si la prioridad es confi anuncia el evento genrado. Si, en cambio, la prioridad es histo compara la lista de eventos propias con aquellas almacenadas en INFO_HISTO_TIPADA, utilizando la función comparar_eventos del repositor. Si hay coincidencia, o sea, si recibe un código de intrusión como retorno de esa función, anuncia esto como evento (ver que Cod_intrus es un alias del tipo Evento), si no, levanta el evento construído inicialmente. Por último registra el hecho en INFO_HISTO_SIN_PROC. Su secreto es la lista de eventos que mantiene así como la longitud considerada como relevante para la comparación, etc. Su rol contribuye al del módulo que lo contiene (AUDITORIA).


AUDITORIA

Es el módulo lógico que contiene los dos anteriores y reúne en su interfaz los procedimientos de cada uno. Su función engloba los procesos de auditoría realizados por el sistema sobre la información obtenida de las fuentes, tanto en el reconocimiento de comportamiento anómalo como el de patrones de intrusiones tipadas. Tiene como rol formar parte del conjunto de módulos activos, los cuales, de acuerdo al estilo, utilizan invocación implícita para comunicarse entre sí y explicita para acceder a los repositorios.


TRADUCTOR

Este es el módulo base del que heredan los diversos traductores y como tal reúne las características comunes a todos estos. Presenta funciones para instanciar un traductor, configurar la ubicación física de la fuente que éste traducirá, activar el proceso traducción y eliminar una instancia (new_trad, llenar_ubicacion, activar y desactivar respectivamente). Exporta el tipo TRADUCTOR que identifica una instancia. El proceso de traducción es llevado a cabo por una función privada (monitorear_fuente) que detecta cambios en la fuente, traduce la información al formato común manejado por el sistema, agrega esto en INFO_A_AUDI y levanta un evento (nueva_info) para notificar de ello al resto del sistema.


TRADUCTOR-i

Módulos parametrizados que representan los distintos traductores disponibles en el sistema. Se utilizó esta modalidad de representarlos ya que todos tienen idéntica estructura y esta nomenclatura facilita tanto el diseño como la futura implementación. Cada uno hereda de TRADUCTOR los procesos descriptos en ese módulo y, si es necesario, sobrecarga las funciones para adaptarlas a la fuente que debe traducir. Además cada uno agrega la función new_trad_i (donde, al implementar, i será un valor numérico) que, posiblemente utilizando new_trad genera instancias del traductor particular identificado con ese índice. Este procedimiento será asociado luego con el evento formado con el identificador de la fuente que éste traductor manipule. La función privada monitorear_fuente es reemplazada por una específica para cada traductor que implementa el proceso de traducción de la fuente asociada. El resto de las tareas llevadas a cabo por este procedimiento (registrar la información, anunciar el evento, etc.) son los mismos para todos los traductores por lo que podría utilizarse la función heredada en la definición de esta nueva. La función de cada traductor ha sido descripta en este parráfo y en el módulo base. Cada traductor tiene como rol en el estilo formar parte del conjunto de módulos activos, los cuales utilizan invocación implícita para comunicarse entre sí y explicita para acceder a los repositorios.


REACTOR

Este es el módulo base del que heredan los diversos reactores y como tal reúne las características comunes a todos estos. Presenta funciones para instanciar un reactor, indicarle que lleve a cabo su acción y eliminar una instancia (new_reactor, reaccionar y anular respectivamente). Exporta el tipo REACTOR que identifica una instancia.


REACTOR-i

Módulos parametrizados que representan los distintos reactores disponibles en el sistema. Se utilizó esta modalidad de representarlos ya que todos tienen idéntica estructura y esta nomenclatura facilita tanto el diseño como la futura implementación. Cada uno hereda de REACTOR los procesos descriptos en ese módulo y, si es necesario, sobrecarga las funciones para adaptarlas a la acción que debe realizar. Además cada uno agrega la función new_reactor_i (donde, al implementar, i será un valor numérico) que, posiblemente utilizando new_reactor genera instancias del reactor particular identificado con ese índice. Este procedimiento será asociado luego con el evento formado con el identificador de la acción que éste reactor lleve a cabo. Se agrega también una función privada (configurar) que implementa el proceso de configuración de cada reactor en particular y es utilizada por new_reactor_i. La función reaccionar es sobrecargada en cada caso y es la que realizar cada acción específica con los parámetros recibidos. Este procedimiento es el invocado cuando se excede el punto límite al que la instancia del reactor está asociado. La función de cada reactor ha sido descripta en este parráfo y en el módulo base. Cada reactor tiene como rol en el estilo formar parte del conjunto de módulos activos, los cuales utilizan invocación implícita para comunicarse entre sí y explicita para acceder a los repositorios.


GENERAL

Este módulo permite a la interfaz setear los parámetros de configuración del sistena en general: password, lugar de almacenamiento de la información, tiempo de vida de los datos de auditoría, método de encriptación y ACL. Para esto presenta en su interfaz los procedimientos setear_pwd, setear_tiempo_vida, setear_l_almacen, setear_encriptación y setear_ACL. Además cuenta con el método chequear_pwd que es utilizada cuando se intenta acceder el sistema en forma remota. Por último, para llevar a cabo la inicialización del IDS luego de la instalación, el módulo ofrece la función incializar_IDS que prepara el sistema para comenzar a funcionar. Funciona como sigue: crea instancias de todos los repositorios y llena, además los de ACCIONES_DISPONIBLES y FUENTES_DISPONIBLES con aquellas que vienen de fábrica. Inicializa el administrador de eventos y agrega todas las entradas correspondientes a acciones y fuentes disponibles (instanciación y desactivación de los respectivos traductores o reactores). Anota el evento exceso_pl (al cual reacciona traducir_evento de TRADUCTOR_EVENTOS). Anota también traductor_para_* con new_var_estado de AUDITORIA, desactivar_traductor con del_val_estado del mismo módulo, nueva_info con auditar_nueva_info, desactivar_traductor y desactivar_reactor con desactivar y anular respectivamente y activar_traductor con activar. Estas relaciones entre procesos y procedimientos son las únicas determinadas en forma estática en tiempo de compilación (ver Descripción del Estilo Arquitectónico).
El módulo tiene una función privada (controlar_info)que es lanzada por inicializar_IDS y correrá durante todo el tiempo que el sistema esté en funcionamiento realizando controles periódicos sobre la información del sistema utilizando los parámetros establecidos por las demás funciones del módulo.
Los secretos de este módulo son: la representación de los parámetros almacenados y la implementación del procedimiento descriptos. Su rol contribuye al del módulo lógico que lo contiene (
CONFIGURACION).


TIPIFICACION_HISTORIA

La función de este módulo es proveer una forma de tipar las intrusiones pasadas. Para ello presenta como interfaz un procedimiento (tipificar_histo) que recibiendo un código (nombre o tipo) de intrusión, una lista de líneas de INFO_HISTO_SIN_PROC y una lista de acciones a llevar a cabo, genera la lista de los eventos que tomaron lugar durante la intrusión y agrega una entrada a INFO_HISTO_TIPADA. Además registra en el administrador de eventos el código de intrusión junto a los procedimientos de los reactores correspondientes a la lista de acciones indicada (previa solicitud de las instancias de cada uno). El secreto de este módulo es la implementación del procedimiento descripto. Su rol contribuye al del módulo lógico que lo contiene (CONFIGURACION).


PAQUETES

Es utilizado por la interfaz para permitir al usuario agregar instancias de fuentes a ser auditadas por el sistema, junto con las acciones a ser tomadas.También permite eliminar fuentes, puntos límites de una fuente, acciones asociadas o modificar el valor de uno de estos. La interfaz cuenta con las funciones:
- confi_paquete: recibe un identificador de fuente, los datos de ubicación física de la misma (IP, puerto, path), la lista de puntos límites con las correspondientes acciones a tomar y las listas de los parámetros de configuración de cada acción. Obtiene de
FUENTES_DISPONIBLES un número de instancia para la fuente correspondiente y con estos datos agrega una nueva línea en INFO_CONFI. Pide una instancia de uno de los reactores levantando el correspondiente evento con announce_r, el reactor correspondiente retorna una instancia de si mismo. Vuelve a realizar estos pasos para cada acción de cada punto límite. A continuación registra, por cada punto límite, un evento formado por la concatenación del identificador de fuente, el nro. de instancia y el nro. de punto límite correspondiente asociado a la lista de procedimientos reaccionar con el identificador de instancia de reactor como parámetro fijo, para cada acción de ese punto límite. Solicita luego, mediante un evento (al que también reacciona AUDITORIA agregando una variable de estado), una nueva instancia del traductor asociado a la fuente (obteniendo como respuesta un identificador de instancia del traductor). Por último solicita la activación del mismo.
- desactivar_paquete: recibe un identificador de fuente y un nro. de instancia, obtiene de una tabla privada la instancia de traductor correspondiente y, mediante un evento, solicita la desactivación de la instancia (ante este mismo evento
AUDITORIA reacciona eliminando la variable de estado correspondiente). Tomando los nros. de puntos límites de INFO_CONFI, borra todas las entradas del administrador de eventos coincidentes con la concatenación de identificador de fuente, el nro. de instancia y el nro. de punto límite. Utilizando la información de las acciones asociadas a cada punto límite en INFO_CONFI desactiva los reactores. Por último elimina la información de INFO_CONFI y devuelve el nro. de instacia de la fuente a FUENTES_DISPONIBLES.
- eliminar_pl: recibe un identificador de fuente, un nro. de instancia y un nro. de punto límite. Mediante un evento desactiva los reactores y borra de la tabla de eventos la entrada correspondiente. En INFO_CONFI sólo pone el valor del punto límite en cero y la línea de acciones en NULL. Esto se debe a que en borrar el punto límite de la lista produciría un cambio en los índices de los puntos límites sucesivos.
- quitar_accion: recibe un identificador de fuente, un nro. de instancia, un nro. de punto límite y el índice de la acción a eliminar en la lista de acciones asociadas a ese punto límite. Luego de desactivar el reactor correspondiente, elimina de la tabla de eventos el procedimiento reaccionar que tiene como valor de parámetro fijo el valor de instancia de este reactor.
- modi_pl: recibe un identificador de fuente, un nro. de instancia, un nro. de punto límite y un valor de punto límite. Reemplaza en
INFO_CONFI el antiguo valor de ese punto límite por el recibido como parámetro.

Los secretos de este módulo son: la implementación de los procedimientos descriptos y las tablas que relacionan las instancias de fuentes con las de traductores y las de acciones con las de reactores. Su rol contribuye al del módulo lógico que lo contiene (CONFIGURACION).


EXTENSION

Este módulo, cuya función es hacer que la funcionalidad del IDS pueda ser extendida en tiempo de ejecución, tiene en su interfaz dos funciones: agregar_fuente/traductor y agregar_acción/reactor, las cuales permiten incluir nuevas fuentes con sus traductores y nuevas accionos con los módulos encargados de llevarlas a cabo respectivamente.
agregar_fuente/traductor recibe un identificador de fuente y un path indicando el archivo donde se encuentra el código necesario para traducir la nueva fuente al formato común. En primer lugar agrega en
FUENTES_DIPONIBLES la nueva fuente. A continuación genera un nuevo módulo TRADUCTOR-i con sus respectivos procedimientos. A partir de la fuente y el path donde reside el programa que es capaz de traducirla y monitorearla se generan todos los procedimientos del módulo. El programa mencionado es lo que, en términos del módulo, se llama monitorear_fuente_i. Luego la función genera un nuevo evento (traductor_para_f, donde f es el valor del identificador de la nueva fuente) el cual es anotado debidamente en el administrador de eventos asociado al procedimiento new_trad_i.
agregar_acción/reactor toma un identificador de acción y los caminos a dos programas. El primero del archivo con el código de un procedimiento que, dado una instancia del reactor y una lista de parámetros sabe configurar esa instancia de acuerdo a los parámetros recibidos. En términos del módulo esta función se utiliza para generar el procedimiento privado configurar que será utilizado por new_reactor_i al generar una instancia nueva. El segundo camino es el archivo que contiene el procedimiento que hará la nueva acción cuando ésta se solicite. Es utilizado para generar el procedimiento reaccionar. Esta función se comporta de la misma forma que agregar_fuente/traductor en cuanto al administrador de eventos y el agregado del módulo en reactores.
Las dos funciones se encargan de asignar los números i de forma que sea posible identificar de manera única al reactor o traductor.
Los secretos de la función son: la implementación de los procedimientos descriptos y el mecanismo por el cual puede asignar números i únicos. Su rol contribuye al del módulo lógico que lo contiene (
CONFIGURACION).


CONFIGURACION

Es el módulo lógico que contiene los cuatro anteriores y reúne en su interfaz los procedimientos de cada uno. Su función engloba los procesos de configuración y administración del sistema utilizados por la iterfaz. Tiene como rol formar parte del conjunto de módulos activos, los cuales, de acuerdo al estilo, utilizan invocación implícita para comunicarse entre sí y explicita para acceder a los repositorios.

Principal Requerimientos Descripción del Estilo Arquitectónico Descripción Informal de Diseño Cambios Posibles
Subconjuntos e Incrementos Mínimos Guía de Módulos Estructura de Módulos Estructura de Uso Estructura de Procesos
Estructura de Flujo de Control Descripción 2MIL Agregados a 2MIL   Vitácora de Sesiones de Trabajo Grupal