)]}'
{"neutron/agent/l3/router_info.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"74b5015ac7c432d5108e199510a62f4d4483ff6f","unresolved":false,"context_lines":[{"line_number":1085,"context_line":"                \u0027-d fe80::a9fe:a9fe/128 \u0027"},{"line_number":1086,"context_line":"                \u0027-i %(interface_name)s \u0027"},{"line_number":1087,"context_line":"                \u0027-p tcp -m tcp --dport 80 \u0027"},{"line_number":1088,"context_line":"                \u0027-j MARK --set-xmark %(value)s/%(mask)s\u0027 %"},{"line_number":1089,"context_line":"                {\u0027interface_name\u0027: INTERNAL_DEV_PREFIX + \u0027+\u0027,"},{"line_number":1090,"context_line":"                 \u0027value\u0027: self.agent_conf.metadata_access_mark,"},{"line_number":1091,"context_line":"                 \u0027mask\u0027: lib_constants.ROUTER_MARK_MASK})"}],"source_content_type":"text/x-python","patch_set":1,"id":"df33271e_f7690df9","line":1088,"updated":"2020-03-30 23:31:19.000000000","message":"Can you just make sure this matches the ip6tables-save output exactly?  The iptables_manager will notice a difference otherwise and keep updating things.  It should since it\u0027s just like the IPv4 case but you never know...","commit_id":"2265cb4111041c4b01508fe6010c532dbcda730e"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"a037606e6ed36abf37d53f93740c1ae883ed3008","unresolved":false,"context_lines":[{"line_number":1085,"context_line":"                \u0027-d fe80::a9fe:a9fe/128 \u0027"},{"line_number":1086,"context_line":"                \u0027-i %(interface_name)s \u0027"},{"line_number":1087,"context_line":"                \u0027-p tcp -m tcp --dport 80 \u0027"},{"line_number":1088,"context_line":"                \u0027-j MARK --set-xmark %(value)s/%(mask)s\u0027 %"},{"line_number":1089,"context_line":"                {\u0027interface_name\u0027: INTERNAL_DEV_PREFIX + \u0027+\u0027,"},{"line_number":1090,"context_line":"                 \u0027value\u0027: self.agent_conf.metadata_access_mark,"},{"line_number":1091,"context_line":"                 \u0027mask\u0027: lib_constants.ROUTER_MARK_MASK})"}],"source_content_type":"text/x-python","patch_set":1,"id":"df33271e_670cc63b","line":1088,"in_reply_to":"df33271e_6b12d663","updated":"2020-04-03 14:09:37.000000000","message":"It seems to be okay:\n\n$ sudo ip netns exec qrouter-\"$( openstack router show router1 -f value -c id )\" ip6tables-save | egrep fe80::a9fe:a9fe/128\n-A neutron-l3-agent-PREROUTING -d fe80::a9fe:a9fe/128 -i qr-+ -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 9697\n-A neutron-l3-agent-PREROUTING -d fe80::a9fe:a9fe/128 -i qr-+ -p tcp -m tcp --dport 80 -j MARK --set-xmark 0x1/0xffff","commit_id":"2265cb4111041c4b01508fe6010c532dbcda730e"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"f6976e4822321ce229b99b983dbb61b74e847b5c","unresolved":false,"context_lines":[{"line_number":1085,"context_line":"                \u0027-d fe80::a9fe:a9fe/128 \u0027"},{"line_number":1086,"context_line":"                \u0027-i %(interface_name)s \u0027"},{"line_number":1087,"context_line":"                \u0027-p tcp -m tcp --dport 80 \u0027"},{"line_number":1088,"context_line":"                \u0027-j MARK --set-xmark %(value)s/%(mask)s\u0027 %"},{"line_number":1089,"context_line":"                {\u0027interface_name\u0027: INTERNAL_DEV_PREFIX + \u0027+\u0027,"},{"line_number":1090,"context_line":"                 \u0027value\u0027: self.agent_conf.metadata_access_mark,"},{"line_number":1091,"context_line":"                 \u0027mask\u0027: lib_constants.ROUTER_MARK_MASK})"}],"source_content_type":"text/x-python","patch_set":1,"id":"df33271e_6b12d663","line":1088,"in_reply_to":"df33271e_f7690df9","updated":"2020-04-03 10:46:20.000000000","message":"Will double check. Thank you.","commit_id":"2265cb4111041c4b01508fe6010c532dbcda730e"}],"neutron/agent/linux/dhcp.py":[{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"f6976e4822321ce229b99b983dbb61b74e847b5c","unresolved":false,"context_lines":[{"line_number":1139,"context_line":"                        \u0027%s/32,%s\u0027 % (METADATA_DEFAULT_IP, gateway)"},{"line_number":1140,"context_line":"                    )"},{"line_number":1141,"context_line":"                elif subnet.ip_version \u003d\u003d 6:"},{"line_number":1142,"context_line":"                    # FIXME(bence romsics): See if we need to handle ipv6"},{"line_number":1143,"context_line":"                    # host routes differently. A quick glance at dnsmasq\u0027s"},{"line_number":1144,"context_line":"                    # opts file makes me think it\u0027s likely we have to add"},{"line_number":1145,"context_line":"                    # an option6:classless-static-route beyond the existing"},{"line_number":1146,"context_line":"                    # option:classless-static-route."},{"line_number":1147,"context_line":"                    host_routes.append("},{"line_number":1148,"context_line":"                        \u0027%s/128,%s\u0027 % (METADATA_V6_DEFAULT_IP, gateway)"},{"line_number":1149,"context_line":"                    )"}],"source_content_type":"text/x-python","patch_set":2,"id":"df33271e_062d0194","line":1146,"range":{"start_line":1142,"start_character":0,"end_line":1146,"end_character":52},"updated":"2020-04-03 10:46:20.000000000","message":"dnsmasq seems to support a measly number of options for dhcpv6 and I\u0027m not finding anything like classless-static-route for dhcpv4. Therefore looking into what radvd can do for us.\n\n$ dnsmasq -v\nDnsmasq version 2.80 ...\n\n$ dnsmasq --help dhcp6\nKnown DHCPv6 options:\n 21 sip-server-domain\n 22 sip-server\n 23 dns-server\n 24 domain-search\n 27 nis-server\n 28 nis+-server\n 29 nis-domain\n 30 nis+-domain\n 31 sntp-server\n 32 information-refresh-time\n 56 ntp-server\n 59 bootfile-url\n 60 bootfile-param\n\nsee also: http://thekelleys.org.uk/gitweb/?p\u003ddnsmasq.git;a\u003dlog","commit_id":"a54346e70bbbe4fe94a46b9804e29f0ce714024d"}],"neutron/agent/linux/iptables_manager.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"c7a9596f67468b9df6391c328e4ddfd0752b3714","unresolved":false,"context_lines":[{"line_number":372,"context_line":"    def initialize_nat_table(self):"},{"line_number":373,"context_line":"        self.ipv4.update("},{"line_number":374,"context_line":"            {\u0027nat\u0027: IptablesTable(binary_name\u003dself.wrap_name)})"},{"line_number":375,"context_line":"        self.ipv6.update("},{"line_number":376,"context_line":"            {\u0027nat\u0027: IptablesTable(binary_name\u003dself.wrap_name)})"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"        builtin_chains \u003d {"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_804ccc42","line":375,"updated":"2020-06-22 15:54:39.000000000","message":"Shouldn\u0027t we check if there is ipv6 support?","commit_id":"201dad2560d7c6c4256a441240f9ba6ac89d3f84"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"41fea45d12c244bc6bddbfd25951c8d538640c18","unresolved":false,"context_lines":[{"line_number":372,"context_line":"    def initialize_nat_table(self):"},{"line_number":373,"context_line":"        self.ipv4.update("},{"line_number":374,"context_line":"            {\u0027nat\u0027: IptablesTable(binary_name\u003dself.wrap_name)})"},{"line_number":375,"context_line":"        self.ipv6.update("},{"line_number":376,"context_line":"            {\u0027nat\u0027: IptablesTable(binary_name\u003dself.wrap_name)})"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"        builtin_chains \u003d {"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_8b3dd6bc","line":375,"in_reply_to":"bf51134e_804ccc42","updated":"2020-07-14 13:06:21.000000000","message":"I think we don\u0027t need to because all actual iptables table/chain/rule modifications are done by iptables-restore in apply() and that already has a use_ipv6 flag in line 569.\n\n(Also if we needed ipv6 if guards then initialize_mangle_table() just above would also be broken.)","commit_id":"201dad2560d7c6c4256a441240f9ba6ac89d3f84"}],"neutron/agent/linux/ra.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"c7a9596f67468b9df6391c328e4ddfd0752b3714","unresolved":false,"context_lines":[{"line_number":74,"context_line":"   };"},{"line_number":75,"context_line":"   {% endfor %}"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"   route fe80::a9fe:a9fe/128 {"},{"line_number":78,"context_line":"   };"},{"line_number":79,"context_line":"};"},{"line_number":80,"context_line":"\"\"\")"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_60c41892","line":77,"updated":"2020-06-22 15:54:39.000000000","message":"Why do we need this route?","commit_id":"201dad2560d7c6c4256a441240f9ba6ac89d3f84"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"8190578d5700734e612ed4873e3ff8f04214d398","unresolved":false,"context_lines":[{"line_number":74,"context_line":"   };"},{"line_number":75,"context_line":"   {% endfor %}"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"   route fe80::a9fe:a9fe/128 {"},{"line_number":78,"context_line":"   };"},{"line_number":79,"context_line":"};"},{"line_number":80,"context_line":"\"\"\")"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_f9892c26","line":77,"in_reply_to":"bf51134e_60c41892","updated":"2020-07-07 16:14:13.000000000","message":"It shouldn\u0027t be needed, fe80::/64 (link-local network) should always be connected on any interface.","commit_id":"201dad2560d7c6c4256a441240f9ba6ac89d3f84"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"41fea45d12c244bc6bddbfd25951c8d538640c18","unresolved":false,"context_lines":[{"line_number":74,"context_line":"   };"},{"line_number":75,"context_line":"   {% endfor %}"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"   route fe80::a9fe:a9fe/128 {"},{"line_number":78,"context_line":"   };"},{"line_number":79,"context_line":"};"},{"line_number":80,"context_line":"\"\"\")"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_abb09a44","line":77,"in_reply_to":"bf51134e_f9892c26","updated":"2020-07-14 13:06:21.000000000","message":"I believe this is needed. Jens is right, but that\u0027s not enough.\n\nIf all we had was the directly connected route for fe80::/64, then the kernel would send out a neighbor solicitation for fe80::a9fe:a9fe. Nobody would answer that, since this address is not configured in the router namespace (unlike in the dhcp namespace).\n\nIf we have this additional route too, then the kernel does the same for the default gw address, which is actually configured, so we can learn the MAC address.","commit_id":"201dad2560d7c6c4256a441240f9ba6ac89d3f84"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"a9e2ebaf040022983e1031f36ee24b35d26e4eec","unresolved":false,"context_lines":[{"line_number":74,"context_line":"   };"},{"line_number":75,"context_line":"   {% endfor %}"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"   route fe80::a9fe:a9fe/128 {"},{"line_number":78,"context_line":"   };"},{"line_number":79,"context_line":"};"},{"line_number":80,"context_line":"\"\"\")"}],"source_content_type":"text/x-python","patch_set":22,"id":"9f560f44_d02627cb","line":77,"updated":"2020-08-27 19:25:47.000000000","message":"nit: should use a constant if we have one perhaps?","commit_id":"2b4e05a548eb6d2d44960f698bf5a3f6b8cebc1a"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"bfa49c424a54018833a3a927ccd1d83aeb4b44ad","unresolved":false,"context_lines":[{"line_number":74,"context_line":"   };"},{"line_number":75,"context_line":"   {% endfor %}"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"   route fe80::a9fe:a9fe/128 {"},{"line_number":78,"context_line":"   };"},{"line_number":79,"context_line":"};"},{"line_number":80,"context_line":"\"\"\")"}],"source_content_type":"text/x-python","patch_set":22,"id":"9f560f44_a7fb5645","line":77,"in_reply_to":"9f560f44_d02627cb","updated":"2020-08-31 11:04:10.000000000","message":"Here I avoided using the constant intentionally, because this is a template and I did not want to give off the idea that any other route would make sense here.","commit_id":"2b4e05a548eb6d2d44960f698bf5a3f6b8cebc1a"}],"neutron/agent/metadata/agent.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"c7a9596f67468b9df6391c328e4ddfd0752b3714","unresolved":false,"context_lines":[{"line_number":182,"context_line":"            return None, None"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        remote_ip \u003d netaddr.IPAddress(forwarded_for)"},{"line_number":185,"context_line":"        if remote_ip.version \u003d\u003d 6:"},{"line_number":186,"context_line":"            if remote_ip.is_ipv4_mapped():"},{"line_number":187,"context_line":"                # When haproxy listens on v4 AND v6 then it inserts ipv4"},{"line_number":188,"context_line":"                # addresses as ipv4-mapped v6 addresses into X-Forwarded-For."}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_4026346a","line":185,"updated":"2020-06-22 15:54:39.000000000","message":"nit: \nif remote_ip.version \u003d\u003d 6 and remote_ip.is_ipv4_mapped():","commit_id":"201dad2560d7c6c4256a441240f9ba6ac89d3f84"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"41fea45d12c244bc6bddbfd25951c8d538640c18","unresolved":false,"context_lines":[{"line_number":182,"context_line":"            return None, None"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        remote_ip \u003d netaddr.IPAddress(forwarded_for)"},{"line_number":185,"context_line":"        if remote_ip.version \u003d\u003d 6:"},{"line_number":186,"context_line":"            if remote_ip.is_ipv4_mapped():"},{"line_number":187,"context_line":"                # When haproxy listens on v4 AND v6 then it inserts ipv4"},{"line_number":188,"context_line":"                # addresses as ipv4-mapped v6 addresses into X-Forwarded-For."}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_abc7fa95","line":185,"in_reply_to":"bf51134e_4026346a","updated":"2020-07-14 13:06:21.000000000","message":"This format makes more sense in the change on top of this, where I need to add one more if inside the \u0027if version \u003d\u003d 6\u0027.","commit_id":"201dad2560d7c6c4256a441240f9ba6ac89d3f84"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"e39e6f7a065a6ebb39c4e03c354a26f30b70e92b","unresolved":false,"context_lines":[{"line_number":182,"context_line":"            return None, None"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        remote_ip \u003d netaddr.IPAddress(forwarded_for)"},{"line_number":185,"context_line":"        if remote_ip.version \u003d\u003d 6:"},{"line_number":186,"context_line":"            if remote_ip.is_ipv4_mapped():"},{"line_number":187,"context_line":"                # When haproxy listens on v4 AND v6 then it inserts ipv4"},{"line_number":188,"context_line":"                # addresses as ipv4-mapped v6 addresses into X-Forwarded-For."}],"source_content_type":"text/x-python","patch_set":13,"id":"bf51134e_8401793b","line":185,"updated":"2020-07-09 20:50:05.000000000","message":"Do you need this check? is_ipv4_mapped() should return False either way","commit_id":"1fc63ca0d90e2567fe48d764a94c48978167a033"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"41fea45d12c244bc6bddbfd25951c8d538640c18","unresolved":false,"context_lines":[{"line_number":182,"context_line":"            return None, None"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        remote_ip \u003d netaddr.IPAddress(forwarded_for)"},{"line_number":185,"context_line":"        if remote_ip.version \u003d\u003d 6:"},{"line_number":186,"context_line":"            if remote_ip.is_ipv4_mapped():"},{"line_number":187,"context_line":"                # When haproxy listens on v4 AND v6 then it inserts ipv4"},{"line_number":188,"context_line":"                # addresses as ipv4-mapped v6 addresses into X-Forwarded-For."}],"source_content_type":"text/x-python","patch_set":13,"id":"bf51134e_4b429e10","line":185,"in_reply_to":"bf51134e_8401793b","updated":"2020-07-14 13:06:21.000000000","message":"Here this could be optimized away, but please see the same location in the change on top of this, where this if makes sense.","commit_id":"1fc63ca0d90e2567fe48d764a94c48978167a033"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"b50fe7ca9e1a6d9775eb86570c35c02e89d35ce3","unresolved":false,"context_lines":[{"line_number":182,"context_line":"            return None, None"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        remote_ip \u003d netaddr.IPAddress(forwarded_for)"},{"line_number":185,"context_line":"        if remote_ip.version \u003d\u003d 6:"},{"line_number":186,"context_line":"            if remote_ip.is_ipv4_mapped():"},{"line_number":187,"context_line":"                # When haproxy listens on v4 AND v6 then it inserts ipv4"},{"line_number":188,"context_line":"                # addresses as ipv4-mapped v6 addresses into X-Forwarded-For."}],"source_content_type":"text/x-python","patch_set":15,"id":"bf51134e_d88bed65","line":185,"range":{"start_line":185,"start_character":32,"end_line":185,"end_character":33},"updated":"2020-07-16 21:42:03.000000000","message":"nit: constants.IP_VERSION_6","commit_id":"738c61ab50684390814e55f344e3f4c99e1a63de"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"12c4f902cdb20c65f2c5f71c643194c019f0f4f3","unresolved":false,"context_lines":[{"line_number":182,"context_line":"            return None, None"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        remote_ip \u003d netaddr.IPAddress(forwarded_for)"},{"line_number":185,"context_line":"        if remote_ip.version \u003d\u003d 6:"},{"line_number":186,"context_line":"            if remote_ip.is_ipv4_mapped():"},{"line_number":187,"context_line":"                # When haproxy listens on v4 AND v6 then it inserts ipv4"},{"line_number":188,"context_line":"                # addresses as ipv4-mapped v6 addresses into X-Forwarded-For."}],"source_content_type":"text/x-python","patch_set":15,"id":"bf51134e_b20c503a","line":185,"range":{"start_line":185,"start_character":32,"end_line":185,"end_character":33},"in_reply_to":"bf51134e_d88bed65","updated":"2020-07-17 13:33:32.000000000","message":"Done","commit_id":"738c61ab50684390814e55f344e3f4c99e1a63de"}],"neutron/agent/metadata/driver.py":[{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"4361863308278beaf278e840e7bba12de370bb2e","unresolved":false,"context_lines":[{"line_number":242,"context_line":"            if netutils.is_ipv6_enabled():"},{"line_number":243,"context_line":"                bind_address \u003d \u0027::\u0027"},{"line_number":244,"context_line":"            else:"},{"line_number":245,"context_line":"                bind_address \u003d \u00270.0.0.0\u0027"},{"line_number":246,"context_line":"        uuid \u003d network_id or router_id"},{"line_number":247,"context_line":"        callback \u003d cls._get_metadata_proxy_callback("},{"line_number":248,"context_line":"            bind_address, port, conf, network_id\u003dnetwork_id,"}],"source_content_type":"text/x-python","patch_set":7,"id":"1f493fa4_112e3391","line":245,"updated":"2020-04-28 14:45:41.000000000","message":"Lajos caught an upgrade bug (thank you!): When this code is deployed into a system where haproxy is already running we don\u0027t restart it. Therefore we keep running with haproxy still listening on 0.0.0.0 and metadata requests get a connection refused error. We need to fix this.","commit_id":"83f3978570e3434d9c72ab4a1a8f1aaa108cf02d"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"db4ff18824ad2bb3e4a7d398ae58c98291db46d5","unresolved":false,"context_lines":[{"line_number":242,"context_line":"            if netutils.is_ipv6_enabled():"},{"line_number":243,"context_line":"                bind_address \u003d \u0027::\u0027"},{"line_number":244,"context_line":"            else:"},{"line_number":245,"context_line":"                bind_address \u003d \u00270.0.0.0\u0027"},{"line_number":246,"context_line":"        uuid \u003d network_id or router_id"},{"line_number":247,"context_line":"        callback \u003d cls._get_metadata_proxy_callback("},{"line_number":248,"context_line":"            bind_address, port, conf, network_id\u003dnetwork_id,"}],"source_content_type":"text/x-python","patch_set":7,"id":"1f493fa4_8fa5e0a4","line":245,"in_reply_to":"1f493fa4_112e3391","updated":"2020-04-29 14:34:57.000000000","message":"+1","commit_id":"83f3978570e3434d9c72ab4a1a8f1aaa108cf02d"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"cee8f3a9ea5afde31ec55a0239af3252d5532ad2","unresolved":false,"context_lines":[{"line_number":242,"context_line":"            if netutils.is_ipv6_enabled():"},{"line_number":243,"context_line":"                bind_address \u003d \u0027::\u0027"},{"line_number":244,"context_line":"            else:"},{"line_number":245,"context_line":"                bind_address \u003d \u00270.0.0.0\u0027"},{"line_number":246,"context_line":"        uuid \u003d network_id or router_id"},{"line_number":247,"context_line":"        callback \u003d cls._get_metadata_proxy_callback("},{"line_number":248,"context_line":"            bind_address, port, conf, network_id\u003dnetwork_id,"}],"source_content_type":"text/x-python","patch_set":7,"id":"bf51134e_a89eb250","line":245,"in_reply_to":"1f493fa4_112e3391","updated":"2020-07-16 15:03:49.000000000","message":"Done","commit_id":"83f3978570e3434d9c72ab4a1a8f1aaa108cf02d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5b66297df4f06ec7f1fb0f5f1fb825fe8f601211","unresolved":false,"context_lines":[{"line_number":195,"context_line":"                 \u0027-j DROP\u0027 % port)]"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    @classmethod"},{"line_number":198,"context_line":"    def metadata_nat_rules(cls, port, metadata_address\u003d\u0027169.254.169.254/32\u0027):"},{"line_number":199,"context_line":"        return [(\u0027PREROUTING\u0027, \u0027-d %(metadata_address)s \u0027"},{"line_number":200,"context_line":"                 \u0027-i %(interface_name)s \u0027"},{"line_number":201,"context_line":"                 \u0027-p tcp -m tcp --dport 80 -j REDIRECT \u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_550b7722","line":198,"range":{"start_line":198,"start_character":55,"end_line":198,"end_character":75},"updated":"2020-06-23 21:28:26.000000000","message":"neutron_lib defines this as constants.METADATA_CIDR so we should use it.  And maybe it should just be a required argument?","commit_id":"201dad2560d7c6c4256a441240f9ba6ac89d3f84"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5b66297df4f06ec7f1fb0f5f1fb825fe8f601211","unresolved":false,"context_lines":[{"line_number":242,"context_line":"            if netutils.is_ipv6_enabled():"},{"line_number":243,"context_line":"                bind_address \u003d \u0027::\u0027"},{"line_number":244,"context_line":"            else:"},{"line_number":245,"context_line":"                bind_address \u003d \u00270.0.0.0\u0027"},{"line_number":246,"context_line":"        uuid \u003d network_id or router_id"},{"line_number":247,"context_line":"        callback \u003d cls._get_metadata_proxy_callback("},{"line_number":248,"context_line":"            bind_address, port, conf, network_id\u003dnetwork_id,"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_d56787b6","line":245,"updated":"2020-06-23 21:28:26.000000000","message":"I\u0027m thinking we need to be able to bind multiple addresses, made the same comment in the other patch.","commit_id":"201dad2560d7c6c4256a441240f9ba6ac89d3f84"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"875dd3789688f6619c3f3ccfb2805f07d85f2819","unresolved":false,"context_lines":[{"line_number":242,"context_line":"            if netutils.is_ipv6_enabled():"},{"line_number":243,"context_line":"                bind_address \u003d \u0027::\u0027"},{"line_number":244,"context_line":"            else:"},{"line_number":245,"context_line":"                bind_address \u003d \u00270.0.0.0\u0027"},{"line_number":246,"context_line":"        uuid \u003d network_id or router_id"},{"line_number":247,"context_line":"        callback \u003d cls._get_metadata_proxy_callback("},{"line_number":248,"context_line":"            bind_address, port, conf, network_id\u003dnetwork_id,"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_fde7e6e1","line":245,"in_reply_to":"bf51134e_d56787b6","updated":"2020-07-15 08:39:10.000000000","message":"Maybe I should better have made that comment here, but please see: https://review.opendev.org/#/c/715482/11/neutron/agent/dhcp/agent.py@720","commit_id":"201dad2560d7c6c4256a441240f9ba6ac89d3f84"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"b50fe7ca9e1a6d9775eb86570c35c02e89d35ce3","unresolved":false,"context_lines":[{"line_number":254,"context_line":"                                       bind_address\u003d\"0.0.0.0\", network_id\u003dNone,"},{"line_number":255,"context_line":"                                       router_id\u003dNone, bind_address_v6\u003dNone,"},{"line_number":256,"context_line":"                                       bind_interface\u003dNone):"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"        uuid \u003d network_id or router_id"},{"line_number":259,"context_line":"        callback \u003d cls._get_metadata_proxy_callback("},{"line_number":260,"context_line":"            bind_address, port, conf,"}],"source_content_type":"text/x-python","patch_set":15,"id":"bf51134e_98d69553","line":257,"updated":"2020-07-16 21:42:03.000000000","message":"nit: whitespace","commit_id":"738c61ab50684390814e55f344e3f4c99e1a63de"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"12c4f902cdb20c65f2c5f71c643194c019f0f4f3","unresolved":false,"context_lines":[{"line_number":254,"context_line":"                                       bind_address\u003d\"0.0.0.0\", network_id\u003dNone,"},{"line_number":255,"context_line":"                                       router_id\u003dNone, bind_address_v6\u003dNone,"},{"line_number":256,"context_line":"                                       bind_interface\u003dNone):"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"        uuid \u003d network_id or router_id"},{"line_number":259,"context_line":"        callback \u003d cls._get_metadata_proxy_callback("},{"line_number":260,"context_line":"            bind_address, port, conf,"}],"source_content_type":"text/x-python","patch_set":15,"id":"bf51134e_f216c849","line":257,"in_reply_to":"bf51134e_98d69553","updated":"2020-07-17 13:33:32.000000000","message":"Done","commit_id":"738c61ab50684390814e55f344e3f4c99e1a63de"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"d0236da623ecd469ef3a38daade304b3f0bc1b62","unresolved":false,"context_lines":[{"line_number":206,"context_line":"                 \u0027-j DROP\u0027 % port)]"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    @classmethod"},{"line_number":209,"context_line":"    def metadata_nat_rules(cls, port, metadata_address\u003d\u0027169.254.169.254/32\u0027):"},{"line_number":210,"context_line":"        return [(\u0027PREROUTING\u0027, \u0027-d %(metadata_address)s \u0027"},{"line_number":211,"context_line":"                 \u0027-i %(interface_name)s \u0027"},{"line_number":212,"context_line":"                 \u0027-p tcp -m tcp --dport 80 -j REDIRECT \u0027"}],"source_content_type":"text/x-python","patch_set":19,"id":"9f560f44_a3cd8e86","line":209,"range":{"start_line":209,"start_character":56,"end_line":209,"end_character":74},"updated":"2020-08-04 15:26:52.000000000","message":"not introduced by this patch, but don\u0027t we have a const for this?","commit_id":"11f86726ab6338404a2f4bd4a9ce04333bf992b6"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"bfa49c424a54018833a3a927ccd1d83aeb4b44ad","unresolved":false,"context_lines":[{"line_number":206,"context_line":"                 \u0027-j DROP\u0027 % port)]"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    @classmethod"},{"line_number":209,"context_line":"    def metadata_nat_rules(cls, port, metadata_address\u003d\u0027169.254.169.254/32\u0027):"},{"line_number":210,"context_line":"        return [(\u0027PREROUTING\u0027, \u0027-d %(metadata_address)s \u0027"},{"line_number":211,"context_line":"                 \u0027-i %(interface_name)s \u0027"},{"line_number":212,"context_line":"                 \u0027-p tcp -m tcp --dport 80 -j REDIRECT \u0027"}],"source_content_type":"text/x-python","patch_set":19,"id":"9f560f44_a94ee934","line":209,"range":{"start_line":209,"start_character":56,"end_line":209,"end_character":74},"in_reply_to":"9f560f44_a3cd8e86","updated":"2020-08-31 11:04:10.000000000","message":"Done","commit_id":"11f86726ab6338404a2f4bd4a9ce04333bf992b6"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"d0236da623ecd469ef3a38daade304b3f0bc1b62","unresolved":false,"context_lines":[{"line_number":311,"context_line":"        router.iptables_manager.ipv4[\u0027nat\u0027].add_rule(c, r)"},{"line_number":312,"context_line":"    if ipv6_enabled:"},{"line_number":313,"context_line":"        for c, r in proxy.metadata_nat_rules("},{"line_number":314,"context_line":"                proxy.metadata_port, metadata_address\u003d\u0027fe80::a9fe:a9fe/128\u0027):"},{"line_number":315,"context_line":"            router.iptables_manager.ipv6[\u0027nat\u0027].add_rule(c, r)"},{"line_number":316,"context_line":"    router.iptables_manager.apply()"},{"line_number":317,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"9f560f44_43a2b2af","line":314,"range":{"start_line":314,"start_character":55,"end_line":314,"end_character":74},"updated":"2020-08-04 15:26:52.000000000","message":"const?","commit_id":"11f86726ab6338404a2f4bd4a9ce04333bf992b6"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"bfa49c424a54018833a3a927ccd1d83aeb4b44ad","unresolved":false,"context_lines":[{"line_number":311,"context_line":"        router.iptables_manager.ipv4[\u0027nat\u0027].add_rule(c, r)"},{"line_number":312,"context_line":"    if ipv6_enabled:"},{"line_number":313,"context_line":"        for c, r in proxy.metadata_nat_rules("},{"line_number":314,"context_line":"                proxy.metadata_port, metadata_address\u003d\u0027fe80::a9fe:a9fe/128\u0027):"},{"line_number":315,"context_line":"            router.iptables_manager.ipv6[\u0027nat\u0027].add_rule(c, r)"},{"line_number":316,"context_line":"    router.iptables_manager.apply()"},{"line_number":317,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"9f560f44_a96709b7","line":314,"range":{"start_line":314,"start_character":55,"end_line":314,"end_character":74},"in_reply_to":"9f560f44_43a2b2af","updated":"2020-08-31 11:04:10.000000000","message":"Done","commit_id":"11f86726ab6338404a2f4bd4a9ce04333bf992b6"}],"neutron/tests/unit/agent/l3/test_agent.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"b50fe7ca9e1a6d9775eb86570c35c02e89d35ce3","unresolved":false,"context_lines":[{"line_number":2669,"context_line":"                driver, \u0027destroy_monitored_metadata_proxy\u0027) as destroy_proxy:"},{"line_number":2670,"context_line":"            with mock.patch.object("},{"line_number":2671,"context_line":"                    driver, \u0027spawn_monitored_metadata_proxy\u0027) as spawn_proxy, \\"},{"line_number":2672,"context_line":"                 mock.patch.object(netutils, \u0027is_ipv6_enabled\u0027) as ipv6_mock:"},{"line_number":2673,"context_line":"                ipv6_mock.return_value \u003d True"},{"line_number":2674,"context_line":"                agent._process_added_router(router)"},{"line_number":2675,"context_line":"                if enableflag:"}],"source_content_type":"text/x-python","patch_set":15,"id":"bf51134e_98bfb5fb","line":2672,"updated":"2020-07-16 21:42:03.000000000","message":"indentation looks odd here, can this line-up with driver?","commit_id":"738c61ab50684390814e55f344e3f4c99e1a63de"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"12c4f902cdb20c65f2c5f71c643194c019f0f4f3","unresolved":false,"context_lines":[{"line_number":2669,"context_line":"                driver, \u0027destroy_monitored_metadata_proxy\u0027) as destroy_proxy:"},{"line_number":2670,"context_line":"            with mock.patch.object("},{"line_number":2671,"context_line":"                    driver, \u0027spawn_monitored_metadata_proxy\u0027) as spawn_proxy, \\"},{"line_number":2672,"context_line":"                 mock.patch.object(netutils, \u0027is_ipv6_enabled\u0027) as ipv6_mock:"},{"line_number":2673,"context_line":"                ipv6_mock.return_value \u003d True"},{"line_number":2674,"context_line":"                agent._process_added_router(router)"},{"line_number":2675,"context_line":"                if enableflag:"}],"source_content_type":"text/x-python","patch_set":15,"id":"bf51134e_32868067","line":2672,"in_reply_to":"bf51134e_98bfb5fb","updated":"2020-07-17 13:33:32.000000000","message":"IMO that would be misleading, because logically this is on the same level as the other mock.patch.object(). pep8 does not leave much choice in indenting such a \u0027with\u0027. But I realized that we can get rid of the embedded \u0027with\u0027, so I did that.","commit_id":"738c61ab50684390814e55f344e3f4c99e1a63de"}]}
