At Tue, 9 May 2017 11:28:04 +0900,
Iwase Yusuke wrote:
> 
> Hi Iwamoto-San,
> 
> Basically, this feature is very similar to "ryu.lib.ofctl_v1_*", I guess.
> In case of ofctl_v1_*, this library provides the translation layer (json like
> object -> OFP* instance) and seems to be well separated from "ryu.ofproto"
> module ("ofctl_v1_*" have many duplicated codes though...).
> 
> For example, OFPInstructionGotoTable.from_string() is not for the pure 
> OpenFlow
> protocol and is specifically for the "ovs-ofctl" command of OVS.
> So I think it might be better to implement this feature under "ryu.lib" module
> (e.g., "ryu.lib.ovs_ofctl" or ""ryu.lib.ofctl")
> But NOT strong will, and the current implementation works well with short 
> codes.

Yes, I noticed ryu.lib.ofctl_* do similar thing, but it wasn't clear
for me if the code can be shared/reused.  So I took this simpler
approach.

I'll investigate if this functionality can be put under
ryu.lib.ofctl_*.

> On 2017年05月02日 16:19, IWAMOTO Toshihiro wrote:
> > This commit adds a new method called ofp_instruction_from_str,
> > which takes an ovs-ofctl style action string and returns a list of
> > OFPInstructionActions. Currently only a few action strings are
> > understood.
> > 
> > Signed-off-by: IWAMOTO Toshihiro <iwam...@valinux.co.jp>
> > ---
> > diff --git a/ryu/ofproto/ofproto_parser.py b/ryu/ofproto/ofproto_parser.py
> > ...(snip)
> > +
> > +def tokenize_ofp_instruction_arg(arg):
> > +    """
> > +    Tokenize an argument portion of ovs-ofctl style action string.
> > +    """
> > +    arg_re = re.compile("[^,()]*")
> > +    try:
> > +        rest = arg
> > +        result = []
> > +        while len(rest):
> > +            m = arg_re.match(rest)
> > +            if m.end(0) == len(rest):
> > +                result.append(rest)
> > +                return result
> > +            if rest[m.end(0)] == '(':
> > +                this_block, rest = _tokenize_paren_block(
> > +                    rest, m.end(0) + 1)
> > +                result.append(this_block)
> > +            elif rest[m.end(0)] == ',':
> > +                result.append(m.group(0))
> > +                rest = rest[m.end(0):]
> > +            else:  # is ')'
> > +                raise Exception
> > +            if len(rest):
> > +                assert rest[0] == ','
> > +                rest = rest[1:]
> > +        return result
> > +    except Exception:
> > +        raise ryu.exception.OFPInvalidActionString(action_str=arg)
> 
> "ryu.exception" cannot be access from here because it is imported with
> "from ryu import exception".
> It should be like "exception.OFPInvalidActionString(action_str=arg)"?

Nice catch. Thanks.

> Thanks,
> Iwase
> 
> ------------------------------------------------------------------------------
> Check out the vibrant tech community on one of the world's most
> engaging tech sites, Slashdot.org! http://sdm.link/slashdot
> _______________________________________________
> Ryu-devel mailing list
> Ryu-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/ryu-devel

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
Ryu-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to