====== States Diagram: Compilation ====== When a ''command'' is called, it needs to know some information about the context of the call in the rules file. This is done using a few global variables like: * ''$iface'' * ''$profile'' (used internally by addcode) * ''$state'' * ''$type'' * ''$IP'' * .... any other needed? Initially all are empty. The changes on the state and types are described in the following diagram using the this syntax: * ''*'' means any ''$state'', any ''$type''. * ''foo(*)'' means ''$state = foo'', but any ''$type'' * ''foo=bar'' means ''foo'' is set to ''"bar"'' * ''$n'' means the ''n-er'' argument This diagram is on a very early stage, we have to see how each ''command'' affects the global variables. Please, We need your opinions to polish it: * -> interface -> state=new, type=undefined, IP=, iface=$1, profile=$2 new(undefined) -> ip -> state=normal, type=static, IP=$1 new(*) -> ip -> state=normal, IP=$1 ======States Diagram: Execution====== When we ''addcode'' we need to decide when do we want this code to run. The life of an interface pass by different //states// and the first argument of ''addcode'' determines that. When ''snet'' will perform an action to goes to the coded added to a given //state// (or chain) and then execute everything in (//level, $sublevel, $timestamp//) order. and then pass to the next state an does the same. So..... we have to define this //states// considering what do we want to up/down/reload without affecting other parts of the setup, and without dropping the interface completely. Currently I see four "subsystems", each with an //up// and down //state//. Here you can see the subsystems and the suggested name for the state. * interface (//init, finish//) * routing (//up, down//) * firewall (//fwup, fwdown//) * QoS (//qosup, qosdown//) which leads for each interface to something like: init -> up --> fwup --> fwdown ----> down -> finish `-> qosup -> qosdown --' Suggestions welcomed.