)]}'
{"networking_bagpipe/bagpipe_bgp/vpn/ipvpn/__init__.py":[{"author":{"_account_id":12021,"name":"Thomas Morin","email":"tmmorin.orange@gmail.com","username":"tmorin"},"change_message_id":"1261bccbd5aa8a1593a2de7fd5e2d298f0bc31b9","unresolved":false,"context_lines":[{"line_number":209,"context_line":"        )"},{"line_number":210,"context_line":"        attributes.add(ecoms)"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        entry \u003d engine.RouteEntry(route.nlri, self.readvertise_to_rts,"},{"line_number":213,"context_line":"                                  attributes)"},{"line_number":214,"context_line":"        self.log.debug(\"RouteEntry for redirect (re-)advertisement: %s\", entry)"},{"line_number":215,"context_line":"        return entry"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa0c359_7f94b544","line":212,"range":{"start_line":212,"start_character":34,"end_line":212,"end_character":44},"updated":"2018-02-20 10:36:12.000000000","message":"We should not re-advertise the FlowSpec route with the same NLRI, or we overwrite the original route (from a BGP standpoint, this is the same route). We need to keep the flowspec rules, but we need an NLRI with a distinct RD.","commit_id":"52710044ae2778ae0073ba2ae95c2e17173a9f05"},{"author":{"_account_id":12021,"name":"Thomas Morin","email":"tmmorin.orange@gmail.com","username":"tmorin"},"change_message_id":"1261bccbd5aa8a1593a2de7fd5e2d298f0bc31b9","unresolved":false,"context_lines":[{"line_number":391,"context_line":"            return"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"        if isinstance(new_route.nlri, flowspec.Flow):"},{"line_number":394,"context_line":"            if not self._to_readvertise(new_route):"},{"line_number":395,"context_line":"                if len(new_route.ecoms(exa.TrafficRedirect)) \u003d\u003d 1:"},{"line_number":396,"context_line":"                    traffic_redirect \u003d new_route.ecoms(exa.TrafficRedirect)"},{"line_number":397,"context_line":"                    redirect_rt \u003d \"%s:%s\" % (traffic_redirect[0].asn,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa0c359_bfb1dde3","line":394,"range":{"start_line":394,"start_character":0,"end_line":394,"end_character":51},"updated":"2018-02-20 10:36:12.000000000","message":"The implication of this check is that we can\u0027t have an RT that would be both in \"import_rt\" and in \"readvertise\"/\"from_rt\".  I think this is ok, we don\u0027t restrict current use cases in a problematic way, but we need to document that.","commit_id":"52710044ae2778ae0073ba2ae95c2e17173a9f05"},{"author":{"_account_id":12021,"name":"Thomas Morin","email":"tmmorin.orange@gmail.com","username":"tmorin"},"change_message_id":"1261bccbd5aa8a1593a2de7fd5e2d298f0bc31b9","unresolved":false,"context_lines":[{"line_number":426,"context_line":"    @log_decorator.log"},{"line_number":427,"context_line":"    def best_route_removed(self, entry, old_route, last):"},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"        if self.readvertise and last:"},{"line_number":430,"context_line":"            # check if this is a route we were re-advertising"},{"line_number":431,"context_line":"            if self._to_readvertise(old_route):"},{"line_number":432,"context_line":"                self.log.debug(\"Need to stop re-advertising %s\", entry)"},{"line_number":433,"context_line":"                self._readvertise_stop(old_route)"},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"        if isinstance(old_route.nlri, flowspec.Flow):"},{"line_number":436,"context_line":"            if not self._to_readvertise(old_route):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa0c359_7f3ef529","line":433,"range":{"start_line":429,"start_character":0,"end_line":433,"end_character":49},"updated":"2018-02-20 10:36:12.000000000","message":"unrelated to this change: this piece of code, along with the fact that the code elsewhere tries to keep track of readvertised route in a set, looks to me as problematic: isn\u0027t a route removed from self.readvertised only if it is the last route for the corresponding tracked_entry ?","commit_id":"52710044ae2778ae0073ba2ae95c2e17173a9f05"},{"author":{"_account_id":12021,"name":"Thomas Morin","email":"tmmorin.orange@gmail.com","username":"tmorin"},"change_message_id":"b0164de214b4f85570f2052b3d45fe75bf67f776","unresolved":false,"context_lines":[{"line_number":138,"context_line":"            set(self.readvertise_from_rts)"},{"line_number":139,"context_line":"            )) \u003e 0"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def _gen_rtrecords_extended_community(self, route):"},{"line_number":142,"context_line":"        # new RTRecord \u003d original RTRecord (if any) + orig RTs converted into"},{"line_number":143,"context_line":"        # RTRecord attributes"},{"line_number":144,"context_line":"        orig_rtrecords \u003d route.ecoms(exa.RTRecord)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa0c359_d77ed0e2","line":141,"range":{"start_line":141,"start_character":48,"end_line":141,"end_character":53},"updated":"2018-02-22 14:46:43.000000000","message":"I would find it better to pass the route.ecoms as a parameter, rather than the whole route","commit_id":"71ea3ba48241a2ea34161b4982b41e24d63b4cc9"},{"author":{"_account_id":12021,"name":"Thomas Morin","email":"tmmorin.orange@gmail.com","username":"tmorin"},"change_message_id":"b0164de214b4f85570f2052b3d45fe75bf67f776","unresolved":false,"context_lines":[{"line_number":242,"context_line":"        nlri \u003d route.nlri"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"        self.log.debug(\"Start re-advertising %s from VRF\","},{"line_number":245,"context_line":"                       (nlri if isinstance(nlri, flowspec.Flow)"},{"line_number":246,"context_line":"                        else nlri.cidr.prefix()))"},{"line_number":247,"context_line":"        if self.attract_traffic:"},{"line_number":248,"context_line":"            # Start advertising default route only when the first route to"},{"line_number":249,"context_line":"            # readvertise appears"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa0c359_174998b5","line":246,"range":{"start_line":245,"start_character":23,"end_line":246,"end_character":48},"updated":"2018-02-22 14:46:43.000000000","message":"I think it would be ok to use \u0027nlri\u0027 in both cases.\nLogging is not worth making the code too complex, IMHO.","commit_id":"71ea3ba48241a2ea34161b4982b41e24d63b4cc9"},{"author":{"_account_id":12021,"name":"Thomas Morin","email":"tmmorin.orange@gmail.com","username":"tmorin"},"change_message_id":"b0164de214b4f85570f2052b3d45fe75bf67f776","unresolved":false,"context_lines":[{"line_number":407,"context_line":"            return"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"        if isinstance(new_route.nlri, flowspec.Flow):"},{"line_number":410,"context_line":"            if self._imported(new_route):"},{"line_number":411,"context_line":"                if len(new_route.ecoms(exa.TrafficRedirect)) \u003d\u003d 1:"},{"line_number":412,"context_line":"                    traffic_redirect \u003d new_route.ecoms(exa.TrafficRedirect)"},{"line_number":413,"context_line":"                    redirect_rt \u003d \"%s:%s\" % (traffic_redirect[0].asn,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa0c359_b7f0e468","line":410,"range":{"start_line":410,"start_character":0,"end_line":410,"end_character":41},"updated":"2018-02-22 14:46:43.000000000","message":"not needed, because if we are here, it means we passed the same test at line 405","commit_id":"71ea3ba48241a2ea34161b4982b41e24d63b4cc9"},{"author":{"_account_id":12021,"name":"Thomas Morin","email":"tmmorin.orange@gmail.com","username":"tmorin"},"change_message_id":"b0164de214b4f85570f2052b3d45fe75bf67f776","unresolved":false,"context_lines":[{"line_number":449,"context_line":"                self._readvertise_stop(old_route, last)"},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"        if isinstance(old_route.nlri, flowspec.Flow):"},{"line_number":452,"context_line":"            if not self._to_readvertise(old_route):"},{"line_number":453,"context_line":"                if len(old_route.ecoms(exa.TrafficRedirect)) \u003d\u003d 1:"},{"line_number":454,"context_line":"                    if last:"},{"line_number":455,"context_line":"                        traffic_redirect \u003d old_route.ecoms("}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa0c359_57016037","line":452,"range":{"start_line":452,"start_character":0,"end_line":452,"end_character":51},"updated":"2018-02-22 14:46:43.000000000","message":"(same)","commit_id":"71ea3ba48241a2ea34161b4982b41e24d63b4cc9"}]}
