When a buffer id is placed in a Flow Mod message, the actions are expected to
be executed against the referenced packet. The kernel implementation was
not setting the input device to what the controller was telling it to use.
Thanks to Natasha for catching this.
if (skb) {
struct sw_flow_key key;
flow_used(flow, skb);
+ dp_set_origin(chain->dp, ntohs(ofm->match.in_port), skb);
flow_extract(skb, ntohs(ofm->match.in_port), &key);
execute_actions(chain->dp, skb, &key, ofm->actions, actions_len, 0);
}