Closing this one out... Using Iwase's s suggestion, I've moved to the new API which allows me to specify multiple match conditions (such as inport, eth_src etc) as follows:
kwargs = {} kwargs['in_port'] = 4 kwargs['eth_src'] = 02:a3:33:b2:2d:21 match = parser.OFPMatch(**kwargs) Thanks a bunch both Gandhimathi and Iwase! -Ali On Sat, Aug 15, 2015 at 9:39 AM, Iwase Yusuke <iwase.yusu...@gmail.com> wrote: > 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 <asydney...@gmail.com <mailto: > asydney...@gmail.com>> 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 <asydney...@gmail.com > <mailto:asydney...@gmail.com>> wrote: > > > > Any feedback? > > > > On Wed, Aug 12, 2015 at 5:29 PM, A Sydney <asydney...@gmail.com > <mailto:asydney...@gmail.com>> 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 > > Ryu-devel@lists.sourceforge.net <mailto: > Ryu-devel@lists.sourceforge.net> > > https://lists.sourceforge.net/lists/listinfo/ryu-devel > > > > > > > > > > > ------------------------------------------------------------------------------ > > > > > > > > _______________________________________________ > > Ryu-devel mailing list > > Ryu-devel@lists.sourceforge.net > > https://lists.sourceforge.net/lists/listinfo/ryu-devel > > >
------------------------------------------------------------------------------
_______________________________________________ Ryu-devel mailing list Ryu-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/ryu-devel