Generated rules use the InPort pseudoport if necessary.
Generated rules use the InPort pseudoport if necessary.

Recall that in OF, if a rule matches on port P it cannot send a packet out
of physical port P. It needs to instead use the pseudoport InPort.

I've made a simple fix to the flowmod generator to produce InPorts when
necessary. I don't think we can make the physical port / InPort distinction
at the NetCore language-level. (Why would you want to, anyway?)

For example, consider this policy:

    InPort 10 ==> forward [5] <&&>
    SrcMac 0xbeefbeefbeeffe ==> forward [10]

which produces the table:

    [Match{InPort=10, srcMac=0xbeef... } -> Forward 5, Forward 10]
    [Match{InPort=10} -> Forward 5]
    [Match{srcMac=0xbeef...} -> Forward 10]

The first flow table entry is invalid: it needs to use InPort instead of
Forward 10. But, the error is only apparent after computing the global
policy and compiling to OF.

frenetic-lang/netcore-1.0,frenetic-lang/netcore-1.0