[pox-dev] Resubmit inside 'learn'
Murphy McCauley
murphy.mccauley at gmail.com
Sun Dec 8 20:00:17 PST 2013
There's no super-shorthand for this. Try:
fms(load=nx.NXM_NX_REG5, src=nx.nx_learn_src_immediate.u32(7))
I had to look this up, and in the process realized there seemed to be a small bug... you should pull the latest version from the dart branch. If you don't, just put a "None" argument before the real argument to u32().
-- Murphy
On Dec 8, 2013, at 7:01 PM, Jayanth Silesh <jayanthsileshs.forums at gmail.com> wrote:
> Hi Murphy,
>
> when I insert this statement,
> learn.spec.append(fms( field=nx.NXM_NX_REG5, load=7 ))
>
> The following error occurs. Is the Syntax ‘load’, I tried,match and output too.
>
>
> ERROR:core:Exception while handling OpenFlowNexus!ConnectionUp...
> Traceback (most recent call last):
> File "/home/mininet/pox2/pox/lib/revent/revent.py", line 231, in raiseEventNoErrors
> return self.raiseEvent(event, *args, **kw)
> File "/home/mininet/pox2/pox/lib/revent/revent.py", line 278, in raiseEvent
> rv = event._invoke(handler, *args, **kw)
> File "/home/mininet/pox2/pox/lib/revent/revent.py", line 156, in _invoke
> return handler(self, *args, **kw)
> File "/home/mininet/pox2/pox/misc/cust2.py", line 59, in _handle_ConnectionUp
> learn.spec.append(fms( field=nx.NXM_NX_REG5, load=7 ))
> File "/home/mininet/pox2/pox/openflow/nicira.py", line 1462, in new
> if dst is not None: dst_inst = dst(*dstarg,**dstkw)
> File "/home/mininet/pox2/pox/openflow/nicira.py", line 1306, in __init__
> data = field().pack(omittable = False, header_only = True)
> TypeError: 'int' object is not callable
> Thanks,
> Jayanth
> Graduate Student
> USC
>
>
>
> On December 8, 2013 at 6:47:22 PM, Murphy McCauley (murphy.mccauley at gmail.com) wrote:
>
>> On Dec 8, 2013, at 6:18 PM, Jayanth Silesh <jayanthsileshs.forums at gmail.com> wrote:
>>
>> > Hi Murphy,
>> >
>> > Question1:
>> >
>> > The problem is that I need the resubmit command in the flow_entry.
>> > Say that there is already an entry in table 2 as
>> > in_port=7,….,action= resubmit(,3).
>> >
>> > Is there a way that from table3, I can use the LEARN msg to ‘append’ an action in the table 2 so that it becomes,
>> > in_port=7,…..,action=( load(reg_5=7) ,resubmit(,3))
>> >
>> > Will the learn action, add an entry or can it modify the existing entry in the table?
>>
>> No. However, consider making the entry in table 2:
>> in_port==7 : resubmit(table=11), resubmit(table=3)
>>
>> By default, have table 11 (a table chosen at random for the example) empty. You can use a learn action to learn an entry into it like...
>> in_port==7 : load(field=reg5, value=7)
>>
>> .. and the result should be what you wanted.
>>
>>
>> In the above case, the new table entry uses in_port to match against, but you could use a metafield instead if your match conditions are complicated. Picking the values 14 and 42 at random, in table 2 you'd have:
>> in_port==7 : load(field=reg14, value=42), resubmit(table=11), resubmit(table=3)
>>
>> In table 11:
>> reg14==42 : load(field=reg5, value=7)
>>
>> > Question2:
>> > Is there a resubmit action on the Nicira extensions for NOX?
>>
>> No. There couldn't be. The problem isn't that POX doesn't support this. Open vSwitch itself doesn't support this. It's not part of the learn action by definition.
>>
>> (On top of that, no noxrepo version of NOX supports the learn action at all.)
>>
>> > Question3:
>> >
>> > How do load the register with some value, it’s throwing errors on this. Is the naming convention for reg wrong?
>> >
>> > learn.spec.append(fms( field=nx.re51, load=7 ))
>>
>> As suggested in the last entry of the FAQ, you should post error messages.
>>
>> The registers are named like NXM_NX_REGx, and should also be accessible as NXM_NX_REG[x]. I think "x" is between 0 and 15 on most or all switches.
>>
>>
>> -- Murphy
>>
>> > Thanks,
>> > Jayanth
>> > Graduate Student
>> > USC
>> >
>> >
>> >
>> > On December 8, 2013 at 3:48:51 PM, Murphy McCauley (murphy.mccauley at gmail.com) wrote:
>> >
>> >> meta_register_1
>>
More information about the pox-dev
mailing list