)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"c3a7135115c744ff8b9b49e8c8175bd3ed35ffb0","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     sridhargaddam \u003csridhar.gaddam@enovance.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-10-23 16:29:05 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Cannot add router interface to IPv6 SLAAC network"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Neutron should allow an IPv6 subnet configured with SLAAC"},{"line_number":10,"context_line":"(or dhcpv6-stateless) to be attached to a router interface."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"9aa7fdbe_ae12a054","line":7,"updated":"2014-10-24 06:08:57.000000000","message":"I think that title should be different. Something like \"Allow to add...\" as this title is sound like a title for a bug.","commit_id":"7aac0336afa61daa02cde7cb470625c36bccecbe"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"c75b4f6df6127e33fc912661913487ae02f1b075","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     sridhargaddam \u003csridhar.gaddam@enovance.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-10-23 16:29:05 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Cannot add router interface to IPv6 SLAAC network"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Neutron should allow an IPv6 subnet configured with SLAAC"},{"line_number":10,"context_line":"(or dhcpv6-stateless) to be attached to a router interface."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"9aa7fdbe_faeb74d9","line":7,"in_reply_to":"9aa7fdbe_ae12a054","updated":"2014-10-24 15:49:50.000000000","message":"Done","commit_id":"7aac0336afa61daa02cde7cb470625c36bccecbe"},{"author":{"_account_id":4656,"name":"Sean M. Collins","email":"sean@coreitpro.com","username":"scollins"},"change_message_id":"bca1104d7027bff112d77b7cf1dc7e36676935d7","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Neutron should allow an IPv6 subnet configured with SLAAC"},{"line_number":10,"context_line":"(or dhcpv6-stateless) to be attached to a router interface."},{"line_number":11,"context_line":"Currently this is broken and this patch fixes the issue."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Closes-Bug: #1382076"},{"line_number":14,"context_line":"Change-Id: If0c48a7287a828eef4a0f0b0859d4f898d2937bd"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"9aa7fdbe_875a1528","line":11,"updated":"2014-10-24 15:06:29.000000000","message":"Probably can remove this line, in addition to Ann\u0027s suggestion. The patch fixing the issue is self-evident.","commit_id":"7aac0336afa61daa02cde7cb470625c36bccecbe"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"c75b4f6df6127e33fc912661913487ae02f1b075","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Neutron should allow an IPv6 subnet configured with SLAAC"},{"line_number":10,"context_line":"(or dhcpv6-stateless) to be attached to a router interface."},{"line_number":11,"context_line":"Currently this is broken and this patch fixes the issue."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Closes-Bug: #1382076"},{"line_number":14,"context_line":"Change-Id: If0c48a7287a828eef4a0f0b0859d4f898d2937bd"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"9aa7fdbe_7ab784f5","line":11,"in_reply_to":"9aa7fdbe_875a1528","updated":"2014-10-24 15:49:50.000000000","message":"Done","commit_id":"7aac0336afa61daa02cde7cb470625c36bccecbe"}],"neutron/common/ipv6_utils.py":[{"author":{"_account_id":6685,"name":"Baodong (Robert) Li","email":"baoli@cisco.com","username":"baoli"},"change_message_id":"ff9b0446f5d2209eb50723fe3b71d09778fdf383","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    return _IS_IPV6_ENABLED"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"def check_if_subnet_uses_eui64(subnet):"},{"line_number":68,"context_line":"    \"\"\"Check if ipv6 address will be calculated via EUI64.\"\"\""},{"line_number":69,"context_line":"    return (subnet[\u0027ipv6_address_mode\u0027] \u003d\u003d constants.IPV6_SLAAC"},{"line_number":70,"context_line":"            or subnet[\u0027ipv6_address_mode\u0027] \u003d\u003d constants.DHCPV6_STATELESS)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9aa7fdbe_440f7e2e","line":67,"updated":"2014-10-22 21:45:13.000000000","message":"I wonder if the name should be changed to:\n\n    is_slaac_subnet()\n\nThe reason is that reference to EUI64 in here doesn\u0027t seem to be appropriate, and the caller could actually use a different algorithm to come up with the IP addr.","commit_id":"d9620218631e23e22b75d96f223fdf68bc2339bc"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"6b544a0dd3fd6111e9a8ee4e26ad6f7bad6b99df","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    return _IS_IPV6_ENABLED"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"def check_if_subnet_uses_eui64(subnet):"},{"line_number":68,"context_line":"    \"\"\"Check if ipv6 address will be calculated via EUI64.\"\"\""},{"line_number":69,"context_line":"    return (subnet[\u0027ipv6_address_mode\u0027] \u003d\u003d constants.IPV6_SLAAC"},{"line_number":70,"context_line":"            or subnet[\u0027ipv6_address_mode\u0027] \u003d\u003d constants.DHCPV6_STATELESS)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9aa7fdbe_e2cf7827","line":67,"in_reply_to":"9aa7fdbe_440f7e2e","updated":"2014-10-23 10:00:09.000000000","message":"I agree. Will update it in my next patch.","commit_id":"d9620218631e23e22b75d96f223fdf68bc2339bc"},{"author":{"_account_id":6685,"name":"Baodong (Robert) Li","email":"baoli@cisco.com","username":"baoli"},"change_message_id":"6fc844721259ccb0a86b4f622ef4aa7777d7b345","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"def is_slaac_subnet(subnet):"},{"line_number":68,"context_line":"    \"\"\"Check if ipv6 address will be calculated via EUI64.\"\"\""},{"line_number":69,"context_line":"    return (subnet[\u0027ipv6_address_mode\u0027] \u003d\u003d constants.IPV6_SLAAC"},{"line_number":70,"context_line":"            or subnet[\u0027ipv6_address_mode\u0027] \u003d\u003d constants.DHCPV6_STATELESS)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_19394b41","line":68,"updated":"2014-10-23 12:45:54.000000000","message":"Nit. the comments should be updated as well.","commit_id":"bf3adfa68244bd5d4df66b8d6a6f86e80e92ceef"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"86e4ea3707a306f78aa6a3ed2f644ff448f22bc0","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"def is_slaac_subnet(subnet):"},{"line_number":68,"context_line":"    \"\"\"Check if ipv6 address will be calculated via EUI64.\"\"\""},{"line_number":69,"context_line":"    return (subnet[\u0027ipv6_address_mode\u0027] \u003d\u003d constants.IPV6_SLAAC"},{"line_number":70,"context_line":"            or subnet[\u0027ipv6_address_mode\u0027] \u003d\u003d constants.DHCPV6_STATELESS)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_3210e1a7","line":68,"in_reply_to":"9aa7fdbe_19394b41","updated":"2014-10-23 16:20:37.000000000","message":"Done","commit_id":"bf3adfa68244bd5d4df66b8d6a6f86e80e92ceef"}],"neutron/db/db_base_plugin_v2.py":[{"author":{"_account_id":6685,"name":"Baodong (Robert) Li","email":"baoli@cisco.com","username":"baoli"},"change_message_id":"f9be458f1c501f5b7e9a95fce355fe703eca634e","unresolved":false,"context_lines":[{"line_number":1094,"context_line":"                s[\u0027gateway_ip\u0027] \u003d str(netaddr.IPAddress(net.first + 1))"},{"line_number":1095,"context_line":""},{"line_number":1096,"context_line":"        if s[\u0027allocation_pools\u0027] \u003d\u003d attributes.ATTR_NOT_SPECIFIED:"},{"line_number":1097,"context_line":"            s[\u0027allocation_pools\u0027] \u003d self._allocate_pools_for_subnet(context, s)"},{"line_number":1098,"context_line":"        else:"},{"line_number":1099,"context_line":"            self._validate_allocation_pools(s[\u0027allocation_pools\u0027], s[\u0027cidr\u0027])"},{"line_number":1100,"context_line":"            if s[\u0027gateway_ip\u0027] is not None:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9aa7fdbe_37463c7d","line":1097,"updated":"2014-10-22 12:48:02.000000000","message":"pools are not usable for slaac. I suggested not to do this for SLAAC","commit_id":"bedd762b02c973dca605fb9bfafbc09d4ffc12c1"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"c612dd9d07b51dc21f71bf837d7f8093234adbb2","unresolved":false,"context_lines":[{"line_number":1094,"context_line":"                s[\u0027gateway_ip\u0027] \u003d str(netaddr.IPAddress(net.first + 1))"},{"line_number":1095,"context_line":""},{"line_number":1096,"context_line":"        if s[\u0027allocation_pools\u0027] \u003d\u003d attributes.ATTR_NOT_SPECIFIED:"},{"line_number":1097,"context_line":"            s[\u0027allocation_pools\u0027] \u003d self._allocate_pools_for_subnet(context, s)"},{"line_number":1098,"context_line":"        else:"},{"line_number":1099,"context_line":"            self._validate_allocation_pools(s[\u0027allocation_pools\u0027], s[\u0027cidr\u0027])"},{"line_number":1100,"context_line":"            if s[\u0027gateway_ip\u0027] is not None:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9aa7fdbe_12d5c642","line":1097,"in_reply_to":"9aa7fdbe_37463c7d","updated":"2014-10-22 12:59:07.000000000","message":"I was thinking about this and felt that it would be better to address it in a separate patch instead of mixing with the current one (where the focus is on the gateway_ip). Hope it is fine. \n\nI will raise a Bug for addressing the allocation pools and would take it up after this patch.\n\nThanks for reviewing the patch.","commit_id":"bedd762b02c973dca605fb9bfafbc09d4ffc12c1"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"change_message_id":"5b5bc14376e409e9051e5737f1b51afd4c1c0b85","unresolved":false,"context_lines":[{"line_number":1083,"context_line":""},{"line_number":1084,"context_line":"        if s[\u0027gateway_ip\u0027] is attributes.ATTR_NOT_SPECIFIED:"},{"line_number":1085,"context_line":"            if (s[\u0027ip_version\u0027] \u003d\u003d 6 and"},{"line_number":1086,"context_line":"                ipv6_utils.check_if_subnet_uses_eui64(s)):"},{"line_number":1087,"context_line":"                s[\u0027gateway_ip\u0027] \u003d None"},{"line_number":1088,"context_line":"            else:"},{"line_number":1089,"context_line":"                s[\u0027gateway_ip\u0027] \u003d str(netaddr.IPAddress(net.first + 1))"}],"source_content_type":"text/x-python","patch_set":2,"id":"9aa7fdbe_92327f0e","line":1086,"updated":"2014-10-23 06:23:16.000000000","message":"ip_version check may not be necessary here since IPv4 subnet cannot use eui64?","commit_id":"d9620218631e23e22b75d96f223fdf68bc2339bc"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"48c39b8518246f1bdc1a5269153e4f4db08ccb47","unresolved":false,"context_lines":[{"line_number":1083,"context_line":""},{"line_number":1084,"context_line":"        if s[\u0027gateway_ip\u0027] is attributes.ATTR_NOT_SPECIFIED:"},{"line_number":1085,"context_line":"            if (s[\u0027ip_version\u0027] \u003d\u003d 6 and"},{"line_number":1086,"context_line":"                ipv6_utils.check_if_subnet_uses_eui64(s)):"},{"line_number":1087,"context_line":"                s[\u0027gateway_ip\u0027] \u003d None"},{"line_number":1088,"context_line":"            else:"},{"line_number":1089,"context_line":"                s[\u0027gateway_ip\u0027] \u003d str(netaddr.IPAddress(net.first + 1))"}],"source_content_type":"text/x-python","patch_set":2,"id":"9aa7fdbe_d2915548","line":1086,"in_reply_to":"9aa7fdbe_62e388a4","updated":"2014-10-23 16:19:54.000000000","message":"@xuhanp, removing the ip_version check is causing issues with some plugins. \n\nhttp://logs.openstack.org/65/129865/3/check/gate-neutron-python27/8b2bb60/console.html","commit_id":"d9620218631e23e22b75d96f223fdf68bc2339bc"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"6b544a0dd3fd6111e9a8ee4e26ad6f7bad6b99df","unresolved":false,"context_lines":[{"line_number":1083,"context_line":""},{"line_number":1084,"context_line":"        if s[\u0027gateway_ip\u0027] is attributes.ATTR_NOT_SPECIFIED:"},{"line_number":1085,"context_line":"            if (s[\u0027ip_version\u0027] \u003d\u003d 6 and"},{"line_number":1086,"context_line":"                ipv6_utils.check_if_subnet_uses_eui64(s)):"},{"line_number":1087,"context_line":"                s[\u0027gateway_ip\u0027] \u003d None"},{"line_number":1088,"context_line":"            else:"},{"line_number":1089,"context_line":"                s[\u0027gateway_ip\u0027] \u003d str(netaddr.IPAddress(net.first + 1))"}],"source_content_type":"text/x-python","patch_set":2,"id":"9aa7fdbe_62e388a4","line":1086,"in_reply_to":"9aa7fdbe_92327f0e","updated":"2014-10-23 10:00:09.000000000","message":"Done","commit_id":"d9620218631e23e22b75d96f223fdf68bc2339bc"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"bba15475bf77732eb102c2988bc34d6679b7734a","unresolved":false,"context_lines":[{"line_number":445,"context_line":"                            \u0027subnet\u0027) % fixed[\u0027ip_address\u0027]"},{"line_number":446,"context_line":"                    raise n_exc.InvalidInput(error_message\u003dmsg)"},{"line_number":447,"context_line":"                if (ipv6_utils.is_slaac_subnet(subnet)"},{"line_number":448,"context_line":"                    and device_owner !\u003d constants.DEVICE_OWNER_ROUTER_INTF):"},{"line_number":449,"context_line":"                    msg \u003d (_(\"IPv6 address %(address)s can not be directly \""},{"line_number":450,"context_line":"                            \"assigned to a port on subnet %(id)s with \""},{"line_number":451,"context_line":"                            \"%(mode)s address mode\") %"}],"source_content_type":"text/x-python","patch_set":5,"id":"9aa7fdbe_cef5c883","line":448,"updated":"2014-10-28 18:06:52.000000000","message":"what about DEVICE_OWNER_DVR_INTERFACE ?","commit_id":"11442e31604b8b41966cb17c087dc9688a4c4b75"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"0de2f7dec5909d821a97f04718b1d32b9e3f838c","unresolved":false,"context_lines":[{"line_number":445,"context_line":"                            \u0027subnet\u0027) % fixed[\u0027ip_address\u0027]"},{"line_number":446,"context_line":"                    raise n_exc.InvalidInput(error_message\u003dmsg)"},{"line_number":447,"context_line":"                if (ipv6_utils.is_slaac_subnet(subnet)"},{"line_number":448,"context_line":"                    and device_owner !\u003d constants.DEVICE_OWNER_ROUTER_INTF):"},{"line_number":449,"context_line":"                    msg \u003d (_(\"IPv6 address %(address)s can not be directly \""},{"line_number":450,"context_line":"                            \"assigned to a port on subnet %(id)s with \""},{"line_number":451,"context_line":"                            \"%(mode)s address mode\") %"}],"source_content_type":"text/x-python","patch_set":5,"id":"9aa7fdbe_3d9be418","line":448,"in_reply_to":"9aa7fdbe_c765abe1","updated":"2014-10-28 20:45:57.000000000","message":"Done","commit_id":"11442e31604b8b41966cb17c087dc9688a4c4b75"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"1c16ae84c1d51a2456293a04563c9eed99517b40","unresolved":false,"context_lines":[{"line_number":445,"context_line":"                            \u0027subnet\u0027) % fixed[\u0027ip_address\u0027]"},{"line_number":446,"context_line":"                    raise n_exc.InvalidInput(error_message\u003dmsg)"},{"line_number":447,"context_line":"                if (ipv6_utils.is_slaac_subnet(subnet)"},{"line_number":448,"context_line":"                    and device_owner !\u003d constants.DEVICE_OWNER_ROUTER_INTF):"},{"line_number":449,"context_line":"                    msg \u003d (_(\"IPv6 address %(address)s can not be directly \""},{"line_number":450,"context_line":"                            \"assigned to a port on subnet %(id)s with \""},{"line_number":451,"context_line":"                            \"%(mode)s address mode\") %"}],"source_content_type":"text/x-python","patch_set":5,"id":"9aa7fdbe_c765abe1","line":448,"in_reply_to":"9aa7fdbe_cef5c883","updated":"2014-10-28 19:13:50.000000000","message":"+1\n\nSo, there is logic everywhere in the code that compares device owner to the 2 constants in question to identify whether a port is a router interface.  Terrible.  I\u0027m going to submit a patch that cleans this up by adding a function call that does the check instead, but for now, please follow Eugene\u0027s advice and compare against the other constant as well.","commit_id":"11442e31604b8b41966cb17c087dc9688a4c4b75"}],"neutron/db/l3_db.py":[{"author":{"_account_id":6685,"name":"Baodong (Robert) Li","email":"baoli@cisco.com","username":"baoli"},"change_message_id":"f9be458f1c501f5b7e9a95fce355fe703eca634e","unresolved":false,"context_lines":[{"line_number":460,"context_line":"    def _subnet_uses_eui64(s):"},{"line_number":461,"context_line":"        \"\"\"Check if ipv6 address will be calculated via EUI64.\"\"\""},{"line_number":462,"context_line":"        return (s[\u0027ipv6_address_mode\u0027] \u003d\u003d l3_constants.IPV6_SLAAC"},{"line_number":463,"context_line":"                or s[\u0027ipv6_address_mode\u0027] \u003d\u003d l3_constants.DHCPV6_STATELESS)"},{"line_number":464,"context_line":""},{"line_number":465,"context_line":"    def _add_interface_by_subnet(self, context, router, subnet_id, owner):"},{"line_number":466,"context_line":"        subnet \u003d self._core_plugin._get_subnet(context, subnet_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9aa7fdbe_97ac4837","line":463,"updated":"2014-10-22 12:48:02.000000000","message":"seen this in several modules. Would it make more sense to consolidate this into plugins/common/utils.py or some other common area?","commit_id":"bedd762b02c973dca605fb9bfafbc09d4ffc12c1"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"c612dd9d07b51dc21f71bf837d7f8093234adbb2","unresolved":false,"context_lines":[{"line_number":460,"context_line":"    def _subnet_uses_eui64(s):"},{"line_number":461,"context_line":"        \"\"\"Check if ipv6 address will be calculated via EUI64.\"\"\""},{"line_number":462,"context_line":"        return (s[\u0027ipv6_address_mode\u0027] \u003d\u003d l3_constants.IPV6_SLAAC"},{"line_number":463,"context_line":"                or s[\u0027ipv6_address_mode\u0027] \u003d\u003d l3_constants.DHCPV6_STATELESS)"},{"line_number":464,"context_line":""},{"line_number":465,"context_line":"    def _add_interface_by_subnet(self, context, router, subnet_id, owner):"},{"line_number":466,"context_line":"        subnet \u003d self._core_plugin._get_subnet(context, subnet_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9aa7fdbe_d2309eea","line":463,"in_reply_to":"9aa7fdbe_97ac4837","updated":"2014-10-22 12:59:07.000000000","message":"Its a good suggestion. I think we can add this api in the following file - neutron/common/ipv6_utils.py","commit_id":"bedd762b02c973dca605fb9bfafbc09d4ffc12c1"}],"neutron/tests/unit/test_db_plugin.py":[{"author":{"_account_id":6685,"name":"Baodong (Robert) Li","email":"baoli@cisco.com","username":"baoli"},"change_message_id":"ff9b0446f5d2209eb50723fe3b71d09778fdf383","unresolved":false,"context_lines":[{"line_number":1478,"context_line":""},{"line_number":1479,"context_line":"        kwargs \u003d {\"fixed_ips\": [{\u0027ip_address\u0027: \u0027fe80::1\u0027}]}"},{"line_number":1480,"context_line":"        res \u003d self._create_port(self.fmt, network[\u0027network\u0027][\u0027id\u0027], **kwargs)"},{"line_number":1481,"context_line":"        self.assertEqual(res.status_int, webob.exc.HTTPClientError.code)"},{"line_number":1482,"context_line":""},{"line_number":1483,"context_line":"        # Validate port creation with fixed_ip for router interface"},{"line_number":1484,"context_line":"        device_owner \u003d constants.DEVICE_OWNER_ROUTER_INTF"}],"source_content_type":"text/x-python","patch_set":2,"id":"9aa7fdbe_e45952ff","line":1481,"updated":"2014-10-22 21:45:13.000000000","message":"already covered by test_requested_invalid_fixed_ip_address_v6_slaac","commit_id":"d9620218631e23e22b75d96f223fdf68bc2339bc"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"6b544a0dd3fd6111e9a8ee4e26ad6f7bad6b99df","unresolved":false,"context_lines":[{"line_number":1478,"context_line":""},{"line_number":1479,"context_line":"        kwargs \u003d {\"fixed_ips\": [{\u0027ip_address\u0027: \u0027fe80::1\u0027}]}"},{"line_number":1480,"context_line":"        res \u003d self._create_port(self.fmt, network[\u0027network\u0027][\u0027id\u0027], **kwargs)"},{"line_number":1481,"context_line":"        self.assertEqual(res.status_int, webob.exc.HTTPClientError.code)"},{"line_number":1482,"context_line":""},{"line_number":1483,"context_line":"        # Validate port creation with fixed_ip for router interface"},{"line_number":1484,"context_line":"        device_owner \u003d constants.DEVICE_OWNER_ROUTER_INTF"}],"source_content_type":"text/x-python","patch_set":2,"id":"9aa7fdbe_82a5cc48","line":1481,"in_reply_to":"9aa7fdbe_e45952ff","updated":"2014-10-23 10:00:09.000000000","message":"Done","commit_id":"d9620218631e23e22b75d96f223fdf68bc2339bc"},{"author":{"_account_id":6685,"name":"Baodong (Robert) Li","email":"baoli@cisco.com","username":"baoli"},"change_message_id":"ff9b0446f5d2209eb50723fe3b71d09778fdf383","unresolved":false,"context_lines":[{"line_number":1488,"context_line":"        port \u003d self.deserialize(self.fmt, res)"},{"line_number":1489,"context_line":"        self.assertEqual(len(port[\u0027port\u0027][\u0027fixed_ips\u0027]), 1)"},{"line_number":1490,"context_line":"        self.assertEqual(port[\u0027port\u0027][\u0027fixed_ips\u0027][0][\u0027ip_address\u0027], \u0027fe80::1\u0027)"},{"line_number":1491,"context_line":""},{"line_number":1492,"context_line":"    def test_range_allocation(self):"},{"line_number":1493,"context_line":"        with self.subnet(gateway_ip\u003d\u002710.0.0.3\u0027,"},{"line_number":1494,"context_line":"                         cidr\u003d\u002710.0.0.0/29\u0027) as subnet:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9aa7fdbe_646d6298","line":1491,"updated":"2014-10-22 21:45:13.000000000","message":"This looks like a separate test case.","commit_id":"d9620218631e23e22b75d96f223fdf68bc2339bc"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"6b544a0dd3fd6111e9a8ee4e26ad6f7bad6b99df","unresolved":false,"context_lines":[{"line_number":1488,"context_line":"        port \u003d self.deserialize(self.fmt, res)"},{"line_number":1489,"context_line":"        self.assertEqual(len(port[\u0027port\u0027][\u0027fixed_ips\u0027]), 1)"},{"line_number":1490,"context_line":"        self.assertEqual(port[\u0027port\u0027][\u0027fixed_ips\u0027][0][\u0027ip_address\u0027], \u0027fe80::1\u0027)"},{"line_number":1491,"context_line":""},{"line_number":1492,"context_line":"    def test_range_allocation(self):"},{"line_number":1493,"context_line":"        with self.subnet(gateway_ip\u003d\u002710.0.0.3\u0027,"},{"line_number":1494,"context_line":"                         cidr\u003d\u002710.0.0.0/29\u0027) as subnet:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9aa7fdbe_25cc2a6a","line":1491,"in_reply_to":"9aa7fdbe_0d14b242","updated":"2014-10-23 10:00:09.000000000","message":"Done","commit_id":"d9620218631e23e22b75d96f223fdf68bc2339bc"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"change_message_id":"5b5bc14376e409e9051e5737f1b51afd4c1c0b85","unresolved":false,"context_lines":[{"line_number":1488,"context_line":"        port \u003d self.deserialize(self.fmt, res)"},{"line_number":1489,"context_line":"        self.assertEqual(len(port[\u0027port\u0027][\u0027fixed_ips\u0027]), 1)"},{"line_number":1490,"context_line":"        self.assertEqual(port[\u0027port\u0027][\u0027fixed_ips\u0027][0][\u0027ip_address\u0027], \u0027fe80::1\u0027)"},{"line_number":1491,"context_line":""},{"line_number":1492,"context_line":"    def test_range_allocation(self):"},{"line_number":1493,"context_line":"        with self.subnet(gateway_ip\u003d\u002710.0.0.3\u0027,"},{"line_number":1494,"context_line":"                         cidr\u003d\u002710.0.0.0/29\u0027) as subnet:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9aa7fdbe_0d14b242","line":1491,"in_reply_to":"9aa7fdbe_646d6298","updated":"2014-10-23 06:23:16.000000000","message":"+1","commit_id":"d9620218631e23e22b75d96f223fdf68bc2339bc"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"1c16ae84c1d51a2456293a04563c9eed99517b40","unresolved":false,"context_lines":[{"line_number":1432,"context_line":"                                    device_owner\u003ddevice_owner, **kwargs)"},{"line_number":1433,"context_line":"            port \u003d self.deserialize(self.fmt, res)"},{"line_number":1434,"context_line":"            self.assertEqual(len(port[\u0027port\u0027][\u0027fixed_ips\u0027]), 1)"},{"line_number":1435,"context_line":"            self.assertEqual(port[\u0027port\u0027][\u0027fixed_ips\u0027][0][\u0027ip_address\u0027],"},{"line_number":1436,"context_line":"                             \u0027fe80::1\u0027)"},{"line_number":1437,"context_line":""},{"line_number":1438,"context_line":"    def test_requested_subnet_id_v6_slaac(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9aa7fdbe_e4f0ed92","line":1435,"updated":"2014-10-28 19:13:50.000000000","message":"(No action required) Code like this makes lisp\u0027s brackets look inviting.  One would hope that dicts-as-objects are going to die in a fire someday soon, yes?","commit_id":"11442e31604b8b41966cb17c087dc9688a4c4b75"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"1c16ae84c1d51a2456293a04563c9eed99517b40","unresolved":false,"context_lines":[{"line_number":2846,"context_line":"        self._test_create_subnet(expected\u003dexpected,"},{"line_number":2847,"context_line":"                                 gateway_ip\u003dgateway)"},{"line_number":2848,"context_line":""},{"line_number":2849,"context_line":"    def test_create_subnet_ipv6_gw_values(self):"},{"line_number":2850,"context_line":"        cidr \u003d \u00272001::/64\u0027"},{"line_number":2851,"context_line":"        # Gateway is last IP in IPv6 DHCPv6 stateful subnet"},{"line_number":2852,"context_line":"        gateway \u003d \u00272001::ffff:ffff:ffff:fffe\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"9aa7fdbe_04bed1ad","line":2849,"updated":"2014-10-28 19:13:50.000000000","message":"(No action required) I can\u0027t fault you for following the pattern of the existing tests (the original authors and reviewers deserve that kind of attention), but one of the cardinal rules of testing is minimizing the scope of each test.  In this case, both the first and last gateways are being tested, which suggests a separate test case for each gateway and an appropriate test name for each (e.g. test_create_subnet_ipv6_gw_last_ip/first_ip).","commit_id":"11442e31604b8b41966cb17c087dc9688a4c4b75"},{"author":{"_account_id":4656,"name":"Sean M. Collins","email":"sean@coreitpro.com","username":"scollins"},"change_message_id":"fa5fb051d99a768420235ffda7b18fe4cb5b3032","unresolved":false,"context_lines":[{"line_number":2849,"context_line":"    def test_create_subnet_ipv6_gw_values(self):"},{"line_number":2850,"context_line":"        cidr \u003d \u00272001::/64\u0027"},{"line_number":2851,"context_line":"        # Gateway is last IP in IPv6 DHCPv6 stateful subnet"},{"line_number":2852,"context_line":"        gateway \u003d \u00272001::ffff:ffff:ffff:fffe\u0027"},{"line_number":2853,"context_line":"        allocation_pools \u003d [{\u0027start\u0027: \u00272001::1\u0027,"},{"line_number":2854,"context_line":"                             \u0027end\u0027: \u00272001::ffff:ffff:ffff:fffd\u0027}]"},{"line_number":2855,"context_line":"        expected \u003d {\u0027gateway_ip\u0027: gateway,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9aa7fdbe_18b92015","line":2852,"updated":"2014-10-24 16:34:58.000000000","message":"The last IP in the subnet is :FFFF , not FFFE,","commit_id":"11442e31604b8b41966cb17c087dc9688a4c4b75"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"9258ed45f3b832290c88c92756a06fcf09214db4","unresolved":false,"context_lines":[{"line_number":2849,"context_line":"    def test_create_subnet_ipv6_gw_values(self):"},{"line_number":2850,"context_line":"        cidr \u003d \u00272001::/64\u0027"},{"line_number":2851,"context_line":"        # Gateway is last IP in IPv6 DHCPv6 stateful subnet"},{"line_number":2852,"context_line":"        gateway \u003d \u00272001::ffff:ffff:ffff:fffe\u0027"},{"line_number":2853,"context_line":"        allocation_pools \u003d [{\u0027start\u0027: \u00272001::1\u0027,"},{"line_number":2854,"context_line":"                             \u0027end\u0027: \u00272001::ffff:ffff:ffff:fffd\u0027}]"},{"line_number":2855,"context_line":"        expected \u003d {\u0027gateway_ip\u0027: gateway,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9aa7fdbe_0ebf1aab","line":2852,"in_reply_to":"9aa7fdbe_18b92015","updated":"2014-10-24 17:57:41.000000000","message":"@Sean, as @Sergey mentioned in his comment Neutron reserves two IP addresses in the subnet allocation pool and this test case reflects the current behavior. The expected behavior would be tracked as part of the following issue - https://bugs.launchpad.net/neutron/+bug/1356926\n\nOn the other hand, as you know, allocation pools itself are not required for SLAAC subnets. @baoli has pointed this in his earlier comments - https://review.openstack.org/#/c/129865/1/neutron/db/db_base_plugin_v2.py\nSince it is a different issue and not related to the Bug, I plan to take it up in a separate patch.","commit_id":"11442e31604b8b41966cb17c087dc9688a4c4b75"}]}
