Thanks Iwamoto, introduced my own clause in generate and problem resolved!

Alan
On Thu, Oct 18, 2018 at 4:51 AM IWAMOTO Toshihiro <iwam...@valinux.co.jp> wrote:
>
> Hi,
>
> On Fri, 12 Oct 2018 06:29:33 +0900,
> Alan Kayahan wrote:
> >
> > Hello,
> >
> > I have implemented a custom OXM match in OVS that works fine over
> > OpenFlow13 when used in a rule installed via ovs-ofctl add-flow. The match
> > definition in OVS looks as following
>
> > diff --git a/ryu/ofproto/ofproto_v1_3.py b/ryu/ofproto/ofproto_v1_3.py
> > index d599c1c..018bdad 100644
> > --- a/ryu/ofproto/ofproto_v1_3.py
> > +++ b/ryu/ofproto/ofproto_v1_3.py
> > @@ -175,10 +175,11 @@
> >  # enum ofp_oxm_class
> >  OFPXMC_NXM_0 = 0x0000           # Backward compatibility with NXM
> >  OFPXMC_NXM_1 = 0x0001           # Backward compatibility with NXM
> >  OFPXMC_OPENFLOW_BASIC = 0x8000  # Basic class for OpenFlow
> >  OFPXMC_EXPERIMENTER = 0xFFFF    # Experimenter class
> > +OFPXMC_TRH = 0xFFFF             # TRF
> >
> >  # enum ofp_vlan_id
> >  OFPVID_PRESENT = 0x1000     # bit that indicate that a VLAN id is set.
> >  OFPVID_NONE = 0x0000        # No VLAN id was set.
> >
> > @@ -1227,10 +1228,12 @@
> >      # EXT-109 TCP flags match field Extension
> >      oxm_fields.ONFExperimenter('tcp_flags', 42, type_desc.Int2),
> >      # EXT-233 Output match Extension
> >      # NOTE(yamamoto): The spec says uint64_t but I assume it's an error.
> >      oxm_fields.ONFExperimenter('actset_output', 43, type_desc.Int4),
> > +    #TRH
> > +    oxm_fields.Trh('trh_nextuid', 45, type_desc.Int4),
> >  ] + nicira_ext.oxm_types
> >
> >  oxm_fields.generate(__name__)
>
> Please look at what oxm_fields.generate does.
>
> > diff --git a/ryu/ofproto/ofproto_v1_3_parser.py
> > b/ryu/ofproto/ofproto_v1_3_parser.py
> > index 0324c82..41977e8 100644
> > --- a/ryu/ofproto/ofproto_v1_3_parser.py
> > +++ b/ryu/ofproto/ofproto_v1_3_parser.py
>
> > @@ -2244,21 +2256,29 @@
> >      def __init__(self, header, value, mask=None):
> >          super(MTTunnelId, self).__init__(header)
> >          self.value = value
> >          self.mask = mask
> >
> > -
> >  @OFPMatchField.register_field_header([ofproto.OXM_OF_IPV6_EXTHDR,
> >                                        ofproto.OXM_OF_IPV6_EXTHDR_W])
> >  class MTIPv6ExtHdr(OFPMatchField):
> >      pack_str = '!H'
> >
> >      def __init__(self, header, value, mask=None):
> >          super(MTIPv6ExtHdr, self).__init__(header)
> >          self.value = value
> >          self.mask = mask
> >
> > +@OFPMatchField.register_field_header([ofproto.OXM_TRH_NEXTUID,
> > +                                      ofproto.OXM_TRH_NEXTUID_W])
> > +class MTTrhNextuid(OFPMatchField):
> > +    pack_str = '!I'
> > +
> > +    def __init__(self, header, value, mask=None):
> > +        super(MTTrhNextuid, self).__init__(header)
> > +        self.value = value
> > +        self.mask = mask
> >
> >  @_register_parser
> >  @_set_msg_type(ofproto.OFPT_PACKET_IN)
> >  class OFPPacketIn(MsgBase):
> >      """
>
> > And the following is the error when I try to launch the controller app
> >
> >  File
> > "/root/.local/lib/python2.7/site-packages/ryu/ofproto/ofproto_protocol.py",
> > line 22, in <module>
> >     from ryu.ofproto import ofproto_v1_3_parser
> >   File
> > "/root/.local/lib/python2.7/site-packages/ryu/ofproto/ofproto_v1_3_parser.py",
> > line 2271, in <module>
> >     @OFPMatchField.register_field_header([ofproto.OXM_TRH_NEXTUID,
> > AttributeError: 'module' object has no attribute 'OXM_TRH_NEXTUID'
>
> The error message has the answer. :)
> Other header constants such as OXM_OF_IPV6_EXTHDR are genereted in
> oxm_fields.generate. You can modify this to accomodate constant
> generation, or more simply, you can just define the needed constants
> as done for NXM_NX_* constants in nicira_ext.py.
>
> --
> IWAMOTO Toshihiro
>
>


_______________________________________________
Ryu-devel mailing list
Ryu-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to