)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6685,"name":"Baodong (Robert) Li","email":"baoli@cisco.com","username":"baoli"},"change_message_id":"1b0a51398a40f03cc49e969797324af7f4444dfa","unresolved":false,"context_lines":[{"line_number":18,"context_line":"has external gateway. The external gateway IPs can be used by"},{"line_number":19,"context_line":"dnsmasq spawned by OpenStack to send out ICMPv6 RA."},{"line_number":20,"context_line":"2. If the port\u0027s gateway port is not managed by OpenStack, allow"},{"line_number":21,"context_line":"the ICMPv6 RA sent from the subnet gateway IP as well."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Change-Id: I1d5c7aaa8e4cf057204eb746c0faab2c70409a94"},{"line_number":24,"context_line":"Closes-Bug: 1262759"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAAUX%2F%2FrH4%3D","line":21,"updated":"2014-02-11 15:43:43.000000000","message":"Are you trying to filter based on the source IP address in the router advertisement message? According to the RFC:\nhttp://tools.ietf.org/html/rfc4861#page-18\n Source Address\n                     MUST be the link-local address assigned to the\n                     interface from which this message is sent.\n\nIf that\u0027s the case, the change in this patch won\u0027t work.","commit_id":"f1bb520ade0ed3309203d7c1f126f4790be401ba"},{"author":{"_account_id":4656,"name":"Sean M. Collins","email":"sean@coreitpro.com","username":"scollins"},"change_message_id":"d320addbb1fe1fc64dd0a373d8b52ba93b86c173","unresolved":false,"context_lines":[{"line_number":18,"context_line":"has external gateway. The external gateway IPs can be used by"},{"line_number":19,"context_line":"dnsmasq spawned by OpenStack to send out ICMPv6 RA."},{"line_number":20,"context_line":"2. If the port\u0027s gateway port is not managed by OpenStack, allow"},{"line_number":21,"context_line":"the ICMPv6 RA sent from the subnet gateway IP as well."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Change-Id: I1d5c7aaa8e4cf057204eb746c0faab2c70409a94"},{"line_number":24,"context_line":"Closes-Bug: 1262759"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAAUX%2F%2Foik%3D","line":21,"in_reply_to":"AAAAUX%2F%2FrH4%3D","updated":"2014-02-11 21:17:40.000000000","message":"Subnets that have a gateway that is not managed by openstack, are provided by the admin in the subnet creation API request, and will be a LLA - if the administrator is configuring Neutron correctly. We had a discussion during one IRC meeting about enforcing LLAs for gateways, and we chose not to enforce that, we assume the user knows what they are doing, if they specify a non LLA.\n\nWe will have to check the portions of neutron that create routers, and see what they currently do for IPv6. We will most likely ensure that they use LLAs to advertise RAs, and set gateways appropriately.","commit_id":"f1bb520ade0ed3309203d7c1f126f4790be401ba"},{"author":{"_account_id":2733,"name":"Darragh O\u0027Reilly","email":"doreilly@suse.com","username":"darragh-oreilly"},"change_message_id":"e0fe11db7629d77a7e80c3da583de221dfc414c3","unresolved":false,"context_lines":[{"line_number":20,"context_line":"allow RA from the link local address of gateway port (if the"},{"line_number":21,"context_line":"gateway port is created)."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"2. If the port\u0027s gateway port is not managed by OpenStack, allow"},{"line_number":24,"context_line":"the ICMPv6 RA sent from the subnet gateway IP as well. admin need"},{"line_number":25,"context_line":"to configure the gateway IP as link local address in this case to"},{"line_number":26,"context_line":"make the RA rule work."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"AAAAWH%2F%2BeJY%3D","line":23,"updated":"2014-03-26 15:26:08.000000000","message":"If the subnet\u0027s gateway is not managed by OpenStack, ...","commit_id":"f8a42ba1931713ed6743cf921e80228fc03be739"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"change_message_id":"fd47275e725b3ac8e14d52f00d7c6af2f8badb8e","unresolved":false,"context_lines":[{"line_number":20,"context_line":"allow RA from the link local address of gateway port (if the"},{"line_number":21,"context_line":"gateway port is created)."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"2. If the port\u0027s gateway port is not managed by OpenStack, allow"},{"line_number":24,"context_line":"the ICMPv6 RA sent from the subnet gateway IP as well. admin need"},{"line_number":25,"context_line":"to configure the gateway IP as link local address in this case to"},{"line_number":26,"context_line":"make the RA rule work."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"AAAAWH%2F%2BZ48%3D","line":23,"in_reply_to":"AAAAWH%2F%2BeJY%3D","updated":"2014-03-27 03:37:51.000000000","message":"Done","commit_id":"f8a42ba1931713ed6743cf921e80228fc03be739"},{"author":{"_account_id":2733,"name":"Darragh O\u0027Reilly","email":"doreilly@suse.com","username":"darragh-oreilly"},"change_message_id":"2b15ecab80c7c6771232ac0970f2aaaeb11f6362","unresolved":false,"context_lines":[{"line_number":21,"context_line":"gateway port is created)."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"2. If the subnet\u0027s gateway port is not managed by OpenStack, allow"},{"line_number":24,"context_line":"the ICMPv6 RA sent from the subnet gateway IP as well. admin need"},{"line_number":25,"context_line":"to configure the gateway IP as link local address in this case to"},{"line_number":26,"context_line":"make the RA rule work."},{"line_number":27,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"AAAAWH%2F%2BW5I%3D","line":24,"updated":"2014-03-27 12:20:52.000000000","message":"... from the subnet gateway IP if it\u0027s a LLA. The administrator ...","commit_id":"35f0a1295e8c30dd2373c81f5befe4c7c97492fb"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"change_message_id":"26ddbeae58d7911ccd5af3a14507c97db47d64e9","unresolved":false,"context_lines":[{"line_number":21,"context_line":"gateway port is created)."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"2. If the subnet\u0027s gateway port is not managed by OpenStack, allow"},{"line_number":24,"context_line":"the ICMPv6 RA sent from the subnet gateway IP as well. admin need"},{"line_number":25,"context_line":"to configure the gateway IP as link local address in this case to"},{"line_number":26,"context_line":"make the RA rule work."},{"line_number":27,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"AAAAWH%2F%2BWE0%3D","line":24,"in_reply_to":"AAAAWH%2F%2BW5I%3D","updated":"2014-03-28 02:46:39.000000000","message":"thanks! will change in next patch.","commit_id":"35f0a1295e8c30dd2373c81f5befe4c7c97492fb"}],"neutron/common/constants.py":[{"author":{"_account_id":2733,"name":"Darragh O\u0027Reilly","email":"doreilly@suse.com","username":"darragh-oreilly"},"change_message_id":"675952c4464773d89d935bf225a5cc658d14e255","unresolved":false,"context_lines":[{"line_number":109,"context_line":"# Router Advertisement (134),"},{"line_number":110,"context_line":"# Neighbor Solicitation (135),"},{"line_number":111,"context_line":"# Neighbor Advertisement (136)"},{"line_number":112,"context_line":"ICMPV6_ALLOWED_TYPES \u003d [130, 131, 132, 134, 135, 136]"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"DHCPV6_STATEFUL \u003d \u0027dhcpv6-stateful\u0027"},{"line_number":115,"context_line":"DHCPV6_STATELESS \u003d \u0027dhcpv6-stateless\u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2BHYc%3D","side":"PARENT","line":112,"updated":"2014-03-29 12:03:24.000000000","message":"so this comment is no longer correct https://github.com/openstack/neutron/blob/master/neutron/agent/linux/iptables_firewall.py#L244","commit_id":"43ccae0e7aa0da6da11fba5998f7f59c5e4d723a"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"change_message_id":"21e97965290a949660254a87a96548aa5b303941","unresolved":false,"context_lines":[{"line_number":109,"context_line":"# Router Advertisement (134),"},{"line_number":110,"context_line":"# Neighbor Solicitation (135),"},{"line_number":111,"context_line":"# Neighbor Advertisement (136)"},{"line_number":112,"context_line":"ICMPV6_ALLOWED_TYPES \u003d [130, 131, 132, 134, 135, 136]"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"DHCPV6_STATEFUL \u003d \u0027dhcpv6-stateful\u0027"},{"line_number":115,"context_line":"DHCPV6_STATELESS \u003d \u0027dhcpv6-stateless\u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2BE7E%3D","side":"PARENT","line":112,"in_reply_to":"AAAAWH%2F%2BHYc%3D","updated":"2014-03-31 02:40:39.000000000","message":"Done","commit_id":"43ccae0e7aa0da6da11fba5998f7f59c5e4d723a"}],"neutron/db/securitygroups_rpc_base.py":[{"author":{"_account_id":6685,"name":"Baodong (Robert) Li","email":"baoli@cisco.com","username":"baoli"},"change_message_id":"45d36d479106b96b36fbd6843d1da0e4921cc4c4","unresolved":false,"context_lines":[{"line_number":252,"context_line":"                ips[network_id] \u003d []"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"            for gateway, ip in gateways:"},{"line_number":255,"context_line":"                ips[interface_devices[gateway.device_id]].append(ip)"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"        # get subnet gateway IPs for non-openstack devices"},{"line_number":258,"context_line":"        # which could also send RA"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2FVkg%3D","line":255,"updated":"2014-02-13 22:08:07.000000000","message":"So this is going to be the gateway IP address. With IPv6, is this going to be a link local address?\n\nWith IPv4, this address comes out of a public ip address pool or subnet.","commit_id":"f1bb520ade0ed3309203d7c1f126f4790be401ba"},{"author":{"_account_id":4656,"name":"Sean M. Collins","email":"sean@coreitpro.com","username":"scollins"},"change_message_id":"bc8b771339eab47d95b2ca50e6b5f88c8a4f9729","unresolved":false,"context_lines":[{"line_number":252,"context_line":"                ips[network_id] \u003d []"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"            for gateway, ip in gateways:"},{"line_number":255,"context_line":"                ips[interface_devices[gateway.device_id]].append(ip)"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"        # get subnet gateway IPs for non-openstack devices"},{"line_number":258,"context_line":"        # which could also send RA"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2FUUk%3D","line":255,"in_reply_to":"AAAAUX%2F%2FVkg%3D","updated":"2014-02-14 00:58:15.000000000","message":"\u003e With IPv4, this address comes out of a public ip address pool or subnet.\n\nThis is not correct. In some cases, you will set a gateway IP that is not part of an address pool or subnet that is controlled by Neutron- like when you are using a provider network, and have set a gateway that is a physical networking device.\n\n\u003eWith IPv6, is this going to be a link local address?\n\nThat is up to the person creating the subnet. We assume that an administrator that is creating subnets knows what they are doing, yes?","commit_id":"f1bb520ade0ed3309203d7c1f126f4790be401ba"},{"author":{"_account_id":6685,"name":"Baodong (Robert) Li","email":"baoli@cisco.com","username":"baoli"},"change_message_id":"45d36d479106b96b36fbd6843d1da0e4921cc4c4","unresolved":false,"context_lines":[{"line_number":259,"context_line":"        query \u003d context.session.query(models_v2.Subnet)"},{"line_number":260,"context_line":"        query \u003d query.filter(models_v2.Subnet.network_id.in_(network_ids))"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"        for net in query:"},{"line_number":263,"context_line":"            gateway \u003d net[\u0027gateway_ip\u0027]"},{"line_number":264,"context_line":"            if gateway not in ips[net[\u0027network_id\u0027]]:"},{"line_number":265,"context_line":"                ips[net[\u0027network_id\u0027]].append(gateway)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2FVjg%3D","line":262,"updated":"2014-02-13 22:08:07.000000000","message":"shoud \u0027net\u0027 be \u0027subnet\u0027?","commit_id":"f1bb520ade0ed3309203d7c1f126f4790be401ba"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"change_message_id":"3c481443268e0b35d0c1c9a643663df08c4910fc","unresolved":false,"context_lines":[{"line_number":259,"context_line":"        query \u003d context.session.query(models_v2.Subnet)"},{"line_number":260,"context_line":"        query \u003d query.filter(models_v2.Subnet.network_id.in_(network_ids))"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"        for net in query:"},{"line_number":263,"context_line":"            gateway \u003d net[\u0027gateway_ip\u0027]"},{"line_number":264,"context_line":"            if gateway not in ips[net[\u0027network_id\u0027]]:"},{"line_number":265,"context_line":"                ips[net[\u0027network_id\u0027]].append(gateway)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2FS4I%3D","line":262,"in_reply_to":"AAAAUX%2F%2FVjg%3D","updated":"2014-02-14 06:09:37.000000000","message":"will change in next patch","commit_id":"f1bb520ade0ed3309203d7c1f126f4790be401ba"},{"author":{"_account_id":6685,"name":"Baodong (Robert) Li","email":"baoli@cisco.com","username":"baoli"},"change_message_id":"45d36d479106b96b36fbd6843d1da0e4921cc4c4","unresolved":false,"context_lines":[{"line_number":261,"context_line":""},{"line_number":262,"context_line":"        for net in query:"},{"line_number":263,"context_line":"            gateway \u003d net[\u0027gateway_ip\u0027]"},{"line_number":264,"context_line":"            if gateway not in ips[net[\u0027network_id\u0027]]:"},{"line_number":265,"context_line":"                ips[net[\u0027network_id\u0027]].append(gateway)"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"        return ips"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2FVgw%3D","line":264,"updated":"2014-02-13 22:08:07.000000000","message":"Question: how to check for non-openstack device? \n\nThis gateway_ip should be a link local address and not associated with a neutron port, right?","commit_id":"f1bb520ade0ed3309203d7c1f126f4790be401ba"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"change_message_id":"48c0d1911eaba5ea0c183b0886ccf137082b0f5f","unresolved":false,"context_lines":[{"line_number":261,"context_line":""},{"line_number":262,"context_line":"        for net in query:"},{"line_number":263,"context_line":"            gateway \u003d net[\u0027gateway_ip\u0027]"},{"line_number":264,"context_line":"            if gateway not in ips[net[\u0027network_id\u0027]]:"},{"line_number":265,"context_line":"                ips[net[\u0027network_id\u0027]].append(gateway)"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"        return ips"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAU3%2F%2FubU%3D","line":264,"in_reply_to":"AAAAUX%2F%2B04g%3D","updated":"2014-02-25 03:14:45.000000000","message":"Robert and Sean: I will try to open a bug or start a ML discussion about this.","commit_id":"f1bb520ade0ed3309203d7c1f126f4790be401ba"},{"author":{"_account_id":4656,"name":"Sean M. Collins","email":"sean@coreitpro.com","username":"scollins"},"change_message_id":"9f638a16a108856060c8d1f84db35b7f45b45d30","unresolved":false,"context_lines":[{"line_number":261,"context_line":""},{"line_number":262,"context_line":"        for net in query:"},{"line_number":263,"context_line":"            gateway \u003d net[\u0027gateway_ip\u0027]"},{"line_number":264,"context_line":"            if gateway not in ips[net[\u0027network_id\u0027]]:"},{"line_number":265,"context_line":"                ips[net[\u0027network_id\u0027]].append(gateway)"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"        return ips"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2B04g%3D","line":264,"in_reply_to":"AAAAUX%2F%2B1to%3D","updated":"2014-02-18 19:16:51.000000000","message":"Robert - I believe this is a separate issue. Let\u0027s take this to the mailing list - this is definitely a new bug or new blueprint that we should file to address.","commit_id":"f1bb520ade0ed3309203d7c1f126f4790be401ba"},{"author":{"_account_id":6685,"name":"Baodong (Robert) Li","email":"baoli@cisco.com","username":"baoli"},"change_message_id":"d56c759587f0b2b1d35d85aa22c7e5457de90d86","unresolved":false,"context_lines":[{"line_number":261,"context_line":""},{"line_number":262,"context_line":"        for net in query:"},{"line_number":263,"context_line":"            gateway \u003d net[\u0027gateway_ip\u0027]"},{"line_number":264,"context_line":"            if gateway not in ips[net[\u0027network_id\u0027]]:"},{"line_number":265,"context_line":"                ips[net[\u0027network_id\u0027]].append(gateway)"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"        return ips"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2B1to%3D","line":264,"in_reply_to":"AAAAUX%2F%2FS20%3D","updated":"2014-02-18 17:43:11.000000000","message":"This is what I\u0027ve tried, creating a subnet with a LLA gateway address:\nneutron subnet-create --ip-version 6 --name myipv6sub --gateway fe80::2001:1 mynet 2222:3333::/64\n\nCreated a new subnet:\n+------------------+--------------------------------------------------------------------+\n| Field            | Value                                                              |\n+------------------+--------------------------------------------------------------------+\n| allocation_pools | {\"start\": \"2222:3333::1\", \"end\": \"2222:3333::ffff:ffff:ffff:fffe\"} |\n| cidr             | 2222:3333::/64                                                     |\n| dns_nameservers  |                                                                    |\n| enable_dhcp      | True                                                               |\n| gateway_ip       | fe80::2001:1                                                       |\n| host_routes      |                                                                    |\n| id               | a1513aa7-fb19-4b87-9ce6-25fd238ce2fb                               |\n| ip_version       | 6                                                                  |\n| name             | myipv6sub                                                          |\n| network_id       | 9c25c905-da45-4f97-b394-7299ec586cff                               |\n| tenant_id        | fa96d90f267b4a93a5198c46fc13abd9                                   |\n+------------------+--------------------------------------------------------------------+\n\n\nopenstack@devstack-16:~/devstack$ neutron router-list\n\n+--------------------------------------+---------+-----------------------------------------------------------------------------+\n| id                                   | name    | external_gateway_info                                                       |\n+--------------------------------------+---------+-----------------------------------------------------------------------------+\n| 7cf084b4-fafd-4da2-9b15-0d25a3e27e67 | router1 | {\"network_id\": \"02673c3c-35c3-40a9-a5c2-9e5c093aca48\", \"enable_snat\": true} |\n+--------------------------------------+---------+-----------------------------------------------------------------------------+\n\n\nopenstack@devstack-16:~/devstack$ neutron router-interface-add 7cf084b4-fafd-4da2-9b15-0d25a3e27e67 myipv6sub\n\n400-{u\u0027NeutronError\u0027: {u\u0027message\u0027: u\u0027Invalid input for operation: IP address fe80::2001:1 is not a valid IP for the defined subnet.\u0027, u\u0027type\u0027: u\u0027InvalidInput\u0027, u\u0027detail\u0027: u\u0027\u0027}}\n\nI think that I may not be clear about the API call sequence on this. If it is clear to everyone else, just ignore my comments as noise, and please do let me know how. And I will +1 when the next patch is out. thanks.","commit_id":"f1bb520ade0ed3309203d7c1f126f4790be401ba"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"change_message_id":"3c481443268e0b35d0c1c9a643663df08c4910fc","unresolved":false,"context_lines":[{"line_number":261,"context_line":""},{"line_number":262,"context_line":"        for net in query:"},{"line_number":263,"context_line":"            gateway \u003d net[\u0027gateway_ip\u0027]"},{"line_number":264,"context_line":"            if gateway not in ips[net[\u0027network_id\u0027]]:"},{"line_number":265,"context_line":"                ips[net[\u0027network_id\u0027]].append(gateway)"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"        return ips"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2FS20%3D","line":264,"in_reply_to":"AAAAUX%2F%2FVgw%3D","updated":"2014-02-14 06:09:37.000000000","message":"The gateway IP is set by admin when creating the subnet. \nFor example:\n\nneutron subnet-create --tenant-id $tenant --name public01_subnet01 \\\n--gateway 10.64.201.254 public01 10.64.201.0/24\n\nSame for IPv6","commit_id":"f1bb520ade0ed3309203d7c1f126f4790be401ba"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"e8dabbb0e16f50f84b0b84269c488819e7fb2078","unresolved":false,"context_lines":[{"line_number":321,"context_line":"            ra_rule \u003d {\u0027direction\u0027: \u0027ingress\u0027,"},{"line_number":322,"context_line":"                       \u0027ethertype\u0027: q_const.IPv6,"},{"line_number":323,"context_line":"                       \u0027protocol\u0027: \u0027icmp\u0027}"},{"line_number":324,"context_line":"            ra_rule[\u0027source_ip_prefix\u0027] \u003d \"%s\" % (ra_ip)"},{"line_number":325,"context_line":"            port[\u0027security_group_rules\u0027].append(ra_rule)"},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"    def _apply_provider_rule(self, context, ports):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2F0%2Fc%3D","line":324,"updated":"2014-02-10 15:13:49.000000000","message":"If we\u0027re specifying this rule only for RA, shouldn\u0027t it have the ICMPv6 type field as a filter?","commit_id":"f1bb520ade0ed3309203d7c1f126f4790be401ba"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"change_message_id":"3ac0cc8bfbae05c532cae3ac82c67e184f0eaf41","unresolved":false,"context_lines":[{"line_number":321,"context_line":"            ra_rule \u003d {\u0027direction\u0027: \u0027ingress\u0027,"},{"line_number":322,"context_line":"                       \u0027ethertype\u0027: q_const.IPv6,"},{"line_number":323,"context_line":"                       \u0027protocol\u0027: \u0027icmp\u0027}"},{"line_number":324,"context_line":"            ra_rule[\u0027source_ip_prefix\u0027] \u003d \"%s\" % (ra_ip)"},{"line_number":325,"context_line":"            port[\u0027security_group_rules\u0027].append(ra_rule)"},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"    def _apply_provider_rule(self, context, ports):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2Fvy8%3D","line":324,"in_reply_to":"AAAAUX%2F%2F0%2Fc%3D","updated":"2014-02-11 03:15:58.000000000","message":"Brian, thanks for bring this up! I actually was thinking to do this but current security group process steps for iptables don\u0027t deal with ICMPv6 types today. See _convert_sgr_to_iptables_rules in iptables_firewall.py\n\nI am not sure if it\u0027s a good idea to add this in bug fix (especially for RA only) but all comments are welcomed.","commit_id":"f1bb520ade0ed3309203d7c1f126f4790be401ba"},{"author":{"_account_id":6685,"name":"Baodong (Robert) Li","email":"baoli@cisco.com","username":"baoli"},"change_message_id":"d56c759587f0b2b1d35d85aa22c7e5457de90d86","unresolved":false,"context_lines":[{"line_number":321,"context_line":"            ra_rule \u003d {\u0027direction\u0027: \u0027ingress\u0027,"},{"line_number":322,"context_line":"                       \u0027ethertype\u0027: q_const.IPv6,"},{"line_number":323,"context_line":"                       \u0027protocol\u0027: \u0027icmp\u0027}"},{"line_number":324,"context_line":"            ra_rule[\u0027source_ip_prefix\u0027] \u003d \"%s\" % (ra_ip)"},{"line_number":325,"context_line":"            port[\u0027security_group_rules\u0027].append(ra_rule)"},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"    def _apply_provider_rule(self, context, ports):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2B1j0%3D","line":324,"in_reply_to":"AAAAUX%2F%2FUUU%3D","updated":"2014-02-18 17:43:11.000000000","message":"Got it. Thanks.","commit_id":"f1bb520ade0ed3309203d7c1f126f4790be401ba"},{"author":{"_account_id":4656,"name":"Sean M. Collins","email":"sean@coreitpro.com","username":"scollins"},"change_message_id":"bc8b771339eab47d95b2ca50e6b5f88c8a4f9729","unresolved":false,"context_lines":[{"line_number":321,"context_line":"            ra_rule \u003d {\u0027direction\u0027: \u0027ingress\u0027,"},{"line_number":322,"context_line":"                       \u0027ethertype\u0027: q_const.IPv6,"},{"line_number":323,"context_line":"                       \u0027protocol\u0027: \u0027icmp\u0027}"},{"line_number":324,"context_line":"            ra_rule[\u0027source_ip_prefix\u0027] \u003d \"%s\" % (ra_ip)"},{"line_number":325,"context_line":"            port[\u0027security_group_rules\u0027].append(ra_rule)"},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"    def _apply_provider_rule(self, context, ports):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2FUUU%3D","line":324,"in_reply_to":"AAAAUX%2F%2FVa0%3D","updated":"2014-02-14 00:58:15.000000000","message":"Neighbor related messages and other protocol types are allowed by default - that was introduced in a previous commit, that you can find in the linked bug report. Please review that code for more insight.","commit_id":"f1bb520ade0ed3309203d7c1f126f4790be401ba"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"change_message_id":"626dfd6161d392941c9c40d93da9d8c656e8a04d","unresolved":false,"context_lines":[{"line_number":321,"context_line":"            ra_rule \u003d {\u0027direction\u0027: \u0027ingress\u0027,"},{"line_number":322,"context_line":"                       \u0027ethertype\u0027: q_const.IPv6,"},{"line_number":323,"context_line":"                       \u0027protocol\u0027: \u0027icmp\u0027}"},{"line_number":324,"context_line":"            ra_rule[\u0027source_ip_prefix\u0027] \u003d \"%s\" % (ra_ip)"},{"line_number":325,"context_line":"            port[\u0027security_group_rules\u0027].append(ra_rule)"},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"    def _apply_provider_rule(self, context, ports):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAVX%2F%2F9bw%3D","line":324,"in_reply_to":"AAAAUX%2F%2FevY%3D","updated":"2014-02-27 06:01:05.000000000","message":"Brian and Robert, I agree that this is needed for Juno. I will open a blueprint soon.","commit_id":"f1bb520ade0ed3309203d7c1f126f4790be401ba"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"1833e9a560be93ed616baaec3af6eb28c2145bc1","unresolved":false,"context_lines":[{"line_number":321,"context_line":"            ra_rule \u003d {\u0027direction\u0027: \u0027ingress\u0027,"},{"line_number":322,"context_line":"                       \u0027ethertype\u0027: q_const.IPv6,"},{"line_number":323,"context_line":"                       \u0027protocol\u0027: \u0027icmp\u0027}"},{"line_number":324,"context_line":"            ra_rule[\u0027source_ip_prefix\u0027] \u003d \"%s\" % (ra_ip)"},{"line_number":325,"context_line":"            port[\u0027security_group_rules\u0027].append(ra_rule)"},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"    def _apply_provider_rule(self, context, ports):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2FevY%3D","line":324,"in_reply_to":"AAAAUX%2F%2Fodg%3D","updated":"2014-02-25 14:46:32.000000000","message":"(somehow this response never got sent)\n\nSean, yes, that makes sense thanks for the explanation - now that I look at _convert_sgr_to_iptables_rules() it all fits.\n\nSo it looks like the API maybe needs to change to support more \"features\", since filtering on things besides protocols, address and port needs to be able to be specified.  That could be a Juno thing if I followed the meeting correctly today.\n\nI think Baodong had the same question.","commit_id":"f1bb520ade0ed3309203d7c1f126f4790be401ba"},{"author":{"_account_id":6685,"name":"Baodong (Robert) Li","email":"baoli@cisco.com","username":"baoli"},"change_message_id":"45d36d479106b96b36fbd6843d1da0e4921cc4c4","unresolved":false,"context_lines":[{"line_number":321,"context_line":"            ra_rule \u003d {\u0027direction\u0027: \u0027ingress\u0027,"},{"line_number":322,"context_line":"                       \u0027ethertype\u0027: q_const.IPv6,"},{"line_number":323,"context_line":"                       \u0027protocol\u0027: \u0027icmp\u0027}"},{"line_number":324,"context_line":"            ra_rule[\u0027source_ip_prefix\u0027] \u003d \"%s\" % (ra_ip)"},{"line_number":325,"context_line":"            port[\u0027security_group_rules\u0027].append(ra_rule)"},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"    def _apply_provider_rule(self, context, ports):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2FVa0%3D","line":324,"in_reply_to":"AAAAUX%2F%2Fodg%3D","updated":"2014-02-13 22:08:07.000000000","message":"Question regarding this ra_rule: does this rule cover the icmpv6 in a whole or just the router advertisement message? \n\nIf it\u0027s the former, then the proposed change is not right in that other icmpv6 messages (such as neighbor related messages) will be filtered because the allowed source IPs are limited to the gateway IP addresses only. If it\u0027s the later, then the message type should be part of the filter, I think. \n\nI think that I\u0027m kind of confused.","commit_id":"f1bb520ade0ed3309203d7c1f126f4790be401ba"},{"author":{"_account_id":4656,"name":"Sean M. Collins","email":"sean@coreitpro.com","username":"scollins"},"change_message_id":"d320addbb1fe1fc64dd0a373d8b52ba93b86c173","unresolved":false,"context_lines":[{"line_number":321,"context_line":"            ra_rule \u003d {\u0027direction\u0027: \u0027ingress\u0027,"},{"line_number":322,"context_line":"                       \u0027ethertype\u0027: q_const.IPv6,"},{"line_number":323,"context_line":"                       \u0027protocol\u0027: \u0027icmp\u0027}"},{"line_number":324,"context_line":"            ra_rule[\u0027source_ip_prefix\u0027] \u003d \"%s\" % (ra_ip)"},{"line_number":325,"context_line":"            port[\u0027security_group_rules\u0027].append(ra_rule)"},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"    def _apply_provider_rule(self, context, ports):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2Fodg%3D","line":324,"in_reply_to":"AAAAUX%2F%2Fols%3D","updated":"2014-02-11 21:17:40.000000000","message":"Brian - the original code added a default ruleset that is inserted at the top of the iptables chain for the security group rules for a port.\n\nIt has been pushed a bit higher up the call chain, and into the security group API since there are a set of default rules that each port is given, into a method that \"fit\" the description of what needed to be done - which is allow certain traffic in from DHCP servers and other infrastructure that is controlled by OpenStack.\n\nHopefully this make sense","commit_id":"f1bb520ade0ed3309203d7c1f126f4790be401ba"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"6f79dd3f030343745456cd30eed953ab863d6746","unresolved":false,"context_lines":[{"line_number":321,"context_line":"            ra_rule \u003d {\u0027direction\u0027: \u0027ingress\u0027,"},{"line_number":322,"context_line":"                       \u0027ethertype\u0027: q_const.IPv6,"},{"line_number":323,"context_line":"                       \u0027protocol\u0027: \u0027icmp\u0027}"},{"line_number":324,"context_line":"            ra_rule[\u0027source_ip_prefix\u0027] \u003d \"%s\" % (ra_ip)"},{"line_number":325,"context_line":"            port[\u0027security_group_rules\u0027].append(ra_rule)"},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"    def _apply_provider_rule(self, context, ports):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2Fols%3D","line":324,"in_reply_to":"AAAAUX%2F%2Fvy8%3D","updated":"2014-02-11 21:03:30.000000000","message":"I guess I don\u0027t understand.  Today, _accept_inbound_icmpv6() is inserting a bunch of iptables rules, amongst them one to allow RA inbound.  Isn\u0027t the fix for this to say only an RA from the designated router can get through?  Plumbing that up shouldn\u0027t need to go through any of the security group API code, right?","commit_id":"f1bb520ade0ed3309203d7c1f126f4790be401ba"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"a1f5cd290f6419a8069cc7fb2d323391c6020558","unresolved":false,"context_lines":[{"line_number":234,"context_line":"        query \u003d context.session.query(models_v2.Subnet)"},{"line_number":235,"context_line":"        query \u003d query.filter(models_v2.Subnet.network_id.in_(network_ids))"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"        for subnet in query:"},{"line_number":238,"context_line":"            if (subnet[\u0027ip_version\u0027] \u003d\u003d 6 and"},{"line_number":239,"context_line":"                subnet[\u0027ipv6_ra_mode\u0027]):"},{"line_number":240,"context_line":"                # If OpenStack dnsmasq sends RA, get link local address of"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F%2BfQM%3D","line":237,"updated":"2014-03-26 14:06:25.000000000","message":"Please consider below. I think it looks more easy to read.\n\n  if subnet[\u0027ip_version\u0027] !\u003d 6:\n      continue\n  if (subnet[\u0027ipv6_ra_mode\u0027] and\n      not netaddr.IPAddress(subnet[\u0027gateway_ip\u0027].is_link_local()):\n     (L.240-269)\n  else:\n     (L.271-280)\n\nA case where ipv6_ra_mode\u003d\u003dTrue and gateway_ip is link local looks exactly same as a case ipv6_ra_mode\u003d\u003dFalse.","commit_id":"f8a42ba1931713ed6743cf921e80228fc03be739"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"change_message_id":"fd47275e725b3ac8e14d52f00d7c6af2f8badb8e","unresolved":false,"context_lines":[{"line_number":234,"context_line":"        query \u003d context.session.query(models_v2.Subnet)"},{"line_number":235,"context_line":"        query \u003d query.filter(models_v2.Subnet.network_id.in_(network_ids))"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"        for subnet in query:"},{"line_number":238,"context_line":"            if (subnet[\u0027ip_version\u0027] \u003d\u003d 6 and"},{"line_number":239,"context_line":"                subnet[\u0027ipv6_ra_mode\u0027]):"},{"line_number":240,"context_line":"                # If OpenStack dnsmasq sends RA, get link local address of"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F%2BZ3A%3D","line":237,"in_reply_to":"AAAAWH%2F%2BfQM%3D","updated":"2014-03-27 03:37:51.000000000","message":"Done","commit_id":"f8a42ba1931713ed6743cf921e80228fc03be739"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"a1f5cd290f6419a8069cc7fb2d323391c6020558","unresolved":false,"context_lines":[{"line_number":243,"context_line":"                # when router is created before VM instance is booted and"},{"line_number":244,"context_line":"                # subnet is attached to router"},{"line_number":245,"context_line":"                # TODO(xuhanp): Figure out how to call the following code"},{"line_number":246,"context_line":"                # each time router is created or updated"},{"line_number":247,"context_line":"                gateway_ip \u003d subnet[\u0027gateway_ip\u0027]"},{"line_number":248,"context_line":"                if not netaddr.IPAddress(gateway_ip).is_link_local():"},{"line_number":249,"context_line":"                    # gateway IP is global address, get gateway\u0027s link"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F%2BfPQ%3D","line":246,"updated":"2014-03-26 14:06:25.000000000","message":"(L.240-246) Please add a period at the end of sentences and start a sentence with a capital letter. It makes the comment easier to read.","commit_id":"f8a42ba1931713ed6743cf921e80228fc03be739"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"change_message_id":"fd47275e725b3ac8e14d52f00d7c6af2f8badb8e","unresolved":false,"context_lines":[{"line_number":243,"context_line":"                # when router is created before VM instance is booted and"},{"line_number":244,"context_line":"                # subnet is attached to router"},{"line_number":245,"context_line":"                # TODO(xuhanp): Figure out how to call the following code"},{"line_number":246,"context_line":"                # each time router is created or updated"},{"line_number":247,"context_line":"                gateway_ip \u003d subnet[\u0027gateway_ip\u0027]"},{"line_number":248,"context_line":"                if not netaddr.IPAddress(gateway_ip).is_link_local():"},{"line_number":249,"context_line":"                    # gateway IP is global address, get gateway\u0027s link"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F%2BZ2w%3D","line":246,"in_reply_to":"AAAAWH%2F%2BfPQ%3D","updated":"2014-03-27 03:37:51.000000000","message":"Done","commit_id":"f8a42ba1931713ed6743cf921e80228fc03be739"},{"author":{"_account_id":2733,"name":"Darragh O\u0027Reilly","email":"doreilly@suse.com","username":"darragh-oreilly"},"change_message_id":"e0fe11db7629d77a7e80c3da583de221dfc414c3","unresolved":false,"context_lines":[{"line_number":244,"context_line":"                # subnet is attached to router"},{"line_number":245,"context_line":"                # TODO(xuhanp): Figure out how to call the following code"},{"line_number":246,"context_line":"                # each time router is created or updated"},{"line_number":247,"context_line":"                gateway_ip \u003d subnet[\u0027gateway_ip\u0027]"},{"line_number":248,"context_line":"                if not netaddr.IPAddress(gateway_ip).is_link_local():"},{"line_number":249,"context_line":"                    # gateway IP is global address, get gateway\u0027s link"},{"line_number":250,"context_line":"                    # local address by getting the mac address of gateway\u0027s"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F%2BeM0%3D","line":247,"updated":"2014-03-26 15:26:08.000000000","message":"can we be here when subnet[\u0027gateway_ip\u0027] is None? ie when subnet was made with \u0027neutron subnet-create --no-gateway .. \u0027","commit_id":"f8a42ba1931713ed6743cf921e80228fc03be739"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"change_message_id":"fd47275e725b3ac8e14d52f00d7c6af2f8badb8e","unresolved":false,"context_lines":[{"line_number":244,"context_line":"                # subnet is attached to router"},{"line_number":245,"context_line":"                # TODO(xuhanp): Figure out how to call the following code"},{"line_number":246,"context_line":"                # each time router is created or updated"},{"line_number":247,"context_line":"                gateway_ip \u003d subnet[\u0027gateway_ip\u0027]"},{"line_number":248,"context_line":"                if not netaddr.IPAddress(gateway_ip).is_link_local():"},{"line_number":249,"context_line":"                    # gateway IP is global address, get gateway\u0027s link"},{"line_number":250,"context_line":"                    # local address by getting the mac address of gateway\u0027s"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F%2BZzM%3D","line":247,"in_reply_to":"AAAAWH%2F%2BeM0%3D","updated":"2014-03-27 03:37:51.000000000","message":"Thanks for the comment! I will add check if gateway_ip is None and skip the steps if gateway_ip is None. \n\nI will add a unit test for this.","commit_id":"f8a42ba1931713ed6743cf921e80228fc03be739"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"a1f5cd290f6419a8069cc7fb2d323391c6020558","unresolved":false,"context_lines":[{"line_number":245,"context_line":"                # TODO(xuhanp): Figure out how to call the following code"},{"line_number":246,"context_line":"                # each time router is created or updated"},{"line_number":247,"context_line":"                gateway_ip \u003d subnet[\u0027gateway_ip\u0027]"},{"line_number":248,"context_line":"                if not netaddr.IPAddress(gateway_ip).is_link_local():"},{"line_number":249,"context_line":"                    # gateway IP is global address, get gateway\u0027s link"},{"line_number":250,"context_line":"                    # local address by getting the mac address of gateway\u0027s"},{"line_number":251,"context_line":"                    # port, then calculate the global IP by EUI64"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F%2BfEo%3D","line":248,"updated":"2014-03-26 14:06:25.000000000","message":"Consider moving L.249-268 to a separate method.","commit_id":"f8a42ba1931713ed6743cf921e80228fc03be739"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"change_message_id":"fd47275e725b3ac8e14d52f00d7c6af2f8badb8e","unresolved":false,"context_lines":[{"line_number":245,"context_line":"                # TODO(xuhanp): Figure out how to call the following code"},{"line_number":246,"context_line":"                # each time router is created or updated"},{"line_number":247,"context_line":"                gateway_ip \u003d subnet[\u0027gateway_ip\u0027]"},{"line_number":248,"context_line":"                if not netaddr.IPAddress(gateway_ip).is_link_local():"},{"line_number":249,"context_line":"                    # gateway IP is global address, get gateway\u0027s link"},{"line_number":250,"context_line":"                    # local address by getting the mac address of gateway\u0027s"},{"line_number":251,"context_line":"                    # port, then calculate the global IP by EUI64"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F%2BZxw%3D","line":248,"in_reply_to":"AAAAWH%2F%2BfEo%3D","updated":"2014-03-27 03:37:51.000000000","message":"Done","commit_id":"f8a42ba1931713ed6743cf921e80228fc03be739"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"a1f5cd290f6419a8069cc7fb2d323391c6020558","unresolved":false,"context_lines":[{"line_number":254,"context_line":"                    query \u003d query.filter("},{"line_number":255,"context_line":"                        models_v2.IPAllocation.subnet_id \u003d\u003d subnet[\u0027id\u0027])"},{"line_number":256,"context_line":"                    owner \u003d q_const.DEVICE_OWNER_ROUTER_INTF"},{"line_number":257,"context_line":"                    query \u003d query.filter(models_v2.Port.device_owner \u003d\u003d owner)"},{"line_number":258,"context_line":"                    try:"},{"line_number":259,"context_line":"                        gateway_port \u003d query.one()"},{"line_number":260,"context_line":"                    except (exc.MultipleResultsFound, exc.NoResultFound):"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F%2BfLk%3D","line":257,"updated":"2014-03-26 14:06:25.000000000","message":"There is no need a variable \"owner\". Consider:\n\n  query \u003d query.filter(models_v2.Port.device_owner \u003d\u003d\n                       q_const.DEVICE_OWNER_ROUTER_INTF)","commit_id":"f8a42ba1931713ed6743cf921e80228fc03be739"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"change_message_id":"fd47275e725b3ac8e14d52f00d7c6af2f8badb8e","unresolved":false,"context_lines":[{"line_number":254,"context_line":"                    query \u003d query.filter("},{"line_number":255,"context_line":"                        models_v2.IPAllocation.subnet_id \u003d\u003d subnet[\u0027id\u0027])"},{"line_number":256,"context_line":"                    owner \u003d q_const.DEVICE_OWNER_ROUTER_INTF"},{"line_number":257,"context_line":"                    query \u003d query.filter(models_v2.Port.device_owner \u003d\u003d owner)"},{"line_number":258,"context_line":"                    try:"},{"line_number":259,"context_line":"                        gateway_port \u003d query.one()"},{"line_number":260,"context_line":"                    except (exc.MultipleResultsFound, exc.NoResultFound):"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F%2BZxo%3D","line":257,"in_reply_to":"AAAAWH%2F%2BfLk%3D","updated":"2014-03-27 03:37:51.000000000","message":"Done","commit_id":"f8a42ba1931713ed6743cf921e80228fc03be739"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"a1f5cd290f6419a8069cc7fb2d323391c6020558","unresolved":false,"context_lines":[{"line_number":257,"context_line":"                    query \u003d query.filter(models_v2.Port.device_owner \u003d\u003d owner)"},{"line_number":258,"context_line":"                    try:"},{"line_number":259,"context_line":"                        gateway_port \u003d query.one()"},{"line_number":260,"context_line":"                    except (exc.MultipleResultsFound, exc.NoResultFound):"},{"line_number":261,"context_line":"                        LOG.debug(_(\u0027No valid gateway IP on subnet %s is \u0027"},{"line_number":262,"context_line":"                                    \u0027found for IPv6 RA\u0027),"},{"line_number":263,"context_line":"                                  subnet[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F%2BfKE%3D","line":260,"updated":"2014-03-26 14:06:25.000000000","message":"question: When a gateway_ip is link local, is only one router-interface for the subnet allowed?","commit_id":"f8a42ba1931713ed6743cf921e80228fc03be739"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"e675a2362b24096eac747c6078959558b051b7b8","unresolved":false,"context_lines":[{"line_number":257,"context_line":"                    query \u003d query.filter(models_v2.Port.device_owner \u003d\u003d owner)"},{"line_number":258,"context_line":"                    try:"},{"line_number":259,"context_line":"                        gateway_port \u003d query.one()"},{"line_number":260,"context_line":"                    except (exc.MultipleResultsFound, exc.NoResultFound):"},{"line_number":261,"context_line":"                        LOG.debug(_(\u0027No valid gateway IP on subnet %s is \u0027"},{"line_number":262,"context_line":"                                    \u0027found for IPv6 RA\u0027),"},{"line_number":263,"context_line":"                                  subnet[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F%2BYZY%3D","line":260,"in_reply_to":"AAAAWH%2F%2BZg8%3D","updated":"2014-03-27 07:45:48.000000000","message":"We need to consider a case where router-interface-add command takes port-id as second argument. We can check it by invoking \"neutron router-interface-add --help\".\n\nrouter-interface-add with port-id is used to connect a subnet to multiple routers. IMO we need to handle MultipleResultsFound.","commit_id":"f8a42ba1931713ed6743cf921e80228fc03be739"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"change_message_id":"fd47275e725b3ac8e14d52f00d7c6af2f8badb8e","unresolved":false,"context_lines":[{"line_number":257,"context_line":"                    query \u003d query.filter(models_v2.Port.device_owner \u003d\u003d owner)"},{"line_number":258,"context_line":"                    try:"},{"line_number":259,"context_line":"                        gateway_port \u003d query.one()"},{"line_number":260,"context_line":"                    except (exc.MultipleResultsFound, exc.NoResultFound):"},{"line_number":261,"context_line":"                        LOG.debug(_(\u0027No valid gateway IP on subnet %s is \u0027"},{"line_number":262,"context_line":"                                    \u0027found for IPv6 RA\u0027),"},{"line_number":263,"context_line":"                                  subnet[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F%2BZg8%3D","line":260,"in_reply_to":"AAAAWH%2F%2BfKE%3D","updated":"2014-03-27 03:37:51.000000000","message":"I just did some tests about this. You cannot attach subnet to multiple routers. You will get an error like this:\n\nneutron router-interface-add router2 68999cf5-77cf-4830-b70c-fb9c61e5d02e\nUnable to complete operation for network ffd3c21a-3c7b-4f19-b7d5-f3d4303e36b7. The IP address 10.0.1.1 is in use.\n\nI will just remove the exception of MultipleResultsFound. thoughts?","commit_id":"f8a42ba1931713ed6743cf921e80228fc03be739"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"a1f5cd290f6419a8069cc7fb2d323391c6020558","unresolved":false,"context_lines":[{"line_number":259,"context_line":"                        gateway_port \u003d query.one()"},{"line_number":260,"context_line":"                    except (exc.MultipleResultsFound, exc.NoResultFound):"},{"line_number":261,"context_line":"                        LOG.debug(_(\u0027No valid gateway IP on subnet %s is \u0027"},{"line_number":262,"context_line":"                                    \u0027found for IPv6 RA\u0027),"},{"line_number":263,"context_line":"                                  subnet[\u0027id\u0027])"},{"line_number":264,"context_line":"                        continue"},{"line_number":265,"context_line":"                    mac_address \u003d gateway_port[\u0027mac_address\u0027]"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F%2BfJE%3D","line":262,"updated":"2014-03-26 14:06:25.000000000","message":"This exception can be raised due to user input. Isn\u0027t it better to check if a subnet has multiple router interfaces when router-interface-add?\n\nIn addition, higher log level looks suitable in this case. debug level message can hide an user error.\n\nI think we have different log messages for MultipleResultFound and NoResultFound.","commit_id":"f8a42ba1931713ed6743cf921e80228fc03be739"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"change_message_id":"fd47275e725b3ac8e14d52f00d7c6af2f8badb8e","unresolved":false,"context_lines":[{"line_number":259,"context_line":"                        gateway_port \u003d query.one()"},{"line_number":260,"context_line":"                    except (exc.MultipleResultsFound, exc.NoResultFound):"},{"line_number":261,"context_line":"                        LOG.debug(_(\u0027No valid gateway IP on subnet %s is \u0027"},{"line_number":262,"context_line":"                                    \u0027found for IPv6 RA\u0027),"},{"line_number":263,"context_line":"                                  subnet[\u0027id\u0027])"},{"line_number":264,"context_line":"                        continue"},{"line_number":265,"context_line":"                    mac_address \u003d gateway_port[\u0027mac_address\u0027]"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F%2BZg0%3D","line":262,"in_reply_to":"AAAAWH%2F%2BfJE%3D","updated":"2014-03-27 03:37:51.000000000","message":"see above comment about MultipleResultsFound. \n\nI will change debug to warning.","commit_id":"f8a42ba1931713ed6743cf921e80228fc03be739"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"a1f5cd290f6419a8069cc7fb2d323391c6020558","unresolved":false,"context_lines":[{"line_number":266,"context_line":"                    gateway_ip \u003d str(ipv6.get_ipv6_addr_by_EUI64("},{"line_number":267,"context_line":"                        q_const.IPV6_LLA_PREFIX,"},{"line_number":268,"context_line":"                        mac_address))"},{"line_number":269,"context_line":"                ips[subnet[\u0027network_id\u0027]].append(gateway_ip)"},{"line_number":270,"context_line":"            elif subnet[\u0027ip_version\u0027] \u003d\u003d 6:"},{"line_number":271,"context_line":"                # If OpenStack doesn\u0027t send RA, allow RA from gateway IP"},{"line_number":272,"context_line":"                # Currently, the gateway IP needs to be link local to be able"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F%2BfFI%3D","line":269,"updated":"2014-03-26 14:06:25.000000000","message":"Don\u0027t we need a same check as L.279?","commit_id":"f8a42ba1931713ed6743cf921e80228fc03be739"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"change_message_id":"fd47275e725b3ac8e14d52f00d7c6af2f8badb8e","unresolved":false,"context_lines":[{"line_number":266,"context_line":"                    gateway_ip \u003d str(ipv6.get_ipv6_addr_by_EUI64("},{"line_number":267,"context_line":"                        q_const.IPV6_LLA_PREFIX,"},{"line_number":268,"context_line":"                        mac_address))"},{"line_number":269,"context_line":"                ips[subnet[\u0027network_id\u0027]].append(gateway_ip)"},{"line_number":270,"context_line":"            elif subnet[\u0027ip_version\u0027] \u003d\u003d 6:"},{"line_number":271,"context_line":"                # If OpenStack doesn\u0027t send RA, allow RA from gateway IP"},{"line_number":272,"context_line":"                # Currently, the gateway IP needs to be link local to be able"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F%2BZpM%3D","line":269,"in_reply_to":"AAAAWH%2F%2BfFI%3D","updated":"2014-03-27 03:37:51.000000000","message":"Done","commit_id":"f8a42ba1931713ed6743cf921e80228fc03be739"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"a1f5cd290f6419a8069cc7fb2d323391c6020558","unresolved":false,"context_lines":[{"line_number":273,"context_line":"                # to send RA to VM."},{"line_number":274,"context_line":"                # TODO(xuhanp):Figure out how to allow gateway IP from existing"},{"line_number":275,"context_line":"                # device to be global address and figure out the link local"},{"line_number":276,"context_line":"                # address by other method"},{"line_number":277,"context_line":"                gateway_ip \u003d subnet[\u0027gateway_ip\u0027]"},{"line_number":278,"context_line":"                network \u003d subnet[\u0027network_id\u0027]"},{"line_number":279,"context_line":"                if gateway_ip not in ips[network]:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F%2BfHA%3D","line":276,"updated":"2014-03-26 14:06:25.000000000","message":"Please add a period at the end of sentences and start a sentence with a capital letter. It makes the comment easier to read.","commit_id":"f8a42ba1931713ed6743cf921e80228fc03be739"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"change_message_id":"fd47275e725b3ac8e14d52f00d7c6af2f8badb8e","unresolved":false,"context_lines":[{"line_number":273,"context_line":"                # to send RA to VM."},{"line_number":274,"context_line":"                # TODO(xuhanp):Figure out how to allow gateway IP from existing"},{"line_number":275,"context_line":"                # device to be global address and figure out the link local"},{"line_number":276,"context_line":"                # address by other method"},{"line_number":277,"context_line":"                gateway_ip \u003d subnet[\u0027gateway_ip\u0027]"},{"line_number":278,"context_line":"                network \u003d subnet[\u0027network_id\u0027]"},{"line_number":279,"context_line":"                if gateway_ip not in ips[network]:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F%2BZlg%3D","line":276,"in_reply_to":"AAAAWH%2F%2BfHA%3D","updated":"2014-03-27 03:37:51.000000000","message":"Done","commit_id":"f8a42ba1931713ed6743cf921e80228fc03be739"},{"author":{"_account_id":2733,"name":"Darragh O\u0027Reilly","email":"doreilly@suse.com","username":"darragh-oreilly"},"change_message_id":"e0fe11db7629d77a7e80c3da583de221dfc414c3","unresolved":false,"context_lines":[{"line_number":274,"context_line":"                # TODO(xuhanp):Figure out how to allow gateway IP from existing"},{"line_number":275,"context_line":"                # device to be global address and figure out the link local"},{"line_number":276,"context_line":"                # address by other method"},{"line_number":277,"context_line":"                gateway_ip \u003d subnet[\u0027gateway_ip\u0027]"},{"line_number":278,"context_line":"                network \u003d subnet[\u0027network_id\u0027]"},{"line_number":279,"context_line":"                if gateway_ip not in ips[network]:"},{"line_number":280,"context_line":"                    ips[network].append(gateway_ip)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F%2BeVI%3D","line":277,"updated":"2014-03-26 15:26:08.000000000","message":"subnet[\u0027gateway_ip\u0027] can be None","commit_id":"f8a42ba1931713ed6743cf921e80228fc03be739"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"change_message_id":"fd47275e725b3ac8e14d52f00d7c6af2f8badb8e","unresolved":false,"context_lines":[{"line_number":274,"context_line":"                # TODO(xuhanp):Figure out how to allow gateway IP from existing"},{"line_number":275,"context_line":"                # device to be global address and figure out the link local"},{"line_number":276,"context_line":"                # address by other method"},{"line_number":277,"context_line":"                gateway_ip \u003d subnet[\u0027gateway_ip\u0027]"},{"line_number":278,"context_line":"                network \u003d subnet[\u0027network_id\u0027]"},{"line_number":279,"context_line":"                if gateway_ip not in ips[network]:"},{"line_number":280,"context_line":"                    ips[network].append(gateway_ip)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F%2BZog%3D","line":277,"in_reply_to":"AAAAWH%2F%2BeVI%3D","updated":"2014-03-27 03:37:51.000000000","message":"Done","commit_id":"f8a42ba1931713ed6743cf921e80228fc03be739"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"a1f5cd290f6419a8069cc7fb2d323391c6020558","unresolved":false,"context_lines":[{"line_number":277,"context_line":"                gateway_ip \u003d subnet[\u0027gateway_ip\u0027]"},{"line_number":278,"context_line":"                network \u003d subnet[\u0027network_id\u0027]"},{"line_number":279,"context_line":"                if gateway_ip not in ips[network]:"},{"line_number":280,"context_line":"                    ips[network].append(gateway_ip)"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"        return ips"},{"line_number":283,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F%2BfBc%3D","line":280,"updated":"2014-03-26 14:06:25.000000000","message":"Please consider using a set.\n\nChange L.233 to:\n\n  ips[network_id] \u003d set([])\n\nand L.278-280 to:\n\n  ips[subnet[\u0027network_id\u0027]].add(gateway_ip)","commit_id":"f8a42ba1931713ed6743cf921e80228fc03be739"},{"author":{"_account_id":2733,"name":"Darragh O\u0027Reilly","email":"doreilly@suse.com","username":"darragh-oreilly"},"change_message_id":"e0fe11db7629d77a7e80c3da583de221dfc414c3","unresolved":false,"context_lines":[{"line_number":277,"context_line":"                gateway_ip \u003d subnet[\u0027gateway_ip\u0027]"},{"line_number":278,"context_line":"                network \u003d subnet[\u0027network_id\u0027]"},{"line_number":279,"context_line":"                if gateway_ip not in ips[network]:"},{"line_number":280,"context_line":"                    ips[network].append(gateway_ip)"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"        return ips"},{"line_number":283,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F%2BeQE%3D","line":280,"in_reply_to":"AAAAWH%2F%2BfBc%3D","updated":"2014-03-26 15:26:08.000000000","message":"+1","commit_id":"f8a42ba1931713ed6743cf921e80228fc03be739"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"change_message_id":"fd47275e725b3ac8e14d52f00d7c6af2f8badb8e","unresolved":false,"context_lines":[{"line_number":277,"context_line":"                gateway_ip \u003d subnet[\u0027gateway_ip\u0027]"},{"line_number":278,"context_line":"                network \u003d subnet[\u0027network_id\u0027]"},{"line_number":279,"context_line":"                if gateway_ip not in ips[network]:"},{"line_number":280,"context_line":"                    ips[network].append(gateway_ip)"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"        return ips"},{"line_number":283,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F%2BZjw%3D","line":280,"in_reply_to":"AAAAWH%2F%2BfBc%3D","updated":"2014-03-27 03:37:51.000000000","message":"Done","commit_id":"f8a42ba1931713ed6743cf921e80228fc03be739"},{"author":{"_account_id":2733,"name":"Darragh O\u0027Reilly","email":"doreilly@suse.com","username":"darragh-oreilly"},"change_message_id":"2b15ecab80c7c6771232ac0970f2aaaeb11f6362","unresolved":false,"context_lines":[{"line_number":231,"context_line":"        for network_id in network_ids:"},{"line_number":232,"context_line":"            ips[network_id] \u003d set([])"},{"line_number":233,"context_line":"        query \u003d context.session.query(models_v2.Subnet)"},{"line_number":234,"context_line":"        query \u003d query.filter(models_v2.Subnet.network_id.in_(network_ids))"},{"line_number":235,"context_line":"        for subnet in query:"},{"line_number":236,"context_line":"            gateway_ip \u003d subnet[\u0027gateway_ip\u0027]"},{"line_number":237,"context_line":"            if subnet[\u0027ip_version\u0027] !\u003d 6 or not gateway_ip:"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAWH%2F%2BXfw%3D","line":234,"updated":"2014-03-27 12:20:52.000000000","message":"I think this would be better:\n\n    subnets \u003d query.filter(...)\n    for subnet in subnets:","commit_id":"35f0a1295e8c30dd2373c81f5befe4c7c97492fb"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"change_message_id":"26ddbeae58d7911ccd5af3a14507c97db47d64e9","unresolved":false,"context_lines":[{"line_number":231,"context_line":"        for network_id in network_ids:"},{"line_number":232,"context_line":"            ips[network_id] \u003d set([])"},{"line_number":233,"context_line":"        query \u003d context.session.query(models_v2.Subnet)"},{"line_number":234,"context_line":"        query \u003d query.filter(models_v2.Subnet.network_id.in_(network_ids))"},{"line_number":235,"context_line":"        for subnet in query:"},{"line_number":236,"context_line":"            gateway_ip \u003d subnet[\u0027gateway_ip\u0027]"},{"line_number":237,"context_line":"            if subnet[\u0027ip_version\u0027] !\u003d 6 or not gateway_ip:"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAWH%2F%2BQiE%3D","line":234,"in_reply_to":"AAAAWH%2F%2BXfw%3D","updated":"2014-03-28 02:46:39.000000000","message":"Done","commit_id":"35f0a1295e8c30dd2373c81f5befe4c7c97492fb"},{"author":{"_account_id":2733,"name":"Darragh O\u0027Reilly","email":"doreilly@suse.com","username":"darragh-oreilly"},"change_message_id":"2b15ecab80c7c6771232ac0970f2aaaeb11f6362","unresolved":false,"context_lines":[{"line_number":255,"context_line":"                                                                 subnet)"},{"line_number":256,"context_line":"            if gateway_ip:"},{"line_number":257,"context_line":"                ips[subnet[\u0027network_id\u0027]].add(gateway_ip)"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"        return ips"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"    def _get_lla_gateway_ip_for_subnet(self, context, subnet):"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAWH%2F%2BXdQ%3D","line":258,"updated":"2014-03-27 12:20:52.000000000","message":"When ipv6_ra_mode is not set, and the subnet\u0027s gateway_ip is not a LLA, we should not be adding it.","commit_id":"35f0a1295e8c30dd2373c81f5befe4c7c97492fb"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"change_message_id":"26ddbeae58d7911ccd5af3a14507c97db47d64e9","unresolved":false,"context_lines":[{"line_number":255,"context_line":"                                                                 subnet)"},{"line_number":256,"context_line":"            if gateway_ip:"},{"line_number":257,"context_line":"                ips[subnet[\u0027network_id\u0027]].add(gateway_ip)"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"        return ips"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"    def _get_lla_gateway_ip_for_subnet(self, context, subnet):"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAWH%2F%2BQiM%3D","line":258,"in_reply_to":"AAAAWH%2F%2BXdQ%3D","updated":"2014-03-28 02:46:39.000000000","message":"Done","commit_id":"35f0a1295e8c30dd2373c81f5befe4c7c97492fb"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9c842c3ce3c8ba0fe68041d74c684f828ce4d8a6","unresolved":false,"context_lines":[{"line_number":267,"context_line":"                             q_const.DEVICE_OWNER_ROUTER_INTF)"},{"line_number":268,"context_line":"        try:"},{"line_number":269,"context_line":"            gateway_port \u003d query.one()"},{"line_number":270,"context_line":"        except (exc.NoResultFound):"},{"line_number":271,"context_line":"            LOG.warn(_(\u0027No valid gateway port on subnet %s is \u0027"},{"line_number":272,"context_line":"                       \u0027found for IPv6 RA\u0027), subnet[\u0027id\u0027])"},{"line_number":273,"context_line":"            return None"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAWH%2F%2BYXk%3D","line":270,"updated":"2014-03-27 13:14:15.000000000","message":"As I replied in the previous patch set, MultipleResultsFound needs to be considered. Do we need to filter query by gateway_ip too?","commit_id":"35f0a1295e8c30dd2373c81f5befe4c7c97492fb"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"change_message_id":"6ecd15f5301ef3d258dd7d4b0f103f72d1f17d28","unresolved":false,"context_lines":[{"line_number":267,"context_line":"                             q_const.DEVICE_OWNER_ROUTER_INTF)"},{"line_number":268,"context_line":"        try:"},{"line_number":269,"context_line":"            gateway_port \u003d query.one()"},{"line_number":270,"context_line":"        except (exc.NoResultFound):"},{"line_number":271,"context_line":"            LOG.warn(_(\u0027No valid gateway port on subnet %s is \u0027"},{"line_number":272,"context_line":"                       \u0027found for IPv6 RA\u0027), subnet[\u0027id\u0027])"},{"line_number":273,"context_line":"            return None"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAWH%2F%2BHfI%3D","line":270,"in_reply_to":"AAAAWH%2F%2BNUQ%3D","updated":"2014-03-29 09:27:37.000000000","message":"Akihiro, thanks a lot for your detailed explanation! I will address this in a new patch.","commit_id":"35f0a1295e8c30dd2373c81f5befe4c7c97492fb"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"34172583f155c056dabb3d3a56dc30072d9ecd02","unresolved":false,"context_lines":[{"line_number":267,"context_line":"                             q_const.DEVICE_OWNER_ROUTER_INTF)"},{"line_number":268,"context_line":"        try:"},{"line_number":269,"context_line":"            gateway_port \u003d query.one()"},{"line_number":270,"context_line":"        except (exc.NoResultFound):"},{"line_number":271,"context_line":"            LOG.warn(_(\u0027No valid gateway port on subnet %s is \u0027"},{"line_number":272,"context_line":"                       \u0027found for IPv6 RA\u0027), subnet[\u0027id\u0027])"},{"line_number":273,"context_line":"            return None"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAWH%2F%2BNUQ%3D","line":270,"in_reply_to":"AAAAWH%2F%2BQYs%3D","updated":"2014-03-28 12:15:22.000000000","message":"If adding gateway IP to query, multipleResultsFound becomes an invalid case. I would suggest to add MultipleResultsFound to the exception list here.\n\n  except (exc.NoResultFound, exc.MultipleResultsFound):\n\nRegarding a use case for multiple router intercases, the following cases are possible:\n\n[1] A case where a subnet is connected to an external network to the Internet and to private network over VPN\n\n    subnet1 --- router1 -- external network (Internet)\n            +--- router2 (VPN) --- private network (Intranet)\n\n[2] Another case is a subnet is connected to multiple networks. In the above case, subnet2 has two router interface.\n\n    subnet1 -- router -- subnet2 -- router -- external network (Internet)","commit_id":"35f0a1295e8c30dd2373c81f5befe4c7c97492fb"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"change_message_id":"26ddbeae58d7911ccd5af3a14507c97db47d64e9","unresolved":false,"context_lines":[{"line_number":267,"context_line":"                             q_const.DEVICE_OWNER_ROUTER_INTF)"},{"line_number":268,"context_line":"        try:"},{"line_number":269,"context_line":"            gateway_port \u003d query.one()"},{"line_number":270,"context_line":"        except (exc.NoResultFound):"},{"line_number":271,"context_line":"            LOG.warn(_(\u0027No valid gateway port on subnet %s is \u0027"},{"line_number":272,"context_line":"                       \u0027found for IPv6 RA\u0027), subnet[\u0027id\u0027])"},{"line_number":273,"context_line":"            return None"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAWH%2F%2BQYs%3D","line":270,"in_reply_to":"AAAAWH%2F%2BYXk%3D","updated":"2014-03-28 02:46:39.000000000","message":"I tried this today and you are right, there could be multiple router interface ports record in database for one subnet. I guess using gateway IP to query the gateway port device will result a single record. I don\u0027t think we need to deal with multipleResultsFound anymore if we add gateway IP to query. Agree?\n\nBTW, is there any use case for allowing multiple router interfaces in one subnet?  Should this actually be allowed?","commit_id":"35f0a1295e8c30dd2373c81f5befe4c7c97492fb"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9c842c3ce3c8ba0fe68041d74c684f828ce4d8a6","unresolved":false,"context_lines":[{"line_number":270,"context_line":"        except (exc.NoResultFound):"},{"line_number":271,"context_line":"            LOG.warn(_(\u0027No valid gateway port on subnet %s is \u0027"},{"line_number":272,"context_line":"                       \u0027found for IPv6 RA\u0027), subnet[\u0027id\u0027])"},{"line_number":273,"context_line":"            return None"},{"line_number":274,"context_line":"        mac_address \u003d gateway_port[\u0027mac_address\u0027]"},{"line_number":275,"context_line":"        lla_ip \u003d str(ipv6.get_ipv6_addr_by_EUI64("},{"line_number":276,"context_line":"            q_const.IPV6_LLA_PREFIX,"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAWH%2F%2BYWs%3D","line":273,"updated":"2014-03-27 13:14:15.000000000","message":"Really nit: just \"return\".","commit_id":"35f0a1295e8c30dd2373c81f5befe4c7c97492fb"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"change_message_id":"26ddbeae58d7911ccd5af3a14507c97db47d64e9","unresolved":false,"context_lines":[{"line_number":270,"context_line":"        except (exc.NoResultFound):"},{"line_number":271,"context_line":"            LOG.warn(_(\u0027No valid gateway port on subnet %s is \u0027"},{"line_number":272,"context_line":"                       \u0027found for IPv6 RA\u0027), subnet[\u0027id\u0027])"},{"line_number":273,"context_line":"            return None"},{"line_number":274,"context_line":"        mac_address \u003d gateway_port[\u0027mac_address\u0027]"},{"line_number":275,"context_line":"        lla_ip \u003d str(ipv6.get_ipv6_addr_by_EUI64("},{"line_number":276,"context_line":"            q_const.IPV6_LLA_PREFIX,"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAWH%2F%2BQiQ%3D","line":273,"in_reply_to":"AAAAWH%2F%2BYWs%3D","updated":"2014-03-28 02:46:39.000000000","message":"Done","commit_id":"35f0a1295e8c30dd2373c81f5befe4c7c97492fb"},{"author":{"_account_id":2733,"name":"Darragh O\u0027Reilly","email":"doreilly@suse.com","username":"darragh-oreilly"},"change_message_id":"8fc12495d6d45cd70b3b24a74b5a3611104433d6","unresolved":false,"context_lines":[{"line_number":246,"context_line":"                # when router is created before VM instance is booted and"},{"line_number":247,"context_line":"                # subnet is attached to router."},{"line_number":248,"context_line":"                # TODO(xuhanp): Figure out how to call the following code"},{"line_number":249,"context_line":"                # each time router is created or updated."},{"line_number":250,"context_line":"                else:"},{"line_number":251,"context_line":"                # If OpenStack doesn\u0027t send RA, allow RA from gateway IP."},{"line_number":252,"context_line":"                # Currently, the gateway IP needs to be link local to be able"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2BO%2Fw%3D","line":249,"updated":"2014-03-28 08:37:39.000000000","message":"I think this comment L243-249 would be better placed as the docstring.","commit_id":"b8ffa0eeea701efd91d30a6b91ffe4091a51dae8"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"change_message_id":"21e97965290a949660254a87a96548aa5b303941","unresolved":false,"context_lines":[{"line_number":246,"context_line":"                # when router is created before VM instance is booted and"},{"line_number":247,"context_line":"                # subnet is attached to router."},{"line_number":248,"context_line":"                # TODO(xuhanp): Figure out how to call the following code"},{"line_number":249,"context_line":"                # each time router is created or updated."},{"line_number":250,"context_line":"                else:"},{"line_number":251,"context_line":"                # If OpenStack doesn\u0027t send RA, allow RA from gateway IP."},{"line_number":252,"context_line":"                # Currently, the gateway IP needs to be link local to be able"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2BE4c%3D","line":249,"in_reply_to":"AAAAWH%2F%2BO%2Fw%3D","updated":"2014-03-31 02:40:39.000000000","message":"Done","commit_id":"b8ffa0eeea701efd91d30a6b91ffe4091a51dae8"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"change_message_id":"8fd1c22de99d7a1046860d251252b9c8d1e58b6d","unresolved":false,"context_lines":[{"line_number":246,"context_line":"                # when router is created before VM instance is booted and"},{"line_number":247,"context_line":"                # subnet is attached to router."},{"line_number":248,"context_line":"                # TODO(xuhanp): Figure out how to call the following code"},{"line_number":249,"context_line":"                # each time router is created or updated."},{"line_number":250,"context_line":"                else:"},{"line_number":251,"context_line":"                # If OpenStack doesn\u0027t send RA, allow RA from gateway IP."},{"line_number":252,"context_line":"                # Currently, the gateway IP needs to be link local to be able"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2BOT8%3D","line":249,"in_reply_to":"AAAAWH%2F%2BO%2Fw%3D","updated":"2014-03-28 09:47:46.000000000","message":"will change in next patch","commit_id":"b8ffa0eeea701efd91d30a6b91ffe4091a51dae8"},{"author":{"_account_id":2733,"name":"Darragh O\u0027Reilly","email":"doreilly@suse.com","username":"darragh-oreilly"},"change_message_id":"8fc12495d6d45cd70b3b24a74b5a3611104433d6","unresolved":false,"context_lines":[{"line_number":250,"context_line":"                else:"},{"line_number":251,"context_line":"                # If OpenStack doesn\u0027t send RA, allow RA from gateway IP."},{"line_number":252,"context_line":"                # Currently, the gateway IP needs to be link local to be able"},{"line_number":253,"context_line":"                # to send RA to VM."},{"line_number":254,"context_line":"                # TODO(xuhanp):Figure out how to allow gateway IP from existing"},{"line_number":255,"context_line":"                # device to be global address and figure out the link local"},{"line_number":256,"context_line":"                # address by other method."}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2BO%2B8%3D","line":253,"updated":"2014-03-28 08:37:39.000000000","message":"Maybe move to the docstring too. The indentation looks funny here too - I think it should be inline with the continue statement below.","commit_id":"b8ffa0eeea701efd91d30a6b91ffe4091a51dae8"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"change_message_id":"21e97965290a949660254a87a96548aa5b303941","unresolved":false,"context_lines":[{"line_number":250,"context_line":"                else:"},{"line_number":251,"context_line":"                # If OpenStack doesn\u0027t send RA, allow RA from gateway IP."},{"line_number":252,"context_line":"                # Currently, the gateway IP needs to be link local to be able"},{"line_number":253,"context_line":"                # to send RA to VM."},{"line_number":254,"context_line":"                # TODO(xuhanp):Figure out how to allow gateway IP from existing"},{"line_number":255,"context_line":"                # device to be global address and figure out the link local"},{"line_number":256,"context_line":"                # address by other method."}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2BE4g%3D","line":253,"in_reply_to":"AAAAWH%2F%2BO%2B8%3D","updated":"2014-03-31 02:40:39.000000000","message":"Done","commit_id":"b8ffa0eeea701efd91d30a6b91ffe4091a51dae8"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"change_message_id":"8fd1c22de99d7a1046860d251252b9c8d1e58b6d","unresolved":false,"context_lines":[{"line_number":250,"context_line":"                else:"},{"line_number":251,"context_line":"                # If OpenStack doesn\u0027t send RA, allow RA from gateway IP."},{"line_number":252,"context_line":"                # Currently, the gateway IP needs to be link local to be able"},{"line_number":253,"context_line":"                # to send RA to VM."},{"line_number":254,"context_line":"                # TODO(xuhanp):Figure out how to allow gateway IP from existing"},{"line_number":255,"context_line":"                # device to be global address and figure out the link local"},{"line_number":256,"context_line":"                # address by other method."}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2BOT4%3D","line":253,"in_reply_to":"AAAAWH%2F%2BO%2B8%3D","updated":"2014-03-28 09:47:46.000000000","message":"will change in next patch.","commit_id":"b8ffa0eeea701efd91d30a6b91ffe4091a51dae8"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"ebbf4f4246d4a2000b0e8eb61c1fefac065a53db","unresolved":false,"context_lines":[{"line_number":271,"context_line":"                             q_const.DEVICE_OWNER_ROUTER_INTF)"},{"line_number":272,"context_line":"        try:"},{"line_number":273,"context_line":"            gateway_port \u003d query.one()"},{"line_number":274,"context_line":"        except (exc.NoResultFound):"},{"line_number":275,"context_line":"            LOG.warn(_(\u0027No valid gateway port on subnet %s is \u0027"},{"line_number":276,"context_line":"                       \u0027found for IPv6 RA\u0027), subnet[\u0027id\u0027])"},{"line_number":277,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2BNSY%3D","line":274,"updated":"2014-03-28 12:18:34.000000000","message":"As I replied in the previous patch set,  Please add MultipleResultsFound here. Now we have gateway_ip in the query, a case of multiple results is invalid.\n\n  except (exc.NoResultFound, exc.MultipleResultsFound):","commit_id":"b8ffa0eeea701efd91d30a6b91ffe4091a51dae8"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"change_message_id":"b510632785c1d60cfa70da9b93029a189e69a8df","unresolved":false,"context_lines":[{"line_number":271,"context_line":"                             q_const.DEVICE_OWNER_ROUTER_INTF)"},{"line_number":272,"context_line":"        try:"},{"line_number":273,"context_line":"            gateway_port \u003d query.one()"},{"line_number":274,"context_line":"        except (exc.NoResultFound):"},{"line_number":275,"context_line":"            LOG.warn(_(\u0027No valid gateway port on subnet %s is \u0027"},{"line_number":276,"context_line":"                       \u0027found for IPv6 RA\u0027), subnet[\u0027id\u0027])"},{"line_number":277,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2BHfQ%3D","line":274,"in_reply_to":"AAAAWH%2F%2BNSY%3D","updated":"2014-03-29 09:27:54.000000000","message":"Akihiro, I will add in next patch.","commit_id":"b8ffa0eeea701efd91d30a6b91ffe4091a51dae8"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"change_message_id":"21e97965290a949660254a87a96548aa5b303941","unresolved":false,"context_lines":[{"line_number":271,"context_line":"                             q_const.DEVICE_OWNER_ROUTER_INTF)"},{"line_number":272,"context_line":"        try:"},{"line_number":273,"context_line":"            gateway_port \u003d query.one()"},{"line_number":274,"context_line":"        except (exc.NoResultFound):"},{"line_number":275,"context_line":"            LOG.warn(_(\u0027No valid gateway port on subnet %s is \u0027"},{"line_number":276,"context_line":"                       \u0027found for IPv6 RA\u0027), subnet[\u0027id\u0027])"},{"line_number":277,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2BE4o%3D","line":274,"in_reply_to":"AAAAWH%2F%2BNSY%3D","updated":"2014-03-31 02:40:39.000000000","message":"Done","commit_id":"b8ffa0eeea701efd91d30a6b91ffe4091a51dae8"},{"author":{"_account_id":2733,"name":"Darragh O\u0027Reilly","email":"doreilly@suse.com","username":"darragh-oreilly"},"change_message_id":"675952c4464773d89d935bf225a5cc658d14e255","unresolved":false,"context_lines":[{"line_number":335,"context_line":""},{"line_number":336,"context_line":"            ra_rule \u003d {\u0027direction\u0027: \u0027ingress\u0027,"},{"line_number":337,"context_line":"                       \u0027ethertype\u0027: q_const.IPv6,"},{"line_number":338,"context_line":"                       \u0027protocol\u0027: \u0027icmp\u0027}"},{"line_number":339,"context_line":"            ra_rule[\u0027source_ip_prefix\u0027] \u003d ra_ip"},{"line_number":340,"context_line":"            port[\u0027security_group_rules\u0027].append(ra_rule)"},{"line_number":341,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2BHXs%3D","line":338,"updated":"2014-03-29 12:03:24.000000000","message":"sorry, I only noticed this now, and you did not introduce it with this patch. The name of this method on L330 implies that it is for the ingress RA rule (134) specifically. But actually it allows all ipv6 icmp here.","commit_id":"b8ffa0eeea701efd91d30a6b91ffe4091a51dae8"},{"author":{"_account_id":2733,"name":"Darragh O\u0027Reilly","email":"doreilly@suse.com","username":"darragh-oreilly"},"change_message_id":"deb5dcccf49a61b0aec882c4ea0eabf789eb073d","unresolved":false,"context_lines":[{"line_number":335,"context_line":""},{"line_number":336,"context_line":"            ra_rule \u003d {\u0027direction\u0027: \u0027ingress\u0027,"},{"line_number":337,"context_line":"                       \u0027ethertype\u0027: q_const.IPv6,"},{"line_number":338,"context_line":"                       \u0027protocol\u0027: \u0027icmp\u0027}"},{"line_number":339,"context_line":"            ra_rule[\u0027source_ip_prefix\u0027] \u003d ra_ip"},{"line_number":340,"context_line":"            port[\u0027security_group_rules\u0027].append(ra_rule)"},{"line_number":341,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2BDBw%3D","line":338,"in_reply_to":"AAAAWH%2F%2BE3g%3D","updated":"2014-03-31 09:55:05.000000000","message":"Ok. So you could have made this patch depend on 78835.","commit_id":"b8ffa0eeea701efd91d30a6b91ffe4091a51dae8"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"change_message_id":"21e97965290a949660254a87a96548aa5b303941","unresolved":false,"context_lines":[{"line_number":335,"context_line":""},{"line_number":336,"context_line":"            ra_rule \u003d {\u0027direction\u0027: \u0027ingress\u0027,"},{"line_number":337,"context_line":"                       \u0027ethertype\u0027: q_const.IPv6,"},{"line_number":338,"context_line":"                       \u0027protocol\u0027: \u0027icmp\u0027}"},{"line_number":339,"context_line":"            ra_rule[\u0027source_ip_prefix\u0027] \u003d ra_ip"},{"line_number":340,"context_line":"            port[\u0027security_group_rules\u0027].append(ra_rule)"},{"line_number":341,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2BE3g%3D","line":338,"in_reply_to":"AAAAWH%2F%2BHXs%3D","updated":"2014-03-31 02:40:39.000000000","message":"Darragh, you are absolutely right! the ICMP type was not working before my commit https://review.openstack.org/#/c/78835/ was merged, that\u0027s the reason I didn\u0027t add the RA type here before. Now after that patch was merged, I forgot to add the type in this patch. Thanks for pointing this out!","commit_id":"b8ffa0eeea701efd91d30a6b91ffe4091a51dae8"},{"author":{"_account_id":2733,"name":"Darragh O\u0027Reilly","email":"doreilly@suse.com","username":"darragh-oreilly"},"change_message_id":"e18f96ccbd169a349fbb7605b8fb69740a9836f1","unresolved":false,"context_lines":[{"line_number":341,"context_line":"                       \u0027ethertype\u0027: q_const.IPv6,"},{"line_number":342,"context_line":"                       \u0027protocol\u0027: \u0027icmp\u0027,"},{"line_number":343,"context_line":"                       \u0027source_port_range_min\u0027: q_const.ICMPV6_TYPE_RA}"},{"line_number":344,"context_line":"            ra_rule[\u0027source_ip_prefix\u0027] \u003d ra_ip"},{"line_number":345,"context_line":"            port[\u0027security_group_rules\u0027].append(ra_rule)"},{"line_number":346,"context_line":""},{"line_number":347,"context_line":"    def _apply_provider_rule(self, context, ports):"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAWH%2F%2BC%2FM%3D","line":344,"updated":"2014-03-31 10:19:30.000000000","message":"If you have to do another patchset, can you just add source_ip_prefix to the literal dict started on L340.","commit_id":"165a03a03a35e316c0470df0ac3a3cbb8624358f"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"change_message_id":"57defd8f7f5531e94678b38801ee1b104f5b039c","unresolved":false,"context_lines":[{"line_number":341,"context_line":"                       \u0027ethertype\u0027: q_const.IPv6,"},{"line_number":342,"context_line":"                       \u0027protocol\u0027: \u0027icmp\u0027,"},{"line_number":343,"context_line":"                       \u0027source_port_range_min\u0027: q_const.ICMPV6_TYPE_RA}"},{"line_number":344,"context_line":"            ra_rule[\u0027source_ip_prefix\u0027] \u003d ra_ip"},{"line_number":345,"context_line":"            port[\u0027security_group_rules\u0027].append(ra_rule)"},{"line_number":346,"context_line":""},{"line_number":347,"context_line":"    def _apply_provider_rule(self, context, ports):"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAWH%2F98mU%3D","line":344,"in_reply_to":"AAAAWH%2F%2BC%2FM%3D","updated":"2014-04-01 02:27:05.000000000","message":"Will do.","commit_id":"165a03a03a35e316c0470df0ac3a3cbb8624358f"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"f90d44047c972f1cffa398bc192da1e53e7ad8d9","unresolved":false,"context_lines":[{"line_number":240,"context_line":"        if not network_ids:"},{"line_number":241,"context_line":"            return {}"},{"line_number":242,"context_line":"        ips \u003d {}"},{"line_number":243,"context_line":"        for network_id in network_ids:"},{"line_number":244,"context_line":"            ips[network_id] \u003d set([])"},{"line_number":245,"context_line":"        query \u003d context.session.query(models_v2.Subnet)"},{"line_number":246,"context_line":"        subnets \u003d query.filter(models_v2.Subnet.network_id.in_(network_ids))"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAWH%2F9knw%3D","line":243,"updated":"2014-04-03 15:59:35.000000000","message":"243-244 are not necessary.  Can set .setdefault() \n\nd.setdefault(\u0027foo\u0027,set()).add(1)","commit_id":"b7b0c7dbcd3e6754bc09b2fd75d888c41ae4aadb"}],"neutron/tests/unit/test_security_groups_rpc.py":[{"author":{"_account_id":6685,"name":"Baodong (Robert) Li","email":"baoli@cisco.com","username":"baoli"},"change_message_id":"3b86c1071f686a472904fca3808d1f833b99c1d7","unresolved":false,"context_lines":[{"line_number":351,"context_line":""},{"line_number":352,"context_line":"    def test_security_group_rules_for_devices_ipv6_egress(self):"},{"line_number":353,"context_line":"        fake_prefix \u003d test_fw.FAKE_PREFIX[const.IPv6]"},{"line_number":354,"context_line":"        fake_gateway \u003d test_fw.FAKE_IP[const.IPv6]"},{"line_number":355,"context_line":"        with self.network() as n:"},{"line_number":356,"context_line":"            with nested(self.subnet(n,"},{"line_number":357,"context_line":"                                    cidr\u003dfake_prefix,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAVX%2F%2F%2Fww%3D","line":354,"updated":"2014-02-26 23:09:15.000000000","message":"the subnet created in this test case uses LLA prefix.\nTo unit test the functionality introduced in this patch, a test case with GUA prefix, and LLA gateway IP may be needed","commit_id":"f1bb520ade0ed3309203d7c1f126f4790be401ba"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"1bf8187b40f6fce2cd0857b64e2fc132186c8e98","unresolved":false,"context_lines":[{"line_number":40,"context_line":"from neutron.tests.unit import test_extension_security_group as test_sg"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"FAKE_PREFIX \u003d {\u0027IPv4\u0027: \u002710.0.0.0/24\u0027,"},{"line_number":44,"context_line":"               \u0027IPv6\u0027: \u00272001:0db8::/64\u0027}"},{"line_number":45,"context_line":"FAKE_IP \u003d {\u0027IPv4\u0027: \u002710.0.0.1\u0027,"},{"line_number":46,"context_line":"           \u0027IPv6\u0027: \u0027fe80::1\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F%2Bw3o%3D","line":43,"updated":"2014-03-24 14:51:01.000000000","message":"nit: you could use the same const.IPv4 / const.IPv6 as you reference later in the code.","commit_id":"f8a42ba1931713ed6743cf921e80228fc03be739"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"change_message_id":"fd47275e725b3ac8e14d52f00d7c6af2f8badb8e","unresolved":false,"context_lines":[{"line_number":40,"context_line":"from neutron.tests.unit import test_extension_security_group as test_sg"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"FAKE_PREFIX \u003d {\u0027IPv4\u0027: \u002710.0.0.0/24\u0027,"},{"line_number":44,"context_line":"               \u0027IPv6\u0027: \u00272001:0db8::/64\u0027}"},{"line_number":45,"context_line":"FAKE_IP \u003d {\u0027IPv4\u0027: \u002710.0.0.1\u0027,"},{"line_number":46,"context_line":"           \u0027IPv6\u0027: \u0027fe80::1\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F%2BZgY%3D","line":43,"in_reply_to":"AAAAWH%2F%2Bw3o%3D","updated":"2014-03-27 03:37:51.000000000","message":"Done","commit_id":"f8a42ba1931713ed6743cf921e80228fc03be739"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"change_message_id":"625b3de6a749535347ea087c2d9cfe96fbd9e6a7","unresolved":false,"context_lines":[{"line_number":40,"context_line":"from neutron.tests.unit import test_extension_security_group as test_sg"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"FAKE_PREFIX \u003d {\u0027IPv4\u0027: \u002710.0.0.0/24\u0027,"},{"line_number":44,"context_line":"               \u0027IPv6\u0027: \u00272001:0db8::/64\u0027}"},{"line_number":45,"context_line":"FAKE_IP \u003d {\u0027IPv4\u0027: \u002710.0.0.1\u0027,"},{"line_number":46,"context_line":"           \u0027IPv6\u0027: \u0027fe80::1\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F%2BsFk%3D","line":43,"in_reply_to":"AAAAWH%2F%2Bw3o%3D","updated":"2014-03-25 02:41:07.000000000","message":"I will change this with other coming comments in next patch. \n\nThanks for the comment!","commit_id":"f8a42ba1931713ed6743cf921e80228fc03be739"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"a1f5cd290f6419a8069cc7fb2d323391c6020558","unresolved":false,"context_lines":[{"line_number":357,"context_line":"                self.assertEqual(port_rpc[\u0027security_group_rules\u0027],"},{"line_number":358,"context_line":"                                 expected)"},{"line_number":359,"context_line":"                self._delete(\u0027ports\u0027, port_id1)"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"    def test_security_group_ra_rules_for_devices_ipv6_gateway_global(self):"},{"line_number":362,"context_line":"        fake_prefix \u003d FAKE_PREFIX[const.IPv6]"},{"line_number":363,"context_line":"        fake_gateway \u003d FAKE_IP[\u0027IPv6_GLOBAL\u0027]"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F%2Be%2Fc%3D","line":360,"updated":"2014-03-26 14:06:25.000000000","message":"Do we need a test case for link local ipv6 gateway too?","commit_id":"f8a42ba1931713ed6743cf921e80228fc03be739"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"change_message_id":"fd47275e725b3ac8e14d52f00d7c6af2f8badb8e","unresolved":false,"context_lines":[{"line_number":357,"context_line":"                self.assertEqual(port_rpc[\u0027security_group_rules\u0027],"},{"line_number":358,"context_line":"                                 expected)"},{"line_number":359,"context_line":"                self._delete(\u0027ports\u0027, port_id1)"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"    def test_security_group_ra_rules_for_devices_ipv6_gateway_global(self):"},{"line_number":362,"context_line":"        fake_prefix \u003d FAKE_PREFIX[const.IPv6]"},{"line_number":363,"context_line":"        fake_gateway \u003d FAKE_IP[\u0027IPv6_GLOBAL\u0027]"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F%2BZgU%3D","line":360,"in_reply_to":"AAAAWH%2F%2Be%2Fc%3D","updated":"2014-03-27 03:37:51.000000000","message":"will add one.","commit_id":"f8a42ba1931713ed6743cf921e80228fc03be739"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"a1f5cd290f6419a8069cc7fb2d323391c6020558","unresolved":false,"context_lines":[{"line_number":378,"context_line":"                rules \u003d {"},{"line_number":379,"context_line":"                    \u0027security_group_rules\u0027: [rule1[\u0027security_group_rule\u0027]]}"},{"line_number":380,"context_line":"                res \u003d self._create_security_group_rule(self.fmt, rules)"},{"line_number":381,"context_line":"                self.deserialize(self.fmt, res)"},{"line_number":382,"context_line":"                self.assertEqual(res.status_int, webob.exc.HTTPCreated.code)"},{"line_number":383,"context_line":""},{"line_number":384,"context_line":"                # Create gateway port"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F%2Be9A%3D","line":381,"updated":"2014-03-26 14:06:25.000000000","message":"Use self._make_security_group_rule instead.","commit_id":"f8a42ba1931713ed6743cf921e80228fc03be739"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"change_message_id":"fd47275e725b3ac8e14d52f00d7c6af2f8badb8e","unresolved":false,"context_lines":[{"line_number":378,"context_line":"                rules \u003d {"},{"line_number":379,"context_line":"                    \u0027security_group_rules\u0027: [rule1[\u0027security_group_rule\u0027]]}"},{"line_number":380,"context_line":"                res \u003d self._create_security_group_rule(self.fmt, rules)"},{"line_number":381,"context_line":"                self.deserialize(self.fmt, res)"},{"line_number":382,"context_line":"                self.assertEqual(res.status_int, webob.exc.HTTPCreated.code)"},{"line_number":383,"context_line":""},{"line_number":384,"context_line":"                # Create gateway port"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F%2BZf4%3D","line":381,"in_reply_to":"AAAAWH%2F%2Be9A%3D","updated":"2014-03-27 03:37:51.000000000","message":"Done","commit_id":"f8a42ba1931713ed6743cf921e80228fc03be739"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"a1f5cd290f6419a8069cc7fb2d323391c6020558","unresolved":false,"context_lines":[{"line_number":387,"context_line":"                    fixed_ips\u003d[{\u0027subnet_id\u0027: subnet_v6[\u0027subnet\u0027][\u0027id\u0027],"},{"line_number":388,"context_line":"                                \u0027ip_address\u0027: fake_gateway}],"},{"line_number":389,"context_line":"                    device_owner\u003d\u0027network:router_interface\u0027)"},{"line_number":390,"context_line":"                gateway_res \u003d self.deserialize(self.fmt, res)"},{"line_number":391,"context_line":"                gateway_mac \u003d gateway_res[\u0027port\u0027][\u0027mac_address\u0027]"},{"line_number":392,"context_line":"                gateway_port_id \u003d gateway_res[\u0027port\u0027][\u0027id\u0027]"},{"line_number":393,"context_line":"                gateway_lla_ip \u003d str(ipv6.get_ipv6_addr_by_EUI64("}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F%2Be70%3D","line":390,"updated":"2014-03-26 14:06:25.000000000","message":"self._make_port instead.\nSame comment below.","commit_id":"f8a42ba1931713ed6743cf921e80228fc03be739"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"change_message_id":"fd47275e725b3ac8e14d52f00d7c6af2f8badb8e","unresolved":false,"context_lines":[{"line_number":387,"context_line":"                    fixed_ips\u003d[{\u0027subnet_id\u0027: subnet_v6[\u0027subnet\u0027][\u0027id\u0027],"},{"line_number":388,"context_line":"                                \u0027ip_address\u0027: fake_gateway}],"},{"line_number":389,"context_line":"                    device_owner\u003d\u0027network:router_interface\u0027)"},{"line_number":390,"context_line":"                gateway_res \u003d self.deserialize(self.fmt, res)"},{"line_number":391,"context_line":"                gateway_mac \u003d gateway_res[\u0027port\u0027][\u0027mac_address\u0027]"},{"line_number":392,"context_line":"                gateway_port_id \u003d gateway_res[\u0027port\u0027][\u0027id\u0027]"},{"line_number":393,"context_line":"                gateway_lla_ip \u003d str(ipv6.get_ipv6_addr_by_EUI64("}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F%2BZe0%3D","line":390,"in_reply_to":"AAAAWH%2F%2Be70%3D","updated":"2014-03-27 03:37:51.000000000","message":"Done","commit_id":"f8a42ba1931713ed6743cf921e80228fc03be739"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"a1f5cd290f6419a8069cc7fb2d323391c6020558","unresolved":false,"context_lines":[{"line_number":431,"context_line":"                res \u003d self.deserialize(self.fmt,"},{"line_number":432,"context_line":"                                       req.get_response(self.api))"},{"line_number":433,"context_line":"                self._delete(\u0027ports\u0027, gateway_port_id)"},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"    def test_security_group_ra_rules_for_devices_ipv6_no_gateway_port(self):"},{"line_number":436,"context_line":"        fake_prefix \u003d FAKE_PREFIX[const.IPv6]"},{"line_number":437,"context_line":"        fake_gateway \u003d FAKE_IP[\u0027IPv6_GLOBAL\u0027]"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F%2Be7Y%3D","line":434,"updated":"2014-03-26 14:06:25.000000000","message":"Hmmm... too many copy-and-paste throughout this file :(","commit_id":"f8a42ba1931713ed6743cf921e80228fc03be739"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"e675a2362b24096eac747c6078959558b051b7b8","unresolved":false,"context_lines":[{"line_number":431,"context_line":"                res \u003d self.deserialize(self.fmt,"},{"line_number":432,"context_line":"                                       req.get_response(self.api))"},{"line_number":433,"context_line":"                self._delete(\u0027ports\u0027, gateway_port_id)"},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"    def test_security_group_ra_rules_for_devices_ipv6_no_gateway_port(self):"},{"line_number":436,"context_line":"        fake_prefix \u003d FAKE_PREFIX[const.IPv6]"},{"line_number":437,"context_line":"        fake_gateway \u003d FAKE_IP[\u0027IPv6_GLOBAL\u0027]"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F%2BYYo%3D","line":434,"in_reply_to":"AAAAWH%2F%2BZek%3D","updated":"2014-03-27 07:45:48.000000000","message":"It is true before your patch. Don\u0027t worry so much :-)","commit_id":"f8a42ba1931713ed6743cf921e80228fc03be739"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"change_message_id":"fd47275e725b3ac8e14d52f00d7c6af2f8badb8e","unresolved":false,"context_lines":[{"line_number":431,"context_line":"                res \u003d self.deserialize(self.fmt,"},{"line_number":432,"context_line":"                                       req.get_response(self.api))"},{"line_number":433,"context_line":"                self._delete(\u0027ports\u0027, gateway_port_id)"},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"    def test_security_group_ra_rules_for_devices_ipv6_no_gateway_port(self):"},{"line_number":436,"context_line":"        fake_prefix \u003d FAKE_PREFIX[const.IPv6]"},{"line_number":437,"context_line":"        fake_gateway \u003d FAKE_IP[\u0027IPv6_GLOBAL\u0027]"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F%2BZek%3D","line":434,"in_reply_to":"AAAAWH%2F%2Be7Y%3D","updated":"2014-03-27 03:37:51.000000000","message":"I will try to figure out how to refactor.","commit_id":"f8a42ba1931713ed6743cf921e80228fc03be739"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"a1f5cd290f6419a8069cc7fb2d323391c6020558","unresolved":false,"context_lines":[{"line_number":453,"context_line":"                    \u0027security_group_rules\u0027: [rule1[\u0027security_group_rule\u0027]]}"},{"line_number":454,"context_line":"                res \u003d self._create_security_group_rule(self.fmt, rules)"},{"line_number":455,"context_line":"                self.deserialize(self.fmt, res)"},{"line_number":456,"context_line":"                self.assertEqual(res.status_int, webob.exc.HTTPCreated.code)"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"                res1 \u003d self._create_port("},{"line_number":459,"context_line":"                    self.fmt, n[\u0027network\u0027][\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F%2Be7E%3D","line":456,"updated":"2014-03-26 14:06:25.000000000","message":"_make_security_group_rule does L.454-456 in one method.","commit_id":"f8a42ba1931713ed6743cf921e80228fc03be739"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"change_message_id":"fd47275e725b3ac8e14d52f00d7c6af2f8badb8e","unresolved":false,"context_lines":[{"line_number":453,"context_line":"                    \u0027security_group_rules\u0027: [rule1[\u0027security_group_rule\u0027]]}"},{"line_number":454,"context_line":"                res \u003d self._create_security_group_rule(self.fmt, rules)"},{"line_number":455,"context_line":"                self.deserialize(self.fmt, res)"},{"line_number":456,"context_line":"                self.assertEqual(res.status_int, webob.exc.HTTPCreated.code)"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"                res1 \u003d self._create_port("},{"line_number":459,"context_line":"                    self.fmt, n[\u0027network\u0027][\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAWH%2F%2BZeE%3D","line":456,"in_reply_to":"AAAAWH%2F%2Be7E%3D","updated":"2014-03-27 03:37:51.000000000","message":"Done","commit_id":"f8a42ba1931713ed6743cf921e80228fc03be739"}]}
