)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e3b4ef94e3c63cbe81302d1b5e2d5e07dc3d7cfb","unresolved":false,"context_lines":[{"line_number":14,"context_line":"http://www.cisco.com/web/about/security/intelligence/ipv6_first_hop.html"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Pending items:"},{"line_number":17,"context_line":"Functional tests."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"DocImpact"},{"line_number":20,"context_line":"SecurityImpact"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"da20952f_1442e510","line":17,"updated":"2015-08-27 20:33:23.000000000","message":"Are you planning on handing this in this patch set? It looks like it from kevin\u0027s comments.","commit_id":"9ab79bbb66e0868aea15a24a3a8799cea3412221"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"09c78e9f6cac942e12eee0645b0d92aea0dbe6f1","unresolved":false,"context_lines":[{"line_number":14,"context_line":"http://www.cisco.com/web/about/security/intelligence/ipv6_first_hop.html"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Pending items:"},{"line_number":17,"context_line":"Functional tests."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"DocImpact"},{"line_number":20,"context_line":"SecurityImpact"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"da20952f_29e9b4e6","line":17,"in_reply_to":"da20952f_1442e510","updated":"2015-08-28 09:39:58.000000000","message":"Yes @Aaron, I\u0027ll update the patch. Thanks.","commit_id":"9ab79bbb66e0868aea15a24a3a8799cea3412221"}],"neutron/cmd/sanity/checks.py":[{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"51ec17d278e0d6836ab23f09156d04f0a89c44d9","unresolved":false,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":"def icmpv6_header_match_supported():"},{"line_number":138,"context_line":"    return ofctl_arg_supported(cmd\u003d\u0027add-flow\u0027,"},{"line_number":139,"context_line":"                               table\u003dovs_const.ARP_SPOOF_TABLE,"},{"line_number":140,"context_line":"                               priority\u003d1,"},{"line_number":141,"context_line":"                               dl_type\u003dn_consts.ETHERTYPE_IPV6,"},{"line_number":142,"context_line":"                               nw_proto\u003dn_consts.PROTO_NUM_ICMP_V6,"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba15a1d1_80718caa","line":139,"updated":"2015-09-16 16:51:35.000000000","message":"Thank you for not making this one look like the one before it on L127 with all of the magic hard-coded numbers and strings.  Part of me wants to approve this patch now just because I\u0027m so happy about it.  But, that would be irresponsible so I\u0027ll plow through the rest.","commit_id":"17765114292217d109c15b220be57fea6c9eed4a"}],"neutron/cmd/sanity_check.py":[{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"d53839652e86054feb454b38f2dcc680c94f9931","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        LOG.error(_LE(\u0027Check for Open vSwitch support of ICMPv6 header\u0027"},{"line_number":172,"context_line":"                      \u0027 matching failed. ICMPv6 Neighbor Advt spoofing (part\u0027"},{"line_number":173,"context_line":"                      \u0027 of arp spoofing) suppression will not work. A newer\u0027"},{"line_number":174,"context_line":"                      \u0027 version of OVS is required.\u0027))"},{"line_number":175,"context_line":"    return result"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"ba15a1d1_529f1b03","line":174,"updated":"2015-09-15 04:46:14.000000000","message":"nit: space should be last before new line because of consistency.","commit_id":"5f2924dd2ac685dd57785d6a41abd447364fe272"}],"neutron/plugins/ml2/drivers/openvswitch/agent/openflow/native/br_int.py":[{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"0ed9b2fc8be7a89ef6f83cd7306ba107f781a688","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"import netaddr"},{"line_number":23,"context_line":"from oslo_log import log as logging"},{"line_number":24,"context_line":"from ryu.lib.packet import ether_types"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from neutron.common import constants as const"},{"line_number":27,"context_line":"from neutron.i18n import _LE"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba15a1d1_0f8739d8","line":24,"updated":"2015-09-15 08:25:02.000000000","message":"from ryu.lib.packet import icmpv6\nfrom ryu.lib.packet import in_proto","commit_id":"1e3d5161f4b4a36364929293db6fbe9d70a82f3a"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"27acf4d30104aeb5d907ed5b7eec64bbdeaab102","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"import netaddr"},{"line_number":23,"context_line":"from oslo_log import log as logging"},{"line_number":24,"context_line":"from ryu.lib.packet import ether_types"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from neutron.common import constants as const"},{"line_number":27,"context_line":"from neutron.i18n import _LE"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba15a1d1_d56eae95","line":24,"in_reply_to":"ba15a1d1_0f8739d8","updated":"2015-09-15 09:38:32.000000000","message":"Sure @Yamamoto.","commit_id":"1e3d5161f4b4a36364929293db6fbe9d70a82f3a"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"0ed9b2fc8be7a89ef6f83cd7306ba107f781a688","unresolved":false,"context_lines":[{"line_number":151,"context_line":"    @staticmethod"},{"line_number":152,"context_line":"    def _icmpv6_reply_match(ofp, ofpp, port):"},{"line_number":153,"context_line":"        return ofpp.OFPMatch(in_port\u003dport,"},{"line_number":154,"context_line":"                             eth_type\u003dconst.ETHERTYPE_IPV6,"},{"line_number":155,"context_line":"                             ip_proto\u003dconst.PROTO_NUM_ICMP_V6,"},{"line_number":156,"context_line":"                             icmpv6_type\u003dconst.ICMPV6_TYPE_NA)"},{"line_number":157,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"ba15a1d1_1aa9b5df","line":154,"updated":"2015-09-15 08:25:02.000000000","message":"please use ether_types.ETH_TYPE_IPV6 for consistency","commit_id":"1e3d5161f4b4a36364929293db6fbe9d70a82f3a"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"27acf4d30104aeb5d907ed5b7eec64bbdeaab102","unresolved":false,"context_lines":[{"line_number":151,"context_line":"    @staticmethod"},{"line_number":152,"context_line":"    def _icmpv6_reply_match(ofp, ofpp, port):"},{"line_number":153,"context_line":"        return ofpp.OFPMatch(in_port\u003dport,"},{"line_number":154,"context_line":"                             eth_type\u003dconst.ETHERTYPE_IPV6,"},{"line_number":155,"context_line":"                             ip_proto\u003dconst.PROTO_NUM_ICMP_V6,"},{"line_number":156,"context_line":"                             icmpv6_type\u003dconst.ICMPV6_TYPE_NA)"},{"line_number":157,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"ba15a1d1_d5f54ecb","line":154,"in_reply_to":"ba15a1d1_1aa9b5df","updated":"2015-09-15 09:38:32.000000000","message":"Done","commit_id":"1e3d5161f4b4a36364929293db6fbe9d70a82f3a"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"0ed9b2fc8be7a89ef6f83cd7306ba107f781a688","unresolved":false,"context_lines":[{"line_number":152,"context_line":"    def _icmpv6_reply_match(ofp, ofpp, port):"},{"line_number":153,"context_line":"        return ofpp.OFPMatch(in_port\u003dport,"},{"line_number":154,"context_line":"                             eth_type\u003dconst.ETHERTYPE_IPV6,"},{"line_number":155,"context_line":"                             ip_proto\u003dconst.PROTO_NUM_ICMP_V6,"},{"line_number":156,"context_line":"                             icmpv6_type\u003dconst.ICMPV6_TYPE_NA)"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    def _has_zero_prefixlen_address(self, ip_addresses):"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba15a1d1_9ae38533","line":155,"updated":"2015-09-15 08:25:02.000000000","message":"in_proto.IPPROTO_ICMPV6","commit_id":"1e3d5161f4b4a36364929293db6fbe9d70a82f3a"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"27acf4d30104aeb5d907ed5b7eec64bbdeaab102","unresolved":false,"context_lines":[{"line_number":152,"context_line":"    def _icmpv6_reply_match(ofp, ofpp, port):"},{"line_number":153,"context_line":"        return ofpp.OFPMatch(in_port\u003dport,"},{"line_number":154,"context_line":"                             eth_type\u003dconst.ETHERTYPE_IPV6,"},{"line_number":155,"context_line":"                             ip_proto\u003dconst.PROTO_NUM_ICMP_V6,"},{"line_number":156,"context_line":"                             icmpv6_type\u003dconst.ICMPV6_TYPE_NA)"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    def _has_zero_prefixlen_address(self, ip_addresses):"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba15a1d1_35d4ca1e","line":155,"in_reply_to":"ba15a1d1_9ae38533","updated":"2015-09-15 09:38:32.000000000","message":"Done","commit_id":"1e3d5161f4b4a36364929293db6fbe9d70a82f3a"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"0ed9b2fc8be7a89ef6f83cd7306ba107f781a688","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        return ofpp.OFPMatch(in_port\u003dport,"},{"line_number":154,"context_line":"                             eth_type\u003dconst.ETHERTYPE_IPV6,"},{"line_number":155,"context_line":"                             ip_proto\u003dconst.PROTO_NUM_ICMP_V6,"},{"line_number":156,"context_line":"                             icmpv6_type\u003dconst.ICMPV6_TYPE_NA)"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    def _has_zero_prefixlen_address(self, ip_addresses):"},{"line_number":159,"context_line":"        return any(netaddr.IPNetwork(ip).prefixlen \u003d\u003d 0 for ip in ip_addresses)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba15a1d1_bac5298f","line":156,"updated":"2015-09-15 08:25:02.000000000","message":"icmpv6.ND_NEIGHBOR_ADVERT","commit_id":"1e3d5161f4b4a36364929293db6fbe9d70a82f3a"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"27acf4d30104aeb5d907ed5b7eec64bbdeaab102","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        return ofpp.OFPMatch(in_port\u003dport,"},{"line_number":154,"context_line":"                             eth_type\u003dconst.ETHERTYPE_IPV6,"},{"line_number":155,"context_line":"                             ip_proto\u003dconst.PROTO_NUM_ICMP_V6,"},{"line_number":156,"context_line":"                             icmpv6_type\u003dconst.ICMPV6_TYPE_NA)"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    def _has_zero_prefixlen_address(self, ip_addresses):"},{"line_number":159,"context_line":"        return any(netaddr.IPNetwork(ip).prefixlen \u003d\u003d 0 for ip in ip_addresses)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba15a1d1_55be1ed5","line":156,"in_reply_to":"ba15a1d1_bac5298f","updated":"2015-09-15 09:38:32.000000000","message":"Done","commit_id":"1e3d5161f4b4a36364929293db6fbe9d70a82f3a"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"0ed9b2fc8be7a89ef6f83cd7306ba107f781a688","unresolved":false,"context_lines":[{"line_number":170,"context_line":"            masked_ip \u003d self._cidr_to_ryu(ip)"},{"line_number":171,"context_line":"            self.install_normal("},{"line_number":172,"context_line":"                table_id\u003dconstants.ARP_SPOOF_TABLE, priority\u003d2,"},{"line_number":173,"context_line":"                eth_type\u003dconst.ETHERTYPE_IPV6,"},{"line_number":174,"context_line":"                ip_proto\u003dconst.PROTO_NUM_ICMP_V6,"},{"line_number":175,"context_line":"                icmpv6_type\u003dconst.ICMPV6_TYPE_NA,"},{"line_number":176,"context_line":"                ipv6_nd_target\u003dmasked_ip, in_port\u003dport)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba15a1d1_cff4e188","line":173,"updated":"2015-09-15 08:25:02.000000000","message":"ether_types.ETH_TYPE_IPV6","commit_id":"1e3d5161f4b4a36364929293db6fbe9d70a82f3a"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"0ed9b2fc8be7a89ef6f83cd7306ba107f781a688","unresolved":false,"context_lines":[{"line_number":171,"context_line":"            self.install_normal("},{"line_number":172,"context_line":"                table_id\u003dconstants.ARP_SPOOF_TABLE, priority\u003d2,"},{"line_number":173,"context_line":"                eth_type\u003dconst.ETHERTYPE_IPV6,"},{"line_number":174,"context_line":"                ip_proto\u003dconst.PROTO_NUM_ICMP_V6,"},{"line_number":175,"context_line":"                icmpv6_type\u003dconst.ICMPV6_TYPE_NA,"},{"line_number":176,"context_line":"                ipv6_nd_target\u003dmasked_ip, in_port\u003dport)"},{"line_number":177,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"ba15a1d1_4f1691a8","line":174,"updated":"2015-09-15 08:25:02.000000000","message":"in_proto.IPPROTO_ICMPV6","commit_id":"1e3d5161f4b4a36364929293db6fbe9d70a82f3a"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"0ed9b2fc8be7a89ef6f83cd7306ba107f781a688","unresolved":false,"context_lines":[{"line_number":172,"context_line":"                table_id\u003dconstants.ARP_SPOOF_TABLE, priority\u003d2,"},{"line_number":173,"context_line":"                eth_type\u003dconst.ETHERTYPE_IPV6,"},{"line_number":174,"context_line":"                ip_proto\u003dconst.PROTO_NUM_ICMP_V6,"},{"line_number":175,"context_line":"                icmpv6_type\u003dconst.ICMPV6_TYPE_NA,"},{"line_number":176,"context_line":"                ipv6_nd_target\u003dmasked_ip, in_port\u003dport)"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"        # Now that the rules are ready, direct icmpv6 neighbor advertisement"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba15a1d1_2fc8fd21","line":175,"updated":"2015-09-15 08:25:02.000000000","message":"icmpv6.ND_NEIGHBOR_ADVERT","commit_id":"1e3d5161f4b4a36364929293db6fbe9d70a82f3a"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"0ed9b2fc8be7a89ef6f83cd7306ba107f781a688","unresolved":false,"context_lines":[{"line_number":215,"context_line":"        (_dp, ofp, ofpp) \u003d self._get_dp()"},{"line_number":216,"context_line":"        match \u003d self._arp_reply_match(ofp, ofpp, port\u003dport)"},{"line_number":217,"context_line":"        self.delete_flows(table_id\u003dconstants.LOCAL_SWITCHING,"},{"line_number":218,"context_line":"                          match\u003dmatch)"},{"line_number":219,"context_line":"        self.delete_flows(table_id\u003dconstants.ARP_SPOOF_TABLE,"},{"line_number":220,"context_line":"                          in_port\u003dport)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba15a1d1_9a19457c","line":218,"updated":"2015-09-15 08:25:02.000000000","message":"should remove icmpv6 flows as well.","commit_id":"1e3d5161f4b4a36364929293db6fbe9d70a82f3a"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"27acf4d30104aeb5d907ed5b7eec64bbdeaab102","unresolved":false,"context_lines":[{"line_number":215,"context_line":"        (_dp, ofp, ofpp) \u003d self._get_dp()"},{"line_number":216,"context_line":"        match \u003d self._arp_reply_match(ofp, ofpp, port\u003dport)"},{"line_number":217,"context_line":"        self.delete_flows(table_id\u003dconstants.LOCAL_SWITCHING,"},{"line_number":218,"context_line":"                          match\u003dmatch)"},{"line_number":219,"context_line":"        self.delete_flows(table_id\u003dconstants.ARP_SPOOF_TABLE,"},{"line_number":220,"context_line":"                          in_port\u003dport)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba15a1d1_15b426cf","line":218,"in_reply_to":"ba15a1d1_9a19457c","updated":"2015-09-15 09:38:32.000000000","message":"Thanks for pointing it. I\u0027ll update it.","commit_id":"1e3d5161f4b4a36364929293db6fbe9d70a82f3a"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"51ec17d278e0d6836ab23f09156d04f0a89c44d9","unresolved":false,"context_lines":[{"line_number":161,"context_line":"        for ip in ip_addresses:"},{"line_number":162,"context_line":"            masked_ip \u003d self._cidr_to_ryu(ip)"},{"line_number":163,"context_line":"            self.install_normal("},{"line_number":164,"context_line":"                table_id\u003dconstants.ARP_SPOOF_TABLE, priority\u003d2,"},{"line_number":165,"context_line":"                eth_type\u003dether_types.ETH_TYPE_IPV6,"},{"line_number":166,"context_line":"                ip_proto\u003din_proto.IPPROTO_ICMPV6,"},{"line_number":167,"context_line":"                icmpv6_type\u003dicmpv6.ND_NEIGHBOR_ADVERT,"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba15a1d1_e0c64867","line":164,"updated":"2015-09-16 16:51:35.000000000","message":"nit:  hard-coded priority","commit_id":"17765114292217d109c15b220be57fea6c9eed4a"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"51ec17d278e0d6836ab23f09156d04f0a89c44d9","unresolved":false,"context_lines":[{"line_number":165,"context_line":"                eth_type\u003dether_types.ETH_TYPE_IPV6,"},{"line_number":166,"context_line":"                ip_proto\u003din_proto.IPPROTO_ICMPV6,"},{"line_number":167,"context_line":"                icmpv6_type\u003dicmpv6.ND_NEIGHBOR_ADVERT,"},{"line_number":168,"context_line":"                ipv6_nd_target\u003dmasked_ip, in_port\u003dport)"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"        # Now that the rules are ready, direct icmpv6 neighbor advertisement"},{"line_number":171,"context_line":"        # traffic from the port into the anti-spoof table."}],"source_content_type":"text/x-python","patch_set":12,"id":"ba15a1d1_00733c16","line":168,"updated":"2015-09-16 16:51:35.000000000","message":"nit:  I prefer one kwarg per line to minimize the chance of missing a value while scanning through quickly.  Comment applies in many places in this patch set but since it is a nit, I\u0027ll only mention it here.","commit_id":"17765114292217d109c15b220be57fea6c9eed4a"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"51ec17d278e0d6836ab23f09156d04f0a89c44d9","unresolved":false,"context_lines":[{"line_number":169,"context_line":""},{"line_number":170,"context_line":"        # Now that the rules are ready, direct icmpv6 neighbor advertisement"},{"line_number":171,"context_line":"        # traffic from the port into the anti-spoof table."},{"line_number":172,"context_line":"        (_dp, ofp, ofpp) \u003d self._get_dp()"},{"line_number":173,"context_line":"        match \u003d self._icmpv6_reply_match(ofp, ofpp, port\u003dport)"},{"line_number":174,"context_line":"        self.install_goto(table_id\u003dconstants.LOCAL_SWITCHING,"},{"line_number":175,"context_line":"                          priority\u003d10,"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba15a1d1_e0d96823","line":172,"updated":"2015-09-16 16:51:35.000000000","message":"nit:  parens are unnecessary and ugly but consistent with other methods in this file.  So, no big deal.","commit_id":"17765114292217d109c15b220be57fea6c9eed4a"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"51ec17d278e0d6836ab23f09156d04f0a89c44d9","unresolved":false,"context_lines":[{"line_number":172,"context_line":"        (_dp, ofp, ofpp) \u003d self._get_dp()"},{"line_number":173,"context_line":"        match \u003d self._icmpv6_reply_match(ofp, ofpp, port\u003dport)"},{"line_number":174,"context_line":"        self.install_goto(table_id\u003dconstants.LOCAL_SWITCHING,"},{"line_number":175,"context_line":"                          priority\u003d10,"},{"line_number":176,"context_line":"                          match\u003dmatch,"},{"line_number":177,"context_line":"                          dest_table_id\u003dconstants.ARP_SPOOF_TABLE)"},{"line_number":178,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"ba15a1d1_c0a8e48f","line":175,"updated":"2015-09-16 16:51:35.000000000","message":"ditto","commit_id":"17765114292217d109c15b220be57fea6c9eed4a"}],"neutron/plugins/ml2/drivers/openvswitch/agent/openflow/ovs_ofctl/br_int.py":[{"author":{"_account_id":11255,"name":"Dustin Lundquist","username":"dustin.lundquist","inactive":true},"change_message_id":"b5853d79ae836d136a132cc0fafee5e05a001eef","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        for ip in ip_addresses:"},{"line_number":120,"context_line":"            self.install_normal("},{"line_number":121,"context_line":"                table_id\u003dconstants.ARP_SPOOF_TABLE, priority\u003d2,"},{"line_number":122,"context_line":"                dl_type\u003d0x86DD, nw_proto\u003d58, icmp_type\u003d136,"},{"line_number":123,"context_line":"                nd_target\u003dip, in_port\u003dport)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        # Allow neighbor advertisements for LLA address."}],"source_content_type":"text/x-python","patch_set":1,"id":"9a41bdd9_ae4cc2c8","line":122,"updated":"2015-07-14 16:38:23.000000000","message":"We should probably use constants for these.","commit_id":"9eaa0c3bca0f0a489f1cced72c4171f60996da5f"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"eced53ccfb292900d0787a838e5e322d25322c7d","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        for ip in ip_addresses:"},{"line_number":120,"context_line":"            self.install_normal("},{"line_number":121,"context_line":"                table_id\u003dconstants.ARP_SPOOF_TABLE, priority\u003d2,"},{"line_number":122,"context_line":"                dl_type\u003d0x86DD, nw_proto\u003d58, icmp_type\u003d136,"},{"line_number":123,"context_line":"                nd_target\u003dip, in_port\u003dport)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        # Allow neighbor advertisements for LLA address."}],"source_content_type":"text/x-python","patch_set":1,"id":"9a41bdd9_e77c2db7","line":122,"in_reply_to":"9a41bdd9_6cf6c2fa","updated":"2015-07-14 17:48:37.000000000","message":"Sadly, names are not accepted @Brain. I\u0027ll define new constants.","commit_id":"9eaa0c3bca0f0a489f1cced72c4171f60996da5f"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"7d34debfd8878b4c027151564671da6085822065","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        for ip in ip_addresses:"},{"line_number":120,"context_line":"            self.install_normal("},{"line_number":121,"context_line":"                table_id\u003dconstants.ARP_SPOOF_TABLE, priority\u003d2,"},{"line_number":122,"context_line":"                dl_type\u003d0x86DD, nw_proto\u003d58, icmp_type\u003d136,"},{"line_number":123,"context_line":"                nd_target\u003dip, in_port\u003dport)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        # Allow neighbor advertisements for LLA address."}],"source_content_type":"text/x-python","patch_set":1,"id":"9a41bdd9_6cf6c2fa","line":122,"in_reply_to":"9a41bdd9_ae4cc2c8","updated":"2015-07-14 17:00:35.000000000","message":"neutron/common/constants.py has a definition for RA already, you can put NA right below it.  It also already has PROTO_NUM_ICMP_V6 but I don\u0027t see any definitions for datalink types, can that not accept \u0027IPv6\u0027 ?","commit_id":"9eaa0c3bca0f0a489f1cced72c4171f60996da5f"},{"author":{"_account_id":11255,"name":"Dustin Lundquist","username":"dustin.lundquist","inactive":true},"change_message_id":"b5853d79ae836d136a132cc0fafee5e05a001eef","unresolved":false,"context_lines":[{"line_number":123,"context_line":"                nd_target\u003dip, in_port\u003dport)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        # Allow neighbor advertisements for LLA address."},{"line_number":126,"context_line":"        port_lla \u003d str(ipv6.get_ipv6_addr_by_EUI64("},{"line_number":127,"context_line":"            const.IPV6_LLA_PREFIX, mac))"},{"line_number":128,"context_line":"        self.install_normal("},{"line_number":129,"context_line":"            table_id\u003dconstants.ARP_SPOOF_TABLE, priority\u003d2,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a41bdd9_ee0e4a3a","line":126,"updated":"2015-07-14 16:38:23.000000000","message":"This seems to be duplication of the code above, how about adding a helper that returns all the IPv6 addresses including the link-loca address. Note: there may be additional link local addresses if multiple MAC are permitted via the allowed address pairs extension.","commit_id":"9eaa0c3bca0f0a489f1cced72c4171f60996da5f"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"eced53ccfb292900d0787a838e5e322d25322c7d","unresolved":false,"context_lines":[{"line_number":123,"context_line":"                nd_target\u003dip, in_port\u003dport)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        # Allow neighbor advertisements for LLA address."},{"line_number":126,"context_line":"        port_lla \u003d str(ipv6.get_ipv6_addr_by_EUI64("},{"line_number":127,"context_line":"            const.IPV6_LLA_PREFIX, mac))"},{"line_number":128,"context_line":"        self.install_normal("},{"line_number":129,"context_line":"            table_id\u003dconstants.ARP_SPOOF_TABLE, priority\u003d2,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a41bdd9_22dd236f","line":126,"in_reply_to":"9a41bdd9_ee0e4a3a","updated":"2015-07-14 17:48:37.000000000","message":"Sure @Dustin, I\u0027ll look into it. Thanks.","commit_id":"9eaa0c3bca0f0a489f1cced72c4171f60996da5f"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"aec1f03a3c8c4a1f92df3701c8f0a64515036430","unresolved":false,"context_lines":[{"line_number":135,"context_line":"                      priority\u003d10, dl_type\u003dconst.ETHERTYPE_IPV6,"},{"line_number":136,"context_line":"                      nw_proto\u003dconst.PROTO_NUM_ICMP_V6,"},{"line_number":137,"context_line":"                      icmp_type\u003dconst.ICMPV6_TYPE_NA, in_port\u003dport,"},{"line_number":138,"context_line":"                      actions\u003d(\"resubmit(,%s)\" % constants.ARP_SPOOF_TABLE))"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def install_arp_spoofing_protection(self, port, ip_addresses):"},{"line_number":141,"context_line":"        if self._has_zero_prefixlen_address(ip_addresses):"}],"source_content_type":"text/x-python","patch_set":7,"id":"da20952f_a6c06651","line":138,"updated":"2015-09-04 06:55:33.000000000","message":"\"native\" of_interface needs an update.\nif you need any help, please contact iwamoto@.\ni\u0027ll add him to the list of reviewers.","commit_id":"00272079319222c19cdc773e15a4ac75cea4145b"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"0102f51568657333330959cdbe7b3809e2c466f0","unresolved":false,"context_lines":[{"line_number":135,"context_line":"                      priority\u003d10, dl_type\u003dconst.ETHERTYPE_IPV6,"},{"line_number":136,"context_line":"                      nw_proto\u003dconst.PROTO_NUM_ICMP_V6,"},{"line_number":137,"context_line":"                      icmp_type\u003dconst.ICMPV6_TYPE_NA, in_port\u003dport,"},{"line_number":138,"context_line":"                      actions\u003d(\"resubmit(,%s)\" % constants.ARP_SPOOF_TABLE))"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def install_arp_spoofing_protection(self, port, ip_addresses):"},{"line_number":141,"context_line":"        if self._has_zero_prefixlen_address(ip_addresses):"}],"source_content_type":"text/x-python","patch_set":7,"id":"da20952f_a61866d4","line":138,"in_reply_to":"da20952f_a6c06651","updated":"2015-09-04 07:05:51.000000000","message":"as \"native\" of_interface is not covered by voting jobs yet,\nit can be done as a follow-up patch.","commit_id":"00272079319222c19cdc773e15a4ac75cea4145b"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"0ed9b2fc8be7a89ef6f83cd7306ba107f781a688","unresolved":false,"context_lines":[{"line_number":118,"context_line":"    def install_icmpv6_na_spoofing_protection(self, port, ip_addresses):"},{"line_number":119,"context_line":"        if self._has_zero_prefixlen_address(ip_addresses):"},{"line_number":120,"context_line":"            # don\u0027t try to install protection because a /0 prefix allows any"},{"line_number":121,"context_line":"            # address anyway and the nd_target can only match on /1 or more."},{"line_number":122,"context_line":"            return"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        # Allow neighbor advertisements as long as they match addresses"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba15a1d1_cf5aa150","line":121,"updated":"2015-09-15 08:25:02.000000000","message":"probably better to have this check in the caller (ovs_neutron_agent) instead?","commit_id":"1e3d5161f4b4a36364929293db6fbe9d70a82f3a"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"0ed9b2fc8be7a89ef6f83cd7306ba107f781a688","unresolved":false,"context_lines":[{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    def delete_arp_spoofing_protection(self, port):"},{"line_number":162,"context_line":"        self.delete_flows(table_id\u003dconstants.LOCAL_SWITCHING,"},{"line_number":163,"context_line":"                          in_port\u003dport, proto\u003d\u0027arp\u0027)"},{"line_number":164,"context_line":"        self.delete_flows(table_id\u003dconstants.ARP_SPOOF_TABLE,"},{"line_number":165,"context_line":"                          in_port\u003dport)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba15a1d1_1a0d3537","line":163,"updated":"2015-09-15 08:25:02.000000000","message":"should remove icmpv6 flows as well.","commit_id":"1e3d5161f4b4a36364929293db6fbe9d70a82f3a"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"27acf4d30104aeb5d907ed5b7eec64bbdeaab102","unresolved":false,"context_lines":[{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    def delete_arp_spoofing_protection(self, port):"},{"line_number":162,"context_line":"        self.delete_flows(table_id\u003dconstants.LOCAL_SWITCHING,"},{"line_number":163,"context_line":"                          in_port\u003dport, proto\u003d\u0027arp\u0027)"},{"line_number":164,"context_line":"        self.delete_flows(table_id\u003dconstants.ARP_SPOOF_TABLE,"},{"line_number":165,"context_line":"                          in_port\u003dport)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba15a1d1_2724a1ad","line":163,"in_reply_to":"ba15a1d1_1a0d3537","updated":"2015-09-15 09:38:32.000000000","message":"Done","commit_id":"1e3d5161f4b4a36364929293db6fbe9d70a82f3a"}],"neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"ff3ecbe8cd8c167f16e1a894224b53c57d03d312","unresolved":false,"context_lines":[{"line_number":846,"context_line":""},{"line_number":847,"context_line":"        bridge.install_arp_spoofing_protection(port\u003dvif.ofport,"},{"line_number":848,"context_line":"                                               ip_addresses\u003dipv4_addresses)"},{"line_number":849,"context_line":""},{"line_number":850,"context_line":"        ipv6_addresses \u003d {ip for ip in addresses"},{"line_number":851,"context_line":"                          if netaddr.IPNetwork(ip).version \u003d\u003d 6}"},{"line_number":852,"context_line":"        # Allow neighbor advertisements for LLA address."}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_b850c25f","line":849,"updated":"2015-08-28 01:33:15.000000000","message":"You won\u0027t get here if the IPv4 check above fails, you should put the call under the if: so the IPv6 rules will still get installed.","commit_id":"9ab79bbb66e0868aea15a24a3a8799cea3412221"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"09c78e9f6cac942e12eee0645b0d92aea0dbe6f1","unresolved":false,"context_lines":[{"line_number":846,"context_line":""},{"line_number":847,"context_line":"        bridge.install_arp_spoofing_protection(port\u003dvif.ofport,"},{"line_number":848,"context_line":"                                               ip_addresses\u003dipv4_addresses)"},{"line_number":849,"context_line":""},{"line_number":850,"context_line":"        ipv6_addresses \u003d {ip for ip in addresses"},{"line_number":851,"context_line":"                          if netaddr.IPNetwork(ip).version \u003d\u003d 6}"},{"line_number":852,"context_line":"        # Allow neighbor advertisements for LLA address."}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_09d8701c","line":849,"in_reply_to":"da20952f_b850c25f","updated":"2015-08-28 09:39:58.000000000","message":"Nice Catch @Brian, thanks.","commit_id":"9ab79bbb66e0868aea15a24a3a8799cea3412221"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"1d60e0d92c9a89bad2b7967292532ccd3a9855fb","unresolved":false,"context_lines":[{"line_number":848,"context_line":"                          if netaddr.IPNetwork(ip).version \u003d\u003d 4}"},{"line_number":849,"context_line":"        if any(netaddr.IPNetwork(ip).prefixlen \u003d\u003d 0 for ip in ipv4_addresses):"},{"line_number":850,"context_line":"            # don\u0027t try to install protection because a /0 prefix allows any"},{"line_number":851,"context_line":"            # address anyway and the ARP_SPA can only match on /1 or more."},{"line_number":852,"context_line":"            return"},{"line_number":853,"context_line":""},{"line_number":854,"context_line":"        bridge.install_arp_spoofing_protection(port\u003dvif.ofport,"}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_51fa98be","line":851,"updated":"2015-09-03 08:22:06.000000000","message":"isn\u0027t this necessary for ipv6?\nit seems ovs-ofctl doesn\u0027t accept /0 for ipv6.","commit_id":"bf4b41b9dc2f151e4eb76ddcc30d1276f6d5b961"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"74fbfc8d51c8996f78968e1759fb8684c935baca","unresolved":false,"context_lines":[{"line_number":848,"context_line":"                          if netaddr.IPNetwork(ip).version \u003d\u003d 4}"},{"line_number":849,"context_line":"        if any(netaddr.IPNetwork(ip).prefixlen \u003d\u003d 0 for ip in ipv4_addresses):"},{"line_number":850,"context_line":"            # don\u0027t try to install protection because a /0 prefix allows any"},{"line_number":851,"context_line":"            # address anyway and the ARP_SPA can only match on /1 or more."},{"line_number":852,"context_line":"            return"},{"line_number":853,"context_line":""},{"line_number":854,"context_line":"        bridge.install_arp_spoofing_protection(port\u003dvif.ofport,"}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_c99ef8b7","line":851,"in_reply_to":"da20952f_1735f0d8","updated":"2015-09-03 10:46:46.000000000","message":"I see your point @Yamamoto. I was under the impression that allowed_address_pairs will only support \"/128\" (or \"/32\") addresses. I just verified and see that its not the case. Thanks for the pointer. I\u0027ll update the patch.","commit_id":"bf4b41b9dc2f151e4eb76ddcc30d1276f6d5b961"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"b4240886ed635a396efe830d8d5d377374f9308d","unresolved":false,"context_lines":[{"line_number":848,"context_line":"                          if netaddr.IPNetwork(ip).version \u003d\u003d 4}"},{"line_number":849,"context_line":"        if any(netaddr.IPNetwork(ip).prefixlen \u003d\u003d 0 for ip in ipv4_addresses):"},{"line_number":850,"context_line":"            # don\u0027t try to install protection because a /0 prefix allows any"},{"line_number":851,"context_line":"            # address anyway and the ARP_SPA can only match on /1 or more."},{"line_number":852,"context_line":"            return"},{"line_number":853,"context_line":""},{"line_number":854,"context_line":"        bridge.install_arp_spoofing_protection(port\u003dvif.ofport,"}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_cc9b6bc8","line":851,"in_reply_to":"da20952f_51fa98be","updated":"2015-09-03 08:34:16.000000000","message":"@Yamamoto, as you probably know, Neutron uses EUI-64 addressing which requires a prefixlength of /64. If users try to create an IPv6 subnet with any other prefix length, we do not allow that operation [1]. So this concern will not be applicable for IPv6. Thanks for reviewing.\n\n[1] https://github.com/openstack/neutron/blob/master/neutron/db/db_base_plugin_v2.py#L253","commit_id":"bf4b41b9dc2f151e4eb76ddcc30d1276f6d5b961"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"c0d3d941b33efe72956e751731391134b7c0a236","unresolved":false,"context_lines":[{"line_number":848,"context_line":"                          if netaddr.IPNetwork(ip).version \u003d\u003d 4}"},{"line_number":849,"context_line":"        if any(netaddr.IPNetwork(ip).prefixlen \u003d\u003d 0 for ip in ipv4_addresses):"},{"line_number":850,"context_line":"            # don\u0027t try to install protection because a /0 prefix allows any"},{"line_number":851,"context_line":"            # address anyway and the ARP_SPA can only match on /1 or more."},{"line_number":852,"context_line":"            return"},{"line_number":853,"context_line":""},{"line_number":854,"context_line":"        bridge.install_arp_spoofing_protection(port\u003dvif.ofport,"}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_1735f0d8","line":851,"in_reply_to":"da20952f_cc9b6bc8","updated":"2015-09-03 08:58:11.000000000","message":"where is it validated for cidrs from allowed address pairs?","commit_id":"bf4b41b9dc2f151e4eb76ddcc30d1276f6d5b961"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"51ec17d278e0d6836ab23f09156d04f0a89c44d9","unresolved":false,"context_lines":[{"line_number":881,"context_line":"                              if p.get(\u0027mac_address\u0027)}"},{"line_number":882,"context_line":""},{"line_number":883,"context_line":"        ipv6_addresses \u003d {ip for ip in addresses"},{"line_number":884,"context_line":"                          if netaddr.IPNetwork(ip).version \u003d\u003d 6}"},{"line_number":885,"context_line":"        # Allow neighbor advertisements for LLA address."},{"line_number":886,"context_line":"        ipv6_addresses |\u003d {str(ipv6.get_ipv6_addr_by_EUI64("},{"line_number":887,"context_line":"                               n_const.IPV6_LLA_PREFIX, mac))"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba15a1d1_a32dbaff","line":884,"updated":"2015-09-16 16:51:35.000000000","message":"nit:  ip_lib.get_ip_version(ip)","commit_id":"17765114292217d109c15b220be57fea6c9eed4a"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"51ec17d278e0d6836ab23f09156d04f0a89c44d9","unresolved":false,"context_lines":[{"line_number":886,"context_line":"        ipv6_addresses |\u003d {str(ipv6.get_ipv6_addr_by_EUI64("},{"line_number":887,"context_line":"                               n_const.IPV6_LLA_PREFIX, mac))"},{"line_number":888,"context_line":"                           for mac in mac_addresses}"},{"line_number":889,"context_line":"        if not has_zero_prefixlen_address(ipv6_addresses):"},{"line_number":890,"context_line":"            # Install protection only when prefix is not zero because a /0"},{"line_number":891,"context_line":"            # prefix allows any address anyway and the nd_target can only"},{"line_number":892,"context_line":"            # match on /1 or more."}],"source_content_type":"text/x-python","patch_set":12,"id":"ba15a1d1_23de8add","line":889,"updated":"2015-09-16 16:51:35.000000000","message":"Where are these /0 addresses coming from?  Oh, I guess it can come from allowed_address_pairs.","commit_id":"17765114292217d109c15b220be57fea6c9eed4a"}],"neutron/tests/unit/plugins/ml2/drivers/openvswitch/agent/openflow/native/test_br_int.py":[{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"52e091a1cf35cda3cd172624f2b53a9df50240e3","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        ]"},{"line_number":284,"context_line":"        self.assertEqual(expected, self.mock.mock_calls)"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    def test_install_arp_spoofing_protection(self):"},{"line_number":287,"context_line":"        port \u003d 8888"},{"line_number":288,"context_line":"        ip_addresses \u003d [\u0027192.0.2.1\u0027, \u0027192.0.2.2/32\u0027]"},{"line_number":289,"context_line":"        self.br.install_arp_spoofing_protection(port, ip_addresses)"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba15a1d1_365e0d77","line":286,"updated":"2015-09-15 11:10:13.000000000","message":"have you considered to have a similar for icmpv6?","commit_id":"b9bfc83dcbbdf00c620ecd3246b143604ef2788b"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"d4e47fab33dba7ffe2706268a0672ef9cace0f69","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        ]"},{"line_number":284,"context_line":"        self.assertEqual(expected, self.mock.mock_calls)"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    def test_install_arp_spoofing_protection(self):"},{"line_number":287,"context_line":"        port \u003d 8888"},{"line_number":288,"context_line":"        ip_addresses \u003d [\u0027192.0.2.1\u0027, \u0027192.0.2.2/32\u0027]"},{"line_number":289,"context_line":"        self.br.install_arp_spoofing_protection(port, ip_addresses)"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba15a1d1_9264c2e5","line":286,"in_reply_to":"ba15a1d1_365e0d77","updated":"2015-09-15 11:54:56.000000000","message":"Since we are having functional tests to validate the changes, I missed this part. \nIf you think its good to have the unit test, I can update the patch.\n\nThanks for reviewing.","commit_id":"b9bfc83dcbbdf00c620ecd3246b143604ef2788b"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"323c4f0094edbc206ed7ba540fd6c337df6b2b77","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        ]"},{"line_number":284,"context_line":"        self.assertEqual(expected, self.mock.mock_calls)"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    def test_install_arp_spoofing_protection(self):"},{"line_number":287,"context_line":"        port \u003d 8888"},{"line_number":288,"context_line":"        ip_addresses \u003d [\u0027192.0.2.1\u0027, \u0027192.0.2.2/32\u0027]"},{"line_number":289,"context_line":"        self.br.install_arp_spoofing_protection(port, ip_addresses)"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba15a1d1_15517c0e","line":286,"in_reply_to":"ba15a1d1_9264c2e5","updated":"2015-09-15 12:13:07.000000000","message":"I will add the necessary icmpv6 test and update the patch shortly.","commit_id":"b9bfc83dcbbdf00c620ecd3246b143604ef2788b"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"cf23afc2d75e33cf725ded24b35e8c7466bc7538","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import mock"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from neutron.tests.unit.plugins.ml2.drivers.openvswitch.agent.openflow.native \\"},{"line_number":20,"context_line":"    import ovs_bridge_test_base"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"ba15a1d1_fb7959fd","line":19,"updated":"2015-09-15 13:09:12.000000000","message":"The following import is needed?\n\n from ryu.lib.packet import ether_types\n from ryu.lib.packet import icmpv6\n from ryu.lib.packet import in_proto","commit_id":"17765114292217d109c15b220be57fea6c9eed4a"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"c8ab5266344d922dd7ad7d81f5d039dd122747cf","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import mock"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from neutron.tests.unit.plugins.ml2.drivers.openvswitch.agent.openflow.native \\"},{"line_number":20,"context_line":"    import ovs_bridge_test_base"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"ba15a1d1_26a0189f","line":19,"in_reply_to":"ba15a1d1_663b70d2","updated":"2015-09-15 13:25:26.000000000","message":"I got it.","commit_id":"17765114292217d109c15b220be57fea6c9eed4a"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"916c1d172d34516c84560b73139cf1c9284f038d","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import mock"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from neutron.tests.unit.plugins.ml2.drivers.openvswitch.agent.openflow.native \\"},{"line_number":20,"context_line":"    import ovs_bridge_test_base"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"ba15a1d1_663b70d2","line":19,"in_reply_to":"ba15a1d1_fb7959fd","updated":"2015-09-15 13:20:22.000000000","message":"@Ichihara, this is not required. \nself.icmpv6.ND_NEIGHBOR_ADVERT works.","commit_id":"17765114292217d109c15b220be57fea6c9eed4a"}],"neutron/tests/unit/plugins/ml2/drivers/openvswitch/agent/openflow/ovs_ofctl/test_br_int.py":[{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"52e091a1cf35cda3cd172624f2b53a9df50240e3","unresolved":false,"context_lines":[{"line_number":186,"context_line":"        ]"},{"line_number":187,"context_line":"        self.assertEqual(expected, self.mock.mock_calls)"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    def test_install_arp_spoofing_protection(self):"},{"line_number":190,"context_line":"        port \u003d 8888"},{"line_number":191,"context_line":"        ip_addresses \u003d [\u0027192.0.2.1\u0027, \u0027192.0.2.2/32\u0027]"},{"line_number":192,"context_line":"        self.br.install_arp_spoofing_protection(port, ip_addresses)"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba15a1d1_b15ea710","line":189,"updated":"2015-09-15 11:10:13.000000000","message":"have you considered to have a similar for icmpv6?","commit_id":"b9bfc83dcbbdf00c620ecd3246b143604ef2788b"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"cf23afc2d75e33cf725ded24b35e8c7466bc7538","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import mock"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from neutron.common import constants as const"},{"line_number":20,"context_line":"from neutron.tests.unit.plugins.ml2.drivers.openvswitch.agent.\\"},{"line_number":21,"context_line":"    openflow.ovs_ofctl import ovs_bridge_test_base"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"ba15a1d1_fb607937","line":19,"updated":"2015-09-15 13:09:12.000000000","message":"You shouldn\u0027t use const according with yamamoto\u0027s comment in PS10?","commit_id":"17765114292217d109c15b220be57fea6c9eed4a"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"c8ab5266344d922dd7ad7d81f5d039dd122747cf","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import mock"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from neutron.common import constants as const"},{"line_number":20,"context_line":"from neutron.tests.unit.plugins.ml2.drivers.openvswitch.agent.\\"},{"line_number":21,"context_line":"    openflow.ovs_ofctl import ovs_bridge_test_base"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"ba15a1d1_06a5d4b3","line":19,"in_reply_to":"ba15a1d1_06edd424","updated":"2015-09-15 13:25:26.000000000","message":"I got it.","commit_id":"17765114292217d109c15b220be57fea6c9eed4a"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"916c1d172d34516c84560b73139cf1c9284f038d","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import mock"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from neutron.common import constants as const"},{"line_number":20,"context_line":"from neutron.tests.unit.plugins.ml2.drivers.openvswitch.agent.\\"},{"line_number":21,"context_line":"    openflow.ovs_ofctl import ovs_bridge_test_base"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"ba15a1d1_06edd424","line":19,"in_reply_to":"ba15a1d1_fb607937","updated":"2015-09-15 13:20:22.000000000","message":"@Yamamoto\u0027s comments was for native implementation and not for ovs_ofctl.\nWhen using ovs_ofctl, we do not have any public header file that defines these MACROS, so we are defining them in the constants.py file.","commit_id":"17765114292217d109c15b220be57fea6c9eed4a"}]}
