| 205 | ==== (6/25):[Flowvisor Internals, cont'd] ==== #fv-2 |
| 206 | Today's conference call elucidated quite a bit about the workings of the !FlowMap and how it fits in with the rest of the system. |
| 207 | |
| 208 | ''Item 1: the usage of config databases.'' [[BR]] |
| 209 | In Flowvisor, the !FlowMap is coupled to the database, but only loosely - the specific implementations are, indeed, hidden behind FVConfig. Furthermore, the database is only accessed when: |
| 210 | |
| 211 | * an FVClassifier initializes connections to controllers (see FVClassifier.java:751) |
| 212 | * the flowspace changes. |
| 213 | |
| 214 | in short, the database is a convenience item for storing configurations, and for initial purposes of this project, something that can likely be dealt with later. |
| 215 | |
| 216 | ''Item 2: !FlowMap internals.'' [[BR]] |
| 217 | The two implementations of interface !FlowMap process the flowspace very differently. |
| 218 | |
| 219 | The Linear !FlowMap takes a literal copy of the flowspace; to save space, the flowspace is carted up by DPID, and the piece representing the 'correct' DPID e.g. matching that of the incoming message, is processed. |
| 220 | |
| 221 | The Federated !FlowMap manipulates references. If multiple !FlowMaps existed, they would all point to the same flowspace. This !FlowMap relies on a global bitset, indexed by !FlowEntry ID, to keep track of entries that are part of a intersection (1=member, 0=otherwise). Starting with DPID, each field of a OFMatch is taken and compared to those of the flow entries. Each field is stored in its own hashmap, keyed by value. Each field comparison should narrow the number of 1's in the global bitset. At the end, the entry with the highest priority is chosen. |
| 222 | |
| 223 | The goal of the Federated !FlowMap is speed - many of its operations are kept to bitwise ops, and storage, hashmaps. Slower operations that involve loops e.g. IP address matching, are kept until later when the set of entries to work with is smaller. |
| 224 | |