)]}'
{"neutron/agent/linux/openvswitch_firewall/constants.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"4fad8e4ff0f58366946008e0155c1c4fe604f05e","unresolved":false,"context_lines":[{"line_number":35,"context_line":"REG_PORT \u003d 5"},{"line_number":36,"context_line":"REG_NET \u003d 6"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"PROTOCOLS_WITH_PORTS \u003d (constants.PROTO_NAME_SCTP,"},{"line_number":39,"context_line":"                        constants.PROTO_NAME_TCP,"},{"line_number":40,"context_line":"                        constants.PROTO_NAME_UDP)"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"df3967d1_581c4377","line":38,"range":{"start_line":38,"start_character":24,"end_line":38,"end_character":49},"updated":"2017-08-03 07:29:55.000000000","message":"This change is out of the scope of the bug, although it is correct.","commit_id":"b335391b90158b2f8eb241aab08c05a61858a353"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"6ae5e583c1fa70136eaec007cf675e556ac75e76","unresolved":false,"context_lines":[{"line_number":35,"context_line":"REG_PORT \u003d 5"},{"line_number":36,"context_line":"REG_NET \u003d 6"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"PROTOCOLS_WITH_PORTS \u003d (constants.PROTO_NAME_SCTP,"},{"line_number":39,"context_line":"                        constants.PROTO_NAME_TCP,"},{"line_number":40,"context_line":"                        constants.PROTO_NAME_UDP)"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"df3967d1_64e19e2a","line":38,"range":{"start_line":38,"start_character":24,"end_line":38,"end_character":49},"in_reply_to":"df3967d1_0958abf7","updated":"2017-08-03 09:06:25.000000000","message":"It sounds to me like this patch is fixing ICMP types and codes. SCTP is not mentioned and imho fixing that SCTP can have port numbers is a different issue.","commit_id":"b335391b90158b2f8eb241aab08c05a61858a353"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"aa3a000a741b8a2d55060deea8ea56a6e8ad4995","unresolved":false,"context_lines":[{"line_number":35,"context_line":"REG_PORT \u003d 5"},{"line_number":36,"context_line":"REG_NET \u003d 6"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"PROTOCOLS_WITH_PORTS \u003d (constants.PROTO_NAME_SCTP,"},{"line_number":39,"context_line":"                        constants.PROTO_NAME_TCP,"},{"line_number":40,"context_line":"                        constants.PROTO_NAME_UDP)"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"df3967d1_0958abf7","line":38,"range":{"start_line":38,"start_character":24,"end_line":38,"end_character":49},"in_reply_to":"df3967d1_1e0c63eb","updated":"2017-08-03 08:47:11.000000000","message":"Don\u0027t we need to accept numbers?","commit_id":"b335391b90158b2f8eb241aab08c05a61858a353"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"41776e094efb15d9782141791ff53ce005fe9a1b","unresolved":false,"context_lines":[{"line_number":35,"context_line":"REG_PORT \u003d 5"},{"line_number":36,"context_line":"REG_NET \u003d 6"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"PROTOCOLS_WITH_PORTS \u003d (constants.PROTO_NAME_SCTP,"},{"line_number":39,"context_line":"                        constants.PROTO_NAME_TCP,"},{"line_number":40,"context_line":"                        constants.PROTO_NAME_UDP)"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"df3967d1_1e0c63eb","line":38,"range":{"start_line":38,"start_character":24,"end_line":38,"end_character":49},"in_reply_to":"df3967d1_581c4377","updated":"2017-08-03 08:16:11.000000000","message":"Indeed, please make a new change so we can backport it.","commit_id":"b335391b90158b2f8eb241aab08c05a61858a353"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"310518b9518daaf25798c88b12905c6e831e41e9","unresolved":false,"context_lines":[{"line_number":35,"context_line":"REG_PORT \u003d 5"},{"line_number":36,"context_line":"REG_NET \u003d 6"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"PROTOCOLS_WITH_PORTS \u003d (constants.PROTO_NAME_SCTP,"},{"line_number":39,"context_line":"                        constants.PROTO_NAME_TCP,"},{"line_number":40,"context_line":"                        constants.PROTO_NAME_UDP)"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"df3967d1_57998dc1","line":38,"range":{"start_line":38,"start_character":24,"end_line":38,"end_character":49},"in_reply_to":"df3967d1_64e19e2a","updated":"2017-08-04 06:28:03.000000000","message":"https://review.openstack.org/490753","commit_id":"b335391b90158b2f8eb241aab08c05a61858a353"}],"neutron/agent/linux/openvswitch_firewall/rules.py":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"41776e094efb15d9782141791ff53ce005fe9a1b","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                protocol, protocol)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    flows \u003d create_port_range_flows(flow_template, rule)"},{"line_number":104,"context_line":"    if rule.get(\u0027protocol\u0027) \u003d\u003d n_consts.PROTO_NAME_ICMP:"},{"line_number":105,"context_line":"        flows \u003d create_icmp_flows(flow_template, rule)"},{"line_number":106,"context_line":"    return flows or [flow_template]"},{"line_number":107,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"df3967d1_deb81be6","line":104,"range":{"start_line":104,"start_character":7,"end_line":104,"end_character":27},"updated":"2017-08-03 08:16:11.000000000","message":"re-use the protocol from L94","commit_id":"b335391b90158b2f8eb241aab08c05a61858a353"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"310518b9518daaf25798c88b12905c6e831e41e9","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                protocol, protocol)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    flows \u003d create_port_range_flows(flow_template, rule)"},{"line_number":104,"context_line":"    if rule.get(\u0027protocol\u0027) \u003d\u003d n_consts.PROTO_NAME_ICMP:"},{"line_number":105,"context_line":"        flows \u003d create_icmp_flows(flow_template, rule)"},{"line_number":106,"context_line":"    return flows or [flow_template]"},{"line_number":107,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"df3967d1_f48bdf64","line":104,"range":{"start_line":104,"start_character":7,"end_line":104,"end_character":27},"in_reply_to":"df3967d1_deb81be6","updated":"2017-08-04 06:28:03.000000000","message":"Done","commit_id":"b335391b90158b2f8eb241aab08c05a61858a353"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"aa3a000a741b8a2d55060deea8ea56a6e8ad4995","unresolved":false,"context_lines":[{"line_number":108,"context_line":""},{"line_number":109,"context_line":"def create_port_range_flows(flow_template, rule):"},{"line_number":110,"context_line":"    protocol \u003d rule.get(\u0027protocol\u0027)"},{"line_number":111,"context_line":"    if protocol not in ovsfw_consts.PROTOCOLS_WITH_PORTS:"},{"line_number":112,"context_line":"        return []"},{"line_number":113,"context_line":"    flows \u003d []"},{"line_number":114,"context_line":"    src_port_match \u003d \u0027{:s}_src\u0027.format(protocol)"}],"source_content_type":"text/x-python","patch_set":1,"id":"df3967d1_0982eb00","line":111,"updated":"2017-08-03 08:47:11.000000000","message":"So, protocol can be a number,\nchanging this to\n\n    if protocol in [n_consts.PROTO_NAME_ICMP, n_consts.PROTO_NUM_ICMP, n_consts.PROTO_NUM_IPV6_ICMP]\n\nwould make more sense. What do you think?","commit_id":"b335391b90158b2f8eb241aab08c05a61858a353"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"6ae5e583c1fa70136eaec007cf675e556ac75e76","unresolved":false,"context_lines":[{"line_number":108,"context_line":""},{"line_number":109,"context_line":"def create_port_range_flows(flow_template, rule):"},{"line_number":110,"context_line":"    protocol \u003d rule.get(\u0027protocol\u0027)"},{"line_number":111,"context_line":"    if protocol not in ovsfw_consts.PROTOCOLS_WITH_PORTS:"},{"line_number":112,"context_line":"        return []"},{"line_number":113,"context_line":"    flows \u003d []"},{"line_number":114,"context_line":"    src_port_match \u003d \u0027{:s}_src\u0027.format(protocol)"}],"source_content_type":"text/x-python","patch_set":1,"id":"df3967d1_c4996ac4","line":111,"in_reply_to":"df3967d1_0982eb00","updated":"2017-08-03 09:06:25.000000000","message":"or we could translate known protocol numbers to names at first place to avoid checking against NUMS and NAMES","commit_id":"b335391b90158b2f8eb241aab08c05a61858a353"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"02bd32c5758dbf107ce2e0d25492f0a5a2116035","unresolved":false,"context_lines":[{"line_number":108,"context_line":""},{"line_number":109,"context_line":"def create_port_range_flows(flow_template, rule):"},{"line_number":110,"context_line":"    protocol \u003d rule.get(\u0027protocol\u0027)"},{"line_number":111,"context_line":"    if protocol not in ovsfw_consts.PROTOCOLS_WITH_PORTS:"},{"line_number":112,"context_line":"        return []"},{"line_number":113,"context_line":"    flows \u003d []"},{"line_number":114,"context_line":"    src_port_match \u003d \u0027{:s}_src\u0027.format(protocol)"}],"source_content_type":"text/x-python","patch_set":1,"id":"df3967d1_08c76066","line":111,"in_reply_to":"df3967d1_74fa54bd","updated":"2017-08-04 08:39:15.000000000","message":"I didn\u0027t mean to translate it on API layer but somewhere at the beginning of processing the protocol - so then later on in the firewall code we can expect always the same.","commit_id":"b335391b90158b2f8eb241aab08c05a61858a353"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"3b9e3c6e41c3e673efc8cdc661b3d0ee181484f3","unresolved":false,"context_lines":[{"line_number":108,"context_line":""},{"line_number":109,"context_line":"def create_port_range_flows(flow_template, rule):"},{"line_number":110,"context_line":"    protocol \u003d rule.get(\u0027protocol\u0027)"},{"line_number":111,"context_line":"    if protocol not in ovsfw_consts.PROTOCOLS_WITH_PORTS:"},{"line_number":112,"context_line":"        return []"},{"line_number":113,"context_line":"    flows \u003d []"},{"line_number":114,"context_line":"    src_port_match \u003d \u0027{:s}_src\u0027.format(protocol)"}],"source_content_type":"text/x-python","patch_set":1,"id":"df3967d1_74fa54bd","line":111,"in_reply_to":"df3967d1_c4996ac4","updated":"2017-08-04 04:37:41.000000000","message":"cf. https://review.openstack.org/#/c/427670\n\nthat\u0027ll require DB migration.\n\nMaking the ovsfw code behave as good as iptables_firewall seems to be the answer, IMO.","commit_id":"b335391b90158b2f8eb241aab08c05a61858a353"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"41776e094efb15d9782141791ff53ce005fe9a1b","unresolved":false,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"def create_icmp_flows(flow_template, rule):"},{"line_number":148,"context_line":"    icmp_type \u003d rule.get(\u0027port_range_min\u0027)"},{"line_number":149,"context_line":"    icmp_code \u003d rule.get(\u0027port_range_max\u0027)"},{"line_number":150,"context_line":"    if icmp_type is None:"},{"line_number":151,"context_line":"        return"},{"line_number":152,"context_line":"    flow \u003d flow_template.copy()"},{"line_number":153,"context_line":"    flow[\u0027icmp_type\u0027] \u003d icmp_type"},{"line_number":154,"context_line":"    if icmp_code is not None:"},{"line_number":155,"context_line":"        flow[\u0027icmp_code\u0027] \u003d icmp_code"},{"line_number":156,"context_line":"    return [flow]"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"df3967d1_1e96a340","line":155,"range":{"start_line":148,"start_character":0,"end_line":155,"end_character":37},"updated":"2017-08-03 08:16:11.000000000","message":"python style would be:\n\n try:\n     icmp_type \u003d rule[\u0027port_range_min\u0027]\n except KeyError:\n     return\n\n flow \u003d flow_template.copy()\n flow[\u0027icmp_type\u0027] \u003d icmp_type\n\n try:\n     flow[\u0027icmp_code\u0027] \u003d rule[\u0027port_range_max\u0027]\n except KeyError:\n     pass\n\n return [flow]","commit_id":"b335391b90158b2f8eb241aab08c05a61858a353"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"aa3a000a741b8a2d55060deea8ea56a6e8ad4995","unresolved":false,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"def create_icmp_flows(flow_template, rule):"},{"line_number":148,"context_line":"    icmp_type \u003d rule.get(\u0027port_range_min\u0027)"},{"line_number":149,"context_line":"    icmp_code \u003d rule.get(\u0027port_range_max\u0027)"},{"line_number":150,"context_line":"    if icmp_type is None:"},{"line_number":151,"context_line":"        return"},{"line_number":152,"context_line":"    flow \u003d flow_template.copy()"},{"line_number":153,"context_line":"    flow[\u0027icmp_type\u0027] \u003d icmp_type"},{"line_number":154,"context_line":"    if icmp_code is not None:"},{"line_number":155,"context_line":"        flow[\u0027icmp_code\u0027] \u003d icmp_code"},{"line_number":156,"context_line":"    return [flow]"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"df3967d1_8946dbbf","line":155,"range":{"start_line":148,"start_character":0,"end_line":155,"end_character":37},"in_reply_to":"df3967d1_1e96a340","updated":"2017-08-03 08:47:11.000000000","message":"I know you like exception clauses but I\u0027d like to follow create_port_range_flows and iptables_firewall style. ;)","commit_id":"b335391b90158b2f8eb241aab08c05a61858a353"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"310518b9518daaf25798c88b12905c6e831e41e9","unresolved":false,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"def create_icmp_flows(flow_template, rule):"},{"line_number":148,"context_line":"    icmp_type \u003d rule.get(\u0027port_range_min\u0027)"},{"line_number":149,"context_line":"    icmp_code \u003d rule.get(\u0027port_range_max\u0027)"},{"line_number":150,"context_line":"    if icmp_type is None:"},{"line_number":151,"context_line":"        return"},{"line_number":152,"context_line":"    flow \u003d flow_template.copy()"},{"line_number":153,"context_line":"    flow[\u0027icmp_type\u0027] \u003d icmp_type"},{"line_number":154,"context_line":"    if icmp_code is not None:"},{"line_number":155,"context_line":"        flow[\u0027icmp_code\u0027] \u003d icmp_code"},{"line_number":156,"context_line":"    return [flow]"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"df3967d1_40b0a68a","line":155,"range":{"start_line":148,"start_character":0,"end_line":155,"end_character":37},"in_reply_to":"df3967d1_246716c0","updated":"2017-08-04 06:28:03.000000000","message":"It seems it\u0027s more precise to say \"it was common long ago.\"\n\n\nhttps://docs.python.org/3/faq/design.html?highlight\u003dkeyerror#how-fast-are-exceptions","commit_id":"b335391b90158b2f8eb241aab08c05a61858a353"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"02bd32c5758dbf107ce2e0d25492f0a5a2116035","unresolved":false,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"def create_icmp_flows(flow_template, rule):"},{"line_number":148,"context_line":"    icmp_type \u003d rule.get(\u0027port_range_min\u0027)"},{"line_number":149,"context_line":"    icmp_code \u003d rule.get(\u0027port_range_max\u0027)"},{"line_number":150,"context_line":"    if icmp_type is None:"},{"line_number":151,"context_line":"        return"},{"line_number":152,"context_line":"    flow \u003d flow_template.copy()"},{"line_number":153,"context_line":"    flow[\u0027icmp_type\u0027] \u003d icmp_type"},{"line_number":154,"context_line":"    if icmp_code is not None:"},{"line_number":155,"context_line":"        flow[\u0027icmp_code\u0027] \u003d icmp_code"},{"line_number":156,"context_line":"    return [flow]"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"df3967d1_88a8f08b","line":155,"range":{"start_line":148,"start_character":0,"end_line":155,"end_character":37},"in_reply_to":"df3967d1_40b0a68a","updated":"2017-08-04 08:39:15.000000000","message":"Thanks for the link, interesting reading :)","commit_id":"b335391b90158b2f8eb241aab08c05a61858a353"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"6ae5e583c1fa70136eaec007cf675e556ac75e76","unresolved":false,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"def create_icmp_flows(flow_template, rule):"},{"line_number":148,"context_line":"    icmp_type \u003d rule.get(\u0027port_range_min\u0027)"},{"line_number":149,"context_line":"    icmp_code \u003d rule.get(\u0027port_range_max\u0027)"},{"line_number":150,"context_line":"    if icmp_type is None:"},{"line_number":151,"context_line":"        return"},{"line_number":152,"context_line":"    flow \u003d flow_template.copy()"},{"line_number":153,"context_line":"    flow[\u0027icmp_type\u0027] \u003d icmp_type"},{"line_number":154,"context_line":"    if icmp_code is not None:"},{"line_number":155,"context_line":"        flow[\u0027icmp_code\u0027] \u003d icmp_code"},{"line_number":156,"context_line":"    return [flow]"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"df3967d1_246716c0","line":155,"range":{"start_line":148,"start_character":0,"end_line":155,"end_character":37},"in_reply_to":"df3967d1_8946dbbf","updated":"2017-08-03 09:06:25.000000000","message":"It\u0027s not just me, it\u0027s the recommendation in python docs ;) create_port_range_flows obtain source ports cause they need to be used together. It would look weird to implementing it with try blocks.","commit_id":"b335391b90158b2f8eb241aab08c05a61858a353"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"68a4d90da8e66897a755d76f4e183f5004beb363","unresolved":false,"context_lines":[{"line_number":100,"context_line":"            flow_template[\u0027nw_proto\u0027] \u003d n_consts.IP_PROTOCOL_MAP.get("},{"line_number":101,"context_line":"                protocol, protocol)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    flows \u003d create_port_range_flows(flow_template, rule)"},{"line_number":104,"context_line":"    if protocol in [n_consts.PROTO_NAME_ICMP, n_consts.PROTO_NAME_IPV6_ICMP,"},{"line_number":105,"context_line":"                    n_consts.PROTO_NAME_IPV6_ICMP_LEGACY]:"},{"line_number":106,"context_line":"        flows \u003d create_icmp_flows(flow_template, rule)"}],"source_content_type":"text/x-python","patch_set":2,"id":"df3967d1_d777bd9f","line":103,"range":{"start_line":103,"start_character":12,"end_line":103,"end_character":35},"updated":"2017-08-04 06:34:45.000000000","message":"you can move this to an else clause.","commit_id":"3ce25ada62fc89ff02da2101756d0d1c8bc00dbe"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"d4264b1712e6cd1f14f6a0defb611c6ddb2d0a2a","unresolved":false,"context_lines":[{"line_number":100,"context_line":"            flow_template[\u0027nw_proto\u0027] \u003d n_consts.IP_PROTOCOL_MAP.get("},{"line_number":101,"context_line":"                protocol, protocol)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    flows \u003d create_port_range_flows(flow_template, rule)"},{"line_number":104,"context_line":"    if protocol in [n_consts.PROTO_NAME_ICMP, n_consts.PROTO_NAME_IPV6_ICMP,"},{"line_number":105,"context_line":"                    n_consts.PROTO_NAME_IPV6_ICMP_LEGACY]:"},{"line_number":106,"context_line":"        flows \u003d create_icmp_flows(flow_template, rule)"}],"source_content_type":"text/x-python","patch_set":2,"id":"df3967d1_77ba516e","line":103,"range":{"start_line":103,"start_character":12,"end_line":103,"end_character":35},"in_reply_to":"df3967d1_d777bd9f","updated":"2017-08-04 06:56:32.000000000","message":"Done","commit_id":"3ce25ada62fc89ff02da2101756d0d1c8bc00dbe"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"68a4d90da8e66897a755d76f4e183f5004beb363","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                protocol, protocol)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    flows \u003d create_port_range_flows(flow_template, rule)"},{"line_number":104,"context_line":"    if protocol in [n_consts.PROTO_NAME_ICMP, n_consts.PROTO_NAME_IPV6_ICMP,"},{"line_number":105,"context_line":"                    n_consts.PROTO_NAME_IPV6_ICMP_LEGACY]:"},{"line_number":106,"context_line":"        flows \u003d create_icmp_flows(flow_template, rule)"},{"line_number":107,"context_line":"    return flows or [flow_template]"}],"source_content_type":"text/x-python","patch_set":2,"id":"df3967d1_176b0585","line":104,"range":{"start_line":104,"start_character":7,"end_line":104,"end_character":15},"updated":"2017-08-04 06:34:45.000000000","message":"it\u0027s simpler to check flow_template[\u0027nw_proto\u0027]","commit_id":"3ce25ada62fc89ff02da2101756d0d1c8bc00dbe"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"d4264b1712e6cd1f14f6a0defb611c6ddb2d0a2a","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                protocol, protocol)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    flows \u003d create_port_range_flows(flow_template, rule)"},{"line_number":104,"context_line":"    if protocol in [n_consts.PROTO_NAME_ICMP, n_consts.PROTO_NAME_IPV6_ICMP,"},{"line_number":105,"context_line":"                    n_consts.PROTO_NAME_IPV6_ICMP_LEGACY]:"},{"line_number":106,"context_line":"        flows \u003d create_icmp_flows(flow_template, rule)"},{"line_number":107,"context_line":"    return flows or [flow_template]"}],"source_content_type":"text/x-python","patch_set":2,"id":"df3967d1_77481186","line":104,"range":{"start_line":104,"start_character":7,"end_line":104,"end_character":15},"in_reply_to":"df3967d1_176b0585","updated":"2017-08-04 06:56:32.000000000","message":"nw_proto might not be in flow_template so I need another get() for that.","commit_id":"3ce25ada62fc89ff02da2101756d0d1c8bc00dbe"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"d0b018b107999e3c101dbfed3cf871ca140387ca","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                protocol, protocol)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    flows \u003d create_port_range_flows(flow_template, rule)"},{"line_number":104,"context_line":"    if protocol in [n_consts.PROTO_NAME_ICMP, n_consts.PROTO_NAME_IPV6_ICMP,"},{"line_number":105,"context_line":"                    n_consts.PROTO_NAME_IPV6_ICMP_LEGACY]:"},{"line_number":106,"context_line":"        flows \u003d create_icmp_flows(flow_template, rule)"},{"line_number":107,"context_line":"    return flows or [flow_template]"}],"source_content_type":"text/x-python","patch_set":2,"id":"df3967d1_2a68dcb6","line":104,"range":{"start_line":104,"start_character":7,"end_line":104,"end_character":15},"in_reply_to":"df3967d1_77481186","updated":"2017-08-04 07:02:20.000000000","message":"yes. but it\u0027s normalized in L96-101","commit_id":"3ce25ada62fc89ff02da2101756d0d1c8bc00dbe"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"d1345b00bb6b08a7aae10a741f9b18324d1b0ad1","unresolved":false,"context_lines":[{"line_number":87,"context_line":"    return flow_template"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"def create_protocol_flows(direction, flow_template, port, rule):"},{"line_number":91,"context_line":"    flow_template \u003d populate_flow_common(direction,"},{"line_number":92,"context_line":"                                         flow_template.copy(),"},{"line_number":93,"context_line":"                                         port)"}],"source_content_type":"text/x-python","patch_set":3,"id":"df3967d1_c8d3985f","line":90,"range":{"start_line":90,"start_character":4,"end_line":90,"end_character":25},"updated":"2017-08-04 08:35:06.000000000","message":"Can you add some unittests to check that icmp_type and icmp_code are in the flows as expected?","commit_id":"43998b05c1bd44c6badb150f88a472eb37c700a1"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"32679b7e3cc4016ae6e59f04db0f5e2205f00b01","unresolved":false,"context_lines":[{"line_number":87,"context_line":"    return flow_template"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"def create_protocol_flows(direction, flow_template, port, rule):"},{"line_number":91,"context_line":"    flow_template \u003d populate_flow_common(direction,"},{"line_number":92,"context_line":"                                         flow_template.copy(),"},{"line_number":93,"context_line":"                                         port)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f436f4f_2b91274f","line":90,"range":{"start_line":90,"start_character":4,"end_line":90,"end_character":25},"in_reply_to":"df3967d1_c8d3985f","updated":"2017-08-14 01:47:53.000000000","message":"Done","commit_id":"43998b05c1bd44c6badb150f88a472eb37c700a1"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"d1345b00bb6b08a7aae10a741f9b18324d1b0ad1","unresolved":false,"context_lines":[{"line_number":100,"context_line":"            flow_template[\u0027nw_proto\u0027] \u003d n_consts.IP_PROTOCOL_MAP.get("},{"line_number":101,"context_line":"                protocol, protocol)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    if protocol in [n_consts.PROTO_NAME_ICMP, n_consts.PROTO_NAME_IPV6_ICMP,"},{"line_number":104,"context_line":"                    n_consts.PROTO_NAME_IPV6_ICMP_LEGACY]:"},{"line_number":105,"context_line":"        flows \u003d create_icmp_flows(flow_template, rule)"},{"line_number":106,"context_line":"    else:"},{"line_number":107,"context_line":"        flows \u003d create_port_range_flows(flow_template, rule)"}],"source_content_type":"text/x-python","patch_set":3,"id":"df3967d1_a8ef341c","line":104,"range":{"start_line":103,"start_character":19,"end_line":104,"end_character":57},"updated":"2017-08-04 08:35:06.000000000","message":"Consider creating a constant at the module level to avoid creating a list per function call.","commit_id":"43998b05c1bd44c6badb150f88a472eb37c700a1"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"32679b7e3cc4016ae6e59f04db0f5e2205f00b01","unresolved":false,"context_lines":[{"line_number":100,"context_line":"            flow_template[\u0027nw_proto\u0027] \u003d n_consts.IP_PROTOCOL_MAP.get("},{"line_number":101,"context_line":"                protocol, protocol)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    if protocol in [n_consts.PROTO_NAME_ICMP, n_consts.PROTO_NAME_IPV6_ICMP,"},{"line_number":104,"context_line":"                    n_consts.PROTO_NAME_IPV6_ICMP_LEGACY]:"},{"line_number":105,"context_line":"        flows \u003d create_icmp_flows(flow_template, rule)"},{"line_number":106,"context_line":"    else:"},{"line_number":107,"context_line":"        flows \u003d create_port_range_flows(flow_template, rule)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f436f4f_abce377f","line":104,"range":{"start_line":103,"start_character":19,"end_line":104,"end_character":57},"in_reply_to":"df3967d1_a8ef341c","updated":"2017-08-14 01:47:53.000000000","message":"Tried that but that seems a bit slower, interestingly.\nAlso that would be less readable IMO.","commit_id":"43998b05c1bd44c6badb150f88a472eb37c700a1"}],"neutron/tests/unit/agent/linux/openvswitch_firewall/test_rules.py":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"a40659485a6cc3d7e41344f404a3ec92a2ca1e26","unresolved":false,"context_lines":[{"line_number":254,"context_line":"        self._test_create_protocol_flows_helper("},{"line_number":255,"context_line":"            firewall.EGRESS_DIRECTION, rule, expected_flows)"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"        rule2 \u003d {\u0027ethertype\u0027: constants.IPv6,"},{"line_number":258,"context_line":"                 \u0027protocol\u0027: constants.PROTO_NUM_IPV6_ICMP,"},{"line_number":259,"context_line":"                 \u0027port_range_min\u0027: 5,"},{"line_number":260,"context_line":"                 \u0027port_range_max\u0027: 0}"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f436f4f_153f90b4","line":257,"updated":"2017-08-14 14:23:42.000000000","message":"The setup of test is cheap, it\u0027s better to split into two cases so in case ipv4 one fails, you still get results for ipv6.","commit_id":"6a4d73938c8991c32ab92f69442488b03832d3db"}]}
