Hi,
append_field() method is one of the "old" API for OFPMatch.
With old API, you need to convert IP/MAC address (string type)into binary type.
e.g.)
>>> from ryu.lib import addrconv
>>> from ryu.ofproto import ofproto_v1_3 as ofproto
>>> from ryu.ofproto import ofproto_v1_3_parser as parser
>>> m = parser.OFPMatch()
>>> m.append_field(ofproto.OXM_OF_ETH_SRC, "02:a3:33:b2:2d:21")
>>> m
OFPMatch(oxm_fields={'eth_src': '30:32:3a:61:33:3a'})
>>> m.append_field(ofproto.OXM_OF_ETH_SRC,
>>> addrconv.mac.text_to_bin("02:a3:33:b2:2d:21"))
>>> m
OFPMatch(oxm_fields={'eth_src': '02:a3:33:b2:2d:21'})
I recommend you to use the new API for OFPMatch.
e.g.)
>>> from ryu.ofproto import ofproto_v1_3 as ofproto
>>> from ryu.ofproto import ofproto_v1_3_parser as parser
>>> m = parser.OFPMatch(eth_src="02:a3:33:b2:2d:21")
>>> m
OFPMatch(oxm_fields={'eth_src': '02:a3:33:b2:2d:21'})
>>> kwargs = {'eth_src': '02:a3:33:b2:2d:21'}
>>> m = parser.OFPMatch(**kwargs)
>>> m
OFPMatch(oxm_fields={'eth_src': '02:a3:33:b2:2d:21'})
Thanks,
Iwase
On 2015年08月15日 11:33, Gandhimathi Velusamy wrote:
> Hi,
>
> I just tried to modify the code simple_switch_13.py in app folder of ryu.
>
> When packet in happens,
> I tried to modify the eth_src of the packet coming from port 1 with the
> value "02:a3:33:b2:2d:21".
> It is working for me.
> Please, find attached the code and screen shot of Ryu output.
> Inline images 1
>
> Thanks
> Gandhimathi
>
>
> On 14 August 2015 at 17:47, A Sydney <[email protected]
> <mailto:[email protected]>> wrote:
>
> Oops.. Looks like I inadvertently dropped ryu-devel from the thread..
>
> So below was correspondence between Gandhimathi and I (Ali). Feel free
> to provide feedback...
>
>
> ### Gandhimathi ###
>
> Have you tried with set_field()?
> page 167 from https://media.readthedocs.org/pdf/ryu/latest/ryu.pdf
>
>
>
> ### Ali ###
>
> I've tried the following which works fine:
>
> match = parser.OFPMatch(eth_dst="02:a3:33:b2:2d:21")
>
> However, for my particular test case, I've got match conditions stored in
> a config file and when a switch starts up, I read the config file and install
> flows in the switch. Now my config file has things like:
>
> inport = 1
> eth_src = "None"
> eth_dst = "02:a3:33:b2:2d:21"
>
> And in my ryu application, I do something like (pseudo code):
>
> match = parser.OFPMatch()
>
> if inport != "None":
> match.append_field(ofproto.OXM_OF_IN_PORT, inport)
>
> if eth_src != "None":
> match.append_field(ofproto.OXM_OF_ETH_SRC, eth_src)
>
> if eth_dst != "None":
> match.append_field(ofproto.OXM_OF_ETH_SRC, eth_dst)
>
> print "match:", match
>
> match: 1, 02:a3:33:b2:2d:21
>
> So if I don't have a value for a match condition (such as eth_src), I
> insert "None" in the config file. Then when I create my match, if "None"
> shows up for this parameter (like for eth_src), I don't add it to the match
> condition. The the point here is that I append fields (inport, eth_src etc)
> to the match condition iteratively. Hence, I can't use the form"match =
> parser.OFPMatch(eth_dst="02:a3:33:b2:2d:21""
>
> ### Gandhimathi ###
>
> I understand what you are trying to do. May be the syntax you are using
> with match. append_field() is not correct? could you please, refer here:
> https://github.com/FlowForwarding/LINC-Switch/commit/4c9aa3ad5ad1250f8357e04a65773b409fbe4b4c.
> They used pointer data type to pass in append_field() method.
>
>
>
> ### Ali ###
>
> Per your suggest, below is what I attempted:
>
> match = parser.OFPMatch()
>
> test=[(ofproto.OXM_OF_IN_PORT,4),(ofproto.OXM_OF_ETH_SRC,"02:a3:33:b2:2d:21")]
> for a in test:
> match.append_field(*a)
> print "matching:", match
>
> matching: OFPMatch(oxm_fields={'eth_src': '30:32:3a:61:33:3a', 'in_port':
> 4})
>
> As shown, the mac address still has the same weird format as before
>
> I also tried the following:
>
> match = parser.OFPMatch()
> match.set_in_port(4)
> match.set_dl_src("02:a3:33:b2:2d:21")
> print "matching:", match
>
> matching: OFPMatch(oxm_fields={})
>
> But as shown, the output is empty
>
> REF:
> https://github.com/osrg/ryu/blob/master/ryu/app/rest_router.py#L1722
>
> On Fri, Aug 14, 2015 at 2:13 PM, A Sydney <[email protected]
> <mailto:[email protected]>> wrote:
>
> Any feedback?
>
> On Wed, Aug 12, 2015 at 5:29 PM, A Sydney <[email protected]
> <mailto:[email protected]>> wrote:
>
> Hi Ryu folks,
> This may be a trivial question...
>
> I'm using ryu 3.23.2 on CentOS 6.6 (OF 1.3). As shown below, when
> I insert a mac address (02:a3:33:b2:2d:21), "appends_fields" seem to do
> something smart that results in "30:32:3a:61:33:3a" in "match" (as opposed to
> "02:a3:33:b2:2d:21").
>
> # Ryu app
> match = parser.OFPMatch()
> match.append_field(ofproto.OXM_OF_ETH_SRC, "02:a3:33:b2:2d:21")
> print match
>
> # Output
> OFPMatch(oxm_fields={'eth_src': '30:32:3a:61:33:3a'})
>
> How do I get the original mac address (02:a3:33:b2:2d:21)
> inserted in "match"?
>
> Thanks,
> Ali
>
>
>
>
>
> ------------------------------------------------------------------------------
>
> _______________________________________________
> Ryu-devel mailing list
> [email protected] <mailto:[email protected]>
> https://lists.sourceforge.net/lists/listinfo/ryu-devel
>
>
>
>
> ------------------------------------------------------------------------------
>
>
>
> _______________________________________________
> Ryu-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/ryu-devel
>
------------------------------------------------------------------------------
_______________________________________________
Ryu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel