On Mon, May 14, 2012 at 06:48:33AM +0900, FUJITA Tomonori wrote:
> Hi,
> 
> I need something to test nx stuff by actually talking with ovs. I use
> something crappy like the following. A tool like oftest tool to get a
> test description and do testings might be nice but doing all the
> testings is fine by me now. Can we integrate such stuff into our tools
> including some testings nicely? Or better to have stuff as a different
> mechanism?
> 
> Opinions?

I think it's much better than nothing.
Maybe oftest.py should be under ryu/tests to clarify that it's for tests?
It would be matter of preference, though.

This kind of integrated test can be done by using mininet and
it can be automated.
Ideally test scenario can be written (in python with unittests?) and
hopefully the packet is captured at the same time for later debugging.

thanks,


> diff --git a/ryu/app/oftest.py b/ryu/app/oftest.py
> new file mode 100644
> index 0000000..733fb2d
> --- /dev/null
> +++ b/ryu/app/oftest.py
> @@ -0,0 +1,92 @@
> +# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation.
> +#
> +# Licensed under the Apache License, Version 2.0 (the "License");
> +# you may not use this file except in compliance with the License.
> +# You may obtain a copy of the License at
> +#
> +#    http://www.apache.org/licenses/LICENSE-2.0
> +#
> +# Unless required by applicable law or agreed to in writing, software
> +# distributed under the License is distributed on an "AS IS" BASIS,
> +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> +# implied.
> +# See the License for the specific language governing permissions and
> +# limitations under the License.
> +
> +from ryu.controller import handler
> +from ryu.controller import dpset
> +from ryu.ofproto import nx_match
> +
> +
> +class OFtest(object):
> +    def __init__(self, *_args, **kwargs):
> +        super(OFtest, self).__init__()
> +
> +    @staticmethod
> +    def _make_command(table, command):
> +        return table << 8 | command
> +
> +    def nx_action_bundle(self, dp):
> +        wildcards = dp.ofproto.OFPFW_ALL & ~dp.ofproto.OFPFW_IN_PORT
> +        in_port = 0
> +        match = dp.ofproto_parser.OFPMatch(wildcards, in_port,
> +                                           0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
> +
> +        actions = []
> +        actions.append(dp.ofproto_parser.NXActionBundle(
> +                dp.ofproto.NX_BD_ALG_HRW,
> +                dp.ofproto.NX_HASH_FIELDS_ETH_SRC,
> +                0,
> +                dp.ofproto.NXM_OF_IN_PORT,
> +                2,
> +                0,
> +                0,
> +                (0, 1)))
> +                
> +        command = self._make_command(0, dp.ofproto.OFPFC_ADD)
> +        flow_mod = dp.ofproto_parser.OFPFlowMod(dp, match=match,
> +                                                cookie=0,
> +                                                command=command,
> +                                                idle_timeout=0,
> +                                                hard_timeout=0,
> +                                                priority=0x1,
> +                                                actions=actions)
> +        dp.send_msg(flow_mod)
> +        
> +    def nx_action_bundle_load(self, dp):
> +        wildcards = dp.ofproto.OFPFW_ALL & ~dp.ofproto.OFPFW_IN_PORT
> +        in_port = 1
> +        match = dp.ofproto_parser.OFPMatch(wildcards, in_port,
> +                                           0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
> +
> +        actions = []
> +        actions.append(dp.ofproto_parser.NXActionBundleLoad(
> +                dp.ofproto.NX_BD_ALG_HRW,
> +                dp.ofproto.NX_HASH_FIELDS_ETH_SRC,
> +                0,
> +                dp.ofproto.NXM_OF_IN_PORT,
> +                2,
> +                16,
> +                dp.ofproto.nxm_nx_reg(1),
> +                (0, 1)))
> +                
> +        command = self._make_command(0, dp.ofproto.OFPFC_ADD)
> +        flow_mod = dp.ofproto_parser.OFPFlowMod(dp, match=match,
> +                                                cookie=0,
> +                                                command=command,
> +                                                idle_timeout=0,
> +                                                hard_timeout=0,
> +                                                priority=0x1,
> +                                                actions=actions)
> +        dp.send_msg(flow_mod)
> +
> +
> +    def test(self, dp):
> +        self.nx_action_bundle(dp)
> +        self.nx_action_bundle_load(dp)
> +    
> +    @handler.set_ev_cls(dpset.EventDP, dpset.DPSET_EV_DISPATCHER)
> +    def handler_datapath(self, ev):
> +        if ev.enter:
> +            self.test(ev.dp)
> +            
> 
> ------------------------------------------------------------------------------
> Live Security Virtual Conference
> Exclusive live event will cover all the ways today's security and 
> threat landscape has changed and how IT managers can respond. Discussions 
> will include endpoint security, mobile security and the latest in malware 
> threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
> _______________________________________________
> Ryu-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/ryu-devel
> 

-- 
yamahata

------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Ryu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to