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