Internals: ---------- There are going to be several Markovian chains, each one with its own rules that decide which packets to pass to it. It is possible that a packet would be processed in more than one chain. In this case: 1. If one of those chains decided to drop it - the packet would be dropped. 2. Else, the packet would be delayed for a sum of the delays of the chains. Each chain will store the time of the last packet that was sent. There is a probability constant in each of its states that determines if the delay is relative to the time of the last packet, or an absolute delay. Each one of a chain's states contains the probabilities of the releasing, dropping or delaying a packet, as well as the delay function (refer to "Delay Functions"). It also contains the probabilities of passing to the other states. There will always be one special chain called the default chain, which determines what to do with packets that did not fit into any other chain, assuming that they indeed did not. If such a chain was not defined by the user, it will be initialized to always pass a packet. Chain Filters: -------------- A chain filter may refer to the following specifications: Source IP Address: a list of subnets, each specified in a similar way to that of the Linux fire-walling rules. Each IP or subnet is accompanied with a specification of the input port (if appropriate to the protocol). Examples: { 129.28.5.0/24:80,8080-8090 ; 132.68.0.0/16:20-21 } ; - separates IP/Masks/Ports constructs , - separate ports / - separate the number of 1's in the net-mask from the IP address. Destination IP Address: Same syntax as the source IP Address. Protocol : can be a list of any of TCP, udp, icmp or any other of the /etc/protocols protocols, or an inversion of such list. Type of Service: Is split into several specifications: Precedence: can be any of the 3-bit octets. Delay \ Throughput |- Each a one-bit flag. Relay-ability / Each one of those fields may be safely specified to be ignored. Packet Length: Can be "l>5000", "l<3000", "200