)]}'
{"neutron/plugins/ml2/drivers/openvswitch/agent/openflow/native/br_phys.py":[{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"b2dd2649b10fe1cd9f9b4fcc9e34b5b1a319dd9a","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        if segmentation_id is None:"},{"line_number":45,"context_line":"            actions \u003d [ofpp.OFPActionPopVlan()]"},{"line_number":46,"context_line":"            priority \u003d 3"},{"line_number":47,"context_line":"            ingress_match \u003d ofpp.OFPMatch(vlan_vid\u003dofp.OFPVID_NONE)"},{"line_number":48,"context_line":"        else:"},{"line_number":49,"context_line":"            vlan_vid \u003d segmentation_id | ofp.OFPVID_PRESENT"},{"line_number":50,"context_line":"            actions \u003d [ofpp.OFPActionSetField(vlan_vid\u003dvlan_vid)]"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ffa3b31_303be99c","line":47,"updated":"2017-04-19 03:25:42.000000000","message":"i guess you need OFPActionPushVlan before OFPActionSetField in this case.","commit_id":"e7e4279df129e352978593d6cd92995ec2ec22e1"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"156d46a44f60a2efeea4171177074637de2e1908","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        if segmentation_id is None:"},{"line_number":45,"context_line":"            actions \u003d [ofpp.OFPActionPopVlan()]"},{"line_number":46,"context_line":"            priority \u003d 3"},{"line_number":47,"context_line":"            ingress_match \u003d ofpp.OFPMatch(vlan_vid\u003dofp.OFPVID_NONE)"},{"line_number":48,"context_line":"        else:"},{"line_number":49,"context_line":"            vlan_vid \u003d segmentation_id | ofp.OFPVID_PRESENT"},{"line_number":50,"context_line":"            actions \u003d [ofpp.OFPActionSetField(vlan_vid\u003dvlan_vid)]"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ffa3b31_f1ab4086","line":47,"in_reply_to":"7ffa3b31_303be99c","updated":"2017-04-19 08:04:34.000000000","message":"yay! that was it! Thanks a lot :)","commit_id":"e7e4279df129e352978593d6cd92995ec2ec22e1"}],"neutron/plugins/ml2/drivers/openvswitch/agent/openflow/ovs_ofctl/br_phys.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"1547cbb58496575f2ff84c13658a05360ac7f729","unresolved":false,"context_lines":[{"line_number":41,"context_line":"                          dl_vlan\u003dlvid,"},{"line_number":42,"context_line":"                          actions\u003d\"strip_vlan,normal\")"},{"line_number":43,"context_line":"            self.add_flow(table\u003dtable_id,"},{"line_number":44,"context_line":"                          priority\u003d3,"},{"line_number":45,"context_line":"                          dl_vlan\u003d\u00270xffff\u0027,"},{"line_number":46,"context_line":"                          actions\u003d\"mod_vlan_vid:%s,output:%d\" % ("},{"line_number":47,"context_line":"                              lvid, port))"}],"source_content_type":"text/x-python","patch_set":2,"id":"7ffa3b31_4c9b2e65","line":44,"range":{"start_line":44,"start_character":35,"end_line":44,"end_character":36},"updated":"2017-04-21 07:46:01.000000000","message":"You can set the same priority as in the previous flow.","commit_id":"0797b0b5205d3b8f96227e8b685df2ed8ef3145d"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"55bbae350cef644533a558646d419c1b0fb96fa4","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                          dl_vlan\u003dlvid,"},{"line_number":53,"context_line":"                          actions\u003d\"mod_vlan_vid:%s,normal\" % segmentation_id)"},{"line_number":54,"context_line":"            self.add_flow(table\u003dtable_id,"},{"line_number":55,"context_line":"                          priority\u003d4,"},{"line_number":56,"context_line":"                          dl_vlan\u003dsegmentation_id,"},{"line_number":57,"context_line":"                          actions\u003d\"mod_vlan_vid:%s,output:%d\" % ("},{"line_number":58,"context_line":"                              lvid, port))"}],"source_content_type":"text/x-python","patch_set":2,"id":"7ffa3b31_0db75a88","line":55,"range":{"start_line":55,"start_character":26,"end_line":55,"end_character":36},"updated":"2017-04-21 13:38:56.000000000","message":"Maybe I don\u0027t understand ovs, but doesn\u0027t this lead to unspecified behavior? I mean having two flows with the same priority possibly matching the same packet. ovs-ofctl(8) says this:\n\nhttp://openvswitch.org/support/dist-docs/ovs-ofctl.8.txt\n\n\"OpenFlow  leaves  behavior undefined when two or more flows with the same priority can match a single packet.  Some users  expect ``sensible\u0027\u0027 behavior, such as more specific flows taking precedence over less specific flows, but OpenFlow  does  not  specify this  and  Open  vSwitch  does  not  implement it.  Users should therefore take care to use priorities  to  ensure  the  behavior that they expect.\"","commit_id":"0797b0b5205d3b8f96227e8b685df2ed8ef3145d"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"cee22a1a771ff4760f4a589a27d18472477af6bf","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                          dl_vlan\u003dlvid,"},{"line_number":53,"context_line":"                          actions\u003d\"mod_vlan_vid:%s,normal\" % segmentation_id)"},{"line_number":54,"context_line":"            self.add_flow(table\u003dtable_id,"},{"line_number":55,"context_line":"                          priority\u003d4,"},{"line_number":56,"context_line":"                          dl_vlan\u003dsegmentation_id,"},{"line_number":57,"context_line":"                          actions\u003d\"mod_vlan_vid:%s,output:%d\" % ("},{"line_number":58,"context_line":"                              lvid, port))"}],"source_content_type":"text/x-python","patch_set":2,"id":"5ff73747_e8196888","line":55,"range":{"start_line":55,"start_character":26,"end_line":55,"end_character":36},"in_reply_to":"5ff73747_284870ca","updated":"2017-04-24 12:58:27.000000000","message":"In this case, L49, because this flow will have \"more matches\". The filter done in L49 is more restrictive; if a packet matches both flows, this will be catched by the most restrictive one.\n\nBTW, this case is precisely a justification to use the same priority in both flows:\n- Flows from VM will match L49, because of the in_port filter.\n- Flows from external sources won\u0027t match L49 because the in_port parameter will never match.","commit_id":"0797b0b5205d3b8f96227e8b685df2ed8ef3145d"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"ddfcedb22e02b8688bf00e10aad969016136a5db","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                          dl_vlan\u003dlvid,"},{"line_number":53,"context_line":"                          actions\u003d\"mod_vlan_vid:%s,normal\" % segmentation_id)"},{"line_number":54,"context_line":"            self.add_flow(table\u003dtable_id,"},{"line_number":55,"context_line":"                          priority\u003d4,"},{"line_number":56,"context_line":"                          dl_vlan\u003dsegmentation_id,"},{"line_number":57,"context_line":"                          actions\u003d\"mod_vlan_vid:%s,output:%d\" % ("},{"line_number":58,"context_line":"                              lvid, port))"}],"source_content_type":"text/x-python","patch_set":2,"id":"5ff73747_6a6d4797","line":55,"range":{"start_line":55,"start_character":26,"end_line":55,"end_character":36},"in_reply_to":"5ff73747_3e69ca24","updated":"2017-04-24 15:40:52.000000000","message":"You are right: OVS doesn\u0027t implement it. This flow should have lower priority (less than L50).","commit_id":"0797b0b5205d3b8f96227e8b685df2ed8ef3145d"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"01a7f429c6e820662a2cf38b080d5b12637b17ec","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                          dl_vlan\u003dlvid,"},{"line_number":53,"context_line":"                          actions\u003d\"mod_vlan_vid:%s,normal\" % segmentation_id)"},{"line_number":54,"context_line":"            self.add_flow(table\u003dtable_id,"},{"line_number":55,"context_line":"                          priority\u003d4,"},{"line_number":56,"context_line":"                          dl_vlan\u003dsegmentation_id,"},{"line_number":57,"context_line":"                          actions\u003d\"mod_vlan_vid:%s,output:%d\" % ("},{"line_number":58,"context_line":"                              lvid, port))"}],"source_content_type":"text/x-python","patch_set":2,"id":"5ff73747_284870ca","line":55,"range":{"start_line":55,"start_character":26,"end_line":55,"end_character":36},"in_reply_to":"5ff73747_777d50e6","updated":"2017-04-24 12:51:18.000000000","message":"Yes, the filters are different, but they are overlapping. More precisely L49 matches a subset of packets matched by L54. Let\u0027s suppose vlan 100 is allocated by the local vlan manager and vlan 100 is also used as a physical network segmentation id. Then a packet with vlan tag 100 is received on the port given in L51. Which flow matches this packet (by the spec)? L49 or L54?\n\nSorry if I\u0027m just not getting it.","commit_id":"0797b0b5205d3b8f96227e8b685df2ed8ef3145d"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"08b842de142a1c1591d7c2b67a75e8e84a7c45ed","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                          dl_vlan\u003dlvid,"},{"line_number":53,"context_line":"                          actions\u003d\"mod_vlan_vid:%s,normal\" % segmentation_id)"},{"line_number":54,"context_line":"            self.add_flow(table\u003dtable_id,"},{"line_number":55,"context_line":"                          priority\u003d4,"},{"line_number":56,"context_line":"                          dl_vlan\u003dsegmentation_id,"},{"line_number":57,"context_line":"                          actions\u003d\"mod_vlan_vid:%s,output:%d\" % ("},{"line_number":58,"context_line":"                              lvid, port))"}],"source_content_type":"text/x-python","patch_set":2,"id":"5ff73747_3e69ca24","line":55,"range":{"start_line":55,"start_character":26,"end_line":55,"end_character":36},"in_reply_to":"5ff73747_e8196888","updated":"2017-04-24 13:45:16.000000000","message":"Rodolfo, would you please compare this to the docs I quoted in my comment at 04-21 15:38?\n\nIt says that this behavior (the more specific flow taking precedence) would be sensible (I also expected this first), but  it clearly states that ovs does not work like that.\n\nDo you mean that the docs are wrong on this issue?","commit_id":"0797b0b5205d3b8f96227e8b685df2ed8ef3145d"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"54c378b3cf8da6d6ceaf0be73ec3c9f5457d0cf7","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                          dl_vlan\u003dlvid,"},{"line_number":53,"context_line":"                          actions\u003d\"mod_vlan_vid:%s,normal\" % segmentation_id)"},{"line_number":54,"context_line":"            self.add_flow(table\u003dtable_id,"},{"line_number":55,"context_line":"                          priority\u003d4,"},{"line_number":56,"context_line":"                          dl_vlan\u003dsegmentation_id,"},{"line_number":57,"context_line":"                          actions\u003d\"mod_vlan_vid:%s,output:%d\" % ("},{"line_number":58,"context_line":"                              lvid, port))"}],"source_content_type":"text/x-python","patch_set":2,"id":"5ff73747_777d50e6","line":55,"range":{"start_line":55,"start_character":26,"end_line":55,"end_character":36},"in_reply_to":"7ffa3b31_0db75a88","updated":"2017-04-22 09:33:58.000000000","message":"You are right, but both flows have different filter options. In this case, this flow will match flows external flows with external VLAN tag going to a VM. There is no race condition in this case.","commit_id":"0797b0b5205d3b8f96227e8b685df2ed8ef3145d"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"1547cbb58496575f2ff84c13658a05360ac7f729","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                          actions\u003d\"mod_vlan_vid:%s,output:%d\" % ("},{"line_number":47,"context_line":"                              lvid, port))"},{"line_number":48,"context_line":"        else:"},{"line_number":49,"context_line":"            self.add_flow(table\u003dtable_id,"},{"line_number":50,"context_line":"                          priority\u003d4,"},{"line_number":51,"context_line":"                          in_port\u003dport,"},{"line_number":52,"context_line":"                          dl_vlan\u003dlvid,"},{"line_number":53,"context_line":"                          actions\u003d\"mod_vlan_vid:%s,normal\" % segmentation_id)"},{"line_number":54,"context_line":"            self.add_flow(table\u003dtable_id,"},{"line_number":55,"context_line":"                          priority\u003d4,"},{"line_number":56,"context_line":"                          dl_vlan\u003dsegmentation_id,"},{"line_number":57,"context_line":"                          actions\u003d\"mod_vlan_vid:%s,output:%d\" % ("},{"line_number":58,"context_line":"                              lvid, port))"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def reclaim_local_vlan(self, port, lvid, segmentation_id):"},{"line_number":61,"context_line":"        self.delete_flows(in_port\u003dport, dl_vlan\u003dlvid)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7ffa3b31_ac907244","line":58,"range":{"start_line":49,"start_character":0,"end_line":58,"end_character":42},"updated":"2017-04-21 07:46:01.000000000","message":"If you change the priority in L44 to 4, this block (except for L42/L53) is the same. Maybe you can refactor it and join both.","commit_id":"0797b0b5205d3b8f96227e8b685df2ed8ef3145d"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"1547cbb58496575f2ff84c13658a05360ac7f729","unresolved":false,"context_lines":[{"line_number":60,"context_line":"    def reclaim_local_vlan(self, port, lvid, segmentation_id):"},{"line_number":61,"context_line":"        self.delete_flows(in_port\u003dport, dl_vlan\u003dlvid)"},{"line_number":62,"context_line":"        dl_vlan \u003d segmentation_id or \u00270xffff\u0027"},{"line_number":63,"context_line":"        self.delete_flows(dl_vlan\u003ddl_vlan)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def add_dvr_mac_vlan(self, mac, port):"},{"line_number":66,"context_line":"        self.install_output(table_id\u003dconstants.DVR_NOT_LEARN_VLAN,"}],"source_content_type":"text/x-python","patch_set":2,"id":"7ffa3b31_0c93e65c","line":63,"range":{"start_line":63,"start_character":8,"end_line":63,"end_character":42},"updated":"2017-04-21 07:46:01.000000000","message":"Maybe I\u0027m missing something, but should this delete_flows function filter the port?\n\nself.delete_flows(in_port\u003dport, dl_vlan\u003ddl_vlan)\n\nYou should delete the flows only from this incoming port.","commit_id":"0797b0b5205d3b8f96227e8b685df2ed8ef3145d"}]}
