177 | | A !FlowMap provides a uniform interface for the !FlowSpace. It can be thought of as a structure to hold the !FlowSpace, and to map it to proper slices. The two kinds of !FlowMaps supported by Flowvisor as of now (v.0.8.3) are the Linear and Federated !FlowMaps, both implementations of the Java interface, !FlowMap.java. A !FlowSpace, is represented by flow rules, which map actions to !OpenFlow pattern matches. The enum !MatchType defines how each header field of a (Flowvisor-defined) rule pattern and the received rule patterns relate. !FlowEntry.java implements the !FlowSpace. |
178 | | |
179 | | ''Intersections'' take two !FlowEntries and describe how they relate (via a !MatchType), and, if they overlap, a representation of the intersection in the form of a !FlowEntry built by choosing the more heavily constrained pattern for each header field and DPID(s). !FlowIntersect.java implements the representation of the intersection, and !FlowEntry defines matches(), which compares two !FlowEntries to produce the intersection. Comparisons are implemented in !FlowTestOp.java. |
180 | | |
181 | | The "traditional" OFMatch construct doesn't so matching on DPID, so it is extended by FVMatch to do so. |
| 177 | First up, some terms: |
| 178 | * Flow rule : Mappings of Packet header pattern to actions (DROP, FLOOD, FORWARD, etc.) |
| 179 | * !FlowSpace : A collection of flow rules |
| 180 | * !FlowMap : A uniform interface and structure for manipulating and holding a !FlowSpace. A !FlowMap also maps a !FlowSpace to the proper slices. |
| 181 | |
| 182 | A flow rule is defined by a matching criteria (FVMatch.java -> OFMatch.java) and an action (OFAction.java derivative). The "traditional" OFMatch construct doesn't do matching on DPID, so it is extended by FVMatch to do so. Flowvisor v0.8.3 supports two types of !FlowMaps, Linear and Federated. !FlowMaps are implementations of the Java Interface !FlowMap.java. |
| 183 | |
| 184 | The enum !MatchType defines how each header pattern of a (Flowvisor-defined) rule and the received rule patterns relate, in semi-set theoretic terms: |
| 185 | {{{ |
| 186 | public enum MatchType { |
| 187 | UNKNOWN, // not yet calculated |
| 188 | NONE, // no overlap between A and B |
| 189 | SUBSET, // match A is a subset of B |
| 190 | SUPERSET, // match A is a superset of match B |
| 191 | INTERSECT, // match A and B overlap, but neither subsumes the other |
| 192 | EQUAL; // match A and B are exactly the same |
| 193 | } |
| 194 | }}} |
| 195 | |
| 196 | The !Matchtype is used to describe ''Intersections'', descriptions of how two !FlowEntries relate. An intersection takes the form of a !FlowEntry built by choosing the more heavily constrained pattern for each header field and DPID(s). !FlowIntersect.java implements the representation of the intersection, and !FlowEntry defines matches(), which compares two !FlowEntries to produce the intersection. Comparisons are implemented in !FlowTestOp.java. |
| 197 | |