Guía de Módulos
Nota: el nombre de cada módulo lleva a su descripción en 2MIL.
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.