)]}'
{"neutron/agent/l3/agent.py":[{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"9eb229dc9b76f1076fac2ff3fcd0318ecf0bdec9","unresolved":false,"context_lines":[{"line_number":996,"context_line":"        \"\"\""},{"line_number":997,"context_line":"        net \u003d netaddr.IPNetwork(ip_cidr)"},{"line_number":998,"context_line":"        if net.version \u003d\u003d 6:"},{"line_number":999,"context_line":"            snat_idx \u003d abs(binascii.crc32(ip_cidr))"},{"line_number":1000,"context_line":"            # xor-fold the hash to reserve upper range to extend smaller values"},{"line_number":1001,"context_line":"            snat_idx \u003d (snat_idx \u003e\u003e 30) ^ (snat_idx \u0026 MASK_30)"},{"line_number":1002,"context_line":"            if snat_idx \u003c 32768:"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a961159_eb31310c","line":999,"updated":"2014-12-18 03:17:09.000000000","message":"I think you want:\n\nsnat_idx \u003d binascii.crc32(ip_cidr) \u0026 0xffffffff\n\nMainly because it seems we want to avoid any problems when we upgrade to python3.\n\nSee https://docs.python.org/2/library/binascii.html#binascii.crc32","commit_id":"6d082e53556d21aecaacc9f9506e8a61d30e6a4c"},{"author":{"_account_id":9077,"name":"Rajeev Grover","email":"rgrover687@gmail.com","username":"rajeev"},"change_message_id":"40fd9b41d65b8380072615ebb2156bca64aa8af5","unresolved":false,"context_lines":[{"line_number":996,"context_line":"        \"\"\""},{"line_number":997,"context_line":"        net \u003d netaddr.IPNetwork(ip_cidr)"},{"line_number":998,"context_line":"        if net.version \u003d\u003d 6:"},{"line_number":999,"context_line":"            snat_idx \u003d abs(binascii.crc32(ip_cidr))"},{"line_number":1000,"context_line":"            # xor-fold the hash to reserve upper range to extend smaller values"},{"line_number":1001,"context_line":"            snat_idx \u003d (snat_idx \u003e\u003e 30) ^ (snat_idx \u0026 MASK_30)"},{"line_number":1002,"context_line":"            if snat_idx \u003c 32768:"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a961159_64be3901","line":999,"in_reply_to":"3a961159_eb31310c","updated":"2014-12-18 17:20:08.000000000","message":"Done","commit_id":"6d082e53556d21aecaacc9f9506e8a61d30e6a4c"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"ef0a4906e73bd844bf789443dd5f60c844a7912f","unresolved":false,"context_lines":[{"line_number":1008,"context_line":"        \"\"\""},{"line_number":1009,"context_line":"        net \u003d netaddr.IPNetwork(ip_cidr)"},{"line_number":1010,"context_line":"        if net.version \u003d\u003d 6:"},{"line_number":1011,"context_line":"            # the crc32 is \u0026 0xffffffff for Python 2.6 and 3.0 compatibility"},{"line_number":1012,"context_line":"            snat_idx \u003d binascii.crc32(ip_cidr) \u0026 0xffffffff"},{"line_number":1013,"context_line":"            # xor-fold the hash to reserve upper range to extend smaller values"},{"line_number":1014,"context_line":"            snat_idx \u003d (snat_idx \u003e\u003e 30) ^ (snat_idx \u0026 MASK_30)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a961159_82a78ea6","line":1011,"updated":"2014-12-18 21:28:37.000000000","message":"nit: s/the crc32 is \u0026 0xffffffff/the crc32 \u0026 0xffffffff is/","commit_id":"8b0c36f324c90de86e50969285a1fc336c09e6d6"},{"author":{"_account_id":9077,"name":"Rajeev Grover","email":"rgrover687@gmail.com","username":"rajeev"},"change_message_id":"07d2a1836fcca5cf91c8b0d007c291d45d3b1c93","unresolved":false,"context_lines":[{"line_number":1008,"context_line":"        \"\"\""},{"line_number":1009,"context_line":"        net \u003d netaddr.IPNetwork(ip_cidr)"},{"line_number":1010,"context_line":"        if net.version \u003d\u003d 6:"},{"line_number":1011,"context_line":"            # the crc32 is \u0026 0xffffffff for Python 2.6 and 3.0 compatibility"},{"line_number":1012,"context_line":"            snat_idx \u003d binascii.crc32(ip_cidr) \u0026 0xffffffff"},{"line_number":1013,"context_line":"            # xor-fold the hash to reserve upper range to extend smaller values"},{"line_number":1014,"context_line":"            snat_idx \u003d (snat_idx \u003e\u003e 30) ^ (snat_idx \u0026 MASK_30)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a961159_ae38ded3","line":1011,"in_reply_to":"3a961159_82a78ea6","updated":"2014-12-19 15:26:20.000000000","message":"Done","commit_id":"8b0c36f324c90de86e50969285a1fc336c09e6d6"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"2812588205d1d2509fb61d0ed74e0cfa24cba07c","unresolved":false,"context_lines":[{"line_number":997,"context_line":"            floating_ips \u003d [i for i in floating_ips if i[\u0027host\u0027] \u003d\u003d self.host]"},{"line_number":998,"context_line":"        return floating_ips"},{"line_number":999,"context_line":""},{"line_number":1000,"context_line":"    def _get_snat_idx(self, ip_cidr):"},{"line_number":1001,"context_line":"        \"\"\"Generate index for DVR snat rules and route tables."},{"line_number":1002,"context_line":""},{"line_number":1003,"context_line":"        The index value has to be 32 bits or less but more than the system"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a961159_0ce00825","line":1000,"updated":"2015-01-06 23:28:45.000000000","message":"Given Mike\u0027s change just merged [1] this should now go in dvr.py.\n\n [1] https://review.openstack.org/#/c/142946/","commit_id":"468aa10d03928500623c7c192d7fe22f6bb68f29"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"57631a55192cff7f5847f1cac795c4ddd3e82de0","unresolved":false,"context_lines":[{"line_number":997,"context_line":"            floating_ips \u003d [i for i in floating_ips if i[\u0027host\u0027] \u003d\u003d self.host]"},{"line_number":998,"context_line":"        return floating_ips"},{"line_number":999,"context_line":""},{"line_number":1000,"context_line":"    def _get_snat_idx(self, ip_cidr):"},{"line_number":1001,"context_line":"        \"\"\"Generate index for DVR snat rules and route tables."},{"line_number":1002,"context_line":""},{"line_number":1003,"context_line":"        The index value has to be 32 bits or less but more than the system"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a961159_ac01b43a","line":1000,"in_reply_to":"3a961159_0ce00825","updated":"2015-01-06 23:49:40.000000000","message":"Yes, I have an update I\u0027ll push out soon, thanks Carl.","commit_id":"468aa10d03928500623c7c192d7fe22f6bb68f29"}],"neutron/agent/l3_agent.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"cc1bb4f7d31e295fc3e9c4435d8f5521feeb6c77","unresolved":false,"context_lines":[{"line_number":1278,"context_line":"        if net.version \u003d\u003d 6:"},{"line_number":1279,"context_line":"            snat_idx \u003d abs(binascii.crc32(ip_cidr))"},{"line_number":1280,"context_line":"            if snat_idx \u003c 32768:"},{"line_number":1281,"context_line":"                snat_idx \u003d snat_idx + 32768"},{"line_number":1282,"context_line":"            LOG.debug(\u0027IPv6: snat_idx is %s\u0027, snat_idx)"},{"line_number":1283,"context_line":"        else:"},{"line_number":1284,"context_line":"            snat_idx \u003d net.value"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_6776f7a5","line":1281,"updated":"2014-11-16 14:57:50.000000000","message":"could this not conflicts with a value for another cidr?\ndoes this value need to be unique? if so then there are certain addresses that will not be unqiue","commit_id":"e744f13d3f8240bb9735de51065ae68ea48132b8"},{"author":{"_account_id":9077,"name":"Rajeev Grover","email":"rgrover687@gmail.com","username":"rajeev"},"change_message_id":"0ee96b413f65606f6998461cb3fac40c97f71510","unresolved":false,"context_lines":[{"line_number":1278,"context_line":"        if net.version \u003d\u003d 6:"},{"line_number":1279,"context_line":"            snat_idx \u003d abs(binascii.crc32(ip_cidr))"},{"line_number":1280,"context_line":"            if snat_idx \u003c 32768:"},{"line_number":1281,"context_line":"                snat_idx \u003d snat_idx + 32768"},{"line_number":1282,"context_line":"            LOG.debug(\u0027IPv6: snat_idx is %s\u0027, snat_idx)"},{"line_number":1283,"context_line":"        else:"},{"line_number":1284,"context_line":"            snat_idx \u003d net.value"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_8fe67e42","line":1281,"in_reply_to":"5a890539_6776f7a5","updated":"2014-11-17 18:32:59.000000000","message":"Since the number of interfaces on a router is very small the likelihood of a conflict would be very low. Another option is to use a 30 bit hash normally and then set the 31st bit for \u003c 32768. Let me know if you have any thoughts, thanks for a careful read.","commit_id":"e744f13d3f8240bb9735de51065ae68ea48132b8"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"change_message_id":"e12b05729dac763b2c9e694c46eb58bcf3e94c98","unresolved":false,"context_lines":[{"line_number":1275,"context_line":""},{"line_number":1276,"context_line":"    def _get_snat_idx(self, ip_cidr):"},{"line_number":1277,"context_line":"        net \u003d netaddr.IPNetwork(ip_cidr)"},{"line_number":1278,"context_line":"        if net.version \u003d\u003d 6:"},{"line_number":1279,"context_line":"            MASK_30 \u003d 0x3fffffff"},{"line_number":1280,"context_line":"            snat_idx \u003d abs(binascii.crc32(ip_cidr))"},{"line_number":1281,"context_line":"            snat_idx \u003d (snat_idx \u003e\u003e 30) ^ (snat_idx \u0026 MASK_30)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a890539_c5cd6288","line":1278,"updated":"2014-11-20 06:03:30.000000000","message":"Since we don\u0027t support SNAT when subnet is iPv6, would it be better to do nothing when net.version\u003d\u003d6?","commit_id":"b164ed954e412f2f357a896f864cfb5bbab02c52"},{"author":{"_account_id":9077,"name":"Rajeev Grover","email":"rgrover687@gmail.com","username":"rajeev"},"change_message_id":"11c33eb39df7ddf952ee067f7bc8869f1edece01","unresolved":false,"context_lines":[{"line_number":1275,"context_line":""},{"line_number":1276,"context_line":"    def _get_snat_idx(self, ip_cidr):"},{"line_number":1277,"context_line":"        net \u003d netaddr.IPNetwork(ip_cidr)"},{"line_number":1278,"context_line":"        if net.version \u003d\u003d 6:"},{"line_number":1279,"context_line":"            MASK_30 \u003d 0x3fffffff"},{"line_number":1280,"context_line":"            snat_idx \u003d abs(binascii.crc32(ip_cidr))"},{"line_number":1281,"context_line":"            snat_idx \u003d (snat_idx \u003e\u003e 30) ^ (snat_idx \u0026 MASK_30)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a890539_e5b77ff3","line":1278,"in_reply_to":"5a890539_3caff495","updated":"2014-11-21 15:45:25.000000000","message":"Xu Han Peng: sure that sounds good. I will get in touch with you shortly.","commit_id":"b164ed954e412f2f357a896f864cfb5bbab02c52"},{"author":{"_account_id":9077,"name":"Rajeev Grover","email":"rgrover687@gmail.com","username":"rajeev"},"change_message_id":"79aa7d36e0be5782b21dfa24576683fa8ff0f266","unresolved":false,"context_lines":[{"line_number":1275,"context_line":""},{"line_number":1276,"context_line":"    def _get_snat_idx(self, ip_cidr):"},{"line_number":1277,"context_line":"        net \u003d netaddr.IPNetwork(ip_cidr)"},{"line_number":1278,"context_line":"        if net.version \u003d\u003d 6:"},{"line_number":1279,"context_line":"            MASK_30 \u003d 0x3fffffff"},{"line_number":1280,"context_line":"            snat_idx \u003d abs(binascii.crc32(ip_cidr))"},{"line_number":1281,"context_line":"            snat_idx \u003d (snat_idx \u003e\u003e 30) ^ (snat_idx \u0026 MASK_30)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a890539_ed522f34","line":1278,"in_reply_to":"5a890539_c5cd6288","updated":"2014-11-20 16:56:25.000000000","message":"Xu Han Peng: yes, this rule does not NAT but just forwards traffic to the Network Node so that traffic for the external network can be sent out through the same path as IPv4 default SNAT traffic but in case of IPv6 no NATing is done. Thanks for being a reviewer.","commit_id":"b164ed954e412f2f357a896f864cfb5bbab02c52"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"change_message_id":"b0c0bb2b82ece02341308320ccc205d8cba496cf","unresolved":false,"context_lines":[{"line_number":1275,"context_line":""},{"line_number":1276,"context_line":"    def _get_snat_idx(self, ip_cidr):"},{"line_number":1277,"context_line":"        net \u003d netaddr.IPNetwork(ip_cidr)"},{"line_number":1278,"context_line":"        if net.version \u003d\u003d 6:"},{"line_number":1279,"context_line":"            MASK_30 \u003d 0x3fffffff"},{"line_number":1280,"context_line":"            snat_idx \u003d abs(binascii.crc32(ip_cidr))"},{"line_number":1281,"context_line":"            snat_idx \u003d (snat_idx \u003e\u003e 30) ^ (snat_idx \u0026 MASK_30)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a890539_3caff495","line":1278,"in_reply_to":"5a890539_ed522f34","updated":"2014-11-21 06:57:35.000000000","message":"Thanks for the clarification. Robert and I are also working on some new ideas to make DVR work better for IPv6. It will be great if we can sync sometime.","commit_id":"b164ed954e412f2f357a896f864cfb5bbab02c52"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"c7efc088ef93691d89aa08818a7eb62579d2c49e","unresolved":false,"context_lines":[{"line_number":1276,"context_line":"    def _get_snat_idx(self, ip_cidr):"},{"line_number":1277,"context_line":"        net \u003d netaddr.IPNetwork(ip_cidr)"},{"line_number":1278,"context_line":"        if net.version \u003d\u003d 6:"},{"line_number":1279,"context_line":"            MASK_30 \u003d 0x3fffffff"},{"line_number":1280,"context_line":"            snat_idx \u003d abs(binascii.crc32(ip_cidr))"},{"line_number":1281,"context_line":"            snat_idx \u003d (snat_idx \u003e\u003e 30) ^ (snat_idx \u0026 MASK_30)"},{"line_number":1282,"context_line":"            if snat_idx \u003c 32768:"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a890539_b26cfa9d","line":1279,"updated":"2014-11-20 22:21:30.000000000","message":"Should you move this to the top of the file?\n\nAlso, can you give a description of what it\u0027s for and/or what the below is doing?  Maybe just a comment copied from the commit string.","commit_id":"b164ed954e412f2f357a896f864cfb5bbab02c52"},{"author":{"_account_id":9077,"name":"Rajeev Grover","email":"rgrover687@gmail.com","username":"rajeev"},"change_message_id":"215258dac84fc7e84d0ed328dc7426e236fc6cc1","unresolved":false,"context_lines":[{"line_number":1276,"context_line":"    def _get_snat_idx(self, ip_cidr):"},{"line_number":1277,"context_line":"        net \u003d netaddr.IPNetwork(ip_cidr)"},{"line_number":1278,"context_line":"        if net.version \u003d\u003d 6:"},{"line_number":1279,"context_line":"            MASK_30 \u003d 0x3fffffff"},{"line_number":1280,"context_line":"            snat_idx \u003d abs(binascii.crc32(ip_cidr))"},{"line_number":1281,"context_line":"            snat_idx \u003d (snat_idx \u003e\u003e 30) ^ (snat_idx \u0026 MASK_30)"},{"line_number":1282,"context_line":"            if snat_idx \u003c 32768:"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a890539_834b2e2a","line":1279,"in_reply_to":"5a890539_b26cfa9d","updated":"2014-11-21 00:10:44.000000000","message":"Done","commit_id":"b164ed954e412f2f357a896f864cfb5bbab02c52"},{"author":{"_account_id":6685,"name":"Baodong (Robert) Li","email":"baoli@cisco.com","username":"baoli"},"change_message_id":"77b1ad4835f6345e6cda3bdb1fb14917f8873d4a","unresolved":false,"context_lines":[{"line_number":1270,"context_line":"    cidr. For IPv6 generate a crc32 bit hash and xor-fold to 30 bits."},{"line_number":1271,"context_line":"    Use the freed range to extend smaller values so that they become"},{"line_number":1272,"context_line":"    greater than system generated entries."},{"line_number":1273,"context_line":"    \"\"\""},{"line_number":1274,"context_line":"        net \u003d netaddr.IPNetwork(ip_cidr)"},{"line_number":1275,"context_line":"        if net.version \u003d\u003d 6:"},{"line_number":1276,"context_line":"            snat_idx \u003d abs(binascii.crc32(ip_cidr))"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_78d82c53","line":1273,"updated":"2014-11-26 02:56:32.000000000","message":"Please fix the indentation","commit_id":"4777ae41b24b302be763590d916453b5dcea3415"},{"author":{"_account_id":9077,"name":"Rajeev Grover","email":"rgrover687@gmail.com","username":"rajeev"},"change_message_id":"df09723f0ec5a924c0526a7ec37b00fc1cd7f8ac","unresolved":false,"context_lines":[{"line_number":1270,"context_line":"    cidr. For IPv6 generate a crc32 bit hash and xor-fold to 30 bits."},{"line_number":1271,"context_line":"    Use the freed range to extend smaller values so that they become"},{"line_number":1272,"context_line":"    greater than system generated entries."},{"line_number":1273,"context_line":"    \"\"\""},{"line_number":1274,"context_line":"        net \u003d netaddr.IPNetwork(ip_cidr)"},{"line_number":1275,"context_line":"        if net.version \u003d\u003d 6:"},{"line_number":1276,"context_line":"            snat_idx \u003d abs(binascii.crc32(ip_cidr))"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_0ce26a2f","line":1273,"in_reply_to":"5a890539_78d82c53","updated":"2014-11-26 20:19:20.000000000","message":"Done","commit_id":"4777ae41b24b302be763590d916453b5dcea3415"},{"author":{"_account_id":8253,"name":"Murali Birru","email":"mbirru@gmail.com","username":"muralibirru"},"change_message_id":"e588e14c9f348d38ac36c17303eafcd1484997ab","unresolved":false,"context_lines":[{"line_number":1488,"context_line":"    def _snat_redirect_remove(self, ri, sn_port, sn_int):"},{"line_number":1489,"context_line":"        \"\"\"Removes rules and routes for SNAT redirection.\"\"\""},{"line_number":1490,"context_line":"        try:"},{"line_number":1491,"context_line":"            snat_idx, net_version \u003d self._get_snat_idx(sn_port[\u0027ip_cidr\u0027])"},{"line_number":1492,"context_line":"            ns_ipr \u003d ip_lib.IpRule(self.root_helper, namespace\u003dri.ns_name)"},{"line_number":1493,"context_line":"            ns_ipd \u003d ip_lib.IPDevice(sn_int, self.root_helper,"},{"line_number":1494,"context_line":"                                     namespace\u003dri.ns_name)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_131a4718","line":1491,"updated":"2014-12-01 06:51:40.000000000","message":"does this _get_snat_idx() method verify for valid Ipv6 address. lets say if user enters linklocal address what is the behavior","commit_id":"0b52364e4d292124c70adb848278b89152215009"},{"author":{"_account_id":9077,"name":"Rajeev Grover","email":"rgrover687@gmail.com","username":"rajeev"},"change_message_id":"87b78c843ee4a8c3f6e5cf73f9b26e09c2c66d11","unresolved":false,"context_lines":[{"line_number":1488,"context_line":"    def _snat_redirect_remove(self, ri, sn_port, sn_int):"},{"line_number":1489,"context_line":"        \"\"\"Removes rules and routes for SNAT redirection.\"\"\""},{"line_number":1490,"context_line":"        try:"},{"line_number":1491,"context_line":"            snat_idx, net_version \u003d self._get_snat_idx(sn_port[\u0027ip_cidr\u0027])"},{"line_number":1492,"context_line":"            ns_ipr \u003d ip_lib.IpRule(self.root_helper, namespace\u003dri.ns_name)"},{"line_number":1493,"context_line":"            ns_ipd \u003d ip_lib.IPDevice(sn_int, self.root_helper,"},{"line_number":1494,"context_line":"                                     namespace\u003dri.ns_name)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_522d9ffc","line":1491,"in_reply_to":"5a890539_131a4718","updated":"2014-12-01 15:09:03.000000000","message":"Good to hear from you Murali!\nBy the time address is presented to this method validation should have already happened. It would be CLI or the REST API where the validation should/would take place.","commit_id":"0b52364e4d292124c70adb848278b89152215009"},{"author":{"_account_id":10971,"name":"Michael Smith","email":"michael.smith6@hp.com","username":"mrsmith"},"change_message_id":"de76b7c7a5b673f766afda0144fc0ff7627ba96b","unresolved":false,"context_lines":[{"line_number":1270,"context_line":"        else:"},{"line_number":1271,"context_line":"            snat_idx \u003d net.value"},{"line_number":1272,"context_line":"        return snat_idx, net.version"},{"line_number":1273,"context_line":""},{"line_number":1274,"context_line":"    def _map_internal_interfaces(self, ri, int_port, snat_ports):"},{"line_number":1275,"context_line":"        \"\"\"Return the SNAT port for the given internal interface port.\"\"\""},{"line_number":1276,"context_line":"        fixed_ip \u003d int_port[\u0027fixed_ips\u0027][0]"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_04b5caed","line":1273,"updated":"2014-12-08 17:12:56.000000000","message":"Why is net.version returned here?  I don\u0027t see it being used by callers.","commit_id":"30939ececa145ac74a5cac967f549744a0f0d98e"},{"author":{"_account_id":9077,"name":"Rajeev Grover","email":"rgrover687@gmail.com","username":"rajeev"},"change_message_id":"c71760d5e9056a2c7365aaab81b4dcb090995ea2","unresolved":false,"context_lines":[{"line_number":1270,"context_line":"        else:"},{"line_number":1271,"context_line":"            snat_idx \u003d net.value"},{"line_number":1272,"context_line":"        return snat_idx, net.version"},{"line_number":1273,"context_line":""},{"line_number":1274,"context_line":"    def _map_internal_interfaces(self, ri, int_port, snat_ports):"},{"line_number":1275,"context_line":"        \"\"\"Return the SNAT port for the given internal interface port.\"\"\""},{"line_number":1276,"context_line":"        fixed_ip \u003d int_port[\u0027fixed_ips\u0027][0]"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_1ab0be8a","line":1273,"in_reply_to":"3a961159_04b5caed","updated":"2014-12-08 19:38:41.000000000","message":"Yes, there is new code being added in the patch dependent on this patch to use the returned net.version for some of the iplib methods.","commit_id":"30939ececa145ac74a5cac967f549744a0f0d98e"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"3aa428181813a3fd8ac2d7873242e7199029c4f6","unresolved":false,"context_lines":[{"line_number":1270,"context_line":"        else:"},{"line_number":1271,"context_line":"            snat_idx \u003d net.value"},{"line_number":1272,"context_line":"        return snat_idx, net.version"},{"line_number":1273,"context_line":""},{"line_number":1274,"context_line":"    def _map_internal_interfaces(self, ri, int_port, snat_ports):"},{"line_number":1275,"context_line":"        \"\"\"Return the SNAT port for the given internal interface port.\"\"\""},{"line_number":1276,"context_line":"        fixed_ip \u003d int_port[\u0027fixed_ips\u0027][0]"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_1f7a45f1","line":1273,"in_reply_to":"3a961159_1ab0be8a","updated":"2014-12-09 19:51:57.000000000","message":"+1 to @Michael  This is obscure.  It is strange for a method called \"_get_snat_idx\" to return the IP version just because it had to calculate it internally and a caller might also want to know.  It is very strange behavior in the name of code-reuse.\n\nI think it would be more straight-forward to leave it out of this method and make the one caller who is interested in the version get it himself.","commit_id":"30939ececa145ac74a5cac967f549744a0f0d98e"}],"neutron/tests/unit/test_l3_agent.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"cc1bb4f7d31e295fc3e9c4435d8f5521feeb6c77","unresolved":false,"context_lines":[{"line_number":814,"context_line":"        ip_cidr \u003d \u0027101.12.13.14/24\u0027"},{"line_number":815,"context_line":"        agent \u003d l3_agent.L3NATAgent(HOSTNAME, self.conf)"},{"line_number":816,"context_line":"        snat_idx, version \u003d agent._get_snat_idx(ip_cidr)"},{"line_number":817,"context_line":"        self.assertEqual(snat_idx, 1695288590)"},{"line_number":818,"context_line":"        self.assertEqual(version, 4)"},{"line_number":819,"context_line":""},{"line_number":820,"context_line":"    def test__get_snat_idx_6(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_674fd76b","line":817,"updated":"2014-11-16 14:57:50.000000000","message":"expected values should be first","commit_id":"e744f13d3f8240bb9735de51065ae68ea48132b8"},{"author":{"_account_id":9077,"name":"Rajeev Grover","email":"rgrover687@gmail.com","username":"rajeev"},"change_message_id":"86ec11ddc12a40faf769c4a0803d3a6572a4011b","unresolved":false,"context_lines":[{"line_number":814,"context_line":"        ip_cidr \u003d \u0027101.12.13.14/24\u0027"},{"line_number":815,"context_line":"        agent \u003d l3_agent.L3NATAgent(HOSTNAME, self.conf)"},{"line_number":816,"context_line":"        snat_idx, version \u003d agent._get_snat_idx(ip_cidr)"},{"line_number":817,"context_line":"        self.assertEqual(snat_idx, 1695288590)"},{"line_number":818,"context_line":"        self.assertEqual(version, 4)"},{"line_number":819,"context_line":""},{"line_number":820,"context_line":"    def test__get_snat_idx_6(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_02297ce5","line":817,"in_reply_to":"5a890539_674fd76b","updated":"2014-11-18 00:31:31.000000000","message":"Done","commit_id":"e744f13d3f8240bb9735de51065ae68ea48132b8"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"cc1bb4f7d31e295fc3e9c4435d8f5521feeb6c77","unresolved":false,"context_lines":[{"line_number":821,"context_line":"        ip_cidr \u003d \u00272620:0:a03:e100:bd30:2665:7550:871b/64\u0027"},{"line_number":822,"context_line":"        agent \u003d l3_agent.L3NATAgent(HOSTNAME, self.conf)"},{"line_number":823,"context_line":"        snat_idx, version \u003d agent._get_snat_idx(ip_cidr)"},{"line_number":824,"context_line":"        self.assertEqual(snat_idx, 541026060)"},{"line_number":825,"context_line":"        self.assertEqual(version, 6)"},{"line_number":826,"context_line":""},{"line_number":827,"context_line":"    def test__map_internal_interfaces(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_a7553ffb","line":824,"updated":"2014-11-16 14:57:50.000000000","message":"what about the case when it is less than 32768?","commit_id":"e744f13d3f8240bb9735de51065ae68ea48132b8"},{"author":{"_account_id":9077,"name":"Rajeev Grover","email":"rgrover687@gmail.com","username":"rajeev"},"change_message_id":"86ec11ddc12a40faf769c4a0803d3a6572a4011b","unresolved":false,"context_lines":[{"line_number":821,"context_line":"        ip_cidr \u003d \u00272620:0:a03:e100:bd30:2665:7550:871b/64\u0027"},{"line_number":822,"context_line":"        agent \u003d l3_agent.L3NATAgent(HOSTNAME, self.conf)"},{"line_number":823,"context_line":"        snat_idx, version \u003d agent._get_snat_idx(ip_cidr)"},{"line_number":824,"context_line":"        self.assertEqual(snat_idx, 541026060)"},{"line_number":825,"context_line":"        self.assertEqual(version, 6)"},{"line_number":826,"context_line":""},{"line_number":827,"context_line":"    def test__map_internal_interfaces(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_0257bc58","line":824,"in_reply_to":"5a890539_a7553ffb","updated":"2014-11-18 00:31:31.000000000","message":"Added another test case to take care of this case in the next patch.","commit_id":"e744f13d3f8240bb9735de51065ae68ea48132b8"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"c7efc088ef93691d89aa08818a7eb62579d2c49e","unresolved":false,"context_lines":[{"line_number":814,"context_line":"        ip_cidr \u003d \u0027101.12.13.14/24\u0027"},{"line_number":815,"context_line":"        agent \u003d l3_agent.L3NATAgent(HOSTNAME, self.conf)"},{"line_number":816,"context_line":"        snat_idx, version \u003d agent._get_snat_idx(ip_cidr)"},{"line_number":817,"context_line":"        self.assertEqual(1695288590, snat_idx)"},{"line_number":818,"context_line":"        self.assertEqual(4, version)"},{"line_number":819,"context_line":""},{"line_number":820,"context_line":"    def test__get_snat_idx_6(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a890539_52867614","line":817,"updated":"2014-11-20 22:21:30.000000000","message":"I know this is the decimal representation of an inet_aton(101.12.13.14) but others might not.  Can you put the code here to calculate it instead of hard-coding it?  Or at least a comment since maybe using the same code as the l3-agent defeats the purpose of the test?","commit_id":"b164ed954e412f2f357a896f864cfb5bbab02c52"},{"author":{"_account_id":9077,"name":"Rajeev Grover","email":"rgrover687@gmail.com","username":"rajeev"},"change_message_id":"215258dac84fc7e84d0ed328dc7426e236fc6cc1","unresolved":false,"context_lines":[{"line_number":814,"context_line":"        ip_cidr \u003d \u0027101.12.13.14/24\u0027"},{"line_number":815,"context_line":"        agent \u003d l3_agent.L3NATAgent(HOSTNAME, self.conf)"},{"line_number":816,"context_line":"        snat_idx, version \u003d agent._get_snat_idx(ip_cidr)"},{"line_number":817,"context_line":"        self.assertEqual(1695288590, snat_idx)"},{"line_number":818,"context_line":"        self.assertEqual(4, version)"},{"line_number":819,"context_line":""},{"line_number":820,"context_line":"    def test__get_snat_idx_6(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a890539_c36c569f","line":817,"in_reply_to":"5a890539_52867614","updated":"2014-11-21 00:10:44.000000000","message":"sure, thanks for the suggestion.","commit_id":"b164ed954e412f2f357a896f864cfb5bbab02c52"},{"author":{"_account_id":6685,"name":"Baodong (Robert) Li","email":"baoli@cisco.com","username":"baoli"},"change_message_id":"77b1ad4835f6345e6cda3bdb1fb14917f8873d4a","unresolved":false,"context_lines":[{"line_number":812,"context_line":"                self.assertIn(r.rule, expected_rules)"},{"line_number":813,"context_line":""},{"line_number":814,"context_line":"    def test__get_snat_idx_4(self):"},{"line_number":815,"context_line":"        ip_cidr \u003d \u0027101.12.13.14/24\u0027"},{"line_number":816,"context_line":"        agent \u003d l3_agent.L3NATAgent(HOSTNAME, self.conf)"},{"line_number":817,"context_line":"        snat_idx, version \u003d agent._get_snat_idx(ip_cidr)"},{"line_number":818,"context_line":"        # 1695288590 is numerical value of 101.12.13.14"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_1891e8f0","line":815,"updated":"2014-11-26 02:56:32.000000000","message":"Would this be 101.12.13.0/24?","commit_id":"4777ae41b24b302be763590d916453b5dcea3415"},{"author":{"_account_id":9077,"name":"Rajeev Grover","email":"rgrover687@gmail.com","username":"rajeev"},"change_message_id":"df09723f0ec5a924c0526a7ec37b00fc1cd7f8ac","unresolved":false,"context_lines":[{"line_number":812,"context_line":"                self.assertIn(r.rule, expected_rules)"},{"line_number":813,"context_line":""},{"line_number":814,"context_line":"    def test__get_snat_idx_4(self):"},{"line_number":815,"context_line":"        ip_cidr \u003d \u0027101.12.13.14/24\u0027"},{"line_number":816,"context_line":"        agent \u003d l3_agent.L3NATAgent(HOSTNAME, self.conf)"},{"line_number":817,"context_line":"        snat_idx, version \u003d agent._get_snat_idx(ip_cidr)"},{"line_number":818,"context_line":"        # 1695288590 is numerical value of 101.12.13.14"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_ecb6fe3d","line":815,"in_reply_to":"5a890539_1891e8f0","updated":"2014-11-26 20:19:20.000000000","message":"Done","commit_id":"4777ae41b24b302be763590d916453b5dcea3415"},{"author":{"_account_id":6685,"name":"Baodong (Robert) Li","email":"baoli@cisco.com","username":"baoli"},"change_message_id":"77b1ad4835f6345e6cda3bdb1fb14917f8873d4a","unresolved":false,"context_lines":[{"line_number":820,"context_line":"        self.assertEqual(4, version)"},{"line_number":821,"context_line":""},{"line_number":822,"context_line":"    def test__get_snat_idx_6(self):"},{"line_number":823,"context_line":"        ip_cidr \u003d \u00272620:0:a03:e100:bd30:2665:7550:871b/64\u0027"},{"line_number":824,"context_line":"        agent \u003d l3_agent.L3NATAgent(HOSTNAME, self.conf)"},{"line_number":825,"context_line":"        snat_idx, version \u003d agent._get_snat_idx(ip_cidr)"},{"line_number":826,"context_line":"        # 541026060 is 30 bit xor folded crc32 of the ip_cidr"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_78658c43","line":823,"updated":"2014-11-26 02:56:32.000000000","message":"this is not a 64 bit prefix. It would be /128.","commit_id":"4777ae41b24b302be763590d916453b5dcea3415"},{"author":{"_account_id":9077,"name":"Rajeev Grover","email":"rgrover687@gmail.com","username":"rajeev"},"change_message_id":"df09723f0ec5a924c0526a7ec37b00fc1cd7f8ac","unresolved":false,"context_lines":[{"line_number":820,"context_line":"        self.assertEqual(4, version)"},{"line_number":821,"context_line":""},{"line_number":822,"context_line":"    def test__get_snat_idx_6(self):"},{"line_number":823,"context_line":"        ip_cidr \u003d \u00272620:0:a03:e100:bd30:2665:7550:871b/64\u0027"},{"line_number":824,"context_line":"        agent \u003d l3_agent.L3NATAgent(HOSTNAME, self.conf)"},{"line_number":825,"context_line":"        snat_idx, version \u003d agent._get_snat_idx(ip_cidr)"},{"line_number":826,"context_line":"        # 541026060 is 30 bit xor folded crc32 of the ip_cidr"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_ece43e3e","line":823,"in_reply_to":"5a890539_78658c43","updated":"2014-11-26 20:19:20.000000000","message":"Done","commit_id":"4777ae41b24b302be763590d916453b5dcea3415"},{"author":{"_account_id":6685,"name":"Baodong (Robert) Li","email":"baoli@cisco.com","username":"baoli"},"change_message_id":"645295d7355331a0d70af32fe7b8aab352086844","unresolved":false,"context_lines":[{"line_number":807,"context_line":"            else:"},{"line_number":808,"context_line":"                self.assertIn(r.rule, expected_rules)"},{"line_number":809,"context_line":""},{"line_number":810,"context_line":"    def test__get_snat_idx_4(self):"},{"line_number":811,"context_line":"        ip_cidr \u003d \u0027101.12.13.00/24\u0027"},{"line_number":812,"context_line":"        agent \u003d l3_agent.L3NATAgent(HOSTNAME, self.conf)"},{"line_number":813,"context_line":"        snat_idx, version \u003d agent._get_snat_idx(ip_cidr)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_abfaee40","line":810,"updated":"2014-11-28 15:17:33.000000000","message":"Can we use the same naming convention as other test cases?\n\n4 --\u003e ipv4","commit_id":"0b52364e4d292124c70adb848278b89152215009"},{"author":{"_account_id":9077,"name":"Rajeev Grover","email":"rgrover687@gmail.com","username":"rajeev"},"change_message_id":"dbddd1c9a48d8bd637c5402adf301573f4856dc1","unresolved":false,"context_lines":[{"line_number":807,"context_line":"            else:"},{"line_number":808,"context_line":"                self.assertIn(r.rule, expected_rules)"},{"line_number":809,"context_line":""},{"line_number":810,"context_line":"    def test__get_snat_idx_4(self):"},{"line_number":811,"context_line":"        ip_cidr \u003d \u0027101.12.13.00/24\u0027"},{"line_number":812,"context_line":"        agent \u003d l3_agent.L3NATAgent(HOSTNAME, self.conf)"},{"line_number":813,"context_line":"        snat_idx, version \u003d agent._get_snat_idx(ip_cidr)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_e62a3be6","line":810,"in_reply_to":"5a890539_abfaee40","updated":"2014-12-01 23:57:51.000000000","message":"Done","commit_id":"0b52364e4d292124c70adb848278b89152215009"},{"author":{"_account_id":6685,"name":"Baodong (Robert) Li","email":"baoli@cisco.com","username":"baoli"},"change_message_id":"645295d7355331a0d70af32fe7b8aab352086844","unresolved":false,"context_lines":[{"line_number":815,"context_line":"        self.assertEqual(1695288576, snat_idx)"},{"line_number":816,"context_line":"        self.assertEqual(4, version)"},{"line_number":817,"context_line":""},{"line_number":818,"context_line":"    def test__get_snat_idx_6(self):"},{"line_number":819,"context_line":"        ip_cidr \u003d \u00272620:0:a03:e100::/64\u0027"},{"line_number":820,"context_line":"        agent \u003d l3_agent.L3NATAgent(HOSTNAME, self.conf)"},{"line_number":821,"context_line":"        snat_idx, version \u003d agent._get_snat_idx(ip_cidr)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_cbe01a99","line":818,"updated":"2014-11-28 15:17:33.000000000","message":"6 --\u003e ipv6","commit_id":"0b52364e4d292124c70adb848278b89152215009"},{"author":{"_account_id":9077,"name":"Rajeev Grover","email":"rgrover687@gmail.com","username":"rajeev"},"change_message_id":"dbddd1c9a48d8bd637c5402adf301573f4856dc1","unresolved":false,"context_lines":[{"line_number":815,"context_line":"        self.assertEqual(1695288576, snat_idx)"},{"line_number":816,"context_line":"        self.assertEqual(4, version)"},{"line_number":817,"context_line":""},{"line_number":818,"context_line":"    def test__get_snat_idx_6(self):"},{"line_number":819,"context_line":"        ip_cidr \u003d \u00272620:0:a03:e100::/64\u0027"},{"line_number":820,"context_line":"        agent \u003d l3_agent.L3NATAgent(HOSTNAME, self.conf)"},{"line_number":821,"context_line":"        snat_idx, version \u003d agent._get_snat_idx(ip_cidr)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_062e67fa","line":818,"in_reply_to":"5a890539_cbe01a99","updated":"2014-12-01 23:57:51.000000000","message":"Done","commit_id":"0b52364e4d292124c70adb848278b89152215009"},{"author":{"_account_id":6685,"name":"Baodong (Robert) Li","email":"baoli@cisco.com","username":"baoli"},"change_message_id":"645295d7355331a0d70af32fe7b8aab352086844","unresolved":false,"context_lines":[{"line_number":823,"context_line":"        self.assertEqual(1026840325, snat_idx)"},{"line_number":824,"context_line":"        self.assertEqual(6, version)"},{"line_number":825,"context_line":""},{"line_number":826,"context_line":"    def test__get_snat_idx_6_below_32768(self):"},{"line_number":827,"context_line":"        ip_cidr \u003d \u0027fdcf::/62\u0027"},{"line_number":828,"context_line":"        # crc32 of this ip_cidr is 32460"},{"line_number":829,"context_line":"        agent \u003d l3_agent.L3NATAgent(HOSTNAME, self.conf)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_ebecf694","line":826,"updated":"2014-11-28 15:17:33.000000000","message":"6 --\u003e ipv6","commit_id":"0b52364e4d292124c70adb848278b89152215009"},{"author":{"_account_id":9077,"name":"Rajeev Grover","email":"rgrover687@gmail.com","username":"rajeev"},"change_message_id":"dbddd1c9a48d8bd637c5402adf301573f4856dc1","unresolved":false,"context_lines":[{"line_number":823,"context_line":"        self.assertEqual(1026840325, snat_idx)"},{"line_number":824,"context_line":"        self.assertEqual(6, version)"},{"line_number":825,"context_line":""},{"line_number":826,"context_line":"    def test__get_snat_idx_6_below_32768(self):"},{"line_number":827,"context_line":"        ip_cidr \u003d \u0027fdcf::/62\u0027"},{"line_number":828,"context_line":"        # crc32 of this ip_cidr is 32460"},{"line_number":829,"context_line":"        agent \u003d l3_agent.L3NATAgent(HOSTNAME, self.conf)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_26352346","line":826,"in_reply_to":"5a890539_ebecf694","updated":"2014-12-01 23:57:51.000000000","message":"Done","commit_id":"0b52364e4d292124c70adb848278b89152215009"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5d3704c1ae5de122f533b30b6d5bbbbbbe2676dc","unresolved":false,"context_lines":[{"line_number":811,"context_line":"        ip_cidr \u003d \u0027101.12.13.00/24\u0027"},{"line_number":812,"context_line":"        agent \u003d l3_agent.L3NATAgent(HOSTNAME, self.conf)"},{"line_number":813,"context_line":"        snat_idx, version \u003d agent._get_snat_idx(ip_cidr)"},{"line_number":814,"context_line":"        # 1695288590 is numerical value of 101.12.13.14"},{"line_number":815,"context_line":"        self.assertEqual(1695288576, snat_idx)"},{"line_number":816,"context_line":"        self.assertEqual(4, version)"},{"line_number":817,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"5a890539_5762dad9","line":814,"updated":"2014-12-02 02:25:24.000000000","message":"This comment isn\u0027t correct any more, should be:\n\n1695288576 is numerical value of 101.12.13.00","commit_id":"2b5d150af0be8ddc31699a8ae5aa7fc9246c52d3"},{"author":{"_account_id":9077,"name":"Rajeev Grover","email":"rgrover687@gmail.com","username":"rajeev"},"change_message_id":"56a93af02d40dc96c7bcb0004e82c0abda3cdcec","unresolved":false,"context_lines":[{"line_number":811,"context_line":"        ip_cidr \u003d \u0027101.12.13.00/24\u0027"},{"line_number":812,"context_line":"        agent \u003d l3_agent.L3NATAgent(HOSTNAME, self.conf)"},{"line_number":813,"context_line":"        snat_idx, version \u003d agent._get_snat_idx(ip_cidr)"},{"line_number":814,"context_line":"        # 1695288590 is numerical value of 101.12.13.14"},{"line_number":815,"context_line":"        self.assertEqual(1695288576, snat_idx)"},{"line_number":816,"context_line":"        self.assertEqual(4, version)"},{"line_number":817,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"5a890539_173d9cdd","line":814,"in_reply_to":"5a890539_5762dad9","updated":"2014-12-02 16:01:01.000000000","message":"Done","commit_id":"2b5d150af0be8ddc31699a8ae5aa7fc9246c52d3"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"b9083670c042fd4b43953241668332ad67bb6b68","unresolved":false,"context_lines":[{"line_number":669,"context_line":"        ip_cidr \u003d \u00272620:0:a03:e100::/64\u0027"},{"line_number":670,"context_line":"        agent \u003d l3_agent.L3NATAgent(HOSTNAME, self.conf)"},{"line_number":671,"context_line":"        snat_idx \u003d agent._get_snat_idx(ip_cidr)"},{"line_number":672,"context_line":"        # 541026060 is 30 bit xor folded crc32 of the ip_cidr"},{"line_number":673,"context_line":"        self.assertEqual(1026840325, snat_idx)"},{"line_number":674,"context_line":""},{"line_number":675,"context_line":"    def test__get_snat_idx_ipv6_below_32768(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_fb7a42b8","line":672,"updated":"2014-12-15 16:17:48.000000000","message":"nit: this comment doesn\u0027t match the code any more","commit_id":"e9c3409601233432498c76a6a72153dd04026851"},{"author":{"_account_id":9077,"name":"Rajeev Grover","email":"rgrover687@gmail.com","username":"rajeev"},"change_message_id":"95fda6c355baac31494ab82eed64031bebc917fb","unresolved":false,"context_lines":[{"line_number":669,"context_line":"        ip_cidr \u003d \u00272620:0:a03:e100::/64\u0027"},{"line_number":670,"context_line":"        agent \u003d l3_agent.L3NATAgent(HOSTNAME, self.conf)"},{"line_number":671,"context_line":"        snat_idx \u003d agent._get_snat_idx(ip_cidr)"},{"line_number":672,"context_line":"        # 541026060 is 30 bit xor folded crc32 of the ip_cidr"},{"line_number":673,"context_line":"        self.assertEqual(1026840325, snat_idx)"},{"line_number":674,"context_line":""},{"line_number":675,"context_line":"    def test__get_snat_idx_ipv6_below_32768(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_a90a2a25","line":672,"in_reply_to":"3a961159_fb7a42b8","updated":"2014-12-15 22:20:07.000000000","message":"Done","commit_id":"e9c3409601233432498c76a6a72153dd04026851"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"9c49244762168ab3d642d7c01acdcac27ad89523","unresolved":false,"context_lines":[{"line_number":680,"context_line":"        # crc32 of this ip_cidr is 32460"},{"line_number":681,"context_line":"        agent \u003d l3_agent.L3NATAgent(HOSTNAME, self.conf)"},{"line_number":682,"context_line":"        snat_idx \u003d agent._get_snat_idx(ip_cidr)"},{"line_number":683,"context_line":"        # 32460 + 0x3FFFFFFF \u003d 1073774283"},{"line_number":684,"context_line":"        self.assertEqual(1073709367, snat_idx)"},{"line_number":685,"context_line":""},{"line_number":686,"context_line":"    def test__map_internal_interfaces(self):"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_d2b21695","line":683,"updated":"2015-01-07 00:35:36.000000000","message":"Hmm, somehow this comment is wrong again","commit_id":"c877de5c4e68c4834b73cc7ae294a3925bd39fd1"}]}
