@@ -444,28 +444,38 @@ a given configuration of ONOS, there is a corresponding API. For
444444example, the “Topology” interface shown in :numref: `Figure %s
445445<fig-onos>` is exactly the API offered by the Topology Service shown
446446in :numref: `Figure %s <fig-services1 >`. Second, because ONOS permits
447- applications to define and use their own Atomix primitives , it is fair
448- to consider the Atomix programmatic interface as another part of the
449- ONOS NBI. Third, the ONOS NBI includes gNMI and gNOI. These are
447+ applications to define and use their own Atomix tables , it is fair to
448+ consider the Atomix programmatic interface as another part of the ONOS
449+ NBI. Third, the ONOS NBI includes gNMI and gNOI. These are
450450standardized interfaces, defined independent of ONOS, but supported as
451451part of the ONOS NBI. Note that the implementation sitting behind gNMI
452- and gNOI are also Atomix-based maps. Finally, and most interestingly ,
453- ONOS offers a set of interfaces for controlling the underlying
454- switches. :numref: `Figure %s <fig-onos >` depicts two: Flow Rules and
455- Flow Objectives. The first is borrowed from OpenFlow, and hence, is
456- pipeline-aware. The second is pipeline-agnostic, and the focus of the
457- rest of this section.
458-
459- There are three types of flow objectives: *Filtering *, *Next *, and
460- * Forwarding *. Filtering objectives determine whether or not traffic
452+ and gNOI are also ONOS services wrapped around Atomix maps. Finally,
453+ and most interestingly, ONOS offers a set of interfaces for
454+ controlling the underlying switches. :numref: `Figure %s <fig-onos >`
455+ depicts two: Flow Rules and Flow Objectives. The first is borrowed
456+ from OpenFlow, and hence, is pipeline-aware. The second is
457+ pipeline-agnostic, and the focus of the rest of this section.
458+
459+ There are three types of flow objectives: *Filtering *, *Forwarding *,
460+ and * Next *. Filtering objectives determine whether or not traffic
461461should be permitted to enter the pipeline, based on a traffic
462- *Selector *. You can think of selectors as abstracting the "match" part
463- of a match-action rule. Next objectives indicate what kind of
464- *Treatment * the traffic should receive. You can think of treatments as
465- abstracting the "action" part of a match-action rule. Forwarding
466- objectives determine what traffic is to be allowed to egress the
467- pipeline, effectively adding a second opportunity apply a match rule
468- to the traffic.
462+ *Selector *. Forwarding objectives determine what traffic is to be
463+ allowed to egress the pipeline, generally by matching select fields in
464+ the packet with a forwarding table. Next objectives indicate what kind
465+ of *Treatment * the traffic should receive, such as how the header is
466+ to be rewritten. If this sounds like an abstract three-stage pipeline:
467+
468+ .. centered :: Filtering → Forwarding → Next
469+
470+ then you understand the idea behind Flow Objectives. For example, the
471+ Filter objective (stage) might specify that packets matching a
472+ particular MAC address, VLAN tag, and IP address be allowed to enter
473+ the pipeline; the corresponding Forwarding objective (stage) then
474+ looks up the IP address in a routing table; and finally the Next
475+ objective (stage) rewrites the headers as necessary and assigns the
476+ packet to an output port. All three stages, of course, are agnostic as
477+ to exactly what combination of tables in the underlying switch are
478+ used to implement the corresponding sequence of match/action pairs.
469479
470480The challenge is to map these pipeline-agnostic objectives onto the
471481corresponding pipeline-dependent rules. In ONOS, this mapping is
0 commit comments