)]}'
{"neutron/plugins/ml2/drivers/linuxbridge/agent/arp_protect.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"89e2951be5e2e652aefa26e5667ac0c01134eac7","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    _delete_arp_spoofing_protection(vifs, current_rules, table\u003d\u0027nat\u0027,"},{"line_number":74,"context_line":"                                    chain\u003d\u0027PREROUTING\u0027)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    # TODO(haleyb) this can go away after a cycle, it\u0027s here to cleanup"},{"line_number":77,"context_line":"    # old chains in the filter table"},{"line_number":78,"context_line":"    current_rules \u003d ebtables([\u0027-L\u0027], table\u003d\u0027filter\u0027).splitlines()"},{"line_number":79,"context_line":"    _delete_arp_spoofing_protection(vifs, current_rules, table\u003d\u0027filter\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf8cb3f7_97ec1af4","line":76,"updated":"2017-12-27 11:57:46.000000000","message":"nit: I would wrote here that it can be removed in \"R\" cycle (or \"S\" or whatever) because in few months it might be little bit confusing when will be \"after cycle\" exactly","commit_id":"d00fd2a3840abb5a48647bfef57ab9c350aea1a2"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"9fc8d142cd841193f695e5277b040b53ea2fedac","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    _delete_arp_spoofing_protection(vifs, current_rules, table\u003d\u0027nat\u0027,"},{"line_number":74,"context_line":"                                    chain\u003d\u0027PREROUTING\u0027)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    # TODO(haleyb) this can go away after a cycle, it\u0027s here to cleanup"},{"line_number":77,"context_line":"    # old chains in the filter table"},{"line_number":78,"context_line":"    current_rules \u003d ebtables([\u0027-L\u0027], table\u003d\u0027filter\u0027).splitlines()"},{"line_number":79,"context_line":"    _delete_arp_spoofing_protection(vifs, current_rules, table\u003d\u0027filter\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_49c2ac35","line":76,"in_reply_to":"bf8cb3f7_97ec1af4","updated":"2018-01-02 19:44:14.000000000","message":"Done","commit_id":"d00fd2a3840abb5a48647bfef57ab9c350aea1a2"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"89e2951be5e2e652aefa26e5667ac0c01134eac7","unresolved":false,"context_lines":[{"line_number":117,"context_line":"    _delete_unreferenced_arp_protection(current_vifs,"},{"line_number":118,"context_line":"                                        table\u003d\u0027nat\u0027, chain\u003d\u0027PREROUTING\u0027)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    # TODO(haleyb) this can go away after a cycle, it\u0027s here to cleanup"},{"line_number":121,"context_line":"    # old chains in the filter table"},{"line_number":122,"context_line":"    _delete_unreferenced_arp_protection(current_vifs,"},{"line_number":123,"context_line":"                                        table\u003d\u0027filter\u0027, chain\u003d\u0027FORWARD\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf8cb3f7_b7d03e21","line":120,"updated":"2017-12-27 11:57:46.000000000","message":"same as comment above","commit_id":"d00fd2a3840abb5a48647bfef57ab9c350aea1a2"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"9fc8d142cd841193f695e5277b040b53ea2fedac","unresolved":false,"context_lines":[{"line_number":117,"context_line":"    _delete_unreferenced_arp_protection(current_vifs,"},{"line_number":118,"context_line":"                                        table\u003d\u0027nat\u0027, chain\u003d\u0027PREROUTING\u0027)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    # TODO(haleyb) this can go away after a cycle, it\u0027s here to cleanup"},{"line_number":121,"context_line":"    # old chains in the filter table"},{"line_number":122,"context_line":"    _delete_unreferenced_arp_protection(current_vifs,"},{"line_number":123,"context_line":"                                        table\u003d\u0027filter\u0027, chain\u003d\u0027FORWARD\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_e9dce019","line":120,"in_reply_to":"bf8cb3f7_b7d03e21","updated":"2018-01-02 19:44:14.000000000","message":"Done","commit_id":"d00fd2a3840abb5a48647bfef57ab9c350aea1a2"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"a4cc5677a710ff1a562ccc50311396e6958d5db5","unresolved":false,"context_lines":[{"line_number":138,"context_line":"    # packets until the allows are installed, but that\u0027s better than leaked"},{"line_number":139,"context_line":"    # spoofed packets and ARP can handle losses."},{"line_number":140,"context_line":"    ebtables([\u0027-F\u0027, vif_chain])"},{"line_number":141,"context_line":"    for addr in addresses:"},{"line_number":142,"context_line":"        ebtables([\u0027-A\u0027, vif_chain, \u0027-p\u0027, \u0027ARP\u0027, \u0027--arp-ip-src\u0027, addr,"},{"line_number":143,"context_line":"                  \u0027-j\u0027, \u0027ACCEPT\u0027])"},{"line_number":144,"context_line":"    # check if jump rule already exists, if not, install it"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f93b717_39a4cda5","line":141,"updated":"2018-01-31 16:30:51.000000000","message":"The problem is here - these IP addresses are not sorted, so could be in any order.  I correctly fixed the MAC code but need to do it here as well.  So it\u0027s not a big change, the test output just showed the two ebtables calls when an address pair port was used sometimes in different orders, but the result is the same.  sorted() will fix it to be predictable.","commit_id":"d516f7295036fb71a36685fb15d4910e29177215"}]}
