Eventos
cnet emprega um estilo event-driven de programação similar, embora não idêntico , com os protocolos de camada de link de dados apresentados na AS Tanenbaum [ Prentice -Hall , 1988 , 2003 ... ] . Execução procede quando cnet informa protocolos que um evento de interesse ocorreu. Protocolos são esperados para responder a esses eventos .
Os eventos ocorrem quando um nó reboots , a camada de aplicação tem uma mensagem para a entrega, a camada física recebe um quadro em um link, um evento do timer expirar, um botão de depuração ( em Tcl / Tk ) é selecionada, e um nó é ( educadamente ) desligamento. Nenhum evento é entregue se um nó faz uma pausa, cai ou sofre uma falha de hardware . Estes últimos acontecimentos só ocorrem em simulações destinadas a atender as camadas superiores do modelo OSI (por exemplo, a camada de sessão ) .
IMPORTANTE : cnet emprega um estilo orientado a eventos de programação , e não um estilo de interrupção . Em particular, enquanto um manipulador de eventos está em execução não serão interrompidos pela chegada de outro evento. Em apoio a isso, não há instalações para especificar manipuladores não susceptível de interrupção de alta prioridade , nem para proteger estruturas de dados com semáforos ou monitores ( você não vai precisar deles !) .
Funções de manipulação de eventos deve primeiro ser registrado para receber eventos de entrada com uma chamada para CNET_set_handler (). Funções de manipulação de evento será chamado mais tarde pela CNET com três parâmetros. O primeiro é o tipo de evento ( a razão do manipulador está a ser chamado) , um dos valores enumerados CnetEvent . O segundo parâmetro é um temporizador único ( descrito mais tarde) e os terceiros, alguns dados especificados pelo usuário.
Cada nó é inicialmente reiniciado chamando a função reboot_node (). Esta é a única função que você deve fornecer e se presume ter o nome reboot_node () menos que seja substituído ou com a opção-R