Thank you. You shared links relevant to OpenFlow version 1.3. I actually
was able to add group entries via with OpenFlow version 1.3. I have issue
in version 1.5. If you could provide something related to that, it will be
helpful.


On Fri, Jan 4, 2019 at 4:36 PM knet solutions <knetsolutio...@gmail.com>
wrote:

> Hi Ramzah Rehman,
>
> Refer this below tutorial for Group Table in RYU, also sample exercise
> also present in this git repository.
>
>
> https://github.com/knetsolutions/learn-sdn-with-ryu/blob/master/ryu_part8.md
>
>
> https://github.com/knetsolutions/learn-sdn-with-ryu
>
> Thanks
> Suresh.
>
>
> On Fri, Jan 4, 2019 at 5:03 PM Ramzah Rehman <ramzahreh...@gmail.com>
> wrote:
>
>> Hi,
>> I tried to add a Group Entry in my OVS version 2.8.6 switch via RYU
>> controller using ofproto_v1_5 (switch has been configured to support
>> OpenFlow 1.5 ). I found send_group_mod
>> <https://ryu.readthedocs.io/en/latest/ofproto_v1_5_ref.html> function
>> here. I used the exact code to check if it's working but got this
>> OFPGMFC_BAD_BUCKET(12) error.
>>
>> The code for adding a group entry is as follows:
>>
>> def send_group_mod(self, datapath):
>>     ofp = datapath.ofproto
>>     ofp_parser = datapath.ofproto_parser
>>
>>     port = 1
>>     max_len = 2000
>>     actions = [ofp_parser.OFPActionOutput(port, max_len)]
>>
>>     weight = 100
>>     watch_port = 0
>>     watch_group = 0
>>     buckets = [ofp_parser.OFPBucket(weight, watch_port, watch_group,
>>                                     actions)]
>>
>>     group_id = 1
>>     command_bucket_id=1
>>     req = ofp_parser.OFPGroupMod(datapath, ofp.OFPGC_ADD,
>>                                  ofp.OFPGT_SELECT, group_id,
>>                                  command_bucket_id, buckets)
>>     datapath.send_msg(req)
>>
>> The error I got is:
>>
>> OFPErrorMsg(type=0x6, code=0xc, 
>> data=b'\x06\x0f\x00\x20\x4c\x6d\x56\x22\x00\x00\x01\x00\x00\x00\x00\x01\x00\x08\x00\x00\x00\x00\x00\x01\x00\x08\x00\x00\x00\x00\x00\x64')
>>  |-- type: OFPET_GROUP_MOD_FAILED(6)
>>  |-- code: *OFPGMFC_BAD_BUCKET(12)*
>>  `-- data: version=0x6, msg_type=0xf, msg_len=0x20, xid=0x4c6d5622
>>      `-- msg_type: OFPT_GROUP_MOD(15)
>>
>>
>> Error BAD_BUCKET(12) is thrown when there is a error in bucket. Since I was 
>> using SELECT type of group I did not require watch_port and watch_group. So 
>> I set these variables to these:
>>
>>   watch_port = ofproto_v1_5.OFPP_ANY
>>   watch_group =  ofproto_v1_5.OFPQ_ALL
>>
>> I restarted my controller, this time I got this error:
>>
>>
>> SimpleSwitch15: Exception occurred during handler processing. Backtrace from 
>> offending handler [switch_features_handler] servicing event 
>> [EventOFPSwitchFeatures] follows.
>> Traceback (most recent call last):
>>   File 
>> "/home/aa/PycharmProjects/ovs-controller/venv/lib/python3.4/site-packages/ryu/base/app_manager.py",
>>  line 290, in _event_loop
>>     handler(ev)
>>   File "/home/aa/PycharmProjects/ovs-controller/mycontroller.py", line 55, 
>> in switch_features_handler
>>     self.send_group_mod(datapath)
>>   File "/home/aa/PycharmProjects/ovs-controller/mycontroller.py", line 348, 
>> in send_group_mod
>>     datapath.send_msg(req)
>>   File 
>> "/home/aa/PycharmProjects/ovs-controller/venv/lib/python3.4/site-packages/ryu/controller/controller.py",
>>  line 423, in send_msg
>>     msg.serialize()
>>   File 
>> "/home/aa/PycharmProjects/ovs-controller/venv/lib/python3.4/site-packages/ryu/ofproto/ofproto_parser.py",
>>  line 270, in serialize
>>     self._serialize_body()
>>   File 
>> "/home/aa/PycharmProjects/ovs-controller/venv/lib/python3.4/site-packages/ryu/ofproto/ofproto_v1_5_parser.py",
>>  line 6281, in _serialize_body
>>     b.serialize(self.buf, offset)
>>   File 
>> "/home/aa/PycharmProjects/ovs-controller/venv/lib/python3.4/site-packages/ryu/ofproto/ofproto_v1_5_parser.py",
>>  line 6509, in serialize
>>    * for a in self.actions:*
>> *TypeError: 'int' object is not iterable*
>>
>> I debugged my code to check if actions are being set properly in buckets. To 
>> my chagrin, actions were not being set at all in the OFPBucket. I got an 
>> interger instead of a list of actions in OFPBucket. I have attached the 
>> screenshot of debugging.
>>
>> Then I checked the implementation of OFPBucket  in ofproto_v1_5_parser.py 
>> file here 
>> <https://github.com/osrg/ryu/blob/master/ryu/ofproto/ofproto_v1_5_parser.py> 
>> and to my surprise, OFPBucket constructor had a very different signature 
>> i.e.:
>>
>> def __init__(self, bucket_id=0, actions=None, properties=None, len_=None, 
>> action_array_len=None)
>> The way I was calling OFPBucket constructor was valid for version 1.3 not 
>> version 1.5. (I check the send_group_mod for version 1.3 
>> <https://ryu.readthedocs.io/en/latest/ofproto_v1_3_ref.html> here and it was 
>> working properly).
>> Anyhow, since I had been initializing my OFPButcket wrongly, I modified my 
>> code as follows. This time, the actions list was being set properly in the 
>> bucket but  still, I got bad_BUCKET(12) error. Please help.
>> *Modified Code:*
>>
>> def send_group_mod(self, datapath):
>>         ofp = datapath.ofproto
>>         ofp_parser = datapath.ofproto_parser
>>
>>         port = 1
>>         max_len = 2000
>>         actions = [ofp_parser.OFPActionOutput(port, max_len)]
>>
>>         weight = 100
>>         #watch_port = ofproto_v1_5.OFPP_ANY
>>         #watch_group =  ofproto_v1_5.OFPQ_ALL
>>
>>         bucket = datapath.ofproto_parser.OFPBucket(bucket_id=1, 
>> actions=actions, properties=None, len_=32,action_array_len=None)
>>         buckets = [bucket]
>>         #buckets = [ofp_parser.OFPBucket(weight, watch_port, 
>> watch_group,actions)]
>>
>>         group_id = 1
>>         command_bucket_id = 1
>>         req = ofp_parser.OFPGroupMod(datapath, ofp.OFPGC_ADD,
>>                                      ofp.OFPGT_SELECT, group_id,
>>                                      command_bucket_id, buckets)
>>         datapath.send_msg(req)
>>
>> *Error:*
>>
>> EventOFPErrorMsg received.
>> version=0x6, msg_type=0x1, msg_len=0x3c, xid=0x1d46ee73
>>  `-- msg_type: OFPT_ERROR(1)
>> OFPErrorMsg(type=0x6, code=0xc, 
>> data=b'\x06\x0f\x00\x30\x1d\x46\xee\x73\x00\x00\x01\x00\x00\x00\x00\x01\x00\x18\x00\x00\x00\x00\x00\x01\x00\x18\x00\x10\x00\x00\x00\x01\x00\x00\x00\x10\x00\x00\x00\x01\x07\xd0\x00\x00\x00\x00\x00\x00')
>>  |-- type: OFPET_GROUP_MOD_FAILED(6)
>>  |-- code: OFPGMFC_BAD_BUCKET(12)
>>  `-- data: version=0x6, msg_type=0xf, msg_len=0x30, xid=0x1d46ee73
>>      `-- msg_type: OFPT_GROUP_MOD(15)
>>
>> _______________________________________________
>> Ryu-devel mailing list
>> Ryu-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/ryu-devel
>>
>
>
> --
>
> *Regards, *
> *Knet solutions.*
> Whatsapp/Mobile:  +919445042007
> website:  http://knetsolutions.in/
> Facebook Page :   https://www.facebook.com/sdntraining/
> youtube channel:  https://www.youtube.com/channel/UCTD6X9_oDqIYs_xpE7moFnQ
>
>
>
_______________________________________________
Ryu-devel mailing list
Ryu-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to