)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"ac3c94fe22f3497ee566f52ef62a7bded343014f","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add IPv6 ND Neighbor Advertiser application"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Adds a new Dragonflow appication which identifies"},{"line_number":10,"context_line":"Neighbor Socialitation requests, and adds a flow"},{"line_number":11,"context_line":"that advertise the response"},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"1a6eadb0_4e2f003e","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":32},"updated":"2016-12-21 00:59:05.000000000","message":"It is actually not a application, just some modification to l2 app.","commit_id":"36ee1c8b094e5d6f60a287f16d22e4181b70311b"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"7c0e0875c46a6fcdb45376ca1790d5e3ab3f30e8","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add IPv6 ND Neighbor Advertiser application"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Adds a new Dragonflow appication which identifies"},{"line_number":10,"context_line":"Neighbor Socialitation requests, and adds a flow"},{"line_number":11,"context_line":"that advertise the response"},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"1a6eadb0_725f1fe5","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":32},"in_reply_to":"1a6eadb0_4e2f003e","updated":"2016-12-21 15:27:48.000000000","message":"Rephrased","commit_id":"36ee1c8b094e5d6f60a287f16d22e4181b70311b"},{"author":{"_account_id":18903,"name":"Yuli","email":"stremovsky@gmail.com","username":"yuli"},"change_message_id":"687d06f4e9a78e1ec44c66721f8112a9b3397dd9","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add IPv6 ND Neighbor Advertiser application"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"A new extension to the Dragonflow\u0027s l2 application."},{"line_number":10,"context_line":"It enables the controller identify Neighbor Socialitation requests,"},{"line_number":11,"context_line":"and adds a flow that advertise the response."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Partially-implements: blueprint ipv6"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"7a3c09a3_1ca57ab4","line":10,"range":{"start_line":10,"start_character":44,"end_line":10,"end_character":57},"updated":"2017-01-15 12:10:45.000000000","message":"Socialitation \u003d\u003e Solicitation ?","commit_id":"f4d763990c9c10409b0978486ae68fce5c21fc45"}],"dragonflow/controller/common/constants.py":[{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"ac3c94fe22f3497ee566f52ef62a7bded343014f","unresolved":false,"context_lines":[{"line_number":24,"context_line":"DHCP_TABLE \u003d 11"},{"line_number":25,"context_line":"METADATA_SERVICE_TABLE \u003d 12"},{"line_number":26,"context_line":"METADATA_SERVICE_REPLY_TABLE \u003d 13"},{"line_number":27,"context_line":"ND_TABLE \u003d 14"},{"line_number":28,"context_line":"INGRESS_NAT_TABLE \u003d 15"},{"line_number":29,"context_line":"L2_LOOKUP_TABLE \u003d 17"},{"line_number":30,"context_line":"L3_LOOKUP_TABLE \u003d 20"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a6eadb0_8e12f807","line":27,"range":{"start_line":27,"start_character":0,"end_line":27,"end_character":8},"updated":"2016-12-21 00:59:05.000000000","message":"nit: maybe better with IPV6_ND_TABLE","commit_id":"36ee1c8b094e5d6f60a287f16d22e4181b70311b"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"7c0e0875c46a6fcdb45376ca1790d5e3ab3f30e8","unresolved":false,"context_lines":[{"line_number":24,"context_line":"DHCP_TABLE \u003d 11"},{"line_number":25,"context_line":"METADATA_SERVICE_TABLE \u003d 12"},{"line_number":26,"context_line":"METADATA_SERVICE_REPLY_TABLE \u003d 13"},{"line_number":27,"context_line":"ND_TABLE \u003d 14"},{"line_number":28,"context_line":"INGRESS_NAT_TABLE \u003d 15"},{"line_number":29,"context_line":"L2_LOOKUP_TABLE \u003d 17"},{"line_number":30,"context_line":"L3_LOOKUP_TABLE \u003d 20"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a6eadb0_f2216f4e","line":27,"range":{"start_line":27,"start_character":0,"end_line":27,"end_character":8},"in_reply_to":"1a6eadb0_8e12f807","updated":"2016-12-21 15:27:48.000000000","message":"Done","commit_id":"36ee1c8b094e5d6f60a287f16d22e4181b70311b"}],"dragonflow/controller/common/nd_advertisers.py":[{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"ac3c94fe22f3497ee566f52ef62a7bded343014f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2015 OpenStack Foundation."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a6eadb0_9315c14a","line":1,"range":{"start_line":1,"start_character":16,"end_line":1,"end_character":20},"updated":"2016-12-21 00:59:05.000000000","message":"2016","commit_id":"36ee1c8b094e5d6f60a287f16d22e4181b70311b"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"7c0e0875c46a6fcdb45376ca1790d5e3ab3f30e8","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2015 OpenStack Foundation."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a6eadb0_b2da9749","line":1,"range":{"start_line":1,"start_character":16,"end_line":1,"end_character":20},"in_reply_to":"1a6eadb0_9315c14a","updated":"2016-12-21 15:27:48.000000000","message":"Fixed. Thanks :)","commit_id":"36ee1c8b094e5d6f60a287f16d22e4181b70311b"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"ac3c94fe22f3497ee566f52ef62a7bded343014f","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    A class for creating and removing Neighbor Advertisers (Neighbor Discovery)"},{"line_number":27,"context_line":"    The class will match Neighbor Solicitation requests, and advertise"},{"line_number":28,"context_line":"    the response."},{"line_number":29,"context_line":"    @param network_id The network ID in which the port exists"},{"line_number":30,"context_line":"    @param interface_ip The port\u0027s IPv6 address"},{"line_number":31,"context_line":"    @param interface_mac The port\u0027s physical address. Optional only in case"},{"line_number":32,"context_line":"            of remove."}],"source_content_type":"text/x-python","patch_set":4,"id":"1a6eadb0_0e198879","line":29,"range":{"start_line":29,"start_character":21,"end_line":29,"end_character":36},"updated":"2016-12-21 00:59:05.000000000","message":"It is actually the network\u0027s unique key, right? It would be better to reword to avoid confusion.","commit_id":"36ee1c8b094e5d6f60a287f16d22e4181b70311b"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"7c0e0875c46a6fcdb45376ca1790d5e3ab3f30e8","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    A class for creating and removing Neighbor Advertisers (Neighbor Discovery)"},{"line_number":27,"context_line":"    The class will match Neighbor Solicitation requests, and advertise"},{"line_number":28,"context_line":"    the response."},{"line_number":29,"context_line":"    @param network_id The network ID in which the port exists"},{"line_number":30,"context_line":"    @param interface_ip The port\u0027s IPv6 address"},{"line_number":31,"context_line":"    @param interface_mac The port\u0027s physical address. Optional only in case"},{"line_number":32,"context_line":"            of remove."}],"source_content_type":"text/x-python","patch_set":4,"id":"1a6eadb0_6d002202","line":29,"range":{"start_line":29,"start_character":21,"end_line":29,"end_character":36},"in_reply_to":"1a6eadb0_0e198879","updated":"2016-12-21 15:27:48.000000000","message":"Changed to network_key (variable name as well)","commit_id":"36ee1c8b094e5d6f60a287f16d22e4181b70311b"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"d5c5edd6d01ac9fdbcb525e7ac15c85bce0bf7b2","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2016 OpenStack Foundation."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":6,"id":"da4df55a_58e41eab","line":1,"range":{"start_line":1,"start_character":21,"end_line":1,"end_character":42},"updated":"2016-12-27 10:00:52.000000000","message":"why openstack foundation?","commit_id":"01669083fe589cc12d2ad1f50e83b2adf71af26d"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"34e1a36ef5c22859d1842ef3a549984afcf91682","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2016 OpenStack Foundation."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_6ca43457","line":1,"range":{"start_line":1,"start_character":21,"end_line":1,"end_character":42},"in_reply_to":"ba5201f7_5af662d8","updated":"2017-01-02 09:08:28.000000000","message":"I think so","commit_id":"01669083fe589cc12d2ad1f50e83b2adf71af26d"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"5c59b7b4af0632015cfabf1b9b7829033de484a6","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2016 OpenStack Foundation."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_f750d20c","line":1,"range":{"start_line":1,"start_character":21,"end_line":1,"end_character":42},"in_reply_to":"ba5201f7_6ca43457","updated":"2017-01-03 13:40:31.000000000","message":"Will be removed (in upcoming ver 8)","commit_id":"01669083fe589cc12d2ad1f50e83b2adf71af26d"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"9d5a67e25111a594325f5bb06974ca88daa49520","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2016 OpenStack Foundation."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_5af662d8","line":1,"range":{"start_line":1,"start_character":21,"end_line":1,"end_character":42},"in_reply_to":"da4df55a_58e41eab","updated":"2016-12-29 13:26:04.000000000","message":"The copyright is the same there\u0027s in the other responders. Should this be removed?","commit_id":"01669083fe589cc12d2ad1f50e83b2adf71af26d"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"d5c5edd6d01ac9fdbcb525e7ac15c85bce0bf7b2","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from dragonflow.controller.common import constants as const"},{"line_number":21,"context_line":"from dragonflow.controller.common import utils"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class NsAdvertiser(object):"},{"line_number":25,"context_line":"    \"\"\""},{"line_number":26,"context_line":"    A class for creating and removing Neighbor Advertisers (Neighbor Discovery)"}],"source_content_type":"text/x-python","patch_set":6,"id":"da4df55a_38891aca","line":23,"updated":"2016-12-27 10:00:52.000000000","message":"why this module is common?","commit_id":"01669083fe589cc12d2ad1f50e83b2adf71af26d"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"34e1a36ef5c22859d1842ef3a549984afcf91682","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from dragonflow.controller.common import constants as const"},{"line_number":21,"context_line":"from dragonflow.controller.common import utils"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class NsAdvertiser(object):"},{"line_number":25,"context_line":"    \"\"\""},{"line_number":26,"context_line":"    A class for creating and removing Neighbor Advertisers (Neighbor Discovery)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_cc9360f9","line":23,"in_reply_to":"ba5201f7_1ae21a04","updated":"2017-01-02 09:08:28.000000000","message":"seems its better land into some ipv6 package","commit_id":"01669083fe589cc12d2ad1f50e83b2adf71af26d"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"5c59b7b4af0632015cfabf1b9b7829033de484a6","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from dragonflow.controller.common import constants as const"},{"line_number":21,"context_line":"from dragonflow.controller.common import utils"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class NsAdvertiser(object):"},{"line_number":25,"context_line":"    \"\"\""},{"line_number":26,"context_line":"    A class for creating and removing Neighbor Advertisers (Neighbor Discovery)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_b7300aea","line":23,"in_reply_to":"ba5201f7_cc9360f9","updated":"2017-01-03 13:40:31.000000000","message":"In this case, I think it will be better to move also the IPv4-only applications into a separate package.\nI can do this in a different commit","commit_id":"01669083fe589cc12d2ad1f50e83b2adf71af26d"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"9d5a67e25111a594325f5bb06974ca88daa49520","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from dragonflow.controller.common import constants as const"},{"line_number":21,"context_line":"from dragonflow.controller.common import utils"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class NsAdvertiser(object):"},{"line_number":25,"context_line":"    \"\"\""},{"line_number":26,"context_line":"    A class for creating and removing Neighbor Advertisers (Neighbor Discovery)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_1ae21a04","line":23,"in_reply_to":"da4df55a_38891aca","updated":"2016-12-29 13:26:04.000000000","message":"I plan to add to this file also the router advertise class (L3)","commit_id":"01669083fe589cc12d2ad1f50e83b2adf71af26d"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"d5c5edd6d01ac9fdbcb525e7ac15c85bce0bf7b2","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from dragonflow.controller.common import utils"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class NsAdvertiser(object):"},{"line_number":25,"context_line":"    \"\"\""},{"line_number":26,"context_line":"    A class for creating and removing Neighbor Advertisers (Neighbor Discovery)"},{"line_number":27,"context_line":"    The class will match Neighbor Solicitation requests, and advertise"}],"source_content_type":"text/x-python","patch_set":6,"id":"da4df55a_98f04669","line":24,"range":{"start_line":24,"start_character":6,"end_line":24,"end_character":8},"updated":"2016-12-27 10:00:52.000000000","message":"name is better to be more meaningful","commit_id":"01669083fe589cc12d2ad1f50e83b2adf71af26d"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"9d5a67e25111a594325f5bb06974ca88daa49520","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from dragonflow.controller.common import utils"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class NsAdvertiser(object):"},{"line_number":25,"context_line":"    \"\"\""},{"line_number":26,"context_line":"    A class for creating and removing Neighbor Advertisers (Neighbor Discovery)"},{"line_number":27,"context_line":"    The class will match Neighbor Solicitation requests, and advertise"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_3acefe83","line":24,"range":{"start_line":24,"start_character":6,"end_line":24,"end_character":8},"in_reply_to":"da4df55a_98f04669","updated":"2016-12-29 13:26:04.000000000","message":"Switched to NeighAdvertiser","commit_id":"01669083fe589cc12d2ad1f50e83b2adf71af26d"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"8ab8c03fa56c5dfbc9e3bb6f166531237c2f26f7","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def _get_match(self):"},{"line_number":43,"context_line":"        parser \u003d self.datapath.ofproto_parser"},{"line_number":44,"context_line":"        match \u003d parser.OFPMatch()"},{"line_number":45,"context_line":"        match.set_dl_type(ether.ETH_TYPE_IPV6)"},{"line_number":46,"context_line":"        match.set_ip_proto(in_proto.IPPROTO_ICMPV6)"},{"line_number":47,"context_line":"        match.set_ipv6_dst(utils.ipv6_text_to_int(self.interface_ip))"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5201f7_78b06af5","line":44,"updated":"2017-01-02 13:40:20.000000000","message":"nit: You can create the match in a single expression:\nparser.OFPMatch(\n    dl_type\u003dether.ETH_TYPE_IPV6,\n    ip_proto\u003din_proto.IPRROTO_ICMPV6,\n    ...\n)","commit_id":"d9fa468ca88d3a813519f3ca97344bf5e9054aaf"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"4ff54c61b857195bf29487b6ca1de12d5d187442","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def _get_match(self):"},{"line_number":43,"context_line":"        parser \u003d self.datapath.ofproto_parser"},{"line_number":44,"context_line":"        match \u003d parser.OFPMatch()"},{"line_number":45,"context_line":"        match.set_dl_type(ether.ETH_TYPE_IPV6)"},{"line_number":46,"context_line":"        match.set_ip_proto(in_proto.IPPROTO_ICMPV6)"},{"line_number":47,"context_line":"        match.set_ipv6_dst(utils.ipv6_text_to_int(self.interface_ip))"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5201f7_02ed1625","line":44,"in_reply_to":"ba5201f7_78b06af5","updated":"2017-01-12 12:50:42.000000000","message":"dl_type cannot be defined from it,\nalso, the ipv6_dest is causing issues when trying to define it before the ip_proto \u003c- ipv6 is set.\nI think it will be better to leave it as is.","commit_id":"d9fa468ca88d3a813519f3ca97344bf5e9054aaf"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"8ab8c03fa56c5dfbc9e3bb6f166531237c2f26f7","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        parser \u003d self.datapath.ofproto_parser"},{"line_number":56,"context_line":"        actions \u003d ["},{"line_number":57,"context_line":"            parser.OFPActionSetField(icmpv6_type\u003dicmpv6.ND_NEIGHBOR_ADVERT),"},{"line_number":58,"context_line":"            parser.NXActionRegMove(src_field\u003d\u0027ipv6_src\u0027,"},{"line_number":59,"context_line":"                                   dst_field\u003d\u0027ipv6_dst\u0027,"},{"line_number":60,"context_line":"                                   n_bits\u003d128),"},{"line_number":61,"context_line":"            parser.OFPActionSetField(eth_src\u003dself.mac_address),"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5201f7_78878a0f","line":58,"updated":"2017-01-02 13:40:20.000000000","message":"Don\u0027t you need to do the same for MACs? eth_src -\u003e eth_dst before overwriting the eth_src? Or is eth_dst broadcast?","commit_id":"d9fa468ca88d3a813519f3ca97344bf5e9054aaf"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"4ff54c61b857195bf29487b6ca1de12d5d187442","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        parser \u003d self.datapath.ofproto_parser"},{"line_number":56,"context_line":"        actions \u003d ["},{"line_number":57,"context_line":"            parser.OFPActionSetField(icmpv6_type\u003dicmpv6.ND_NEIGHBOR_ADVERT),"},{"line_number":58,"context_line":"            parser.NXActionRegMove(src_field\u003d\u0027ipv6_src\u0027,"},{"line_number":59,"context_line":"                                   dst_field\u003d\u0027ipv6_dst\u0027,"},{"line_number":60,"context_line":"                                   n_bits\u003d128),"},{"line_number":61,"context_line":"            parser.OFPActionSetField(eth_src\u003dself.mac_address),"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5201f7_9f993871","line":58,"in_reply_to":"ba5201f7_78878a0f","updated":"2017-01-12 12:50:42.000000000","message":"Not mandatory, but changed.","commit_id":"d9fa468ca88d3a813519f3ca97344bf5e9054aaf"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"8ab8c03fa56c5dfbc9e3bb6f166531237c2f26f7","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        instructions \u003d self._get_instructions()"},{"line_number":71,"context_line":"        ofproto \u003d self.datapath.ofproto"},{"line_number":72,"context_line":"        parser \u003d self.datapath.ofproto_parser"},{"line_number":73,"context_line":"        msg \u003d parser.OFPFlowMod(datapath\u003dself.datapath,"},{"line_number":74,"context_line":"                                table_id\u003dself.table_id,"},{"line_number":75,"context_line":"                                cookie\u003dutils.set_aging_cookie_bits(0),"},{"line_number":76,"context_line":"                                command\u003dofproto.OFPFC_ADD,"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5201f7_d8c87677","line":73,"updated":"2017-01-02 13:40:20.000000000","message":"You need to use self.app.mod_flow here. There is some logic added to app.mod_flow that is necessary.","commit_id":"d9fa468ca88d3a813519f3ca97344bf5e9054aaf"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"4ff54c61b857195bf29487b6ca1de12d5d187442","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        instructions \u003d self._get_instructions()"},{"line_number":71,"context_line":"        ofproto \u003d self.datapath.ofproto"},{"line_number":72,"context_line":"        parser \u003d self.datapath.ofproto_parser"},{"line_number":73,"context_line":"        msg \u003d parser.OFPFlowMod(datapath\u003dself.datapath,"},{"line_number":74,"context_line":"                                table_id\u003dself.table_id,"},{"line_number":75,"context_line":"                                cookie\u003dutils.set_aging_cookie_bits(0),"},{"line_number":76,"context_line":"                                command\u003dofproto.OFPFC_ADD,"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5201f7_79090d2c","line":73,"in_reply_to":"ba5201f7_d8c87677","updated":"2017-01-12 12:50:42.000000000","message":"Done","commit_id":"d9fa468ca88d3a813519f3ca97344bf5e9054aaf"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"8ab8c03fa56c5dfbc9e3bb6f166531237c2f26f7","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        parser \u003d self.datapath.ofproto_parser"},{"line_number":85,"context_line":"        match \u003d self._get_match()"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        msg \u003d parser.OFPFlowMod(datapath\u003dself.datapath,"},{"line_number":88,"context_line":"                                cookie\u003dutils.set_aging_cookie_bits(0),"},{"line_number":89,"context_line":"                                cookie_mask\u003d0,"},{"line_number":90,"context_line":"                                table_id\u003dself.table_id,"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5201f7_f8c53a5b","line":87,"updated":"2017-01-02 13:40:20.000000000","message":"Same here.","commit_id":"d9fa468ca88d3a813519f3ca97344bf5e9054aaf"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"4ff54c61b857195bf29487b6ca1de12d5d187442","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        parser \u003d self.datapath.ofproto_parser"},{"line_number":85,"context_line":"        match \u003d self._get_match()"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        msg \u003d parser.OFPFlowMod(datapath\u003dself.datapath,"},{"line_number":88,"context_line":"                                cookie\u003dutils.set_aging_cookie_bits(0),"},{"line_number":89,"context_line":"                                cookie_mask\u003d0,"},{"line_number":90,"context_line":"                                table_id\u003dself.table_id,"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5201f7_d90e7931","line":87,"in_reply_to":"ba5201f7_f8c53a5b","updated":"2017-01-12 12:50:42.000000000","message":"Done","commit_id":"d9fa468ca88d3a813519f3ca97344bf5e9054aaf"},{"author":{"_account_id":18903,"name":"Yuli","email":"stremovsky@gmail.com","username":"yuli"},"change_message_id":"687d06f4e9a78e1ec44c66721f8112a9b3397dd9","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from dragonflow.controller.common import utils"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class NeighAdvertiser(object):"},{"line_number":22,"context_line":"    \"\"\""},{"line_number":23,"context_line":"    A class for creating and removing Neighbor Advertisers (Neighbor Discovery)"},{"line_number":24,"context_line":"    The class will match Neighbor Solicitation requests, and advertise"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a3c09a3_5caf0294","line":21,"range":{"start_line":21,"start_character":6,"end_line":21,"end_character":21},"updated":"2017-01-15 12:10:45.000000000","message":"Can you please use here a longer name like:\nNeighAdvertiser -\u003e NeighborAdvertiser","commit_id":"f4d763990c9c10409b0978486ae68fce5c21fc45"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"1760a77c32611d7cc1c01d72b5d3b61571aa4f4b","unresolved":false,"context_lines":[{"line_number":60,"context_line":"                                   dst_field\u003d\u0027eth_dst\u0027,"},{"line_number":61,"context_line":"                                   n_bits\u003d48),"},{"line_number":62,"context_line":"            parser.OFPActionSetField(eth_src\u003dself.mac_address),"},{"line_number":63,"context_line":"            parser.OFPActionSetField(ipv6_nd_sll\u003dself.mac_address),"},{"line_number":64,"context_line":"            parser.OFPActionOutput(ofproto.OFPP_IN_PORT, 0)]"},{"line_number":65,"context_line":"        instructions \u003d [parser.OFPInstructionActions("},{"line_number":66,"context_line":"            ofproto.OFPIT_APPLY_ACTIONS, actions)]"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_f20a13cf","line":63,"updated":"2018-06-11 03:30:36.000000000","message":"here you shold set ipv6_nd_tll in NS responder","commit_id":"f4d763990c9c10409b0978486ae68fce5c21fc45"}],"dragonflow/controller/common/utils.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"8ab8c03fa56c5dfbc9e3bb6f166531237c2f26f7","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        raise exceptions.InvalidIPAddressException(key\u003dip_text)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"def ipv6_text_to_int(ip_text):"},{"line_number":35,"context_line":"    if isinstance(ip_text, unicode):"},{"line_number":36,"context_line":"        ip_text \u003d ip_text.encode(\u0027ascii\u0027, \u0027ignore\u0027)"},{"line_number":37,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5201f7_38942236","line":34,"updated":"2017-01-02 13:40:20.000000000","message":"Why not just use: int(netaddr.IPAddress(ip_text)) ? This even works on ipv4 addresses and then we can remove the function above (In a different patch, of course).","commit_id":"d9fa468ca88d3a813519f3ca97344bf5e9054aaf"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"4ff54c61b857195bf29487b6ca1de12d5d187442","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        raise exceptions.InvalidIPAddressException(key\u003dip_text)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"def ipv6_text_to_int(ip_text):"},{"line_number":35,"context_line":"    if isinstance(ip_text, unicode):"},{"line_number":36,"context_line":"        ip_text \u003d ip_text.encode(\u0027ascii\u0027, \u0027ignore\u0027)"},{"line_number":37,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5201f7_451b7a80","line":34,"in_reply_to":"ba5201f7_38942236","updated":"2017-01-12 12:50:42.000000000","message":"Actually, the name is misleading. RYU expects to receive IPv6 addresses as a list of shorts. Renamed to ipv6_text_to_short","commit_id":"d9fa468ca88d3a813519f3ca97344bf5e9054aaf"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"eb4c9b92a32a84b81b91bbb15bf905ba184bef46","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        raise exceptions.InvalidIPAddressException(key\u003dip_text)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"def ipv6_text_to_short(ip_text):"},{"line_number":35,"context_line":"    if isinstance(ip_text, unicode):"},{"line_number":36,"context_line":"        ip_text \u003d ip_text.encode(\u0027ascii\u0027, \u0027ignore\u0027)"},{"line_number":37,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a3c09a3_92f5d1cc","line":34,"updated":"2017-01-15 16:15:25.000000000","message":"I\u0027d say this function needs a rename and docstring, but it\u0027s not enough to block this patch.","commit_id":"f4d763990c9c10409b0978486ae68fce5c21fc45"}],"dragonflow/controller/l2_app.py":[{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"ac3c94fe22f3497ee566f52ef62a7bded343014f","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        self.local_networks \u003d collections.defaultdict(_LocalNetwork)"},{"line_number":58,"context_line":"        self.integration_bridge \u003d cfg.CONF.df.integration_bridge"},{"line_number":59,"context_line":"        self.is_install_arp_responder \u003d cfg.CONF.df_l2_app.l2_responder"},{"line_number":60,"context_line":"        self.is_install_nd_advertiser \u003d cfg.CONF.df_l2_app.l2_responder"},{"line_number":61,"context_line":"        self.bridge_mappings \u003d self._parse_bridge_mappings("},{"line_number":62,"context_line":"            cfg.CONF.df_l2_app.bridge_mappings)"},{"line_number":63,"context_line":"        self.int_ofports \u003d {}"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a6eadb0_ce91509c","line":60,"range":{"start_line":60,"start_character":59,"end_line":60,"end_character":71},"updated":"2016-12-21 00:59:05.000000000","message":"Wrong use? Or if you want to reuse this option, then the help msg at [1] should be updated.\n\n[1] https://github.com/openstack/dragonflow/blob/10064977fb1aab4895c22796c3f10c511da74225/dragonflow/conf/l2_ml2.py#L25","commit_id":"36ee1c8b094e5d6f60a287f16d22e4181b70311b"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"7c0e0875c46a6fcdb45376ca1790d5e3ab3f30e8","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        self.local_networks \u003d collections.defaultdict(_LocalNetwork)"},{"line_number":58,"context_line":"        self.integration_bridge \u003d cfg.CONF.df.integration_bridge"},{"line_number":59,"context_line":"        self.is_install_arp_responder \u003d cfg.CONF.df_l2_app.l2_responder"},{"line_number":60,"context_line":"        self.is_install_nd_advertiser \u003d cfg.CONF.df_l2_app.l2_responder"},{"line_number":61,"context_line":"        self.bridge_mappings \u003d self._parse_bridge_mappings("},{"line_number":62,"context_line":"            cfg.CONF.df_l2_app.bridge_mappings)"},{"line_number":63,"context_line":"        self.int_ofports \u003d {}"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a6eadb0_8d0ade88","line":60,"range":{"start_line":60,"start_character":59,"end_line":60,"end_character":71},"in_reply_to":"1a6eadb0_ce91509c","updated":"2016-12-21 15:27:48.000000000","message":"I think it is better to re-use this option, since both responders does similar jobs :) \nI\u0027ve updated the help msg.","commit_id":"36ee1c8b094e5d6f60a287f16d22e4181b70311b"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"02017edc2b1fc3cb0205a104a4236c48fb1e12a1","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        super(L2App, self).__init__(*args, **kwargs)"},{"line_number":57,"context_line":"        self.local_networks \u003d collections.defaultdict(_LocalNetwork)"},{"line_number":58,"context_line":"        self.integration_bridge \u003d cfg.CONF.df.integration_bridge"},{"line_number":59,"context_line":"        self.is_install_arp_responder \u003d cfg.CONF.df_l2_app.l2_responder"},{"line_number":60,"context_line":"        self.is_install_nd_advertiser \u003d cfg.CONF.df_l2_app.l2_responder"},{"line_number":61,"context_line":"        self.bridge_mappings \u003d self._parse_bridge_mappings("},{"line_number":62,"context_line":"            cfg.CONF.df_l2_app.bridge_mappings)"},{"line_number":63,"context_line":"        self.int_ofports \u003d {}"}],"source_content_type":"text/x-python","patch_set":5,"id":"da4df55a_300c6142","line":60,"range":{"start_line":59,"start_character":0,"end_line":60,"end_character":71},"updated":"2016-12-22 01:27:42.000000000","message":"I think you could just use one attribute here.","commit_id":"9e16d0053c9ca252896b381f8c9be3cc899f8a4a"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"3011b60dfda75344cefd0670046f1860691f7113","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        super(L2App, self).__init__(*args, **kwargs)"},{"line_number":57,"context_line":"        self.local_networks \u003d collections.defaultdict(_LocalNetwork)"},{"line_number":58,"context_line":"        self.integration_bridge \u003d cfg.CONF.df.integration_bridge"},{"line_number":59,"context_line":"        self.is_install_arp_responder \u003d cfg.CONF.df_l2_app.l2_responder"},{"line_number":60,"context_line":"        self.is_install_nd_advertiser \u003d cfg.CONF.df_l2_app.l2_responder"},{"line_number":61,"context_line":"        self.bridge_mappings \u003d self._parse_bridge_mappings("},{"line_number":62,"context_line":"            cfg.CONF.df_l2_app.bridge_mappings)"},{"line_number":63,"context_line":"        self.int_ofports \u003d {}"}],"source_content_type":"text/x-python","patch_set":5,"id":"da4df55a_b303f20e","line":60,"range":{"start_line":59,"start_character":0,"end_line":60,"end_character":71},"in_reply_to":"da4df55a_300c6142","updated":"2016-12-22 07:39:08.000000000","message":"Changed to \u0027is_install_l2_responder\u0027","commit_id":"9e16d0053c9ca252896b381f8c9be3cc899f8a4a"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"d5c5edd6d01ac9fdbcb525e7ac15c85bce0bf7b2","unresolved":false,"context_lines":[{"line_number":91,"context_line":"                \u0027int-\u0027 + bridge)"},{"line_number":92,"context_line":"            self.int_ofports[physical_network] \u003d int_ofport"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def switch_features_handler(self, ev):"},{"line_number":95,"context_line":"        self.setup_physical_bridges(self.bridge_mappings)"},{"line_number":96,"context_line":"        self.add_flow_go_to_table(self.get_datapath(),"},{"line_number":97,"context_line":"                                  const.SERVICES_CLASSIFICATION_TABLE,"}],"source_content_type":"text/x-python","patch_set":6,"id":"da4df55a_f87072de","line":94,"updated":"2016-12-27 10:00:52.000000000","message":"Another potential place for refactoring ....","commit_id":"01669083fe589cc12d2ad1f50e83b2adf71af26d"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"9d5a67e25111a594325f5bb06974ca88daa49520","unresolved":false,"context_lines":[{"line_number":91,"context_line":"                \u0027int-\u0027 + bridge)"},{"line_number":92,"context_line":"            self.int_ofports[physical_network] \u003d int_ofport"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def switch_features_handler(self, ev):"},{"line_number":95,"context_line":"        self.setup_physical_bridges(self.bridge_mappings)"},{"line_number":96,"context_line":"        self.add_flow_go_to_table(self.get_datapath(),"},{"line_number":97,"context_line":"                                  const.SERVICES_CLASSIFICATION_TABLE,"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_9a4b6ab0","line":94,"in_reply_to":"da4df55a_f87072de","updated":"2016-12-29 13:26:04.000000000","message":"Maybe this can be done with the southbound refactoring","commit_id":"01669083fe589cc12d2ad1f50e83b2adf71af26d"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"d5c5edd6d01ac9fdbcb525e7ac15c85bce0bf7b2","unresolved":false,"context_lines":[{"line_number":165,"context_line":"                continue"},{"line_number":166,"context_line":"            arp_responder.ArpResponder(self,"},{"line_number":167,"context_line":"                                       network_id, ip).remove()"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    def _add_nd_advertiser(self, lport):"},{"line_number":170,"context_line":"        if not self.is_install_l2_responder:"},{"line_number":171,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":6,"id":"da4df55a_f8479274","line":168,"updated":"2016-12-27 10:00:52.000000000","message":"I think the following code is better to be handled in separate module once IPv6 is enabled","commit_id":"01669083fe589cc12d2ad1f50e83b2adf71af26d"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"34e1a36ef5c22859d1842ef3a549984afcf91682","unresolved":false,"context_lines":[{"line_number":165,"context_line":"                continue"},{"line_number":166,"context_line":"            arp_responder.ArpResponder(self,"},{"line_number":167,"context_line":"                                       network_id, ip).remove()"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    def _add_nd_advertiser(self, lport):"},{"line_number":170,"context_line":"        if not self.is_install_l2_responder:"},{"line_number":171,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_8cb0788d","line":168,"in_reply_to":"ba5201f7_5a8662ba","updated":"2017-01-02 09:08:28.000000000","message":"You just mentioned IPv6 to be extension. And also, there can be IPv4 only deployments, so IPV6 may rest in peace :-)","commit_id":"01669083fe589cc12d2ad1f50e83b2adf71af26d"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"5c59b7b4af0632015cfabf1b9b7829033de484a6","unresolved":false,"context_lines":[{"line_number":165,"context_line":"                continue"},{"line_number":166,"context_line":"            arp_responder.ArpResponder(self,"},{"line_number":167,"context_line":"                                       network_id, ip).remove()"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    def _add_nd_advertiser(self, lport):"},{"line_number":170,"context_line":"        if not self.is_install_l2_responder:"},{"line_number":171,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_b7c48a5f","line":168,"in_reply_to":"ba5201f7_8cb0788d","updated":"2017-01-03 13:40:31.000000000","message":"The application itself is an extension. Unless I\u0027ve written otherwise, and in that case, I\u0027ll need fix that.\nI do not know of any on/off param which indicates IPv4-only env, to filter this case. If you know otherwise, please let me know and I\u0027ll filter it :)","commit_id":"01669083fe589cc12d2ad1f50e83b2adf71af26d"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"9d5a67e25111a594325f5bb06974ca88daa49520","unresolved":false,"context_lines":[{"line_number":165,"context_line":"                continue"},{"line_number":166,"context_line":"            arp_responder.ArpResponder(self,"},{"line_number":167,"context_line":"                                       network_id, ip).remove()"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    def _add_nd_advertiser(self, lport):"},{"line_number":170,"context_line":"        if not self.is_install_l2_responder:"},{"line_number":171,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_5a8662ba","line":168,"in_reply_to":"da4df55a_f8479274","updated":"2016-12-29 13:26:04.000000000","message":"As far as I know, IPv6 is always enabled. The port\u0027s ipv6 details appears only if you create a IPv6 subnet. Please let me know if I\u0027m mistaken.","commit_id":"01669083fe589cc12d2ad1f50e83b2adf71af26d"}],"dragonflow/tests/common/app_testing_objects.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"8ab8c03fa56c5dfbc9e3bb6f166531237c2f26f7","unresolved":false,"context_lines":[{"line_number":600,"context_line":"        return (pkt.get_protocol(ipv6.ipv6) is not None)"},{"line_number":601,"context_line":""},{"line_number":602,"context_line":""},{"line_number":603,"context_line":"class RyuNeighbAdvertisementFilter(object):"},{"line_number":604,"context_line":"    \"\"\"Use ryu to parse the packet and test if it\u0027s a Neighbor Advertisement\"\"\""},{"line_number":605,"context_line":"    def __call__(self, buf):"},{"line_number":606,"context_line":"        pkt \u003d packet.Packet(buf)"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5201f7_d89316f9","line":603,"updated":"2017-01-02 13:40:20.000000000","message":"nit: These two classes can be unified, since they only differ in the type_ they search for (type can be passed via constructor, and then subclasses can pass it automatically)","commit_id":"d9fa468ca88d3a813519f3ca97344bf5e9054aaf"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"4ff54c61b857195bf29487b6ca1de12d5d187442","unresolved":false,"context_lines":[{"line_number":600,"context_line":"        return (pkt.get_protocol(ipv6.ipv6) is not None)"},{"line_number":601,"context_line":""},{"line_number":602,"context_line":""},{"line_number":603,"context_line":"class RyuNeighbAdvertisementFilter(object):"},{"line_number":604,"context_line":"    \"\"\"Use ryu to parse the packet and test if it\u0027s a Neighbor Advertisement\"\"\""},{"line_number":605,"context_line":"    def __call__(self, buf):"},{"line_number":606,"context_line":"        pkt \u003d packet.Packet(buf)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a57fde8_8c6256d7","line":603,"in_reply_to":"ba5201f7_d89316f9","updated":"2017-01-12 12:50:42.000000000","message":"Done","commit_id":"d9fa468ca88d3a813519f3ca97344bf5e9054aaf"}]}
