)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":19307,"name":"Antonio Ojea","email":"antonio.ojea.garcia@gmail.com","username":"itsuugo"},"change_message_id":"d8718d7ef79f636d50609b4160fe9a707c234324","unresolved":false,"context_lines":[{"line_number":15,"context_line":"Network/Compute Nodes can monitor the GARP packets for the configured"},{"line_number":16,"context_line":"Allowed_address_pair IP and forward it to the Controller."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"The Controller will verify the packet and then insert an openflow"},{"line_number":19,"context_line":"rule into the ARP Responder table. Then if sends out the packet out"},{"line_number":20,"context_line":"to FLOOD_TO_TUN for normal flow."},{"line_number":21,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"3f79a3b5_1ad33239","line":18,"updated":"2018-11-06 12:24:17.000000000","message":"Sorry for my ignorance, but is it possible to update the fdb table directly leveraging the l2pop mechanism instead of broadcasting the packet?","commit_id":"095daf5cb6b0aaa181deac93ff50701b91ada878"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"5da2234792c9fc942143cb21444a5c1678b6988d","unresolved":false,"context_lines":[{"line_number":15,"context_line":"Network/Compute Nodes can monitor the GARP packets for the configured"},{"line_number":16,"context_line":"Allowed_address_pair IP and forward it to the Controller."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"The Controller will verify the packet and then insert an openflow"},{"line_number":19,"context_line":"rule into the ARP Responder table. Then if sends out the packet out"},{"line_number":20,"context_line":"to FLOOD_TO_TUN for normal flow."},{"line_number":21,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"3f79a3b5_30b886c5","line":18,"in_reply_to":"3f79a3b5_1ad33239","updated":"2018-11-06 18:12:57.000000000","message":"Yes in fact that is what I am doing it right now.","commit_id":"095daf5cb6b0aaa181deac93ff50701b91ada878"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"36b133a9fb88e514e58e98db4db2871ecdbd5ea5","unresolved":false,"context_lines":[{"line_number":20,"context_line":"to FLOOD_TO_TUN for normal flow."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"This patch address the issue mentioned above with native openflow"},{"line_number":23,"context_line":"controller."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Change-Id: I2dfbb750363c5e73fafd436667abb445f275174b"},{"line_number":26,"context_line":"Related-Bug: #1774459"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":21,"id":"3f79a3b5_8134d2e1","line":23,"updated":"2018-11-20 18:36:30.000000000","message":"This may require that we allow the router IP to get into the br-tun flow and then probably drop it at the FLOOD_TO_TUN.\nAlso we should allow the DVR MAC as \u0027dst\u0027 to enter the patch-int from br-tun. ( This has to happen after we replace the DVR host MAC by the Gateway MAC. This flow mod has to happen in the br-tun flows before the packet hits the patch-int)\nEnough complexity by itself, not sure if this would cause any other MAC table pollution in the br-int.\nAny thougths?","commit_id":"d637d428788565de6ae1b90385aa623531f674c6"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"8283f40355de9073d25b245eefa35afd456d18ad","unresolved":false,"context_lines":[{"line_number":12,"context_line":"ARP requests to get out of the node."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"To solve this problem the OpenFlow controller running in the"},{"line_number":15,"context_line":"Network/Compute Nodes can monitor the GARP packets for the configured"},{"line_number":16,"context_line":"Allowed_address_pair IP and forward it to the Controller."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"The Controller will verify the packet and then insert an openflow"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":42,"id":"3fa7e38b_b955bcfb","line":15,"range":{"start_line":15,"start_character":34,"end_line":15,"end_character":50},"updated":"2020-01-15 02:06:36.000000000","message":"What if no such packet send out from compute instance? Seems we are trying to fix the problem based on the \"problem\" itself. The bug [1] is a scenario testing, no garp, we will not fix that. Right?\n\n[1] https://bugs.launchpad.net/neutron/+bug/1859638","commit_id":"3cd8b329e999edbfc99b0f8b121f4aefe3a8ca29"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"865513d8960f9cd18c58d01ad32c3cda7906b68e","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     Slawek Kaplonski \u003cskaplons@redhat.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2021-06-09 14:35:21 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"DVR: Populate ARP entries of the allowed_address_pairs to the routers"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In the DVR case, all ARP entries which are needed for routers are"},{"line_number":10,"context_line":"populated to them through the control plane. That causes problem with"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":89,"id":"9500a831_0c30a499","line":7,"updated":"2021-06-09 16:15:16.000000000","message":"I understand the concept and the goal of this patch because I helped (briefly) on the development. I would like anyone else to check if this description is enough to understand what is being implemented.\n\nI\u0027m saying that because the concept could be, the first time you see this patch, difficult to understand.\n\nAny feedback to improve the commit message, if needed, is welcome.","commit_id":"e57d3a39a39d0bda015f2ac6abb65a1c5e07f72a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"abf17b439cacbdcdc3815637337fcd48efded338","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     Slawek Kaplonski \u003cskaplons@redhat.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2021-06-09 14:35:21 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"DVR: Populate ARP entries of the allowed_address_pairs to the routers"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In the DVR case, all ARP entries which are needed for routers are"},{"line_number":10,"context_line":"populated to them through the control plane. That causes problem with"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":89,"id":"0039f18d_7a353c59","line":7,"in_reply_to":"9500a831_0c30a499","updated":"2021-06-10 15:12:32.000000000","message":"+1 for that 😊","commit_id":"e57d3a39a39d0bda015f2ac6abb65a1c5e07f72a"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"1dc7dd4e8b77593dbc402983f402b63d9173ce8b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":101,"id":"4f8f2a3f_1eccc587","updated":"2021-10-18 08:51:37.000000000","message":"recheck","commit_id":"9b0ba226c51292a20a9a14fc720247ca34f08f15"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"b92f68607b4f06af7ebafe59406d88f0e943f5f6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":102,"id":"c047a760_81fdd1d4","updated":"2022-01-04 16:30:32.000000000","message":"Thanks for the update Slawek, some minor comments.","commit_id":"57159f7fdb25a31cdac114b3fcb3f78e4a301753"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"3f257acb83efcfd180f79905888b139e321f1069","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":103,"id":"89c2ff38_dce99de5","updated":"2022-01-05 09:47:05.000000000","message":"It\u0027s huge, but I can live with it, and we have time to have i.e. the api extension moved to n-lib in this cycle","commit_id":"e5390edd8ecfac84251caaa617f9f24d7cce9e5b"}],"doc/source/admin/deploy-ovs-ha-dvr.rst":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"fd8e08dbb89284f578736d0baa775063396eab04","unresolved":true,"context_lines":[{"line_number":515,"context_line":".. image:: figures/deploy-ovs-ha-dvr-flowew1.png"},{"line_number":516,"context_line":"   :alt: High-availability using Open vSwitch with DVR - network traffic flow - east/west scenario 2"},{"line_number":517,"context_line":""},{"line_number":518,"context_line":"East-west scenario 1a: Instances with VIP configured as allowed address pair on different networks on the same router with"},{"line_number":519,"context_line":"--------------------------------------------------------------------------------------------------------------------------"},{"line_number":520,"context_line":""},{"line_number":521,"context_line":"It is quite common use case, for example in case of the Openshift on top"}],"source_content_type":"text/x-rst","patch_set":89,"id":"de8abfd8_9f223fcf","line":518,"range":{"start_line":518,"start_character":118,"end_line":518,"end_character":122},"updated":"2021-06-09 15:42:15.000000000","message":"seems unfinished","commit_id":"e57d3a39a39d0bda015f2ac6abb65a1c5e07f72a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"abf17b439cacbdcdc3815637337fcd48efded338","unresolved":false,"context_lines":[{"line_number":515,"context_line":".. image:: figures/deploy-ovs-ha-dvr-flowew1.png"},{"line_number":516,"context_line":"   :alt: High-availability using Open vSwitch with DVR - network traffic flow - east/west scenario 2"},{"line_number":517,"context_line":""},{"line_number":518,"context_line":"East-west scenario 1a: Instances with VIP configured as allowed address pair on different networks on the same router with"},{"line_number":519,"context_line":"--------------------------------------------------------------------------------------------------------------------------"},{"line_number":520,"context_line":""},{"line_number":521,"context_line":"It is quite common use case, for example in case of the Openshift on top"}],"source_content_type":"text/x-rst","patch_set":89,"id":"5365673a_a0d50884","line":518,"range":{"start_line":518,"start_character":118,"end_line":518,"end_character":122},"in_reply_to":"de8abfd8_9f223fcf","updated":"2021-06-10 15:12:32.000000000","message":"Done","commit_id":"e57d3a39a39d0bda015f2ac6abb65a1c5e07f72a"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"fd8e08dbb89284f578736d0baa775063396eab04","unresolved":true,"context_lines":[{"line_number":532,"context_line":"Basic topology of the instances with configured VIP address is shown above."},{"line_number":533,"context_line":"VIP address (10.10.0.30 at the picture above) can be moved by application"},{"line_number":534,"context_line":"between ``Instance 1`` and ``Instance 2``."},{"line_number":535,"context_line":"When VIP address is conigured inside the guest VM, it has to send GARP packets"},{"line_number":536,"context_line":"to inform network where IP is really configured."},{"line_number":537,"context_line":""},{"line_number":538,"context_line":""}],"source_content_type":"text/x-rst","patch_set":89,"id":"286f107f_38373756","line":535,"range":{"start_line":535,"start_character":20,"end_line":535,"end_character":29},"updated":"2021-06-09 15:42:15.000000000","message":"configured","commit_id":"e57d3a39a39d0bda015f2ac6abb65a1c5e07f72a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"abf17b439cacbdcdc3815637337fcd48efded338","unresolved":false,"context_lines":[{"line_number":532,"context_line":"Basic topology of the instances with configured VIP address is shown above."},{"line_number":533,"context_line":"VIP address (10.10.0.30 at the picture above) can be moved by application"},{"line_number":534,"context_line":"between ``Instance 1`` and ``Instance 2``."},{"line_number":535,"context_line":"When VIP address is conigured inside the guest VM, it has to send GARP packets"},{"line_number":536,"context_line":"to inform network where IP is really configured."},{"line_number":537,"context_line":""},{"line_number":538,"context_line":""}],"source_content_type":"text/x-rst","patch_set":89,"id":"802a3626_a619c0f7","line":535,"range":{"start_line":535,"start_character":20,"end_line":535,"end_character":29},"in_reply_to":"286f107f_38373756","updated":"2021-06-10 15:12:32.000000000","message":"Done","commit_id":"e57d3a39a39d0bda015f2ac6abb65a1c5e07f72a"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"fd8e08dbb89284f578736d0baa775063396eab04","unresolved":true,"context_lines":[{"line_number":577,"context_line":"   | port_security_enabled | True                                                                              |"},{"line_number":578,"context_line":"   +-----------------------+-----------------------------------------------------------------------------------+ "},{"line_number":579,"context_line":""},{"line_number":580,"context_line":"The same VIP address on other ports will be set as inactive:"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":".. code-block:: console"},{"line_number":583,"context_line":""}],"source_content_type":"text/x-rst","patch_set":89,"id":"13f8f71d_10139198","line":580,"range":{"start_line":580,"start_character":0,"end_line":580,"end_character":59},"updated":"2021-06-09 15:42:15.000000000","message":"what if keepalived VIP is not used with those allowed address pairs? There are other use cases where several ports would have same allowed address pair. What will those active/inactive states say to users then?\n\nI mean maybe we don\u0027t even want to expose this info to users.","commit_id":"e57d3a39a39d0bda015f2ac6abb65a1c5e07f72a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"abf17b439cacbdcdc3815637337fcd48efded338","unresolved":true,"context_lines":[{"line_number":577,"context_line":"   | port_security_enabled | True                                                                              |"},{"line_number":578,"context_line":"   +-----------------------+-----------------------------------------------------------------------------------+ "},{"line_number":579,"context_line":""},{"line_number":580,"context_line":"The same VIP address on other ports will be set as inactive:"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":".. code-block:: console"},{"line_number":583,"context_line":""}],"source_content_type":"text/x-rst","patch_set":89,"id":"d9201c01_3be61710","line":580,"range":{"start_line":580,"start_character":0,"end_line":580,"end_character":59},"in_reply_to":"13f8f71d_10139198","updated":"2021-06-10 15:12:32.000000000","message":"In such case, if there will be different IPs configured as allowed_address pair for different ports, all of them will be \"active\" by default.\nBut of course, I\u0027m fine with hiding it from users. I just though that it could be good if user will have additional info which port is actually configured as the active one, that may help debugging issues probably.","commit_id":"e57d3a39a39d0bda015f2ac6abb65a1c5e07f72a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"9307f97f83dc70c60b9ed77a3902ec902d987712","unresolved":true,"context_lines":[{"line_number":577,"context_line":"   | port_security_enabled | True                                                                              |"},{"line_number":578,"context_line":"   +-----------------------+-----------------------------------------------------------------------------------+ "},{"line_number":579,"context_line":""},{"line_number":580,"context_line":"The same VIP address on other ports will be set as inactive:"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":".. code-block:: console"},{"line_number":583,"context_line":""}],"source_content_type":"text/x-rst","patch_set":89,"id":"d7ae3f16_ab5df63a","line":580,"range":{"start_line":580,"start_character":0,"end_line":580,"end_character":59},"in_reply_to":"5261c538_50120ce2","updated":"2021-06-15 11:37:08.000000000","message":"ok, I see now. But TBH even if such vip will be marked as \"inactive\" it will work fine on the instance level. \"Active/Inactive\" is effectively only used by neutron-server to populate arp entry to the L3 agents with dvr routers.\nMaybe we should introduce also server side config option to \"use_allowed_address_pairs_as_vip\" and expose this \"active\" attribute through API only if that config option is enabled? Wdyt?","commit_id":"e57d3a39a39d0bda015f2ac6abb65a1c5e07f72a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"ba11e1d5125704940aae5441eaf7cf538cc86b6a","unresolved":true,"context_lines":[{"line_number":577,"context_line":"   | port_security_enabled | True                                                                              |"},{"line_number":578,"context_line":"   +-----------------------+-----------------------------------------------------------------------------------+ "},{"line_number":579,"context_line":""},{"line_number":580,"context_line":"The same VIP address on other ports will be set as inactive:"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":".. code-block:: console"},{"line_number":583,"context_line":""}],"source_content_type":"text/x-rst","patch_set":89,"id":"e287dc44_c951610c","line":580,"range":{"start_line":580,"start_character":0,"end_line":580,"end_character":59},"in_reply_to":"a9916a0a_2d5816f5","updated":"2021-06-18 11:06:18.000000000","message":"As this field makes sense really only for dvr routers, I disable it when enable_dvr\u003dFalse thus I don\u0027t need to introduce yet another config knob for that. Will work for You?","commit_id":"e57d3a39a39d0bda015f2ac6abb65a1c5e07f72a"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"380a1e6d29859fb8ce0aed43c861c9e32f261bd1","unresolved":true,"context_lines":[{"line_number":577,"context_line":"   | port_security_enabled | True                                                                              |"},{"line_number":578,"context_line":"   +-----------------------+-----------------------------------------------------------------------------------+ "},{"line_number":579,"context_line":""},{"line_number":580,"context_line":"The same VIP address on other ports will be set as inactive:"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":".. code-block:: console"},{"line_number":583,"context_line":""}],"source_content_type":"text/x-rst","patch_set":89,"id":"a9916a0a_2d5816f5","line":580,"range":{"start_line":580,"start_character":0,"end_line":580,"end_character":59},"in_reply_to":"d7ae3f16_ab5df63a","updated":"2021-06-15 14:15:53.000000000","message":"I think this makes sense if we really want to expose this info to users. However I don\u0027t think this is strictly needed for this patch. Anyway I\u0027m ok with both options","commit_id":"e57d3a39a39d0bda015f2ac6abb65a1c5e07f72a"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"987936688862e3ce52994c570d23c9caac42305c","unresolved":true,"context_lines":[{"line_number":577,"context_line":"   | port_security_enabled | True                                                                              |"},{"line_number":578,"context_line":"   +-----------------------+-----------------------------------------------------------------------------------+ "},{"line_number":579,"context_line":""},{"line_number":580,"context_line":"The same VIP address on other ports will be set as inactive:"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":".. code-block:: console"},{"line_number":583,"context_line":""}],"source_content_type":"text/x-rst","patch_set":89,"id":"e8e0d39e_257a5733","line":580,"range":{"start_line":580,"start_character":0,"end_line":580,"end_character":59},"in_reply_to":"d9201c01_3be61710","updated":"2021-06-10 15:44:08.000000000","message":"\u003e In such case, if there will be different IPs configured as allowed_address pair for different ports, all of them will be \"active\" by default\n\nWell, I meant the case of same IP as allowed address pair but without a VIP floating between them, active/inactive has no sense in this case, has it?\n\n\u003e But of course, I\u0027m fine with hiding it from users. I just though that it could be good if user will have additional info which port is actually configured as the active one, that may help debugging issues probably.","commit_id":"e57d3a39a39d0bda015f2ac6abb65a1c5e07f72a"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"ec7d3f84d9ac9f9191aac159fea782632c993c24","unresolved":true,"context_lines":[{"line_number":577,"context_line":"   | port_security_enabled | True                                                                              |"},{"line_number":578,"context_line":"   +-----------------------+-----------------------------------------------------------------------------------+ "},{"line_number":579,"context_line":""},{"line_number":580,"context_line":"The same VIP address on other ports will be set as inactive:"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":".. code-block:: console"},{"line_number":583,"context_line":""}],"source_content_type":"text/x-rst","patch_set":89,"id":"111759bb_ef444844","line":580,"range":{"start_line":580,"start_character":0,"end_line":580,"end_character":59},"in_reply_to":"e287dc44_c951610c","updated":"2021-06-18 12:12:56.000000000","message":"IMO this field makes sense only for VRRP based VIP use case, no matter if router is DVR or not. My vision is that this case is buggy with DVR routers and current patch fixes that issue, and this fix should work fine even without exposing \u0027active\u0027 state through API.","commit_id":"e57d3a39a39d0bda015f2ac6abb65a1c5e07f72a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"0eeb8fdd07073b17c528daf9156f0fb1525c20b9","unresolved":true,"context_lines":[{"line_number":577,"context_line":"   | port_security_enabled | True                                                                              |"},{"line_number":578,"context_line":"   +-----------------------+-----------------------------------------------------------------------------------+ "},{"line_number":579,"context_line":""},{"line_number":580,"context_line":"The same VIP address on other ports will be set as inactive:"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":".. code-block:: console"},{"line_number":583,"context_line":""}],"source_content_type":"text/x-rst","patch_set":89,"id":"ec9898c6_7ebbc4f1","line":580,"range":{"start_line":580,"start_character":0,"end_line":580,"end_character":59},"in_reply_to":"e8e0d39e_257a5733","updated":"2021-06-14 08:21:28.000000000","message":"But what is the sense to have same IP address configured in 2 vms (added to 2 ports) in same network and use them both together? Is there use case for that?","commit_id":"e57d3a39a39d0bda015f2ac6abb65a1c5e07f72a"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"c4b7bf4c7220b10c2d5d8dcbefbafeca409e6cc2","unresolved":true,"context_lines":[{"line_number":577,"context_line":"   | port_security_enabled | True                                                                              |"},{"line_number":578,"context_line":"   +-----------------------+-----------------------------------------------------------------------------------+ "},{"line_number":579,"context_line":""},{"line_number":580,"context_line":"The same VIP address on other ports will be set as inactive:"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":".. code-block:: console"},{"line_number":583,"context_line":""}],"source_content_type":"text/x-rst","patch_set":89,"id":"5261c538_50120ce2","line":580,"range":{"start_line":580,"start_character":0,"end_line":580,"end_character":59},"in_reply_to":"ec9898c6_7ebbc4f1","updated":"2021-06-15 06:28:03.000000000","message":"BGP Anycast based load balancing and alike, where AAP is required to at least pass ARP spoofing protection and security groups.","commit_id":"e57d3a39a39d0bda015f2ac6abb65a1c5e07f72a"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"0a16e7d9f55c5864633656b69e71a32d32fe773c","unresolved":true,"context_lines":[{"line_number":534,"context_line":"    routers such use case with VIPs works out-of-the-box without any additional"},{"line_number":535,"context_line":"    configuration."},{"line_number":536,"context_line":"    In case when ``enable_dvr`` is set to ``False`` in the Neutron server,"},{"line_number":537,"context_line":"    additional allowed_address_pair\u0027s attribute ``active`` will not be"},{"line_number":538,"context_line":"    available at all."},{"line_number":539,"context_line":""},{"line_number":540,"context_line":"Use case"}],"source_content_type":"text/x-rst","patch_set":98,"id":"8fac1a79_e2a6e412","line":537,"range":{"start_line":537,"start_character":50,"end_line":537,"end_character":56},"updated":"2021-08-11 08:31:17.000000000","message":"Let me briefly describe my vision.\nAllowed address pair feature lets ports to have additional IP(+MAC)s that will be allowed by security groups and MAC/ARP spoofing filters. By design it\u0027s kind of \"passive\" and does not imply to control actual IP assignment inside VM. \nActual IP assignment is controlled by external processes, like keepalived and this is where active/passive state should be stored. By adding \"active\" to the allowed address pair we kind of mixing these two. Moreover allowed address pairs may be used not only for VIP scenario, but for traffic monitoring or like that. This does not depend on whether router is DVR or not.","commit_id":"bc19ac7295f95559a8a487e0097312a6bedd57d6"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"fa43023213ef0361103cb53b00ed219b2c0b8b96","unresolved":true,"context_lines":[{"line_number":534,"context_line":"    routers such use case with VIPs works out-of-the-box without any additional"},{"line_number":535,"context_line":"    configuration."},{"line_number":536,"context_line":"    In case when ``enable_dvr`` is set to ``False`` in the Neutron server,"},{"line_number":537,"context_line":"    additional allowed_address_pair\u0027s attribute ``active`` will not be"},{"line_number":538,"context_line":"    available at all."},{"line_number":539,"context_line":""},{"line_number":540,"context_line":"Use case"}],"source_content_type":"text/x-rst","patch_set":98,"id":"ad8dc8fc_6f5e01a4","line":537,"range":{"start_line":537,"start_character":50,"end_line":537,"end_character":56},"in_reply_to":"21a8a5c2_2c986c3e","updated":"2021-09-07 15:37:53.000000000","message":"I\u0027d split this patch into two: 1st fixes the issue, 2nd adds API attribute and extension: easier to review and discuss. What do you think?","commit_id":"bc19ac7295f95559a8a487e0097312a6bedd57d6"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"d0939818b11e8d458e48248092e8e7b642f33c55","unresolved":true,"context_lines":[{"line_number":534,"context_line":"    routers such use case with VIPs works out-of-the-box without any additional"},{"line_number":535,"context_line":"    configuration."},{"line_number":536,"context_line":"    In case when ``enable_dvr`` is set to ``False`` in the Neutron server,"},{"line_number":537,"context_line":"    additional allowed_address_pair\u0027s attribute ``active`` will not be"},{"line_number":538,"context_line":"    available at all."},{"line_number":539,"context_line":""},{"line_number":540,"context_line":"Use case"}],"source_content_type":"text/x-rst","patch_set":98,"id":"458a91d2_5d93229b","line":537,"range":{"start_line":537,"start_character":50,"end_line":537,"end_character":56},"in_reply_to":"4aa1de7f_fb96ea43","updated":"2022-01-04 16:00:00.000000000","message":"I was thinking about it a bit more and IMHO that API change is kind of part of the bug fix. It\u0027s not necessary to make datapath working really but for users to see which port is \"active\" now and where such IP is/should be actually really running is good and may be very helpful for debugging eventual connectivity issues in such cases.\n\nIt\u0027s also good for API tests https://review.opendev.org/c/openstack/neutron-tempest-plugin/+/795358 to see if adding/modifying allowed address pairs on ports works as expected in Neutron.\n\nSo if that\u0027s not \"hard\" requirement from You I would like to see what others things about it and maybe keep all in that one patch.","commit_id":"bc19ac7295f95559a8a487e0097312a6bedd57d6"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"595eff209294102cae64ff047503494a929d0415","unresolved":true,"context_lines":[{"line_number":534,"context_line":"    routers such use case with VIPs works out-of-the-box without any additional"},{"line_number":535,"context_line":"    configuration."},{"line_number":536,"context_line":"    In case when ``enable_dvr`` is set to ``False`` in the Neutron server,"},{"line_number":537,"context_line":"    additional allowed_address_pair\u0027s attribute ``active`` will not be"},{"line_number":538,"context_line":"    available at all."},{"line_number":539,"context_line":""},{"line_number":540,"context_line":"Use case"}],"source_content_type":"text/x-rst","patch_set":98,"id":"c0a94519_76210a90","line":537,"range":{"start_line":537,"start_character":50,"end_line":537,"end_character":56},"in_reply_to":"75ce9a7d_033df2d0","updated":"2021-08-18 08:40:16.000000000","message":"TBH I\u0027m not sure how often AAPs are used for purposes not involving actual AAP address assignment inside VM. My concern is that if there are still such cases - new API attribute will be misleading and making API unclear. If there are no such use cases - we should be fine. Anyway the bug could be fixed without exposing \u0027active\u0027 in the API","commit_id":"bc19ac7295f95559a8a487e0097312a6bedd57d6"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"0c3ba9966a8ff09a1e306d45302e50474e07d96d","unresolved":true,"context_lines":[{"line_number":534,"context_line":"    routers such use case with VIPs works out-of-the-box without any additional"},{"line_number":535,"context_line":"    configuration."},{"line_number":536,"context_line":"    In case when ``enable_dvr`` is set to ``False`` in the Neutron server,"},{"line_number":537,"context_line":"    additional allowed_address_pair\u0027s attribute ``active`` will not be"},{"line_number":538,"context_line":"    available at all."},{"line_number":539,"context_line":""},{"line_number":540,"context_line":"Use case"}],"source_content_type":"text/x-rst","patch_set":98,"id":"4aa1de7f_fb96ea43","line":537,"range":{"start_line":537,"start_character":50,"end_line":537,"end_character":56},"in_reply_to":"78ec22ff_48e30c3d","updated":"2021-10-18 08:59:34.000000000","message":"Yes, thanks (as API change is not related to the bug fix and could be reviewed and agreed separately)","commit_id":"bc19ac7295f95559a8a487e0097312a6bedd57d6"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"e85c7987ff5b682030a9a5ec5be233f3f4eb2c93","unresolved":true,"context_lines":[{"line_number":534,"context_line":"    routers such use case with VIPs works out-of-the-box without any additional"},{"line_number":535,"context_line":"    configuration."},{"line_number":536,"context_line":"    In case when ``enable_dvr`` is set to ``False`` in the Neutron server,"},{"line_number":537,"context_line":"    additional allowed_address_pair\u0027s attribute ``active`` will not be"},{"line_number":538,"context_line":"    available at all."},{"line_number":539,"context_line":""},{"line_number":540,"context_line":"Use case"}],"source_content_type":"text/x-rst","patch_set":98,"id":"75ce9a7d_033df2d0","line":537,"range":{"start_line":537,"start_character":50,"end_line":537,"end_character":56},"in_reply_to":"8fac1a79_e2a6e412","updated":"2021-08-18 08:16:20.000000000","message":"I understand Your point and I know that better way could be to introduce some new attribute to port, instead of using allowed_address_pair as VIP address. But the reality is that people are using it like that since long time - see e.g. OpenShift clusters on OpenStack.\nDo You think we should introduce one additional config option to enable adding that attribute to the allowed_address_pairs? Or maybe should we do some logic like:\n\n    if agents_with_monitor_allowed_address_pair_garp !\u003d 0:\n        add_active_field_to_allowed_address_pairs()\n\nso it would be controlled by the agent\u0027s config option really. Wdyt?","commit_id":"bc19ac7295f95559a8a487e0097312a6bedd57d6"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"dce46b6be319d9a1ab5f827a2fbb9ef1e4befbbe","unresolved":true,"context_lines":[{"line_number":534,"context_line":"    routers such use case with VIPs works out-of-the-box without any additional"},{"line_number":535,"context_line":"    configuration."},{"line_number":536,"context_line":"    In case when ``enable_dvr`` is set to ``False`` in the Neutron server,"},{"line_number":537,"context_line":"    additional allowed_address_pair\u0027s attribute ``active`` will not be"},{"line_number":538,"context_line":"    available at all."},{"line_number":539,"context_line":""},{"line_number":540,"context_line":"Use case"}],"source_content_type":"text/x-rst","patch_set":98,"id":"78ec22ff_48e30c3d","line":537,"range":{"start_line":537,"start_character":50,"end_line":537,"end_character":56},"in_reply_to":"ad8dc8fc_6f5e01a4","updated":"2021-10-06 14:44:07.000000000","message":"So what You are proposing is to keep that \"active\" field hidden in this patch and add one more to add this value in the api, is that correct?","commit_id":"bc19ac7295f95559a8a487e0097312a6bedd57d6"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"cdb52a5da3c7349c97e10a3334e92cec346840f9","unresolved":true,"context_lines":[{"line_number":534,"context_line":"    routers such use case with VIPs works out-of-the-box without any additional"},{"line_number":535,"context_line":"    configuration."},{"line_number":536,"context_line":"    In case when ``enable_dvr`` is set to ``False`` in the Neutron server,"},{"line_number":537,"context_line":"    additional allowed_address_pair\u0027s attribute ``active`` will not be"},{"line_number":538,"context_line":"    available at all."},{"line_number":539,"context_line":""},{"line_number":540,"context_line":"Use case"}],"source_content_type":"text/x-rst","patch_set":98,"id":"21a8a5c2_2c986c3e","line":537,"range":{"start_line":537,"start_character":50,"end_line":537,"end_character":56},"in_reply_to":"c0a94519_76210a90","updated":"2021-09-07 13:35:12.000000000","message":"Maybe it could be a bit confusing, but from the other hand, in cases which this patch is trying to address having that knowledge on which port AAP is actually \"active\", so which mac address is populated in the qrouter namespace may be useful for debugging some connectivity issues.\nIf You are really strongly against exposing that using API, I can change that patch to hide it from there, but IMO it could be good if we expose it there and document what it means.","commit_id":"bc19ac7295f95559a8a487e0097312a6bedd57d6"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"0a16e7d9f55c5864633656b69e71a32d32fe773c","unresolved":true,"context_lines":[{"line_number":573,"context_line":"......."},{"line_number":574,"context_line":""},{"line_number":575,"context_line":"When VIP address (10.10.0.30) will be added as ``allowed_address_pair`` to"},{"line_number":576,"context_line":"the port of the ``Instance 1`` and ``Instance 2``, it will be marked as"},{"line_number":577,"context_line":"``active`` on the first port where it was added:"},{"line_number":578,"context_line":""},{"line_number":579,"context_line":".. code-block:: console"},{"line_number":580,"context_line":""}],"source_content_type":"text/x-rst","patch_set":98,"id":"a05213a3_338bb793","line":577,"range":{"start_line":576,"start_character":51,"end_line":577,"end_character":10},"updated":"2021-08-11 08:31:17.000000000","message":"What would that mean? If we decide to stay with this new property I\u0027d mark it \"active\" only when it actually becomes active (after sending/catching gARP request). Initially all are passive, aren\u0027t they?","commit_id":"bc19ac7295f95559a8a487e0097312a6bedd57d6"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"e85c7987ff5b682030a9a5ec5be233f3f4eb2c93","unresolved":true,"context_lines":[{"line_number":573,"context_line":"......."},{"line_number":574,"context_line":""},{"line_number":575,"context_line":"When VIP address (10.10.0.30) will be added as ``allowed_address_pair`` to"},{"line_number":576,"context_line":"the port of the ``Instance 1`` and ``Instance 2``, it will be marked as"},{"line_number":577,"context_line":"``active`` on the first port where it was added:"},{"line_number":578,"context_line":""},{"line_number":579,"context_line":".. code-block:: console"},{"line_number":580,"context_line":""}],"source_content_type":"text/x-rst","patch_set":98,"id":"feded47f_f915df98","line":577,"range":{"start_line":576,"start_character":51,"end_line":577,"end_character":10},"in_reply_to":"a05213a3_338bb793","updated":"2021-08-18 08:16:20.000000000","message":"Actually no - initially when allowed_address pair is added to one port it is \"active\" on that port as this port is expected to be really using that IP.\nWhen same IP is added to more than one port in same network, we will need to wait for garp to determine where it is really active so initial assumption is that first port to which it was added had this IP.","commit_id":"bc19ac7295f95559a8a487e0097312a6bedd57d6"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"cdb52a5da3c7349c97e10a3334e92cec346840f9","unresolved":true,"context_lines":[{"line_number":573,"context_line":"......."},{"line_number":574,"context_line":""},{"line_number":575,"context_line":"When VIP address (10.10.0.30) will be added as ``allowed_address_pair`` to"},{"line_number":576,"context_line":"the port of the ``Instance 1`` and ``Instance 2``, it will be marked as"},{"line_number":577,"context_line":"``active`` on the first port where it was added:"},{"line_number":578,"context_line":""},{"line_number":579,"context_line":".. code-block:: console"},{"line_number":580,"context_line":""}],"source_content_type":"text/x-rst","patch_set":98,"id":"571703fd_04c783d2","line":577,"range":{"start_line":576,"start_character":51,"end_line":577,"end_character":10},"in_reply_to":"c25af21e_5b99c365","updated":"2021-09-07 13:35:12.000000000","message":"Actually it means that MAC-IP address pair is propagated to the DVR router\u0027s namespaces so it is possible to access that IP using the DVR router.\nI updated that text a bit. I hope it will be better for You now.","commit_id":"bc19ac7295f95559a8a487e0097312a6bedd57d6"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"e6acd890da535618f6c598ba98878942fb03a6f7","unresolved":true,"context_lines":[{"line_number":573,"context_line":"......."},{"line_number":574,"context_line":""},{"line_number":575,"context_line":"When VIP address (10.10.0.30) will be added as ``allowed_address_pair`` to"},{"line_number":576,"context_line":"the port of the ``Instance 1`` and ``Instance 2``, it will be marked as"},{"line_number":577,"context_line":"``active`` on the first port where it was added:"},{"line_number":578,"context_line":""},{"line_number":579,"context_line":".. code-block:: console"},{"line_number":580,"context_line":""}],"source_content_type":"text/x-rst","patch_set":98,"id":"c25af21e_5b99c365","line":577,"range":{"start_line":576,"start_character":51,"end_line":577,"end_character":10},"in_reply_to":"feded47f_f915df98","updated":"2021-08-18 08:47:42.000000000","message":"So a user added an AAP to the VM and see it \u0027active\u0027 - her/his expectation would be that this new IP is accessible while it\u0027s actually not. That is confusing.","commit_id":"bc19ac7295f95559a8a487e0097312a6bedd57d6"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"21c7f99c195363180c6f010ee79785e175a2027c","unresolved":true,"context_lines":[{"line_number":547,"context_line":"VIP address (10.10.0.30 at the picture above) can be moved by application"},{"line_number":548,"context_line":"between ``Instance 1`` and ``Instance 2``."},{"line_number":549,"context_line":"When VIP address is configured inside the guest VM, it has to send GARP packets"},{"line_number":550,"context_line":"to inform network where IP is really configured."},{"line_number":551,"context_line":""},{"line_number":552,"context_line":""},{"line_number":553,"context_line":"Additional configuration"}],"source_content_type":"text/x-rst","patch_set":99,"id":"8ef6cbd3_481d42a9","line":550,"updated":"2021-08-25 09:05:29.000000000","message":"nit: the network","commit_id":"45b9e38e241898defa112384d5de478a3825a328"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"cdb52a5da3c7349c97e10a3334e92cec346840f9","unresolved":false,"context_lines":[{"line_number":547,"context_line":"VIP address (10.10.0.30 at the picture above) can be moved by application"},{"line_number":548,"context_line":"between ``Instance 1`` and ``Instance 2``."},{"line_number":549,"context_line":"When VIP address is configured inside the guest VM, it has to send GARP packets"},{"line_number":550,"context_line":"to inform network where IP is really configured."},{"line_number":551,"context_line":""},{"line_number":552,"context_line":""},{"line_number":553,"context_line":"Additional configuration"}],"source_content_type":"text/x-rst","patch_set":99,"id":"8d4aed10_d3404ffb","line":550,"in_reply_to":"8ef6cbd3_481d42a9","updated":"2021-09-07 13:35:12.000000000","message":"Done","commit_id":"45b9e38e241898defa112384d5de478a3825a328"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"21c7f99c195363180c6f010ee79785e175a2027c","unresolved":true,"context_lines":[{"line_number":617,"context_line":"   ..."},{"line_number":618,"context_line":"   10.10.0.30 dev qr-94b2ee8b-07 lladdr fa:16:3e:b5:92:4d PERMANENT"},{"line_number":619,"context_line":""},{"line_number":620,"context_line":"Open vSwitch agent will install additional OpenFlow rules in the br-tun bridge"},{"line_number":621,"context_line":""},{"line_number":622,"context_line":".. code-block:: console"},{"line_number":623,"context_line":""}],"source_content_type":"text/x-rst","patch_set":99,"id":"bd2e88d2_9ed7f8a9","line":620,"updated":"2021-08-25 09:05:29.000000000","message":"nit: on the compute nodes again I suppose","commit_id":"45b9e38e241898defa112384d5de478a3825a328"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"cdb52a5da3c7349c97e10a3334e92cec346840f9","unresolved":false,"context_lines":[{"line_number":617,"context_line":"   ..."},{"line_number":618,"context_line":"   10.10.0.30 dev qr-94b2ee8b-07 lladdr fa:16:3e:b5:92:4d PERMANENT"},{"line_number":619,"context_line":""},{"line_number":620,"context_line":"Open vSwitch agent will install additional OpenFlow rules in the br-tun bridge"},{"line_number":621,"context_line":""},{"line_number":622,"context_line":".. code-block:: console"},{"line_number":623,"context_line":""}],"source_content_type":"text/x-rst","patch_set":99,"id":"bb99c345_46dfeb91","line":620,"in_reply_to":"bd2e88d2_9ed7f8a9","updated":"2021-09-07 13:35:12.000000000","message":"Done","commit_id":"45b9e38e241898defa112384d5de478a3825a328"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"b92f68607b4f06af7ebafe59406d88f0e943f5f6","unresolved":true,"context_lines":[{"line_number":523,"context_line":"East-west scenario 1a: Instances with VIP configured as allowed address pair on different networks on the same router"},{"line_number":524,"context_line":"---------------------------------------------------------------------------------------------------------------------"},{"line_number":525,"context_line":""},{"line_number":526,"context_line":"It is quite common use case, for example in case of the Openshift on top"},{"line_number":527,"context_line":"OpenStack, that there is additional IP address (VIP) configured on instances\u0027"},{"line_number":528,"context_line":"ports and that VIP address is then configured e.g. by keepalived on one of the"},{"line_number":529,"context_line":"instances at one time."}],"source_content_type":"text/x-rst","patch_set":102,"id":"a2d12920_1a5fdd00","line":526,"range":{"start_line":526,"start_character":56,"end_line":526,"end_character":65},"updated":"2022-01-04 16:30:32.000000000","message":"Should use a non-RH product name to make this generic, is \u0027Kubernetes\u0027 enough?","commit_id":"57159f7fdb25a31cdac114b3fcb3f78e4a301753"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4900ca17c0602e377beed38ba487ce112d5df3f3","unresolved":true,"context_lines":[{"line_number":523,"context_line":"East-west scenario 1a: Instances with VIP configured as allowed address pair on different networks on the same router"},{"line_number":524,"context_line":"---------------------------------------------------------------------------------------------------------------------"},{"line_number":525,"context_line":""},{"line_number":526,"context_line":"It is quite common use case, for example in case of the Openshift on top"},{"line_number":527,"context_line":"OpenStack, that there is additional IP address (VIP) configured on instances\u0027"},{"line_number":528,"context_line":"ports and that VIP address is then configured e.g. by keepalived on one of the"},{"line_number":529,"context_line":"instances at one time."}],"source_content_type":"text/x-rst","patch_set":104,"id":"a79eb421_798a2ac6","line":526,"range":{"start_line":526,"start_character":56,"end_line":526,"end_character":65},"updated":"2022-01-05 19:40:23.000000000","message":"I don\u0027t see my comments from PS102 addressed, one of which was mentioning a RH product :(","commit_id":"5e2b827f5ba9b7bcc4b1d2aec9404a7ae64d6527"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"2d2b17c37f70f54dc11a738dd99a4fa14e9b9c3c","unresolved":true,"context_lines":[{"line_number":523,"context_line":"East-west scenario 1a: Instances with VIP configured as allowed address pair on different networks on the same router"},{"line_number":524,"context_line":"---------------------------------------------------------------------------------------------------------------------"},{"line_number":525,"context_line":""},{"line_number":526,"context_line":"It is quite common use case, for example in case of the Openshift on top"},{"line_number":527,"context_line":"OpenStack, that there is additional IP address (VIP) configured on instances\u0027"},{"line_number":528,"context_line":"ports and that VIP address is then configured e.g. by keepalived on one of the"},{"line_number":529,"context_line":"instances at one time."}],"source_content_type":"text/x-rst","patch_set":104,"id":"14198241_07c445b2","line":526,"range":{"start_line":526,"start_character":56,"end_line":526,"end_character":65},"in_reply_to":"a79eb421_798a2ac6","updated":"2022-01-24 11:29:20.000000000","message":"There\u0027s better, OpenStack-native example - Octavia when configured for Amphora HA, two VMs with haproxy (amphoras) are brought up, and keepalive is used for VIP management between those two.","commit_id":"5e2b827f5ba9b7bcc4b1d2aec9404a7ae64d6527"}],"neutron/agent/l3/dvr_local_router.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"b92f68607b4f06af7ebafe59406d88f0e943f5f6","unresolved":true,"context_lines":[{"line_number":368,"context_line":"                                               device\u003ddevice,"},{"line_number":369,"context_line":"                                               device_exists\u003ddevice_exists)"},{"line_number":370,"context_line":"                for allowed_address_pair in p.get(\u0027allowed_address_pairs\u0027, []):"},{"line_number":371,"context_line":"                    if allowed_address_pair[\u0027active\u0027]:"},{"line_number":372,"context_line":"                        if (\u0027/\u0027 not in str(allowed_address_pair[\u0027ip_address\u0027]) or"},{"line_number":373,"context_line":"                                common_utils.is_cidr_host("},{"line_number":374,"context_line":"                                    allowed_address_pair[\u0027ip_address\u0027])):"}],"source_content_type":"text/x-python","patch_set":102,"id":"0dd8131b_f2bde800","line":371,"range":{"start_line":371,"start_character":20,"end_line":371,"end_character":54},"updated":"2022-01-04 16:30:32.000000000","message":"nit: could have used:\n\nif not allowed_address_pair[\u0027active\u0027]:\n    continue\n\nto avoid having to indent below","commit_id":"57159f7fdb25a31cdac114b3fcb3f78e4a301753"}],"neutron/agent/rpc.py":[{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"21c7f99c195363180c6f010ee79785e175a2027c","unresolved":true,"context_lines":[{"line_number":213,"context_line":"        return cctxt.call(context, \u0027get_ports_by_vnic_type_and_host\u0027,"},{"line_number":214,"context_line":"                          vnic_type\u003dvnic_type, host\u003dhost)"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    def update_active_vip_address(self, context, mac_address, ip_address,"},{"line_number":217,"context_line":"                                  network_id):"},{"line_number":218,"context_line":"        cctxt \u003d self.client.prepare(version\u003d\u00271.10\u0027)"},{"line_number":219,"context_line":"        cctxt.cast(context, \u0027update_active_vip_address\u0027,"}],"source_content_type":"text/x-python","patch_set":99,"id":"5b64bc64_cacb628b","line":216,"range":{"start_line":216,"start_character":8,"end_line":216,"end_character":33},"updated":"2021-08-25 09:05:29.000000000","message":"nit: this VIP is from application perspective as I see it, so update_active_allowed_address_pair would fit better","commit_id":"45b9e38e241898defa112384d5de478a3825a328"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"cdb52a5da3c7349c97e10a3334e92cec346840f9","unresolved":false,"context_lines":[{"line_number":213,"context_line":"        return cctxt.call(context, \u0027get_ports_by_vnic_type_and_host\u0027,"},{"line_number":214,"context_line":"                          vnic_type\u003dvnic_type, host\u003dhost)"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    def update_active_vip_address(self, context, mac_address, ip_address,"},{"line_number":217,"context_line":"                                  network_id):"},{"line_number":218,"context_line":"        cctxt \u003d self.client.prepare(version\u003d\u00271.10\u0027)"},{"line_number":219,"context_line":"        cctxt.cast(context, \u0027update_active_vip_address\u0027,"}],"source_content_type":"text/x-python","patch_set":99,"id":"c36c3156_4219f351","line":216,"range":{"start_line":216,"start_character":8,"end_line":216,"end_character":33},"in_reply_to":"5b64bc64_cacb628b","updated":"2021-09-07 13:35:12.000000000","message":"Done","commit_id":"45b9e38e241898defa112384d5de478a3825a328"}],"neutron/common/_constants.py":[{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"87706bad8923cfbd67fc19266099578eca713e81","unresolved":false,"context_lines":[{"line_number":83,"context_line":"# multicast-addresses.xhtml#multicast-addresses-1"},{"line_number":84,"context_line":"LOCAL_NETWORK_CONTROL_BLOCK \u003d \u0027224.0.0.0/24\u0027"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"L2POP_PORTINFO_INIT \u003d (\u002700:00:00:00:00:00\u0027, \u00270.0.0.0\u0027, [])"}],"source_content_type":"text/x-python","patch_set":56,"id":"1f621f24_3a80038c","line":86,"range":{"start_line":86,"start_character":0,"end_line":86,"end_character":58},"updated":"2020-10-29 12:57:12.000000000","message":"This is nearly the same as FLOODING_ENTRY in nneutron_lib, as a follow-up can be merged in neutron-lib","commit_id":"5745bedc027adc1ad7dd9020ae5eae83e1d9ce4e"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"47968461f055fd6b054951a969e7a97c65ea7a95","unresolved":false,"context_lines":[{"line_number":83,"context_line":"# multicast-addresses.xhtml#multicast-addresses-1"},{"line_number":84,"context_line":"LOCAL_NETWORK_CONTROL_BLOCK \u003d \u0027224.0.0.0/24\u0027"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"L2POP_PORTINFO_INIT \u003d (\u002700:00:00:00:00:00\u0027, \u00270.0.0.0\u0027, [])"}],"source_content_type":"text/x-python","patch_set":56,"id":"1f621f24_6c40fb36","line":86,"range":{"start_line":86,"start_character":0,"end_line":86,"end_character":58},"in_reply_to":"1f621f24_3a80038c","updated":"2020-10-30 10:34:29.000000000","message":"I can propose that as a follow-up patch later","commit_id":"5745bedc027adc1ad7dd9020ae5eae83e1d9ce4e"}],"neutron/common/constants.py":[{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"90bece894e40add127d4af47cfe1673aed648f30","unresolved":false,"context_lines":[{"line_number":52,"context_line":"ETHERTYPE_IP \u003d 0x0800"},{"line_number":53,"context_line":"ETHERTYPE_IPV6 \u003d 0x86DD"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"FLOODING_ENTRY \u003d (\u002700:00:00:00:00:00\u0027, \u00270.0.0.0\u0027, [])"},{"line_number":56,"context_line":"IP_PROTOCOL_NAME_ALIASES \u003d {lib_constants.PROTO_NAME_IPV6_ICMP_LEGACY:"},{"line_number":57,"context_line":"                            lib_constants.PROTO_NAME_IPV6_ICMP}"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"3f79a3b5_cac4ba95","line":55,"range":{"start_line":55,"start_character":0,"end_line":55,"end_character":14},"updated":"2018-12-10 15:27:33.000000000","message":"should this go into neutron-lib instead?","commit_id":"40790c9f239b319ab99a47bdc1e083db4de959ff"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"9990ea14d728364147be01df663f01354f36803e","unresolved":false,"context_lines":[{"line_number":52,"context_line":"ETHERTYPE_IP \u003d 0x0800"},{"line_number":53,"context_line":"ETHERTYPE_IPV6 \u003d 0x86DD"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"FLOODING_ENTRY \u003d (\u002700:00:00:00:00:00\u0027, \u00270.0.0.0\u0027, [])"},{"line_number":56,"context_line":"IP_PROTOCOL_NAME_ALIASES \u003d {lib_constants.PROTO_NAME_IPV6_ICMP_LEGACY:"},{"line_number":57,"context_line":"                            lib_constants.PROTO_NAME_IPV6_ICMP}"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"3f79a3b5_d997b39a","line":55,"range":{"start_line":55,"start_character":0,"end_line":55,"end_character":14},"in_reply_to":"3f79a3b5_cac4ba95","updated":"2018-12-10 18:27:22.000000000","message":"Yes this should go eventually in neutron-lib, but it has a tight relation with the code so once this merges, we can migrate it to neutron-lib or retain it.\n\nThe reason is, this constant declaration depends on the \"PortInfo\" declared in this file below.\n\nhttps://github.com/openstack/neutron/blob/master/neutron/plugins/ml2/drivers/l2pop/rpc.py#L28 \n\nSo I would say it would have been better if they stayed with neutron rather than neutron-lib. Otherwise it is going to be a nightmare if any change occurred in \u0027PortInfo\u0027.","commit_id":"40790c9f239b319ab99a47bdc1e083db4de959ff"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"be3e161b81fdef2c76b3072cc6cd96a868f4c41d","unresolved":false,"context_lines":[{"line_number":52,"context_line":"ETHERTYPE_IP \u003d 0x0800"},{"line_number":53,"context_line":"ETHERTYPE_IPV6 \u003d 0x86DD"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"FLOODING_ENTRY \u003d (\u002700:00:00:00:00:00\u0027, \u00270.0.0.0\u0027, [])"},{"line_number":56,"context_line":"IP_PROTOCOL_NAME_ALIASES \u003d {lib_constants.PROTO_NAME_IPV6_ICMP_LEGACY:"},{"line_number":57,"context_line":"                            lib_constants.PROTO_NAME_IPV6_ICMP}"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"1f769fc5_388e78d0","line":55,"updated":"2019-01-02 21:17:18.000000000","message":"Wonder if you should use a new name?","commit_id":"2613ff583e5a33812a18affbf517431e81fc371a"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"b52ed2998b9c7e387d93af84fcdaecbbb3c63ba6","unresolved":false,"context_lines":[{"line_number":52,"context_line":"ETHERTYPE_IP \u003d 0x0800"},{"line_number":53,"context_line":"ETHERTYPE_IPV6 \u003d 0x86DD"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"FLOODING_ENTRY \u003d (\u002700:00:00:00:00:00\u0027, \u00270.0.0.0\u0027, [])"},{"line_number":56,"context_line":"IP_PROTOCOL_NAME_ALIASES \u003d {lib_constants.PROTO_NAME_IPV6_ICMP_LEGACY:"},{"line_number":57,"context_line":"                            lib_constants.PROTO_NAME_IPV6_ICMP}"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"ffd0ebdf_924ebcbf","line":55,"in_reply_to":"1f769fc5_388e78d0","updated":"2019-01-02 23:30:59.000000000","message":"What do you think, should we use a new name?","commit_id":"2613ff583e5a33812a18affbf517431e81fc371a"}],"neutron/conf/plugins/ml2/drivers/ovs_conf.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4ef904fbff36cf807a1100a1be55e342d57fefce","unresolved":true,"context_lines":[{"line_number":175,"context_line":"    cfg.BoolOpt(\u0027allowed_address_pair_arp_responder\u0027, default\u003dFalse,"},{"line_number":176,"context_line":"                help\u003d_(\"Enable local ARP responder for IP addresses which are \""},{"line_number":177,"context_line":"                       \"set in port\u0027s allowed_address_pairs. This option is \""},{"line_number":178,"context_line":"                       \"useful when e.g. keepalived with VIP is used in the \""},{"line_number":179,"context_line":"                       \"instances in the DVR based environment. \""},{"line_number":180,"context_line":"                       \"In case when neutron-openvswitch-agent will be \""},{"line_number":181,"context_line":"                       \"restarted, all configured ARP responder entries will \""}],"source_content_type":"text/x-python","patch_set":64,"id":"d59793ea_ed67d106","line":178,"range":{"start_line":178,"start_character":72,"end_line":178,"end_character":75},"updated":"2021-01-08 14:35:58.000000000","message":"remove \u0027the\u0027","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4ef904fbff36cf807a1100a1be55e342d57fefce","unresolved":true,"context_lines":[{"line_number":175,"context_line":"    cfg.BoolOpt(\u0027allowed_address_pair_arp_responder\u0027, default\u003dFalse,"},{"line_number":176,"context_line":"                help\u003d_(\"Enable local ARP responder for IP addresses which are \""},{"line_number":177,"context_line":"                       \"set in port\u0027s allowed_address_pairs. This option is \""},{"line_number":178,"context_line":"                       \"useful when e.g. keepalived with VIP is used in the \""},{"line_number":179,"context_line":"                       \"instances in the DVR based environment. \""},{"line_number":180,"context_line":"                       \"In case when neutron-openvswitch-agent will be \""},{"line_number":181,"context_line":"                       \"restarted, all configured ARP responder entries will \""}],"source_content_type":"text/x-python","patch_set":64,"id":"7c127013_024ddaae","line":178,"range":{"start_line":178,"start_character":57,"end_line":178,"end_character":60},"updated":"2021-01-08 14:35:58.000000000","message":"s/a VIP","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4ef904fbff36cf807a1100a1be55e342d57fefce","unresolved":true,"context_lines":[{"line_number":175,"context_line":"    cfg.BoolOpt(\u0027allowed_address_pair_arp_responder\u0027, default\u003dFalse,"},{"line_number":176,"context_line":"                help\u003d_(\"Enable local ARP responder for IP addresses which are \""},{"line_number":177,"context_line":"                       \"set in port\u0027s allowed_address_pairs. This option is \""},{"line_number":178,"context_line":"                       \"useful when e.g. keepalived with VIP is used in the \""},{"line_number":179,"context_line":"                       \"instances in the DVR based environment. \""},{"line_number":180,"context_line":"                       \"In case when neutron-openvswitch-agent will be \""},{"line_number":181,"context_line":"                       \"restarted, all configured ARP responder entries will \""}],"source_content_type":"text/x-python","patch_set":64,"id":"c375af2b_7ad84a8c","line":178,"range":{"start_line":178,"start_character":24,"end_line":178,"end_character":40},"updated":"2021-01-08 14:35:58.000000000","message":"s/useful, for example, when","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2372069307c1f5e7030d40cb4313588573f6b923","unresolved":false,"context_lines":[{"line_number":175,"context_line":"    cfg.BoolOpt(\u0027allowed_address_pair_arp_responder\u0027, default\u003dFalse,"},{"line_number":176,"context_line":"                help\u003d_(\"Enable local ARP responder for IP addresses which are \""},{"line_number":177,"context_line":"                       \"set in port\u0027s allowed_address_pairs. This option is \""},{"line_number":178,"context_line":"                       \"useful when e.g. keepalived with VIP is used in the \""},{"line_number":179,"context_line":"                       \"instances in the DVR based environment. \""},{"line_number":180,"context_line":"                       \"In case when neutron-openvswitch-agent will be \""},{"line_number":181,"context_line":"                       \"restarted, all configured ARP responder entries will \""}],"source_content_type":"text/x-python","patch_set":64,"id":"8c82cd23_e38d02a1","line":178,"range":{"start_line":178,"start_character":57,"end_line":178,"end_character":60},"in_reply_to":"7c127013_024ddaae","updated":"2021-01-13 11:53:59.000000000","message":"Done","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2372069307c1f5e7030d40cb4313588573f6b923","unresolved":false,"context_lines":[{"line_number":175,"context_line":"    cfg.BoolOpt(\u0027allowed_address_pair_arp_responder\u0027, default\u003dFalse,"},{"line_number":176,"context_line":"                help\u003d_(\"Enable local ARP responder for IP addresses which are \""},{"line_number":177,"context_line":"                       \"set in port\u0027s allowed_address_pairs. This option is \""},{"line_number":178,"context_line":"                       \"useful when e.g. keepalived with VIP is used in the \""},{"line_number":179,"context_line":"                       \"instances in the DVR based environment. \""},{"line_number":180,"context_line":"                       \"In case when neutron-openvswitch-agent will be \""},{"line_number":181,"context_line":"                       \"restarted, all configured ARP responder entries will \""}],"source_content_type":"text/x-python","patch_set":64,"id":"58c29eac_ad518063","line":178,"range":{"start_line":178,"start_character":24,"end_line":178,"end_character":40},"in_reply_to":"c375af2b_7ad84a8c","updated":"2021-01-13 11:53:59.000000000","message":"Done","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2372069307c1f5e7030d40cb4313588573f6b923","unresolved":false,"context_lines":[{"line_number":175,"context_line":"    cfg.BoolOpt(\u0027allowed_address_pair_arp_responder\u0027, default\u003dFalse,"},{"line_number":176,"context_line":"                help\u003d_(\"Enable local ARP responder for IP addresses which are \""},{"line_number":177,"context_line":"                       \"set in port\u0027s allowed_address_pairs. This option is \""},{"line_number":178,"context_line":"                       \"useful when e.g. keepalived with VIP is used in the \""},{"line_number":179,"context_line":"                       \"instances in the DVR based environment. \""},{"line_number":180,"context_line":"                       \"In case when neutron-openvswitch-agent will be \""},{"line_number":181,"context_line":"                       \"restarted, all configured ARP responder entries will \""}],"source_content_type":"text/x-python","patch_set":64,"id":"b82b5d5e_a4030253","line":178,"range":{"start_line":178,"start_character":72,"end_line":178,"end_character":75},"in_reply_to":"d59793ea_ed67d106","updated":"2021-01-13 11:53:59.000000000","message":"Done","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4ef904fbff36cf807a1100a1be55e342d57fefce","unresolved":true,"context_lines":[{"line_number":176,"context_line":"                help\u003d_(\"Enable local ARP responder for IP addresses which are \""},{"line_number":177,"context_line":"                       \"set in port\u0027s allowed_address_pairs. This option is \""},{"line_number":178,"context_line":"                       \"useful when e.g. keepalived with VIP is used in the \""},{"line_number":179,"context_line":"                       \"instances in the DVR based environment. \""},{"line_number":180,"context_line":"                       \"In case when neutron-openvswitch-agent will be \""},{"line_number":181,"context_line":"                       \"restarted, all configured ARP responder entries will \""},{"line_number":182,"context_line":"                       \"be lost and new GARPs needs to be send to restore \""}],"source_content_type":"text/x-python","patch_set":64,"id":"7ccb0a21_6a5dfd9a","line":179,"range":{"start_line":179,"start_character":37,"end_line":179,"end_character":50},"updated":"2021-01-08 14:35:58.000000000","message":"s/a DVR-based","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2372069307c1f5e7030d40cb4313588573f6b923","unresolved":false,"context_lines":[{"line_number":176,"context_line":"                help\u003d_(\"Enable local ARP responder for IP addresses which are \""},{"line_number":177,"context_line":"                       \"set in port\u0027s allowed_address_pairs. This option is \""},{"line_number":178,"context_line":"                       \"useful when e.g. keepalived with VIP is used in the \""},{"line_number":179,"context_line":"                       \"instances in the DVR based environment. \""},{"line_number":180,"context_line":"                       \"In case when neutron-openvswitch-agent will be \""},{"line_number":181,"context_line":"                       \"restarted, all configured ARP responder entries will \""},{"line_number":182,"context_line":"                       \"be lost and new GARPs needs to be send to restore \""}],"source_content_type":"text/x-python","patch_set":64,"id":"aceb14ac_3dfc1ea6","line":179,"range":{"start_line":179,"start_character":37,"end_line":179,"end_character":50},"in_reply_to":"7ccb0a21_6a5dfd9a","updated":"2021-01-13 11:53:59.000000000","message":"Done","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4ef904fbff36cf807a1100a1be55e342d57fefce","unresolved":true,"context_lines":[{"line_number":177,"context_line":"                       \"set in port\u0027s allowed_address_pairs. This option is \""},{"line_number":178,"context_line":"                       \"useful when e.g. keepalived with VIP is used in the \""},{"line_number":179,"context_line":"                       \"instances in the DVR based environment. \""},{"line_number":180,"context_line":"                       \"In case when neutron-openvswitch-agent will be \""},{"line_number":181,"context_line":"                       \"restarted, all configured ARP responder entries will \""},{"line_number":182,"context_line":"                       \"be lost and new GARPs needs to be send to restore \""},{"line_number":183,"context_line":"                       \"them. \""}],"source_content_type":"text/x-python","patch_set":64,"id":"459dca70_f39fd628","line":180,"range":{"start_line":180,"start_character":24,"end_line":180,"end_character":70},"updated":"2021-01-08 14:35:58.000000000","message":"s/In the case where neutron-openvswitch-agent is","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2372069307c1f5e7030d40cb4313588573f6b923","unresolved":false,"context_lines":[{"line_number":177,"context_line":"                       \"set in port\u0027s allowed_address_pairs. This option is \""},{"line_number":178,"context_line":"                       \"useful when e.g. keepalived with VIP is used in the \""},{"line_number":179,"context_line":"                       \"instances in the DVR based environment. \""},{"line_number":180,"context_line":"                       \"In case when neutron-openvswitch-agent will be \""},{"line_number":181,"context_line":"                       \"restarted, all configured ARP responder entries will \""},{"line_number":182,"context_line":"                       \"be lost and new GARPs needs to be send to restore \""},{"line_number":183,"context_line":"                       \"them. \""}],"source_content_type":"text/x-python","patch_set":64,"id":"1bdc8767_15476608","line":180,"range":{"start_line":180,"start_character":24,"end_line":180,"end_character":70},"in_reply_to":"459dca70_f39fd628","updated":"2021-01-13 11:53:59.000000000","message":"Done","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4ef904fbff36cf807a1100a1be55e342d57fefce","unresolved":true,"context_lines":[{"line_number":179,"context_line":"                       \"instances in the DVR based environment. \""},{"line_number":180,"context_line":"                       \"In case when neutron-openvswitch-agent will be \""},{"line_number":181,"context_line":"                       \"restarted, all configured ARP responder entries will \""},{"line_number":182,"context_line":"                       \"be lost and new GARPs needs to be send to restore \""},{"line_number":183,"context_line":"                       \"them. \""},{"line_number":184,"context_line":"                       \"Also after live migration of the VM which has such \""},{"line_number":185,"context_line":"                       \"an additional IP address, new GARPs needs to be send \""}],"source_content_type":"text/x-python","patch_set":64,"id":"37463c85_054b79fe","line":182,"range":{"start_line":182,"start_character":46,"end_line":182,"end_character":62},"updated":"2021-01-08 14:35:58.000000000","message":"s/need to be sent","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2372069307c1f5e7030d40cb4313588573f6b923","unresolved":false,"context_lines":[{"line_number":179,"context_line":"                       \"instances in the DVR based environment. \""},{"line_number":180,"context_line":"                       \"In case when neutron-openvswitch-agent will be \""},{"line_number":181,"context_line":"                       \"restarted, all configured ARP responder entries will \""},{"line_number":182,"context_line":"                       \"be lost and new GARPs needs to be send to restore \""},{"line_number":183,"context_line":"                       \"them. \""},{"line_number":184,"context_line":"                       \"Also after live migration of the VM which has such \""},{"line_number":185,"context_line":"                       \"an additional IP address, new GARPs needs to be send \""}],"source_content_type":"text/x-python","patch_set":64,"id":"acd484e1_dd41dd40","line":182,"range":{"start_line":182,"start_character":46,"end_line":182,"end_character":62},"in_reply_to":"37463c85_054b79fe","updated":"2021-01-13 11:53:59.000000000","message":"Done","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4ef904fbff36cf807a1100a1be55e342d57fefce","unresolved":true,"context_lines":[{"line_number":181,"context_line":"                       \"restarted, all configured ARP responder entries will \""},{"line_number":182,"context_line":"                       \"be lost and new GARPs needs to be send to restore \""},{"line_number":183,"context_line":"                       \"them. \""},{"line_number":184,"context_line":"                       \"Also after live migration of the VM which has such \""},{"line_number":185,"context_line":"                       \"an additional IP address, new GARPs needs to be send \""},{"line_number":186,"context_line":"                       \"from the VM to install new ARP responder flows.\""},{"line_number":187,"context_line":"                       \"This option requires arp_responder and l2_population \""}],"source_content_type":"text/x-python","patch_set":64,"id":"00fddca2_980c23ab","line":184,"range":{"start_line":184,"start_character":24,"end_line":184,"end_character":28},"updated":"2021-01-08 14:35:58.000000000","message":"s/Also,","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4ef904fbff36cf807a1100a1be55e342d57fefce","unresolved":true,"context_lines":[{"line_number":181,"context_line":"                       \"restarted, all configured ARP responder entries will \""},{"line_number":182,"context_line":"                       \"be lost and new GARPs needs to be send to restore \""},{"line_number":183,"context_line":"                       \"them. \""},{"line_number":184,"context_line":"                       \"Also after live migration of the VM which has such \""},{"line_number":185,"context_line":"                       \"an additional IP address, new GARPs needs to be send \""},{"line_number":186,"context_line":"                       \"from the VM to install new ARP responder flows.\""},{"line_number":187,"context_line":"                       \"This option requires arp_responder and l2_population \""}],"source_content_type":"text/x-python","patch_set":64,"id":"92ec6de5_924464fe","line":184,"range":{"start_line":184,"start_character":53,"end_line":184,"end_character":59},"updated":"2021-01-08 14:35:58.000000000","message":"s/an instance","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2372069307c1f5e7030d40cb4313588573f6b923","unresolved":false,"context_lines":[{"line_number":181,"context_line":"                       \"restarted, all configured ARP responder entries will \""},{"line_number":182,"context_line":"                       \"be lost and new GARPs needs to be send to restore \""},{"line_number":183,"context_line":"                       \"them. \""},{"line_number":184,"context_line":"                       \"Also after live migration of the VM which has such \""},{"line_number":185,"context_line":"                       \"an additional IP address, new GARPs needs to be send \""},{"line_number":186,"context_line":"                       \"from the VM to install new ARP responder flows.\""},{"line_number":187,"context_line":"                       \"This option requires arp_responder and l2_population \""}],"source_content_type":"text/x-python","patch_set":64,"id":"5f25f91a_b018a214","line":184,"range":{"start_line":184,"start_character":24,"end_line":184,"end_character":28},"in_reply_to":"00fddca2_980c23ab","updated":"2021-01-13 11:53:59.000000000","message":"Done","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2372069307c1f5e7030d40cb4313588573f6b923","unresolved":false,"context_lines":[{"line_number":181,"context_line":"                       \"restarted, all configured ARP responder entries will \""},{"line_number":182,"context_line":"                       \"be lost and new GARPs needs to be send to restore \""},{"line_number":183,"context_line":"                       \"them. \""},{"line_number":184,"context_line":"                       \"Also after live migration of the VM which has such \""},{"line_number":185,"context_line":"                       \"an additional IP address, new GARPs needs to be send \""},{"line_number":186,"context_line":"                       \"from the VM to install new ARP responder flows.\""},{"line_number":187,"context_line":"                       \"This option requires arp_responder and l2_population \""}],"source_content_type":"text/x-python","patch_set":64,"id":"7230fff0_a4849c8a","line":184,"range":{"start_line":184,"start_character":53,"end_line":184,"end_character":59},"in_reply_to":"92ec6de5_924464fe","updated":"2021-01-13 11:53:59.000000000","message":"Done","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4ef904fbff36cf807a1100a1be55e342d57fefce","unresolved":true,"context_lines":[{"line_number":182,"context_line":"                       \"be lost and new GARPs needs to be send to restore \""},{"line_number":183,"context_line":"                       \"them. \""},{"line_number":184,"context_line":"                       \"Also after live migration of the VM which has such \""},{"line_number":185,"context_line":"                       \"an additional IP address, new GARPs needs to be send \""},{"line_number":186,"context_line":"                       \"from the VM to install new ARP responder flows.\""},{"line_number":187,"context_line":"                       \"This option requires arp_responder and l2_population \""},{"line_number":188,"context_line":"                       \"to be enabled.\"))"}],"source_content_type":"text/x-python","patch_set":64,"id":"2873f3b5_6f9c0223","line":185,"range":{"start_line":185,"start_character":24,"end_line":185,"end_character":40},"updated":"2021-01-08 14:35:58.000000000","message":"s/a VIP (?)","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4ef904fbff36cf807a1100a1be55e342d57fefce","unresolved":true,"context_lines":[{"line_number":182,"context_line":"                       \"be lost and new GARPs needs to be send to restore \""},{"line_number":183,"context_line":"                       \"them. \""},{"line_number":184,"context_line":"                       \"Also after live migration of the VM which has such \""},{"line_number":185,"context_line":"                       \"an additional IP address, new GARPs needs to be send \""},{"line_number":186,"context_line":"                       \"from the VM to install new ARP responder flows.\""},{"line_number":187,"context_line":"                       \"This option requires arp_responder and l2_population \""},{"line_number":188,"context_line":"                       \"to be enabled.\"))"}],"source_content_type":"text/x-python","patch_set":64,"id":"b66dafd3_cf5c5922","line":185,"range":{"start_line":185,"start_character":72,"end_line":185,"end_character":76},"updated":"2021-01-08 14:35:58.000000000","message":"s/sent","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2372069307c1f5e7030d40cb4313588573f6b923","unresolved":false,"context_lines":[{"line_number":182,"context_line":"                       \"be lost and new GARPs needs to be send to restore \""},{"line_number":183,"context_line":"                       \"them. \""},{"line_number":184,"context_line":"                       \"Also after live migration of the VM which has such \""},{"line_number":185,"context_line":"                       \"an additional IP address, new GARPs needs to be send \""},{"line_number":186,"context_line":"                       \"from the VM to install new ARP responder flows.\""},{"line_number":187,"context_line":"                       \"This option requires arp_responder and l2_population \""},{"line_number":188,"context_line":"                       \"to be enabled.\"))"}],"source_content_type":"text/x-python","patch_set":64,"id":"7309f8aa_65b9a252","line":185,"range":{"start_line":185,"start_character":24,"end_line":185,"end_character":40},"in_reply_to":"2873f3b5_6f9c0223","updated":"2021-01-13 11:53:59.000000000","message":"Done","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2372069307c1f5e7030d40cb4313588573f6b923","unresolved":false,"context_lines":[{"line_number":182,"context_line":"                       \"be lost and new GARPs needs to be send to restore \""},{"line_number":183,"context_line":"                       \"them. \""},{"line_number":184,"context_line":"                       \"Also after live migration of the VM which has such \""},{"line_number":185,"context_line":"                       \"an additional IP address, new GARPs needs to be send \""},{"line_number":186,"context_line":"                       \"from the VM to install new ARP responder flows.\""},{"line_number":187,"context_line":"                       \"This option requires arp_responder and l2_population \""},{"line_number":188,"context_line":"                       \"to be enabled.\"))"}],"source_content_type":"text/x-python","patch_set":64,"id":"73efac78_5dea49a8","line":185,"range":{"start_line":185,"start_character":72,"end_line":185,"end_character":76},"in_reply_to":"b66dafd3_cf5c5922","updated":"2021-01-13 11:53:59.000000000","message":"Done","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4ef904fbff36cf807a1100a1be55e342d57fefce","unresolved":true,"context_lines":[{"line_number":183,"context_line":"                       \"them. \""},{"line_number":184,"context_line":"                       \"Also after live migration of the VM which has such \""},{"line_number":185,"context_line":"                       \"an additional IP address, new GARPs needs to be send \""},{"line_number":186,"context_line":"                       \"from the VM to install new ARP responder flows.\""},{"line_number":187,"context_line":"                       \"This option requires arp_responder and l2_population \""},{"line_number":188,"context_line":"                       \"to be enabled.\"))"},{"line_number":189,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":64,"id":"5e67c0a0_6ebaecfb","line":186,"range":{"start_line":186,"start_character":71,"end_line":186,"end_character":72},"updated":"2021-01-08 14:35:58.000000000","message":"missing trailing space here","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4ef904fbff36cf807a1100a1be55e342d57fefce","unresolved":true,"context_lines":[{"line_number":183,"context_line":"                       \"them. \""},{"line_number":184,"context_line":"                       \"Also after live migration of the VM which has such \""},{"line_number":185,"context_line":"                       \"an additional IP address, new GARPs needs to be send \""},{"line_number":186,"context_line":"                       \"from the VM to install new ARP responder flows.\""},{"line_number":187,"context_line":"                       \"This option requires arp_responder and l2_population \""},{"line_number":188,"context_line":"                       \"to be enabled.\"))"},{"line_number":189,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":64,"id":"7009f98a_0992fd21","line":186,"range":{"start_line":186,"start_character":33,"end_line":186,"end_character":35},"updated":"2021-01-08 14:35:58.000000000","message":"s/instance","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2372069307c1f5e7030d40cb4313588573f6b923","unresolved":false,"context_lines":[{"line_number":183,"context_line":"                       \"them. \""},{"line_number":184,"context_line":"                       \"Also after live migration of the VM which has such \""},{"line_number":185,"context_line":"                       \"an additional IP address, new GARPs needs to be send \""},{"line_number":186,"context_line":"                       \"from the VM to install new ARP responder flows.\""},{"line_number":187,"context_line":"                       \"This option requires arp_responder and l2_population \""},{"line_number":188,"context_line":"                       \"to be enabled.\"))"},{"line_number":189,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":64,"id":"13beff3f_60ff2a95","line":186,"range":{"start_line":186,"start_character":71,"end_line":186,"end_character":72},"in_reply_to":"5e67c0a0_6ebaecfb","updated":"2021-01-13 11:53:59.000000000","message":"Done","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2372069307c1f5e7030d40cb4313588573f6b923","unresolved":false,"context_lines":[{"line_number":183,"context_line":"                       \"them. \""},{"line_number":184,"context_line":"                       \"Also after live migration of the VM which has such \""},{"line_number":185,"context_line":"                       \"an additional IP address, new GARPs needs to be send \""},{"line_number":186,"context_line":"                       \"from the VM to install new ARP responder flows.\""},{"line_number":187,"context_line":"                       \"This option requires arp_responder and l2_population \""},{"line_number":188,"context_line":"                       \"to be enabled.\"))"},{"line_number":189,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":64,"id":"b6f7d012_24d5e7f9","line":186,"range":{"start_line":186,"start_character":33,"end_line":186,"end_character":35},"in_reply_to":"7009f98a_0992fd21","updated":"2021-01-13 11:53:59.000000000","message":"Done","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"b92f68607b4f06af7ebafe59406d88f0e943f5f6","unresolved":true,"context_lines":[{"line_number":227,"context_line":"                       \"GARP from such IP address, it will be processed by \""},{"line_number":228,"context_line":"                       \"the OVS Controller application and send to the \""},{"line_number":229,"context_line":"                       \"Neutron server to be set as ``active`` address pair. \""},{"line_number":230,"context_line":"                       \"It will be then populated to the DVR routers.\""},{"line_number":231,"context_line":"                       \"This option is useful, for example, \""},{"line_number":232,"context_line":"                       \"when e.g. keepalived with a VIP is used in instances \""},{"line_number":233,"context_line":"                       \"in the DVR-based environment. \""}],"source_content_type":"text/x-python","patch_set":102,"id":"7afef821_7775c279","line":230,"range":{"start_line":230,"start_character":69,"end_line":230,"end_character":70},"updated":"2022-01-04 16:30:32.000000000","message":"nit: missing trailing space","commit_id":"57159f7fdb25a31cdac114b3fcb3f78e4a301753"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"3f257acb83efcfd180f79905888b139e321f1069","unresolved":true,"context_lines":[{"line_number":229,"context_line":"                       \"Neutron server to be set as ``active`` address pair. \""},{"line_number":230,"context_line":"                       \"It will be then populated to the DVR routers.\""},{"line_number":231,"context_line":"                       \"This option is useful, for example, \""},{"line_number":232,"context_line":"                       \"when e.g. keepalived with a VIP is used in instances \""},{"line_number":233,"context_line":"                       \"in the DVR-based environment. \""},{"line_number":234,"context_line":"                       \"This option requires arp_responder.\"))"},{"line_number":235,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":103,"id":"380c3132_ca2b9d7f","line":232,"range":{"start_line":232,"start_character":29,"end_line":232,"end_character":33},"updated":"2022-01-05 09:47:05.000000000","message":"nit: one for example seems enough","commit_id":"e5390edd8ecfac84251caaa617f9f24d7cce9e5b"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"a86783260d020cb4de6f94fbe0426cc0b6216462","unresolved":false,"context_lines":[{"line_number":229,"context_line":"                       \"Neutron server to be set as ``active`` address pair. \""},{"line_number":230,"context_line":"                       \"It will be then populated to the DVR routers.\""},{"line_number":231,"context_line":"                       \"This option is useful, for example, \""},{"line_number":232,"context_line":"                       \"when e.g. keepalived with a VIP is used in instances \""},{"line_number":233,"context_line":"                       \"in the DVR-based environment. \""},{"line_number":234,"context_line":"                       \"This option requires arp_responder.\"))"},{"line_number":235,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":103,"id":"5c66bb74_6bab2500","line":232,"range":{"start_line":232,"start_character":29,"end_line":232,"end_character":33},"in_reply_to":"380c3132_ca2b9d7f","updated":"2022-01-05 15:48:08.000000000","message":"Done","commit_id":"e5390edd8ecfac84251caaa617f9f24d7cce9e5b"}],"neutron/db/allowedaddresspairs_db.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"fd8e08dbb89284f578736d0baa775063396eab04","unresolved":true,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def _set_new_active_vips(self, context,"},{"line_number":133,"context_line":"                             original_port, updated_port):"},{"line_number":134,"context_line":"        \"\"\"Check if any VIP for allowed address pair should be active."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        If there are any removed address pairs from the port, this method will"},{"line_number":137,"context_line":"        check if there are any other pairs with same IP_ADDRESS and NETWORK_ID."},{"line_number":138,"context_line":"        If yes, then it means that this was the same \"VIP\" and if now only one"},{"line_number":139,"context_line":"        such entry left in DB, it should be marked as active.\""},{"line_number":140,"context_line":"        \"\"\""},{"line_number":141,"context_line":"        old_pairs \u003d original_port.get(addr_apidef.ADDRESS_PAIRS, [])"},{"line_number":142,"context_line":"        new_pairs \u003d updated_port.get(addr_apidef.ADDRESS_PAIRS, [])"},{"line_number":143,"context_line":"        old_allowed_ips \u003d set([pair[\u0027ip_address\u0027] for pair in old_pairs])"}],"source_content_type":"text/x-python","patch_set":89,"id":"d8caaf0d_27e014d8","line":140,"range":{"start_line":134,"start_character":8,"end_line":140,"end_character":11},"updated":"2021-06-09 15:42:15.000000000","message":"if we don\u0027t want to expose active/inactive info to users this handling won\u0027t be needed, right?","commit_id":"e57d3a39a39d0bda015f2ac6abb65a1c5e07f72a"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"987936688862e3ce52994c570d23c9caac42305c","unresolved":true,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def _set_new_active_vips(self, context,"},{"line_number":133,"context_line":"                             original_port, updated_port):"},{"line_number":134,"context_line":"        \"\"\"Check if any VIP for allowed address pair should be active."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        If there are any removed address pairs from the port, this method will"},{"line_number":137,"context_line":"        check if there are any other pairs with same IP_ADDRESS and NETWORK_ID."},{"line_number":138,"context_line":"        If yes, then it means that this was the same \"VIP\" and if now only one"},{"line_number":139,"context_line":"        such entry left in DB, it should be marked as active.\""},{"line_number":140,"context_line":"        \"\"\""},{"line_number":141,"context_line":"        old_pairs \u003d original_port.get(addr_apidef.ADDRESS_PAIRS, [])"},{"line_number":142,"context_line":"        new_pairs \u003d updated_port.get(addr_apidef.ADDRESS_PAIRS, [])"},{"line_number":143,"context_line":"        old_allowed_ips \u003d set([pair[\u0027ip_address\u0027] for pair in old_pairs])"}],"source_content_type":"text/x-python","patch_set":89,"id":"d6ed10de_f9c95ade","line":140,"range":{"start_line":134,"start_character":8,"end_line":140,"end_character":11},"in_reply_to":"2a150cd1_d7eee373","updated":"2021-06-10 15:44:08.000000000","message":"TBH I would rather vote for a single mechanism to update this state as it\u0027s more robust and less prone to conflicts/races. + It adds an overhead (maybe not big but still) to the port update flow.","commit_id":"e57d3a39a39d0bda015f2ac6abb65a1c5e07f72a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"abf17b439cacbdcdc3815637337fcd48efded338","unresolved":true,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def _set_new_active_vips(self, context,"},{"line_number":133,"context_line":"                             original_port, updated_port):"},{"line_number":134,"context_line":"        \"\"\"Check if any VIP for allowed address pair should be active."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        If there are any removed address pairs from the port, this method will"},{"line_number":137,"context_line":"        check if there are any other pairs with same IP_ADDRESS and NETWORK_ID."},{"line_number":138,"context_line":"        If yes, then it means that this was the same \"VIP\" and if now only one"},{"line_number":139,"context_line":"        such entry left in DB, it should be marked as active.\""},{"line_number":140,"context_line":"        \"\"\""},{"line_number":141,"context_line":"        old_pairs \u003d original_port.get(addr_apidef.ADDRESS_PAIRS, [])"},{"line_number":142,"context_line":"        new_pairs \u003d updated_port.get(addr_apidef.ADDRESS_PAIRS, [])"},{"line_number":143,"context_line":"        old_allowed_ips \u003d set([pair[\u0027ip_address\u0027] for pair in old_pairs])"}],"source_content_type":"text/x-python","patch_set":89,"id":"2a150cd1_d7eee373","line":140,"range":{"start_line":134,"start_character":8,"end_line":140,"end_character":11},"in_reply_to":"6aa01917_c2986607","updated":"2021-06-10 15:12:32.000000000","message":"@Oleg, not exactly - as You may e.g. use VIP on couple of ports, and then remove all of them except one. So we should update that last one to be active.\nOf course application should send garp in such case so it will be updated, but why not update it faster?","commit_id":"e57d3a39a39d0bda015f2ac6abb65a1c5e07f72a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"865513d8960f9cd18c58d01ad32c3cda7906b68e","unresolved":true,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def _set_new_active_vips(self, context,"},{"line_number":133,"context_line":"                             original_port, updated_port):"},{"line_number":134,"context_line":"        \"\"\"Check if any VIP for allowed address pair should be active."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        If there are any removed address pairs from the port, this method will"},{"line_number":137,"context_line":"        check if there are any other pairs with same IP_ADDRESS and NETWORK_ID."},{"line_number":138,"context_line":"        If yes, then it means that this was the same \"VIP\" and if now only one"},{"line_number":139,"context_line":"        such entry left in DB, it should be marked as active.\""},{"line_number":140,"context_line":"        \"\"\""},{"line_number":141,"context_line":"        old_pairs \u003d original_port.get(addr_apidef.ADDRESS_PAIRS, [])"},{"line_number":142,"context_line":"        new_pairs \u003d updated_port.get(addr_apidef.ADDRESS_PAIRS, [])"},{"line_number":143,"context_line":"        old_allowed_ips \u003d set([pair[\u0027ip_address\u0027] for pair in old_pairs])"}],"source_content_type":"text/x-python","patch_set":89,"id":"6aa01917_c2986607","line":140,"range":{"start_line":134,"start_character":8,"end_line":140,"end_character":11},"in_reply_to":"d8caaf0d_27e014d8","updated":"2021-06-09 16:15:16.000000000","message":"This parameter should be read-only. But user should be able to see it.\n\nIn any case, the goal of this method is to handle one single (IP address, network ID) register active.","commit_id":"e57d3a39a39d0bda015f2ac6abb65a1c5e07f72a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"865513d8960f9cd18c58d01ad32c3cda7906b68e","unresolved":true,"context_lines":[{"line_number":147,"context_line":"            return"},{"line_number":148,"context_line":"        network_id \u003d updated_port[\u0027network_id\u0027]"},{"line_number":149,"context_line":"        for ip_address in removed_allowed_ips:"},{"line_number":150,"context_line":"            vips \u003d obj_addr_pair.AllowedAddressPair.get_objects("},{"line_number":151,"context_line":"                context, ip_address\u003dip_address, network_id\u003dnetwork_id)"},{"line_number":152,"context_line":"            if len(vips) \u003d\u003d 1:"},{"line_number":153,"context_line":"                vips[0].active \u003d True"}],"source_content_type":"text/x-python","patch_set":89,"id":"70c3db3f_bb548b20","line":150,"range":{"start_line":150,"start_character":52,"end_line":150,"end_character":63},"updated":"2021-06-09 16:15:16.000000000","message":"I would use AllowedAddressPair.count, should be faster","commit_id":"e57d3a39a39d0bda015f2ac6abb65a1c5e07f72a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"abf17b439cacbdcdc3815637337fcd48efded338","unresolved":false,"context_lines":[{"line_number":147,"context_line":"            return"},{"line_number":148,"context_line":"        network_id \u003d updated_port[\u0027network_id\u0027]"},{"line_number":149,"context_line":"        for ip_address in removed_allowed_ips:"},{"line_number":150,"context_line":"            vips \u003d obj_addr_pair.AllowedAddressPair.get_objects("},{"line_number":151,"context_line":"                context, ip_address\u003dip_address, network_id\u003dnetwork_id)"},{"line_number":152,"context_line":"            if len(vips) \u003d\u003d 1:"},{"line_number":153,"context_line":"                vips[0].active \u003d True"}],"source_content_type":"text/x-python","patch_set":89,"id":"b7ca0d2b_be500e05","line":150,"range":{"start_line":150,"start_character":52,"end_line":150,"end_character":63},"in_reply_to":"70c3db3f_bb548b20","updated":"2021-06-10 15:12:32.000000000","message":"Done","commit_id":"e57d3a39a39d0bda015f2ac6abb65a1c5e07f72a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"0eeb8fdd07073b17c528daf9156f0fb1525c20b9","unresolved":false,"context_lines":[{"line_number":147,"context_line":"            return"},{"line_number":148,"context_line":"        network_id \u003d updated_port[\u0027network_id\u0027]"},{"line_number":149,"context_line":"        for ip_address in removed_allowed_ips:"},{"line_number":150,"context_line":"            vips \u003d obj_addr_pair.AllowedAddressPair.get_objects("},{"line_number":151,"context_line":"                context, ip_address\u003dip_address, network_id\u003dnetwork_id)"},{"line_number":152,"context_line":"            if len(vips) \u003d\u003d 1:"},{"line_number":153,"context_line":"                vips[0].active \u003d True"}],"source_content_type":"text/x-python","patch_set":89,"id":"1d1cb605_ab370d24","line":150,"range":{"start_line":150,"start_character":52,"end_line":150,"end_character":63},"in_reply_to":"b7ca0d2b_be500e05","updated":"2021-06-14 08:21:28.000000000","message":"I can\u0027t use count here as I\u0027m then updating this object in L153-154","commit_id":"e57d3a39a39d0bda015f2ac6abb65a1c5e07f72a"}],"neutron/db/l3_dvr_db.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"91809a012e40096761f782005cfd42c83aa679a0","unresolved":true,"context_lines":[{"line_number":1160,"context_line":"        aa_pair_fixed_ips \u003d []"},{"line_number":1161,"context_line":"        if port_dict.get(\u0027allowed_address_pairs\u0027):"},{"line_number":1162,"context_line":"            for address_pair in port_dict[\u0027allowed_address_pairs\u0027]:"},{"line_number":1163,"context_line":"                if not address_pair.get(\u0027active\u0027, True):"},{"line_number":1164,"context_line":"                    continue"},{"line_number":1165,"context_line":"                aap_ip_cidr \u003d address_pair[\u0027ip_address\u0027].split(\"/\")"},{"line_number":1166,"context_line":"                if len(aap_ip_cidr) \u003d\u003d 1 or int(aap_ip_cidr[1]) \u003d\u003d 32:"}],"source_content_type":"text/x-python","patch_set":71,"id":"de425934_33bacd77","line":1163,"range":{"start_line":1163,"start_character":23,"end_line":1163,"end_character":55},"updated":"2021-05-13 09:49:41.000000000","message":"why address_pair.get? this should be address_pair[\u0027active\u0027], the DB must be upgraded before running this code","commit_id":"2caa855acd572f8469e4684e6a9d2f2c071ec0f8"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"36abdf7be78b6a8df7b6ab38147e2ddfe4b4d21b","unresolved":false,"context_lines":[{"line_number":1160,"context_line":"        aa_pair_fixed_ips \u003d []"},{"line_number":1161,"context_line":"        if port_dict.get(\u0027allowed_address_pairs\u0027):"},{"line_number":1162,"context_line":"            for address_pair in port_dict[\u0027allowed_address_pairs\u0027]:"},{"line_number":1163,"context_line":"                if not address_pair.get(\u0027active\u0027, True):"},{"line_number":1164,"context_line":"                    continue"},{"line_number":1165,"context_line":"                aap_ip_cidr \u003d address_pair[\u0027ip_address\u0027].split(\"/\")"},{"line_number":1166,"context_line":"                if len(aap_ip_cidr) \u003d\u003d 1 or int(aap_ip_cidr[1]) \u003d\u003d 32:"}],"source_content_type":"text/x-python","patch_set":71,"id":"9c470b8a_6385104c","line":1163,"range":{"start_line":1163,"start_character":23,"end_line":1163,"end_character":55},"in_reply_to":"de425934_33bacd77","updated":"2021-05-13 10:52:43.000000000","message":"Done","commit_id":"2caa855acd572f8469e4684e6a9d2f2c071ec0f8"}],"neutron/db/migration/alembic_migrations/versions/xena/expand/d863c3bdc0c5_add_active_allowed_address_pairs.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"91809a012e40096761f782005cfd42c83aa679a0","unresolved":true,"context_lines":[{"line_number":65,"context_line":"def upgrade():"},{"line_number":66,"context_line":"    op.add_column("},{"line_number":67,"context_line":"        TABLE,"},{"line_number":68,"context_line":"        sa.Column(\u0027network_id\u0027, sa.String(length\u003d36),"},{"line_number":69,"context_line":"                  sa.ForeignKey(\u0027networks.id\u0027, ondelete\u003d\u0027CASCADE\u0027)))"},{"line_number":70,"context_line":"    op.add_column("},{"line_number":71,"context_line":"        TABLE,"}],"source_content_type":"text/x-python","patch_set":71,"id":"3a14baaa_24be2686","line":68,"range":{"start_line":68,"start_character":19,"end_line":68,"end_character":29},"updated":"2021-05-13 09:49:41.000000000","message":"\"network_id\" should have \"index\u003dTrue\" to make queries faster filtering by this parameter","commit_id":"2caa855acd572f8469e4684e6a9d2f2c071ec0f8"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"36abdf7be78b6a8df7b6ab38147e2ddfe4b4d21b","unresolved":false,"context_lines":[{"line_number":65,"context_line":"def upgrade():"},{"line_number":66,"context_line":"    op.add_column("},{"line_number":67,"context_line":"        TABLE,"},{"line_number":68,"context_line":"        sa.Column(\u0027network_id\u0027, sa.String(length\u003d36),"},{"line_number":69,"context_line":"                  sa.ForeignKey(\u0027networks.id\u0027, ondelete\u003d\u0027CASCADE\u0027)))"},{"line_number":70,"context_line":"    op.add_column("},{"line_number":71,"context_line":"        TABLE,"}],"source_content_type":"text/x-python","patch_set":71,"id":"8417911a_d90dc000","line":68,"range":{"start_line":68,"start_character":19,"end_line":68,"end_character":29},"in_reply_to":"3a14baaa_24be2686","updated":"2021-05-13 10:52:43.000000000","message":"Done","commit_id":"2caa855acd572f8469e4684e6a9d2f2c071ec0f8"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"865513d8960f9cd18c58d01ad32c3cda7906b68e","unresolved":true,"context_lines":[{"line_number":53,"context_line":"        ports \u003d {}"},{"line_number":54,"context_line":"        for port in session.query(PORTS_TABLE_MODEL):"},{"line_number":55,"context_line":"            ports[port.id] \u003d port.network_id"},{"line_number":56,"context_line":"        for row in session.query(TABLE_MODEL):"},{"line_number":57,"context_line":"            session.execute("},{"line_number":58,"context_line":"                TABLE_MODEL.update().values("},{"line_number":59,"context_line":"                    network_id\u003dports[row.port_id]).where("}],"source_content_type":"text/x-python","patch_set":89,"id":"b1101e3a_fedf4986","line":56,"range":{"start_line":56,"start_character":12,"end_line":56,"end_character":15},"updated":"2021-06-09 16:15:16.000000000","message":"nitty nit: allowedaddresspair","commit_id":"e57d3a39a39d0bda015f2ac6abb65a1c5e07f72a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"abf17b439cacbdcdc3815637337fcd48efded338","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        ports \u003d {}"},{"line_number":54,"context_line":"        for port in session.query(PORTS_TABLE_MODEL):"},{"line_number":55,"context_line":"            ports[port.id] \u003d port.network_id"},{"line_number":56,"context_line":"        for row in session.query(TABLE_MODEL):"},{"line_number":57,"context_line":"            session.execute("},{"line_number":58,"context_line":"                TABLE_MODEL.update().values("},{"line_number":59,"context_line":"                    network_id\u003dports[row.port_id]).where("}],"source_content_type":"text/x-python","patch_set":89,"id":"637cbf2d_a1a4478a","line":56,"range":{"start_line":56,"start_character":12,"end_line":56,"end_character":15},"in_reply_to":"b1101e3a_fedf4986","updated":"2021-06-10 15:12:32.000000000","message":"Done","commit_id":"e57d3a39a39d0bda015f2ac6abb65a1c5e07f72a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"865513d8960f9cd18c58d01ad32c3cda7906b68e","unresolved":true,"context_lines":[{"line_number":57,"context_line":"            session.execute("},{"line_number":58,"context_line":"                TABLE_MODEL.update().values("},{"line_number":59,"context_line":"                    network_id\u003dports[row.port_id]).where("},{"line_number":60,"context_line":"                        TABLE_MODEL.c.port_id \u003d\u003d row[0]))"},{"line_number":61,"context_line":"    # this commit is necessary to allow further operations"},{"line_number":62,"context_line":"    session.commit()"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":89,"id":"5c1b6364_7d382e72","line":60,"range":{"start_line":60,"start_character":49,"end_line":60,"end_character":55},"updated":"2021-06-09 16:15:16.000000000","message":"nitty nit: allowedaddresspair.port_id\n\nthat way is more explicit what are we doing here","commit_id":"e57d3a39a39d0bda015f2ac6abb65a1c5e07f72a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"abf17b439cacbdcdc3815637337fcd48efded338","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            session.execute("},{"line_number":58,"context_line":"                TABLE_MODEL.update().values("},{"line_number":59,"context_line":"                    network_id\u003dports[row.port_id]).where("},{"line_number":60,"context_line":"                        TABLE_MODEL.c.port_id \u003d\u003d row[0]))"},{"line_number":61,"context_line":"    # this commit is necessary to allow further operations"},{"line_number":62,"context_line":"    session.commit()"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":89,"id":"28e87732_9e1b487c","line":60,"range":{"start_line":60,"start_character":49,"end_line":60,"end_character":55},"in_reply_to":"5c1b6364_7d382e72","updated":"2021-06-10 15:12:32.000000000","message":"Done","commit_id":"e57d3a39a39d0bda015f2ac6abb65a1c5e07f72a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"865513d8960f9cd18c58d01ad32c3cda7906b68e","unresolved":true,"context_lines":[{"line_number":60,"context_line":"                        TABLE_MODEL.c.port_id \u003d\u003d row[0]))"},{"line_number":61,"context_line":"    # this commit is necessary to allow further operations"},{"line_number":62,"context_line":"    session.commit()"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"def upgrade():"},{"line_number":66,"context_line":"    inspector \u003d reflection.Inspector.from_engine(op.get_bind())"}],"source_content_type":"text/x-python","patch_set":89,"id":"e34f796f_a39c9cd3","line":63,"updated":"2021-06-09 16:15:16.000000000","message":"question: at this point, we can have the same allowed address pair IP address assigned to several ports. In this patch terms, we can have a VIP. Because of \"server_default\u003dsa.sql.true()\", both will be active and this should never happen","commit_id":"e57d3a39a39d0bda015f2ac6abb65a1c5e07f72a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"865513d8960f9cd18c58d01ad32c3cda7906b68e","unresolved":true,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"def upgrade():"},{"line_number":66,"context_line":"    inspector \u003d reflection.Inspector.from_engine(op.get_bind())"},{"line_number":67,"context_line":"    # NOTE(slaweq): bug #1774459 is present in stable releases. Although is"},{"line_number":68,"context_line":"    # not possible to backport a patch implementing a DB change [1], we are"},{"line_number":69,"context_line":"    # planning to migrate this patch to a stable branch in a private"},{"line_number":70,"context_line":"    # repository. This check will not affect the current revision (this table"}],"source_content_type":"text/x-python","patch_set":89,"id":"72821061_9658fbc6","line":67,"range":{"start_line":67,"start_character":4,"end_line":67,"end_character":18},"updated":"2021-06-09 16:15:16.000000000","message":"+1","commit_id":"e57d3a39a39d0bda015f2ac6abb65a1c5e07f72a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"865513d8960f9cd18c58d01ad32c3cda7906b68e","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":89,"id":"c01fb51e_6f75bda6","line":87,"updated":"2021-06-09 16:15:16.000000000","message":"As commented in https://review.opendev.org/c/openstack/neutron/+/601336/89/neutron/objects/port/extensions/allowedaddresspairs.py#102\n\nMAC, IP and network_id are not nullable and this tuple, (mac, ip_address, network_id), is a unique constraint because those three parameters must always build a unique tuple","commit_id":"e57d3a39a39d0bda015f2ac6abb65a1c5e07f72a"}],"neutron/db/migration/alembic_migrations/versions/yoga/expand/d863c3bdc0c5_add_active_allowed_address_pairs.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"b92f68607b4f06af7ebafe59406d88f0e943f5f6","unresolved":true,"context_lines":[{"line_number":79,"context_line":"            TABLE,"},{"line_number":80,"context_line":"            sa.Column(\u0027active\u0027, sa.Boolean(), server_default\u003dsa.sql.true(),"},{"line_number":81,"context_line":"                      nullable\u003dFalse))"},{"line_number":82,"context_line":"    if \u0027network_id\u0027 not in current_columns:"},{"line_number":83,"context_line":"        op.add_column("},{"line_number":84,"context_line":"            TABLE,"},{"line_number":85,"context_line":"            sa.Column(\u0027network_id\u0027, sa.String(length\u003d36), index\u003dTrue))"}],"source_content_type":"text/x-python","patch_set":102,"id":"c983d785_e7028225","line":82,"updated":"2022-01-04 16:30:32.000000000","message":"So is this part related to the bug mentioned above?  The name and comments only indicate we\u0027re adding \u0027active\u0027 and not \u0027network_id\u0027.","commit_id":"57159f7fdb25a31cdac114b3fcb3f78e4a301753"}],"neutron/db/models/allowed_address_pair.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"91809a012e40096761f782005cfd42c83aa679a0","unresolved":true,"context_lines":[{"line_number":37,"context_line":"        models_v2.Network, load_on_pending\u003dTrue,"},{"line_number":38,"context_line":"        backref\u003dorm.backref(\"allowed_address_pairs\","},{"line_number":39,"context_line":"                            lazy\u003d\"subquery\", cascade\u003d\"delete\"))"},{"line_number":40,"context_line":"    revises_on_change \u003d (\u0027port\u0027, \u0027network\u0027)"}],"source_content_type":"text/x-python","patch_set":71,"id":"83cd39da_d55b3785","line":40,"range":{"start_line":40,"start_character":34,"end_line":40,"end_character":41},"updated":"2021-05-13 09:49:41.000000000","message":"Is that needed? If a network is deleted, the ports must be deleted first.","commit_id":"2caa855acd572f8469e4684e6a9d2f2c071ec0f8"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"36abdf7be78b6a8df7b6ab38147e2ddfe4b4d21b","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        models_v2.Network, load_on_pending\u003dTrue,"},{"line_number":38,"context_line":"        backref\u003dorm.backref(\"allowed_address_pairs\","},{"line_number":39,"context_line":"                            lazy\u003d\"subquery\", cascade\u003d\"delete\"))"},{"line_number":40,"context_line":"    revises_on_change \u003d (\u0027port\u0027, \u0027network\u0027)"}],"source_content_type":"text/x-python","patch_set":71,"id":"cf53a131_efd7d9d2","line":40,"range":{"start_line":40,"start_character":34,"end_line":40,"end_character":41},"in_reply_to":"83cd39da_d55b3785","updated":"2021-05-13 10:52:43.000000000","message":"You\u0027re right :) Changed.","commit_id":"2caa855acd572f8469e4684e6a9d2f2c071ec0f8"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"f5c3645dacc7ec777881efdd0d55a004c63fdc7f","unresolved":true,"context_lines":[{"line_number":36,"context_line":"                            lazy\u003d\"subquery\", cascade\u003d\"delete\"))"},{"line_number":37,"context_line":"    network \u003d orm.relationship("},{"line_number":38,"context_line":"        models_v2.Network, load_on_pending\u003dTrue,"},{"line_number":39,"context_line":"        backref\u003dorm.backref(\"allowed_address_pairs\","},{"line_number":40,"context_line":"                            lazy\u003d\"subquery\", cascade\u003d\"delete\"))"},{"line_number":41,"context_line":"    revises_on_change \u003d (\u0027port\u0027, )"}],"source_content_type":"text/x-python","patch_set":73,"id":"ebe0a4b4_5b3a771e","line":40,"range":{"start_line":39,"start_character":8,"end_line":40,"end_character":63},"updated":"2021-05-14 11:25:16.000000000","message":"do we really need this backref? It affects db query complexity/cost for networks","commit_id":"e8af9d9d6e254655433834bfe4d7332cb75338f0"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"a2fecd162795034833a5ad8f2ef7ebaf323395ec","unresolved":true,"context_lines":[{"line_number":36,"context_line":"                            lazy\u003d\"subquery\", cascade\u003d\"delete\"))"},{"line_number":37,"context_line":"    network \u003d orm.relationship("},{"line_number":38,"context_line":"        models_v2.Network, load_on_pending\u003dTrue,"},{"line_number":39,"context_line":"        backref\u003dorm.backref(\"allowed_address_pairs\","},{"line_number":40,"context_line":"                            lazy\u003d\"subquery\", cascade\u003d\"delete\"))"},{"line_number":41,"context_line":"    revises_on_change \u003d (\u0027port\u0027, )"}],"source_content_type":"text/x-python","patch_set":73,"id":"39a74321_3fbe83af","line":40,"range":{"start_line":39,"start_character":8,"end_line":40,"end_character":63},"in_reply_to":"ebe0a4b4_5b3a771e","updated":"2021-05-20 15:07:47.000000000","message":"Actually I think we don\u0027t need it as before network is deleted all ports needs to be deleted first so allowed address pairs will be cleaned already","commit_id":"e8af9d9d6e254655433834bfe4d7332cb75338f0"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"b92f68607b4f06af7ebafe59406d88f0e943f5f6","unresolved":true,"context_lines":[{"line_number":24,"context_line":"                        primary_key\u003dTrue)"},{"line_number":25,"context_line":"    mac_address \u003d sa.Column(sa.String(32), nullable\u003dFalse, primary_key\u003dTrue)"},{"line_number":26,"context_line":"    ip_address \u003d sa.Column(sa.String(64), nullable\u003dFalse, primary_key\u003dTrue)"},{"line_number":27,"context_line":"    network_id \u003d sa.Column(sa.String(36), index\u003dTrue)"},{"line_number":28,"context_line":"    active \u003d sa.Column(sa.Boolean(), nullable\u003dFalse,"},{"line_number":29,"context_line":"                       default\u003dTrue, server_default\u003dsql.true())"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":102,"id":"470e69d8_e33c376b","line":27,"updated":"2022-01-04 16:30:32.000000000","message":"But I guess we are adding \u0027network_id\u0027 so my other comment might be moot?","commit_id":"57159f7fdb25a31cdac114b3fcb3f78e4a301753"}],"neutron/extensions/_allowedaddresspairs_active_vip_lib.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"865513d8960f9cd18c58d01ad32c3cda7906b68e","unresolved":true,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"# The list of required extensions."},{"line_number":54,"context_line":"REQUIRED_EXTENSIONS \u003d ["},{"line_number":55,"context_line":"    \"allowed-address-pairs\""},{"line_number":56,"context_line":"]"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"# The list of optional extensions."}],"source_content_type":"text/x-python","patch_set":89,"id":"6cccd1d5_c99f7619","line":55,"range":{"start_line":55,"start_character":0,"end_line":55,"end_character":2},"updated":"2021-06-09 16:15:16.000000000","message":"nit: can you use neutron-lib.api.definitions.allowedaddresspairs.ALIAS ?","commit_id":"e57d3a39a39d0bda015f2ac6abb65a1c5e07f72a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"abf17b439cacbdcdc3815637337fcd48efded338","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"# The list of required extensions."},{"line_number":54,"context_line":"REQUIRED_EXTENSIONS \u003d ["},{"line_number":55,"context_line":"    \"allowed-address-pairs\""},{"line_number":56,"context_line":"]"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"# The list of optional extensions."}],"source_content_type":"text/x-python","patch_set":89,"id":"05e2a82e_39cd3c7d","line":55,"range":{"start_line":55,"start_character":0,"end_line":55,"end_character":2},"in_reply_to":"6cccd1d5_c99f7619","updated":"2021-06-10 15:12:32.000000000","message":"Done","commit_id":"e57d3a39a39d0bda015f2ac6abb65a1c5e07f72a"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"3f257acb83efcfd180f79905888b139e321f1069","unresolved":true,"context_lines":[{"line_number":10,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"# TODO(slaweq): Rehome that api definition to the neutron-lib"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from neutron_lib.api.definitions import allowedaddresspairs"},{"line_number":16,"context_line":""}],"source_content_type":"text/x-python","patch_set":103,"id":"3452c344_29807fd4","line":13,"range":{"start_line":13,"start_character":16,"end_line":13,"end_character":61},"updated":"2022-01-05 09:47:05.000000000","message":"+1","commit_id":"e5390edd8ecfac84251caaa617f9f24d7cce9e5b"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"3f257acb83efcfd180f79905888b139e321f1069","unresolved":true,"context_lines":[{"line_number":17,"context_line":"# The alias of the extension."},{"line_number":18,"context_line":"ALIAS \u003d \u0027allowed-address-pairs-active-vip\u0027"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"# Whether or not this extension is simply signaling behavior to the user"},{"line_number":21,"context_line":"# or it actively modifies the attribute map."},{"line_number":22,"context_line":"IS_SHIM_EXTENSION \u003d True"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"# Whether the extension is marking the adoption of standardattr model for"}],"source_content_type":"text/x-python","patch_set":103,"id":"10966050_64d5801c","line":21,"range":{"start_line":20,"start_character":0,"end_line":21,"end_character":44},"updated":"2022-01-05 09:47:05.000000000","message":"nit: these comments are not necessary from the template","commit_id":"e5390edd8ecfac84251caaa617f9f24d7cce9e5b"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"a86783260d020cb4de6f94fbe0426cc0b6216462","unresolved":false,"context_lines":[{"line_number":17,"context_line":"# The alias of the extension."},{"line_number":18,"context_line":"ALIAS \u003d \u0027allowed-address-pairs-active-vip\u0027"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"# Whether or not this extension is simply signaling behavior to the user"},{"line_number":21,"context_line":"# or it actively modifies the attribute map."},{"line_number":22,"context_line":"IS_SHIM_EXTENSION \u003d True"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"# Whether the extension is marking the adoption of standardattr model for"}],"source_content_type":"text/x-python","patch_set":103,"id":"784e270f_de2cc6a5","line":21,"range":{"start_line":20,"start_character":0,"end_line":21,"end_character":44},"in_reply_to":"10966050_64d5801c","updated":"2022-01-05 15:48:08.000000000","message":"Done","commit_id":"e5390edd8ecfac84251caaa617f9f24d7cce9e5b"}],"neutron/objects/port/extensions/allowedaddresspairs.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"91809a012e40096761f782005cfd42c83aa679a0","unresolved":true,"context_lines":[{"line_number":35,"context_line":"        \u0027mac_address\u0027: common_types.MACAddressField(),"},{"line_number":36,"context_line":"        \u0027ip_address\u0027: common_types.IPNetworkField(),"},{"line_number":37,"context_line":"        \u0027network_id\u0027: common_types.UUIDField(),"},{"line_number":38,"context_line":"        \u0027active\u0027: obj_fields.BooleanField(),"},{"line_number":39,"context_line":"    }"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    foreign_keys \u003d {"}],"source_content_type":"text/x-python","patch_set":71,"id":"05526a18_8df159f9","line":38,"updated":"2021-05-13 09:49:41.000000000","message":"BooleanField(default\u003dTrue)","commit_id":"2caa855acd572f8469e4684e6a9d2f2c071ec0f8"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"36abdf7be78b6a8df7b6ab38147e2ddfe4b4d21b","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        \u0027mac_address\u0027: common_types.MACAddressField(),"},{"line_number":36,"context_line":"        \u0027ip_address\u0027: common_types.IPNetworkField(),"},{"line_number":37,"context_line":"        \u0027network_id\u0027: common_types.UUIDField(),"},{"line_number":38,"context_line":"        \u0027active\u0027: obj_fields.BooleanField(),"},{"line_number":39,"context_line":"    }"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    foreign_keys \u003d {"}],"source_content_type":"text/x-python","patch_set":71,"id":"981eb74f_1436dd70","line":38,"in_reply_to":"05526a18_8df159f9","updated":"2021-05-13 10:52:43.000000000","message":"Done","commit_id":"2caa855acd572f8469e4684e6a9d2f2c071ec0f8"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"91809a012e40096761f782005cfd42c83aa679a0","unresolved":true,"context_lines":[{"line_number":58,"context_line":"            vip_pairs \u003d self.get_objects("},{"line_number":59,"context_line":"                self.obj_context, ip_address\u003dself.ip_address,"},{"line_number":60,"context_line":"                network_id\u003dself.network_id)"},{"line_number":61,"context_line":"            self.active \u003d not bool(vip_pairs)"},{"line_number":62,"context_line":"            super(AllowedAddressPair, self).create()"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    # TODO(mhickey): get rid of it once we switch the db model to using"}],"source_content_type":"text/x-python","patch_set":71,"id":"2d68af55_c0bf348a","line":61,"range":{"start_line":61,"start_character":12,"end_line":61,"end_character":45},"updated":"2021-05-13 09:49:41.000000000","message":"+1 !!","commit_id":"2caa855acd572f8469e4684e6a9d2f2c071ec0f8"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"f5c3645dacc7ec777881efdd0d55a004c63fdc7f","unresolved":true,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def create(self):"},{"line_number":56,"context_line":"        with self.db_context_writer(self.obj_context):"},{"line_number":57,"context_line":"            vip_pairs \u003d self.get_objects("},{"line_number":58,"context_line":"                self.obj_context, ip_address\u003dself.ip_address,"},{"line_number":59,"context_line":"                network_id\u003dself.network_id)"},{"line_number":60,"context_line":"            self.active \u003d not bool(vip_pairs)"},{"line_number":61,"context_line":"            super(AllowedAddressPair, self).create()"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    # TODO(mhickey): get rid of it once we switch the db model to using"}],"source_content_type":"text/x-python","patch_set":73,"id":"d329abb0_c87fe69c","line":60,"range":{"start_line":57,"start_character":12,"end_line":60,"end_character":45},"updated":"2021-05-14 11:25:16.000000000","message":"why we need to set active\u003dTrue for first allowed_address_pair and False for others? Will it reflect the actual active mac? Seems we could just create all with active\u003dTrue and let update_vip_pairs() do the job right, but I could be wrong.","commit_id":"e8af9d9d6e254655433834bfe4d7332cb75338f0"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"a2fecd162795034833a5ad8f2ef7ebaf323395ec","unresolved":true,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def create(self):"},{"line_number":56,"context_line":"        with self.db_context_writer(self.obj_context):"},{"line_number":57,"context_line":"            vip_pairs \u003d self.get_objects("},{"line_number":58,"context_line":"                self.obj_context, ip_address\u003dself.ip_address,"},{"line_number":59,"context_line":"                network_id\u003dself.network_id)"},{"line_number":60,"context_line":"            self.active \u003d not bool(vip_pairs)"},{"line_number":61,"context_line":"            super(AllowedAddressPair, self).create()"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    # TODO(mhickey): get rid of it once we switch the db model to using"}],"source_content_type":"text/x-python","patch_set":73,"id":"07dd1343_f2777852","line":60,"range":{"start_line":57,"start_character":12,"end_line":60,"end_character":45},"in_reply_to":"d329abb0_c87fe69c","updated":"2021-05-20 15:07:47.000000000","message":"We need to do that because if You are using same allowed address pair for more than one port in same network, it means that You are using it as \"vip\" ip and it can be configured only on one of the vms in the same time. If we would set active\u003dTrue for each new one we would break existing connectivity every time when the same IP would be added as allowed address pair to the new port, even if it should still works on the existing vm still.","commit_id":"e8af9d9d6e254655433834bfe4d7332cb75338f0"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"865513d8960f9cd18c58d01ad32c3cda7906b68e","unresolved":true,"context_lines":[{"line_number":27,"context_line":"@base.NeutronObjectRegistry.register"},{"line_number":28,"context_line":"class AllowedAddressPair(base.NeutronDbObject):"},{"line_number":29,"context_line":"    # Version 1.0: Initial version"},{"line_number":30,"context_line":"    # Version 1.1: Added network_id and active field"},{"line_number":31,"context_line":"    VERSION \u003d \u00271.1\u0027"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    db_model \u003d models.AllowedAddressPair"}],"source_content_type":"text/x-python","patch_set":89,"id":"5b73a196_613561eb","line":30,"range":{"start_line":30,"start_character":47,"end_line":30,"end_character":52},"updated":"2021-06-09 16:15:16.000000000","message":"fields","commit_id":"e57d3a39a39d0bda015f2ac6abb65a1c5e07f72a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"abf17b439cacbdcdc3815637337fcd48efded338","unresolved":false,"context_lines":[{"line_number":27,"context_line":"@base.NeutronObjectRegistry.register"},{"line_number":28,"context_line":"class AllowedAddressPair(base.NeutronDbObject):"},{"line_number":29,"context_line":"    # Version 1.0: Initial version"},{"line_number":30,"context_line":"    # Version 1.1: Added network_id and active field"},{"line_number":31,"context_line":"    VERSION \u003d \u00271.1\u0027"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    db_model \u003d models.AllowedAddressPair"}],"source_content_type":"text/x-python","patch_set":89,"id":"c93bd0f9_8c578133","line":30,"range":{"start_line":30,"start_character":47,"end_line":30,"end_character":52},"in_reply_to":"5b73a196_613561eb","updated":"2021-06-10 15:12:32.000000000","message":"Done","commit_id":"e57d3a39a39d0bda015f2ac6abb65a1c5e07f72a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"865513d8960f9cd18c58d01ad32c3cda7906b68e","unresolved":true,"context_lines":[{"line_number":66,"context_line":"                self.active \u003d not bool(vip_pairs)"},{"line_number":67,"context_line":"                super(AllowedAddressPair, self).create()"},{"line_number":68,"context_line":"        except orm_exc.FlushError as error:"},{"line_number":69,"context_line":"            if re.match(\u0027New instance .* with identity key .* \u0027"},{"line_number":70,"context_line":"                        \u0027conflicts with persistent instance\u0027,"},{"line_number":71,"context_line":"                        error.args[0]):"},{"line_number":72,"context_line":"                raise addr_exc.DuplicateAddressPairInRequest("},{"line_number":73,"context_line":"                    mac_address\u003dself.mac_address,"}],"source_content_type":"text/x-python","patch_set":89,"id":"3839c1cc_cda60c31","line":70,"range":{"start_line":69,"start_character":13,"end_line":70,"end_character":61},"updated":"2021-06-09 16:15:16.000000000","message":"What is this error? When that could happen?","commit_id":"e57d3a39a39d0bda015f2ac6abb65a1c5e07f72a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"abf17b439cacbdcdc3815637337fcd48efded338","unresolved":true,"context_lines":[{"line_number":66,"context_line":"                self.active \u003d not bool(vip_pairs)"},{"line_number":67,"context_line":"                super(AllowedAddressPair, self).create()"},{"line_number":68,"context_line":"        except orm_exc.FlushError as error:"},{"line_number":69,"context_line":"            if re.match(\u0027New instance .* with identity key .* \u0027"},{"line_number":70,"context_line":"                        \u0027conflicts with persistent instance\u0027,"},{"line_number":71,"context_line":"                        error.args[0]):"},{"line_number":72,"context_line":"                raise addr_exc.DuplicateAddressPairInRequest("},{"line_number":73,"context_line":"                    mac_address\u003dself.mac_address,"}],"source_content_type":"text/x-python","patch_set":89,"id":"20377d9e_7c8b3bdc","line":70,"range":{"start_line":69,"start_character":13,"end_line":70,"end_character":61},"in_reply_to":"3839c1cc_cda60c31","updated":"2021-06-10 15:12:32.000000000","message":"Please check UT neutron.tests.unit.db.test_allowedaddresspairs_db.TestAllowedAddressPairs.test_update_with_none_and_own_mac_for_duplicate_ip it is failing as it don\u0027t handle exception properly.\n\nFailed test can be find in https://f9f7144851bec42378e7-acf78f12e623b559f4ddc7a30082b17f.ssl.cf1.rackcdn.com/601336/76/check/openstack-tox-py36/a47f709/testr_results.html","commit_id":"e57d3a39a39d0bda015f2ac6abb65a1c5e07f72a"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"fd8e08dbb89284f578736d0baa775063396eab04","unresolved":true,"context_lines":[{"line_number":99,"context_line":"        return pairs"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    @classmethod"},{"line_number":102,"context_line":"    def update_vip_pairs(cls, context, mac_address, ip_address, network_id):"},{"line_number":103,"context_line":"        vip_pairs \u003d cls.get_objects("},{"line_number":104,"context_line":"            context, ip_address\u003dip_address, network_id\u003dnetwork_id)"},{"line_number":105,"context_line":"        active_vip \u003d None"}],"source_content_type":"text/x-python","patch_set":89,"id":"b2e2e171_7959e1af","line":102,"range":{"start_line":102,"start_character":39,"end_line":102,"end_character":74},"updated":"2021-06-09 15:42:15.000000000","message":"does it account for the case where these 3 parameters are the same for more than one allowed address pair?","commit_id":"e57d3a39a39d0bda015f2ac6abb65a1c5e07f72a"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"987936688862e3ce52994c570d23c9caac42305c","unresolved":true,"context_lines":[{"line_number":99,"context_line":"        return pairs"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    @classmethod"},{"line_number":102,"context_line":"    def update_vip_pairs(cls, context, mac_address, ip_address, network_id):"},{"line_number":103,"context_line":"        vip_pairs \u003d cls.get_objects("},{"line_number":104,"context_line":"            context, ip_address\u003dip_address, network_id\u003dnetwork_id)"},{"line_number":105,"context_line":"        active_vip \u003d None"}],"source_content_type":"text/x-python","patch_set":89,"id":"0ca8a4b0_bb2e5208","line":102,"range":{"start_line":102,"start_character":39,"end_line":102,"end_character":74},"in_reply_to":"24826f91_60df10a6","updated":"2021-06-10 15:44:08.000000000","message":"\u003e I\u0027m not sure if there is any use case for something like that \n\nI don\u0027t remember where it is stated but it sounds like \"If something is allowed by API be sure someone already uses it\", Akihiro could correct me here :)\n\n\u003e but in such case first found will be marked as active and others as inactive.\n\nAccording to the code below all AAPs with passed MAC and IP will be marked as active. And as in previous comment the question is what will those active/inactive mean for a user not using keepalived VIP, but some other AAP use case.\n\n\u003e As in fact only IP and MAC are needed to be populated later, it will work fine for user, no?\n\nsorry, didn\u0027t get it","commit_id":"e57d3a39a39d0bda015f2ac6abb65a1c5e07f72a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"abf17b439cacbdcdc3815637337fcd48efded338","unresolved":true,"context_lines":[{"line_number":99,"context_line":"        return pairs"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    @classmethod"},{"line_number":102,"context_line":"    def update_vip_pairs(cls, context, mac_address, ip_address, network_id):"},{"line_number":103,"context_line":"        vip_pairs \u003d cls.get_objects("},{"line_number":104,"context_line":"            context, ip_address\u003dip_address, network_id\u003dnetwork_id)"},{"line_number":105,"context_line":"        active_vip \u003d None"}],"source_content_type":"text/x-python","patch_set":89,"id":"24826f91_60df10a6","line":102,"range":{"start_line":102,"start_character":39,"end_line":102,"end_character":74},"in_reply_to":"36bf7a46_de694ed3","updated":"2021-06-10 15:12:32.000000000","message":"I\u0027m not sure if there is any use case for something like that but in such case first found will be marked as active and others as inactive. As in fact only IP and MAC are needed to be populated later, it will work fine for user, no?","commit_id":"e57d3a39a39d0bda015f2ac6abb65a1c5e07f72a"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"fb6b6ab5826e8ba8fb6b9fdfc19984902337bb59","unresolved":true,"context_lines":[{"line_number":99,"context_line":"        return pairs"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    @classmethod"},{"line_number":102,"context_line":"    def update_vip_pairs(cls, context, mac_address, ip_address, network_id):"},{"line_number":103,"context_line":"        vip_pairs \u003d cls.get_objects("},{"line_number":104,"context_line":"            context, ip_address\u003dip_address, network_id\u003dnetwork_id)"},{"line_number":105,"context_line":"        active_vip \u003d None"}],"source_content_type":"text/x-python","patch_set":89,"id":"36bf7a46_de694ed3","line":102,"range":{"start_line":102,"start_character":39,"end_line":102,"end_character":74},"in_reply_to":"3d583d42_bce5a6e1","updated":"2021-06-10 06:53:29.000000000","message":"\u003e That should never happen. The MAC address is the MAC associated to the port. You can have the same allowed address pair IP address associated to several ports in the same network but because those ports belong to the same network, the MAC must be different.\n\u003e \n\u003e The tuple (mac, ip, network) is always different, this is a unique constraint.\n\u003e \n\u003e --\u003e I\u0027ll add a note in the DB definition: this should be a unique constraint in the DB\n\nOne can specify both IP and MAC when adding allowed address pair and currently adding same IP-MAC is not restricted by DB or API. Not sure about exact use cases but if it\u0027s allowed I guess someone could use it in some scenario.","commit_id":"e57d3a39a39d0bda015f2ac6abb65a1c5e07f72a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"865513d8960f9cd18c58d01ad32c3cda7906b68e","unresolved":true,"context_lines":[{"line_number":99,"context_line":"        return pairs"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    @classmethod"},{"line_number":102,"context_line":"    def update_vip_pairs(cls, context, mac_address, ip_address, network_id):"},{"line_number":103,"context_line":"        vip_pairs \u003d cls.get_objects("},{"line_number":104,"context_line":"            context, ip_address\u003dip_address, network_id\u003dnetwork_id)"},{"line_number":105,"context_line":"        active_vip \u003d None"}],"source_content_type":"text/x-python","patch_set":89,"id":"3d583d42_bce5a6e1","line":102,"range":{"start_line":102,"start_character":39,"end_line":102,"end_character":74},"in_reply_to":"b2e2e171_7959e1af","updated":"2021-06-09 16:15:16.000000000","message":"That should never happen. The MAC address is the MAC associated to the port. You can have the same allowed address pair IP address associated to several ports in the same network but because those ports belong to the same network, the MAC must be different.\n\nThe tuple (mac, ip, network) is always different, this is a unique constraint.\n\n--\u003e I\u0027ll add a note in the DB definition: this should be a unique constraint in the DB","commit_id":"e57d3a39a39d0bda015f2ac6abb65a1c5e07f72a"}],"neutron/plugins/ml2/drivers/l2pop/mech_driver.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"91809a012e40096761f782005cfd42c83aa679a0","unresolved":true,"context_lines":[{"line_number":165,"context_line":""},{"line_number":166,"context_line":"        return True"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    def vip_ip_activated(self, context, vip_pair):"},{"line_number":169,"context_line":"        port \u003d context.current"},{"line_number":170,"context_line":"        agent_host \u003d context.host"},{"line_number":171,"context_line":"        if not agent_host:"}],"source_content_type":"text/x-python","patch_set":71,"id":"01737cf2_837ec384","line":168,"updated":"2021-05-13 09:49:41.000000000","message":"So we you are using finally the l2pop mechanism? Why don\u0027t you create an RPC call from the agent to the l3 plugin to call \"update_arp_entry_for_dvr_service_port\"?","commit_id":"2caa855acd572f8469e4684e6a9d2f2c071ec0f8"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"36abdf7be78b6a8df7b6ab38147e2ddfe4b4d21b","unresolved":false,"context_lines":[{"line_number":165,"context_line":""},{"line_number":166,"context_line":"        return True"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    def vip_ip_activated(self, context, vip_pair):"},{"line_number":169,"context_line":"        port \u003d context.current"},{"line_number":170,"context_line":"        agent_host \u003d context.host"},{"line_number":171,"context_line":"        if not agent_host:"}],"source_content_type":"text/x-python","patch_set":71,"id":"d42c3a44_78745407","line":168,"in_reply_to":"01737cf2_837ec384","updated":"2021-05-13 10:52:43.000000000","message":"It\u0027s removed in the last PS. That was leftover from the previous attempt to fix that issue :)","commit_id":"2caa855acd572f8469e4684e6a9d2f2c071ec0f8"}],"neutron/plugins/ml2/drivers/l2pop/rpc_manager/l2population_rpc.py":[{"author":{"_account_id":19307,"name":"Antonio Ojea","email":"antonio.ojea.garcia@gmail.com","username":"itsuugo"},"change_message_id":"d8718d7ef79f636d50609b4160fe9a707c234324","unresolved":false,"context_lines":[{"line_number":268,"context_line":"                    self.cleanup_tunnel_port(br, ofport, lvm.network_type)"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"    @log_helpers.log_method_call"},{"line_number":271,"context_line":"    def fdb_update(self, context, fdb_entries):"},{"line_number":272,"context_line":"        \u0027\u0027\u0027Call methods named \u0027_fdb_\u003caction\u003e\u0027."},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"        This method assumes that methods \u0027_fdb_\u003caction\u003e\u0027 are defined in class."}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_5aac4aea","line":271,"updated":"2018-11-06 12:24:17.000000000","message":"Can\u0027t we update the fdb tables directly with the garp informatiion instead of flooding the garp?","commit_id":"095daf5cb6b0aaa181deac93ff50701b91ada878"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"5da2234792c9fc942143cb21444a5c1678b6988d","unresolved":false,"context_lines":[{"line_number":268,"context_line":"                    self.cleanup_tunnel_port(br, ofport, lvm.network_type)"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"    @log_helpers.log_method_call"},{"line_number":271,"context_line":"    def fdb_update(self, context, fdb_entries):"},{"line_number":272,"context_line":"        \u0027\u0027\u0027Call methods named \u0027_fdb_\u003caction\u003e\u0027."},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"        This method assumes that methods \u0027_fdb_\u003caction\u003e\u0027 are defined in class."}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_b064964e","line":271,"in_reply_to":"3f79a3b5_5aac4aea","updated":"2018-11-06 18:12:57.000000000","message":"The original behavior of the GARP packets is not disturbed. These packets are always the broadcast packets.\nBut we intercept those packets and add the ARP response Rule.\nThe flows are actually created based on the creation of allowed_address_pairs and it is directly handled by the L2pop fdb update.","commit_id":"095daf5cb6b0aaa181deac93ff50701b91ada878"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"3f257acb83efcfd180f79905888b139e321f1069","unresolved":true,"context_lines":[{"line_number":60,"context_line":"                \u003cuuid\u003e: {"},{"line_number":61,"context_line":"                    ...,"},{"line_number":62,"context_line":"                    \u0027ports\u0027: {"},{"line_number":63,"context_line":"                        \u003cip address\u003e: [ [\u003cmac\u003e, \u003cip\u003e ],"},{"line_number":64,"context_line":"                        ..."},{"line_number":65,"context_line":"        Or in the case of an update:"},{"line_number":66,"context_line":"            { \u0027chg_ip\u0027: {"}],"source_content_type":"text/x-python","patch_set":103,"id":"7c8e7781_6546629c","line":63,"range":{"start_line":63,"start_character":38,"end_line":63,"end_character":39},"updated":"2022-01-05 09:47:05.000000000","message":"this bracket is pairless...\nWhy this change was necessary?","commit_id":"e5390edd8ecfac84251caaa617f9f24d7cce9e5b"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"a86783260d020cb4de6f94fbe0426cc0b6216462","unresolved":true,"context_lines":[{"line_number":60,"context_line":"                \u003cuuid\u003e: {"},{"line_number":61,"context_line":"                    ...,"},{"line_number":62,"context_line":"                    \u0027ports\u0027: {"},{"line_number":63,"context_line":"                        \u003cip address\u003e: [ [\u003cmac\u003e, \u003cip\u003e ],"},{"line_number":64,"context_line":"                        ..."},{"line_number":65,"context_line":"        Or in the case of an update:"},{"line_number":66,"context_line":"            { \u0027chg_ip\u0027: {"}],"source_content_type":"text/x-python","patch_set":103,"id":"702175f2_260a16b6","line":63,"range":{"start_line":63,"start_character":38,"end_line":63,"end_character":39},"in_reply_to":"7c8e7781_6546629c","updated":"2022-01-05 15:48:08.000000000","message":"It was leftover from the previous approach to solve that issue","commit_id":"e5390edd8ecfac84251caaa617f9f24d7cce9e5b"}],"neutron/plugins/ml2/drivers/linuxbridge/agent/linuxbridge_neutron_agent.py":[{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"87706bad8923cfbd67fc19266099578eca713e81","unresolved":false,"context_lines":[{"line_number":710,"context_line":"            return False"},{"line_number":711,"context_line":""},{"line_number":712,"context_line":"        try:"},{"line_number":713,"context_line":"            bridge_lib.FdbInterface.append(constants.FLOODING_ENTRY[0],"},{"line_number":714,"context_line":"                                           test_iface, \u00271.1.1.1\u0027,"},{"line_number":715,"context_line":"                                           log_fail_as_error\u003dFalse)"},{"line_number":716,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":56,"id":"1f621f24_ee089029","line":713,"range":{"start_line":713,"start_character":43,"end_line":713,"end_character":70},"updated":"2020-10-29 12:57:12.000000000","message":"ditto","commit_id":"5745bedc027adc1ad7dd9020ae5eae83e1d9ce4e"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"87706bad8923cfbd67fc19266099578eca713e81","unresolved":false,"context_lines":[{"line_number":775,"context_line":""},{"line_number":776,"context_line":"    def add_fdb_entries(self, agent_ip, ports, interface):"},{"line_number":777,"context_line":"        for mac, ip, _unused in ports:"},{"line_number":778,"context_line":"            if mac !\u003d constants.FLOODING_ENTRY[0]:"},{"line_number":779,"context_line":"                self.add_fdb_ip_entry(mac, ip, interface)"},{"line_number":780,"context_line":"                bridge_lib.FdbInterface.replace(mac, interface, agent_ip,"},{"line_number":781,"context_line":"                                                check_exit_code\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":56,"id":"1f621f24_da090f32","line":778,"range":{"start_line":778,"start_character":22,"end_line":778,"end_character":46},"updated":"2020-10-29 12:57:12.000000000","message":"nit: This can be changed to L2POP_PORTINFO_INIT[0] as well","commit_id":"5745bedc027adc1ad7dd9020ae5eae83e1d9ce4e"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"47968461f055fd6b054951a969e7a97c65ea7a95","unresolved":false,"context_lines":[{"line_number":775,"context_line":""},{"line_number":776,"context_line":"    def add_fdb_entries(self, agent_ip, ports, interface):"},{"line_number":777,"context_line":"        for mac, ip, _unused in ports:"},{"line_number":778,"context_line":"            if mac !\u003d constants.FLOODING_ENTRY[0]:"},{"line_number":779,"context_line":"                self.add_fdb_ip_entry(mac, ip, interface)"},{"line_number":780,"context_line":"                bridge_lib.FdbInterface.replace(mac, interface, agent_ip,"},{"line_number":781,"context_line":"                                                check_exit_code\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":56,"id":"1f621f24_8c47574c","line":778,"range":{"start_line":778,"start_character":22,"end_line":778,"end_character":46},"in_reply_to":"1f621f24_da090f32","updated":"2020-10-30 10:34:29.000000000","message":"yes, but why change it?","commit_id":"5745bedc027adc1ad7dd9020ae5eae83e1d9ce4e"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"87706bad8923cfbd67fc19266099578eca713e81","unresolved":false,"context_lines":[{"line_number":789,"context_line":""},{"line_number":790,"context_line":"    def remove_fdb_entries(self, agent_ip, ports, interface):"},{"line_number":791,"context_line":"        for mac, ip, _unused in ports:"},{"line_number":792,"context_line":"            if mac !\u003d constants.FLOODING_ENTRY[0]:"},{"line_number":793,"context_line":"                self.remove_fdb_ip_entry(mac, ip, interface)"},{"line_number":794,"context_line":"                bridge_lib.FdbInterface.delete(mac, interface, agent_ip,"},{"line_number":795,"context_line":"                                               check_exit_code\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":56,"id":"1f621f24_3a07631f","line":792,"range":{"start_line":792,"start_character":22,"end_line":792,"end_character":49},"updated":"2020-10-29 12:57:12.000000000","message":"ditto","commit_id":"5745bedc027adc1ad7dd9020ae5eae83e1d9ce4e"}],"neutron/plugins/ml2/drivers/openvswitch/agent/common/constants.py":[{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"8283f40355de9073d25b245eefa35afd456d18ad","unresolved":false,"context_lines":[{"line_number":123,"context_line":"    ARP_RESPONDER,"},{"line_number":124,"context_line":"    FLOOD_TO_TUN)"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"GARP_SNOOP_TABLE_EGRESS \u003d 26"},{"line_number":127,"context_line":"GARP_SNOOP_TABLE_INGRESS \u003d 27"},{"line_number":128,"context_line":"# --- Physical Bridges (phys_brs)"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"# Various tables for DVR use of physical bridge flows"}],"source_content_type":"text/x-python","patch_set":42,"id":"3fa7e38b_d9e2f836","line":127,"range":{"start_line":126,"start_character":0,"end_line":127,"end_character":29},"updated":"2020-01-15 02:06:36.000000000","message":"Should these be added to *_ALL_TABLES tuple so during the agent restart it can clean up the stable flows?","commit_id":"3cd8b329e999edbfc99b0f8b121f4aefe3a8ca29"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"c737f7efdb1f524bafb4570af401b51e8ff713ff","unresolved":false,"context_lines":[{"line_number":130,"context_line":"    ARP_RESPONDER,"},{"line_number":131,"context_line":"    FLOOD_TO_TUN)"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"GARP_SNOOP_TABLE_EGRESS \u003d 26"},{"line_number":134,"context_line":"GARP_SNOOP_TABLE_INGRESS \u003d 27"},{"line_number":135,"context_line":"# --- Physical Bridges (phys_brs)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"# Various tables for DVR use of physical bridge flows"}],"source_content_type":"text/x-python","patch_set":57,"id":"1f621f24_233e68b7","line":134,"range":{"start_line":133,"start_character":0,"end_line":134,"end_character":29},"updated":"2020-11-16 01:56:20.000000000","message":"These two new tables should be added to related TUN_BR_ALL_TABLES list to make the stable flows cleanup process working table by table. And these should be moved ahead of the TUN_BR_ALL_TABLES.","commit_id":"c693f5325bc06ebafe8cc56eea4eb432b524c1f9"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2d01c78583a2476bccc81bc371eb02b3a91f56f0","unresolved":false,"context_lines":[{"line_number":130,"context_line":"    ARP_RESPONDER,"},{"line_number":131,"context_line":"    FLOOD_TO_TUN)"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"GARP_SNOOP_TABLE_EGRESS \u003d 26"},{"line_number":134,"context_line":"GARP_SNOOP_TABLE_INGRESS \u003d 27"},{"line_number":135,"context_line":"# --- Physical Bridges (phys_brs)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"# Various tables for DVR use of physical bridge flows"}],"source_content_type":"text/x-python","patch_set":57,"id":"1f621f24_0471a076","line":134,"range":{"start_line":133,"start_character":0,"end_line":134,"end_character":29},"in_reply_to":"1f621f24_233e68b7","updated":"2020-11-19 13:06:24.000000000","message":"Done","commit_id":"c693f5325bc06ebafe8cc56eea4eb432b524c1f9"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"a42a03bba3a9b488881d302e07b6df928cd7b027","unresolved":true,"context_lines":[{"line_number":117,"context_line":"ARP_RESPONDER \u003d 21"},{"line_number":118,"context_line":"FLOOD_TO_TUN \u003d 22"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"GARP_SNOOP_TABLE_EGRESS \u003d 26"},{"line_number":121,"context_line":"GARP_SNOOP_TABLE_INGRESS \u003d 27"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"TUN_BR_ALL_TABLES \u003d ("},{"line_number":124,"context_line":"    LOCAL_SWITCHING,"}],"source_content_type":"text/x-python","patch_set":59,"id":"b025dfcd_fb841d95","line":121,"range":{"start_line":120,"start_character":0,"end_line":121,"end_character":29},"updated":"2020-11-25 05:19:30.000000000","message":"My test shows that the flows installed in these tables are totally same.\n\n cookie\u003d0x786dd3533bea3b3b, duration\u003d21449.441s, table\u003d26, n_packets\u003d2, n_bytes\u003d84, priority\u003d1,arp,dl_dst\u003dff:ff:ff:ff:ff:ff,arp_spa\u003d192.168.111.111,arp_tpa\u003d192.168.111.111 actions\u003dCONTROLLER:0\n cookie\u003d0x786dd3533bea3b3b, duration\u003d21449.438s, table\u003d27, n_packets\u003d0, n_bytes\u003d0, priority\u003d1,arp,dl_dst\u003dff:ff:ff:ff:ff:ff,arp_spa\u003d192.168.111.111,arp_tpa\u003d192.168.111.111 actions\u003dCONTROLLER:0\n\nSo IMO, we can merge these two tables, since they have one single same flow entry.","commit_id":"e22cf3757da8b6507d4ff62be56c459d990aa7bf"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"1de623c469a03a760de903d9f6c588c7d8b1caf8","unresolved":false,"context_lines":[{"line_number":117,"context_line":"ARP_RESPONDER \u003d 21"},{"line_number":118,"context_line":"FLOOD_TO_TUN \u003d 22"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"GARP_SNOOP_TABLE_EGRESS \u003d 26"},{"line_number":121,"context_line":"GARP_SNOOP_TABLE_INGRESS \u003d 27"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"TUN_BR_ALL_TABLES \u003d ("},{"line_number":124,"context_line":"    LOCAL_SWITCHING,"}],"source_content_type":"text/x-python","patch_set":59,"id":"f8856251_a74cf95e","line":121,"range":{"start_line":120,"start_character":0,"end_line":121,"end_character":29},"in_reply_to":"b025dfcd_fb841d95","updated":"2020-12-10 13:53:03.000000000","message":"Done","commit_id":"e22cf3757da8b6507d4ff62be56c459d990aa7bf"}],"neutron/plugins/ml2/drivers/openvswitch/agent/openflow/native/base_oskenapp.py":[{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"2e73a34b15f623c6fddff40cec4b1f5643075840","unresolved":false,"context_lines":[{"line_number":22,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class BaseNeutronAgentOSKenApp(app_manager.OSKenApp):"},{"line_number":26,"context_line":"    OFP_VERSIONS \u003d [ofproto_v1_3.OFP_VERSION]"},{"line_number":27,"context_line":"    packet_in_handlers \u003d []"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def register_packet_in_handler(self, caller):"},{"line_number":30,"context_line":"        self.packet_in_handlers.append(caller)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def unregister_packet_in_handler(self, caller):"},{"line_number":33,"context_line":"        self.packet_in_handlers.remove(caller)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    @handler.set_ev_cls(ofp_event.EventOFPPacketIn, handler.MAIN_DISPATCHER)"},{"line_number":36,"context_line":"    def packet_in_handler(self, ev):"},{"line_number":37,"context_line":"        LOG.debug(\"Registered packet in handlers: \""},{"line_number":38,"context_line":"                  \"%s\", self.packet_in_handlers)"},{"line_number":39,"context_line":"        for caller in self.packet_in_handlers:"},{"line_number":40,"context_line":"            caller(ev)"}],"source_content_type":"text/x-python","patch_set":49,"id":"9f560f44_5c90df4e","line":40,"range":{"start_line":25,"start_character":0,"end_line":40,"end_character":22},"updated":"2020-09-22 09:41:42.000000000","message":"nit: this seems to be unrelated to the change.","commit_id":"67c0faa1bef3daa3270fbf995f0b374407911745"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"d59964534f0ee6cdcb9947b5573cc530c14b6b5f","unresolved":false,"context_lines":[{"line_number":22,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class BaseNeutronAgentOSKenApp(app_manager.OSKenApp):"},{"line_number":26,"context_line":"    OFP_VERSIONS \u003d [ofproto_v1_3.OFP_VERSION]"},{"line_number":27,"context_line":"    packet_in_handlers \u003d []"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def register_packet_in_handler(self, caller):"},{"line_number":30,"context_line":"        self.packet_in_handlers.append(caller)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def unregister_packet_in_handler(self, caller):"},{"line_number":33,"context_line":"        self.packet_in_handlers.remove(caller)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    @handler.set_ev_cls(ofp_event.EventOFPPacketIn, handler.MAIN_DISPATCHER)"},{"line_number":36,"context_line":"    def packet_in_handler(self, ev):"},{"line_number":37,"context_line":"        LOG.debug(\"Registered packet in handlers: \""},{"line_number":38,"context_line":"                  \"%s\", self.packet_in_handlers)"},{"line_number":39,"context_line":"        for caller in self.packet_in_handlers:"},{"line_number":40,"context_line":"            caller(ev)"}],"source_content_type":"text/x-python","patch_set":49,"id":"9f560f44_f4ce0359","line":40,"range":{"start_line":25,"start_character":0,"end_line":40,"end_character":22},"in_reply_to":"9f560f44_5c90df4e","updated":"2020-09-23 20:40:12.000000000","message":"it is related becasuse I want to reuse this in both \tneutron/services/logapi/drivers/openvswitch/log_oskenapp.py and neutron/services/logapi/drivers/openvswitch/log_oskenapp.py","commit_id":"67c0faa1bef3daa3270fbf995f0b374407911745"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"ab6db9996ed68ea3bba091d4da1c32684d7f811d","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    @handler.set_ev_cls(ofp_event.EventOFPPacketIn, handler.MAIN_DISPATCHER)"},{"line_number":36,"context_line":"    def packet_in_handler(self, ev):"},{"line_number":37,"context_line":"        LOG.debug(\"Registered packet in handlers: \""},{"line_number":38,"context_line":"                  \"%s\", self.packet_in_handlers)"},{"line_number":39,"context_line":"        for caller in self.packet_in_handlers:"},{"line_number":40,"context_line":"            caller(ev)"}],"source_content_type":"text/x-python","patch_set":53,"id":"9f560f44_db56e72a","line":38,"updated":"2020-10-05 13:30:56.000000000","message":"I\u0027m guessing this was here for debugging?  Else won\u0027t this get logged for every packet coming through this code?","commit_id":"a509717b5e525fe9e720f3e6a5aa0cfe35edc236"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"0db9e1c638592b5e9d6cf125dd81c5ee8fd5bee4","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    @handler.set_ev_cls(ofp_event.EventOFPPacketIn, handler.MAIN_DISPATCHER)"},{"line_number":36,"context_line":"    def packet_in_handler(self, ev):"},{"line_number":37,"context_line":"        LOG.debug(\"Registered packet in handlers: \""},{"line_number":38,"context_line":"                  \"%s\", self.packet_in_handlers)"},{"line_number":39,"context_line":"        for caller in self.packet_in_handlers:"},{"line_number":40,"context_line":"            caller(ev)"}],"source_content_type":"text/x-python","patch_set":53,"id":"9f560f44_1334bbab","line":38,"in_reply_to":"9f560f44_db56e72a","updated":"2020-10-12 07:54:43.000000000","message":"True. I removed it","commit_id":"a509717b5e525fe9e720f3e6a5aa0cfe35edc236"}],"neutron/plugins/ml2/drivers/openvswitch/agent/openflow/native/br_dvr_process.py":[{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"e260714afeee6511d1602474372957c1d29745a6","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        (_dp, ofp, ofpp) \u003d self._get_dp()"},{"line_number":38,"context_line":"        match \u003d self._dvr_process_ipv4_match(ofp, ofpp,"},{"line_number":39,"context_line":"            vlan_tag\u003dvlan_tag, gateway_ip\u003dgateway_ip)"},{"line_number":40,"context_line":"        self.install_drop(table_id\u003dself.dvr_process_table_id,"},{"line_number":41,"context_line":"                          priority\u003d3,"},{"line_number":42,"context_line":"                          match\u003dmatch)"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"3f79a3b5_ad7c8ae9","side":"PARENT","line":40,"updated":"2018-12-14 19:36:22.000000000","message":"Do we want to lose this line? Why are we operating against the FLOOD_TO_TUN tables (26 I think....) instead of this table? Don\u0027t we want both, or am I missing something?","commit_id":"9688832fc9a4237d4318ce39404a2db7209dffbc"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"232b6ced6bd244c41f6566b04b50e1dd628b276a","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        (_dp, ofp, ofpp) \u003d self._get_dp()"},{"line_number":38,"context_line":"        match \u003d self._dvr_process_ipv4_match(ofp, ofpp,"},{"line_number":39,"context_line":"            vlan_tag\u003dvlan_tag, gateway_ip\u003dgateway_ip)"},{"line_number":40,"context_line":"        self.install_drop(table_id\u003dself.dvr_process_table_id,"},{"line_number":41,"context_line":"                          priority\u003d3,"},{"line_number":42,"context_line":"                          match\u003dmatch)"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"3f79a3b5_d65b7521","side":"PARENT","line":40,"in_reply_to":"3f79a3b5_ad7c8ae9","updated":"2018-12-17 18:06:56.000000000","message":"We do have both the table, but instead of applying the filters here, we are applying it at the end after the packets hit the ARP responder and before it is let out on the tunnel.","commit_id":"9688832fc9a4237d4318ce39404a2db7209dffbc"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"e260714afeee6511d1602474372957c1d29745a6","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        (_dp, ofp, ofpp) \u003d self._get_dp()"},{"line_number":46,"context_line":"        match \u003d self._dvr_process_ipv4_match(ofp, ofpp,"},{"line_number":47,"context_line":"            vlan_tag\u003dvlan_tag, gateway_ip\u003dgateway_ip)"},{"line_number":48,"context_line":"        self.uninstall_flows(table_id\u003dself.dvr_process_table_id,"},{"line_number":49,"context_line":"                             match\u003dmatch)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":26,"id":"3f79a3b5_4d637647","side":"PARENT","line":48,"updated":"2018-12-14 19:36:22.000000000","message":"ditto","commit_id":"9688832fc9a4237d4318ce39404a2db7209dffbc"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"232b6ced6bd244c41f6566b04b50e1dd628b276a","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        (_dp, ofp, ofpp) \u003d self._get_dp()"},{"line_number":46,"context_line":"        match \u003d self._dvr_process_ipv4_match(ofp, ofpp,"},{"line_number":47,"context_line":"            vlan_tag\u003dvlan_tag, gateway_ip\u003dgateway_ip)"},{"line_number":48,"context_line":"        self.uninstall_flows(table_id\u003dself.dvr_process_table_id,"},{"line_number":49,"context_line":"                             match\u003dmatch)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":26,"id":"3f79a3b5_9655fdef","side":"PARENT","line":48,"in_reply_to":"3f79a3b5_4d637647","updated":"2018-12-17 18:06:56.000000000","message":"Same as above.","commit_id":"9688832fc9a4237d4318ce39404a2db7209dffbc"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"e260714afeee6511d1602474372957c1d29745a6","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        (_dp, ofp, ofpp) \u003d self._get_dp()"},{"line_number":62,"context_line":"        match \u003d self._dvr_process_ipv6_match(ofp, ofpp,"},{"line_number":63,"context_line":"            vlan_tag\u003dvlan_tag, gateway_mac\u003dgateway_mac)"},{"line_number":64,"context_line":"        self.install_drop(table_id\u003dself.dvr_process_table_id, priority\u003d3,"},{"line_number":65,"context_line":"                          match\u003dmatch)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def delete_dvr_process_ipv6(self, vlan_tag, gateway_mac):"}],"source_content_type":"text/x-python","patch_set":26,"id":"3f79a3b5_6d5e727d","side":"PARENT","line":64,"updated":"2018-12-14 19:36:22.000000000","message":"ditto","commit_id":"9688832fc9a4237d4318ce39404a2db7209dffbc"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"232b6ced6bd244c41f6566b04b50e1dd628b276a","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        (_dp, ofp, ofpp) \u003d self._get_dp()"},{"line_number":62,"context_line":"        match \u003d self._dvr_process_ipv6_match(ofp, ofpp,"},{"line_number":63,"context_line":"            vlan_tag\u003dvlan_tag, gateway_mac\u003dgateway_mac)"},{"line_number":64,"context_line":"        self.install_drop(table_id\u003dself.dvr_process_table_id, priority\u003d3,"},{"line_number":65,"context_line":"                          match\u003dmatch)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def delete_dvr_process_ipv6(self, vlan_tag, gateway_mac):"}],"source_content_type":"text/x-python","patch_set":26,"id":"3f79a3b5_56952592","side":"PARENT","line":64,"in_reply_to":"3f79a3b5_6d5e727d","updated":"2018-12-17 18:06:56.000000000","message":"Same as above.","commit_id":"9688832fc9a4237d4318ce39404a2db7209dffbc"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"e260714afeee6511d1602474372957c1d29745a6","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        (_dp, ofp, ofpp) \u003d self._get_dp()"},{"line_number":69,"context_line":"        match \u003d self._dvr_process_ipv6_match(ofp, ofpp,"},{"line_number":70,"context_line":"            vlan_tag\u003dvlan_tag, gateway_mac\u003dgateway_mac)"},{"line_number":71,"context_line":"        self.uninstall_flows(table_id\u003dself.dvr_process_table_id,"},{"line_number":72,"context_line":"                             match\u003dmatch)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":26,"id":"3f79a3b5_2d687a1d","side":"PARENT","line":71,"updated":"2018-12-14 19:36:22.000000000","message":"ditto","commit_id":"9688832fc9a4237d4318ce39404a2db7209dffbc"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"232b6ced6bd244c41f6566b04b50e1dd628b276a","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        (_dp, ofp, ofpp) \u003d self._get_dp()"},{"line_number":69,"context_line":"        match \u003d self._dvr_process_ipv6_match(ofp, ofpp,"},{"line_number":70,"context_line":"            vlan_tag\u003dvlan_tag, gateway_mac\u003dgateway_mac)"},{"line_number":71,"context_line":"        self.uninstall_flows(table_id\u003dself.dvr_process_table_id,"},{"line_number":72,"context_line":"                             match\u003dmatch)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":26,"id":"3f79a3b5_f69b11c4","side":"PARENT","line":71,"in_reply_to":"3f79a3b5_2d687a1d","updated":"2018-12-17 18:06:56.000000000","message":"Same as above.","commit_id":"9688832fc9a4237d4318ce39404a2db7209dffbc"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"e3d127ff4139cbef9b34bd8c89c9a7feba255cb1","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        (_dp, ofp, ofpp) \u003d self._get_dp()"},{"line_number":64,"context_line":"        match \u003d self._dvr_process_ipv6_match(ofp, ofpp,"},{"line_number":65,"context_line":"            vlan_tag\u003dvlan_tag, gateway_mac\u003dgateway_mac)"},{"line_number":66,"context_line":"        self.install_drop(table_id\u003dconstants.FLOOD_TO_TUN, priority\u003d3,"},{"line_number":67,"context_line":"                          match\u003dmatch)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def delete_dvr_process_ipv6(self, vlan_tag, gateway_mac):"}],"source_content_type":"text/x-python","patch_set":28,"id":"3f79a3b5_9502b30c","line":66,"updated":"2018-12-18 23:45:44.000000000","message":"Maybe we\u0027ve been over this before, so feel free to disregard. What are the implications of this action being performed on IPv6 traffic? We don\u0027t seem to have rules to handle neighbor discovery like we do ARP, so I\u0027m not sure how this behaves. Unless we handle IPv6 address pairs, shouldn\u0027t this just go to self.dvr_process_table_id?","commit_id":"b7fdc8cb885a1639e073f31ba102292600115863"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"9a91b4d1b03219f14bd9af4262c39d0b3f21e343","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        (_dp, ofp, ofpp) \u003d self._get_dp()"},{"line_number":64,"context_line":"        match \u003d self._dvr_process_ipv6_match(ofp, ofpp,"},{"line_number":65,"context_line":"            vlan_tag\u003dvlan_tag, gateway_mac\u003dgateway_mac)"},{"line_number":66,"context_line":"        self.install_drop(table_id\u003dconstants.FLOOD_TO_TUN, priority\u003d3,"},{"line_number":67,"context_line":"                          match\u003dmatch)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def delete_dvr_process_ipv6(self, vlan_tag, gateway_mac):"}],"source_content_type":"text/x-python","patch_set":28,"id":"3f79a3b5_9de5e33f","line":66,"in_reply_to":"3f79a3b5_9502b30c","updated":"2018-12-19 22:02:31.000000000","message":"Not sure at this point.","commit_id":"b7fdc8cb885a1639e073f31ba102292600115863"}],"neutron/plugins/ml2/drivers/openvswitch/agent/openflow/native/br_tun.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"9bdf5eaa06b565d41691bae63dcd75c9a8aecc5c","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            self.install_goto(dest_table_id\u003dconstants.GARP_SNOOP_TABLE,"},{"line_number":70,"context_line":"                              table_id\u003dconstants.PATCH_LV_TO_TUN,"},{"line_number":71,"context_line":"                              priority\u003d1,"},{"line_number":72,"context_line":"                              eth_dst\u003d\"ff:ff:ff:ff:ff:ff\""},{"line_number":73,"context_line":"                              eth_type\u003dether_types.ETH_TYPE_ARP)"},{"line_number":74,"context_line":"        # PATCH_LV_TO_TUN table will handle packets coming from patch_int"},{"line_number":75,"context_line":"        # unicasts go to table UCAST_TO_TUN where remote addresses are learnt"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_8aed06b9","line":72,"updated":"2018-09-12 17:19:28.000000000","message":"missing trailing comma, causing all tests to fail","commit_id":"60b53f3ac0068c5f2456d8235e35b764cc700400"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"5208ba6068df280c0c2ae9625bedd3c508b71ef3","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                          priority\u003d1,"},{"line_number":76,"context_line":"                          eth_dst\u003d\"ff:ff:ff:ff:ff:ff\","},{"line_number":77,"context_line":"                          eth_type\u003dether_types.ETH_TYPE_ARP)"},{"line_number":78,"context_line":"        # REVISIT(Swami): May be we should move this registeration to"},{"line_number":79,"context_line":"        # a suitable function later"},{"line_number":80,"context_line":"        self._app.register_packet_in_handler(self.garp_packet_in_handler)"},{"line_number":81,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_f1e2719c","line":78,"updated":"2018-11-01 19:50:49.000000000","message":"I\u0027m of the opinion that we don\u0027t want to register this packet-in handler unless we also have the GARP intercept rule in place too. L73 and L80 go hand-in-hand IMO.","commit_id":"729aa36713f0daa2df208a8e479215f5deaebf0f"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"fc1af49ecf8e1bfa07235e7e15201c1753876b78","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                          priority\u003d1,"},{"line_number":76,"context_line":"                          eth_dst\u003d\"ff:ff:ff:ff:ff:ff\","},{"line_number":77,"context_line":"                          eth_type\u003dether_types.ETH_TYPE_ARP)"},{"line_number":78,"context_line":"        # REVISIT(Swami): May be we should move this registeration to"},{"line_number":79,"context_line":"        # a suitable function later"},{"line_number":80,"context_line":"        self._app.register_packet_in_handler(self.garp_packet_in_handler)"},{"line_number":81,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_3661b711","line":78,"in_reply_to":"3f79a3b5_f1e2719c","updated":"2018-11-01 23:52:18.000000000","message":"I agree but I am worried about the timing. So wanted to register ahead of time. Let us think about it later.","commit_id":"729aa36713f0daa2df208a8e479215f5deaebf0f"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"7cb8e31c419c6558e2a53a67632a42fbbfbbe83b","unresolved":false,"context_lines":[{"line_number":274,"context_line":"            # After processing the GARP packet, now output this packet to"},{"line_number":275,"context_line":"            # the normal flow"},{"line_number":276,"context_line":"            LOG.debug(\"Forward the packet to FLOOD_TO_TUN\")"},{"line_number":277,"context_line":"            out_port \u003d constants.FLOOD_TO_TUN"},{"line_number":278,"context_line":"            actions \u003d [parser.OFPActionOutput(out_port)]"},{"line_number":279,"context_line":"            # Construct packet_out message and send it."},{"line_number":280,"context_line":"            out \u003d parser.OFPPacketOut(datapath\u003ddatapath,"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_a24d703d","line":277,"updated":"2018-11-02 16:32:01.000000000","message":"I think the issue you\u0027re seeing is due to the fact that you\u0027re setting out_port to a value that corresponds to a table, not a valid egress port [1].\n\nOne approach is to identify the correct egress port and have it egress there. The actual openflow port number of non-reserved ports will change every time the bridge is re-built, which can happen when OVS restarts. It\u0027s not a constant we can hard-code.\n\nAnother approach is to specify OFPP_TABLE as the out_port. This is a reserved port that causes a packet-out to be re-evaulated by the pipeline (all the way back to table 1). This of course means that we need to be sure our rules are written in a way such that the packet doesn\u0027t get in to a loop where it is kicked to the controller, re-submitted, then kicked back to the controller over and over.\n\nThere may be another approach someone else has. This is what comes to mind at the moment, I\u0027ll spend a little more time thinking about this.\n\n[1] https://github.com/openstack/neutron/blob/6918f4a2372991a41d02fa2313b38de157ac5ab3/neutron/plugins/ml2/drivers/openvswitch/agent/common/constants.py#L93","commit_id":"729aa36713f0daa2df208a8e479215f5deaebf0f"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"5208ba6068df280c0c2ae9625bedd3c508b71ef3","unresolved":false,"context_lines":[{"line_number":279,"context_line":"            # Construct packet_out message and send it."},{"line_number":280,"context_line":"            out \u003d parser.OFPPacketOut(datapath\u003ddatapath,"},{"line_number":281,"context_line":"                                      buffer_id\u003dofproto.OFP_NO_BUFFER,"},{"line_number":282,"context_line":"                                      in_port\u003din_port,"},{"line_number":283,"context_line":"                                      actions\u003dactions,"},{"line_number":284,"context_line":"                                      data\u003dmsg.data)"},{"line_number":285,"context_line":"            datapath.send_msg(out)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_6aec2abc","line":282,"updated":"2018-11-01 19:50:49.000000000","message":"Should this be OFPP_CONTROLLER or do we need to maintain in_port of the packet? Because the packet is not generated out of thin air by the controller I think preserving in_port is the right thing to do....","commit_id":"729aa36713f0daa2df208a8e479215f5deaebf0f"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"f3de96e692ec3d2a05b7200d922879571d085c78","unresolved":false,"context_lines":[{"line_number":279,"context_line":"            # Construct packet_out message and send it."},{"line_number":280,"context_line":"            out \u003d parser.OFPPacketOut(datapath\u003ddatapath,"},{"line_number":281,"context_line":"                                      buffer_id\u003dofproto.OFP_NO_BUFFER,"},{"line_number":282,"context_line":"                                      in_port\u003din_port,"},{"line_number":283,"context_line":"                                      actions\u003dactions,"},{"line_number":284,"context_line":"                                      data\u003dmsg.data)"},{"line_number":285,"context_line":"            datapath.send_msg(out)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_f6b81813","line":282,"in_reply_to":"3f79a3b5_6aec2abc","updated":"2018-11-02 07:43:53.000000000","message":"I am seeing an issue here. The packet that is sent out either using the \u0027in_port\u003din_port\u0027 or \u0027in_port\u003dOFPP_CONTROLLER\u0027, I am not able to see the packet coming out through the vxlan tunnel.","commit_id":"729aa36713f0daa2df208a8e479215f5deaebf0f"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"fc1af49ecf8e1bfa07235e7e15201c1753876b78","unresolved":false,"context_lines":[{"line_number":279,"context_line":"            # Construct packet_out message and send it."},{"line_number":280,"context_line":"            out \u003d parser.OFPPacketOut(datapath\u003ddatapath,"},{"line_number":281,"context_line":"                                      buffer_id\u003dofproto.OFP_NO_BUFFER,"},{"line_number":282,"context_line":"                                      in_port\u003din_port,"},{"line_number":283,"context_line":"                                      actions\u003dactions,"},{"line_number":284,"context_line":"                                      data\u003dmsg.data)"},{"line_number":285,"context_line":"            datapath.send_msg(out)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_d665e31d","line":282,"in_reply_to":"3f79a3b5_6aec2abc","updated":"2018-11-01 23:52:18.000000000","message":"Not sure, experts can tell.\nBased on what I read from google they are passing back the in_port.\nAnyway the in_port is \u00271\u0027 so I hope it is the \u0027OFPP_CONTROLLER\u0027 by itself.","commit_id":"729aa36713f0daa2df208a8e479215f5deaebf0f"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"8ddd56b89a99dad1e19fd325ec5d81275609eef0","unresolved":false,"context_lines":[{"line_number":71,"context_line":"                              eth_dst\u003d\"ff:ff:ff:ff:ff:ff\","},{"line_number":72,"context_line":"                              eth_type\u003dether_types.ETH_TYPE_ARP)"},{"line_number":73,"context_line":"        self.install_goto(dest_table_id\u003dconstants.GARP_SNOOP_TABLE_EGRESS,"},{"line_number":74,"context_line":"                          table_id\u003dconstants.PATCH_LV_TO_TUN,"},{"line_number":75,"context_line":"                          priority\u003d1,"},{"line_number":76,"context_line":"                          eth_dst\u003d\"ff:ff:ff:ff:ff:ff\","},{"line_number":77,"context_line":"                          eth_type\u003dether_types.ETH_TYPE_ARP)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_3f95b9e3","line":74,"updated":"2018-11-06 16:30:32.000000000","message":"You could use self.dvr_process_next_table_id. Perhaps it makes things more readable?","commit_id":"095daf5cb6b0aaa181deac93ff50701b91ada878"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"5da2234792c9fc942143cb21444a5c1678b6988d","unresolved":false,"context_lines":[{"line_number":71,"context_line":"                              eth_dst\u003d\"ff:ff:ff:ff:ff:ff\","},{"line_number":72,"context_line":"                              eth_type\u003dether_types.ETH_TYPE_ARP)"},{"line_number":73,"context_line":"        self.install_goto(dest_table_id\u003dconstants.GARP_SNOOP_TABLE_EGRESS,"},{"line_number":74,"context_line":"                          table_id\u003dconstants.PATCH_LV_TO_TUN,"},{"line_number":75,"context_line":"                          priority\u003d1,"},{"line_number":76,"context_line":"                          eth_dst\u003d\"ff:ff:ff:ff:ff:ff\","},{"line_number":77,"context_line":"                          eth_type\u003dether_types.ETH_TYPE_ARP)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_70d83eec","line":74,"in_reply_to":"3f79a3b5_3f95b9e3","updated":"2018-11-06 18:12:57.000000000","message":"Let me check","commit_id":"095daf5cb6b0aaa181deac93ff50701b91ada878"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"8ddd56b89a99dad1e19fd325ec5d81275609eef0","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                          eth_dst\u003d\"ff:ff:ff:ff:ff:ff\","},{"line_number":77,"context_line":"                          eth_type\u003dether_types.ETH_TYPE_ARP)"},{"line_number":78,"context_line":"        # REVISIT(Swami): May be we should move this registeration to"},{"line_number":79,"context_line":"        # a suitable function later"},{"line_number":80,"context_line":"        self._app.register_packet_in_handler(self.garp_packet_in_handler)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        # PATCH_LV_TO_TUN table will handle packets coming from patch_int"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_eac78196","line":79,"updated":"2018-11-06 16:30:32.000000000","message":"Are you suggesting that we don\u0027t even install these goto\u0027s and the packet-in handler until someone (ie ryuapp) registers a handler? If so, we could defer all of this until the first handler is registered.\n\nOn the hand, as a matter of practicality we\u0027ll need the  packet-in handler to be able to handle allowed address pairs so it isn\u0027t really optional. That means registering the packet-in handler here or somewhere else may not really matter.","commit_id":"095daf5cb6b0aaa181deac93ff50701b91ada878"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"6c192f94357ca3af96159fa2016a0f5bda069e81","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                          eth_dst\u003d\"ff:ff:ff:ff:ff:ff\","},{"line_number":77,"context_line":"                          eth_type\u003dether_types.ETH_TYPE_ARP)"},{"line_number":78,"context_line":"        # REVISIT(Swami): May be we should move this registeration to"},{"line_number":79,"context_line":"        # a suitable function later"},{"line_number":80,"context_line":"        self._app.register_packet_in_handler(self.garp_packet_in_handler)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        # PATCH_LV_TO_TUN table will handle packets coming from patch_int"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_cbff27fd","line":79,"in_reply_to":"3f79a3b5_50dbc2e9","updated":"2018-11-06 18:24:45.000000000","message":"OK, now I get it. Thanks for the explanation.","commit_id":"095daf5cb6b0aaa181deac93ff50701b91ada878"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"5da2234792c9fc942143cb21444a5c1678b6988d","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                          eth_dst\u003d\"ff:ff:ff:ff:ff:ff\","},{"line_number":77,"context_line":"                          eth_type\u003dether_types.ETH_TYPE_ARP)"},{"line_number":78,"context_line":"        # REVISIT(Swami): May be we should move this registeration to"},{"line_number":79,"context_line":"        # a suitable function later"},{"line_number":80,"context_line":"        self._app.register_packet_in_handler(self.garp_packet_in_handler)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        # PATCH_LV_TO_TUN table will handle packets coming from patch_int"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_50dbc2e9","line":79,"in_reply_to":"3f79a3b5_eac78196","updated":"2018-11-06 18:12:57.000000000","message":"What I mentioned is we should find a right spot to register this handler.\nThis has to be registered first only for DVR routers and not for the centralized router case.\nBut I think we don\u0027t need to be so granular on the allowed_address_pair and by default for dvr routers we can register this handler.","commit_id":"095daf5cb6b0aaa181deac93ff50701b91ada878"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"8ddd56b89a99dad1e19fd325ec5d81275609eef0","unresolved":false,"context_lines":[{"line_number":280,"context_line":"                if not rule_exist:"},{"line_number":281,"context_line":"                    self.install_arp_responder(vlan_pkt.vid, arp_src_ip, mac)"},{"line_number":282,"context_line":"            # After processing the GARP packet, now output this packet"},{"line_number":283,"context_line":"            # back to the Flow table for further processing."},{"line_number":284,"context_line":"            out_port \u003d ofproto.OFPP_TABLE"},{"line_number":285,"context_line":"            actions \u003d [parser.OFPActionOutput(out_port)]"},{"line_number":286,"context_line":"            # Construct packet_out message and send it."}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_1f2c7db0","line":283,"updated":"2018-11-06 16:30:32.000000000","message":"Nit: \"back to the pipeline\" (or something along those lines) is probably more accurate since this causes the packet to get submitted against table 0 and re-processed from there.","commit_id":"095daf5cb6b0aaa181deac93ff50701b91ada878"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"e3d127ff4139cbef9b34bd8c89c9a7feba255cb1","unresolved":false,"context_lines":[{"line_number":264,"context_line":"            LOG.debug(\"Packet vlan vid: %s\", vlan_pkt.vid)"},{"line_number":265,"context_line":"        arp_pkt \u003d pkt.get_protocol(arp.arp)"},{"line_number":266,"context_line":"        if arp_pkt:"},{"line_number":267,"context_line":"            LOG.debug(\"GARP packet received by the O_ken App: \""},{"line_number":268,"context_line":"                      \"%s\", arp_pkt)"},{"line_number":269,"context_line":"            arp_src_ip \u003d arp_pkt.src_ip"},{"line_number":270,"context_line":"            mac \u003d arp_pkt.src_mac"}],"source_content_type":"text/x-python","patch_set":28,"id":"3f79a3b5_d5910b46","line":267,"range":{"start_line":267,"start_character":51,"end_line":267,"end_character":56},"updated":"2018-12-18 23:45:44.000000000","message":"nit: os_ken","commit_id":"b7fdc8cb885a1639e073f31ba102292600115863"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"9a91b4d1b03219f14bd9af4262c39d0b3f21e343","unresolved":false,"context_lines":[{"line_number":264,"context_line":"            LOG.debug(\"Packet vlan vid: %s\", vlan_pkt.vid)"},{"line_number":265,"context_line":"        arp_pkt \u003d pkt.get_protocol(arp.arp)"},{"line_number":266,"context_line":"        if arp_pkt:"},{"line_number":267,"context_line":"            LOG.debug(\"GARP packet received by the O_ken App: \""},{"line_number":268,"context_line":"                      \"%s\", arp_pkt)"},{"line_number":269,"context_line":"            arp_src_ip \u003d arp_pkt.src_ip"},{"line_number":270,"context_line":"            mac \u003d arp_pkt.src_mac"}],"source_content_type":"text/x-python","patch_set":28,"id":"3f79a3b5_dd44bb19","line":267,"range":{"start_line":267,"start_character":51,"end_line":267,"end_character":56},"in_reply_to":"3f79a3b5_d5910b46","updated":"2018-12-19 22:02:31.000000000","message":"will fix this.","commit_id":"b7fdc8cb885a1639e073f31ba102292600115863"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"e3d127ff4139cbef9b34bd8c89c9a7feba255cb1","unresolved":false,"context_lines":[{"line_number":285,"context_line":"                    self.install_arp_responder(vlan_pkt.vid, arp_src_ip, mac)"},{"line_number":286,"context_line":"            # After processing the GARP packet, now output this packet"},{"line_number":287,"context_line":"            # back to the Flow table for further processing."},{"line_number":288,"context_line":"            if pkt_in_port \u003d\u003d self.patch_int_port:"},{"line_number":289,"context_line":"                egress_out_port \u003d ofproto.OFPP_TABLE"},{"line_number":290,"context_line":"                actions \u003d [parser.OFPActionOutput(egress_out_port)]"},{"line_number":291,"context_line":"                # Construct packet_out message and send it."},{"line_number":292,"context_line":"                out \u003d parser.OFPPacketOut(datapath\u003ddatapath,"},{"line_number":293,"context_line":"                                          buffer_id\u003dofproto.OFP_NO_BUFFER,"},{"line_number":294,"context_line":"                                          in_port\u003dofproto.OFPP_CONTROLLER,"},{"line_number":295,"context_line":"                                          actions\u003dactions,"},{"line_number":296,"context_line":"                                          data\u003dmsg.data)"},{"line_number":297,"context_line":"                datapath.send_msg(out)"},{"line_number":298,"context_line":"            else:"},{"line_number":299,"context_line":"                out_port \u003d self.patch_int_port"},{"line_number":300,"context_line":"                actions \u003d [parser.OFPActionOutput(out_port)]"},{"line_number":301,"context_line":"                # Construct packet_out message and send it."},{"line_number":302,"context_line":"                out \u003d parser.OFPPacketOut(datapath\u003ddatapath,"},{"line_number":303,"context_line":"                                          buffer_id\u003dofproto.OFP_NO_BUFFER,"},{"line_number":304,"context_line":"                                          in_port\u003dofproto.OFPP_CONTROLLER,"},{"line_number":305,"context_line":"                                          actions\u003dactions,"},{"line_number":306,"context_line":"                                          data\u003dmsg.data)"},{"line_number":307,"context_line":"                datapath.send_msg(out)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"    def add_garp_pkt_process_for_allowed_addr_pair_egress("},{"line_number":310,"context_line":"        self, ip, port\u003dNone):"}],"source_content_type":"text/x-python","patch_set":28,"id":"3f79a3b5_f58c47df","line":307,"range":{"start_line":288,"start_character":0,"end_line":307,"end_character":38},"updated":"2018-12-18 23:45:44.000000000","message":"Maybe this could be refactored a little:\n\nout_port \u003d ofproto.OFPP_TABLE if pkt_in_port \u003d\u003d self.patch_int_port else self.patch_int_port\nactions \u003d [parser.OFPActionOutput(out_port)]\n\n# Construct packet_out message and send it.\nout \u003d parser.OFPPacketOut(datapath\u003ddatapath,\n                          buffer_id\u003dofproto.OFP_NO_BUFFER,\n                          in_port\u003dofproto.OFPP_CONTROLLER,\n                           actions\u003dactions,\n                           data\u003dmsg.data)\ndatapath.send_msg(out)","commit_id":"b7fdc8cb885a1639e073f31ba102292600115863"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"9a91b4d1b03219f14bd9af4262c39d0b3f21e343","unresolved":false,"context_lines":[{"line_number":285,"context_line":"                    self.install_arp_responder(vlan_pkt.vid, arp_src_ip, mac)"},{"line_number":286,"context_line":"            # After processing the GARP packet, now output this packet"},{"line_number":287,"context_line":"            # back to the Flow table for further processing."},{"line_number":288,"context_line":"            if pkt_in_port \u003d\u003d self.patch_int_port:"},{"line_number":289,"context_line":"                egress_out_port \u003d ofproto.OFPP_TABLE"},{"line_number":290,"context_line":"                actions \u003d [parser.OFPActionOutput(egress_out_port)]"},{"line_number":291,"context_line":"                # Construct packet_out message and send it."},{"line_number":292,"context_line":"                out \u003d parser.OFPPacketOut(datapath\u003ddatapath,"},{"line_number":293,"context_line":"                                          buffer_id\u003dofproto.OFP_NO_BUFFER,"},{"line_number":294,"context_line":"                                          in_port\u003dofproto.OFPP_CONTROLLER,"},{"line_number":295,"context_line":"                                          actions\u003dactions,"},{"line_number":296,"context_line":"                                          data\u003dmsg.data)"},{"line_number":297,"context_line":"                datapath.send_msg(out)"},{"line_number":298,"context_line":"            else:"},{"line_number":299,"context_line":"                out_port \u003d self.patch_int_port"},{"line_number":300,"context_line":"                actions \u003d [parser.OFPActionOutput(out_port)]"},{"line_number":301,"context_line":"                # Construct packet_out message and send it."},{"line_number":302,"context_line":"                out \u003d parser.OFPPacketOut(datapath\u003ddatapath,"},{"line_number":303,"context_line":"                                          buffer_id\u003dofproto.OFP_NO_BUFFER,"},{"line_number":304,"context_line":"                                          in_port\u003dofproto.OFPP_CONTROLLER,"},{"line_number":305,"context_line":"                                          actions\u003dactions,"},{"line_number":306,"context_line":"                                          data\u003dmsg.data)"},{"line_number":307,"context_line":"                datapath.send_msg(out)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"    def add_garp_pkt_process_for_allowed_addr_pair_egress("},{"line_number":310,"context_line":"        self, ip, port\u003dNone):"}],"source_content_type":"text/x-python","patch_set":28,"id":"3f79a3b5_fdbc1709","line":307,"range":{"start_line":288,"start_character":0,"end_line":307,"end_character":38},"in_reply_to":"3f79a3b5_f58c47df","updated":"2018-12-19 22:02:31.000000000","message":"Sure we can refactor it.","commit_id":"b7fdc8cb885a1639e073f31ba102292600115863"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"be3e161b81fdef2c76b3072cc6cd96a868f4c41d","unresolved":false,"context_lines":[{"line_number":319,"context_line":"            if matches.get(\u0027arp_tpa\u0027) !\u003d ip:"},{"line_number":320,"context_line":"                continue"},{"line_number":321,"context_line":"            # If arp_tpa matches, then check the MAC as well"},{"line_number":322,"context_line":"            LOG.debug(\"Matches: %s\", matches)"},{"line_number":323,"context_line":"            if matches.get(\u0027arp_tpa\u0027) \u003d\u003d ip and matches.get(\u0027arp_sha\u0027) !\u003d mac:"},{"line_number":324,"context_line":"                LOG.debug(\"Old ARP entry exists with wrong mac, so remove \")"},{"line_number":325,"context_line":"                # Remove the arp_responder rule"}],"source_content_type":"text/x-python","patch_set":30,"id":"1f769fc5_d88f4421","line":322,"updated":"2019-01-02 21:17:18.000000000","message":"Is this necessary?  Seems it could add a lot of debug logs","commit_id":"2613ff583e5a33812a18affbf517431e81fc371a"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"b52ed2998b9c7e387d93af84fcdaecbbb3c63ba6","unresolved":false,"context_lines":[{"line_number":319,"context_line":"            if matches.get(\u0027arp_tpa\u0027) !\u003d ip:"},{"line_number":320,"context_line":"                continue"},{"line_number":321,"context_line":"            # If arp_tpa matches, then check the MAC as well"},{"line_number":322,"context_line":"            LOG.debug(\"Matches: %s\", matches)"},{"line_number":323,"context_line":"            if matches.get(\u0027arp_tpa\u0027) \u003d\u003d ip and matches.get(\u0027arp_sha\u0027) !\u003d mac:"},{"line_number":324,"context_line":"                LOG.debug(\"Old ARP entry exists with wrong mac, so remove \")"},{"line_number":325,"context_line":"                # Remove the arp_responder rule"}],"source_content_type":"text/x-python","patch_set":30,"id":"ffd0ebdf_52c61419","line":322,"in_reply_to":"1f769fc5_d88f4421","updated":"2019-01-02 23:30:59.000000000","message":"Yeah we can remove this? I don\u0027t have any desire for it.","commit_id":"2613ff583e5a33812a18affbf517431e81fc371a"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"be3e161b81fdef2c76b3072cc6cd96a868f4c41d","unresolved":false,"context_lines":[{"line_number":320,"context_line":"                continue"},{"line_number":321,"context_line":"            # If arp_tpa matches, then check the MAC as well"},{"line_number":322,"context_line":"            LOG.debug(\"Matches: %s\", matches)"},{"line_number":323,"context_line":"            if matches.get(\u0027arp_tpa\u0027) \u003d\u003d ip and matches.get(\u0027arp_sha\u0027) !\u003d mac:"},{"line_number":324,"context_line":"                LOG.debug(\"Old ARP entry exists with wrong mac, so remove \")"},{"line_number":325,"context_line":"                # Remove the arp_responder rule"},{"line_number":326,"context_line":"                self.delete_arp_responder(vlan, ip)"}],"source_content_type":"text/x-python","patch_set":30,"id":"1f769fc5_f8a480bb","line":323,"range":{"start_line":323,"start_character":15,"end_line":323,"end_character":43},"updated":"2019-01-02 21:17:18.000000000","message":"This has to be true after the check on L319 right?","commit_id":"2613ff583e5a33812a18affbf517431e81fc371a"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"b52ed2998b9c7e387d93af84fcdaecbbb3c63ba6","unresolved":false,"context_lines":[{"line_number":320,"context_line":"                continue"},{"line_number":321,"context_line":"            # If arp_tpa matches, then check the MAC as well"},{"line_number":322,"context_line":"            LOG.debug(\"Matches: %s\", matches)"},{"line_number":323,"context_line":"            if matches.get(\u0027arp_tpa\u0027) \u003d\u003d ip and matches.get(\u0027arp_sha\u0027) !\u003d mac:"},{"line_number":324,"context_line":"                LOG.debug(\"Old ARP entry exists with wrong mac, so remove \")"},{"line_number":325,"context_line":"                # Remove the arp_responder rule"},{"line_number":326,"context_line":"                self.delete_arp_responder(vlan, ip)"}],"source_content_type":"text/x-python","patch_set":30,"id":"ffd0ebdf_92e31ca5","line":323,"range":{"start_line":323,"start_character":15,"end_line":323,"end_character":43},"in_reply_to":"1f769fc5_f8a480bb","updated":"2019-01-02 23:30:59.000000000","message":"You are right, it should be true after L319.","commit_id":"2613ff583e5a33812a18affbf517431e81fc371a"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"be3e161b81fdef2c76b3072cc6cd96a868f4c41d","unresolved":false,"context_lines":[{"line_number":321,"context_line":"            # If arp_tpa matches, then check the MAC as well"},{"line_number":322,"context_line":"            LOG.debug(\"Matches: %s\", matches)"},{"line_number":323,"context_line":"            if matches.get(\u0027arp_tpa\u0027) \u003d\u003d ip and matches.get(\u0027arp_sha\u0027) !\u003d mac:"},{"line_number":324,"context_line":"                LOG.debug(\"Old ARP entry exists with wrong mac, so remove \")"},{"line_number":325,"context_line":"                # Remove the arp_responder rule"},{"line_number":326,"context_line":"                self.delete_arp_responder(vlan, ip)"},{"line_number":327,"context_line":"                return False"}],"source_content_type":"text/x-python","patch_set":30,"id":"1f769fc5_d8a184ab","line":324,"range":{"start_line":324,"start_character":73,"end_line":324,"end_character":74},"updated":"2019-01-02 21:17:18.000000000","message":"nit: trailing space\ns/so remove/removing","commit_id":"2613ff583e5a33812a18affbf517431e81fc371a"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"b52ed2998b9c7e387d93af84fcdaecbbb3c63ba6","unresolved":false,"context_lines":[{"line_number":321,"context_line":"            # If arp_tpa matches, then check the MAC as well"},{"line_number":322,"context_line":"            LOG.debug(\"Matches: %s\", matches)"},{"line_number":323,"context_line":"            if matches.get(\u0027arp_tpa\u0027) \u003d\u003d ip and matches.get(\u0027arp_sha\u0027) !\u003d mac:"},{"line_number":324,"context_line":"                LOG.debug(\"Old ARP entry exists with wrong mac, so remove \")"},{"line_number":325,"context_line":"                # Remove the arp_responder rule"},{"line_number":326,"context_line":"                self.delete_arp_responder(vlan, ip)"},{"line_number":327,"context_line":"                return False"}],"source_content_type":"text/x-python","patch_set":30,"id":"ffd0ebdf_b2e0a098","line":324,"range":{"start_line":324,"start_character":73,"end_line":324,"end_character":74},"in_reply_to":"1f769fc5_d8a184ab","updated":"2019-01-02 23:30:59.000000000","message":"will remove it.","commit_id":"2613ff583e5a33812a18affbf517431e81fc371a"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"be3e161b81fdef2c76b3072cc6cd96a868f4c41d","unresolved":false,"context_lines":[{"line_number":326,"context_line":"                self.delete_arp_responder(vlan, ip)"},{"line_number":327,"context_line":"                return False"},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"            if matches.get(\u0027arp_tpa\u0027) \u003d\u003d ip and matches.get(\u0027eth_src\u0027) \u003d\u003d mac:"},{"line_number":330,"context_line":"                LOG.debug(\"Matching ARP entry exists, just skip\")"},{"line_number":331,"context_line":"                return True"},{"line_number":332,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":30,"id":"1f769fc5_98ab0c88","line":329,"range":{"start_line":329,"start_character":15,"end_line":329,"end_character":43},"updated":"2019-01-02 21:17:18.000000000","message":"Here too","commit_id":"2613ff583e5a33812a18affbf517431e81fc371a"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"b52ed2998b9c7e387d93af84fcdaecbbb3c63ba6","unresolved":false,"context_lines":[{"line_number":326,"context_line":"                self.delete_arp_responder(vlan, ip)"},{"line_number":327,"context_line":"                return False"},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"            if matches.get(\u0027arp_tpa\u0027) \u003d\u003d ip and matches.get(\u0027eth_src\u0027) \u003d\u003d mac:"},{"line_number":330,"context_line":"                LOG.debug(\"Matching ARP entry exists, just skip\")"},{"line_number":331,"context_line":"                return True"},{"line_number":332,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":30,"id":"ffd0ebdf_72f4785c","line":329,"range":{"start_line":329,"start_character":15,"end_line":329,"end_character":43},"in_reply_to":"1f769fc5_98ab0c88","updated":"2019-01-02 23:30:59.000000000","message":"agreed.","commit_id":"2613ff583e5a33812a18affbf517431e81fc371a"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"be3e161b81fdef2c76b3072cc6cd96a868f4c41d","unresolved":false,"context_lines":[{"line_number":327,"context_line":"                return False"},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"            if matches.get(\u0027arp_tpa\u0027) \u003d\u003d ip and matches.get(\u0027eth_src\u0027) \u003d\u003d mac:"},{"line_number":330,"context_line":"                LOG.debug(\"Matching ARP entry exists, just skip\")"},{"line_number":331,"context_line":"                return True"},{"line_number":332,"context_line":"        return False"},{"line_number":333,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"1f769fc5_9899cc6f","line":330,"range":{"start_line":330,"start_character":54,"end_line":330,"end_character":63},"updated":"2019-01-02 21:17:18.000000000","message":"s/skipping\n\nOr just remove completely","commit_id":"2613ff583e5a33812a18affbf517431e81fc371a"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"b52ed2998b9c7e387d93af84fcdaecbbb3c63ba6","unresolved":false,"context_lines":[{"line_number":327,"context_line":"                return False"},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"            if matches.get(\u0027arp_tpa\u0027) \u003d\u003d ip and matches.get(\u0027eth_src\u0027) \u003d\u003d mac:"},{"line_number":330,"context_line":"                LOG.debug(\"Matching ARP entry exists, just skip\")"},{"line_number":331,"context_line":"                return True"},{"line_number":332,"context_line":"        return False"},{"line_number":333,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"ffd0ebdf_12e96c7f","line":330,"range":{"start_line":330,"start_character":54,"end_line":330,"end_character":63},"in_reply_to":"1f769fc5_9899cc6f","updated":"2019-01-02 23:30:59.000000000","message":"ok","commit_id":"2613ff583e5a33812a18affbf517431e81fc371a"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"8283f40355de9073d25b245eefa35afd456d18ad","unresolved":false,"context_lines":[{"line_number":44,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"class OVSTunnelBridge(ovs_bridge.OVSAgentBridge,"},{"line_number":48,"context_line":"                      br_dvr_process.OVSDVRProcessMixin):"},{"line_number":49,"context_line":"    \"\"\"openvswitch agent tunnel bridge specific logic.\"\"\""},{"line_number":50,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"3fa7e38b_b9f13c03","line":47,"range":{"start_line":47,"start_character":9,"end_line":47,"end_character":21},"updated":"2020-01-15 02:06:36.000000000","message":"So physical networks (physical bridge) will not be considered?","commit_id":"3cd8b329e999edbfc99b0f8b121f4aefe3a8ca29"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"8283f40355de9073d25b245eefa35afd456d18ad","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            self.install_goto(dest_table_id\u003dconstants.ARP_RESPONDER,"},{"line_number":71,"context_line":"                              table_id\u003dconstants.PATCH_LV_TO_TUN,"},{"line_number":72,"context_line":"                              priority\u003d2,"},{"line_number":73,"context_line":"                              eth_dst\u003d\"ff:ff:ff:ff:ff:ff\","},{"line_number":74,"context_line":"                              eth_type\u003dether_types.ETH_TYPE_ARP)"},{"line_number":75,"context_line":"            self.install_goto(dest_table_id\u003dconstants.GARP_SNOOP_TABLE_EGRESS,"},{"line_number":76,"context_line":"                              table_id\u003dconstants.PATCH_LV_TO_TUN,"}],"source_content_type":"text/x-python","patch_set":42,"id":"3fa7e38b_39e78c12","line":73,"range":{"start_line":73,"start_character":38,"end_line":73,"end_character":57},"updated":"2020-01-15 02:06:36.000000000","message":"All these \"ff:ff:ff:ff:ff:ff\" should be defined in neutron-lib.","commit_id":"3cd8b329e999edbfc99b0f8b121f4aefe3a8ca29"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"ac8ce5164b1e4aa519395566781e4379ebb984cd","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            self.install_goto(dest_table_id\u003dconstants.ARP_RESPONDER,"},{"line_number":71,"context_line":"                              table_id\u003dconstants.PATCH_LV_TO_TUN,"},{"line_number":72,"context_line":"                              priority\u003d2,"},{"line_number":73,"context_line":"                              eth_dst\u003d\"ff:ff:ff:ff:ff:ff\","},{"line_number":74,"context_line":"                              eth_type\u003dether_types.ETH_TYPE_ARP)"},{"line_number":75,"context_line":"            self.install_goto(dest_table_id\u003dconstants.GARP_SNOOP_TABLE_EGRESS,"},{"line_number":76,"context_line":"                              table_id\u003dconstants.PATCH_LV_TO_TUN,"}],"source_content_type":"text/x-python","patch_set":42,"id":"9f560f44_98952c43","line":73,"range":{"start_line":73,"start_character":38,"end_line":73,"end_character":57},"in_reply_to":"3fa7e38b_39e78c12","updated":"2020-09-10 07:10:06.000000000","message":"I can add todo comment now and change it in follow up patch later. Is that ok for You?","commit_id":"3cd8b329e999edbfc99b0f8b121f4aefe3a8ca29"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"ded27ff320df92f5c51ee30e6ed4bd7ce5e3adc0","unresolved":false,"context_lines":[{"line_number":72,"context_line":"                              priority\u003d2,"},{"line_number":73,"context_line":"                              eth_dst\u003d\"ff:ff:ff:ff:ff:ff\","},{"line_number":74,"context_line":"                              eth_type\u003dether_types.ETH_TYPE_ARP)"},{"line_number":75,"context_line":"            self.install_goto(dest_table_id\u003dconstants.GARP_SNOOP_TABLE_EGRESS,"},{"line_number":76,"context_line":"                              table_id\u003dconstants.PATCH_LV_TO_TUN,"},{"line_number":77,"context_line":"                              priority\u003d1,"},{"line_number":78,"context_line":"                              eth_dst\u003d\"ff:ff:ff:ff:ff:ff\","},{"line_number":79,"context_line":"                              eth_type\u003dether_types.ETH_TYPE_ARP)"},{"line_number":80,"context_line":"            self.install_goto(dest_table_id\u003dconstants.GARP_SNOOP_TABLE_INGRESS,"},{"line_number":81,"context_line":"                              table_id\u003dconstants.DVR_NOT_LEARN,"},{"line_number":82,"context_line":"                              priority\u003d1,"}],"source_content_type":"text/x-python","patch_set":42,"id":"3fa7e38b_545fa6e3","line":79,"range":{"start_line":75,"start_character":0,"end_line":79,"end_character":64},"updated":"2020-01-15 13:15:30.000000000","message":"This block are basicly same to Line 71-74, they have same match rules in same table except priority. So looks like this will never hit, because the upper has higher priority.","commit_id":"3cd8b329e999edbfc99b0f8b121f4aefe3a8ca29"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"ac8ce5164b1e4aa519395566781e4379ebb984cd","unresolved":false,"context_lines":[{"line_number":72,"context_line":"                              priority\u003d2,"},{"line_number":73,"context_line":"                              eth_dst\u003d\"ff:ff:ff:ff:ff:ff\","},{"line_number":74,"context_line":"                              eth_type\u003dether_types.ETH_TYPE_ARP)"},{"line_number":75,"context_line":"            self.install_goto(dest_table_id\u003dconstants.GARP_SNOOP_TABLE_EGRESS,"},{"line_number":76,"context_line":"                              table_id\u003dconstants.PATCH_LV_TO_TUN,"},{"line_number":77,"context_line":"                              priority\u003d1,"},{"line_number":78,"context_line":"                              eth_dst\u003d\"ff:ff:ff:ff:ff:ff\","},{"line_number":79,"context_line":"                              eth_type\u003dether_types.ETH_TYPE_ARP)"},{"line_number":80,"context_line":"            self.install_goto(dest_table_id\u003dconstants.GARP_SNOOP_TABLE_INGRESS,"},{"line_number":81,"context_line":"                              table_id\u003dconstants.DVR_NOT_LEARN,"},{"line_number":82,"context_line":"                              priority\u003d1,"}],"source_content_type":"text/x-python","patch_set":42,"id":"9f560f44_18b91ccb","line":79,"range":{"start_line":75,"start_character":0,"end_line":79,"end_character":64},"in_reply_to":"3fa7e38b_545fa6e3","updated":"2020-09-10 07:10:06.000000000","message":"yes, I think I can remove this rule from here","commit_id":"3cd8b329e999edbfc99b0f8b121f4aefe3a8ca29"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"8283f40355de9073d25b245eefa35afd456d18ad","unresolved":false,"context_lines":[{"line_number":249,"context_line":"                             arp_tpa\u003dip)"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    @staticmethod"},{"line_number":252,"context_line":"    def _garp_request_match(ofp, ofpp, ip):"},{"line_number":253,"context_line":"        return ofpp.OFPMatch(eth_type\u003dether_types.ETH_TYPE_ARP,"},{"line_number":254,"context_line":"                             arp_tpa\u003dip,"},{"line_number":255,"context_line":"                             arp_spa\u003dip,"}],"source_content_type":"text/x-python","patch_set":42,"id":"3fa7e38b_19c3b05a","line":252,"range":{"start_line":252,"start_character":28,"end_line":252,"end_character":31},"updated":"2020-01-15 02:06:36.000000000","message":"Never used, should be \"_ofp\" something like line 170.","commit_id":"3cd8b329e999edbfc99b0f8b121f4aefe3a8ca29"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"c737f7efdb1f524bafb4570af401b51e8ff713ff","unresolved":false,"context_lines":[{"line_number":249,"context_line":"                             arp_tpa\u003dip)"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    @staticmethod"},{"line_number":252,"context_line":"    def _garp_request_match(ofp, ofpp, ip):"},{"line_number":253,"context_line":"        return ofpp.OFPMatch(eth_type\u003dether_types.ETH_TYPE_ARP,"},{"line_number":254,"context_line":"                             arp_tpa\u003dip,"},{"line_number":255,"context_line":"                             arp_spa\u003dip,"}],"source_content_type":"text/x-python","patch_set":42,"id":"1f621f24_c36214ae","line":252,"range":{"start_line":252,"start_character":28,"end_line":252,"end_character":31},"in_reply_to":"3fa7e38b_19c3b05a","updated":"2020-11-16 01:56:20.000000000","message":"+","commit_id":"3cd8b329e999edbfc99b0f8b121f4aefe3a8ca29"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"8283f40355de9073d25b245eefa35afd456d18ad","unresolved":false,"context_lines":[{"line_number":286,"context_line":"                        arp_src_ip, mac, vlan_pkt.vid))"},{"line_number":287,"context_line":"                # Construct a flow_mod message and send it."},{"line_number":288,"context_line":"                if not rule_exist:"},{"line_number":289,"context_line":"                    self.install_arp_responder(vlan_pkt.vid, arp_src_ip, mac)"},{"line_number":290,"context_line":"            # After processing the GARP packet, now output this packet"},{"line_number":291,"context_line":"            # back to the Flow table for further processing."},{"line_number":292,"context_line":"            out_port \u003d ("}],"source_content_type":"text/x-python","patch_set":42,"id":"3fa7e38b_b9b05cde","line":289,"range":{"start_line":289,"start_character":25,"end_line":289,"end_character":46},"updated":"2020-01-15 02:06:36.000000000","message":"This may not work in scenario testing [1]. ARP request from qr-device (router internal gateway) go out compute node, the source MAC address of ethernet will be changed to dvr_host_mac. So this responder will finally have a ARP reply whose ethernet destination MAC is source compute node dvr_host_mac (see line 365, it is a just simple ethernet src/dest MAC swap). So when this reply go back to qr-device, it will not match the MAC address. This should be fixed as well.\n\n[1] https://bugs.launchpad.net/neutron/+bug/1859638","commit_id":"3cd8b329e999edbfc99b0f8b121f4aefe3a8ca29"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"a42a03bba3a9b488881d302e07b6df928cd7b027","unresolved":false,"context_lines":[{"line_number":286,"context_line":"                        arp_src_ip, mac, vlan_pkt.vid))"},{"line_number":287,"context_line":"                # Construct a flow_mod message and send it."},{"line_number":288,"context_line":"                if not rule_exist:"},{"line_number":289,"context_line":"                    self.install_arp_responder(vlan_pkt.vid, arp_src_ip, mac)"},{"line_number":290,"context_line":"            # After processing the GARP packet, now output this packet"},{"line_number":291,"context_line":"            # back to the Flow table for further processing."},{"line_number":292,"context_line":"            out_port \u003d ("}],"source_content_type":"text/x-python","patch_set":42,"id":"9fd8e845_0e83ee30","line":289,"range":{"start_line":289,"start_character":25,"end_line":289,"end_character":46},"in_reply_to":"3fa7e38b_b9b05cde","updated":"2020-11-25 05:19:30.000000000","message":"++","commit_id":"3cd8b329e999edbfc99b0f8b121f4aefe3a8ca29"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"8283f40355de9073d25b245eefa35afd456d18ad","unresolved":false,"context_lines":[{"line_number":302,"context_line":"            datapath.send_msg(out)"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"    def add_garp_pkt_process_for_allowed_addr_pair_egress("},{"line_number":305,"context_line":"            self, ip, port\u003dNone):"},{"line_number":306,"context_line":"        # Match with the GARP packet and if matches, forward the packet"},{"line_number":307,"context_line":"        # to the controller for learning and processing."},{"line_number":308,"context_line":"        (_dp, ofp, ofpp) \u003d self._get_dp()"}],"source_content_type":"text/x-python","patch_set":42,"id":"3fa7e38b_7918a41e","line":305,"range":{"start_line":305,"start_character":22,"end_line":305,"end_character":31},"updated":"2020-01-15 02:06:36.000000000","message":"never used","commit_id":"3cd8b329e999edbfc99b0f8b121f4aefe3a8ca29"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"8283f40355de9073d25b245eefa35afd456d18ad","unresolved":false,"context_lines":[{"line_number":312,"context_line":"                                match\u003dmatch)"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    def add_garp_pkt_process_for_allowed_addr_pair_ingress("},{"line_number":315,"context_line":"            self, ip, port\u003dNone):"},{"line_number":316,"context_line":"        # Match with the GARP packet and if matches, forward the packet"},{"line_number":317,"context_line":"        # to the controller for learning and processing."},{"line_number":318,"context_line":"        (_dp, ofp, ofpp) \u003d self._get_dp()"}],"source_content_type":"text/x-python","patch_set":42,"id":"3fa7e38b_1915f0e6","line":315,"range":{"start_line":315,"start_character":22,"end_line":315,"end_character":31},"updated":"2020-01-15 02:06:36.000000000","message":"never used","commit_id":"3cd8b329e999edbfc99b0f8b121f4aefe3a8ca29"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"ded27ff320df92f5c51ee30e6ed4bd7ce5e3adc0","unresolved":false,"context_lines":[{"line_number":322,"context_line":"                                match\u003dmatch)"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"    def check_for_duplicate_arp_responder_flow_rule(self, ip, mac, vlan):"},{"line_number":325,"context_line":"        arp_resp_flows \u003d self.dump_flows(constants.ARP_RESPONDER)"},{"line_number":326,"context_line":"        for arpflow in arp_resp_flows:"},{"line_number":327,"context_line":"            matches \u003d dict(arpflow.match.items())"},{"line_number":328,"context_line":"            if matches.get(\u0027arp_tpa\u0027) !\u003d ip:"}],"source_content_type":"text/x-python","patch_set":42,"id":"3fa7e38b_34d78af7","line":325,"range":{"start_line":325,"start_character":30,"end_line":325,"end_character":65},"updated":"2020-01-15 13:15:30.000000000","message":"Try to dump ARP_RESPONDER flows could be expensive if there are large sets of ports, then this could cause some race condition between port removal and processing first GARP packet-in. When ovs-agent is trying to remove the port and the first GARP is just doing packet-in to the controller and finally hit this check with return value False. Then the stale flow may be left.","commit_id":"3cd8b329e999edbfc99b0f8b121f4aefe3a8ca29"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"c737f7efdb1f524bafb4570af401b51e8ff713ff","unresolved":false,"context_lines":[{"line_number":322,"context_line":"                                match\u003dmatch)"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"    def check_for_duplicate_arp_responder_flow_rule(self, ip, mac, vlan):"},{"line_number":325,"context_line":"        arp_resp_flows \u003d self.dump_flows(constants.ARP_RESPONDER)"},{"line_number":326,"context_line":"        for arpflow in arp_resp_flows:"},{"line_number":327,"context_line":"            matches \u003d dict(arpflow.match.items())"},{"line_number":328,"context_line":"            if matches.get(\u0027arp_tpa\u0027) !\u003d ip:"}],"source_content_type":"text/x-python","patch_set":42,"id":"1f621f24_23714877","line":325,"range":{"start_line":325,"start_character":30,"end_line":325,"end_character":65},"in_reply_to":"3fa7e38b_34d78af7","updated":"2020-11-16 01:56:20.000000000","message":"++","commit_id":"3cd8b329e999edbfc99b0f8b121f4aefe3a8ca29"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"fb1f57ea70977fdc699576e5a58a45f3596bfc4d","unresolved":false,"context_lines":[{"line_number":159,"context_line":""},{"line_number":160,"context_line":"            self.install_goto(dest_table_id\u003dconstants.FLOOD_TO_TUN,"},{"line_number":161,"context_line":"                              in_port\u003dofp.OFPP_CONTROLLER,"},{"line_number":162,"context_line":"                              priority\u003d1,"},{"line_number":163,"context_line":"                              eth_dst\u003d\"ff:ff:ff:ff:ff:ff\","},{"line_number":164,"context_line":"                              eth_type\u003dether_types.ETH_TYPE_ARP)"},{"line_number":165,"context_line":"        # FLOOD_TO_TUN will handle flooding in tunnels based on lvid,"}],"source_content_type":"text/x-python","patch_set":44,"id":"9f560f44_708252ca","line":162,"updated":"2020-09-08 10:16:26.000000000","message":"priority here and above should be lower probably","commit_id":"14362d60f471305bb54fb1e7f3cb04cc15e0d37a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"fb1f57ea70977fdc699576e5a58a45f3596bfc4d","unresolved":false,"context_lines":[{"line_number":268,"context_line":"            LOG.debug(\"Packet vlan vid: %s\", vlan_pkt.vid)"},{"line_number":269,"context_line":"        arp_pkt \u003d pkt.get_protocol(arp.arp)"},{"line_number":270,"context_line":"        if arp_pkt:"},{"line_number":271,"context_line":"            LOG.debug(\"GARP packet received by the os_ken App: \""},{"line_number":272,"context_line":"                      \"%s\", arp_pkt)"},{"line_number":273,"context_line":"            arp_src_ip \u003d arp_pkt.src_ip"},{"line_number":274,"context_line":"            mac \u003d arp_pkt.src_mac"}],"source_content_type":"text/x-python","patch_set":44,"id":"9f560f44_8c91c0f4","line":271,"range":{"start_line":271,"start_character":23,"end_line":271,"end_character":27},"updated":"2020-09-08 10:16:26.000000000","message":"ARP","commit_id":"14362d60f471305bb54fb1e7f3cb04cc15e0d37a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"8efe7f32dac3c1437a383e603e4bc18e43fcf12b","unresolved":false,"context_lines":[{"line_number":72,"context_line":"            # neutron code)"},{"line_number":73,"context_line":"            self.install_goto(dest_table_id\u003dconstants.ARP_RESPONDER,"},{"line_number":74,"context_line":"                              table_id\u003dconstants.PATCH_LV_TO_TUN,"},{"line_number":75,"context_line":"                              priority\u003d2,"},{"line_number":76,"context_line":"                              eth_dst\u003d\"ff:ff:ff:ff:ff:ff\","},{"line_number":77,"context_line":"                              eth_type\u003dether_types.ETH_TYPE_ARP)"},{"line_number":78,"context_line":"            self.install_goto(dest_table_id\u003dconstants.GARP_SNOOP_TABLE_INGRESS,"}],"source_content_type":"text/x-python","patch_set":47,"id":"9f560f44_ace71212","line":75,"range":{"start_line":75,"start_character":39,"end_line":75,"end_character":40},"updated":"2020-09-10 10:19:46.000000000","message":"Why this change?","commit_id":"048804332fba86e23d627a8d8db3d3f846c5ae84"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"9966d8b65e2e5f7c5d09afc16455aa6ab4541617","unresolved":false,"context_lines":[{"line_number":72,"context_line":"            # neutron code)"},{"line_number":73,"context_line":"            self.install_goto(dest_table_id\u003dconstants.ARP_RESPONDER,"},{"line_number":74,"context_line":"                              table_id\u003dconstants.PATCH_LV_TO_TUN,"},{"line_number":75,"context_line":"                              priority\u003d2,"},{"line_number":76,"context_line":"                              eth_dst\u003d\"ff:ff:ff:ff:ff:ff\","},{"line_number":77,"context_line":"                              eth_type\u003dether_types.ETH_TYPE_ARP)"},{"line_number":78,"context_line":"            self.install_goto(dest_table_id\u003dconstants.GARP_SNOOP_TABLE_INGRESS,"}],"source_content_type":"text/x-python","patch_set":47,"id":"9f560f44_5a736d16","line":75,"range":{"start_line":75,"start_character":39,"end_line":75,"end_character":40},"in_reply_to":"9f560f44_ace71212","updated":"2020-09-19 06:50:15.000000000","message":"by mistake probably, thx :)","commit_id":"048804332fba86e23d627a8d8db3d3f846c5ae84"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"8efe7f32dac3c1437a383e603e4bc18e43fcf12b","unresolved":false,"context_lines":[{"line_number":281,"context_line":"                # ip and mac"},{"line_number":282,"context_line":"                rule_exist \u003d ("},{"line_number":283,"context_line":"                    self.check_for_duplicate_arp_responder_flow_rule("},{"line_number":284,"context_line":"                        arp_src_ip, mac, vlan_pkt.vid))"},{"line_number":285,"context_line":"                # Construct a flow_mod message and send it."},{"line_number":286,"context_line":"                if not rule_exist:"},{"line_number":287,"context_line":"                    self.install_arp_responder(vlan_pkt.vid, arp_src_ip, mac)"}],"source_content_type":"text/x-python","patch_set":47,"id":"9f560f44_cc6526b1","line":284,"range":{"start_line":284,"start_character":41,"end_line":284,"end_character":49},"updated":"2020-09-10 10:19:46.000000000","message":"What happens if vlan_pkt \u003d\u003d None? According to L265, that\u0027s possible","commit_id":"048804332fba86e23d627a8d8db3d3f846c5ae84"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"9966d8b65e2e5f7c5d09afc16455aa6ab4541617","unresolved":false,"context_lines":[{"line_number":281,"context_line":"                # ip and mac"},{"line_number":282,"context_line":"                rule_exist \u003d ("},{"line_number":283,"context_line":"                    self.check_for_duplicate_arp_responder_flow_rule("},{"line_number":284,"context_line":"                        arp_src_ip, mac, vlan_pkt.vid))"},{"line_number":285,"context_line":"                # Construct a flow_mod message and send it."},{"line_number":286,"context_line":"                if not rule_exist:"},{"line_number":287,"context_line":"                    self.install_arp_responder(vlan_pkt.vid, arp_src_ip, mac)"}],"source_content_type":"text/x-python","patch_set":47,"id":"9f560f44_dae65db0","line":284,"range":{"start_line":284,"start_character":41,"end_line":284,"end_character":49},"in_reply_to":"9f560f44_cc6526b1","updated":"2020-09-19 06:50:15.000000000","message":"ok, I\u0027m not sure if in practice this can happen really but lets add check for that in L265 and skip processing packets without vlan","commit_id":"048804332fba86e23d627a8d8db3d3f846c5ae84"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"8efe7f32dac3c1437a383e603e4bc18e43fcf12b","unresolved":false,"context_lines":[{"line_number":336,"context_line":"                return True"},{"line_number":337,"context_line":"        return False"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"    def delete_garp_pkt_process_for_allowed_addr_pair_egress(self, ip):"},{"line_number":340,"context_line":"        (_dp, ofp, ofpp) \u003d self._get_dp()"},{"line_number":341,"context_line":"        match \u003d self._garp_request_match(ofp, ofpp, ip)"},{"line_number":342,"context_line":"        self.uninstall_flows(table_id\u003dconstants.GARP_SNOOP_TABLE_EGRESS,"},{"line_number":343,"context_line":"                             match\u003dmatch)"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"    def delete_garp_pkt_process_for_allowed_addr_pair_ingress(self, ip):"},{"line_number":346,"context_line":"        (_dp, ofp, ofpp) \u003d self._get_dp()"},{"line_number":347,"context_line":"        match \u003d self._garp_request_match(ofp, ofpp, ip)"},{"line_number":348,"context_line":"        self.uninstall_flows(table_id\u003dconstants.GARP_SNOOP_TABLE_INGRESS,"},{"line_number":349,"context_line":"                             match\u003dmatch)"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"    def install_arp_responder(self, vlan, ip, mac):"},{"line_number":352,"context_line":"        (dp, ofp, ofpp) \u003d self._get_dp()"}],"source_content_type":"text/x-python","patch_set":47,"id":"9f560f44_4c28f631","line":349,"range":{"start_line":339,"start_character":0,"end_line":349,"end_character":41},"updated":"2020-09-10 10:19:46.000000000","message":"That could be the same function, with \"direction\" as a new parameter","commit_id":"048804332fba86e23d627a8d8db3d3f846c5ae84"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"9966d8b65e2e5f7c5d09afc16455aa6ab4541617","unresolved":false,"context_lines":[{"line_number":336,"context_line":"                return True"},{"line_number":337,"context_line":"        return False"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"    def delete_garp_pkt_process_for_allowed_addr_pair_egress(self, ip):"},{"line_number":340,"context_line":"        (_dp, ofp, ofpp) \u003d self._get_dp()"},{"line_number":341,"context_line":"        match \u003d self._garp_request_match(ofp, ofpp, ip)"},{"line_number":342,"context_line":"        self.uninstall_flows(table_id\u003dconstants.GARP_SNOOP_TABLE_EGRESS,"},{"line_number":343,"context_line":"                             match\u003dmatch)"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"    def delete_garp_pkt_process_for_allowed_addr_pair_ingress(self, ip):"},{"line_number":346,"context_line":"        (_dp, ofp, ofpp) \u003d self._get_dp()"},{"line_number":347,"context_line":"        match \u003d self._garp_request_match(ofp, ofpp, ip)"},{"line_number":348,"context_line":"        self.uninstall_flows(table_id\u003dconstants.GARP_SNOOP_TABLE_INGRESS,"},{"line_number":349,"context_line":"                             match\u003dmatch)"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"    def install_arp_responder(self, vlan, ip, mac):"},{"line_number":352,"context_line":"        (dp, ofp, ofpp) \u003d self._get_dp()"}],"source_content_type":"text/x-python","patch_set":47,"id":"9f560f44_5a56cd2b","line":349,"range":{"start_line":339,"start_character":0,"end_line":349,"end_character":41},"in_reply_to":"9f560f44_4c28f631","updated":"2020-09-19 06:50:15.000000000","message":"Done","commit_id":"048804332fba86e23d627a8d8db3d3f846c5ae84"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"8efe7f32dac3c1437a383e603e4bc18e43fcf12b","unresolved":false,"context_lines":[{"line_number":366,"context_line":"                   ofpp.OFPActionSetField(eth_src\u003dmac),"},{"line_number":367,"context_line":"                   ofpp.OFPActionOutput(ofp.OFPP_IN_PORT, 0)]"},{"line_number":368,"context_line":"        self.install_apply_actions(table_id\u003dconstants.ARP_RESPONDER,"},{"line_number":369,"context_line":"                                   priority\u003d2,"},{"line_number":370,"context_line":"                                   match\u003dmatch,"},{"line_number":371,"context_line":"                                   actions\u003dactions)"},{"line_number":372,"context_line":""}],"source_content_type":"text/x-python","patch_set":47,"id":"9f560f44_8ce20e00","line":369,"range":{"start_line":369,"start_character":44,"end_line":369,"end_character":45},"updated":"2020-09-10 10:19:46.000000000","message":"Why this change?","commit_id":"048804332fba86e23d627a8d8db3d3f846c5ae84"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"9966d8b65e2e5f7c5d09afc16455aa6ab4541617","unresolved":false,"context_lines":[{"line_number":366,"context_line":"                   ofpp.OFPActionSetField(eth_src\u003dmac),"},{"line_number":367,"context_line":"                   ofpp.OFPActionOutput(ofp.OFPP_IN_PORT, 0)]"},{"line_number":368,"context_line":"        self.install_apply_actions(table_id\u003dconstants.ARP_RESPONDER,"},{"line_number":369,"context_line":"                                   priority\u003d2,"},{"line_number":370,"context_line":"                                   match\u003dmatch,"},{"line_number":371,"context_line":"                                   actions\u003dactions)"},{"line_number":372,"context_line":""}],"source_content_type":"text/x-python","patch_set":47,"id":"9f560f44_fa1fe16c","line":369,"range":{"start_line":369,"start_character":44,"end_line":369,"end_character":45},"in_reply_to":"9f560f44_8ce20e00","updated":"2020-09-19 06:50:15.000000000","message":"we need to first try to match in table 21 for specific IP addresses (e.g. fixed_ips) and if there will be no match then go to rule which will send packets to table 26 or 27 (GARP_SNOOP_TABLE) to send it to controller.\nWithout this change all packets are first going to controller through table 26 or 27 and connectity is broken","commit_id":"048804332fba86e23d627a8d8db3d3f846c5ae84"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"a42a03bba3a9b488881d302e07b6df928cd7b027","unresolved":true,"context_lines":[{"line_number":283,"context_line":"                self.delete_garp_pkt_process_for_allowed_addr_pair("},{"line_number":284,"context_line":"                    ip, p_const.INGRESS_DIRECTION)"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    def garp_packet_in_handler(self, ev):"},{"line_number":287,"context_line":"        msg \u003d ev.msg"},{"line_number":288,"context_line":"        datapath \u003d msg.datapath"},{"line_number":289,"context_line":"        ofproto \u003d datapath.ofproto"}],"source_content_type":"text/x-python","patch_set":59,"id":"cbf9d770_3d3be964","line":286,"range":{"start_line":286,"start_character":8,"end_line":286,"end_character":30},"updated":"2020-11-25 05:19:30.000000000","message":"Restart ovs-agent will cause all these learnt flows be cleaned by the agent stale flow clean process due to the cookie change. I don\u0027t think the GARP will be sent out again when you restart the agent. So actually this patch IMO should be just aimed for a long standing cloud: the user just created VM once, and no cloud deployment changing/upgrading at all. In such situation we may say they will not touch the agent. But from my experiences, cloud users can upgrade their cloud, change the config options, migration the hosts/vms and so on. Each action can cause agent restart, flow re-install etc. So if we do not handle these cases, this patch can be considered that is just for a very very corner case. But if we handle these situations, IMO, this patch may look a bit too heavy to achive the original purpose.","commit_id":"e22cf3757da8b6507d4ff62be56c459d990aa7bf"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"1de623c469a03a760de903d9f6c588c7d8b1caf8","unresolved":false,"context_lines":[{"line_number":283,"context_line":"                self.delete_garp_pkt_process_for_allowed_addr_pair("},{"line_number":284,"context_line":"                    ip, p_const.INGRESS_DIRECTION)"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    def garp_packet_in_handler(self, ev):"},{"line_number":287,"context_line":"        msg \u003d ev.msg"},{"line_number":288,"context_line":"        datapath \u003d msg.datapath"},{"line_number":289,"context_line":"        ofproto \u003d datapath.ofproto"}],"source_content_type":"text/x-python","patch_set":59,"id":"980e76ac_064ca348","line":286,"range":{"start_line":286,"start_character":8,"end_line":286,"end_character":30},"in_reply_to":"cbf9d770_3d3be964","updated":"2020-12-10 13:53:03.000000000","message":"I added release note with that \"known issue\". And I also mentioned that in the description of the config option. I think that for now this should be enough. Wdyt?","commit_id":"e22cf3757da8b6507d4ff62be56c459d990aa7bf"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"a42a03bba3a9b488881d302e07b6df928cd7b027","unresolved":true,"context_lines":[{"line_number":316,"context_line":"                        arp_src_ip, mac, vlan_pkt.vid))"},{"line_number":317,"context_line":"                # Construct a flow_mod message and send it."},{"line_number":318,"context_line":"                if not rule_exist:"},{"line_number":319,"context_line":"                    self.install_arp_responder(vlan_pkt.vid, arp_src_ip, mac)"},{"line_number":320,"context_line":"            # After processing the GARP packet, now output this packet"},{"line_number":321,"context_line":"            # back to the Flow table for further processing."},{"line_number":322,"context_line":"            out_port \u003d ("}],"source_content_type":"text/x-python","patch_set":59,"id":"4db9234d_e0b8b5a2","line":319,"range":{"start_line":319,"start_character":25,"end_line":319,"end_character":46},"updated":"2020-11-25 05:19:30.000000000","message":"Again, how to handle VIP traffic for the dvr east-west cross different physical host [1].\nPlease see my comments at patch set 42 [2], there are dvr host MACs, the ARP reply will not have the correct destination MAC to the qr-device:\n\n[1] https://bugs.launchpad.net/neutron/+bug/1859638\n[2] https://review.opendev.org/c/openstack/neutron/+/601336/42/neutron/plugins/ml2/drivers/openvswitch/agent/openflow/native/br_tun.py#289","commit_id":"e22cf3757da8b6507d4ff62be56c459d990aa7bf"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"a42a03bba3a9b488881d302e07b6df928cd7b027","unresolved":true,"context_lines":[{"line_number":316,"context_line":"                        arp_src_ip, mac, vlan_pkt.vid))"},{"line_number":317,"context_line":"                # Construct a flow_mod message and send it."},{"line_number":318,"context_line":"                if not rule_exist:"},{"line_number":319,"context_line":"                    self.install_arp_responder(vlan_pkt.vid, arp_src_ip, mac)"},{"line_number":320,"context_line":"            # After processing the GARP packet, now output this packet"},{"line_number":321,"context_line":"            # back to the Flow table for further processing."},{"line_number":322,"context_line":"            out_port \u003d ("}],"source_content_type":"text/x-python","patch_set":59,"id":"c7c296d8_3fb59f27","line":319,"range":{"start_line":319,"start_character":20,"end_line":319,"end_character":77},"updated":"2020-11-25 05:19:30.000000000","message":"How to handle the agent restart? These flows will be cleaned. And how about instance migration?","commit_id":"e22cf3757da8b6507d4ff62be56c459d990aa7bf"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"f024339f1909cdb5543372ae2ff9bb2b801fe3fe","unresolved":true,"context_lines":[{"line_number":316,"context_line":"                        arp_src_ip, mac, vlan_pkt.vid))"},{"line_number":317,"context_line":"                # Construct a flow_mod message and send it."},{"line_number":318,"context_line":"                if not rule_exist:"},{"line_number":319,"context_line":"                    self.install_arp_responder(vlan_pkt.vid, arp_src_ip, mac)"},{"line_number":320,"context_line":"            # After processing the GARP packet, now output this packet"},{"line_number":321,"context_line":"            # back to the Flow table for further processing."},{"line_number":322,"context_line":"            out_port \u003d ("}],"source_content_type":"text/x-python","patch_set":59,"id":"1a49bd43_561dd0a8","line":319,"range":{"start_line":319,"start_character":25,"end_line":319,"end_character":46},"in_reply_to":"0986775f_cc7cd254","updated":"2020-12-21 09:41:51.000000000","message":"Yes, your test toplogy is correct. I will verify this again.\n\nThe bug 1859638 is more like that there is no VIP or keepalived, just allowed address pair for the ports. It should be called \"allowed-address-pair between dvr east-west networks does not work at all\". I just change the bug title.","commit_id":"e22cf3757da8b6507d4ff62be56c459d990aa7bf"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"1de623c469a03a760de903d9f6c588c7d8b1caf8","unresolved":true,"context_lines":[{"line_number":316,"context_line":"                        arp_src_ip, mac, vlan_pkt.vid))"},{"line_number":317,"context_line":"                # Construct a flow_mod message and send it."},{"line_number":318,"context_line":"                if not rule_exist:"},{"line_number":319,"context_line":"                    self.install_arp_responder(vlan_pkt.vid, arp_src_ip, mac)"},{"line_number":320,"context_line":"            # After processing the GARP packet, now output this packet"},{"line_number":321,"context_line":"            # back to the Flow table for further processing."},{"line_number":322,"context_line":"            out_port \u003d ("}],"source_content_type":"text/x-python","patch_set":59,"id":"0986775f_cc7cd254","line":319,"range":{"start_line":319,"start_character":25,"end_line":319,"end_character":46},"in_reply_to":"4db9234d_e0b8b5a2","updated":"2020-12-10 13:53:03.000000000","message":"In my test I was testing it with scenario like below:\n\n```\n\n     +-------------+\n     |VM1    Compute-1\n     |             +---------------+\n     |  10.10.0.54/24              |\n     |             |               |               +----------------------------------+\n     |             |               |               |  Router R                        |\n     +-------------+               |               |                                  |                             +-----------------+\n                                   |               |                                  |                             |VM-access        |\n                                   |               |                                  |                             |                 |\nVIP 10.10.0.222               NET-1|               |                                  |          NET-2              |                 |\n                                   +---------------+10.10.0.1/24          10.20.0.1/24+-----------------------------+10.20.0.126/24   |\n                                   |               |                                  |                             |                 |\n                                   |               |                                  |                             |                 |\n                                   |               |                                  |                             |  Compute-1      |\n     +-------------+               |               |                                  |                             +-----------------+\n     |VM2     Compute-0            |               |                                  |\n     |             |---------------+               +----------------------------------+\n     |             |\n     | 10.10.0.132/24\n     |             |\n     |             |\n     +-------------+\n```\n\nwhich is IMO exactly the same as what You described in the https://bugs.launchpad.net/neutron/+bug/1859638 and it worked fine. Of course VM1 or VM2 needs to send GARP packet for this VIP address and then it starts working but that is typical use case IMO and e.g. keepalived works like that, right?","commit_id":"e22cf3757da8b6507d4ff62be56c459d990aa7bf"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"1de623c469a03a760de903d9f6c588c7d8b1caf8","unresolved":false,"context_lines":[{"line_number":316,"context_line":"                        arp_src_ip, mac, vlan_pkt.vid))"},{"line_number":317,"context_line":"                # Construct a flow_mod message and send it."},{"line_number":318,"context_line":"                if not rule_exist:"},{"line_number":319,"context_line":"                    self.install_arp_responder(vlan_pkt.vid, arp_src_ip, mac)"},{"line_number":320,"context_line":"            # After processing the GARP packet, now output this packet"},{"line_number":321,"context_line":"            # back to the Flow table for further processing."},{"line_number":322,"context_line":"            out_port \u003d ("}],"source_content_type":"text/x-python","patch_set":59,"id":"1c5c0847_ed8d6dc8","line":319,"range":{"start_line":319,"start_character":20,"end_line":319,"end_character":77},"in_reply_to":"c7c296d8_3fb59f27","updated":"2020-12-10 13:53:03.000000000","message":"Again, I added info about it in release note. I don\u0027t think I can address all such cases really in this patch.","commit_id":"e22cf3757da8b6507d4ff62be56c459d990aa7bf"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"f024339f1909cdb5543372ae2ff9bb2b801fe3fe","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# Copyright (C) 2014,2015 VA Linux Systems Japan K.K."},{"line_number":2,"context_line":"# Copyright (C) 2014,2015 YAMAMOTO Takashi \u003cyamamoto at valinux co jp\u003e"},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":7,"context_line":"#    a copy of the License at"},{"line_number":8,"context_line":"#"},{"line_number":9,"context_line":"#         http://www.apache.org/licenses/LICENSE-2.0"},{"line_number":10,"context_line":"#"},{"line_number":11,"context_line":"#    Unless required by applicable law or agreed to in writing, software"},{"line_number":12,"context_line":"#    distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT"},{"line_number":13,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":14,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"# Copyright 2011 VMware, Inc."},{"line_number":18,"context_line":"# All Rights Reserved."},{"line_number":19,"context_line":"#"},{"line_number":20,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":21,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":22,"context_line":"#    a copy of the License at"},{"line_number":23,"context_line":"#"},{"line_number":24,"context_line":"#         http://www.apache.org/licenses/LICENSE-2.0"},{"line_number":25,"context_line":"#"},{"line_number":26,"context_line":"#    Unless required by applicable law or agreed to in writing, software"},{"line_number":27,"context_line":"#    distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT"},{"line_number":28,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":29,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":30,"context_line":"#    under the License."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"import netaddr"},{"line_number":33,"context_line":"from neutron_lib import constants as p_const"}],"source_content_type":"text/x-python","patch_set":62,"id":"5342c843_5bda01e0","line":30,"range":{"start_line":1,"start_character":0,"end_line":30,"end_character":23},"updated":"2020-12-21 09:41:51.000000000","message":"Nit: not related, why here has two apache licences?","commit_id":"ab543c997900dbe98bb8f7acaceb4d3c84f4de34"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"587be9c3c18bb14b1981fed6b5f49fdbbd687293","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# Copyright (C) 2014,2015 VA Linux Systems Japan K.K."},{"line_number":2,"context_line":"# Copyright (C) 2014,2015 YAMAMOTO Takashi \u003cyamamoto at valinux co jp\u003e"},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":7,"context_line":"#    a copy of the License at"},{"line_number":8,"context_line":"#"},{"line_number":9,"context_line":"#         http://www.apache.org/licenses/LICENSE-2.0"},{"line_number":10,"context_line":"#"},{"line_number":11,"context_line":"#    Unless required by applicable law or agreed to in writing, software"},{"line_number":12,"context_line":"#    distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT"},{"line_number":13,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":14,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"# Copyright 2011 VMware, Inc."},{"line_number":18,"context_line":"# All Rights Reserved."},{"line_number":19,"context_line":"#"},{"line_number":20,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":21,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":22,"context_line":"#    a copy of the License at"},{"line_number":23,"context_line":"#"},{"line_number":24,"context_line":"#         http://www.apache.org/licenses/LICENSE-2.0"},{"line_number":25,"context_line":"#"},{"line_number":26,"context_line":"#    Unless required by applicable law or agreed to in writing, software"},{"line_number":27,"context_line":"#    distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT"},{"line_number":28,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":29,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":30,"context_line":"#    under the License."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"import netaddr"},{"line_number":33,"context_line":"from neutron_lib import constants as p_const"}],"source_content_type":"text/x-python","patch_set":62,"id":"8617d72a_f1d0fac1","line":30,"range":{"start_line":1,"start_character":0,"end_line":30,"end_character":23},"in_reply_to":"30536121_bc2234d8","updated":"2020-12-21 11:11:06.000000000","message":"https://review.opendev.org/c/openstack/neutron/+/768078 will remove it","commit_id":"ab543c997900dbe98bb8f7acaceb4d3c84f4de34"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"325019e7f4e08d5e43e359cfb875abc8d7e6c81f","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# Copyright (C) 2014,2015 VA Linux Systems Japan K.K."},{"line_number":2,"context_line":"# Copyright (C) 2014,2015 YAMAMOTO Takashi \u003cyamamoto at valinux co jp\u003e"},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":7,"context_line":"#    a copy of the License at"},{"line_number":8,"context_line":"#"},{"line_number":9,"context_line":"#         http://www.apache.org/licenses/LICENSE-2.0"},{"line_number":10,"context_line":"#"},{"line_number":11,"context_line":"#    Unless required by applicable law or agreed to in writing, software"},{"line_number":12,"context_line":"#    distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT"},{"line_number":13,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":14,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"# Copyright 2011 VMware, Inc."},{"line_number":18,"context_line":"# All Rights Reserved."},{"line_number":19,"context_line":"#"},{"line_number":20,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":21,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":22,"context_line":"#    a copy of the License at"},{"line_number":23,"context_line":"#"},{"line_number":24,"context_line":"#         http://www.apache.org/licenses/LICENSE-2.0"},{"line_number":25,"context_line":"#"},{"line_number":26,"context_line":"#    Unless required by applicable law or agreed to in writing, software"},{"line_number":27,"context_line":"#    distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT"},{"line_number":28,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":29,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":30,"context_line":"#    under the License."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"import netaddr"},{"line_number":33,"context_line":"from neutron_lib import constants as p_const"}],"source_content_type":"text/x-python","patch_set":62,"id":"30536121_bc2234d8","line":30,"range":{"start_line":1,"start_character":0,"end_line":30,"end_character":23},"in_reply_to":"5342c843_5bda01e0","updated":"2020-12-21 10:48:50.000000000","message":"+1","commit_id":"ab543c997900dbe98bb8f7acaceb4d3c84f4de34"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"ac2c1812420d34bdbd928f1c995635e8550d292f","unresolved":true,"context_lines":[{"line_number":318,"context_line":"                else self.patch_int_port)"},{"line_number":319,"context_line":"            actions \u003d [parser.OFPActionOutput(out_port)]"},{"line_number":320,"context_line":"            # Construct packet_out message and send it."},{"line_number":321,"context_line":"            out \u003d parser.OFPPacketOut(datapath\u003ddatapath,"},{"line_number":322,"context_line":"                                      buffer_id\u003dofproto.OFP_NO_BUFFER,"},{"line_number":323,"context_line":"                                      in_port\u003dofproto.OFPP_CONTROLLER,"},{"line_number":324,"context_line":"                                      actions\u003dactions,"},{"line_number":325,"context_line":"                                      data\u003dmsg.data)"},{"line_number":326,"context_line":"            datapath.send_msg(out)"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"    def add_garp_pkt_process_for_allowed_addr_pair(self, ip):"},{"line_number":329,"context_line":"        # Match with the GARP packet and if matches, forward the packet"}],"source_content_type":"text/x-python","patch_set":63,"id":"b720cb7a_e1424319","line":326,"range":{"start_line":321,"start_character":0,"end_line":326,"end_character":34},"updated":"2020-12-22 01:31:41.000000000","message":"This packet will finally go out the original host and flood to all tunnels, and finnally hit packet-in (to controller) to all ovs-agents, a thundering herd. This can become a attact point. This is what we intend to? The following is the flow pipeline:\n  table\u003d0,    priority\u003d1,arp,in_port\u003dCONTROLLER,dl_dst\u003dff:ff:ff:ff:ff:ff actions\u003dresubmit(,22)\n  table\u003d22,    priority\u003d1,dl_vlan\u003d1 actions\u003dstrip_vlan,load:0x44-\u003eNXM_NX_TUN_ID[],output:8,output:6,output:7\n  table\u003d22,    priority\u003d1,dl_vlan\u003d4 actions\u003dstrip_vlan,load:0x54-\u003eNXM_NX_TUN_ID[],output:8,output:6,output:7\n\nAnd more, if the flood destination host\u0027s controller (ovs-agent) processed the packet and install the flow, another packet out will be send out. Then a new round of the flood and thundering herd ?","commit_id":"08efbef181df7ce3092b021ec9ceefb8efd12460"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"528b578cdc1a6b4a03c67a3f0e05e93bfe07988b","unresolved":true,"context_lines":[{"line_number":318,"context_line":"                else self.patch_int_port)"},{"line_number":319,"context_line":"            actions \u003d [parser.OFPActionOutput(out_port)]"},{"line_number":320,"context_line":"            # Construct packet_out message and send it."},{"line_number":321,"context_line":"            out \u003d parser.OFPPacketOut(datapath\u003ddatapath,"},{"line_number":322,"context_line":"                                      buffer_id\u003dofproto.OFP_NO_BUFFER,"},{"line_number":323,"context_line":"                                      in_port\u003dofproto.OFPP_CONTROLLER,"},{"line_number":324,"context_line":"                                      actions\u003dactions,"},{"line_number":325,"context_line":"                                      data\u003dmsg.data)"},{"line_number":326,"context_line":"            datapath.send_msg(out)"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"    def add_garp_pkt_process_for_allowed_addr_pair(self, ip):"},{"line_number":329,"context_line":"        # Match with the GARP packet and if matches, forward the packet"}],"source_content_type":"text/x-python","patch_set":63,"id":"ccaad4a2_e0724167","line":326,"range":{"start_line":321,"start_character":0,"end_line":326,"end_character":34},"in_reply_to":"17c331e0_c9043725","updated":"2021-02-03 14:32:54.000000000","message":"during my tests I didn\u0027t saw any storm like that. Please note in L316, out port for that packet will be patch_int_port if it will came from the tunnel. And it will be send to the tunnels if it came from br-int.\n\nThat says it will always send 1 garp packet to each tunnel - but as there is l2pop enabled for dvr, it will be send only for the tunnels which have same network.\n\nI don\u0027t understand really how storm which You mentioned can happen here.\nAnd also I\u0027m not sure why this isn\u0027t friendly for large scale deployments. It shouldn\u0027t really add a lot of load into the network.","commit_id":"08efbef181df7ce3092b021ec9ceefb8efd12460"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"533e9d053dee738e083057b11ee5ffc54985f6c9","unresolved":true,"context_lines":[{"line_number":318,"context_line":"                else self.patch_int_port)"},{"line_number":319,"context_line":"            actions \u003d [parser.OFPActionOutput(out_port)]"},{"line_number":320,"context_line":"            # Construct packet_out message and send it."},{"line_number":321,"context_line":"            out \u003d parser.OFPPacketOut(datapath\u003ddatapath,"},{"line_number":322,"context_line":"                                      buffer_id\u003dofproto.OFP_NO_BUFFER,"},{"line_number":323,"context_line":"                                      in_port\u003dofproto.OFPP_CONTROLLER,"},{"line_number":324,"context_line":"                                      actions\u003dactions,"},{"line_number":325,"context_line":"                                      data\u003dmsg.data)"},{"line_number":326,"context_line":"            datapath.send_msg(out)"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"    def add_garp_pkt_process_for_allowed_addr_pair(self, ip):"},{"line_number":329,"context_line":"        # Match with the GARP packet and if matches, forward the packet"}],"source_content_type":"text/x-python","patch_set":63,"id":"17c331e0_c9043725","line":326,"range":{"start_line":321,"start_character":0,"end_line":326,"end_character":34},"in_reply_to":"9a733d6a_77132e7e","updated":"2021-01-18 15:06:28.000000000","message":"I have the same question here. How other tunnel bridges will not resend the GARP too?","commit_id":"08efbef181df7ce3092b021ec9ceefb8efd12460"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"6c5c879a8c948f1b72d05c627c62736f960753ab","unresolved":true,"context_lines":[{"line_number":318,"context_line":"                else self.patch_int_port)"},{"line_number":319,"context_line":"            actions \u003d [parser.OFPActionOutput(out_port)]"},{"line_number":320,"context_line":"            # Construct packet_out message and send it."},{"line_number":321,"context_line":"            out \u003d parser.OFPPacketOut(datapath\u003ddatapath,"},{"line_number":322,"context_line":"                                      buffer_id\u003dofproto.OFP_NO_BUFFER,"},{"line_number":323,"context_line":"                                      in_port\u003dofproto.OFPP_CONTROLLER,"},{"line_number":324,"context_line":"                                      actions\u003dactions,"},{"line_number":325,"context_line":"                                      data\u003dmsg.data)"},{"line_number":326,"context_line":"            datapath.send_msg(out)"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"    def add_garp_pkt_process_for_allowed_addr_pair(self, ip):"},{"line_number":329,"context_line":"        # Match with the GARP packet and if matches, forward the packet"}],"source_content_type":"text/x-python","patch_set":63,"id":"cde9f33c_f63bdacf","line":326,"range":{"start_line":321,"start_character":0,"end_line":326,"end_character":34},"in_reply_to":"b720cb7a_e1424319","updated":"2021-01-07 15:07:23.000000000","message":"I\u0027m not sure if I understand the issue. GARP should be send to all nodes so controllers on all nodes can install proper rule for them. It is dvr router so it needs to have such arp responder rule installed everywhere, no?","commit_id":"08efbef181df7ce3092b021ec9ceefb8efd12460"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"b7dcb8ba08aa294484accb75dfd4fb05cc611636","unresolved":true,"context_lines":[{"line_number":318,"context_line":"                else self.patch_int_port)"},{"line_number":319,"context_line":"            actions \u003d [parser.OFPActionOutput(out_port)]"},{"line_number":320,"context_line":"            # Construct packet_out message and send it."},{"line_number":321,"context_line":"            out \u003d parser.OFPPacketOut(datapath\u003ddatapath,"},{"line_number":322,"context_line":"                                      buffer_id\u003dofproto.OFP_NO_BUFFER,"},{"line_number":323,"context_line":"                                      in_port\u003dofproto.OFPP_CONTROLLER,"},{"line_number":324,"context_line":"                                      actions\u003dactions,"},{"line_number":325,"context_line":"                                      data\u003dmsg.data)"},{"line_number":326,"context_line":"            datapath.send_msg(out)"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"    def add_garp_pkt_process_for_allowed_addr_pair(self, ip):"},{"line_number":329,"context_line":"        # Match with the GARP packet and if matches, forward the packet"}],"source_content_type":"text/x-python","patch_set":63,"id":"9a733d6a_77132e7e","line":326,"range":{"start_line":321,"start_character":0,"end_line":326,"end_character":34},"in_reply_to":"cde9f33c_f63bdacf","updated":"2021-01-15 08:38:59.000000000","message":"Firstly, assuming you have two hosts A and B. VM in A sent a GARP out, hit this \"packet-in\" function, and then this line send GARP out. B receive the GARP, and in the end, the GARP still hit the \"packet-out\".\nSecondly, this will cause broadcast storm after all controllers (ovs-agents) install the flow. Assume you have N ovs-agent, the original GARP will be enlarge N times.\nThirdly, this packet out here will hit each ovs-agent packet-in (this function Line 280) N times, especially for the flow existing check in line 308.\nFinally, these behaviors are not friendly to large scale deployment technically, IMO.","commit_id":"08efbef181df7ce3092b021ec9ceefb8efd12460"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4ef904fbff36cf807a1100a1be55e342d57fefce","unresolved":true,"context_lines":[{"line_number":246,"context_line":"            self, port_allowed_address_pairs\u003dNone,"},{"line_number":247,"context_line":"            allowed_address_pair_ips\u003dNone, operation\u003dNone):"},{"line_number":248,"context_line":"        if port_allowed_address_pairs and not allowed_address_pair_ips:"},{"line_number":249,"context_line":"            allowed_address_pair_ips \u003d []"},{"line_number":250,"context_line":"            for p in port_allowed_address_pairs:"},{"line_number":251,"context_line":"                allowed_address_pair_ips.append(p[\u0027ip_address\u0027])"},{"line_number":252,"context_line":"        ipv4_addresses \u003d []"},{"line_number":253,"context_line":"        if allowed_address_pair_ips:"},{"line_number":254,"context_line":"            ipv4_addresses \u003d {"}],"source_content_type":"text/x-python","patch_set":64,"id":"e5b914cc_521c43bd","line":251,"range":{"start_line":249,"start_character":12,"end_line":251,"end_character":64},"updated":"2021-01-08 14:35:58.000000000","message":"nit: could have just been a direct assignment, right?\n\nallowed_address_pair_ips \u003d [p[\u0027ip_address\u0027] for p in port_allowed_address_pairs]","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2372069307c1f5e7030d40cb4313588573f6b923","unresolved":false,"context_lines":[{"line_number":246,"context_line":"            self, port_allowed_address_pairs\u003dNone,"},{"line_number":247,"context_line":"            allowed_address_pair_ips\u003dNone, operation\u003dNone):"},{"line_number":248,"context_line":"        if port_allowed_address_pairs and not allowed_address_pair_ips:"},{"line_number":249,"context_line":"            allowed_address_pair_ips \u003d []"},{"line_number":250,"context_line":"            for p in port_allowed_address_pairs:"},{"line_number":251,"context_line":"                allowed_address_pair_ips.append(p[\u0027ip_address\u0027])"},{"line_number":252,"context_line":"        ipv4_addresses \u003d []"},{"line_number":253,"context_line":"        if allowed_address_pair_ips:"},{"line_number":254,"context_line":"            ipv4_addresses \u003d {"}],"source_content_type":"text/x-python","patch_set":64,"id":"634a8176_3fcf46b2","line":251,"range":{"start_line":249,"start_character":12,"end_line":251,"end_character":64},"in_reply_to":"e5b914cc_521c43bd","updated":"2021-01-13 11:53:59.000000000","message":"Done","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4ef904fbff36cf807a1100a1be55e342d57fefce","unresolved":true,"context_lines":[{"line_number":254,"context_line":"            ipv4_addresses \u003d {"},{"line_number":255,"context_line":"                ip for ip in allowed_address_pair_ips"},{"line_number":256,"context_line":"                if netaddr.IPNetwork(ip).version \u003d\u003d p_const.IP_VERSION_4}"},{"line_number":257,"context_line":"        if n_utils.has_zero_prefixlen_address(ipv4_addresses):"},{"line_number":258,"context_line":"            return"},{"line_number":259,"context_line":"        if operation \u003d\u003d \u0027add\u0027:"},{"line_number":260,"context_line":"            for ip in ipv4_addresses:"}],"source_content_type":"text/x-python","patch_set":64,"id":"da897463_c9bea2dd","line":257,"updated":"2021-01-08 14:35:58.000000000","message":"nit: could also check \"not len(ipv4_addresses)\" here and return early","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2372069307c1f5e7030d40cb4313588573f6b923","unresolved":false,"context_lines":[{"line_number":254,"context_line":"            ipv4_addresses \u003d {"},{"line_number":255,"context_line":"                ip for ip in allowed_address_pair_ips"},{"line_number":256,"context_line":"                if netaddr.IPNetwork(ip).version \u003d\u003d p_const.IP_VERSION_4}"},{"line_number":257,"context_line":"        if n_utils.has_zero_prefixlen_address(ipv4_addresses):"},{"line_number":258,"context_line":"            return"},{"line_number":259,"context_line":"        if operation \u003d\u003d \u0027add\u0027:"},{"line_number":260,"context_line":"            for ip in ipv4_addresses:"}],"source_content_type":"text/x-python","patch_set":64,"id":"97ddc864_8263fcd5","line":257,"in_reply_to":"da897463_c9bea2dd","updated":"2021-01-13 11:53:59.000000000","message":"Done","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4ef904fbff36cf807a1100a1be55e342d57fefce","unresolved":true,"context_lines":[{"line_number":273,"context_line":"        pkt_in_port \u003d msg.match[\u0027in_port\u0027]"},{"line_number":274,"context_line":"        vlan_pkt \u003d pkt.get_protocol(vlan.vlan)"},{"line_number":275,"context_line":"        if not vlan_pkt:"},{"line_number":276,"context_line":"            LOG.debug(\"Packet do not have vlan.\")"},{"line_number":277,"context_line":"            return"},{"line_number":278,"context_line":"        LOG.debug(\"Packet vlan vid: %s\", vlan_pkt.vid)"},{"line_number":279,"context_line":"        arp_pkt \u003d pkt.get_protocol(arp.arp)"}],"source_content_type":"text/x-python","patch_set":64,"id":"6cd30629_781134b2","line":276,"range":{"start_line":276,"start_character":30,"end_line":276,"end_character":32},"updated":"2021-01-08 14:35:58.000000000","message":"nit: s/does\n\nAnd are these debug messages that useful?","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2372069307c1f5e7030d40cb4313588573f6b923","unresolved":false,"context_lines":[{"line_number":273,"context_line":"        pkt_in_port \u003d msg.match[\u0027in_port\u0027]"},{"line_number":274,"context_line":"        vlan_pkt \u003d pkt.get_protocol(vlan.vlan)"},{"line_number":275,"context_line":"        if not vlan_pkt:"},{"line_number":276,"context_line":"            LOG.debug(\"Packet do not have vlan.\")"},{"line_number":277,"context_line":"            return"},{"line_number":278,"context_line":"        LOG.debug(\"Packet vlan vid: %s\", vlan_pkt.vid)"},{"line_number":279,"context_line":"        arp_pkt \u003d pkt.get_protocol(arp.arp)"}],"source_content_type":"text/x-python","patch_set":64,"id":"934478a8_c51df2b1","line":276,"range":{"start_line":276,"start_character":30,"end_line":276,"end_character":32},"in_reply_to":"6cd30629_781134b2","updated":"2021-01-13 11:53:59.000000000","message":"Done","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4ef904fbff36cf807a1100a1be55e342d57fefce","unresolved":true,"context_lines":[{"line_number":286,"context_line":"            if arp_dst_ip \u003d\u003d arp_src_ip:"},{"line_number":287,"context_line":"                # Add a Flow rule in the ARP Responder table with the given"},{"line_number":288,"context_line":"                # IP and MAC combination."},{"line_number":289,"context_line":"                LOG.debug(\"Add a flow rule into the ARP Responder table \""},{"line_number":290,"context_line":"                          \"for : %(dst-ip)s and %(dst-mac)s\","},{"line_number":291,"context_line":"                          {\u0027dst-ip\u0027: arp_src_ip, \u0027dst-mac\u0027: mac})"},{"line_number":292,"context_line":"                # Check if arp_responder_flow already exist for the given"}],"source_content_type":"text/x-python","patch_set":64,"id":"70b3d723_0bbf2dbe","line":289,"range":{"start_line":289,"start_character":27,"end_line":289,"end_character":30},"updated":"2021-01-08 14:35:58.000000000","message":"nit: s/Adding","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2372069307c1f5e7030d40cb4313588573f6b923","unresolved":false,"context_lines":[{"line_number":286,"context_line":"            if arp_dst_ip \u003d\u003d arp_src_ip:"},{"line_number":287,"context_line":"                # Add a Flow rule in the ARP Responder table with the given"},{"line_number":288,"context_line":"                # IP and MAC combination."},{"line_number":289,"context_line":"                LOG.debug(\"Add a flow rule into the ARP Responder table \""},{"line_number":290,"context_line":"                          \"for : %(dst-ip)s and %(dst-mac)s\","},{"line_number":291,"context_line":"                          {\u0027dst-ip\u0027: arp_src_ip, \u0027dst-mac\u0027: mac})"},{"line_number":292,"context_line":"                # Check if arp_responder_flow already exist for the given"}],"source_content_type":"text/x-python","patch_set":64,"id":"b9337b0f_f8f85847","line":289,"range":{"start_line":289,"start_character":27,"end_line":289,"end_character":30},"in_reply_to":"70b3d723_0bbf2dbe","updated":"2021-01-13 11:53:59.000000000","message":"Done","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4ef904fbff36cf807a1100a1be55e342d57fefce","unresolved":true,"context_lines":[{"line_number":327,"context_line":"                continue"},{"line_number":328,"context_line":"            # If arp_tpa matches, then check the MAC as well"},{"line_number":329,"context_line":"            if matches.get(\u0027arp_sha\u0027) !\u003d mac:"},{"line_number":330,"context_line":"                LOG.debug(\"Old ARP entry exists with wrong mac, so remove\")"},{"line_number":331,"context_line":"                # Remove the arp_responder rule"},{"line_number":332,"context_line":"                self.delete_arp_responder(vlan, ip)"},{"line_number":333,"context_line":"                return False"}],"source_content_type":"text/x-python","patch_set":64,"id":"dc2a3099_326827a9","line":330,"range":{"start_line":330,"start_character":64,"end_line":330,"end_character":73},"updated":"2021-01-08 14:35:58.000000000","message":"nit: s/removing","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2372069307c1f5e7030d40cb4313588573f6b923","unresolved":false,"context_lines":[{"line_number":327,"context_line":"                continue"},{"line_number":328,"context_line":"            # If arp_tpa matches, then check the MAC as well"},{"line_number":329,"context_line":"            if matches.get(\u0027arp_sha\u0027) !\u003d mac:"},{"line_number":330,"context_line":"                LOG.debug(\"Old ARP entry exists with wrong mac, so remove\")"},{"line_number":331,"context_line":"                # Remove the arp_responder rule"},{"line_number":332,"context_line":"                self.delete_arp_responder(vlan, ip)"},{"line_number":333,"context_line":"                return False"}],"source_content_type":"text/x-python","patch_set":64,"id":"2253fc3c_bf97bc1b","line":330,"range":{"start_line":330,"start_character":64,"end_line":330,"end_character":73},"in_reply_to":"dc2a3099_326827a9","updated":"2021-01-13 11:53:59.000000000","message":"Done","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"f5c3645dacc7ec777881efdd0d55a004c63fdc7f","unresolved":true,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def set_rpc_api(self, rpc):"},{"line_number":54,"context_line":"        self.rpc_context \u003d context.get_admin_context_without_session()"},{"line_number":55,"context_line":"        self.rpc \u003d rpc"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def setup_default_table(self, patch_int_ofport, arp_responder_enabled):"},{"line_number":58,"context_line":"        (dp, ofp, ofpp) \u003d self._get_dp()"}],"source_content_type":"text/x-python","patch_set":73,"id":"7119090c_0b95e65b","line":55,"range":{"start_line":55,"start_character":8,"end_line":55,"end_character":22},"updated":"2021-05-14 11:25:16.000000000","message":"If it\u0027s needed only to call update_active_vip_address() at #300 then probably it makes sense to only pass this handler as a parameter to this class instance.\nIt\u0027s a bit weird to see OVSTunnelBridge class requiring RPC communication with server (or someone else), but maybe it\u0027s just my feeling.\nAlso please see my below comment","commit_id":"e8af9d9d6e254655433834bfe4d7332cb75338f0"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"a2fecd162795034833a5ad8f2ef7ebaf323395ec","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def set_rpc_api(self, rpc):"},{"line_number":54,"context_line":"        self.rpc_context \u003d context.get_admin_context_without_session()"},{"line_number":55,"context_line":"        self.rpc \u003d rpc"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def setup_default_table(self, patch_int_ofport, arp_responder_enabled):"},{"line_number":58,"context_line":"        (dp, ofp, ofpp) \u003d self._get_dp()"}],"source_content_type":"text/x-python","patch_set":73,"id":"f91ffe05_1dad1096","line":55,"range":{"start_line":55,"start_character":8,"end_line":55,"end_character":22},"in_reply_to":"7119090c_0b95e65b","updated":"2021-05-20 15:07:47.000000000","message":"Changed, thx.","commit_id":"e8af9d9d6e254655433834bfe4d7332cb75338f0"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"f5c3645dacc7ec777881efdd0d55a004c63fdc7f","unresolved":true,"context_lines":[{"line_number":266,"context_line":"            for ip in ipv4_addresses:"},{"line_number":267,"context_line":"                self.delete_garp_pkt_process_for_allowed_addr_pair(ip)"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"    def garp_packet_in_handler(self, ev):"},{"line_number":270,"context_line":"        msg \u003d ev.msg"},{"line_number":271,"context_line":"        # Analyize the received packets using packet library"},{"line_number":272,"context_line":"        pkt \u003d packet.Packet(msg.data)"}],"source_content_type":"text/x-python","patch_set":73,"id":"f2592f9a_0c199858","line":269,"range":{"start_line":269,"start_character":8,"end_line":269,"end_character":30},"updated":"2021-05-14 11:25:16.000000000","message":"why not define this handler in ovs agent itself? Agent has vlan_manager, rpc to server and tun_br, so seems everything we need","commit_id":"e8af9d9d6e254655433834bfe4d7332cb75338f0"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"a2fecd162795034833a5ad8f2ef7ebaf323395ec","unresolved":false,"context_lines":[{"line_number":266,"context_line":"            for ip in ipv4_addresses:"},{"line_number":267,"context_line":"                self.delete_garp_pkt_process_for_allowed_addr_pair(ip)"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"    def garp_packet_in_handler(self, ev):"},{"line_number":270,"context_line":"        msg \u003d ev.msg"},{"line_number":271,"context_line":"        # Analyize the received packets using packet library"},{"line_number":272,"context_line":"        pkt \u003d packet.Packet(msg.data)"}],"source_content_type":"text/x-python","patch_set":73,"id":"e4fee433_b0950f03","line":269,"range":{"start_line":269,"start_character":8,"end_line":269,"end_character":30},"in_reply_to":"f2592f9a_0c199858","updated":"2021-05-20 15:07:47.000000000","message":"You are right. It may be better solution. Let\u0027s try it :)","commit_id":"e8af9d9d6e254655433834bfe4d7332cb75338f0"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"865513d8960f9cd18c58d01ad32c3cda7906b68e","unresolved":true,"context_lines":[{"line_number":41,"context_line":"    of_tables \u003d constants.TUN_BR_ALL_TABLES"},{"line_number":42,"context_line":"    rpc \u003d None"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":45,"context_line":"        super(OVSTunnelBridge, self).__init__(*args, **kwargs)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def setup_default_table(self, patch_int_ofport, arp_responder_enabled):"},{"line_number":48,"context_line":"        (dp, ofp, ofpp) \u003d self._get_dp()"}],"source_content_type":"text/x-python","patch_set":89,"id":"8171e025_39848f54","line":45,"range":{"start_line":44,"start_character":25,"end_line":45,"end_character":39},"updated":"2021-06-09 16:15:16.000000000","message":"unnecessary","commit_id":"e57d3a39a39d0bda015f2ac6abb65a1c5e07f72a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"abf17b439cacbdcdc3815637337fcd48efded338","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    of_tables \u003d constants.TUN_BR_ALL_TABLES"},{"line_number":42,"context_line":"    rpc \u003d None"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":45,"context_line":"        super(OVSTunnelBridge, self).__init__(*args, **kwargs)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def setup_default_table(self, patch_int_ofport, arp_responder_enabled):"},{"line_number":48,"context_line":"        (dp, ofp, ofpp) \u003d self._get_dp()"}],"source_content_type":"text/x-python","patch_set":89,"id":"80e33a39_c3688f96","line":45,"range":{"start_line":44,"start_character":25,"end_line":45,"end_character":39},"in_reply_to":"8171e025_39848f54","updated":"2021-06-10 15:12:32.000000000","message":"Done","commit_id":"e57d3a39a39d0bda015f2ac6abb65a1c5e07f72a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"865513d8960f9cd18c58d01ad32c3cda7906b68e","unresolved":true,"context_lines":[{"line_number":221,"context_line":"                             arp_spa\u003dip,"},{"line_number":222,"context_line":"                             eth_dst\u003d\u0027ff:ff:ff:ff:ff:ff\u0027)"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    def add_del_garp_pkt_process_for_allowed_addr_pair("},{"line_number":225,"context_line":"            self, port_allowed_address_pairs\u003dNone,"},{"line_number":226,"context_line":"            allowed_address_pair_ips\u003dNone, operation\u003dNone):"},{"line_number":227,"context_line":"        if port_allowed_address_pairs and not allowed_address_pair_ips:"}],"source_content_type":"text/x-python","patch_set":89,"id":"5d21dc81_3a58adff","line":224,"range":{"start_line":224,"start_character":8,"end_line":224,"end_character":54},"updated":"2021-06-09 16:15:16.000000000","message":"I would call this method \"handle_garp_pkt_process_for_allowed_addr_pair\"","commit_id":"e57d3a39a39d0bda015f2ac6abb65a1c5e07f72a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"abf17b439cacbdcdc3815637337fcd48efded338","unresolved":false,"context_lines":[{"line_number":221,"context_line":"                             arp_spa\u003dip,"},{"line_number":222,"context_line":"                             eth_dst\u003d\u0027ff:ff:ff:ff:ff:ff\u0027)"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    def add_del_garp_pkt_process_for_allowed_addr_pair("},{"line_number":225,"context_line":"            self, port_allowed_address_pairs\u003dNone,"},{"line_number":226,"context_line":"            allowed_address_pair_ips\u003dNone, operation\u003dNone):"},{"line_number":227,"context_line":"        if port_allowed_address_pairs and not allowed_address_pair_ips:"}],"source_content_type":"text/x-python","patch_set":89,"id":"e631c4ed_257e9b52","line":224,"range":{"start_line":224,"start_character":8,"end_line":224,"end_character":54},"in_reply_to":"5d21dc81_3a58adff","updated":"2021-06-10 15:12:32.000000000","message":"Done","commit_id":"e57d3a39a39d0bda015f2ac6abb65a1c5e07f72a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"865513d8960f9cd18c58d01ad32c3cda7906b68e","unresolved":true,"context_lines":[{"line_number":242,"context_line":"            for ip in ipv4_addresses:"},{"line_number":243,"context_line":"                self.delete_garp_pkt_process_for_allowed_addr_pair(ip)"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    def add_garp_pkt_process_for_allowed_addr_pair(self, ip):"},{"line_number":246,"context_line":"        # Match with the GARP packet and if matches, forward the packet"},{"line_number":247,"context_line":"        # to the controller for learning and processing."},{"line_number":248,"context_line":"        (_dp, ofp, ofpp) \u003d self._get_dp()"}],"source_content_type":"text/x-python","patch_set":89,"id":"aa2ee536_ff7747e7","line":245,"range":{"start_line":245,"start_character":8,"end_line":245,"end_character":50},"updated":"2021-06-09 16:15:16.000000000","message":"this method is only called in the upper one, I would make it private","commit_id":"e57d3a39a39d0bda015f2ac6abb65a1c5e07f72a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"abf17b439cacbdcdc3815637337fcd48efded338","unresolved":false,"context_lines":[{"line_number":242,"context_line":"            for ip in ipv4_addresses:"},{"line_number":243,"context_line":"                self.delete_garp_pkt_process_for_allowed_addr_pair(ip)"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    def add_garp_pkt_process_for_allowed_addr_pair(self, ip):"},{"line_number":246,"context_line":"        # Match with the GARP packet and if matches, forward the packet"},{"line_number":247,"context_line":"        # to the controller for learning and processing."},{"line_number":248,"context_line":"        (_dp, ofp, ofpp) \u003d self._get_dp()"}],"source_content_type":"text/x-python","patch_set":89,"id":"b84b83a5_d9320abd","line":245,"range":{"start_line":245,"start_character":8,"end_line":245,"end_character":50},"in_reply_to":"aa2ee536_ff7747e7","updated":"2021-06-10 15:12:32.000000000","message":"Done","commit_id":"e57d3a39a39d0bda015f2ac6abb65a1c5e07f72a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"865513d8960f9cd18c58d01ad32c3cda7906b68e","unresolved":true,"context_lines":[{"line_number":250,"context_line":"        self.install_controller("},{"line_number":251,"context_line":"            table_id\u003dconstants.GARP_SNOOP_TABLE, priority\u003d10, match\u003dmatch)"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"    def delete_garp_pkt_process_for_allowed_addr_pair(self, ip):"},{"line_number":254,"context_line":"        (_dp, ofp, ofpp) \u003d self._get_dp()"},{"line_number":255,"context_line":"        match \u003d self._garp_request_match(ofp, ofpp, ip)"},{"line_number":256,"context_line":"        self.uninstall_flows(table_id\u003dconstants.GARP_SNOOP_TABLE, match\u003dmatch)"}],"source_content_type":"text/x-python","patch_set":89,"id":"8d67f33d_872e7c76","line":253,"updated":"2021-06-09 16:15:16.000000000","message":"this method is only called in the upper one, I would make it private","commit_id":"e57d3a39a39d0bda015f2ac6abb65a1c5e07f72a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"abf17b439cacbdcdc3815637337fcd48efded338","unresolved":false,"context_lines":[{"line_number":250,"context_line":"        self.install_controller("},{"line_number":251,"context_line":"            table_id\u003dconstants.GARP_SNOOP_TABLE, priority\u003d10, match\u003dmatch)"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"    def delete_garp_pkt_process_for_allowed_addr_pair(self, ip):"},{"line_number":254,"context_line":"        (_dp, ofp, ofpp) \u003d self._get_dp()"},{"line_number":255,"context_line":"        match \u003d self._garp_request_match(ofp, ofpp, ip)"},{"line_number":256,"context_line":"        self.uninstall_flows(table_id\u003dconstants.GARP_SNOOP_TABLE, match\u003dmatch)"}],"source_content_type":"text/x-python","patch_set":89,"id":"6bcee85e_475f217a","line":253,"in_reply_to":"8d67f33d_872e7c76","updated":"2021-06-10 15:12:32.000000000","message":"Done","commit_id":"e57d3a39a39d0bda015f2ac6abb65a1c5e07f72a"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"b92f68607b4f06af7ebafe59406d88f0e943f5f6","unresolved":true,"context_lines":[{"line_number":55,"context_line":"            # REVISIT(yamamoto): add arp_op\u003darp.ARP_REQUEST matcher?"},{"line_number":56,"context_line":"            # TODO(slaweq): define ff:ff:ff:ff:ff:ff as constant in the"},{"line_number":57,"context_line":"            # neutron-lib and use it here (and in all other places in the"},{"line_number":58,"context_line":"            # neutron code)"},{"line_number":59,"context_line":"            self.install_goto(dest_table_id\u003dconstants.GARP_SNOOP_TABLE,"},{"line_number":60,"context_line":"                              table_id\u003dconstants.PATCH_LV_TO_TUN,"},{"line_number":61,"context_line":"                              priority\u003d1,"}],"source_content_type":"text/x-python","patch_set":102,"id":"19188949_0054d561","line":58,"updated":"2022-01-04 16:30:32.000000000","message":"There is BROADCAST_MAC in constants.py but it\u0027s all-CAPS if that matters.","commit_id":"57159f7fdb25a31cdac114b3fcb3f78e4a301753"}],"neutron/plugins/ml2/drivers/openvswitch/agent/openflow/native/ofswitch.py":[{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"56f1b7d4579c4d074a9c941ea628d89968c151ef","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                raise RuntimeError(m)"},{"line_number":82,"context_line":"            eventlet.sleep(1)"},{"line_number":83,"context_line":"        return dp"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def packet_in_handler(self, ev):"},{"line_number":86,"context_line":"        msg \u003d ev.msg"},{"line_number":87,"context_line":"        datapath \u003d msg.datapath"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_e1571801","line":84,"updated":"2018-09-24 22:48:23.000000000","message":"Do I need to register this function with the Ryu-app or will it automatically handle based on the event?\nIf we need to register, where should we register here in this file. It seems that the Ryu-app is initiated only at \u0027__init__\u0027 function? Any suggestions?","commit_id":"0c9941fb72333c5eaf3a9909d2241ffcbe2a8f2d"}],"neutron/plugins/ml2/drivers/openvswitch/agent/openflow/native/ovs_oskenapp.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"be3e161b81fdef2c76b3072cc6cd96a868f4c41d","unresolved":false,"context_lines":[{"line_number":79,"context_line":"    @handler.set_ev_cls(ofp_event.EventOFPPacketIn, handler.MAIN_DISPATCHER)"},{"line_number":80,"context_line":"    def packet_in_handler(self, ev):"},{"line_number":81,"context_line":"        LOG.debug(\"Registered packet in handlers: \""},{"line_number":82,"context_line":"                  \"%s\", self.packet_in_handlers)"},{"line_number":83,"context_line":"        for caller in self.packet_in_handlers:"},{"line_number":84,"context_line":"            caller(ev)"}],"source_content_type":"text/x-python","patch_set":30,"id":"1f769fc5_38a8b875","line":82,"updated":"2019-01-02 21:17:18.000000000","message":"How often is this printed?","commit_id":"2613ff583e5a33812a18affbf517431e81fc371a"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"b52ed2998b9c7e387d93af84fcdaecbbb3c63ba6","unresolved":false,"context_lines":[{"line_number":79,"context_line":"    @handler.set_ev_cls(ofp_event.EventOFPPacketIn, handler.MAIN_DISPATCHER)"},{"line_number":80,"context_line":"    def packet_in_handler(self, ev):"},{"line_number":81,"context_line":"        LOG.debug(\"Registered packet in handlers: \""},{"line_number":82,"context_line":"                  \"%s\", self.packet_in_handlers)"},{"line_number":83,"context_line":"        for caller in self.packet_in_handlers:"},{"line_number":84,"context_line":"            caller(ev)"}],"source_content_type":"text/x-python","patch_set":30,"id":"ffd0ebdf_f2ff0832","line":82,"in_reply_to":"1f769fc5_38a8b875","updated":"2019-01-02 23:30:59.000000000","message":"It should be printed only once when the agent starts.","commit_id":"2613ff583e5a33812a18affbf517431e81fc371a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"8efe7f32dac3c1437a383e603e4bc18e43fcf12b","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        }"},{"line_number":71,"context_line":"        return hub.spawn(agent_main_wrapper, bridge_classes, raise_error\u003dTrue)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def register_packet_in_handler(self, caller):"},{"line_number":74,"context_line":"        self.packet_in_handlers.append(caller)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def unregister_packet_in_handler(self, caller):"}],"source_content_type":"text/x-python","patch_set":47,"id":"9f560f44_8ccb2e70","line":73,"updated":"2020-09-10 10:19:46.000000000","message":"Those methods are already provided by OVSLogOSKenApp.\n\nWhy don\u0027t inherit from this class?","commit_id":"048804332fba86e23d627a8d8db3d3f846c5ae84"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"9966d8b65e2e5f7c5d09afc16455aa6ab4541617","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        }"},{"line_number":71,"context_line":"        return hub.spawn(agent_main_wrapper, bridge_classes, raise_error\u003dTrue)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def register_packet_in_handler(self, caller):"},{"line_number":74,"context_line":"        self.packet_in_handlers.append(caller)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def unregister_packet_in_handler(self, caller):"}],"source_content_type":"text/x-python","patch_set":47,"id":"9f560f44_e553c614","line":73,"in_reply_to":"9f560f44_8ccb2e70","updated":"2020-09-19 06:50:15.000000000","message":"Done","commit_id":"048804332fba86e23d627a8d8db3d3f846c5ae84"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8a78f8ea8d9a8a2ef4845129038b7a7414b4580e","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        for caller in self.packet_in_handlers:"},{"line_number":69,"context_line":"            caller(ev)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"class OVSNeutronAgentOSKenApp(BaseNeutronAgentOSKenApp):"},{"line_number":72,"context_line":"    OFP_VERSIONS \u003d [ofproto_v1_3.OFP_VERSION]"},{"line_number":73,"context_line":"    packet_in_handlers \u003d []"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-python","patch_set":48,"id":"9f560f44_2eb551d1","line":71,"updated":"2020-09-16 12:00:46.000000000","message":"pep8: E302 expected 2 blank lines, found 1","commit_id":"2ca5de3908729dc1e31aeda003605cbeb32c3567"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"517c6093efc2c241a7c00bdf6b5b3f1cd88662f2","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        for caller in self.packet_in_handlers:"},{"line_number":69,"context_line":"            caller(ev)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"class OVSNeutronAgentOSKenApp(BaseNeutronAgentOSKenApp):"},{"line_number":72,"context_line":"    OFP_VERSIONS \u003d [ofproto_v1_3.OFP_VERSION]"},{"line_number":73,"context_line":"    packet_in_handlers \u003d []"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-python","patch_set":48,"id":"9f560f44_adaed07d","line":71,"updated":"2020-09-11 15:38:52.000000000","message":"pep8: E302 expected 2 blank lines, found 1","commit_id":"2ca5de3908729dc1e31aeda003605cbeb32c3567"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"3e2e1aec07089be4aba183fed1f928aedb5ec525","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"class OVSNeutronAgentOSKenApp(base_oskenapp.BaseNeutronAgentOSKenApp):"},{"line_number":55,"context_line":"    OFP_VERSIONS \u003d [ofproto_v1_3.OFP_VERSION]"},{"line_number":56,"context_line":"    packet_in_handlers \u003d []"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def start(self):"}],"source_content_type":"text/x-python","patch_set":49,"id":"9f560f44_b9f82d4a","line":55,"updated":"2020-09-22 09:07:25.000000000","message":"not needed","commit_id":"67c0faa1bef3daa3270fbf995f0b374407911745"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"d59964534f0ee6cdcb9947b5573cc530c14b6b5f","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"class OVSNeutronAgentOSKenApp(base_oskenapp.BaseNeutronAgentOSKenApp):"},{"line_number":55,"context_line":"    OFP_VERSIONS \u003d [ofproto_v1_3.OFP_VERSION]"},{"line_number":56,"context_line":"    packet_in_handlers \u003d []"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def start(self):"}],"source_content_type":"text/x-python","patch_set":49,"id":"9f560f44_d4cbff46","line":55,"in_reply_to":"9f560f44_9c139701","updated":"2020-09-23 20:40:12.000000000","message":"Done","commit_id":"67c0faa1bef3daa3270fbf995f0b374407911745"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"2e73a34b15f623c6fddff40cec4b1f5643075840","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"class OVSNeutronAgentOSKenApp(base_oskenapp.BaseNeutronAgentOSKenApp):"},{"line_number":55,"context_line":"    OFP_VERSIONS \u003d [ofproto_v1_3.OFP_VERSION]"},{"line_number":56,"context_line":"    packet_in_handlers \u003d []"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def start(self):"}],"source_content_type":"text/x-python","patch_set":49,"id":"9f560f44_9c139701","line":55,"in_reply_to":"9f560f44_b9f82d4a","updated":"2020-09-22 09:41:42.000000000","message":"+1","commit_id":"67c0faa1bef3daa3270fbf995f0b374407911745"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"3e2e1aec07089be4aba183fed1f928aedb5ec525","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"class OVSNeutronAgentOSKenApp(base_oskenapp.BaseNeutronAgentOSKenApp):"},{"line_number":55,"context_line":"    OFP_VERSIONS \u003d [ofproto_v1_3.OFP_VERSION]"},{"line_number":56,"context_line":"    packet_in_handlers \u003d []"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def start(self):"},{"line_number":59,"context_line":"        # Start os-ken event loop thread"}],"source_content_type":"text/x-python","patch_set":49,"id":"9f560f44_59ff5133","line":56,"updated":"2020-09-22 09:07:25.000000000","message":"nit: not needed","commit_id":"67c0faa1bef3daa3270fbf995f0b374407911745"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"2e73a34b15f623c6fddff40cec4b1f5643075840","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"class OVSNeutronAgentOSKenApp(base_oskenapp.BaseNeutronAgentOSKenApp):"},{"line_number":55,"context_line":"    OFP_VERSIONS \u003d [ofproto_v1_3.OFP_VERSION]"},{"line_number":56,"context_line":"    packet_in_handlers \u003d []"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def start(self):"},{"line_number":59,"context_line":"        # Start os-ken event loop thread"}],"source_content_type":"text/x-python","patch_set":49,"id":"9f560f44_fcd1f330","line":56,"in_reply_to":"9f560f44_59ff5133","updated":"2020-09-22 09:41:42.000000000","message":"+1","commit_id":"67c0faa1bef3daa3270fbf995f0b374407911745"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"d59964534f0ee6cdcb9947b5573cc530c14b6b5f","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"class OVSNeutronAgentOSKenApp(base_oskenapp.BaseNeutronAgentOSKenApp):"},{"line_number":55,"context_line":"    OFP_VERSIONS \u003d [ofproto_v1_3.OFP_VERSION]"},{"line_number":56,"context_line":"    packet_in_handlers \u003d []"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def start(self):"},{"line_number":59,"context_line":"        # Start os-ken event loop thread"}],"source_content_type":"text/x-python","patch_set":49,"id":"9f560f44_14d297fd","line":56,"in_reply_to":"9f560f44_fcd1f330","updated":"2020-09-23 20:40:12.000000000","message":"Done","commit_id":"67c0faa1bef3daa3270fbf995f0b374407911745"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"081d988e99c3da0250c89772a5a81e4f9d3ec3ee","unresolved":false,"context_lines":[{"line_number":19,"context_line":"import os_ken.app.ofctl.api  # noqa"},{"line_number":20,"context_line":"from os_ken.base import app_manager"},{"line_number":21,"context_line":"from os_ken.lib import hub"},{"line_number":22,"context_line":"from os_ken.ofproto import ofproto_v1_3"},{"line_number":23,"context_line":"from oslo_log import log as logging"},{"line_number":24,"context_line":"from oslo_utils import excutils"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":50,"id":"9f560f44_e87bc425","line":22,"updated":"2020-09-24 01:52:52.000000000","message":"pep8: F401 \u0027os_ken.ofproto.ofproto_v1_3\u0027 imported but unused","commit_id":"052364732c0bd7c335bb5da48bc7115726471ef8"}],"neutron/plugins/ml2/drivers/openvswitch/agent/openflow/native/ovs_ryuapp.py":[{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"313c7a843139f919f7d84f6017502395eecb4d9d","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        return hub.spawn(agent_main_wrapper, bridge_classes, raise_error\u003dTrue)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    @handler.set_ev_cls(ofp_event.EventOFPPacketIn, handler.MAIN_DISPATCHER)"},{"line_number":78,"context_line":"    def packet_in_handler(self, ev):"},{"line_number":79,"context_line":"        LOG.debug(\"Packet in handler called\")"},{"line_number":80,"context_line":"        msg \u003d ev.msg"},{"line_number":81,"context_line":"        datapath \u003d msg.datapath"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_ef3dda29","line":78,"updated":"2018-10-30 19:59:47.000000000","message":"Does it make sense to structure the packet-in handler in a way that allows it to be extensible? This is fine for handling GARP if that\u0027s all we ever need to handler, but what if we want to deal with more than GARP in the packet-in handler?","commit_id":"771b0b3f3150326fcaf95cc08166961cba35c7ea"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"4f4837b6a65ce16b01ad15db17e4fede57d3550d","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        return hub.spawn(agent_main_wrapper, bridge_classes, raise_error\u003dTrue)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    @handler.set_ev_cls(ofp_event.EventOFPPacketIn, handler.MAIN_DISPATCHER)"},{"line_number":78,"context_line":"    def packet_in_handler(self, ev):"},{"line_number":79,"context_line":"        LOG.debug(\"Packet in handler called\")"},{"line_number":80,"context_line":"        msg \u003d ev.msg"},{"line_number":81,"context_line":"        datapath \u003d msg.datapath"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_cc9d73bb","line":78,"in_reply_to":"3f79a3b5_3c4e9cc3","updated":"2018-10-31 17:33:17.000000000","message":"I agree with you 100% that we should probably have different packet_handler_function for different purpose and it should also allow others to write their own packet_handler and register it with the ryuApp.\nSince you mentioned that you don\u0027t get what I mentioned about the \u0027start\u0027 function.\n\nAny custom_packet_handler can be registered to a local packet_handler_list that ryuApp owns and then it can loop through those packet_handler_events.\nSimilar to one shown below.\nhttps://github.com/openstack/neutron/blob/a388701ddfe628e9a5bd16a78422164799b11ef8/neutron/services/logapi/drivers/openvswitch/log_ryuapp.py#L35\n\n\nBut in this case, we need to probably kind of register or add the packet_handler to the list during the ryuapp initialization or startup.\n\nThe way this file is written is odd, where the \u0027start\u0027 function is all part of the class and this RyuApp is being initialized or called from the \u0027main.py\u0027 file.\n\nSo not sure where we can register or update the packet_handler list.","commit_id":"771b0b3f3150326fcaf95cc08166961cba35c7ea"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"74c1255c6f39661f84cd1916a0b33fee216d78cc","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        return hub.spawn(agent_main_wrapper, bridge_classes, raise_error\u003dTrue)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    @handler.set_ev_cls(ofp_event.EventOFPPacketIn, handler.MAIN_DISPATCHER)"},{"line_number":78,"context_line":"    def packet_in_handler(self, ev):"},{"line_number":79,"context_line":"        LOG.debug(\"Packet in handler called\")"},{"line_number":80,"context_line":"        msg \u003d ev.msg"},{"line_number":81,"context_line":"        datapath \u003d msg.datapath"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_3c4e9cc3","line":78,"in_reply_to":"3f79a3b5_75a8b08a","updated":"2018-10-31 14:06:39.000000000","message":"After reading the ryu code (soon to be os-ken), this looks like how you register different packet handlers using ryu/os-ken. No need for anything more elaborate at the ryu/os-ken layer as far as I can tell. I still think refactoring would help keep this clean. Maybe simply renaming the method is sufficient?\n\nAs far as your question around ryuapp start(), I\u0027m not sure I understand what you\u0027re asking.\n\nhttps://github.com/openstack/os-ken/blob/master/os_ken/controller/handler.py#L49","commit_id":"771b0b3f3150326fcaf95cc08166961cba35c7ea"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"3259d404b754c1b98f3bf92affacb378e36e981f","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        return hub.spawn(agent_main_wrapper, bridge_classes, raise_error\u003dTrue)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    @handler.set_ev_cls(ofp_event.EventOFPPacketIn, handler.MAIN_DISPATCHER)"},{"line_number":78,"context_line":"    def packet_in_handler(self, ev):"},{"line_number":79,"context_line":"        LOG.debug(\"Packet in handler called\")"},{"line_number":80,"context_line":"        msg \u003d ev.msg"},{"line_number":81,"context_line":"        datapath \u003d msg.datapath"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_c578fdc3","line":78,"in_reply_to":"3f79a3b5_8a445478","updated":"2018-10-30 21:46:39.000000000","message":"A crude approach may be to expose an interface for registering handlers based on flow match fields. This allows the main packet-in handler here to dispatch application handlers (GARP handler, etc.) without cluttering the logic in the main packet-in handler. I envision something very similar to the neutron callbacks framework. That\u0027s my first thought, but perhaps we can do better than the first thing to spill out of my mind :)\n\nOne gotcha I\u0027ve seen with sort of thing is that packet-in\u0027s can stack up if a handler isn\u0027t returning quickly. One way I\u0027ve seen this handled is to hand off the packet-in to another thread for actual processing and allow the openflow thread to return to listening for openflow messages. I\u0027m not sure how ryu handles this and what our options are, but it\u0027s something to watch out for.","commit_id":"771b0b3f3150326fcaf95cc08166961cba35c7ea"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"7201be17443a7099ce63092c94da896b62a00458","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        return hub.spawn(agent_main_wrapper, bridge_classes, raise_error\u003dTrue)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    @handler.set_ev_cls(ofp_event.EventOFPPacketIn, handler.MAIN_DISPATCHER)"},{"line_number":78,"context_line":"    def packet_in_handler(self, ev):"},{"line_number":79,"context_line":"        LOG.debug(\"Packet in handler called\")"},{"line_number":80,"context_line":"        msg \u003d ev.msg"},{"line_number":81,"context_line":"        datapath \u003d msg.datapath"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_75a8b08a","line":78,"in_reply_to":"3f79a3b5_c578fdc3","updated":"2018-10-31 06:51:45.000000000","message":"This line of code shown below seems to be an option for adding different packet handlers.\nhttps://github.com/openstack/neutron/blob/a388701ddfe628e9a5bd16a78422164799b11ef8/neutron/services/logapi/drivers/openvswitch/log_ryuapp.py#L35\n\nBut I have an issue with the current \u0027ryuapp\u0027 start function.\nSince the \u0027start\u0027 has been defined here, I am not sure if there is a way to register a different packet handler defined in either \u0027br_tun\u0027 or in a different file.\n\nIn the above example, https://github.com/openstack/neutron/blob/9feb5db61c68c7b95846e80449505f4f1617dd2a/neutron/services/logapi/drivers/openvswitch/ovs_firewall_log.py#L166\n\nThis is where they register the packet_in_handler.\n( This is the same question I asked in my patch 4)","commit_id":"771b0b3f3150326fcaf95cc08166961cba35c7ea"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"128e715217696b4c049036164d9aa24fc827c754","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        return hub.spawn(agent_main_wrapper, bridge_classes, raise_error\u003dTrue)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    @handler.set_ev_cls(ofp_event.EventOFPPacketIn, handler.MAIN_DISPATCHER)"},{"line_number":78,"context_line":"    def packet_in_handler(self, ev):"},{"line_number":79,"context_line":"        LOG.debug(\"Packet in handler called\")"},{"line_number":80,"context_line":"        msg \u003d ev.msg"},{"line_number":81,"context_line":"        datapath \u003d msg.datapath"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_8c1d3b7a","line":78,"in_reply_to":"3f79a3b5_cc9d73bb","updated":"2018-10-31 18:14:30.000000000","message":"OK, this is all making sense now. Thanks for explaining this to me. I think the OVS log app introduces a nice pattern to follow.","commit_id":"771b0b3f3150326fcaf95cc08166961cba35c7ea"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"a0ce5e6bd0fd8febeae3927a51415c22d99af294","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        return hub.spawn(agent_main_wrapper, bridge_classes, raise_error\u003dTrue)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    @handler.set_ev_cls(ofp_event.EventOFPPacketIn, handler.MAIN_DISPATCHER)"},{"line_number":78,"context_line":"    def packet_in_handler(self, ev):"},{"line_number":79,"context_line":"        LOG.debug(\"Packet in handler called\")"},{"line_number":80,"context_line":"        msg \u003d ev.msg"},{"line_number":81,"context_line":"        datapath \u003d msg.datapath"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_8a445478","line":78,"in_reply_to":"3f79a3b5_ef3dda29","updated":"2018-10-30 20:53:36.000000000","message":"Yes for now we are the first consumer.\nDefinitely we can make it extensible. So what do you think we should do to extend it.\nWe can make it a generic packet_in_handler and based on the packet type do you want to handle it differently. What is your thought.","commit_id":"771b0b3f3150326fcaf95cc08166961cba35c7ea"}],"neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py":[{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"313c7a843139f919f7d84f6017502395eecb4d9d","unresolved":false,"context_lines":[{"line_number":951,"context_line":"                              if p.get(\u0027mac_address\u0027)}"},{"line_number":952,"context_line":""},{"line_number":953,"context_line":"        bridge.set_allowed_macs_for_port(vif.ofport, mac_addresses)"},{"line_number":954,"context_line":"        ipv4_addresses \u003d {ip for ip in allowedaddresses"},{"line_number":955,"context_line":"                          if netaddr.IPNetwork(ip).version \u003d\u003d 4}"},{"line_number":956,"context_line":"        if not has_zero_prefixlen_address(ipv4_addresses):"},{"line_number":957,"context_line":"            # Add the garp flow rule in the bridge when allowed_address_pair"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_af9282fa","line":954,"updated":"2018-10-30 19:59:47.000000000","message":"Honest question: what about IPv6 addresses? Do we need to handle IPv6 here at all?","commit_id":"771b0b3f3150326fcaf95cc08166961cba35c7ea"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"3259d404b754c1b98f3bf92affacb378e36e981f","unresolved":false,"context_lines":[{"line_number":951,"context_line":"                              if p.get(\u0027mac_address\u0027)}"},{"line_number":952,"context_line":""},{"line_number":953,"context_line":"        bridge.set_allowed_macs_for_port(vif.ofport, mac_addresses)"},{"line_number":954,"context_line":"        ipv4_addresses \u003d {ip for ip in allowedaddresses"},{"line_number":955,"context_line":"                          if netaddr.IPNetwork(ip).version \u003d\u003d 4}"},{"line_number":956,"context_line":"        if not has_zero_prefixlen_address(ipv4_addresses):"},{"line_number":957,"context_line":"            # Add the garp flow rule in the bridge when allowed_address_pair"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_e575f9ca","line":954,"in_reply_to":"3f79a3b5_aa2ef0a7","updated":"2018-10-30 21:46:39.000000000","message":"Just as long as we don\u0027t forget about IPv6 :)","commit_id":"771b0b3f3150326fcaf95cc08166961cba35c7ea"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"a0ce5e6bd0fd8febeae3927a51415c22d99af294","unresolved":false,"context_lines":[{"line_number":951,"context_line":"                              if p.get(\u0027mac_address\u0027)}"},{"line_number":952,"context_line":""},{"line_number":953,"context_line":"        bridge.set_allowed_macs_for_port(vif.ofport, mac_addresses)"},{"line_number":954,"context_line":"        ipv4_addresses \u003d {ip for ip in allowedaddresses"},{"line_number":955,"context_line":"                          if netaddr.IPNetwork(ip).version \u003d\u003d 4}"},{"line_number":956,"context_line":"        if not has_zero_prefixlen_address(ipv4_addresses):"},{"line_number":957,"context_line":"            # Add the garp flow rule in the bridge when allowed_address_pair"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_aa2ef0a7","line":954,"in_reply_to":"3f79a3b5_af9282fa","updated":"2018-10-30 20:53:36.000000000","message":"Yes we need to handle IPv6 as well. But I wanted to focus one at a time.\nDon\u0027t want to make it too complex to start with.","commit_id":"771b0b3f3150326fcaf95cc08166961cba35c7ea"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"5208ba6068df280c0c2ae9625bedd3c508b71ef3","unresolved":false,"context_lines":[{"line_number":951,"context_line":"                              if p.get(\u0027mac_address\u0027)}"},{"line_number":952,"context_line":""},{"line_number":953,"context_line":"        bridge.set_allowed_macs_for_port(vif.ofport, mac_addresses)"},{"line_number":954,"context_line":"        ipv4_addresses \u003d {ip for ip in allowedaddresses"},{"line_number":955,"context_line":"                          if netaddr.IPNetwork(ip).version \u003d\u003d 4}"},{"line_number":956,"context_line":"        if not has_zero_prefixlen_address(ipv4_addresses):"},{"line_number":957,"context_line":"            # Add the garp flow rule in the bridge when allowed_address_pair"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_6a6f4a29","line":954,"updated":"2018-11-01 19:50:49.000000000","message":"Going back to my question about IPv6 in a previous patch set, do we need to handle IPv6 at all here? Do we know if the bug we\u0027re trying to fix affects IPv6 allowed address pairs in the same way?","commit_id":"729aa36713f0daa2df208a8e479215f5deaebf0f"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"fc1af49ecf8e1bfa07235e7e15201c1753876b78","unresolved":false,"context_lines":[{"line_number":951,"context_line":"                              if p.get(\u0027mac_address\u0027)}"},{"line_number":952,"context_line":""},{"line_number":953,"context_line":"        bridge.set_allowed_macs_for_port(vif.ofport, mac_addresses)"},{"line_number":954,"context_line":"        ipv4_addresses \u003d {ip for ip in allowedaddresses"},{"line_number":955,"context_line":"                          if netaddr.IPNetwork(ip).version \u003d\u003d 4}"},{"line_number":956,"context_line":"        if not has_zero_prefixlen_address(ipv4_addresses):"},{"line_number":957,"context_line":"            # Add the garp flow rule in the bridge when allowed_address_pair"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_f66a5fea","line":954,"in_reply_to":"3f79a3b5_6a6f4a29","updated":"2018-11-01 23:52:18.000000000","message":"Yes eventually we need to support IPv6.","commit_id":"729aa36713f0daa2df208a8e479215f5deaebf0f"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"1996db79fbcc4fde4c43e4f80a065b0300156153","unresolved":false,"context_lines":[{"line_number":940,"context_line":"        return set(failed_devices)"},{"line_number":941,"context_line":""},{"line_number":942,"context_line":"    @staticmethod"},{"line_number":943,"context_line":"    def setup_garp_packet_sniff(bridge, tun_br, vif, port_details):"},{"line_number":944,"context_line":"        allowedaddresses \u003d []"},{"line_number":945,"context_line":"        mac_addresses \u003d {vif.vif_mac}"},{"line_number":946,"context_line":"        if port_details.get(\u0027allowed_address_pairs\u0027):"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_3a217c50","line":943,"range":{"start_line":943,"start_character":3,"end_line":943,"end_character":67},"updated":"2018-11-02 23:38:01.000000000","message":"Need to figure out how we can call this function on all nodes that are running \u0027neutron-agent\u0027.\nRight now I am seeing the flows are getting created only where the VM with the Allowed_address_pair is configured.\nBut the specific flows for allowed_address_pairs are not getting configured on the Network node and other nodes.\n(Some brainstorming required on how we get can get the information from ml2-plugin to all nodes - Is RPC the right way or can we make use of l2pop-fdb rpc to populate the Allowed_address_pair as well)","commit_id":"15fb3e91c5af5dbb108e451d0a7c8f2607739067"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"81aeab261664ebaecca44bb2fb6c9140c9b09cdf","unresolved":false,"context_lines":[{"line_number":940,"context_line":"        return set(failed_devices)"},{"line_number":941,"context_line":""},{"line_number":942,"context_line":"    @staticmethod"},{"line_number":943,"context_line":"    def setup_garp_packet_sniff(bridge, tun_br, vif, port_details):"},{"line_number":944,"context_line":"        allowedaddresses \u003d []"},{"line_number":945,"context_line":"        mac_addresses \u003d {vif.vif_mac}"},{"line_number":946,"context_line":"        if port_details.get(\u0027allowed_address_pairs\u0027):"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_7449a863","line":943,"range":{"start_line":943,"start_character":3,"end_line":943,"end_character":67},"in_reply_to":"3f79a3b5_3a217c50","updated":"2018-11-14 17:58:09.000000000","message":"Done","commit_id":"15fb3e91c5af5dbb108e451d0a7c8f2607739067"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"e260714afeee6511d1602474372957c1d29745a6","unresolved":false,"context_lines":[{"line_number":603,"context_line":"                    clean_allowed_address_pair_flow \u003d True"},{"line_number":604,"context_line":"                    allowed_addr_pair_to_remove.append(p_info)"},{"line_number":605,"context_line":"                    break"},{"line_number":606,"context_line":"            if clean_allowed_address_pair_flow:"},{"line_number":607,"context_line":"                if self.port_allowed_addr_pair_cache:"},{"line_number":608,"context_line":"                    self.port_allowed_addr_pair_cache.remove("},{"line_number":609,"context_line":"                        allowed_addr_pair_to_remove[0])"},{"line_number":610,"context_line":"                allowed_address_pair \u003d ("},{"line_number":611,"context_line":"                    allowed_addr_pair_to_remove[0].allowed_addr_pairs)"},{"line_number":612,"context_line":"                for addr_pair in allowed_address_pair:"},{"line_number":613,"context_line":"                    ip \u003d addr_pair.get(\u0027ip_address\u0027)"},{"line_number":614,"context_line":"                    br.delete_garp_pkt_process_for_allowed_addr_pair_egress("},{"line_number":615,"context_line":"                            ip)"},{"line_number":616,"context_line":"                    br.delete_garp_pkt_process_for_allowed_addr_pair_ingress("},{"line_number":617,"context_line":"                            ip)"},{"line_number":618,"context_line":""},{"line_number":619,"context_line":"            if (port_info.allowed_addr_pairs and"},{"line_number":620,"context_line":"                    not clean_allowed_address_pair_flow):"}],"source_content_type":"text/x-python","patch_set":26,"id":"3f79a3b5_6dcc3231","line":617,"range":{"start_line":606,"start_character":0,"end_line":617,"end_character":31},"updated":"2018-12-14 19:36:22.000000000","message":"Perhaps this could be broken out into its own method for readability?","commit_id":"2873a85c077a7e983c48a58d847a2afffd366394"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"232b6ced6bd244c41f6566b04b50e1dd628b276a","unresolved":false,"context_lines":[{"line_number":603,"context_line":"                    clean_allowed_address_pair_flow \u003d True"},{"line_number":604,"context_line":"                    allowed_addr_pair_to_remove.append(p_info)"},{"line_number":605,"context_line":"                    break"},{"line_number":606,"context_line":"            if clean_allowed_address_pair_flow:"},{"line_number":607,"context_line":"                if self.port_allowed_addr_pair_cache:"},{"line_number":608,"context_line":"                    self.port_allowed_addr_pair_cache.remove("},{"line_number":609,"context_line":"                        allowed_addr_pair_to_remove[0])"},{"line_number":610,"context_line":"                allowed_address_pair \u003d ("},{"line_number":611,"context_line":"                    allowed_addr_pair_to_remove[0].allowed_addr_pairs)"},{"line_number":612,"context_line":"                for addr_pair in allowed_address_pair:"},{"line_number":613,"context_line":"                    ip \u003d addr_pair.get(\u0027ip_address\u0027)"},{"line_number":614,"context_line":"                    br.delete_garp_pkt_process_for_allowed_addr_pair_egress("},{"line_number":615,"context_line":"                            ip)"},{"line_number":616,"context_line":"                    br.delete_garp_pkt_process_for_allowed_addr_pair_ingress("},{"line_number":617,"context_line":"                            ip)"},{"line_number":618,"context_line":""},{"line_number":619,"context_line":"            if (port_info.allowed_addr_pairs and"},{"line_number":620,"context_line":"                    not clean_allowed_address_pair_flow):"}],"source_content_type":"text/x-python","patch_set":26,"id":"3f79a3b5_367bc97d","line":617,"range":{"start_line":606,"start_character":0,"end_line":617,"end_character":31},"in_reply_to":"3f79a3b5_6dcc3231","updated":"2018-12-17 18:06:56.000000000","message":"Ok I will consider it.","commit_id":"2873a85c077a7e983c48a58d847a2afffd366394"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"e260714afeee6511d1602474372957c1d29745a6","unresolved":false,"context_lines":[{"line_number":616,"context_line":"                    br.delete_garp_pkt_process_for_allowed_addr_pair_ingress("},{"line_number":617,"context_line":"                            ip)"},{"line_number":618,"context_line":""},{"line_number":619,"context_line":"            if (port_info.allowed_addr_pairs and"},{"line_number":620,"context_line":"                    not clean_allowed_address_pair_flow):"},{"line_number":621,"context_line":"                port_info_addr_pair_tuple \u003d PortInfo_allowed_addr_pair("},{"line_number":622,"context_line":"                        mac_address\u003dport_info.mac_address,"},{"line_number":623,"context_line":"                        ip_address\u003dport_info.ip_address,"},{"line_number":624,"context_line":"                        allowed_addr_pairs\u003dport_info.allowed_addr_pairs)"},{"line_number":625,"context_line":"                if (port_info_addr_pair_tuple not"},{"line_number":626,"context_line":"                        in self.port_allowed_addr_pair_cache):"},{"line_number":627,"context_line":"                    self.port_allowed_addr_pair_cache.append("},{"line_number":628,"context_line":"                        port_info_addr_pair_tuple)"},{"line_number":629,"context_line":"                port_allowed_address_pairs \u003d port_info.allowed_addr_pairs"},{"line_number":630,"context_line":"                for p in port_allowed_address_pairs:"},{"line_number":631,"context_line":"                    allowed_address_pair_ips.append(p[\u0027ip_address\u0027])"},{"line_number":632,"context_line":""},{"line_number":633,"context_line":"                ipv4_addresses \u003d {ip for ip in allowed_address_pair_ips"},{"line_number":634,"context_line":"                                  if netaddr.IPNetwork(ip).version \u003d\u003d 4}"}],"source_content_type":"text/x-python","patch_set":26,"id":"3f79a3b5_0d77bed4","line":631,"range":{"start_line":619,"start_character":0,"end_line":631,"end_character":68},"updated":"2018-12-14 19:36:22.000000000","message":"Perhaps we could pull this out into its own method somehow as well to make it easier to isolate this logic for testing and help with readability here?","commit_id":"2873a85c077a7e983c48a58d847a2afffd366394"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"232b6ced6bd244c41f6566b04b50e1dd628b276a","unresolved":false,"context_lines":[{"line_number":616,"context_line":"                    br.delete_garp_pkt_process_for_allowed_addr_pair_ingress("},{"line_number":617,"context_line":"                            ip)"},{"line_number":618,"context_line":""},{"line_number":619,"context_line":"            if (port_info.allowed_addr_pairs and"},{"line_number":620,"context_line":"                    not clean_allowed_address_pair_flow):"},{"line_number":621,"context_line":"                port_info_addr_pair_tuple \u003d PortInfo_allowed_addr_pair("},{"line_number":622,"context_line":"                        mac_address\u003dport_info.mac_address,"},{"line_number":623,"context_line":"                        ip_address\u003dport_info.ip_address,"},{"line_number":624,"context_line":"                        allowed_addr_pairs\u003dport_info.allowed_addr_pairs)"},{"line_number":625,"context_line":"                if (port_info_addr_pair_tuple not"},{"line_number":626,"context_line":"                        in self.port_allowed_addr_pair_cache):"},{"line_number":627,"context_line":"                    self.port_allowed_addr_pair_cache.append("},{"line_number":628,"context_line":"                        port_info_addr_pair_tuple)"},{"line_number":629,"context_line":"                port_allowed_address_pairs \u003d port_info.allowed_addr_pairs"},{"line_number":630,"context_line":"                for p in port_allowed_address_pairs:"},{"line_number":631,"context_line":"                    allowed_address_pair_ips.append(p[\u0027ip_address\u0027])"},{"line_number":632,"context_line":""},{"line_number":633,"context_line":"                ipv4_addresses \u003d {ip for ip in allowed_address_pair_ips"},{"line_number":634,"context_line":"                                  if netaddr.IPNetwork(ip).version \u003d\u003d 4}"}],"source_content_type":"text/x-python","patch_set":26,"id":"3f79a3b5_f674718c","line":631,"range":{"start_line":619,"start_character":0,"end_line":631,"end_character":68},"in_reply_to":"3f79a3b5_0d77bed4","updated":"2018-12-17 18:06:56.000000000","message":"Sure I will address it","commit_id":"2873a85c077a7e983c48a58d847a2afffd366394"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"e260714afeee6511d1602474372957c1d29745a6","unresolved":false,"context_lines":[{"line_number":630,"context_line":"                for p in port_allowed_address_pairs:"},{"line_number":631,"context_line":"                    allowed_address_pair_ips.append(p[\u0027ip_address\u0027])"},{"line_number":632,"context_line":""},{"line_number":633,"context_line":"                ipv4_addresses \u003d {ip for ip in allowed_address_pair_ips"},{"line_number":634,"context_line":"                                  if netaddr.IPNetwork(ip).version \u003d\u003d 4}"},{"line_number":635,"context_line":"                if not has_zero_prefixlen_address(ipv4_addresses):"},{"line_number":636,"context_line":"                    for ip in ipv4_addresses:"},{"line_number":637,"context_line":"                        br.add_garp_pkt_process_for_allowed_addr_pair_egress("}],"source_content_type":"text/x-python","patch_set":26,"id":"3f79a3b5_2d9ddafc","line":634,"range":{"start_line":633,"start_character":0,"end_line":634,"end_character":72},"updated":"2018-12-14 19:36:22.000000000","message":"This could probably be constructed inside the loop above so we only have to loop once.","commit_id":"2873a85c077a7e983c48a58d847a2afffd366394"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"232b6ced6bd244c41f6566b04b50e1dd628b276a","unresolved":false,"context_lines":[{"line_number":630,"context_line":"                for p in port_allowed_address_pairs:"},{"line_number":631,"context_line":"                    allowed_address_pair_ips.append(p[\u0027ip_address\u0027])"},{"line_number":632,"context_line":""},{"line_number":633,"context_line":"                ipv4_addresses \u003d {ip for ip in allowed_address_pair_ips"},{"line_number":634,"context_line":"                                  if netaddr.IPNetwork(ip).version \u003d\u003d 4}"},{"line_number":635,"context_line":"                if not has_zero_prefixlen_address(ipv4_addresses):"},{"line_number":636,"context_line":"                    for ip in ipv4_addresses:"},{"line_number":637,"context_line":"                        br.add_garp_pkt_process_for_allowed_addr_pair_egress("}],"source_content_type":"text/x-python","patch_set":26,"id":"3f79a3b5_b68ef978","line":634,"range":{"start_line":633,"start_character":0,"end_line":634,"end_character":72},"in_reply_to":"3f79a3b5_2d9ddafc","updated":"2018-12-17 18:06:56.000000000","message":"Will do it.","commit_id":"2873a85c077a7e983c48a58d847a2afffd366394"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"e260714afeee6511d1602474372957c1d29745a6","unresolved":false,"context_lines":[{"line_number":1939,"context_line":"                                    removed_port_allowed_addr_ip:"},{"line_number":1940,"context_line":"                                    removed_port_allowed_addr_ip.append("},{"line_number":1941,"context_line":"                                        addr[\u0027ip_address\u0027])"},{"line_number":1942,"context_line":"            ipv4_addresses \u003d {ip for ip in removed_port_allowed_addr_ip"},{"line_number":1943,"context_line":"                              if netaddr.IPNetwork(ip).version \u003d\u003d 4}"},{"line_number":1944,"context_line":"            for ip in ipv4_addresses:"},{"line_number":1945,"context_line":"                # Remove the garp rule in the bridge when allowed_address_pair"},{"line_number":1946,"context_line":"                # is removed"},{"line_number":1947,"context_line":"                self.tun_br.\\"},{"line_number":1948,"context_line":"                    delete_garp_pkt_process_for_allowed_addr_pair_egress(ip)"},{"line_number":1949,"context_line":"                self.tun_br.\\"},{"line_number":1950,"context_line":"                    delete_garp_pkt_process_for_allowed_addr_pair_ingress(ip)"},{"line_number":1951,"context_line":""},{"line_number":1952,"context_line":"            start \u003d time.time()"},{"line_number":1953,"context_line":"            failed_devices[\u0027removed\u0027] |\u003d self.treat_devices_removed("}],"source_content_type":"text/x-python","patch_set":26,"id":"3f79a3b5_0dfede06","line":1950,"range":{"start_line":1942,"start_character":12,"end_line":1950,"end_character":77},"updated":"2018-12-14 19:36:22.000000000","message":"It looks like this bit is repeated in several places, maybe we can create some common function for determining what ingress and egress pairs to remove from the bridge?","commit_id":"2873a85c077a7e983c48a58d847a2afffd366394"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"232b6ced6bd244c41f6566b04b50e1dd628b276a","unresolved":false,"context_lines":[{"line_number":1939,"context_line":"                                    removed_port_allowed_addr_ip:"},{"line_number":1940,"context_line":"                                    removed_port_allowed_addr_ip.append("},{"line_number":1941,"context_line":"                                        addr[\u0027ip_address\u0027])"},{"line_number":1942,"context_line":"            ipv4_addresses \u003d {ip for ip in removed_port_allowed_addr_ip"},{"line_number":1943,"context_line":"                              if netaddr.IPNetwork(ip).version \u003d\u003d 4}"},{"line_number":1944,"context_line":"            for ip in ipv4_addresses:"},{"line_number":1945,"context_line":"                # Remove the garp rule in the bridge when allowed_address_pair"},{"line_number":1946,"context_line":"                # is removed"},{"line_number":1947,"context_line":"                self.tun_br.\\"},{"line_number":1948,"context_line":"                    delete_garp_pkt_process_for_allowed_addr_pair_egress(ip)"},{"line_number":1949,"context_line":"                self.tun_br.\\"},{"line_number":1950,"context_line":"                    delete_garp_pkt_process_for_allowed_addr_pair_ingress(ip)"},{"line_number":1951,"context_line":""},{"line_number":1952,"context_line":"            start \u003d time.time()"},{"line_number":1953,"context_line":"            failed_devices[\u0027removed\u0027] |\u003d self.treat_devices_removed("}],"source_content_type":"text/x-python","patch_set":26,"id":"3f79a3b5_b6d35964","line":1950,"range":{"start_line":1942,"start_character":12,"end_line":1950,"end_character":77},"in_reply_to":"3f79a3b5_0dfede06","updated":"2018-12-17 18:06:56.000000000","message":"Sure we can address it.","commit_id":"2873a85c077a7e983c48a58d847a2afffd366394"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"e3d127ff4139cbef9b34bd8c89c9a7feba255cb1","unresolved":false,"context_lines":[{"line_number":186,"context_line":"        self.deactivated_bindings \u003d set()"},{"line_number":187,"context_line":"        # Stores the port IDs whose binding has been activated"},{"line_number":188,"context_line":"        self.activated_bindings \u003d set()"},{"line_number":189,"context_line":"        self.port_allowed_addr_pair_cache \u003d []"},{"line_number":190,"context_line":"        self.network_ports \u003d collections.defaultdict(set)"},{"line_number":191,"context_line":"        # keeps association between ports and ofports to detect ofport change"},{"line_number":192,"context_line":"        self.vifname_to_ofport_map \u003d {}"}],"source_content_type":"text/x-python","patch_set":28,"id":"3f79a3b5_5a71aadb","line":189,"range":{"start_line":189,"start_character":13,"end_line":189,"end_character":41},"updated":"2018-12-18 23:45:44.000000000","message":"I notice this is a list that we end up iterating over to pick out our match in several places. Is there a way this could be more of a key-value sort of cache to save us some iterations? Just thinking out loud, if it has to be indexed by multiple attributes maybe creating a cache object with different methods for lookups might help?","commit_id":"b7fdc8cb885a1639e073f31ba102292600115863"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"9a91b4d1b03219f14bd9af4262c39d0b3f21e343","unresolved":false,"context_lines":[{"line_number":186,"context_line":"        self.deactivated_bindings \u003d set()"},{"line_number":187,"context_line":"        # Stores the port IDs whose binding has been activated"},{"line_number":188,"context_line":"        self.activated_bindings \u003d set()"},{"line_number":189,"context_line":"        self.port_allowed_addr_pair_cache \u003d []"},{"line_number":190,"context_line":"        self.network_ports \u003d collections.defaultdict(set)"},{"line_number":191,"context_line":"        # keeps association between ports and ofports to detect ofport change"},{"line_number":192,"context_line":"        self.vifname_to_ofport_map \u003d {}"}],"source_content_type":"text/x-python","patch_set":28,"id":"3f79a3b5_1d68f386","line":189,"range":{"start_line":189,"start_character":13,"end_line":189,"end_character":41},"in_reply_to":"3f79a3b5_5a71aadb","updated":"2018-12-19 22:02:31.000000000","message":"List would be better to retrieve since we would be having a exact match of the stored value that we would be comparing, rather than having a dict and sorting out with key, value pairs.","commit_id":"b7fdc8cb885a1639e073f31ba102292600115863"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"e3d127ff4139cbef9b34bd8c89c9a7feba255cb1","unresolved":false,"context_lines":[{"line_number":635,"context_line":""},{"line_number":636,"context_line":"        ipv4_addresses \u003d {ip for ip in allowed_address_pair_ips"},{"line_number":637,"context_line":"                          if netaddr.IPNetwork(ip).version \u003d\u003d 4}"},{"line_number":638,"context_line":"        if operation \u003d\u003d \u0027add\u0027:"},{"line_number":639,"context_line":"            if not has_zero_prefixlen_address(ipv4_addresses):"},{"line_number":640,"context_line":"                for ip in ipv4_addresses:"},{"line_number":641,"context_line":"                    br.add_garp_pkt_process_for_allowed_addr_pair_egress(ip)"}],"source_content_type":"text/x-python","patch_set":28,"id":"3f79a3b5_ba8c7e2c","line":638,"range":{"start_line":638,"start_character":25,"end_line":638,"end_character":28},"updated":"2018-12-18 23:45:44.000000000","message":"Are there constants for this and L643?","commit_id":"b7fdc8cb885a1639e073f31ba102292600115863"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"9a91b4d1b03219f14bd9af4262c39d0b3f21e343","unresolved":false,"context_lines":[{"line_number":635,"context_line":""},{"line_number":636,"context_line":"        ipv4_addresses \u003d {ip for ip in allowed_address_pair_ips"},{"line_number":637,"context_line":"                          if netaddr.IPNetwork(ip).version \u003d\u003d 4}"},{"line_number":638,"context_line":"        if operation \u003d\u003d \u0027add\u0027:"},{"line_number":639,"context_line":"            if not has_zero_prefixlen_address(ipv4_addresses):"},{"line_number":640,"context_line":"                for ip in ipv4_addresses:"},{"line_number":641,"context_line":"                    br.add_garp_pkt_process_for_allowed_addr_pair_egress(ip)"}],"source_content_type":"text/x-python","patch_set":28,"id":"3f79a3b5_dd5d9be5","line":638,"range":{"start_line":638,"start_character":25,"end_line":638,"end_character":28},"in_reply_to":"3f79a3b5_ba8c7e2c","updated":"2018-12-19 22:02:31.000000000","message":"Not sure I can check.","commit_id":"b7fdc8cb885a1639e073f31ba102292600115863"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"e3d127ff4139cbef9b34bd8c89c9a7feba255cb1","unresolved":false,"context_lines":[{"line_number":1928,"context_line":"            for p_info in removed_port_infos:"},{"line_number":1929,"context_line":"                for addr_cache_info in self.port_allowed_addr_pair_cache:"},{"line_number":1930,"context_line":"                    address_pair \u003d addr_cache_info.allowed_addr_pairs"},{"line_number":1931,"context_line":"                    if len(address_pair):"},{"line_number":1932,"context_line":"                        for addr in address_pair:"},{"line_number":1933,"context_line":"                            if p_info \u003d\u003d addr[\u0027port_id\u0027]:"},{"line_number":1934,"context_line":"                                if addr[\u0027ip_address\u0027] not in \\"},{"line_number":1935,"context_line":"                                    removed_port_allowed_addr_ip:"}],"source_content_type":"text/x-python","patch_set":28,"id":"3f79a3b5_5a83eaa7","line":1932,"range":{"start_line":1931,"start_character":20,"end_line":1932,"end_character":49},"updated":"2018-12-18 23:45:44.000000000","message":"Nit: Wouldn\u0027t \"for addr in address_pair:\" be sufficient?","commit_id":"b7fdc8cb885a1639e073f31ba102292600115863"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"9a91b4d1b03219f14bd9af4262c39d0b3f21e343","unresolved":false,"context_lines":[{"line_number":1928,"context_line":"            for p_info in removed_port_infos:"},{"line_number":1929,"context_line":"                for addr_cache_info in self.port_allowed_addr_pair_cache:"},{"line_number":1930,"context_line":"                    address_pair \u003d addr_cache_info.allowed_addr_pairs"},{"line_number":1931,"context_line":"                    if len(address_pair):"},{"line_number":1932,"context_line":"                        for addr in address_pair:"},{"line_number":1933,"context_line":"                            if p_info \u003d\u003d addr[\u0027port_id\u0027]:"},{"line_number":1934,"context_line":"                                if addr[\u0027ip_address\u0027] not in \\"},{"line_number":1935,"context_line":"                                    removed_port_allowed_addr_ip:"}],"source_content_type":"text/x-python","patch_set":28,"id":"3f79a3b5_7dfc87bb","line":1932,"range":{"start_line":1931,"start_character":20,"end_line":1932,"end_character":49},"in_reply_to":"3f79a3b5_5a83eaa7","updated":"2018-12-19 22:02:31.000000000","message":"I think I did see some error while running the code, where it said that address_pair was not iterable.","commit_id":"b7fdc8cb885a1639e073f31ba102292600115863"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"e3d127ff4139cbef9b34bd8c89c9a7feba255cb1","unresolved":false,"context_lines":[{"line_number":1930,"context_line":"                    address_pair \u003d addr_cache_info.allowed_addr_pairs"},{"line_number":1931,"context_line":"                    if len(address_pair):"},{"line_number":1932,"context_line":"                        for addr in address_pair:"},{"line_number":1933,"context_line":"                            if p_info \u003d\u003d addr[\u0027port_id\u0027]:"},{"line_number":1934,"context_line":"                                if addr[\u0027ip_address\u0027] not in \\"},{"line_number":1935,"context_line":"                                    removed_port_allowed_addr_ip:"},{"line_number":1936,"context_line":"                                    removed_port_allowed_addr_ip.append("},{"line_number":1937,"context_line":"                                        addr[\u0027ip_address\u0027])"}],"source_content_type":"text/x-python","patch_set":28,"id":"3f79a3b5_9aa66255","line":1934,"range":{"start_line":1933,"start_character":28,"end_line":1934,"end_character":62},"updated":"2018-12-18 23:45:44.000000000","message":"Nit: this could be collapsed into:\n\nif p_info \u003d\u003d addr[\u0027port_id\u0027] and addr[\u0027ip_address\u0027] not in ...\n....\n....","commit_id":"b7fdc8cb885a1639e073f31ba102292600115863"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"9a91b4d1b03219f14bd9af4262c39d0b3f21e343","unresolved":false,"context_lines":[{"line_number":1930,"context_line":"                    address_pair \u003d addr_cache_info.allowed_addr_pairs"},{"line_number":1931,"context_line":"                    if len(address_pair):"},{"line_number":1932,"context_line":"                        for addr in address_pair:"},{"line_number":1933,"context_line":"                            if p_info \u003d\u003d addr[\u0027port_id\u0027]:"},{"line_number":1934,"context_line":"                                if addr[\u0027ip_address\u0027] not in \\"},{"line_number":1935,"context_line":"                                    removed_port_allowed_addr_ip:"},{"line_number":1936,"context_line":"                                    removed_port_allowed_addr_ip.append("},{"line_number":1937,"context_line":"                                        addr[\u0027ip_address\u0027])"}],"source_content_type":"text/x-python","patch_set":28,"id":"3f79a3b5_9d0163b7","line":1934,"range":{"start_line":1933,"start_character":28,"end_line":1934,"end_character":62},"in_reply_to":"3f79a3b5_9aa66255","updated":"2018-12-19 22:02:31.000000000","message":"Will check that and will update.","commit_id":"b7fdc8cb885a1639e073f31ba102292600115863"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"be3e161b81fdef2c76b3072cc6cd96a868f4c41d","unresolved":false,"context_lines":[{"line_number":635,"context_line":"                allowed_address_pair_ips.append(p[\u0027ip_address\u0027])"},{"line_number":636,"context_line":""},{"line_number":637,"context_line":"        ipv4_addresses \u003d {ip for ip in allowed_address_pair_ips"},{"line_number":638,"context_line":"                          if netaddr.IPNetwork(ip).version \u003d\u003d 4}"},{"line_number":639,"context_line":"        if operation \u003d\u003d \u0027add\u0027:"},{"line_number":640,"context_line":"            if not has_zero_prefixlen_address(ipv4_addresses):"},{"line_number":641,"context_line":"                for ip in ipv4_addresses:"}],"source_content_type":"text/x-python","patch_set":30,"id":"1f769fc5_58cc9469","line":638,"range":{"start_line":638,"start_character":62,"end_line":638,"end_character":63},"updated":"2019-01-02 21:17:18.000000000","message":"nit: IP_VERSION_4 constant","commit_id":"2613ff583e5a33812a18affbf517431e81fc371a"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"b52ed2998b9c7e387d93af84fcdaecbbb3c63ba6","unresolved":false,"context_lines":[{"line_number":635,"context_line":"                allowed_address_pair_ips.append(p[\u0027ip_address\u0027])"},{"line_number":636,"context_line":""},{"line_number":637,"context_line":"        ipv4_addresses \u003d {ip for ip in allowed_address_pair_ips"},{"line_number":638,"context_line":"                          if netaddr.IPNetwork(ip).version \u003d\u003d 4}"},{"line_number":639,"context_line":"        if operation \u003d\u003d \u0027add\u0027:"},{"line_number":640,"context_line":"            if not has_zero_prefixlen_address(ipv4_addresses):"},{"line_number":641,"context_line":"                for ip in ipv4_addresses:"}],"source_content_type":"text/x-python","patch_set":30,"id":"ffd0ebdf_5294d4e8","line":638,"range":{"start_line":638,"start_character":62,"end_line":638,"end_character":63},"in_reply_to":"1f769fc5_58cc9469","updated":"2019-01-02 23:30:59.000000000","message":"sure","commit_id":"2613ff583e5a33812a18affbf517431e81fc371a"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"be3e161b81fdef2c76b3072cc6cd96a868f4c41d","unresolved":false,"context_lines":[{"line_number":666,"context_line":"                # allowed_addr_pair might have moved or have"},{"line_number":667,"context_line":"                # been removed from the port."},{"line_number":668,"context_line":"                port_info_removed.append(p_info)"},{"line_number":669,"context_line":"                p_allowed_addr_pairs \u003d p_info.allowed_addr_pairs"},{"line_number":670,"context_line":"        self._add_del_garp_pkt_process_for_allowed_addr_pair("},{"line_number":671,"context_line":"            br, port_allowed_address_pairs\u003dp_allowed_addr_pairs,"},{"line_number":672,"context_line":"            operation\u003d\u0027delete\u0027)"}],"source_content_type":"text/x-python","patch_set":30,"id":"1f769fc5_78ccf060","line":669,"updated":"2019-01-02 21:17:18.000000000","message":"These lines are duplicated on L659-60, so maybe can combine the if()\u0027s","commit_id":"2613ff583e5a33812a18affbf517431e81fc371a"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"b52ed2998b9c7e387d93af84fcdaecbbb3c63ba6","unresolved":false,"context_lines":[{"line_number":666,"context_line":"                # allowed_addr_pair might have moved or have"},{"line_number":667,"context_line":"                # been removed from the port."},{"line_number":668,"context_line":"                port_info_removed.append(p_info)"},{"line_number":669,"context_line":"                p_allowed_addr_pairs \u003d p_info.allowed_addr_pairs"},{"line_number":670,"context_line":"        self._add_del_garp_pkt_process_for_allowed_addr_pair("},{"line_number":671,"context_line":"            br, port_allowed_address_pairs\u003dp_allowed_addr_pairs,"},{"line_number":672,"context_line":"            operation\u003d\u0027delete\u0027)"}],"source_content_type":"text/x-python","patch_set":30,"id":"ffd0ebdf_d28764b6","line":669,"in_reply_to":"1f769fc5_78ccf060","updated":"2019-01-02 23:30:59.000000000","message":"Let me check, combining the if\u0027s might cause some trouble.","commit_id":"2613ff583e5a33812a18affbf517431e81fc371a"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"be3e161b81fdef2c76b3072cc6cd96a868f4c41d","unresolved":false,"context_lines":[{"line_number":1058,"context_line":"                    port_allowed_address_pair_cache_to_delete.append("},{"line_number":1059,"context_line":"                        p_info)"},{"line_number":1060,"context_line":"                    allowed_address_pairs \u003d p_info.allowed_addr_pairs"},{"line_number":1061,"context_line":"                    for p in allowed_address_pairs:"},{"line_number":1062,"context_line":"                        allowedaddresses.append(p[\u0027ip_address\u0027])"},{"line_number":1063,"context_line":"                    break"},{"line_number":1064,"context_line":"            self._add_del_garp_pkt_process_for_allowed_addr_pair("}],"source_content_type":"text/x-python","patch_set":30,"id":"1f769fc5_b8036873","line":1061,"range":{"start_line":1061,"start_character":29,"end_line":1061,"end_character":50},"updated":"2019-01-02 21:17:18.000000000","message":"can just use p_info.allowed_addr_pairs as I don\u0027t see allowed_address_pairs used below.","commit_id":"2613ff583e5a33812a18affbf517431e81fc371a"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"b52ed2998b9c7e387d93af84fcdaecbbb3c63ba6","unresolved":false,"context_lines":[{"line_number":1058,"context_line":"                    port_allowed_address_pair_cache_to_delete.append("},{"line_number":1059,"context_line":"                        p_info)"},{"line_number":1060,"context_line":"                    allowed_address_pairs \u003d p_info.allowed_addr_pairs"},{"line_number":1061,"context_line":"                    for p in allowed_address_pairs:"},{"line_number":1062,"context_line":"                        allowedaddresses.append(p[\u0027ip_address\u0027])"},{"line_number":1063,"context_line":"                    break"},{"line_number":1064,"context_line":"            self._add_del_garp_pkt_process_for_allowed_addr_pair("}],"source_content_type":"text/x-python","patch_set":30,"id":"ffd0ebdf_9291dcf4","line":1061,"range":{"start_line":1061,"start_character":29,"end_line":1061,"end_character":50},"in_reply_to":"1f769fc5_b8036873","updated":"2019-01-02 23:30:59.000000000","message":"Sure.","commit_id":"2613ff583e5a33812a18affbf517431e81fc371a"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"be3e161b81fdef2c76b3072cc6cd96a868f4c41d","unresolved":false,"context_lines":[{"line_number":1080,"context_line":"                operation\u003d\u0027add\u0027)"},{"line_number":1081,"context_line":""},{"line_number":1082,"context_line":"            ipv4_addresses \u003d {ip for ip in allowedaddresses"},{"line_number":1083,"context_line":"                              if netaddr.IPNetwork(ip).version \u003d\u003d 4}"},{"line_number":1084,"context_line":"            if not has_zero_prefixlen_address(ipv4_addresses):"},{"line_number":1085,"context_line":"                # Add the garp flow rule in the bridge when"},{"line_number":1086,"context_line":"                # allowed_address_pair"}],"source_content_type":"text/x-python","patch_set":30,"id":"1f769fc5_38d678f3","line":1083,"range":{"start_line":1083,"start_character":66,"end_line":1083,"end_character":67},"updated":"2019-01-02 21:17:18.000000000","message":"nit: constant","commit_id":"2613ff583e5a33812a18affbf517431e81fc371a"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"b52ed2998b9c7e387d93af84fcdaecbbb3c63ba6","unresolved":false,"context_lines":[{"line_number":1080,"context_line":"                operation\u003d\u0027add\u0027)"},{"line_number":1081,"context_line":""},{"line_number":1082,"context_line":"            ipv4_addresses \u003d {ip for ip in allowedaddresses"},{"line_number":1083,"context_line":"                              if netaddr.IPNetwork(ip).version \u003d\u003d 4}"},{"line_number":1084,"context_line":"            if not has_zero_prefixlen_address(ipv4_addresses):"},{"line_number":1085,"context_line":"                # Add the garp flow rule in the bridge when"},{"line_number":1086,"context_line":"                # allowed_address_pair"}],"source_content_type":"text/x-python","patch_set":30,"id":"ffd0ebdf_b28e60ce","line":1083,"range":{"start_line":1083,"start_character":66,"end_line":1083,"end_character":67},"in_reply_to":"1f769fc5_38d678f3","updated":"2019-01-02 23:30:59.000000000","message":"will address","commit_id":"2613ff583e5a33812a18affbf517431e81fc371a"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"be3e161b81fdef2c76b3072cc6cd96a868f4c41d","unresolved":false,"context_lines":[{"line_number":1090,"context_line":"                    for allowed_addr_pair in allowed_address_pair_cache:"},{"line_number":1091,"context_line":"                        if ip \u003d\u003d allowed_addr_pair[\u0027ip_address\u0027]:"},{"line_number":1092,"context_line":"                            allowed_addr_pair_list.append(allowed_addr_pair)"},{"line_number":1093,"context_line":"                if len(port_details.get(\u0027allowed_address_pairs\u0027)):"},{"line_number":1094,"context_line":"                    port_info_addr_pair_tuple \u003d PortInfo_allowed_addr_pair("},{"line_number":1095,"context_line":"                        mac_address\u003dport_mac,"},{"line_number":1096,"context_line":"                        ip_address\u003dport_ip,"}],"source_content_type":"text/x-python","patch_set":30,"id":"1f769fc5_f87c80ec","line":1093,"updated":"2019-01-02 21:17:18.000000000","message":"Seems you can do this check earlier - after L1080?  Could save some work.","commit_id":"2613ff583e5a33812a18affbf517431e81fc371a"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"b52ed2998b9c7e387d93af84fcdaecbbb3c63ba6","unresolved":false,"context_lines":[{"line_number":1090,"context_line":"                    for allowed_addr_pair in allowed_address_pair_cache:"},{"line_number":1091,"context_line":"                        if ip \u003d\u003d allowed_addr_pair[\u0027ip_address\u0027]:"},{"line_number":1092,"context_line":"                            allowed_addr_pair_list.append(allowed_addr_pair)"},{"line_number":1093,"context_line":"                if len(port_details.get(\u0027allowed_address_pairs\u0027)):"},{"line_number":1094,"context_line":"                    port_info_addr_pair_tuple \u003d PortInfo_allowed_addr_pair("},{"line_number":1095,"context_line":"                        mac_address\u003dport_mac,"},{"line_number":1096,"context_line":"                        ip_address\u003dport_ip,"}],"source_content_type":"text/x-python","patch_set":30,"id":"ffd0ebdf_32bcb068","line":1093,"in_reply_to":"1f769fc5_f87c80ec","updated":"2019-01-02 23:30:59.000000000","message":"Let me check","commit_id":"2613ff583e5a33812a18affbf517431e81fc371a"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"be3e161b81fdef2c76b3072cc6cd96a868f4c41d","unresolved":false,"context_lines":[{"line_number":1926,"context_line":"        if \u0027removed\u0027 in port_info and port_info[\u0027removed\u0027]:"},{"line_number":1927,"context_line":"            removed_port_infos \u003d port_info[\u0027removed\u0027]"},{"line_number":1928,"context_line":"            removed_port_allowed_addr_ip \u003d []"},{"line_number":1929,"context_line":"            for p_info in removed_port_infos:"},{"line_number":1930,"context_line":"                for addr_cache_info in self.port_allowed_addr_pair_cache:"},{"line_number":1931,"context_line":"                    address_pair \u003d addr_cache_info.allowed_addr_pairs"},{"line_number":1932,"context_line":"                    if len(address_pair):"}],"source_content_type":"text/x-python","patch_set":30,"id":"1f769fc5_b8d4c8be","line":1929,"updated":"2019-01-02 21:17:18.000000000","message":"Three nested for() loops is a lot, I think this can be cleaned by removing this one and changing L1934 to:\n\n    if (addr[\u0027port_id\u0027] in removed_port_infos and\n\nUnless I\u0027m mis-understanding things.","commit_id":"2613ff583e5a33812a18affbf517431e81fc371a"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"b52ed2998b9c7e387d93af84fcdaecbbb3c63ba6","unresolved":false,"context_lines":[{"line_number":1926,"context_line":"        if \u0027removed\u0027 in port_info and port_info[\u0027removed\u0027]:"},{"line_number":1927,"context_line":"            removed_port_infos \u003d port_info[\u0027removed\u0027]"},{"line_number":1928,"context_line":"            removed_port_allowed_addr_ip \u003d []"},{"line_number":1929,"context_line":"            for p_info in removed_port_infos:"},{"line_number":1930,"context_line":"                for addr_cache_info in self.port_allowed_addr_pair_cache:"},{"line_number":1931,"context_line":"                    address_pair \u003d addr_cache_info.allowed_addr_pairs"},{"line_number":1932,"context_line":"                    if len(address_pair):"}],"source_content_type":"text/x-python","patch_set":30,"id":"ffd0ebdf_92aa3c17","line":1929,"in_reply_to":"1f769fc5_b8d4c8be","updated":"2019-01-02 23:30:59.000000000","message":"Let me check this, if I can refine it.","commit_id":"2613ff583e5a33812a18affbf517431e81fc371a"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"be3e161b81fdef2c76b3072cc6cd96a868f4c41d","unresolved":false,"context_lines":[{"line_number":1929,"context_line":"            for p_info in removed_port_infos:"},{"line_number":1930,"context_line":"                for addr_cache_info in self.port_allowed_addr_pair_cache:"},{"line_number":1931,"context_line":"                    address_pair \u003d addr_cache_info.allowed_addr_pairs"},{"line_number":1932,"context_line":"                    if len(address_pair):"},{"line_number":1933,"context_line":"                        for addr in address_pair:"},{"line_number":1934,"context_line":"                            if (p_info \u003d\u003d addr[\u0027port_id\u0027] and"},{"line_number":1935,"context_line":"                                addr[\u0027ip_address\u0027] not in"}],"source_content_type":"text/x-python","patch_set":30,"id":"1f769fc5_f8656046","line":1932,"updated":"2019-01-02 21:17:18.000000000","message":"Shouldn\u0027t need this with for() loop since it will just do nothing if empty","commit_id":"2613ff583e5a33812a18affbf517431e81fc371a"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"b52ed2998b9c7e387d93af84fcdaecbbb3c63ba6","unresolved":false,"context_lines":[{"line_number":1929,"context_line":"            for p_info in removed_port_infos:"},{"line_number":1930,"context_line":"                for addr_cache_info in self.port_allowed_addr_pair_cache:"},{"line_number":1931,"context_line":"                    address_pair \u003d addr_cache_info.allowed_addr_pairs"},{"line_number":1932,"context_line":"                    if len(address_pair):"},{"line_number":1933,"context_line":"                        for addr in address_pair:"},{"line_number":1934,"context_line":"                            if (p_info \u003d\u003d addr[\u0027port_id\u0027] and"},{"line_number":1935,"context_line":"                                addr[\u0027ip_address\u0027] not in"}],"source_content_type":"text/x-python","patch_set":30,"id":"ffd0ebdf_52629418","line":1932,"in_reply_to":"1f769fc5_f8656046","updated":"2019-01-02 23:30:59.000000000","message":"will check.","commit_id":"2613ff583e5a33812a18affbf517431e81fc371a"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"be3e161b81fdef2c76b3072cc6cd96a868f4c41d","unresolved":false,"context_lines":[{"line_number":1932,"context_line":"                    if len(address_pair):"},{"line_number":1933,"context_line":"                        for addr in address_pair:"},{"line_number":1934,"context_line":"                            if (p_info \u003d\u003d addr[\u0027port_id\u0027] and"},{"line_number":1935,"context_line":"                                addr[\u0027ip_address\u0027] not in"},{"line_number":1936,"context_line":"                                    removed_port_allowed_addr_ip):"},{"line_number":1937,"context_line":"                                    removed_port_allowed_addr_ip.append("},{"line_number":1938,"context_line":"                                        addr[\u0027ip_address\u0027])"}],"source_content_type":"text/x-python","patch_set":30,"id":"1f769fc5_3872f812","line":1935,"updated":"2019-01-02 21:17:18.000000000","message":"nit: think this should be indented more and L1937 less(4)","commit_id":"2613ff583e5a33812a18affbf517431e81fc371a"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"b52ed2998b9c7e387d93af84fcdaecbbb3c63ba6","unresolved":false,"context_lines":[{"line_number":1932,"context_line":"                    if len(address_pair):"},{"line_number":1933,"context_line":"                        for addr in address_pair:"},{"line_number":1934,"context_line":"                            if (p_info \u003d\u003d addr[\u0027port_id\u0027] and"},{"line_number":1935,"context_line":"                                addr[\u0027ip_address\u0027] not in"},{"line_number":1936,"context_line":"                                    removed_port_allowed_addr_ip):"},{"line_number":1937,"context_line":"                                    removed_port_allowed_addr_ip.append("},{"line_number":1938,"context_line":"                                        addr[\u0027ip_address\u0027])"}],"source_content_type":"text/x-python","patch_set":30,"id":"ffd0ebdf_72679827","line":1935,"in_reply_to":"1f769fc5_3872f812","updated":"2019-01-02 23:30:59.000000000","message":"will do.","commit_id":"2613ff583e5a33812a18affbf517431e81fc371a"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"8283f40355de9073d25b245eefa35afd456d18ad","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"# Tracks the allowed_address_pair and port_id relation ship"},{"line_number":104,"context_line":"PortInfo_allowed_addr_pair \u003d collections.namedtuple("},{"line_number":105,"context_line":"        \u0027PortInfo_allowed_addr_pair\u0027,"},{"line_number":106,"context_line":"        \u0027mac_address ip_address allowed_addr_pairs\u0027)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"class OVSNeutronAgent(l2population_rpc.L2populationRpcCallBackTunnelMixin,"}],"source_content_type":"text/x-python","patch_set":42,"id":"3fa7e38b_d994389b","line":106,"range":{"start_line":104,"start_character":0,"end_line":106,"end_character":52},"updated":"2020-01-15 02:06:36.000000000","message":"We already have this defination [1]:\nPortInfo \u003d collections.namedtuple(\"PortInfo\",\n                                  \"mac_address ip_address allowed_addr_pairs\")\n\n[1] https://review.opendev.org/#/c/601336/42/neutron/plugins/ml2/drivers/l2pop/rpc.py@27","commit_id":"3cd8b329e999edbfc99b0f8b121f4aefe3a8ca29"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"8283f40355de9073d25b245eefa35afd456d18ad","unresolved":false,"context_lines":[{"line_number":753,"context_line":"                    self.fdb_remove_tun(context, self.tun_br, lvm,"},{"line_number":754,"context_line":"                                        agent_ports, self._tunnel_port_lookup)"},{"line_number":755,"context_line":""},{"line_number":756,"context_line":"    def _update_garp_rule_for_allowed_addr_pair(self, br, port_info):"},{"line_number":757,"context_line":"        LOG.debug(\"L2pop port_info for add: %s\", port_info)"},{"line_number":758,"context_line":"        # Check if this is an update for an existing port"},{"line_number":759,"context_line":"        clean_allowed_address_pair_flow \u003d False"}],"source_content_type":"text/x-python","patch_set":42,"id":"3fa7e38b_591b681c","line":756,"range":{"start_line":756,"start_character":20,"end_line":756,"end_character":25},"updated":"2020-01-15 02:06:36.000000000","message":"_cache_and_rule","commit_id":"3cd8b329e999edbfc99b0f8b121f4aefe3a8ca29"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"8283f40355de9073d25b245eefa35afd456d18ad","unresolved":false,"context_lines":[{"line_number":792,"context_line":"                br, port_allowed_address_pairs\u003dport_allowed_address_pairs,"},{"line_number":793,"context_line":"                operation\u003d\u0027add\u0027)"},{"line_number":794,"context_line":""},{"line_number":795,"context_line":"    def _add_del_garp_pkt_process_for_allowed_addr_pair("},{"line_number":796,"context_line":"            self, br, port_allowed_address_pairs\u003dNone,"},{"line_number":797,"context_line":"            allowed_address_pair_ips\u003dNone, operation\u003dNone):"},{"line_number":798,"context_line":"        if port_allowed_address_pairs and not allowed_address_pair_ips:"}],"source_content_type":"text/x-python","patch_set":42,"id":"3fa7e38b_5944c81a","line":795,"range":{"start_line":795,"start_character":8,"end_line":795,"end_character":16},"updated":"2020-01-15 02:06:36.000000000","message":"Looks strange, how about \"_process_garp_pkt_for_allowed_addr_pair\" ?","commit_id":"3cd8b329e999edbfc99b0f8b121f4aefe3a8ca29"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"8283f40355de9073d25b245eefa35afd456d18ad","unresolved":false,"context_lines":[{"line_number":816,"context_line":"                    br.delete_garp_pkt_process_for_allowed_addr_pair_ingress("},{"line_number":817,"context_line":"                        ip)"},{"line_number":818,"context_line":""},{"line_number":819,"context_line":"    def _delete_garp_rule_for_allowed_addr_pair(self, br, port_info):"},{"line_number":820,"context_line":"        LOG.debug(\"L2pop port_info for delete: %s\", port_info)"},{"line_number":821,"context_line":"        port_info_removed \u003d []"},{"line_number":822,"context_line":"        p_allowed_addr_pairs \u003d []"}],"source_content_type":"text/x-python","patch_set":42,"id":"3fa7e38b_194e5039","line":819,"range":{"start_line":819,"start_character":21,"end_line":819,"end_character":25},"updated":"2020-01-15 02:06:36.000000000","message":"Looks a bit confusing to me, should this be \"cache\"?","commit_id":"3cd8b329e999edbfc99b0f8b121f4aefe3a8ca29"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"8283f40355de9073d25b245eefa35afd456d18ad","unresolved":false,"context_lines":[{"line_number":1225,"context_line":"                 {\u0027up\u0027: devices_up, \u0027down\u0027: devices_down})"},{"line_number":1226,"context_line":"        return set(failed_devices)"},{"line_number":1227,"context_line":""},{"line_number":1228,"context_line":"    def setup_garp_packet_sniff(self, port_allowed_addr_pair_cache,"},{"line_number":1229,"context_line":"                                bridge, tun_br, port_details):"},{"line_number":1230,"context_line":"        allowedaddresses \u003d []"},{"line_number":1231,"context_line":"        port_allowed_address_pair_cache_to_delete \u003d []"}],"source_content_type":"text/x-python","patch_set":42,"id":"3fa7e38b_f90334bc","line":1228,"range":{"start_line":1228,"start_character":26,"end_line":1228,"end_character":31},"updated":"2020-01-15 02:06:36.000000000","message":"For people from non English speaking areas, this should make them flip the dictionary everytime.","commit_id":"3cd8b329e999edbfc99b0f8b121f4aefe3a8ca29"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"c737f7efdb1f524bafb4570af401b51e8ff713ff","unresolved":false,"context_lines":[{"line_number":1225,"context_line":"                 {\u0027up\u0027: devices_up, \u0027down\u0027: devices_down})"},{"line_number":1226,"context_line":"        return set(failed_devices)"},{"line_number":1227,"context_line":""},{"line_number":1228,"context_line":"    def setup_garp_packet_sniff(self, port_allowed_addr_pair_cache,"},{"line_number":1229,"context_line":"                                bridge, tun_br, port_details):"},{"line_number":1230,"context_line":"        allowedaddresses \u003d []"},{"line_number":1231,"context_line":"        port_allowed_address_pair_cache_to_delete \u003d []"}],"source_content_type":"text/x-python","patch_set":42,"id":"1f621f24_4324445e","line":1228,"range":{"start_line":1228,"start_character":26,"end_line":1228,"end_character":31},"in_reply_to":"3fa7e38b_f90334bc","updated":"2020-11-16 01:56:20.000000000","message":"++","commit_id":"3cd8b329e999edbfc99b0f8b121f4aefe3a8ca29"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"8283f40355de9073d25b245eefa35afd456d18ad","unresolved":false,"context_lines":[{"line_number":1226,"context_line":"        return set(failed_devices)"},{"line_number":1227,"context_line":""},{"line_number":1228,"context_line":"    def setup_garp_packet_sniff(self, port_allowed_addr_pair_cache,"},{"line_number":1229,"context_line":"                                bridge, tun_br, port_details):"},{"line_number":1230,"context_line":"        allowedaddresses \u003d []"},{"line_number":1231,"context_line":"        port_allowed_address_pair_cache_to_delete \u003d []"},{"line_number":1232,"context_line":"        port_fixed_ips \u003d port_details.get(\u0027fixed_ips\u0027)"}],"source_content_type":"text/x-python","patch_set":42,"id":"3fa7e38b_39b6ac27","line":1229,"range":{"start_line":1229,"start_character":48,"end_line":1229,"end_character":60},"updated":"2020-01-15 02:06:36.000000000","message":"IMO, one param port_details should be enough.","commit_id":"3cd8b329e999edbfc99b0f8b121f4aefe3a8ca29"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"c737f7efdb1f524bafb4570af401b51e8ff713ff","unresolved":false,"context_lines":[{"line_number":1226,"context_line":"        return set(failed_devices)"},{"line_number":1227,"context_line":""},{"line_number":1228,"context_line":"    def setup_garp_packet_sniff(self, port_allowed_addr_pair_cache,"},{"line_number":1229,"context_line":"                                bridge, tun_br, port_details):"},{"line_number":1230,"context_line":"        allowedaddresses \u003d []"},{"line_number":1231,"context_line":"        port_allowed_address_pair_cache_to_delete \u003d []"},{"line_number":1232,"context_line":"        port_fixed_ips \u003d port_details.get(\u0027fixed_ips\u0027)"}],"source_content_type":"text/x-python","patch_set":42,"id":"1f621f24_e3291037","line":1229,"range":{"start_line":1229,"start_character":48,"end_line":1229,"end_character":60},"in_reply_to":"3fa7e38b_39b6ac27","updated":"2020-11-16 01:56:20.000000000","message":"++","commit_id":"3cd8b329e999edbfc99b0f8b121f4aefe3a8ca29"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"8283f40355de9073d25b245eefa35afd456d18ad","unresolved":false,"context_lines":[{"line_number":2004,"context_line":"                if need_binding:"},{"line_number":2005,"context_line":"                    need_binding_devices.append(details)"},{"line_number":2006,"context_line":"                self.setup_garp_packet_sniff("},{"line_number":2007,"context_line":"                        self.port_allowed_addr_pair_cache,"},{"line_number":2008,"context_line":"                        self.int_br, self.tun_br, details)"},{"line_number":2009,"context_line":"                self._update_port_network(details[\u0027port_id\u0027],"},{"line_number":2010,"context_line":"                                          details[\u0027network_id\u0027])"},{"line_number":2011,"context_line":"                self.ext_manager.handle_port(self.context, details)"}],"source_content_type":"text/x-python","patch_set":42,"id":"3fa7e38b_9977a08f","line":2008,"range":{"start_line":2007,"start_character":24,"end_line":2008,"end_character":49},"updated":"2020-01-15 02:06:36.000000000","message":"Why we need all these self.*attributes* since I did not notice any call of setup_garp_packet_sniff elsewhere?","commit_id":"3cd8b329e999edbfc99b0f8b121f4aefe3a8ca29"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"c737f7efdb1f524bafb4570af401b51e8ff713ff","unresolved":false,"context_lines":[{"line_number":2004,"context_line":"                if need_binding:"},{"line_number":2005,"context_line":"                    need_binding_devices.append(details)"},{"line_number":2006,"context_line":"                self.setup_garp_packet_sniff("},{"line_number":2007,"context_line":"                        self.port_allowed_addr_pair_cache,"},{"line_number":2008,"context_line":"                        self.int_br, self.tun_br, details)"},{"line_number":2009,"context_line":"                self._update_port_network(details[\u0027port_id\u0027],"},{"line_number":2010,"context_line":"                                          details[\u0027network_id\u0027])"},{"line_number":2011,"context_line":"                self.ext_manager.handle_port(self.context, details)"}],"source_content_type":"text/x-python","patch_set":42,"id":"1f621f24_0327ec65","line":2008,"range":{"start_line":2007,"start_character":24,"end_line":2008,"end_character":49},"in_reply_to":"3fa7e38b_9977a08f","updated":"2020-11-16 01:56:20.000000000","message":"++","commit_id":"3cd8b329e999edbfc99b0f8b121f4aefe3a8ca29"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"8283f40355de9073d25b245eefa35afd456d18ad","unresolved":false,"context_lines":[{"line_number":2153,"context_line":"        failed_devices[\u0027added\u0027] |\u003d self._bind_devices(need_binding_devices)"},{"line_number":2154,"context_line":""},{"line_number":2155,"context_line":"        if \u0027removed\u0027 in port_info and port_info[\u0027removed\u0027]:"},{"line_number":2156,"context_line":"            removed_port_infos \u003d port_info[\u0027removed\u0027]"},{"line_number":2157,"context_line":"            removed_port_allowed_addr_ip \u003d []"},{"line_number":2158,"context_line":"            for p_info in removed_port_infos:"},{"line_number":2159,"context_line":"                for addr_cache_info in self.port_allowed_addr_pair_cache:"},{"line_number":2160,"context_line":"                    address_pair \u003d addr_cache_info.allowed_addr_pairs"},{"line_number":2161,"context_line":"                    for addr in address_pair:"},{"line_number":2162,"context_line":"                        if (p_info \u003d\u003d addr[\u0027port_id\u0027] and"},{"line_number":2163,"context_line":"                                addr[\u0027ip_address\u0027] not in"},{"line_number":2164,"context_line":"                                removed_port_allowed_addr_ip):"},{"line_number":2165,"context_line":"                            removed_port_allowed_addr_ip.append("},{"line_number":2166,"context_line":"                                addr[\u0027ip_address\u0027])"},{"line_number":2167,"context_line":"            self._add_del_garp_pkt_process_for_allowed_addr_pair("},{"line_number":2168,"context_line":"                self.tun_br,"},{"line_number":2169,"context_line":"                allowed_address_pair_ips\u003dremoved_port_allowed_addr_ip,"},{"line_number":2170,"context_line":"                operation\u003d\u0027delete\u0027)"},{"line_number":2171,"context_line":""},{"line_number":2172,"context_line":"            start \u003d time.time()"},{"line_number":2173,"context_line":"            failed_devices[\u0027removed\u0027] |\u003d self.treat_devices_removed("}],"source_content_type":"text/x-python","patch_set":42,"id":"3fa7e38b_b9585cf9","line":2170,"range":{"start_line":2156,"start_character":0,"end_line":2170,"end_character":34},"updated":"2020-01-15 02:06:36.000000000","message":"This block could start a new function, how about the name\n\"_remove_garp_cache_and_rule_for_address_pairs\"","commit_id":"3cd8b329e999edbfc99b0f8b121f4aefe3a8ca29"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"c737f7efdb1f524bafb4570af401b51e8ff713ff","unresolved":false,"context_lines":[{"line_number":2153,"context_line":"        failed_devices[\u0027added\u0027] |\u003d self._bind_devices(need_binding_devices)"},{"line_number":2154,"context_line":""},{"line_number":2155,"context_line":"        if \u0027removed\u0027 in port_info and port_info[\u0027removed\u0027]:"},{"line_number":2156,"context_line":"            removed_port_infos \u003d port_info[\u0027removed\u0027]"},{"line_number":2157,"context_line":"            removed_port_allowed_addr_ip \u003d []"},{"line_number":2158,"context_line":"            for p_info in removed_port_infos:"},{"line_number":2159,"context_line":"                for addr_cache_info in self.port_allowed_addr_pair_cache:"},{"line_number":2160,"context_line":"                    address_pair \u003d addr_cache_info.allowed_addr_pairs"},{"line_number":2161,"context_line":"                    for addr in address_pair:"},{"line_number":2162,"context_line":"                        if (p_info \u003d\u003d addr[\u0027port_id\u0027] and"},{"line_number":2163,"context_line":"                                addr[\u0027ip_address\u0027] not in"},{"line_number":2164,"context_line":"                                removed_port_allowed_addr_ip):"},{"line_number":2165,"context_line":"                            removed_port_allowed_addr_ip.append("},{"line_number":2166,"context_line":"                                addr[\u0027ip_address\u0027])"},{"line_number":2167,"context_line":"            self._add_del_garp_pkt_process_for_allowed_addr_pair("},{"line_number":2168,"context_line":"                self.tun_br,"},{"line_number":2169,"context_line":"                allowed_address_pair_ips\u003dremoved_port_allowed_addr_ip,"},{"line_number":2170,"context_line":"                operation\u003d\u0027delete\u0027)"},{"line_number":2171,"context_line":""},{"line_number":2172,"context_line":"            start \u003d time.time()"},{"line_number":2173,"context_line":"            failed_devices[\u0027removed\u0027] |\u003d self.treat_devices_removed("}],"source_content_type":"text/x-python","patch_set":42,"id":"1f621f24_c33054a2","line":2170,"range":{"start_line":2156,"start_character":0,"end_line":2170,"end_character":34},"in_reply_to":"3fa7e38b_b9585cf9","updated":"2020-11-16 01:56:20.000000000","message":"++","commit_id":"3cd8b329e999edbfc99b0f8b121f4aefe3a8ca29"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"8efe7f32dac3c1437a383e603e4bc18e43fcf12b","unresolved":false,"context_lines":[{"line_number":903,"context_line":"            ipv4_addresses \u003d {"},{"line_number":904,"context_line":"                ip for ip in allowed_address_pair_ips"},{"line_number":905,"context_line":"                if netaddr.IPNetwork(ip).version \u003d\u003d n_const.IP_VERSION_4}"},{"line_number":906,"context_line":"        if operation \u003d\u003d \u0027add\u0027:"},{"line_number":907,"context_line":"            if not has_zero_prefixlen_address(ipv4_addresses):"},{"line_number":908,"context_line":"                for ip in ipv4_addresses:"},{"line_number":909,"context_line":"                    br.add_garp_pkt_process_for_allowed_addr_pair_egress(ip)"}],"source_content_type":"text/x-python","patch_set":47,"id":"9f560f44_2c8b021f","line":906,"updated":"2020-09-10 10:19:46.000000000","message":"before this line:\n\nif has_zero_prefixlen_address(ipv4_addresses):\n  return","commit_id":"048804332fba86e23d627a8d8db3d3f846c5ae84"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"9966d8b65e2e5f7c5d09afc16455aa6ab4541617","unresolved":false,"context_lines":[{"line_number":903,"context_line":"            ipv4_addresses \u003d {"},{"line_number":904,"context_line":"                ip for ip in allowed_address_pair_ips"},{"line_number":905,"context_line":"                if netaddr.IPNetwork(ip).version \u003d\u003d n_const.IP_VERSION_4}"},{"line_number":906,"context_line":"        if operation \u003d\u003d \u0027add\u0027:"},{"line_number":907,"context_line":"            if not has_zero_prefixlen_address(ipv4_addresses):"},{"line_number":908,"context_line":"                for ip in ipv4_addresses:"},{"line_number":909,"context_line":"                    br.add_garp_pkt_process_for_allowed_addr_pair_egress(ip)"}],"source_content_type":"text/x-python","patch_set":47,"id":"9f560f44_a59b8ec6","line":906,"in_reply_to":"9f560f44_2c8b021f","updated":"2020-09-19 06:50:15.000000000","message":"Done","commit_id":"048804332fba86e23d627a8d8db3d3f846c5ae84"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"613b356542ac546061ac9361e347aebac171e1d6","unresolved":false,"context_lines":[{"line_number":1329,"context_line":"            return"},{"line_number":1330,"context_line":"        allowedaddresses \u003d []"},{"line_number":1331,"context_line":"        port_allowed_address_pair_cache_to_delete \u003d []"},{"line_number":1332,"context_line":"        LOG.error(\"SK; port_details \u003d %s\", port_details)"},{"line_number":1333,"context_line":"        port_fixed_ips \u003d port_details.get(\u0027fixed_ips\u0027)"},{"line_number":1334,"context_line":"        port_ip \u003d port_fixed_ips[0][\u0027ip_address\u0027] if port_fixed_ips else None"},{"line_number":1335,"context_line":"        port_mac \u003d port_details.get(\u0027mac_address\u0027)"}],"source_content_type":"text/x-python","patch_set":51,"id":"9f560f44_2e3f6322","line":1332,"range":{"start_line":1332,"start_character":12,"end_line":1332,"end_character":17},"updated":"2020-09-25 12:11:08.000000000","message":"A bit confused with this log message","commit_id":"273aa24bbbdcb56c75ff5844ee63f7ade3c8f103"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"0db9e1c638592b5e9d6cf125dd81c5ee8fd5bee4","unresolved":false,"context_lines":[{"line_number":1329,"context_line":"            return"},{"line_number":1330,"context_line":"        allowedaddresses \u003d []"},{"line_number":1331,"context_line":"        port_allowed_address_pair_cache_to_delete \u003d []"},{"line_number":1332,"context_line":"        LOG.error(\"SK; port_details \u003d %s\", port_details)"},{"line_number":1333,"context_line":"        port_fixed_ips \u003d port_details.get(\u0027fixed_ips\u0027)"},{"line_number":1334,"context_line":"        port_ip \u003d port_fixed_ips[0][\u0027ip_address\u0027] if port_fixed_ips else None"},{"line_number":1335,"context_line":"        port_mac \u003d port_details.get(\u0027mac_address\u0027)"}],"source_content_type":"text/x-python","patch_set":51,"id":"9f560f44_a5a0aea6","line":1332,"range":{"start_line":1332,"start_character":12,"end_line":1332,"end_character":17},"in_reply_to":"9f560f44_2e3f6322","updated":"2020-10-12 07:54:43.000000000","message":"ups, sorry, that\u0027s leftover after some debugging","commit_id":"273aa24bbbdcb56c75ff5844ee63f7ade3c8f103"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"ab6db9996ed68ea3bba091d4da1c32684d7f811d","unresolved":false,"context_lines":[{"line_number":911,"context_line":"                    ip, n_const.EGRESS_DIRECTION)"},{"line_number":912,"context_line":"                br.add_garp_pkt_process_for_allowed_addr_pair("},{"line_number":913,"context_line":"                    ip, n_const.INGRESS_DIRECTION)"},{"line_number":914,"context_line":"        if operation \u003d\u003d \u0027delete\u0027:"},{"line_number":915,"context_line":"            for ip in ipv4_addresses:"},{"line_number":916,"context_line":"                br.delete_garp_pkt_process_for_allowed_addr_pair("},{"line_number":917,"context_line":"                    ip, n_const.EGRESS_DIRECTION)"}],"source_content_type":"text/x-python","patch_set":53,"id":"9f560f44_5e06451e","line":914,"range":{"start_line":914,"start_character":8,"end_line":914,"end_character":10},"updated":"2020-10-05 13:30:56.000000000","message":"nit: elif","commit_id":"a509717b5e525fe9e720f3e6a5aa0cfe35edc236"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"0db9e1c638592b5e9d6cf125dd81c5ee8fd5bee4","unresolved":false,"context_lines":[{"line_number":911,"context_line":"                    ip, n_const.EGRESS_DIRECTION)"},{"line_number":912,"context_line":"                br.add_garp_pkt_process_for_allowed_addr_pair("},{"line_number":913,"context_line":"                    ip, n_const.INGRESS_DIRECTION)"},{"line_number":914,"context_line":"        if operation \u003d\u003d \u0027delete\u0027:"},{"line_number":915,"context_line":"            for ip in ipv4_addresses:"},{"line_number":916,"context_line":"                br.delete_garp_pkt_process_for_allowed_addr_pair("},{"line_number":917,"context_line":"                    ip, n_const.EGRESS_DIRECTION)"}],"source_content_type":"text/x-python","patch_set":53,"id":"9f560f44_f33667b3","line":914,"range":{"start_line":914,"start_character":8,"end_line":914,"end_character":10},"in_reply_to":"9f560f44_5e06451e","updated":"2020-10-12 07:54:43.000000000","message":"Done","commit_id":"a509717b5e525fe9e720f3e6a5aa0cfe35edc236"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"ab6db9996ed68ea3bba091d4da1c32684d7f811d","unresolved":false,"context_lines":[{"line_number":927,"context_line":"        for p_info in self.port_allowed_addr_pair_cache:"},{"line_number":928,"context_line":"            if ((port_info.allowed_addr_pairs and p_info \u003d\u003d port_info) or"},{"line_number":929,"context_line":"                (p_info.ip_address \u003d\u003d port_info.ip_address and"},{"line_number":930,"context_line":"                 not port_info.allowed_addr_pairs)):"},{"line_number":931,"context_line":"                # Already preconfigured flows for the allowed_address_pairs"},{"line_number":932,"context_line":"                # or if the allowed_addr_pair have moved or removed from the"},{"line_number":933,"context_line":"                # port"}],"source_content_type":"text/x-python","patch_set":53,"id":"9f560f44_3e70b1a4","line":930,"updated":"2020-10-05 13:30:56.000000000","message":"Surprised pep8 didn\u0027t complain about the indent not being a multiple of 4","commit_id":"a509717b5e525fe9e720f3e6a5aa0cfe35edc236"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"0db9e1c638592b5e9d6cf125dd81c5ee8fd5bee4","unresolved":false,"context_lines":[{"line_number":927,"context_line":"        for p_info in self.port_allowed_addr_pair_cache:"},{"line_number":928,"context_line":"            if ((port_info.allowed_addr_pairs and p_info \u003d\u003d port_info) or"},{"line_number":929,"context_line":"                (p_info.ip_address \u003d\u003d port_info.ip_address and"},{"line_number":930,"context_line":"                 not port_info.allowed_addr_pairs)):"},{"line_number":931,"context_line":"                # Already preconfigured flows for the allowed_address_pairs"},{"line_number":932,"context_line":"                # or if the allowed_addr_pair have moved or removed from the"},{"line_number":933,"context_line":"                # port"}],"source_content_type":"text/x-python","patch_set":53,"id":"9f560f44_3341ff0b","line":930,"in_reply_to":"9f560f44_3e70b1a4","updated":"2020-10-12 07:54:43.000000000","message":"I guess it\u0027s because it\u0027s aligned to the \"inside\" of the bracket above","commit_id":"a509717b5e525fe9e720f3e6a5aa0cfe35edc236"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"ab6db9996ed68ea3bba091d4da1c32684d7f811d","unresolved":false,"context_lines":[{"line_number":1327,"context_line":"                                bridge, tun_br, port_details):"},{"line_number":1328,"context_line":"        if not self.allowed_address_pair_arp_responder:"},{"line_number":1329,"context_line":"            return"},{"line_number":1330,"context_line":"        allowedaddresses \u003d []"},{"line_number":1331,"context_line":"        port_allowed_address_pair_cache_to_delete \u003d []"},{"line_number":1332,"context_line":"        port_fixed_ips \u003d port_details.get(\u0027fixed_ips\u0027)"},{"line_number":1333,"context_line":"        port_ip \u003d port_fixed_ips[0][\u0027ip_address\u0027] if port_fixed_ips else None"}],"source_content_type":"text/x-python","patch_set":53,"id":"9f560f44_fe9ab9c1","line":1330,"range":{"start_line":1330,"start_character":8,"end_line":1330,"end_character":24},"updated":"2020-10-05 13:30:56.000000000","message":"nit: allowed_addresses unless it was done to be under a line char limit","commit_id":"a509717b5e525fe9e720f3e6a5aa0cfe35edc236"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"0db9e1c638592b5e9d6cf125dd81c5ee8fd5bee4","unresolved":false,"context_lines":[{"line_number":1327,"context_line":"                                bridge, tun_br, port_details):"},{"line_number":1328,"context_line":"        if not self.allowed_address_pair_arp_responder:"},{"line_number":1329,"context_line":"            return"},{"line_number":1330,"context_line":"        allowedaddresses \u003d []"},{"line_number":1331,"context_line":"        port_allowed_address_pair_cache_to_delete \u003d []"},{"line_number":1332,"context_line":"        port_fixed_ips \u003d port_details.get(\u0027fixed_ips\u0027)"},{"line_number":1333,"context_line":"        port_ip \u003d port_fixed_ips[0][\u0027ip_address\u0027] if port_fixed_ips else None"}],"source_content_type":"text/x-python","patch_set":53,"id":"9f560f44_d351a3db","line":1330,"range":{"start_line":1330,"start_character":8,"end_line":1330,"end_character":24},"in_reply_to":"9f560f44_fe9ab9c1","updated":"2020-10-12 07:54:43.000000000","message":"Done","commit_id":"a509717b5e525fe9e720f3e6a5aa0cfe35edc236"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"87706bad8923cfbd67fc19266099578eca713e81","unresolved":false,"context_lines":[{"line_number":113,"context_line":"    return any(netaddr.IPNetwork(ip).prefixlen \u003d\u003d 0 for ip in ip_addresses)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"# Tracks the allowed_address_pair and port_id relation ship"},{"line_number":117,"context_line":"PortInfo_allowed_addr_pair \u003d collections.namedtuple("},{"line_number":118,"context_line":"        \u0027PortInfo_allowed_addr_pair\u0027,"},{"line_number":119,"context_line":"        \u0027mac_address ip_address allowed_addr_pairs\u0027)"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"class OVSNeutronAgent(l2population_rpc.L2populationRpcCallBackTunnelMixin,"}],"source_content_type":"text/x-python","patch_set":56,"id":"1f621f24_2eae08e7","line":119,"range":{"start_line":116,"start_character":0,"end_line":119,"end_character":52},"updated":"2020-10-29 12:57:12.000000000","message":"nit: The PortInfo tupple defined in https://review.opendev.org/#/c/601336/56/neutron/plugins/ml2/drivers/l2pop/rpc.py has the same signature","commit_id":"5745bedc027adc1ad7dd9020ae5eae83e1d9ce4e"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"47968461f055fd6b054951a969e7a97c65ea7a95","unresolved":false,"context_lines":[{"line_number":113,"context_line":"    return any(netaddr.IPNetwork(ip).prefixlen \u003d\u003d 0 for ip in ip_addresses)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"# Tracks the allowed_address_pair and port_id relation ship"},{"line_number":117,"context_line":"PortInfo_allowed_addr_pair \u003d collections.namedtuple("},{"line_number":118,"context_line":"        \u0027PortInfo_allowed_addr_pair\u0027,"},{"line_number":119,"context_line":"        \u0027mac_address ip_address allowed_addr_pairs\u0027)"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"class OVSNeutronAgent(l2population_rpc.L2populationRpcCallBackTunnelMixin,"}],"source_content_type":"text/x-python","patch_set":56,"id":"1f621f24_6cdc7b74","line":119,"range":{"start_line":116,"start_character":0,"end_line":119,"end_character":52},"in_reply_to":"1f621f24_2eae08e7","updated":"2020-10-30 10:34:29.000000000","message":"But name is different","commit_id":"5745bedc027adc1ad7dd9020ae5eae83e1d9ce4e"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"7453d98f48c2354d450c2148f2e9d1197ffa36ee","unresolved":false,"context_lines":[{"line_number":903,"context_line":"                br, port_allowed_address_pairs\u003dport_allowed_address_pairs,"},{"line_number":904,"context_line":"                operation\u003d\u0027add\u0027)"},{"line_number":905,"context_line":""},{"line_number":906,"context_line":"    def _add_del_garp_pkt_process_for_allowed_addr_pair("},{"line_number":907,"context_line":"            self, br, port_allowed_address_pairs\u003dNone,"},{"line_number":908,"context_line":"            allowed_address_pair_ips\u003dNone, operation\u003dNone):"},{"line_number":909,"context_line":"        if port_allowed_address_pairs and not allowed_address_pair_ips:"}],"source_content_type":"text/x-python","patch_set":56,"id":"1f621f24_09cb1072","line":906,"updated":"2020-11-03 10:02:51.000000000","message":"nit: I think this method should be located in br_tun too. That\u0027s only a tunnel br operation.","commit_id":"5745bedc027adc1ad7dd9020ae5eae83e1d9ce4e"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"ddaa4b27da82521214aef9032f1368ff09a2f7a5","unresolved":false,"context_lines":[{"line_number":903,"context_line":"                br, port_allowed_address_pairs\u003dport_allowed_address_pairs,"},{"line_number":904,"context_line":"                operation\u003d\u0027add\u0027)"},{"line_number":905,"context_line":""},{"line_number":906,"context_line":"    def _add_del_garp_pkt_process_for_allowed_addr_pair("},{"line_number":907,"context_line":"            self, br, port_allowed_address_pairs\u003dNone,"},{"line_number":908,"context_line":"            allowed_address_pair_ips\u003dNone, operation\u003dNone):"},{"line_number":909,"context_line":"        if port_allowed_address_pairs and not allowed_address_pair_ips:"}],"source_content_type":"text/x-python","patch_set":56,"id":"1f621f24_b4a787a7","line":906,"in_reply_to":"1f621f24_09cb1072","updated":"2020-11-09 21:05:15.000000000","message":"Done","commit_id":"5745bedc027adc1ad7dd9020ae5eae83e1d9ce4e"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"c737f7efdb1f524bafb4570af401b51e8ff713ff","unresolved":false,"context_lines":[{"line_number":2249,"context_line":"        failed_devices[\u0027added\u0027] |\u003d self._bind_devices(need_binding_devices)"},{"line_number":2250,"context_line":""},{"line_number":2251,"context_line":"        if \u0027removed\u0027 in port_info and port_info[\u0027removed\u0027]:"},{"line_number":2252,"context_line":"            removed_port_infos \u003d port_info[\u0027removed\u0027]"},{"line_number":2253,"context_line":"            removed_port_allowed_addr_ip \u003d []"},{"line_number":2254,"context_line":"            for p_info in removed_port_infos:"},{"line_number":2255,"context_line":"                for addr_cache_info in self.port_allowed_addr_pair_cache:"},{"line_number":2256,"context_line":"                    address_pair \u003d addr_cache_info.allowed_addr_pairs"},{"line_number":2257,"context_line":"                    for addr in address_pair:"},{"line_number":2258,"context_line":"                        if (p_info \u003d\u003d addr[\u0027port_id\u0027] and"},{"line_number":2259,"context_line":"                                addr[\u0027ip_address\u0027] not in"},{"line_number":2260,"context_line":"                                removed_port_allowed_addr_ip):"},{"line_number":2261,"context_line":"                            removed_port_allowed_addr_ip.append("},{"line_number":2262,"context_line":"                                addr[\u0027ip_address\u0027])"},{"line_number":2263,"context_line":""},{"line_number":2264,"context_line":"            if self.allowed_address_pair_arp_responder:"},{"line_number":2265,"context_line":"                self.tun_br.add_del_garp_pkt_process_for_allowed_addr_pair("},{"line_number":2266,"context_line":"                    allowed_address_pair_ips\u003dremoved_port_allowed_addr_ip,"},{"line_number":2267,"context_line":"                    operation\u003d\u0027delete\u0027)"},{"line_number":2268,"context_line":""},{"line_number":2269,"context_line":"            start \u003d time.time()"},{"line_number":2270,"context_line":"            failed_devices[\u0027removed\u0027] |\u003d self.treat_devices_removed("}],"source_content_type":"text/x-python","patch_set":57,"id":"1f621f24_634ea038","line":2267,"range":{"start_line":2252,"start_character":0,"end_line":2267,"end_character":39},"updated":"2020-11-16 01:56:20.000000000","message":"How about move this block to a independent function?","commit_id":"c693f5325bc06ebafe8cc56eea4eb432b524c1f9"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2d01c78583a2476bccc81bc371eb02b3a91f56f0","unresolved":false,"context_lines":[{"line_number":2249,"context_line":"        failed_devices[\u0027added\u0027] |\u003d self._bind_devices(need_binding_devices)"},{"line_number":2250,"context_line":""},{"line_number":2251,"context_line":"        if \u0027removed\u0027 in port_info and port_info[\u0027removed\u0027]:"},{"line_number":2252,"context_line":"            removed_port_infos \u003d port_info[\u0027removed\u0027]"},{"line_number":2253,"context_line":"            removed_port_allowed_addr_ip \u003d []"},{"line_number":2254,"context_line":"            for p_info in removed_port_infos:"},{"line_number":2255,"context_line":"                for addr_cache_info in self.port_allowed_addr_pair_cache:"},{"line_number":2256,"context_line":"                    address_pair \u003d addr_cache_info.allowed_addr_pairs"},{"line_number":2257,"context_line":"                    for addr in address_pair:"},{"line_number":2258,"context_line":"                        if (p_info \u003d\u003d addr[\u0027port_id\u0027] and"},{"line_number":2259,"context_line":"                                addr[\u0027ip_address\u0027] not in"},{"line_number":2260,"context_line":"                                removed_port_allowed_addr_ip):"},{"line_number":2261,"context_line":"                            removed_port_allowed_addr_ip.append("},{"line_number":2262,"context_line":"                                addr[\u0027ip_address\u0027])"},{"line_number":2263,"context_line":""},{"line_number":2264,"context_line":"            if self.allowed_address_pair_arp_responder:"},{"line_number":2265,"context_line":"                self.tun_br.add_del_garp_pkt_process_for_allowed_addr_pair("},{"line_number":2266,"context_line":"                    allowed_address_pair_ips\u003dremoved_port_allowed_addr_ip,"},{"line_number":2267,"context_line":"                    operation\u003d\u0027delete\u0027)"},{"line_number":2268,"context_line":""},{"line_number":2269,"context_line":"            start \u003d time.time()"},{"line_number":2270,"context_line":"            failed_devices[\u0027removed\u0027] |\u003d self.treat_devices_removed("}],"source_content_type":"text/x-python","patch_set":57,"id":"1f621f24_44ea78d7","line":2267,"range":{"start_line":2252,"start_character":0,"end_line":2267,"end_character":39},"in_reply_to":"1f621f24_634ea038","updated":"2020-11-19 13:06:24.000000000","message":"Done","commit_id":"c693f5325bc06ebafe8cc56eea4eb432b524c1f9"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"1fbe32ccfe10c8b2a84b9231e78f33aa90e19de1","unresolved":true,"context_lines":[{"line_number":499,"context_line":"        # RPC network init"},{"line_number":500,"context_line":"        self.context \u003d context.get_admin_context_without_session()"},{"line_number":501,"context_line":"        # Made a simple RPC call to Neutron Server."},{"line_number":502,"context_line":"        self.tun_br.set_rpc_api(self.plugin_rpc)"},{"line_number":503,"context_line":"        while True:"},{"line_number":504,"context_line":"            try:"},{"line_number":505,"context_line":"                self.state_rpc.has_alive_neutron_server(self.context)"}],"source_content_type":"text/x-python","patch_set":73,"id":"6664b16e_5c0a5bfa","line":502,"range":{"start_line":502,"start_character":8,"end_line":502,"end_character":48},"updated":"2021-05-14 11:26:38.000000000","message":"above comment is not for this line, right?","commit_id":"e8af9d9d6e254655433834bfe4d7332cb75338f0"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"a2fecd162795034833a5ad8f2ef7ebaf323395ec","unresolved":false,"context_lines":[{"line_number":499,"context_line":"        # RPC network init"},{"line_number":500,"context_line":"        self.context \u003d context.get_admin_context_without_session()"},{"line_number":501,"context_line":"        # Made a simple RPC call to Neutron Server."},{"line_number":502,"context_line":"        self.tun_br.set_rpc_api(self.plugin_rpc)"},{"line_number":503,"context_line":"        while True:"},{"line_number":504,"context_line":"            try:"},{"line_number":505,"context_line":"                self.state_rpc.has_alive_neutron_server(self.context)"}],"source_content_type":"text/x-python","patch_set":73,"id":"4717a969_6980ffc0","line":502,"range":{"start_line":502,"start_character":8,"end_line":502,"end_character":48},"in_reply_to":"6664b16e_5c0a5bfa","updated":"2021-05-20 15:07:47.000000000","message":"nope, but it\u0027s removed now :)","commit_id":"e8af9d9d6e254655433834bfe4d7332cb75338f0"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"0954cd8a346ee0ac814aeba7c09de6e43c77a85d","unresolved":true,"context_lines":[{"line_number":864,"context_line":"        # Check if this is an update for an existing port"},{"line_number":865,"context_line":"        clean_allowed_address_pair_flow \u003d False"},{"line_number":866,"context_line":"        allowed_addr_pair_to_remove \u003d []"},{"line_number":867,"context_line":"        for p_info in self.port_allowed_addr_pair_cache:"},{"line_number":868,"context_line":"            if (p_info.ip_address \u003d\u003d port_info.ip_address and"},{"line_number":869,"context_line":"                    not port_info.allowed_addr_pairs):"},{"line_number":870,"context_line":"                clean_allowed_address_pair_flow \u003d True"}],"source_content_type":"text/x-python","patch_set":73,"id":"b457efce_30e766a4","line":867,"range":{"start_line":867,"start_character":22,"end_line":867,"end_character":55},"updated":"2021-05-17 13:44:12.000000000","message":"does it make sense to have port_allowed_addr_pair_cache as \"mac_address: port_info\" map? This avoids iterating through the whole list each time.","commit_id":"e8af9d9d6e254655433834bfe4d7332cb75338f0"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"a2fecd162795034833a5ad8f2ef7ebaf323395ec","unresolved":true,"context_lines":[{"line_number":864,"context_line":"        # Check if this is an update for an existing port"},{"line_number":865,"context_line":"        clean_allowed_address_pair_flow \u003d False"},{"line_number":866,"context_line":"        allowed_addr_pair_to_remove \u003d []"},{"line_number":867,"context_line":"        for p_info in self.port_allowed_addr_pair_cache:"},{"line_number":868,"context_line":"            if (p_info.ip_address \u003d\u003d port_info.ip_address and"},{"line_number":869,"context_line":"                    not port_info.allowed_addr_pairs):"},{"line_number":870,"context_line":"                clean_allowed_address_pair_flow \u003d True"}],"source_content_type":"text/x-python","patch_set":73,"id":"d5879696_d6eee22a","line":867,"range":{"start_line":867,"start_character":22,"end_line":867,"end_character":55},"in_reply_to":"b457efce_30e766a4","updated":"2021-05-20 15:07:47.000000000","message":"actually after Your comments I checked it more deeply and it seems for me that it wasn\u0027t \"network isolated\". So I changed that cache a bit. Now it\u0027s something like:\n\n    {lvm.vlan: {\n        mac_address: [PortInfo_allowed_addr_pair, PortInfo_allowed_addr_pair, ...]}}","commit_id":"e8af9d9d6e254655433834bfe4d7332cb75338f0"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"0954cd8a346ee0ac814aeba7c09de6e43c77a85d","unresolved":true,"context_lines":[{"line_number":865,"context_line":"        clean_allowed_address_pair_flow \u003d False"},{"line_number":866,"context_line":"        allowed_addr_pair_to_remove \u003d []"},{"line_number":867,"context_line":"        for p_info in self.port_allowed_addr_pair_cache:"},{"line_number":868,"context_line":"            if (p_info.ip_address \u003d\u003d port_info.ip_address and"},{"line_number":869,"context_line":"                    not port_info.allowed_addr_pairs):"},{"line_number":870,"context_line":"                clean_allowed_address_pair_flow \u003d True"},{"line_number":871,"context_line":"                allowed_addr_pair_to_remove.append(p_info)"},{"line_number":872,"context_line":"                break"}],"source_content_type":"text/x-python","patch_set":73,"id":"b2eb768d_f2d3aea1","line":869,"range":{"start_line":868,"start_character":16,"end_line":869,"end_character":52},"updated":"2021-05-17 13:44:12.000000000","message":"IP may be same for ports in different VLANs. Does the cache account for this?","commit_id":"e8af9d9d6e254655433834bfe4d7332cb75338f0"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"a2fecd162795034833a5ad8f2ef7ebaf323395ec","unresolved":true,"context_lines":[{"line_number":865,"context_line":"        clean_allowed_address_pair_flow \u003d False"},{"line_number":866,"context_line":"        allowed_addr_pair_to_remove \u003d []"},{"line_number":867,"context_line":"        for p_info in self.port_allowed_addr_pair_cache:"},{"line_number":868,"context_line":"            if (p_info.ip_address \u003d\u003d port_info.ip_address and"},{"line_number":869,"context_line":"                    not port_info.allowed_addr_pairs):"},{"line_number":870,"context_line":"                clean_allowed_address_pair_flow \u003d True"},{"line_number":871,"context_line":"                allowed_addr_pair_to_remove.append(p_info)"},{"line_number":872,"context_line":"                break"}],"source_content_type":"text/x-python","patch_set":73,"id":"efd731e6_46acdae8","line":869,"range":{"start_line":868,"start_character":16,"end_line":869,"end_character":52},"in_reply_to":"b2eb768d_f2d3aea1","updated":"2021-05-20 15:07:47.000000000","message":"Please check my comment above","commit_id":"e8af9d9d6e254655433834bfe4d7332cb75338f0"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"0954cd8a346ee0ac814aeba7c09de6e43c77a85d","unresolved":true,"context_lines":[{"line_number":884,"context_line":"                operation\u003d\u0027delete\u0027)"},{"line_number":885,"context_line":""},{"line_number":886,"context_line":"        if (port_info.allowed_addr_pairs and"},{"line_number":887,"context_line":"                not clean_allowed_address_pair_flow):"},{"line_number":888,"context_line":"            port_info_addr_pair_tuple \u003d PortInfo_allowed_addr_pair("},{"line_number":889,"context_line":"                    mac_address\u003dport_info.mac_address,"},{"line_number":890,"context_line":"                    ip_address\u003dport_info.ip_address,"}],"source_content_type":"text/x-python","patch_set":73,"id":"685cfc8f_7a6e8aa1","line":887,"range":{"start_line":887,"start_character":16,"end_line":887,"end_character":51},"updated":"2021-05-17 13:44:12.000000000","message":"according to 869 clean_allowed_address_pair_flow can\u0027t be True if port_info has allowed_addr_pairs","commit_id":"e8af9d9d6e254655433834bfe4d7332cb75338f0"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"a2fecd162795034833a5ad8f2ef7ebaf323395ec","unresolved":true,"context_lines":[{"line_number":884,"context_line":"                operation\u003d\u0027delete\u0027)"},{"line_number":885,"context_line":""},{"line_number":886,"context_line":"        if (port_info.allowed_addr_pairs and"},{"line_number":887,"context_line":"                not clean_allowed_address_pair_flow):"},{"line_number":888,"context_line":"            port_info_addr_pair_tuple \u003d PortInfo_allowed_addr_pair("},{"line_number":889,"context_line":"                    mac_address\u003dport_info.mac_address,"},{"line_number":890,"context_line":"                    ip_address\u003dport_info.ip_address,"}],"source_content_type":"text/x-python","patch_set":73,"id":"5fe59f33_de644478","line":887,"range":{"start_line":887,"start_character":16,"end_line":887,"end_character":51},"in_reply_to":"685cfc8f_7a6e8aa1","updated":"2021-05-20 15:07:47.000000000","message":"it is changed now","commit_id":"e8af9d9d6e254655433834bfe4d7332cb75338f0"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"865513d8960f9cd18c58d01ad32c3cda7906b68e","unresolved":true,"context_lines":[{"line_number":181,"context_line":"        #                 ML2 l2 population mechanism driver."},{"line_number":182,"context_line":"        self.enable_distributed_routing \u003d agent_conf.enable_distributed_routing"},{"line_number":183,"context_line":"        self.arp_responder_enabled \u003d agent_conf.arp_responder and self.l2_pop"},{"line_number":184,"context_line":"        self.monitor_allowed_address_pair_garp \u003d ("},{"line_number":185,"context_line":"                self.arp_responder_enabled and"},{"line_number":186,"context_line":"                agent_conf.monitor_allowed_address_pair_garp)"},{"line_number":187,"context_line":"        if (self.enable_distributed_routing and self.enable_tunneling and"},{"line_number":188,"context_line":"                not self.arp_responder_enabled):"},{"line_number":189,"context_line":"            LOG.warning(\"ARP responder was not enabled but is required since \""}],"source_content_type":"text/x-python","patch_set":89,"id":"4c519886_3d32deaf","line":186,"range":{"start_line":184,"start_character":8,"end_line":186,"end_character":61},"updated":"2021-06-09 16:15:16.000000000","message":"BE CAREFUL: self.arp_responder_enabled can be enabled in L191. This assignment should be done after this line.","commit_id":"e57d3a39a39d0bda015f2ac6abb65a1c5e07f72a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"abf17b439cacbdcdc3815637337fcd48efded338","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        #                 ML2 l2 population mechanism driver."},{"line_number":182,"context_line":"        self.enable_distributed_routing \u003d agent_conf.enable_distributed_routing"},{"line_number":183,"context_line":"        self.arp_responder_enabled \u003d agent_conf.arp_responder and self.l2_pop"},{"line_number":184,"context_line":"        self.monitor_allowed_address_pair_garp \u003d ("},{"line_number":185,"context_line":"                self.arp_responder_enabled and"},{"line_number":186,"context_line":"                agent_conf.monitor_allowed_address_pair_garp)"},{"line_number":187,"context_line":"        if (self.enable_distributed_routing and self.enable_tunneling and"},{"line_number":188,"context_line":"                not self.arp_responder_enabled):"},{"line_number":189,"context_line":"            LOG.warning(\"ARP responder was not enabled but is required since \""}],"source_content_type":"text/x-python","patch_set":89,"id":"6eb02dd1_5c6fc286","line":186,"range":{"start_line":184,"start_character":8,"end_line":186,"end_character":61},"in_reply_to":"4c519886_3d32deaf","updated":"2021-06-10 15:12:32.000000000","message":"Yeah, and probably due to that scenario test in https://review.opendev.org/c/openstack/neutron-tempest-plugin/+/794841 failed","commit_id":"e57d3a39a39d0bda015f2ac6abb65a1c5e07f72a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"865513d8960f9cd18c58d01ad32c3cda7906b68e","unresolved":true,"context_lines":[{"line_number":864,"context_line":"            return"},{"line_number":865,"context_line":"        LOG.debug(\"L2pop port_info for add: %s\", port_info)"},{"line_number":866,"context_line":"        # Check if this is an update for an existing port"},{"line_number":867,"context_line":"        allowed_addr_pair_to_remove \u003d None"},{"line_number":868,"context_line":""},{"line_number":869,"context_line":"        if not port_info.allowed_addr_pairs:"},{"line_number":870,"context_line":"            allowed_addr_pair_to_remove \u003d ("}],"source_content_type":"text/x-python","patch_set":89,"id":"dfcc6086_6d70d072","line":867,"range":{"start_line":867,"start_character":8,"end_line":867,"end_character":35},"updated":"2021-06-09 16:15:16.000000000","message":"not used","commit_id":"e57d3a39a39d0bda015f2ac6abb65a1c5e07f72a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"abf17b439cacbdcdc3815637337fcd48efded338","unresolved":false,"context_lines":[{"line_number":864,"context_line":"            return"},{"line_number":865,"context_line":"        LOG.debug(\"L2pop port_info for add: %s\", port_info)"},{"line_number":866,"context_line":"        # Check if this is an update for an existing port"},{"line_number":867,"context_line":"        allowed_addr_pair_to_remove \u003d None"},{"line_number":868,"context_line":""},{"line_number":869,"context_line":"        if not port_info.allowed_addr_pairs:"},{"line_number":870,"context_line":"            allowed_addr_pair_to_remove \u003d ("}],"source_content_type":"text/x-python","patch_set":89,"id":"37897295_50da0ad1","line":867,"range":{"start_line":867,"start_character":8,"end_line":867,"end_character":35},"in_reply_to":"dfcc6086_6d70d072","updated":"2021-06-10 15:12:32.000000000","message":"Done","commit_id":"e57d3a39a39d0bda015f2ac6abb65a1c5e07f72a"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"21c7f99c195363180c6f010ee79785e175a2027c","unresolved":true,"context_lines":[{"line_number":2087,"context_line":"    def _remove_allowed_addr_pair_cache(self, removed_ports):"},{"line_number":2088,"context_line":"        if not self.monitor_allowed_address_pair_garp:"},{"line_number":2089,"context_line":"            return"},{"line_number":2090,"context_line":"        LOG.error(\"SK; removed_ports \u003d %s\", removed_ports)"},{"line_number":2091,"context_line":"        for port_id in removed_ports:"},{"line_number":2092,"context_line":"            lvm, _, _ \u003d self._get_port_lvm_and_vif(port_id)"},{"line_number":2093,"context_line":"            cached_ports \u003d self.port_allowed_addr_pair_cache.get(lvm.vlan)"}],"source_content_type":"text/x-python","patch_set":99,"id":"7284c745_8e45dc3d","line":2090,"range":{"start_line":2090,"start_character":8,"end_line":2090,"end_character":58},"updated":"2021-08-25 09:05:29.000000000","message":"It is some leftover","commit_id":"45b9e38e241898defa112384d5de478a3825a328"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"cdb52a5da3c7349c97e10a3334e92cec346840f9","unresolved":false,"context_lines":[{"line_number":2087,"context_line":"    def _remove_allowed_addr_pair_cache(self, removed_ports):"},{"line_number":2088,"context_line":"        if not self.monitor_allowed_address_pair_garp:"},{"line_number":2089,"context_line":"            return"},{"line_number":2090,"context_line":"        LOG.error(\"SK; removed_ports \u003d %s\", removed_ports)"},{"line_number":2091,"context_line":"        for port_id in removed_ports:"},{"line_number":2092,"context_line":"            lvm, _, _ \u003d self._get_port_lvm_and_vif(port_id)"},{"line_number":2093,"context_line":"            cached_ports \u003d self.port_allowed_addr_pair_cache.get(lvm.vlan)"}],"source_content_type":"text/x-python","patch_set":99,"id":"9e1fdd5c_d7b100db","line":2090,"range":{"start_line":2090,"start_character":8,"end_line":2090,"end_character":58},"in_reply_to":"7284c745_8e45dc3d","updated":"2021-09-07 13:35:12.000000000","message":"Done","commit_id":"45b9e38e241898defa112384d5de478a3825a328"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"21c7f99c195363180c6f010ee79785e175a2027c","unresolved":true,"context_lines":[{"line_number":2091,"context_line":"        for port_id in removed_ports:"},{"line_number":2092,"context_line":"            lvm, _, _ \u003d self._get_port_lvm_and_vif(port_id)"},{"line_number":2093,"context_line":"            cached_ports \u003d self.port_allowed_addr_pair_cache.get(lvm.vlan)"},{"line_number":2094,"context_line":"            LOG.error(\"Cached_ports \u003d %s\", cached_ports)"},{"line_number":2095,"context_line":"            if not cached_ports:"},{"line_number":2096,"context_line":"                return"},{"line_number":2097,"context_line":"            removed_port_allowed_addr_ip \u003d set()"}],"source_content_type":"text/x-python","patch_set":99,"id":"b50fd3fc_080bb03e","line":2094,"range":{"start_line":2094,"start_character":12,"end_line":2094,"end_character":56},"updated":"2021-08-25 09:05:29.000000000","message":"it is not necessary to have error log here","commit_id":"45b9e38e241898defa112384d5de478a3825a328"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"cdb52a5da3c7349c97e10a3334e92cec346840f9","unresolved":false,"context_lines":[{"line_number":2091,"context_line":"        for port_id in removed_ports:"},{"line_number":2092,"context_line":"            lvm, _, _ \u003d self._get_port_lvm_and_vif(port_id)"},{"line_number":2093,"context_line":"            cached_ports \u003d self.port_allowed_addr_pair_cache.get(lvm.vlan)"},{"line_number":2094,"context_line":"            LOG.error(\"Cached_ports \u003d %s\", cached_ports)"},{"line_number":2095,"context_line":"            if not cached_ports:"},{"line_number":2096,"context_line":"                return"},{"line_number":2097,"context_line":"            removed_port_allowed_addr_ip \u003d set()"}],"source_content_type":"text/x-python","patch_set":99,"id":"849325fb_542abc08","line":2094,"range":{"start_line":2094,"start_character":12,"end_line":2094,"end_character":56},"in_reply_to":"b50fd3fc_080bb03e","updated":"2021-09-07 13:35:12.000000000","message":"Done","commit_id":"45b9e38e241898defa112384d5de478a3825a328"}],"neutron/plugins/ml2/rpc.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"91809a012e40096761f782005cfd42c83aa679a0","unresolved":true,"context_lines":[{"line_number":429,"context_line":"        plugin \u003d directory.get_plugin()"},{"line_number":430,"context_line":"        active_port, non_active_ports \u003d plugin.update_active_vip_address("},{"line_number":431,"context_line":"            rpc_context, mac_address, ip_address, network_id)"},{"line_number":432,"context_line":"        port_dict \u003d plugin.get_port(rpc_context, active_port[\u0027port_id\u0027])"},{"line_number":433,"context_line":"        l3plugin.update_arp_entry_for_dvr_service_port(rpc_context, port_dict)"},{"line_number":434,"context_line":""},{"line_number":435,"context_line":""}],"source_content_type":"text/x-python","patch_set":71,"id":"c7ebc1c4_0dd44b69","line":432,"range":{"start_line":432,"start_character":49,"end_line":432,"end_character":60},"updated":"2021-05-13 09:49:41.000000000","message":"we should always have an active_port, but you should consider the case of not finding it","commit_id":"2caa855acd572f8469e4684e6a9d2f2c071ec0f8"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"36abdf7be78b6a8df7b6ab38147e2ddfe4b4d21b","unresolved":false,"context_lines":[{"line_number":429,"context_line":"        plugin \u003d directory.get_plugin()"},{"line_number":430,"context_line":"        active_port, non_active_ports \u003d plugin.update_active_vip_address("},{"line_number":431,"context_line":"            rpc_context, mac_address, ip_address, network_id)"},{"line_number":432,"context_line":"        port_dict \u003d plugin.get_port(rpc_context, active_port[\u0027port_id\u0027])"},{"line_number":433,"context_line":"        l3plugin.update_arp_entry_for_dvr_service_port(rpc_context, port_dict)"},{"line_number":434,"context_line":""},{"line_number":435,"context_line":""}],"source_content_type":"text/x-python","patch_set":71,"id":"ba8706d1_7dda7afb","line":432,"range":{"start_line":432,"start_character":49,"end_line":432,"end_character":60},"in_reply_to":"c7ebc1c4_0dd44b69","updated":"2021-05-13 10:52:43.000000000","message":"Done","commit_id":"2caa855acd572f8469e4684e6a9d2f2c071ec0f8"}],"neutron/services/logapi/drivers/openvswitch/log_oskenapp.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8a78f8ea8d9a8a2ef4845129038b7a7414b4580e","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from os_ken.base import app_manager"},{"line_number":17,"context_line":"from os_ken.controller import handler"},{"line_number":18,"context_line":"from os_ken.controller import ofp_event"},{"line_number":19,"context_line":"from os_ken.ofproto import ofproto_v1_3"}],"source_content_type":"text/x-python","patch_set":48,"id":"9f560f44_0eba0dbf","line":16,"updated":"2020-09-16 12:00:46.000000000","message":"pep8: F401 \u0027os_ken.base.app_manager\u0027 imported but unused","commit_id":"2ca5de3908729dc1e31aeda003605cbeb32c3567"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"517c6093efc2c241a7c00bdf6b5b3f1cd88662f2","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from os_ken.base import app_manager"},{"line_number":17,"context_line":"from os_ken.controller import handler"},{"line_number":18,"context_line":"from os_ken.controller import ofp_event"},{"line_number":19,"context_line":"from os_ken.ofproto import ofproto_v1_3"}],"source_content_type":"text/x-python","patch_set":48,"id":"9f560f44_8db14ce3","line":16,"updated":"2020-09-11 15:38:52.000000000","message":"pep8: F401 \u0027os_ken.base.app_manager\u0027 imported but unused","commit_id":"2ca5de3908729dc1e31aeda003605cbeb32c3567"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8a78f8ea8d9a8a2ef4845129038b7a7414b4580e","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from os_ken.base import app_manager"},{"line_number":17,"context_line":"from os_ken.controller import handler"},{"line_number":18,"context_line":"from os_ken.controller import ofp_event"},{"line_number":19,"context_line":"from os_ken.ofproto import ofproto_v1_3"},{"line_number":20,"context_line":"from oslo_log import log as logging"}],"source_content_type":"text/x-python","patch_set":48,"id":"9f560f44_6eaf497d","line":17,"updated":"2020-09-16 12:00:46.000000000","message":"pep8: F401 \u0027os_ken.controller.handler\u0027 imported but unused","commit_id":"2ca5de3908729dc1e31aeda003605cbeb32c3567"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"517c6093efc2c241a7c00bdf6b5b3f1cd88662f2","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from os_ken.base import app_manager"},{"line_number":17,"context_line":"from os_ken.controller import handler"},{"line_number":18,"context_line":"from os_ken.controller import ofp_event"},{"line_number":19,"context_line":"from os_ken.ofproto import ofproto_v1_3"},{"line_number":20,"context_line":"from oslo_log import log as logging"}],"source_content_type":"text/x-python","patch_set":48,"id":"9f560f44_edcba84f","line":17,"updated":"2020-09-11 15:38:52.000000000","message":"pep8: F401 \u0027os_ken.controller.handler\u0027 imported but unused","commit_id":"2ca5de3908729dc1e31aeda003605cbeb32c3567"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8a78f8ea8d9a8a2ef4845129038b7a7414b4580e","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from os_ken.base import app_manager"},{"line_number":17,"context_line":"from os_ken.controller import handler"},{"line_number":18,"context_line":"from os_ken.controller import ofp_event"},{"line_number":19,"context_line":"from os_ken.ofproto import ofproto_v1_3"},{"line_number":20,"context_line":"from oslo_log import log as logging"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":48,"id":"9f560f44_4eb405d2","line":18,"updated":"2020-09-16 12:00:46.000000000","message":"pep8: F401 \u0027os_ken.controller.ofp_event\u0027 imported but unused","commit_id":"2ca5de3908729dc1e31aeda003605cbeb32c3567"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"517c6093efc2c241a7c00bdf6b5b3f1cd88662f2","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from os_ken.base import app_manager"},{"line_number":17,"context_line":"from os_ken.controller import handler"},{"line_number":18,"context_line":"from os_ken.controller import ofp_event"},{"line_number":19,"context_line":"from os_ken.ofproto import ofproto_v1_3"},{"line_number":20,"context_line":"from oslo_log import log as logging"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":48,"id":"9f560f44_cdc6a449","line":18,"updated":"2020-09-11 15:38:52.000000000","message":"pep8: F401 \u0027os_ken.controller.ofp_event\u0027 imported but unused","commit_id":"2ca5de3908729dc1e31aeda003605cbeb32c3567"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"517c6093efc2c241a7c00bdf6b5b3f1cd88662f2","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from os_ken.base import app_manager"},{"line_number":17,"context_line":"from os_ken.controller import handler"},{"line_number":18,"context_line":"from os_ken.controller import ofp_event"},{"line_number":19,"context_line":"from os_ken.ofproto import ofproto_v1_3"},{"line_number":20,"context_line":"from oslo_log import log as logging"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from neutron.plugins.ml2.drivers.openvswitch.agent.openflow.native import \\"}],"source_content_type":"text/x-python","patch_set":48,"id":"9f560f44_2dc2c034","line":19,"updated":"2020-09-11 15:38:52.000000000","message":"pep8: F401 \u0027os_ken.ofproto.ofproto_v1_3\u0027 imported but unused","commit_id":"2ca5de3908729dc1e31aeda003605cbeb32c3567"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8a78f8ea8d9a8a2ef4845129038b7a7414b4580e","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from os_ken.base import app_manager"},{"line_number":17,"context_line":"from os_ken.controller import handler"},{"line_number":18,"context_line":"from os_ken.controller import ofp_event"},{"line_number":19,"context_line":"from os_ken.ofproto import ofproto_v1_3"},{"line_number":20,"context_line":"from oslo_log import log as logging"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from neutron.plugins.ml2.drivers.openvswitch.agent.openflow.native import \\"}],"source_content_type":"text/x-python","patch_set":48,"id":"9f560f44_aec84156","line":19,"updated":"2020-09-16 12:00:46.000000000","message":"pep8: F401 \u0027os_ken.ofproto.ofproto_v1_3\u0027 imported but unused","commit_id":"2ca5de3908729dc1e31aeda003605cbeb32c3567"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"ab6db9996ed68ea3bba091d4da1c32684d7f811d","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        self.packet_in_handlers.remove(caller)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    @handler.set_ev_cls(ofp_event.EventOFPPacketIn, handler.MAIN_DISPATCHER)"},{"line_number":36,"context_line":"    def packet_in_handler(self, ev):"},{"line_number":37,"context_line":"        for caller in self.packet_in_handlers:"},{"line_number":38,"context_line":"            caller(ev)"}],"source_content_type":"text/x-python","patch_set":53,"id":"9f560f44_7ea6a90f","side":"PARENT","line":36,"updated":"2020-10-05 13:30:56.000000000","message":"The log.debug line wasn\u0027t here","commit_id":"946057cf27792fe62a893eae13fa47efe7c4d354"}],"neutron/tests/unit/plugins/ml2/drivers/openvswitch/agent/openflow/native/test_br_tun.py":[{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"ecfa54be63b67ddf685852924fee1c00e9acb15e","unresolved":false,"context_lines":[{"line_number":152,"context_line":"                match\u003dofpp.OFPMatch(),"},{"line_number":153,"context_line":"                priority\u003d0,"},{"line_number":154,"context_line":"                table_id\u003d22),"},{"line_number":155,"context_line":"                           active_bundle\u003dNone),"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        ]"},{"line_number":158,"context_line":"        self.assertEqual(expected, self.mock.mock_calls)"}],"source_content_type":"text/x-python","patch_set":59,"id":"fffc6b78_bdafda92","line":155,"range":{"start_line":155,"start_character":27,"end_line":155,"end_character":47},"updated":"2020-11-24 00:55:58.000000000","message":"nit: unrelated change.","commit_id":"e22cf3757da8b6507d4ff62be56c459d990aa7bf"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"ecfa54be63b67ddf685852924fee1c00e9acb15e","unresolved":false,"context_lines":[{"line_number":305,"context_line":"                match\u003dofpp.OFPMatch(),"},{"line_number":306,"context_line":"                priority\u003d0,"},{"line_number":307,"context_line":"                table_id\u003d22),"},{"line_number":308,"context_line":"                           active_bundle\u003dNone),"},{"line_number":309,"context_line":"        ]"},{"line_number":310,"context_line":"        self.assertEqual(expected, self.mock.mock_calls)"},{"line_number":311,"context_line":""}],"source_content_type":"text/x-python","patch_set":59,"id":"fffc6b78_fd904251","line":308,"range":{"start_line":308,"start_character":27,"end_line":308,"end_character":47},"updated":"2020-11-24 00:55:58.000000000","message":"nit: unrelated change.","commit_id":"e22cf3757da8b6507d4ff62be56c459d990aa7bf"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4ef904fbff36cf807a1100a1be55e342d57fefce","unresolved":true,"context_lines":[{"line_number":153,"context_line":"                priority\u003d0,"},{"line_number":154,"context_line":"                table_id\u003d22),"},{"line_number":155,"context_line":"                           active_bundle\u003dNone)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        ]"},{"line_number":158,"context_line":"        self.assertEqual(expected, self.mock.mock_calls)"},{"line_number":159,"context_line":""}],"source_content_type":"text/x-python","patch_set":64,"id":"6ef92e13_48f770bf","line":156,"updated":"2021-01-08 14:35:58.000000000","message":"nit: random whitespace change","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2372069307c1f5e7030d40cb4313588573f6b923","unresolved":false,"context_lines":[{"line_number":153,"context_line":"                priority\u003d0,"},{"line_number":154,"context_line":"                table_id\u003d22),"},{"line_number":155,"context_line":"                           active_bundle\u003dNone)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        ]"},{"line_number":158,"context_line":"        self.assertEqual(expected, self.mock.mock_calls)"},{"line_number":159,"context_line":""}],"source_content_type":"text/x-python","patch_set":64,"id":"45a39abf_30de2d69","line":156,"in_reply_to":"6ef92e13_48f770bf","updated":"2021-01-13 11:53:59.000000000","message":"Done","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"}],"releasenotes/notes/dvr-arp-responder-3277cfec41230224.yaml":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4ef904fbff36cf807a1100a1be55e342d57fefce","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    ARP entries or IP addreses added to the port\u0027s allowed address pairs can"},{"line_number":5,"context_line":"    now be added automatically to the DVR\u0027s arp responder."},{"line_number":6,"context_line":"    This new feature is disabled by default and can be turned on with"},{"line_number":7,"context_line":"    the ``allowed_address_pair_arp_responder`` config option in the"}],"source_content_type":"text/x-yaml","patch_set":64,"id":"203d6fbb_bf349a3b","line":4,"range":{"start_line":4,"start_character":51,"end_line":4,"end_character":72},"updated":"2021-01-08 14:35:58.000000000","message":"Should this be allowed_address_pairs ?","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4ef904fbff36cf807a1100a1be55e342d57fefce","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    ARP entries or IP addreses added to the port\u0027s allowed address pairs can"},{"line_number":5,"context_line":"    now be added automatically to the DVR\u0027s arp responder."},{"line_number":6,"context_line":"    This new feature is disabled by default and can be turned on with"},{"line_number":7,"context_line":"    the ``allowed_address_pair_arp_responder`` config option in the"}],"source_content_type":"text/x-yaml","patch_set":64,"id":"df8d5700_f7597b1f","line":4,"range":{"start_line":4,"start_character":40,"end_line":4,"end_character":43},"updated":"2021-01-08 14:35:58.000000000","message":"s/a","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2372069307c1f5e7030d40cb4313588573f6b923","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    ARP entries or IP addreses added to the port\u0027s allowed address pairs can"},{"line_number":5,"context_line":"    now be added automatically to the DVR\u0027s arp responder."},{"line_number":6,"context_line":"    This new feature is disabled by default and can be turned on with"},{"line_number":7,"context_line":"    the ``allowed_address_pair_arp_responder`` config option in the"}],"source_content_type":"text/x-yaml","patch_set":64,"id":"c1a70c86_29fda05d","line":4,"range":{"start_line":4,"start_character":51,"end_line":4,"end_character":72},"in_reply_to":"203d6fbb_bf349a3b","updated":"2021-01-13 11:53:59.000000000","message":"Done","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2372069307c1f5e7030d40cb4313588573f6b923","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    ARP entries or IP addreses added to the port\u0027s allowed address pairs can"},{"line_number":5,"context_line":"    now be added automatically to the DVR\u0027s arp responder."},{"line_number":6,"context_line":"    This new feature is disabled by default and can be turned on with"},{"line_number":7,"context_line":"    the ``allowed_address_pair_arp_responder`` config option in the"}],"source_content_type":"text/x-yaml","patch_set":64,"id":"fc139dd8_1b320366","line":4,"range":{"start_line":4,"start_character":40,"end_line":4,"end_character":43},"in_reply_to":"df8d5700_f7597b1f","updated":"2021-01-13 11:53:59.000000000","message":"Done","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4ef904fbff36cf807a1100a1be55e342d57fefce","unresolved":true,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    ARP entries or IP addreses added to the port\u0027s allowed address pairs can"},{"line_number":5,"context_line":"    now be added automatically to the DVR\u0027s arp responder."},{"line_number":6,"context_line":"    This new feature is disabled by default and can be turned on with"},{"line_number":7,"context_line":"    the ``allowed_address_pair_arp_responder`` config option in the"},{"line_number":8,"context_line":"    ``neutron-ovs-agent``."}],"source_content_type":"text/x-yaml","patch_set":64,"id":"afde02a5_9b7745da","line":5,"range":{"start_line":5,"start_character":44,"end_line":5,"end_character":47},"updated":"2021-01-08 14:35:58.000000000","message":"s/ARP","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2372069307c1f5e7030d40cb4313588573f6b923","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    ARP entries or IP addreses added to the port\u0027s allowed address pairs can"},{"line_number":5,"context_line":"    now be added automatically to the DVR\u0027s arp responder."},{"line_number":6,"context_line":"    This new feature is disabled by default and can be turned on with"},{"line_number":7,"context_line":"    the ``allowed_address_pair_arp_responder`` config option in the"},{"line_number":8,"context_line":"    ``neutron-ovs-agent``."}],"source_content_type":"text/x-yaml","patch_set":64,"id":"5aaecdbd_29e4b96b","line":5,"range":{"start_line":5,"start_character":44,"end_line":5,"end_character":47},"in_reply_to":"afde02a5_9b7745da","updated":"2021-01-13 11:53:59.000000000","message":"Done","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4ef904fbff36cf807a1100a1be55e342d57fefce","unresolved":true,"context_lines":[{"line_number":5,"context_line":"    now be added automatically to the DVR\u0027s arp responder."},{"line_number":6,"context_line":"    This new feature is disabled by default and can be turned on with"},{"line_number":7,"context_line":"    the ``allowed_address_pair_arp_responder`` config option in the"},{"line_number":8,"context_line":"    ``neutron-ovs-agent``."},{"line_number":9,"context_line":"issues:"},{"line_number":10,"context_line":"  - |"},{"line_number":11,"context_line":"    OpenFlow rules, related to the IP addresses from the port\u0027s"}],"source_content_type":"text/x-yaml","patch_set":64,"id":"1515001a_4c983e31","line":8,"range":{"start_line":8,"start_character":6,"end_line":8,"end_character":23},"updated":"2021-01-08 14:35:58.000000000","message":"Here we use neutron-ovs-agent and in the config option we use neutron-openvswitch-agent, so the conf string is wrong it seems","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2372069307c1f5e7030d40cb4313588573f6b923","unresolved":true,"context_lines":[{"line_number":5,"context_line":"    now be added automatically to the DVR\u0027s arp responder."},{"line_number":6,"context_line":"    This new feature is disabled by default and can be turned on with"},{"line_number":7,"context_line":"    the ``allowed_address_pair_arp_responder`` config option in the"},{"line_number":8,"context_line":"    ``neutron-ovs-agent``."},{"line_number":9,"context_line":"issues:"},{"line_number":10,"context_line":"  - |"},{"line_number":11,"context_line":"    OpenFlow rules, related to the IP addresses from the port\u0027s"}],"source_content_type":"text/x-yaml","patch_set":64,"id":"88391edb_725005ea","line":8,"range":{"start_line":8,"start_character":6,"end_line":8,"end_character":23},"in_reply_to":"1515001a_4c983e31","updated":"2021-01-13 11:53:59.000000000","message":"In setup.cfg we have defined console_script\u0027s name as \"neutron-openvswitch-agent\" so I changed here to use the same name also.","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4ef904fbff36cf807a1100a1be55e342d57fefce","unresolved":true,"context_lines":[{"line_number":8,"context_line":"    ``neutron-ovs-agent``."},{"line_number":9,"context_line":"issues:"},{"line_number":10,"context_line":"  - |"},{"line_number":11,"context_line":"    OpenFlow rules, related to the IP addresses from the port\u0027s"},{"line_number":12,"context_line":"    allowed_address_pairs, added by the controller to the arp responder will"},{"line_number":13,"context_line":"    be removed when ``neutron-ovs-agent`` will be restarted."},{"line_number":14,"context_line":"    In such case GARP packets needs to be send again to restore ARP responder"}],"source_content_type":"text/x-yaml","patch_set":64,"id":"7f7f4228_b66c060a","line":11,"range":{"start_line":11,"start_character":18,"end_line":11,"end_character":19},"updated":"2021-01-08 14:35:58.000000000","message":"remove comma","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2372069307c1f5e7030d40cb4313588573f6b923","unresolved":false,"context_lines":[{"line_number":8,"context_line":"    ``neutron-ovs-agent``."},{"line_number":9,"context_line":"issues:"},{"line_number":10,"context_line":"  - |"},{"line_number":11,"context_line":"    OpenFlow rules, related to the IP addresses from the port\u0027s"},{"line_number":12,"context_line":"    allowed_address_pairs, added by the controller to the arp responder will"},{"line_number":13,"context_line":"    be removed when ``neutron-ovs-agent`` will be restarted."},{"line_number":14,"context_line":"    In such case GARP packets needs to be send again to restore ARP responder"}],"source_content_type":"text/x-yaml","patch_set":64,"id":"bce2620e_b16b5e00","line":11,"range":{"start_line":11,"start_character":18,"end_line":11,"end_character":19},"in_reply_to":"7f7f4228_b66c060a","updated":"2021-01-13 11:53:59.000000000","message":"Done","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4ef904fbff36cf807a1100a1be55e342d57fefce","unresolved":true,"context_lines":[{"line_number":9,"context_line":"issues:"},{"line_number":10,"context_line":"  - |"},{"line_number":11,"context_line":"    OpenFlow rules, related to the IP addresses from the port\u0027s"},{"line_number":12,"context_line":"    allowed_address_pairs, added by the controller to the arp responder will"},{"line_number":13,"context_line":"    be removed when ``neutron-ovs-agent`` will be restarted."},{"line_number":14,"context_line":"    In such case GARP packets needs to be send again to restore ARP responder"},{"line_number":15,"context_line":"    entry in the Openvswitch."}],"source_content_type":"text/x-yaml","patch_set":64,"id":"21383738_3e7c397b","line":12,"range":{"start_line":12,"start_character":58,"end_line":12,"end_character":61},"updated":"2021-01-08 14:35:58.000000000","message":"s/ARP","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4ef904fbff36cf807a1100a1be55e342d57fefce","unresolved":true,"context_lines":[{"line_number":9,"context_line":"issues:"},{"line_number":10,"context_line":"  - |"},{"line_number":11,"context_line":"    OpenFlow rules, related to the IP addresses from the port\u0027s"},{"line_number":12,"context_line":"    allowed_address_pairs, added by the controller to the arp responder will"},{"line_number":13,"context_line":"    be removed when ``neutron-ovs-agent`` will be restarted."},{"line_number":14,"context_line":"    In such case GARP packets needs to be send again to restore ARP responder"},{"line_number":15,"context_line":"    entry in the Openvswitch."}],"source_content_type":"text/x-yaml","patch_set":64,"id":"bcb56505_a3b5cf24","line":12,"range":{"start_line":12,"start_character":25,"end_line":12,"end_character":32},"updated":"2021-01-08 14:35:58.000000000","message":"s/and added (remove comma)","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2372069307c1f5e7030d40cb4313588573f6b923","unresolved":false,"context_lines":[{"line_number":9,"context_line":"issues:"},{"line_number":10,"context_line":"  - |"},{"line_number":11,"context_line":"    OpenFlow rules, related to the IP addresses from the port\u0027s"},{"line_number":12,"context_line":"    allowed_address_pairs, added by the controller to the arp responder will"},{"line_number":13,"context_line":"    be removed when ``neutron-ovs-agent`` will be restarted."},{"line_number":14,"context_line":"    In such case GARP packets needs to be send again to restore ARP responder"},{"line_number":15,"context_line":"    entry in the Openvswitch."}],"source_content_type":"text/x-yaml","patch_set":64,"id":"10b0c745_22cf30ee","line":12,"range":{"start_line":12,"start_character":58,"end_line":12,"end_character":61},"in_reply_to":"21383738_3e7c397b","updated":"2021-01-13 11:53:59.000000000","message":"Done","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2372069307c1f5e7030d40cb4313588573f6b923","unresolved":false,"context_lines":[{"line_number":9,"context_line":"issues:"},{"line_number":10,"context_line":"  - |"},{"line_number":11,"context_line":"    OpenFlow rules, related to the IP addresses from the port\u0027s"},{"line_number":12,"context_line":"    allowed_address_pairs, added by the controller to the arp responder will"},{"line_number":13,"context_line":"    be removed when ``neutron-ovs-agent`` will be restarted."},{"line_number":14,"context_line":"    In such case GARP packets needs to be send again to restore ARP responder"},{"line_number":15,"context_line":"    entry in the Openvswitch."}],"source_content_type":"text/x-yaml","patch_set":64,"id":"1244624c_b05e2e30","line":12,"range":{"start_line":12,"start_character":25,"end_line":12,"end_character":32},"in_reply_to":"bcb56505_a3b5cf24","updated":"2021-01-13 11:53:59.000000000","message":"Done","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4ef904fbff36cf807a1100a1be55e342d57fefce","unresolved":true,"context_lines":[{"line_number":10,"context_line":"  - |"},{"line_number":11,"context_line":"    OpenFlow rules, related to the IP addresses from the port\u0027s"},{"line_number":12,"context_line":"    allowed_address_pairs, added by the controller to the arp responder will"},{"line_number":13,"context_line":"    be removed when ``neutron-ovs-agent`` will be restarted."},{"line_number":14,"context_line":"    In such case GARP packets needs to be send again to restore ARP responder"},{"line_number":15,"context_line":"    entry in the Openvswitch."},{"line_number":16,"context_line":"    Also after live migration of the VM which has configured such an additional"}],"source_content_type":"text/x-yaml","patch_set":64,"id":"a0f63866_e0cbd387","line":13,"range":{"start_line":13,"start_character":42,"end_line":13,"end_character":49},"updated":"2021-01-08 14:35:58.000000000","message":"s/is","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4ef904fbff36cf807a1100a1be55e342d57fefce","unresolved":true,"context_lines":[{"line_number":10,"context_line":"  - |"},{"line_number":11,"context_line":"    OpenFlow rules, related to the IP addresses from the port\u0027s"},{"line_number":12,"context_line":"    allowed_address_pairs, added by the controller to the arp responder will"},{"line_number":13,"context_line":"    be removed when ``neutron-ovs-agent`` will be restarted."},{"line_number":14,"context_line":"    In such case GARP packets needs to be send again to restore ARP responder"},{"line_number":15,"context_line":"    entry in the Openvswitch."},{"line_number":16,"context_line":"    Also after live migration of the VM which has configured such an additional"}],"source_content_type":"text/x-yaml","patch_set":64,"id":"d0ebf1c7_e391d10c","line":13,"range":{"start_line":13,"start_character":15,"end_line":13,"end_character":19},"updated":"2021-01-08 14:35:58.000000000","message":"s/when the","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2372069307c1f5e7030d40cb4313588573f6b923","unresolved":false,"context_lines":[{"line_number":10,"context_line":"  - |"},{"line_number":11,"context_line":"    OpenFlow rules, related to the IP addresses from the port\u0027s"},{"line_number":12,"context_line":"    allowed_address_pairs, added by the controller to the arp responder will"},{"line_number":13,"context_line":"    be removed when ``neutron-ovs-agent`` will be restarted."},{"line_number":14,"context_line":"    In such case GARP packets needs to be send again to restore ARP responder"},{"line_number":15,"context_line":"    entry in the Openvswitch."},{"line_number":16,"context_line":"    Also after live migration of the VM which has configured such an additional"}],"source_content_type":"text/x-yaml","patch_set":64,"id":"c7f92da5_439cf6f9","line":13,"range":{"start_line":13,"start_character":42,"end_line":13,"end_character":49},"in_reply_to":"a0f63866_e0cbd387","updated":"2021-01-13 11:53:59.000000000","message":"Done","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2372069307c1f5e7030d40cb4313588573f6b923","unresolved":false,"context_lines":[{"line_number":10,"context_line":"  - |"},{"line_number":11,"context_line":"    OpenFlow rules, related to the IP addresses from the port\u0027s"},{"line_number":12,"context_line":"    allowed_address_pairs, added by the controller to the arp responder will"},{"line_number":13,"context_line":"    be removed when ``neutron-ovs-agent`` will be restarted."},{"line_number":14,"context_line":"    In such case GARP packets needs to be send again to restore ARP responder"},{"line_number":15,"context_line":"    entry in the Openvswitch."},{"line_number":16,"context_line":"    Also after live migration of the VM which has configured such an additional"}],"source_content_type":"text/x-yaml","patch_set":64,"id":"87e99389_b6837e6c","line":13,"range":{"start_line":13,"start_character":15,"end_line":13,"end_character":19},"in_reply_to":"d0ebf1c7_e391d10c","updated":"2021-01-13 11:53:59.000000000","message":"Done","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4ef904fbff36cf807a1100a1be55e342d57fefce","unresolved":true,"context_lines":[{"line_number":11,"context_line":"    OpenFlow rules, related to the IP addresses from the port\u0027s"},{"line_number":12,"context_line":"    allowed_address_pairs, added by the controller to the arp responder will"},{"line_number":13,"context_line":"    be removed when ``neutron-ovs-agent`` will be restarted."},{"line_number":14,"context_line":"    In such case GARP packets needs to be send again to restore ARP responder"},{"line_number":15,"context_line":"    entry in the Openvswitch."},{"line_number":16,"context_line":"    Also after live migration of the VM which has configured such an additional"},{"line_number":17,"context_line":"    IP addrress, new GARPs needs to be send from the VM to install new ARP"}],"source_content_type":"text/x-yaml","patch_set":64,"id":"65df48ca_b22e095a","line":14,"range":{"start_line":14,"start_character":12,"end_line":14,"end_character":16},"updated":"2021-01-08 14:35:58.000000000","message":"s/cases,","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4ef904fbff36cf807a1100a1be55e342d57fefce","unresolved":true,"context_lines":[{"line_number":11,"context_line":"    OpenFlow rules, related to the IP addresses from the port\u0027s"},{"line_number":12,"context_line":"    allowed_address_pairs, added by the controller to the arp responder will"},{"line_number":13,"context_line":"    be removed when ``neutron-ovs-agent`` will be restarted."},{"line_number":14,"context_line":"    In such case GARP packets needs to be send again to restore ARP responder"},{"line_number":15,"context_line":"    entry in the Openvswitch."},{"line_number":16,"context_line":"    Also after live migration of the VM which has configured such an additional"},{"line_number":17,"context_line":"    IP addrress, new GARPs needs to be send from the VM to install new ARP"}],"source_content_type":"text/x-yaml","patch_set":64,"id":"7a703d53_accbeaf0","line":14,"range":{"start_line":14,"start_character":30,"end_line":14,"end_character":46},"updated":"2021-01-08 14:35:58.000000000","message":"s/need to be sent","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4ef904fbff36cf807a1100a1be55e342d57fefce","unresolved":true,"context_lines":[{"line_number":11,"context_line":"    OpenFlow rules, related to the IP addresses from the port\u0027s"},{"line_number":12,"context_line":"    allowed_address_pairs, added by the controller to the arp responder will"},{"line_number":13,"context_line":"    be removed when ``neutron-ovs-agent`` will be restarted."},{"line_number":14,"context_line":"    In such case GARP packets needs to be send again to restore ARP responder"},{"line_number":15,"context_line":"    entry in the Openvswitch."},{"line_number":16,"context_line":"    Also after live migration of the VM which has configured such an additional"},{"line_number":17,"context_line":"    IP addrress, new GARPs needs to be send from the VM to install new ARP"}],"source_content_type":"text/x-yaml","patch_set":64,"id":"44a6b454_17ea0c53","line":14,"range":{"start_line":14,"start_character":64,"end_line":14,"end_character":67},"updated":"2021-01-08 14:35:58.000000000","message":"s/the ARP","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2372069307c1f5e7030d40cb4313588573f6b923","unresolved":false,"context_lines":[{"line_number":11,"context_line":"    OpenFlow rules, related to the IP addresses from the port\u0027s"},{"line_number":12,"context_line":"    allowed_address_pairs, added by the controller to the arp responder will"},{"line_number":13,"context_line":"    be removed when ``neutron-ovs-agent`` will be restarted."},{"line_number":14,"context_line":"    In such case GARP packets needs to be send again to restore ARP responder"},{"line_number":15,"context_line":"    entry in the Openvswitch."},{"line_number":16,"context_line":"    Also after live migration of the VM which has configured such an additional"},{"line_number":17,"context_line":"    IP addrress, new GARPs needs to be send from the VM to install new ARP"}],"source_content_type":"text/x-yaml","patch_set":64,"id":"6c6ebcea_c8629b62","line":14,"range":{"start_line":14,"start_character":64,"end_line":14,"end_character":67},"in_reply_to":"44a6b454_17ea0c53","updated":"2021-01-13 11:53:59.000000000","message":"Done","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2372069307c1f5e7030d40cb4313588573f6b923","unresolved":false,"context_lines":[{"line_number":11,"context_line":"    OpenFlow rules, related to the IP addresses from the port\u0027s"},{"line_number":12,"context_line":"    allowed_address_pairs, added by the controller to the arp responder will"},{"line_number":13,"context_line":"    be removed when ``neutron-ovs-agent`` will be restarted."},{"line_number":14,"context_line":"    In such case GARP packets needs to be send again to restore ARP responder"},{"line_number":15,"context_line":"    entry in the Openvswitch."},{"line_number":16,"context_line":"    Also after live migration of the VM which has configured such an additional"},{"line_number":17,"context_line":"    IP addrress, new GARPs needs to be send from the VM to install new ARP"}],"source_content_type":"text/x-yaml","patch_set":64,"id":"d5ae9f89_333fd6c8","line":14,"range":{"start_line":14,"start_character":12,"end_line":14,"end_character":16},"in_reply_to":"65df48ca_b22e095a","updated":"2021-01-13 11:53:59.000000000","message":"Done","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2372069307c1f5e7030d40cb4313588573f6b923","unresolved":false,"context_lines":[{"line_number":11,"context_line":"    OpenFlow rules, related to the IP addresses from the port\u0027s"},{"line_number":12,"context_line":"    allowed_address_pairs, added by the controller to the arp responder will"},{"line_number":13,"context_line":"    be removed when ``neutron-ovs-agent`` will be restarted."},{"line_number":14,"context_line":"    In such case GARP packets needs to be send again to restore ARP responder"},{"line_number":15,"context_line":"    entry in the Openvswitch."},{"line_number":16,"context_line":"    Also after live migration of the VM which has configured such an additional"},{"line_number":17,"context_line":"    IP addrress, new GARPs needs to be send from the VM to install new ARP"}],"source_content_type":"text/x-yaml","patch_set":64,"id":"36be36de_2ca40ec5","line":14,"range":{"start_line":14,"start_character":30,"end_line":14,"end_character":46},"in_reply_to":"7a703d53_accbeaf0","updated":"2021-01-13 11:53:59.000000000","message":"Done","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4ef904fbff36cf807a1100a1be55e342d57fefce","unresolved":true,"context_lines":[{"line_number":12,"context_line":"    allowed_address_pairs, added by the controller to the arp responder will"},{"line_number":13,"context_line":"    be removed when ``neutron-ovs-agent`` will be restarted."},{"line_number":14,"context_line":"    In such case GARP packets needs to be send again to restore ARP responder"},{"line_number":15,"context_line":"    entry in the Openvswitch."},{"line_number":16,"context_line":"    Also after live migration of the VM which has configured such an additional"},{"line_number":17,"context_line":"    IP addrress, new GARPs needs to be send from the VM to install new ARP"},{"line_number":18,"context_line":"    responder flows."}],"source_content_type":"text/x-yaml","patch_set":64,"id":"f0ca5db8_7709ff49","line":15,"range":{"start_line":15,"start_character":10,"end_line":15,"end_character":16},"updated":"2021-01-08 14:35:58.000000000","message":"s/in","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2372069307c1f5e7030d40cb4313588573f6b923","unresolved":false,"context_lines":[{"line_number":12,"context_line":"    allowed_address_pairs, added by the controller to the arp responder will"},{"line_number":13,"context_line":"    be removed when ``neutron-ovs-agent`` will be restarted."},{"line_number":14,"context_line":"    In such case GARP packets needs to be send again to restore ARP responder"},{"line_number":15,"context_line":"    entry in the Openvswitch."},{"line_number":16,"context_line":"    Also after live migration of the VM which has configured such an additional"},{"line_number":17,"context_line":"    IP addrress, new GARPs needs to be send from the VM to install new ARP"},{"line_number":18,"context_line":"    responder flows."}],"source_content_type":"text/x-yaml","patch_set":64,"id":"ebc8a323_f137788f","line":15,"range":{"start_line":15,"start_character":10,"end_line":15,"end_character":16},"in_reply_to":"f0ca5db8_7709ff49","updated":"2021-01-13 11:53:59.000000000","message":"Hmm, now I\u0027m adding \"the\" even too often :P","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4ef904fbff36cf807a1100a1be55e342d57fefce","unresolved":true,"context_lines":[{"line_number":13,"context_line":"    be removed when ``neutron-ovs-agent`` will be restarted."},{"line_number":14,"context_line":"    In such case GARP packets needs to be send again to restore ARP responder"},{"line_number":15,"context_line":"    entry in the Openvswitch."},{"line_number":16,"context_line":"    Also after live migration of the VM which has configured such an additional"},{"line_number":17,"context_line":"    IP addrress, new GARPs needs to be send from the VM to install new ARP"},{"line_number":18,"context_line":"    responder flows."}],"source_content_type":"text/x-yaml","patch_set":64,"id":"1b21b725_0af38981","line":16,"range":{"start_line":16,"start_character":4,"end_line":16,"end_character":8},"updated":"2021-01-08 14:35:58.000000000","message":"s/Also,","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4ef904fbff36cf807a1100a1be55e342d57fefce","unresolved":true,"context_lines":[{"line_number":13,"context_line":"    be removed when ``neutron-ovs-agent`` will be restarted."},{"line_number":14,"context_line":"    In such case GARP packets needs to be send again to restore ARP responder"},{"line_number":15,"context_line":"    entry in the Openvswitch."},{"line_number":16,"context_line":"    Also after live migration of the VM which has configured such an additional"},{"line_number":17,"context_line":"    IP addrress, new GARPs needs to be send from the VM to install new ARP"},{"line_number":18,"context_line":"    responder flows."}],"source_content_type":"text/x-yaml","patch_set":64,"id":"f37cd328_dd6d7be5","line":16,"range":{"start_line":16,"start_character":37,"end_line":16,"end_character":39},"updated":"2021-01-08 14:35:58.000000000","message":"s/instance","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2372069307c1f5e7030d40cb4313588573f6b923","unresolved":false,"context_lines":[{"line_number":13,"context_line":"    be removed when ``neutron-ovs-agent`` will be restarted."},{"line_number":14,"context_line":"    In such case GARP packets needs to be send again to restore ARP responder"},{"line_number":15,"context_line":"    entry in the Openvswitch."},{"line_number":16,"context_line":"    Also after live migration of the VM which has configured such an additional"},{"line_number":17,"context_line":"    IP addrress, new GARPs needs to be send from the VM to install new ARP"},{"line_number":18,"context_line":"    responder flows."}],"source_content_type":"text/x-yaml","patch_set":64,"id":"75d1033b_7300322e","line":16,"range":{"start_line":16,"start_character":4,"end_line":16,"end_character":8},"in_reply_to":"1b21b725_0af38981","updated":"2021-01-13 11:53:59.000000000","message":"Done","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2372069307c1f5e7030d40cb4313588573f6b923","unresolved":false,"context_lines":[{"line_number":13,"context_line":"    be removed when ``neutron-ovs-agent`` will be restarted."},{"line_number":14,"context_line":"    In such case GARP packets needs to be send again to restore ARP responder"},{"line_number":15,"context_line":"    entry in the Openvswitch."},{"line_number":16,"context_line":"    Also after live migration of the VM which has configured such an additional"},{"line_number":17,"context_line":"    IP addrress, new GARPs needs to be send from the VM to install new ARP"},{"line_number":18,"context_line":"    responder flows."}],"source_content_type":"text/x-yaml","patch_set":64,"id":"69ddbb6d_634813ae","line":16,"range":{"start_line":16,"start_character":37,"end_line":16,"end_character":39},"in_reply_to":"f37cd328_dd6d7be5","updated":"2021-01-13 11:53:59.000000000","message":"Done","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4ef904fbff36cf807a1100a1be55e342d57fefce","unresolved":true,"context_lines":[{"line_number":14,"context_line":"    In such case GARP packets needs to be send again to restore ARP responder"},{"line_number":15,"context_line":"    entry in the Openvswitch."},{"line_number":16,"context_line":"    Also after live migration of the VM which has configured such an additional"},{"line_number":17,"context_line":"    IP addrress, new GARPs needs to be send from the VM to install new ARP"},{"line_number":18,"context_line":"    responder flows."}],"source_content_type":"text/x-yaml","patch_set":64,"id":"96b445ba_92d44599","line":17,"range":{"start_line":17,"start_character":39,"end_line":17,"end_character":55},"updated":"2021-01-08 14:35:58.000000000","message":"s/sent from the instance","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4ef904fbff36cf807a1100a1be55e342d57fefce","unresolved":true,"context_lines":[{"line_number":13,"context_line":"    be removed when ``neutron-ovs-agent`` will be restarted."},{"line_number":14,"context_line":"    In such case GARP packets needs to be send again to restore ARP responder"},{"line_number":15,"context_line":"    entry in the Openvswitch."},{"line_number":16,"context_line":"    Also after live migration of the VM which has configured such an additional"},{"line_number":17,"context_line":"    IP addrress, new GARPs needs to be send from the VM to install new ARP"},{"line_number":18,"context_line":"    responder flows."}],"source_content_type":"text/x-yaml","patch_set":64,"id":"cc5827e8_dc8ef0d2","line":17,"range":{"start_line":16,"start_character":66,"end_line":17,"end_character":6},"updated":"2021-01-08 14:35:58.000000000","message":"s/such a VIP","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2372069307c1f5e7030d40cb4313588573f6b923","unresolved":false,"context_lines":[{"line_number":14,"context_line":"    In such case GARP packets needs to be send again to restore ARP responder"},{"line_number":15,"context_line":"    entry in the Openvswitch."},{"line_number":16,"context_line":"    Also after live migration of the VM which has configured such an additional"},{"line_number":17,"context_line":"    IP addrress, new GARPs needs to be send from the VM to install new ARP"},{"line_number":18,"context_line":"    responder flows."}],"source_content_type":"text/x-yaml","patch_set":64,"id":"6979cae9_a23a09c1","line":17,"range":{"start_line":17,"start_character":39,"end_line":17,"end_character":55},"in_reply_to":"96b445ba_92d44599","updated":"2021-01-13 11:53:59.000000000","message":"Done","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2372069307c1f5e7030d40cb4313588573f6b923","unresolved":false,"context_lines":[{"line_number":13,"context_line":"    be removed when ``neutron-ovs-agent`` will be restarted."},{"line_number":14,"context_line":"    In such case GARP packets needs to be send again to restore ARP responder"},{"line_number":15,"context_line":"    entry in the Openvswitch."},{"line_number":16,"context_line":"    Also after live migration of the VM which has configured such an additional"},{"line_number":17,"context_line":"    IP addrress, new GARPs needs to be send from the VM to install new ARP"},{"line_number":18,"context_line":"    responder flows."}],"source_content_type":"text/x-yaml","patch_set":64,"id":"a14b9465_3646156c","line":17,"range":{"start_line":16,"start_character":66,"end_line":17,"end_character":6},"in_reply_to":"cc5827e8_dc8ef0d2","updated":"2021-01-13 11:53:59.000000000","message":"Done","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4ef904fbff36cf807a1100a1be55e342d57fefce","unresolved":true,"context_lines":[{"line_number":15,"context_line":"    entry in the Openvswitch."},{"line_number":16,"context_line":"    Also after live migration of the VM which has configured such an additional"},{"line_number":17,"context_line":"    IP addrress, new GARPs needs to be send from the VM to install new ARP"},{"line_number":18,"context_line":"    responder flows."}],"source_content_type":"text/x-yaml","patch_set":64,"id":"9758b261_ca5aa4bd","line":18,"updated":"2021-01-08 14:35:58.000000000","message":"Basically, this should be a copy of the config option text (in case I made any typos in my comments)","commit_id":"d6cc646afa0fcac07a89cf64f74af294b6086863"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"fd8e08dbb89284f578736d0baa775063396eab04","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    ARP entries or IP addreses added to a port\u0027s allowed_address_pairs can"},{"line_number":5,"context_line":"    now be processed and send to the neutron server through RPC. Neutron server"}],"source_content_type":"text/x-yaml","patch_set":89,"id":"3cc70b84_2a6c740d","line":2,"range":{"start_line":2,"start_character":0,"end_line":2,"end_character":8},"updated":"2021-06-09 15:42:15.000000000","message":"Is this really a feature from user perspective? I would rather say it\u0027s a bugfix which fixes the case of using keepalived based VIP with allowed address pairs in a DVR environment.","commit_id":"e57d3a39a39d0bda015f2ac6abb65a1c5e07f72a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"abf17b439cacbdcdc3815637337fcd48efded338","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    ARP entries or IP addreses added to a port\u0027s allowed_address_pairs can"},{"line_number":5,"context_line":"    now be processed and send to the neutron server through RPC. Neutron server"}],"source_content_type":"text/x-yaml","patch_set":89,"id":"675091be_a0df6b78","line":2,"range":{"start_line":2,"start_character":0,"end_line":2,"end_character":8},"in_reply_to":"3cc70b84_2a6c740d","updated":"2021-06-10 15:12:32.000000000","message":"Done","commit_id":"e57d3a39a39d0bda015f2ac6abb65a1c5e07f72a"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"b92f68607b4f06af7ebafe59406d88f0e943f5f6","unresolved":true,"context_lines":[{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    ARP entries or IP addreses added to a port\u0027s allowed_address_pairs can"},{"line_number":5,"context_line":"    now be processed and send to the neutron server through RPC. Neutron server"},{"line_number":6,"context_line":"    will then populate apr entries for such ports into dvr routers."},{"line_number":7,"context_line":"    This new feature is disabled by default and can be turned on with"},{"line_number":8,"context_line":"    the ``monitor_allowed_address_pair_garp`` config option in the"}],"source_content_type":"text/x-yaml","patch_set":102,"id":"856ba37a_9f802477","line":5,"range":{"start_line":5,"start_character":25,"end_line":5,"end_character":29},"updated":"2022-01-04 16:30:32.000000000","message":"s/sent","commit_id":"57159f7fdb25a31cdac114b3fcb3f78e4a301753"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"b92f68607b4f06af7ebafe59406d88f0e943f5f6","unresolved":true,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    ARP entries or IP addreses added to a port\u0027s allowed_address_pairs can"},{"line_number":5,"context_line":"    now be processed and send to the neutron server through RPC. Neutron server"},{"line_number":6,"context_line":"    will then populate apr entries for such ports into dvr routers."},{"line_number":7,"context_line":"    This new feature is disabled by default and can be turned on with"},{"line_number":8,"context_line":"    the ``monitor_allowed_address_pair_garp`` config option in the"},{"line_number":9,"context_line":"    ``neutron-openvswitch-agent``. It requires also arp_responder to be"}],"source_content_type":"text/x-yaml","patch_set":102,"id":"cdd948ac_cb7755d5","line":6,"range":{"start_line":6,"start_character":23,"end_line":6,"end_character":26},"updated":"2022-01-04 16:30:32.000000000","message":"s/ARP","commit_id":"57159f7fdb25a31cdac114b3fcb3f78e4a301753"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"b92f68607b4f06af7ebafe59406d88f0e943f5f6","unresolved":true,"context_lines":[{"line_number":6,"context_line":"    will then populate apr entries for such ports into dvr routers."},{"line_number":7,"context_line":"    This new feature is disabled by default and can be turned on with"},{"line_number":8,"context_line":"    the ``monitor_allowed_address_pair_garp`` config option in the"},{"line_number":9,"context_line":"    ``neutron-openvswitch-agent``. It requires also arp_responder to be"},{"line_number":10,"context_line":"    enabled."}],"source_content_type":"text/x-yaml","patch_set":102,"id":"ccace1e8_67ff10f7","line":9,"range":{"start_line":9,"start_character":38,"end_line":9,"end_character":51},"updated":"2022-01-04 16:30:32.000000000","message":"s/also requires","commit_id":"57159f7fdb25a31cdac114b3fcb3f78e4a301753"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"3f257acb83efcfd180f79905888b139e321f1069","unresolved":true,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    ARP entries or IP addreses added to a port\u0027s allowed_address_pairs can"},{"line_number":5,"context_line":"    now be processed and send to the neutron server through RPC. Neutron server"},{"line_number":6,"context_line":"    will then populate apr entries for such ports into dvr routers."},{"line_number":7,"context_line":"    This new feature is disabled by default and can be turned on with"},{"line_number":8,"context_line":"    the ``monitor_allowed_address_pair_garp`` config option in the"},{"line_number":9,"context_line":"    ``neutron-openvswitch-agent``. It requires also arp_responder to be"}],"source_content_type":"text/x-yaml","patch_set":103,"id":"4e82536f_7ab2d62e","line":6,"range":{"start_line":6,"start_character":23,"end_line":6,"end_character":26},"updated":"2022-01-05 09:47:05.000000000","message":"nit: arp","commit_id":"e5390edd8ecfac84251caaa617f9f24d7cce9e5b"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"a86783260d020cb4de6f94fbe0426cc0b6216462","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    ARP entries or IP addreses added to a port\u0027s allowed_address_pairs can"},{"line_number":5,"context_line":"    now be processed and send to the neutron server through RPC. Neutron server"},{"line_number":6,"context_line":"    will then populate apr entries for such ports into dvr routers."},{"line_number":7,"context_line":"    This new feature is disabled by default and can be turned on with"},{"line_number":8,"context_line":"    the ``monitor_allowed_address_pair_garp`` config option in the"},{"line_number":9,"context_line":"    ``neutron-openvswitch-agent``. It requires also arp_responder to be"}],"source_content_type":"text/x-yaml","patch_set":103,"id":"0bdaacde_5106db90","line":6,"range":{"start_line":6,"start_character":23,"end_line":6,"end_character":26},"in_reply_to":"4e82536f_7ab2d62e","updated":"2022-01-05 15:48:08.000000000","message":"Done","commit_id":"e5390edd8ecfac84251caaa617f9f24d7cce9e5b"}]}
