Q:

OpenFlow Example: Is my understanding correct?

I have a question concerning an example of OpenFlow utilization for a campus network made in the paper: Open Flow: Enabling Innovation in Campus Networks. I will first quote the paper to provide some context about the example I am struggling with. After which, I quote the specific passage that I do not understand.

USING OPENFLOW 

As a simple example of how an OpenFlow Switch might be used imagine that Amy (a researcher) invented Amy-OSPF as a new
  routing protocol to replace OSPF. 
She wants to try her protocol in a
  network of OpenFlow Switches, without changing any end-host software.
  Amy-OSPF will run in a controller; each time a new application flow
  starts AmyOSPF picks a route through a series of OpenFlow Switches,
  and adds a flow- entry in each switch along the path.
In her experiment, Amy decides to use Amy-OSPF for the traffic entering the
  OpenFlow network from her own desktop PC— so she doesn’t disrupt the
  network for others. To do this, she defines one flow to be all the
  traffic entering the OpenFlow switch through the switch port her PC is
  connected to, and adds a flow-entry with the action “Encapsulate and
  forward all packets to a controller”.

Following is the excerpt that I struggle to understand:

When her packets reach a controller, her new protocol chooses a route and adds a new flow-entry
  (for the application flow) to every switch along the chosen path. When
  subsequent packets arrive at a switch, they are processed quickly (and
  at line-rate) by the Flow Table

So, if my understanding is correct:

Amy defines one flow to be all the traffic coming from port N on router R.
Add a flow-entry with action "encapsulate+forward to controller".
Packets are routed using Path P_0, to controller C_1
Packets are reaching C_1
Amy-OSPF will compute the best route/path (which may be different from P_0), we call it P_1, from port N on router R to C1.
It multicast the flow-entry to the chosen routers on path P_1, saying that if a packet is labeled to be from port N on router R forward to the next router on P_1.
Each router on path P_1 has a local view of the best path (next hop), whereas C_1 has the global view (all the hops from start to finish).
Further processing will be very fast because the router will just execute the flow-entry communicated by the controller C_1.

Am I missing something? Also, to which router/switch is Amy adding the rules for 0 and 1 (defining a flow, adding a flow-entry "encapsulate + forward to controller").
Thank you,

A:

I think you've mostly got it.
There are a few points I would make though. 

The path P_0, from R to C_1, is often (but not always) implemented 'out-of-band', as a separate network. 
Only one, or a handful, of packets for each network flow should reach C_1. As soon as the flows are inserted by the AmyOSPF controller, they are simply forwarded according to that routing logic. This is what the second quote says. 
No. AmyOSPF computes the best path P_1 from R to the destination of the packets, wherever that may be. It can do this without talking to the switches.

The flow entries that make up the path P_1 is then sent to the routers on P_1, so that all traffic coming from Amy's machine to a particular destination are sent along that path, without having to go to the controller. In the case of R, this new flow entry must have higher priority than the one that says to send all traffic from that port to the controller. 

It's not really a multicast, the controller has a separate connection to each switch/router. The flow entries may be slightly different for each router too. 
The point is that it doesn't matter what 'view' the router has, as all of the routing is done in the controller. But C_0 does have a global view.

This will have to be repeated for each new network flow originating from Amy's machine. It wouldn't make sense to create a path from R to X and then send packets destined for Y along it. Having said that, flow entries can be aggregated.

