)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"ee9fcfd4102d4d37ce46a8469c620c2bf6714d63","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Add support for IPv6 in portsec"},{"line_number":10,"context_line":"Partially-implements: blueprint ipv6"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I4d6988b96fc8efd4ea07180535b1a4ceba22eefe"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1f013ff3_ef83b255","line":12,"updated":"2017-05-16 06:48:14.000000000","message":"Add: Closes-Bug: 1667365","commit_id":"2dd600f4a9a38f079e5bcd6840eaca7b13d7046d"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"6654a6206f714b6b9e09063d0185890b2a5c5218","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Add support for IPv6 in portsec"},{"line_number":10,"context_line":"Partially-implements: blueprint ipv6"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I4d6988b96fc8efd4ea07180535b1a4ceba22eefe"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"ff0f0b1f_872837e2","line":12,"in_reply_to":"1f013ff3_ef83b255","updated":"2017-05-22 11:08:45.000000000","message":"Done","commit_id":"2dd600f4a9a38f079e5bcd6840eaca7b13d7046d"}],"dragonflow/controller/common/utils.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"92cc75fd1c18bc6f03725d1602913b488cc15649","unresolved":false,"context_lines":[{"line_number":93,"context_line":"    raise exceptions.InvalidEtherTypeException(ethertype\u003dethertype)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"def get_eth_type_from_ip(ip):"},{"line_number":97,"context_line":"    \"\"\""},{"line_number":98,"context_line":"    Returns the eth_type that should be matched to the received ip"},{"line_number":99,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7f231b9d_73830c06","line":96,"range":{"start_line":96,"start_character":25,"end_line":96,"end_character":27},"updated":"2017-06-11 07:29:06.000000000","message":"Maybe pass version and not the ip itself?","commit_id":"11ff1a2fcc5fbfc5a3c8e3bf095f77951fc4e3a0"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"2f990778b7bc7ffb3d9cb0667c50228e9b5d7485","unresolved":false,"context_lines":[{"line_number":93,"context_line":"    raise exceptions.InvalidEtherTypeException(ethertype\u003dethertype)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"def get_eth_type_from_ip(ip):"},{"line_number":97,"context_line":"    \"\"\""},{"line_number":98,"context_line":"    Returns the eth_type that should be matched to the received ip"},{"line_number":99,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7f231b9d_999fe9b3","line":96,"range":{"start_line":96,"start_character":25,"end_line":96,"end_character":27},"in_reply_to":"7f231b9d_73830c06","updated":"2017-06-11 15:30:32.000000000","message":"Done","commit_id":"11ff1a2fcc5fbfc5a3c8e3bf095f77951fc4e3a0"}],"dragonflow/controller/portsec_app.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"ee9fcfd4102d4d37ce46a8469c620c2bf6714d63","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from neutron_lib import constants as n_const"},{"line_number":18,"context_line":"from oslo_log import log"},{"line_number":19,"context_line":"from ryu.lib.packet import arp"},{"line_number":20,"context_line":"# from ryu.lib.packet import icmpv6"},{"line_number":21,"context_line":"from ryu.lib.packet import in_proto"},{"line_number":22,"context_line":"from ryu.ofproto import ether"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1f013ff3_efe85217","line":20,"range":{"start_line":20,"start_character":0,"end_line":20,"end_character":35},"updated":"2017-05-16 06:48:14.000000000","message":"Should be removed.","commit_id":"2dd600f4a9a38f079e5bcd6840eaca7b13d7046d"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"6654a6206f714b6b9e09063d0185890b2a5c5218","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from neutron_lib import constants as n_const"},{"line_number":18,"context_line":"from oslo_log import log"},{"line_number":19,"context_line":"from ryu.lib.packet import arp"},{"line_number":20,"context_line":"# from ryu.lib.packet import icmpv6"},{"line_number":21,"context_line":"from ryu.lib.packet import in_proto"},{"line_number":22,"context_line":"from ryu.ofproto import ether"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ff0f0b1f_0729c788","line":20,"range":{"start_line":20,"start_character":0,"end_line":20,"end_character":35},"in_reply_to":"1f013ff3_efe85217","updated":"2017-05-22 11:08:45.000000000","message":"Removed","commit_id":"2dd600f4a9a38f079e5bcd6840eaca7b13d7046d"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"ee9fcfd4102d4d37ce46a8469c620c2bf6714d63","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from ryu.ofproto import ether"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from dragonflow.controller.common import constants as const"},{"line_number":25,"context_line":"# from dragonflow.controller.commom import utils"},{"line_number":26,"context_line":"from dragonflow.controller import df_base_app"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1f013ff3_cfed9626","line":25,"range":{"start_line":25,"start_character":0,"end_line":25,"end_character":48},"updated":"2017-05-16 06:48:14.000000000","message":"Same here","commit_id":"2dd600f4a9a38f079e5bcd6840eaca7b13d7046d"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"ee9fcfd4102d4d37ce46a8469c620c2bf6714d63","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        return allowed_macs"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    @classmethod"},{"line_number":74,"context_line":"    def _get_eth_type(self, ip):"},{"line_number":75,"context_line":"        \"\"\""},{"line_number":76,"context_line":"        Returns the eth_type that should be matched to the received ip"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1f013ff3_cf3b569a","line":74,"range":{"start_line":73,"start_character":0,"end_line":74,"end_character":32},"updated":"2017-05-16 06:48:14.000000000","message":"nit: Can be made a module-level function.","commit_id":"2dd600f4a9a38f079e5bcd6840eaca7b13d7046d"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"6654a6206f714b6b9e09063d0185890b2a5c5218","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        return allowed_macs"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    @classmethod"},{"line_number":74,"context_line":"    def _get_eth_type(self, ip):"},{"line_number":75,"context_line":"        \"\"\""},{"line_number":76,"context_line":"        Returns the eth_type that should be matched to the received ip"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ff0f0b1f_27184b73","line":74,"range":{"start_line":73,"start_character":0,"end_line":74,"end_character":32},"in_reply_to":"1f013ff3_cf3b569a","updated":"2017-05-22 11:08:45.000000000","message":"Moved this entire method to utils. This can be used also in other places","commit_id":"2dd600f4a9a38f079e5bcd6840eaca7b13d7046d"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"ee9fcfd4102d4d37ce46a8469c620c2bf6714d63","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        :param ip IP in String format xxx.xxx.xxx.xxx"},{"line_number":79,"context_line":"        \"\"\""},{"line_number":80,"context_line":"        ip_version \u003d netaddr.IPAddress(ip).version"},{"line_number":81,"context_line":"        match_items \u003d {"},{"line_number":82,"context_line":"            (n_const.IP_VERSION_4): ether.ETH_TYPE_IP,"},{"line_number":83,"context_line":"            (n_const.IP_VERSION_6): ether.ETH_TYPE_IPV6"},{"line_number":84,"context_line":"        }"},{"line_number":85,"context_line":"        return match_items.get(ip_version)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f013ff3_8b8e4776","line":84,"range":{"start_line":81,"start_character":0,"end_line":84,"end_character":9},"updated":"2017-05-16 06:48:14.000000000","message":"nit: Can be made global","commit_id":"2dd600f4a9a38f079e5bcd6840eaca7b13d7046d"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"ee9fcfd4102d4d37ce46a8469c620c2bf6714d63","unresolved":false,"context_lines":[{"line_number":82,"context_line":"            (n_const.IP_VERSION_4): ether.ETH_TYPE_IP,"},{"line_number":83,"context_line":"            (n_const.IP_VERSION_6): ether.ETH_TYPE_IPV6"},{"line_number":84,"context_line":"        }"},{"line_number":85,"context_line":"        return match_items.get(ip_version)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    @classmethod"},{"line_number":88,"context_line":"    def _get_ip_address_match_item(self, ethertype):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f013ff3_0fbc9e03","line":85,"range":{"start_line":85,"start_character":0,"end_line":85,"end_character":42},"updated":"2017-05-16 06:48:14.000000000","message":"I think match_items[ip_version] would be better. This way it will throw an exception on unsupported versions.","commit_id":"2dd600f4a9a38f079e5bcd6840eaca7b13d7046d"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"6654a6206f714b6b9e09063d0185890b2a5c5218","unresolved":false,"context_lines":[{"line_number":82,"context_line":"            (n_const.IP_VERSION_4): ether.ETH_TYPE_IP,"},{"line_number":83,"context_line":"            (n_const.IP_VERSION_6): ether.ETH_TYPE_IPV6"},{"line_number":84,"context_line":"        }"},{"line_number":85,"context_line":"        return match_items.get(ip_version)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    @classmethod"},{"line_number":88,"context_line":"    def _get_ip_address_match_item(self, ethertype):"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff0f0b1f_2cd6f2f2","line":85,"range":{"start_line":85,"start_character":0,"end_line":85,"end_character":42},"in_reply_to":"1f013ff3_0fbc9e03","updated":"2017-05-22 11:08:45.000000000","message":"Fixed","commit_id":"2dd600f4a9a38f079e5bcd6840eaca7b13d7046d"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"ee9fcfd4102d4d37ce46a8469c620c2bf6714d63","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        }"},{"line_number":85,"context_line":"        return match_items.get(ip_version)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    @classmethod"},{"line_number":88,"context_line":"    def _get_ip_address_match_item(self, ethertype):"},{"line_number":89,"context_line":"        \"\"\""},{"line_number":90,"context_line":"        Returns the match_item that should be matched in the flow"},{"line_number":91,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1f013ff3_4f47461f","line":88,"range":{"start_line":87,"start_character":0,"end_line":88,"end_character":52},"updated":"2017-05-16 06:48:14.000000000","message":"nit: Can be made a module-level function","commit_id":"2dd600f4a9a38f079e5bcd6840eaca7b13d7046d"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"6654a6206f714b6b9e09063d0185890b2a5c5218","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        }"},{"line_number":85,"context_line":"        return match_items.get(ip_version)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    @classmethod"},{"line_number":88,"context_line":"    def _get_ip_address_match_item(self, ethertype):"},{"line_number":89,"context_line":"        \"\"\""},{"line_number":90,"context_line":"        Returns the match_item that should be matched in the flow"},{"line_number":91,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ff0f0b1f_8c6dfe33","line":88,"range":{"start_line":87,"start_character":0,"end_line":88,"end_character":52},"in_reply_to":"1f013ff3_4f47461f","updated":"2017-05-22 11:08:45.000000000","message":"Done","commit_id":"2dd600f4a9a38f079e5bcd6840eaca7b13d7046d"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"ee9fcfd4102d4d37ce46a8469c620c2bf6714d63","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        :param ethertype: The ethernet type relevant to the flow {IPv4 | IPv6}"},{"line_number":93,"context_line":"        :param flow_direction: The fidirection of the flow {ingress | egress}"},{"line_number":94,"context_line":"        \"\"\""},{"line_number":95,"context_line":"        match_items \u003d {"},{"line_number":96,"context_line":"            (n_const.IPv4): \u0027ipv4_src\u0027,"},{"line_number":97,"context_line":"            (n_const.IPv6): \u0027ipv6_src\u0027"},{"line_number":98,"context_line":"        }"},{"line_number":99,"context_line":"        return match_items.get(ethertype)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def _get_ip_match_obj(self, unique_key, mac, ip\u003dNone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f013ff3_ab91039c","line":98,"range":{"start_line":95,"start_character":0,"end_line":98,"end_character":9},"updated":"2017-05-16 06:48:14.000000000","message":"nit: Can be made global","commit_id":"2dd600f4a9a38f079e5bcd6840eaca7b13d7046d"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"6654a6206f714b6b9e09063d0185890b2a5c5218","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        :param ethertype: The ethernet type relevant to the flow {IPv4 | IPv6}"},{"line_number":93,"context_line":"        :param flow_direction: The fidirection of the flow {ingress | egress}"},{"line_number":94,"context_line":"        \"\"\""},{"line_number":95,"context_line":"        match_items \u003d {"},{"line_number":96,"context_line":"            (n_const.IPv4): \u0027ipv4_src\u0027,"},{"line_number":97,"context_line":"            (n_const.IPv6): \u0027ipv6_src\u0027"},{"line_number":98,"context_line":"        }"},{"line_number":99,"context_line":"        return match_items.get(ethertype)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def _get_ip_match_obj(self, unique_key, mac, ip\u003dNone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff0f0b1f_8c04de4b","line":98,"range":{"start_line":95,"start_character":0,"end_line":98,"end_character":9},"in_reply_to":"1f013ff3_ab91039c","updated":"2017-05-22 11:08:45.000000000","message":"Making this global will require similar changes for the ipv4_dst/ipv6_dst/nw_dst param. \nIt might be better to do it for a different patch","commit_id":"2dd600f4a9a38f079e5bcd6840eaca7b13d7046d"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"ee9fcfd4102d4d37ce46a8469c620c2bf6714d63","unresolved":false,"context_lines":[{"line_number":101,"context_line":"    def _get_ip_match_obj(self, unique_key, mac, ip\u003dNone):"},{"line_number":102,"context_line":"        parser \u003d self.parser"},{"line_number":103,"context_line":"        ip_match_item \u003d self._get_ip_address_match_item(ip)"},{"line_number":104,"context_line":"        match_items \u003d {\u0027reg6\u0027: unique_key,"},{"line_number":105,"context_line":"                       \u0027eth_src\u0027: mac,"},{"line_number":106,"context_line":"                       \u0027eth_type\u0027: self._get_eth_type(ip)}"},{"line_number":107,"context_line":"        match_items[ip_match_item] \u003d ip"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        match \u003d parser.OFPMatch(**match_items)"},{"line_number":110,"context_line":"        return match"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f013ff3_cbd9ef83","line":107,"range":{"start_line":104,"start_character":8,"end_line":107,"end_character":39},"updated":"2017-05-16 06:48:14.000000000","message":"ip_match_item can be put directly into the initialiser:\nmatch_items \u003d {\u0027reg6\u0027: unique_key,\n               \u0027eth_src\u0027: mac,\n               \u0027eth_type\u0027: self._get_eth_type(ip),\n               ip_match_item: ip\n}","commit_id":"2dd600f4a9a38f079e5bcd6840eaca7b13d7046d"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"6654a6206f714b6b9e09063d0185890b2a5c5218","unresolved":false,"context_lines":[{"line_number":101,"context_line":"    def _get_ip_match_obj(self, unique_key, mac, ip\u003dNone):"},{"line_number":102,"context_line":"        parser \u003d self.parser"},{"line_number":103,"context_line":"        ip_match_item \u003d self._get_ip_address_match_item(ip)"},{"line_number":104,"context_line":"        match_items \u003d {\u0027reg6\u0027: unique_key,"},{"line_number":105,"context_line":"                       \u0027eth_src\u0027: mac,"},{"line_number":106,"context_line":"                       \u0027eth_type\u0027: self._get_eth_type(ip)}"},{"line_number":107,"context_line":"        match_items[ip_match_item] \u003d ip"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        match \u003d parser.OFPMatch(**match_items)"},{"line_number":110,"context_line":"        return match"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff0f0b1f_0c320e11","line":107,"range":{"start_line":104,"start_character":8,"end_line":107,"end_character":39},"in_reply_to":"1f013ff3_cbd9ef83","updated":"2017-05-22 11:08:45.000000000","message":"ip is not mandatory","commit_id":"2dd600f4a9a38f079e5bcd6840eaca7b13d7046d"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"9d3be8f8927a5f74359c51486ae87495fe904a1e","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    def _get_ip_address_match_item(self, ip_version):"},{"line_number":74,"context_line":"        \"\"\""},{"line_number":75,"context_line":"        Returns the match_item that should be matched in the flow"},{"line_number":76,"context_line":"        :param ethertype: The ethernet type relevant to the flow {IPv4 | IPv6}"},{"line_number":77,"context_line":"        \"\"\""},{"line_number":78,"context_line":"        match_items \u003d {"},{"line_number":79,"context_line":"            (n_const.IP_VERSION_4): \u0027ipv4_src\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf091321_5a623f40","line":76,"range":{"start_line":76,"start_character":15,"end_line":76,"end_character":24},"updated":"2017-06-09 01:50:28.000000000","message":"ip_version?","commit_id":"11ff1a2fcc5fbfc5a3c8e3bf095f77951fc4e3a0"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"2f990778b7bc7ffb3d9cb0667c50228e9b5d7485","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    def _get_ip_address_match_item(self, ip_version):"},{"line_number":74,"context_line":"        \"\"\""},{"line_number":75,"context_line":"        Returns the match_item that should be matched in the flow"},{"line_number":76,"context_line":"        :param ethertype: The ethernet type relevant to the flow {IPv4 | IPv6}"},{"line_number":77,"context_line":"        \"\"\""},{"line_number":78,"context_line":"        match_items \u003d {"},{"line_number":79,"context_line":"            (n_const.IP_VERSION_4): \u0027ipv4_src\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f231b9d_f3f27c9a","line":76,"range":{"start_line":76,"start_character":15,"end_line":76,"end_character":24},"in_reply_to":"bf091321_5a623f40","updated":"2017-06-11 15:30:32.000000000","message":"Yes, fixed. Thanks","commit_id":"11ff1a2fcc5fbfc5a3c8e3bf095f77951fc4e3a0"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"9d3be8f8927a5f74359c51486ae87495fe904a1e","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        Returns the match_item that should be matched in the flow"},{"line_number":76,"context_line":"        :param ethertype: The ethernet type relevant to the flow {IPv4 | IPv6}"},{"line_number":77,"context_line":"        \"\"\""},{"line_number":78,"context_line":"        match_items \u003d {"},{"line_number":79,"context_line":"            (n_const.IP_VERSION_4): \u0027ipv4_src\u0027,"},{"line_number":80,"context_line":"            (n_const.IP_VERSION_6): \u0027ipv6_src\u0027"},{"line_number":81,"context_line":"        }"},{"line_number":82,"context_line":"        return match_items[ip_version]"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def _get_ip_match_obj(self, unique_key, mac, ip\u003dNone):"},{"line_number":85,"context_line":"        parser \u003d self.parser"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf091321_5af0ff67","line":82,"range":{"start_line":78,"start_character":0,"end_line":82,"end_character":38},"updated":"2017-06-09 01:50:28.000000000","message":"I think it could be a constant, maybe just reside in this module. The current implementation will create temporary variable in local scope every time the function is called.","commit_id":"11ff1a2fcc5fbfc5a3c8e3bf095f77951fc4e3a0"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"2f990778b7bc7ffb3d9cb0667c50228e9b5d7485","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        Returns the match_item that should be matched in the flow"},{"line_number":76,"context_line":"        :param ethertype: The ethernet type relevant to the flow {IPv4 | IPv6}"},{"line_number":77,"context_line":"        \"\"\""},{"line_number":78,"context_line":"        match_items \u003d {"},{"line_number":79,"context_line":"            (n_const.IP_VERSION_4): \u0027ipv4_src\u0027,"},{"line_number":80,"context_line":"            (n_const.IP_VERSION_6): \u0027ipv6_src\u0027"},{"line_number":81,"context_line":"        }"},{"line_number":82,"context_line":"        return match_items[ip_version]"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def _get_ip_match_obj(self, unique_key, mac, ip\u003dNone):"},{"line_number":85,"context_line":"        parser \u003d self.parser"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f231b9d_1e9f3f51","line":82,"range":{"start_line":78,"start_character":0,"end_line":82,"end_character":38},"in_reply_to":"bf091321_5af0ff67","updated":"2017-06-11 15:30:32.000000000","message":"Done","commit_id":"11ff1a2fcc5fbfc5a3c8e3bf095f77951fc4e3a0"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"92cc75fd1c18bc6f03725d1602913b488cc15649","unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def _get_ip_match_obj(self, unique_key, mac, ip\u003dNone):"},{"line_number":85,"context_line":"        parser \u003d self.parser"},{"line_number":86,"context_line":"        ip_version \u003d netaddr.IPAddress(ip).version"},{"line_number":87,"context_line":"        match_items \u003d {\u0027reg6\u0027: unique_key,"},{"line_number":88,"context_line":"                       \u0027eth_src\u0027: mac,"},{"line_number":89,"context_line":"                       \u0027eth_type\u0027: utils.get_eth_type_from_ip(ip)}"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f231b9d_d3b42038","line":86,"range":{"start_line":86,"start_character":0,"end_line":86,"end_character":50},"updated":"2017-06-11 07:29:06.000000000","message":"This line will fail if ip is None. Maybe remove the default or move ip_version construction into if block below?","commit_id":"11ff1a2fcc5fbfc5a3c8e3bf095f77951fc4e3a0"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"2f990778b7bc7ffb3d9cb0667c50228e9b5d7485","unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def _get_ip_match_obj(self, unique_key, mac, ip\u003dNone):"},{"line_number":85,"context_line":"        parser \u003d self.parser"},{"line_number":86,"context_line":"        ip_version \u003d netaddr.IPAddress(ip).version"},{"line_number":87,"context_line":"        match_items \u003d {\u0027reg6\u0027: unique_key,"},{"line_number":88,"context_line":"                       \u0027eth_src\u0027: mac,"},{"line_number":89,"context_line":"                       \u0027eth_type\u0027: utils.get_eth_type_from_ip(ip)}"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f231b9d_1e3bbf38","line":86,"range":{"start_line":86,"start_character":0,"end_line":86,"end_character":50},"in_reply_to":"7f231b9d_d3b42038","updated":"2017-06-11 15:30:32.000000000","message":"I\u0027ve moved it to the block below","commit_id":"11ff1a2fcc5fbfc5a3c8e3bf095f77951fc4e3a0"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"92cc75fd1c18bc6f03725d1602913b488cc15649","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        ip_version \u003d netaddr.IPAddress(ip).version"},{"line_number":87,"context_line":"        match_items \u003d {\u0027reg6\u0027: unique_key,"},{"line_number":88,"context_line":"                       \u0027eth_src\u0027: mac,"},{"line_number":89,"context_line":"                       \u0027eth_type\u0027: utils.get_eth_type_from_ip(ip)}"},{"line_number":90,"context_line":"        if ip:"},{"line_number":91,"context_line":"            ip_match_item \u003d self._get_ip_address_match_item(ip_version)"},{"line_number":92,"context_line":"            match_items[ip_match_item] \u003d ip"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f231b9d_53825051","line":89,"range":{"start_line":89,"start_character":0,"end_line":89,"end_character":66},"updated":"2017-06-11 07:29:06.000000000","message":"Same here re: ip may be None","commit_id":"11ff1a2fcc5fbfc5a3c8e3bf095f77951fc4e3a0"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"2f990778b7bc7ffb3d9cb0667c50228e9b5d7485","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        ip_version \u003d netaddr.IPAddress(ip).version"},{"line_number":87,"context_line":"        match_items \u003d {\u0027reg6\u0027: unique_key,"},{"line_number":88,"context_line":"                       \u0027eth_src\u0027: mac,"},{"line_number":89,"context_line":"                       \u0027eth_type\u0027: utils.get_eth_type_from_ip(ip)}"},{"line_number":90,"context_line":"        if ip:"},{"line_number":91,"context_line":"            ip_match_item \u003d self._get_ip_address_match_item(ip_version)"},{"line_number":92,"context_line":"            match_items[ip_match_item] \u003d ip"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f231b9d_fe47e3bb","line":89,"range":{"start_line":89,"start_character":0,"end_line":89,"end_character":66},"in_reply_to":"7f231b9d_53825051","updated":"2017-06-11 15:30:32.000000000","message":"Same (with default)","commit_id":"11ff1a2fcc5fbfc5a3c8e3bf095f77951fc4e3a0"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"9d3be8f8927a5f74359c51486ae87495fe904a1e","unresolved":false,"context_lines":[{"line_number":116,"context_line":"            \u0027ip_proto\u0027: in_proto.IPPROTO_ICMPV6"},{"line_number":117,"context_line":"        }"},{"line_number":118,"context_line":"        if ip:"},{"line_number":119,"context_line":"                matchdict[\u0027ipv6_src\u0027] \u003d ip"},{"line_number":120,"context_line":"        match \u003d parser.OFPMatch(**matchdict)"},{"line_number":121,"context_line":"        return match"},{"line_number":122,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"bf091321_3a19cbd6","line":119,"range":{"start_line":119,"start_character":0,"end_line":119,"end_character":42},"updated":"2017-06-09 01:50:28.000000000","message":"over indentation here.","commit_id":"11ff1a2fcc5fbfc5a3c8e3bf095f77951fc4e3a0"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"2f990778b7bc7ffb3d9cb0667c50228e9b5d7485","unresolved":false,"context_lines":[{"line_number":116,"context_line":"            \u0027ip_proto\u0027: in_proto.IPPROTO_ICMPV6"},{"line_number":117,"context_line":"        }"},{"line_number":118,"context_line":"        if ip:"},{"line_number":119,"context_line":"                matchdict[\u0027ipv6_src\u0027] \u003d ip"},{"line_number":120,"context_line":"        match \u003d parser.OFPMatch(**matchdict)"},{"line_number":121,"context_line":"        return match"},{"line_number":122,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7f231b9d_de4427ba","line":119,"range":{"start_line":119,"start_character":0,"end_line":119,"end_character":42},"in_reply_to":"bf091321_3a19cbd6","updated":"2017-06-11 15:30:32.000000000","message":"Done","commit_id":"11ff1a2fcc5fbfc5a3c8e3bf095f77951fc4e3a0"}],"dragonflow/tests/fullstack/test_apps.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"92cc75fd1c18bc6f03725d1602913b488cc15649","unresolved":false,"context_lines":[{"line_number":1688,"context_line":"        self.policy \u003d None"},{"line_number":1689,"context_line":"        self._ping \u003d None"},{"line_number":1690,"context_line":"        self.icmp_id_cursor \u003d int(time.mktime(time.gmtime())) \u0026 0xffff"},{"line_number":1691,"context_line":"        if not self.ethertype:"},{"line_number":1692,"context_line":"            self.ethertype \u003d n_const.IPv4"},{"line_number":1693,"context_line":"        if not self.cidr:"},{"line_number":1694,"context_line":"            self.cidr \u003d \"192.168.196.0/24\""}],"source_content_type":"text/x-python","patch_set":4,"id":"7f231b9d_539db057","line":1691,"range":{"start_line":1691,"start_character":0,"end_line":1691,"end_character":30},"updated":"2017-06-11 07:29:06.000000000","message":"I don\u0027t have a problem of an error be thrown if ethertype (etc.) does not exist.\n\nIn any case, this will raise an AttributeError if ethertype doesn\u0027t exist.","commit_id":"11ff1a2fcc5fbfc5a3c8e3bf095f77951fc4e3a0"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"2f990778b7bc7ffb3d9cb0667c50228e9b5d7485","unresolved":false,"context_lines":[{"line_number":1688,"context_line":"        self.policy \u003d None"},{"line_number":1689,"context_line":"        self._ping \u003d None"},{"line_number":1690,"context_line":"        self.icmp_id_cursor \u003d int(time.mktime(time.gmtime())) \u0026 0xffff"},{"line_number":1691,"context_line":"        if not self.ethertype:"},{"line_number":1692,"context_line":"            self.ethertype \u003d n_const.IPv4"},{"line_number":1693,"context_line":"        if not self.cidr:"},{"line_number":1694,"context_line":"            self.cidr \u003d \"192.168.196.0/24\""}],"source_content_type":"text/x-python","patch_set":4,"id":"7f231b9d_99880972","line":1691,"range":{"start_line":1691,"start_character":0,"end_line":1691,"end_character":30},"in_reply_to":"7f231b9d_539db057","updated":"2017-06-11 15:30:32.000000000","message":"I originally wanted to keep this class independent, not requiring external configuration. But since this is an internal test-only class I think that is not mandatory.\nI\u0027ll remove this section","commit_id":"11ff1a2fcc5fbfc5a3c8e3bf095f77951fc4e3a0"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"92cc75fd1c18bc6f03725d1602913b488cc15649","unresolved":false,"context_lines":[{"line_number":1695,"context_line":"        if not self.icmp_proto:"},{"line_number":1696,"context_line":"            self.icmp_proto \u003d \"icmp\""},{"line_number":1697,"context_line":"        if not self.ethtype:"},{"line_number":1698,"context_line":"            self.ethtype \u003d ryu.lib.packet.ethernet.ether.ETH_TYPE_IP"},{"line_number":1699,"context_line":"        try:"},{"line_number":1700,"context_line":"            self._init_topology()"},{"line_number":1701,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7f231b9d_139f3851","line":1698,"range":{"start_line":1698,"start_character":0,"end_line":1698,"end_character":68},"updated":"2017-06-11 07:29:06.000000000","message":"Why not construct this from ethertype, by default (e.g. using the new util function)?","commit_id":"11ff1a2fcc5fbfc5a3c8e3bf095f77951fc4e3a0"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"2f990778b7bc7ffb3d9cb0667c50228e9b5d7485","unresolved":false,"context_lines":[{"line_number":1695,"context_line":"        if not self.icmp_proto:"},{"line_number":1696,"context_line":"            self.icmp_proto \u003d \"icmp\""},{"line_number":1697,"context_line":"        if not self.ethtype:"},{"line_number":1698,"context_line":"            self.ethtype \u003d ryu.lib.packet.ethernet.ether.ETH_TYPE_IP"},{"line_number":1699,"context_line":"        try:"},{"line_number":1700,"context_line":"            self._init_topology()"},{"line_number":1701,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7f231b9d_797d2d6d","line":1698,"range":{"start_line":1698,"start_character":0,"end_line":1698,"end_character":68},"in_reply_to":"7f231b9d_139f3851","updated":"2017-06-11 15:30:32.000000000","message":"The subclasses already do it, in their setUp section.","commit_id":"11ff1a2fcc5fbfc5a3c8e3bf095f77951fc4e3a0"}]}
