| 424 | |
| 425 | ==== (8/15) ==== |
| 426 | An initial, very primitive implementation: |
| 427 | |
| 428 | '''The packet process chain:''' |
| 429 | * two separate packet write paths - one for messages that never hit the modules, and the other, the one that gets processed. The former includes handshake messages and importantly, keepalives. Passing the keepalives (ECHO_REQUEST/REPLY messages) through the full process chain causes switches to disconnect periodically, probably due to them being dropped. |
| 430 | |
| 431 | * the separate write paths are achieved by "splitting" the FVClassifier (OFSwitchImpl) write() into two parts, one that implements the original write(), and another, which intercepts outgoing messages and either sends them back to a slice (to be handled by sliceFromController(), if it had come from a slice), or passes them to the first write to be sent out immediately. |
| 432 | |
| 433 | * a FVClassifier-local "writer" slice variable keeps track of which slice had sent a message to the particular classifier. The sending FVSlicer sets the 'writer' to itself before dispatching its modules. |
| 434 | |
| 435 | '''Controlling access of slices to modules:''' |
| 436 | * Each module has access to one specific module, as per its configurations. This is the module that it is always allowed to run. If the module depends on, or upon, another module, that module must also belong to the same slice, to honor the dependency tree, lest things break. |
| 437 | |
| 438 | * Each slice has a deny list associated with it. The deny list of a slice contains all of the other modules associated to other slices in the configs. |
| 439 | |
| 440 | * when handleMessage() is run, a dependency-ordered list of modules interested in that particular incoming message type is fetched by !FlowVisor (Controller). The modules in the deny list are skipped when time comes to dispatch the modules in order. |
| 441 | |
| 442 | '''Issues''' - There are many. The biggest above is probably the way the writer is chosen, which can totally be destroyed by one slice setting it, then another coming along and setting it to something else mid-processing. The way the deny list is built and used also seems kludgy. |
| 443 | |