)]}'
{"doc/source/devref/bgp_speaker.rst":[{"author":{"_account_id":14258,"name":"Ryan Tidwell","email":"rktidwell85@gmail.com","username":"tidwellr"},"change_message_id":"c895bbc3fc4046fe65521f0c00de93696a235cb7","unresolved":false,"context_lines":[{"line_number":2,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"https://wiki.openstack.org/wiki/Neutron/BGPSpeaker"},{"line_number":5,"context_line":"# TODO(tidwellr) create/update wiki"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"API Extension"},{"line_number":8,"context_line":"-------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"ba3cc151_c5db8c1a","line":5,"updated":"2015-06-29 17:47:12.000000000","message":"Nix the TODO, no wiki reference. All relevant docs will land here in the devref.","commit_id":"81772f017f34556e565a572b17b9905968676fd2"},{"author":{"_account_id":11682,"name":"Ryan Moats","email":"rmoats@us.ibm.com","username":"regXboi"},"change_message_id":"bf6afc3ca89bf436c4a981318792580bb262b181","unresolved":false,"context_lines":[{"line_number":10,"context_line":"The API extension is the \u0027front\u0027 end portion of the code, which handles defining a `REST-ful API`_, which is available only to admins."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":""},{"line_number":13,"context_line":".. _`REST-ful API`: https://git.openstack.org/cgit/openstack/neutron/tree/neutron/extensions/bgp_speaker.py"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Database API"}],"source_content_type":"text/x-rst","patch_set":3,"id":"ba3cc151_2086ff65","line":13,"updated":"2015-07-04 14:11:40.000000000","message":"imho, the API should be documented in places other than the code","commit_id":"81772f017f34556e565a572b17b9905968676fd2"},{"author":{"_account_id":11682,"name":"Ryan Moats","email":"rmoats@us.ibm.com","username":"regXboi"},"change_message_id":"bf6afc3ca89bf436c4a981318792580bb262b181","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"The BGP Speaker API extension adds a number of `methods to the database layer`_ of Neutron"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":".. _`methods to the database layer`: https://git.openstack.org/cgit/openstack/neutron/tree/neutron/db/bgp_speaker_db.py"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Logical Model"}],"source_content_type":"text/x-rst","patch_set":3,"id":"ba3cc151_e07fb764","line":21,"updated":"2015-07-04 14:11:40.000000000","message":"ditto earlier comment","commit_id":"81772f017f34556e565a572b17b9905968676fd2"},{"author":{"_account_id":7505,"name":"Jaume Devesa","email":"devvesa@gmail.com","username":"devesa"},"change_message_id":"96727ae5ea4c266615671e5002faaef0c02c3083","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"                 +------------+"},{"line_number":31,"context_line":"                 |AddressScope|"},{"line_number":32,"context_line":"                 +------------+"},{"line_number":33,"context_line":"                       | 1"},{"line_number":34,"context_line":"                       |"}],"source_content_type":"text/x-rst","patch_set":3,"id":"ba3cc151_bb5b2054","line":31,"updated":"2015-06-29 09:00:17.000000000","message":"Isn\u0027t more correct to say that AddressScope is associated 1-N to Networks rather than BgpSpeaker?","commit_id":"81772f017f34556e565a572b17b9905968676fd2"},{"author":{"_account_id":14258,"name":"Ryan Tidwell","email":"rktidwell85@gmail.com","username":"tidwellr"},"change_message_id":"f10ab328f0cf4101153e0ea2b342bca9d0e743fd","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"                 +------------+"},{"line_number":31,"context_line":"                 |AddressScope|"},{"line_number":32,"context_line":"                 +------------+"},{"line_number":33,"context_line":"                       | 1"},{"line_number":34,"context_line":"                       |"}],"source_content_type":"text/x-rst","patch_set":3,"id":"ba3cc151_08443272","line":31,"in_reply_to":"ba3cc151_bb5b2054","updated":"2015-06-29 15:44:53.000000000","message":"A BgpSpeaker can only exist within a single address scope and any networks it is bound to must be in the same address scope.  BgpSpeakers will be explicitly scoped, however networks are indirectly scoped because the subnets they host are scoped.  I don\u0027t think what you\u0027re suggesting is entirely accurate either.  This could definitely use refinement though.","commit_id":"81772f017f34556e565a572b17b9905968676fd2"},{"author":{"_account_id":14258,"name":"Ryan Tidwell","email":"rktidwell85@gmail.com","username":"tidwellr"},"change_message_id":"c895bbc3fc4046fe65521f0c00de93696a235cb7","unresolved":false,"context_lines":[{"line_number":41,"context_line":"                       | N"},{"line_number":42,"context_line":"              +------------------+ N     1 +------+"},{"line_number":43,"context_line":"              |BgpAdvertisedRoute|---------|Router|"},{"line_number":44,"context_line":"              +------------------+         +------+"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"Agent RPC"}],"source_content_type":"text/x-rst","patch_set":3,"id":"ba3cc151_05cbb454","line":44,"updated":"2015-06-29 17:47:12.000000000","message":"BgpAdvertisedRoute is really derived data.  Storing this in the DB is a serious scale issue.  I would expect large numbers of host routes (/32\u0027s or /128\u0027s). That alone makes it a bad idea to persist routes in a DB table.  We can derive this information from existing information in the DB.","commit_id":"81772f017f34556e565a572b17b9905968676fd2"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"9856728e06372aa05bd88276757ce541224ae82f","unresolved":false,"context_lines":[{"line_number":41,"context_line":"                       | N"},{"line_number":42,"context_line":"              +------------------+ N     1 +------+"},{"line_number":43,"context_line":"              |BgpAdvertisedRoute|---------|Router|"},{"line_number":44,"context_line":"              +------------------+         +------+"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"Agent RPC"}],"source_content_type":"text/x-rst","patch_set":3,"id":"ba3cc151_43f586ea","line":44,"in_reply_to":"ba3cc151_05cbb454","updated":"2015-07-03 19:48:47.000000000","message":"+1","commit_id":"81772f017f34556e565a572b17b9905968676fd2"},{"author":{"_account_id":11682,"name":"Ryan Moats","email":"rmoats@us.ibm.com","username":"regXboi"},"change_message_id":"bf6afc3ca89bf436c4a981318792580bb262b181","unresolved":false,"context_lines":[{"line_number":41,"context_line":"                       | N"},{"line_number":42,"context_line":"              +------------------+ N     1 +------+"},{"line_number":43,"context_line":"              |BgpAdvertisedRoute|---------|Router|"},{"line_number":44,"context_line":"              +------------------+         +------+"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"Agent RPC"}],"source_content_type":"text/x-rst","patch_set":3,"id":"ba3cc151_c0f15303","line":44,"in_reply_to":"ba3cc151_43f586ea","updated":"2015-07-04 14:11:40.000000000","message":"+1","commit_id":"81772f017f34556e565a572b17b9905968676fd2"},{"author":{"_account_id":11682,"name":"Ryan Moats","email":"rmoats@us.ibm.com","username":"regXboi"},"change_message_id":"bf6afc3ca89bf436c4a981318792580bb262b181","unresolved":false,"context_lines":[{"line_number":47,"context_line":"Agent RPC"},{"line_number":48,"context_line":"---------"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"The BGP Speaker reference implementation in Neutron uses the Neutron dr_agent to \"speak\" BGP route advertisements to peer routers. "},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"# TODO(tidwellr, vikram) fill in dr_agent RPC interface details "},{"line_number":53,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"ba3cc151_e0f6d7f8","line":50,"updated":"2015-07-04 14:11:40.000000000","message":"nit:trailing space","commit_id":"81772f017f34556e565a572b17b9905968676fd2"},{"author":{"_account_id":7505,"name":"Jaume Devesa","email":"devvesa@gmail.com","username":"devesa"},"change_message_id":"96727ae5ea4c266615671e5002faaef0c02c3083","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"The BGP Speaker reference implementation in Neutron uses the Neutron dr_agent to \"speak\" BGP route advertisements to peer routers. "},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"# TODO(tidwellr, vikram) fill in dr_agent RPC interface details "},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"Dynamic Routing Agent (dr_agent)"}],"source_content_type":"text/x-rst","patch_set":3,"id":"ba3cc151_fb168854","line":52,"updated":"2015-06-29 09:00:17.000000000","message":"nit: trailing here.","commit_id":"81772f017f34556e565a572b17b9905968676fd2"},{"author":{"_account_id":11682,"name":"Ryan Moats","email":"rmoats@us.ibm.com","username":"regXboi"},"change_message_id":"bf6afc3ca89bf436c4a981318792580bb262b181","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"The BGP Speaker reference implementation in Neutron uses the Neutron dr_agent to \"speak\" BGP route advertisements to peer routers. "},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"# TODO(tidwellr, vikram) fill in dr_agent RPC interface details "},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"Dynamic Routing Agent (dr_agent)"}],"source_content_type":"text/x-rst","patch_set":3,"id":"ba3cc151_a0d9af85","line":52,"in_reply_to":"ba3cc151_e85b0e53","updated":"2015-07-04 14:11:40.000000000","message":"nit: trailing space","commit_id":"81772f017f34556e565a572b17b9905968676fd2"},{"author":{"_account_id":14258,"name":"Ryan Tidwell","email":"rktidwell85@gmail.com","username":"tidwellr"},"change_message_id":"f10ab328f0cf4101153e0ea2b342bca9d0e743fd","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"The BGP Speaker reference implementation in Neutron uses the Neutron dr_agent to \"speak\" BGP route advertisements to peer routers. "},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"# TODO(tidwellr, vikram) fill in dr_agent RPC interface details "},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"Dynamic Routing Agent (dr_agent)"}],"source_content_type":"text/x-rst","patch_set":3,"id":"ba3cc151_e85b0e53","line":52,"in_reply_to":"ba3cc151_fb168854","updated":"2015-06-29 15:44:53.000000000","message":"Done","commit_id":"81772f017f34556e565a572b17b9905968676fd2"},{"author":{"_account_id":6685,"name":"Baodong (Robert) Li","email":"baoli@cisco.com","username":"baoli"},"change_message_id":"5b5cdfee5099b8f39a3b17520095a1dbdab11ed6","unresolved":false,"context_lines":[{"line_number":39,"context_line":"              +------------------+ N     1 +------+"},{"line_number":40,"context_line":"              |BgpAdvertisedRoute|---------|Router|"},{"line_number":41,"context_line":"              +------------------+         +------+"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"BgpAdvertisedRoute represents derived data. As the number of BgpAdvertisedRoutes can be quite large, storing in a database table is not feasible. BgpAdvertisedRoute"},{"line_number":45,"context_line":"information can be derived by joining data already available in the Neutron database."}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a4dcd0f_c49e4f07","line":42,"updated":"2015-08-03 15:59:19.000000000","message":"I have a general question: where is this BgpSpeaker going to run?","commit_id":"2856f2369de073d667b446a2ebe6a7ed5e7c8e61"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"5f514dfbaddc05206b785c7feeb8125f2bbe4b17","unresolved":false,"context_lines":[{"line_number":39,"context_line":"              +------------------+ N     1 +------+"},{"line_number":40,"context_line":"              |BgpAdvertisedRoute|---------|Router|"},{"line_number":41,"context_line":"              +------------------+         +------+"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"BgpAdvertisedRoute represents derived data. As the number of BgpAdvertisedRoutes can be quite large, storing in a database table is not feasible. BgpAdvertisedRoute"},{"line_number":45,"context_line":"information can be derived by joining data already available in the Neutron database."}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a4dcd0f_d30358b7","line":42,"in_reply_to":"1a4dcd0f_c49e4f07","updated":"2015-08-04 06:04:26.000000000","message":"Did you mean in which namespace it gonna run?","commit_id":"2856f2369de073d667b446a2ebe6a7ed5e7c8e61"},{"author":{"_account_id":7776,"name":"Paul Carver","email":"pcarver@att.com","username":"pcarver"},"change_message_id":"3822eb1ef44b5baa27a2952eaff52bfcec5505e5","unresolved":false,"context_lines":[{"line_number":41,"context_line":"              +------------------+         +------+"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"BgpAdvertisedRoute represents derived data. As the number of BgpAdvertisedRoutes can be quite large, storing in a database table is not feasible. BgpAdvertisedRoute"},{"line_number":45,"context_line":"information can be derived by joining data already available in the Neutron database."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"Discovering What Routes To Advertise"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a4dcd0f_ea230004","line":44,"updated":"2015-08-04 00:56:51.000000000","message":"Question on capitalization: PEP8 recommends that acronyms be capitalized when used in CapWords. If the names shown here are class names in the code then BGPAdvertisedRoutes would be preferred.","commit_id":"2856f2369de073d667b446a2ebe6a7ed5e7c8e61"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"5f514dfbaddc05206b785c7feeb8125f2bbe4b17","unresolved":false,"context_lines":[{"line_number":44,"context_line":"BgpAdvertisedRoute represents derived data. As the number of BgpAdvertisedRoutes can be quite large, storing in a database table is not feasible. BgpAdvertisedRoute"},{"line_number":45,"context_line":"information can be derived by joining data already available in the Neutron database."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"Discovering What Routes To Advertise"},{"line_number":48,"context_line":"-----------------------------------"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"Neutron will advertise the following classes of routes:"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1a4dcd0f_93bab0e0","line":47,"updated":"2015-08-04 06:04:26.000000000","message":"IMHO, its better to \n\n - Talk about the options a BGP Speaker would have for route advertisement.\n\n - Let\u0027s mention about the test wiki somewhere in the document. https://wiki.openstack.org/wiki/Neutron/DynamicRouting/TestingDynamicRouting","commit_id":"2856f2369de073d667b446a2ebe6a7ed5e7c8e61"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"224eaee985fe038e51933ea018ec8c8b0e8d59bc","unresolved":false,"context_lines":[{"line_number":58,"context_line":"In addition, Neutron will identify all routers attached to the bound network and will begin advertising the next-hop for all tenant networks behind these Neutron"},{"line_number":59,"context_line":"routers."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"When distributed virtual routing (DVR) is enabled on a router, next-hops for floating IP\u0027s and fixed IP\u0027s are not advertised as being at the centralized router. Host routes with the next-hop set to the appropriate compute node are advertised."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"Discovering Floating IP Host Routes on Non-DVR Routers"},{"line_number":64,"context_line":"------------------------------------------------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"9a41bdd9_700927dd","line":61,"updated":"2015-07-16 23:37:33.000000000","message":"Does this internally correspond to the \"FiP\" namespace.","commit_id":"2856f2369de073d667b446a2ebe6a7ed5e7c8e61"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"c8a04706013cbacdf477a9d6d4ca6f8aafd5fa1f","unresolved":false,"context_lines":[{"line_number":58,"context_line":"In addition, Neutron will identify all routers attached to the bound network and will begin advertising the next-hop for all tenant networks behind these Neutron"},{"line_number":59,"context_line":"routers."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"When distributed virtual routing (DVR) is enabled on a router, next-hops for floating IP\u0027s and fixed IP\u0027s are not advertised as being at the centralized router. Host routes with the next-hop set to the appropriate compute node are advertised."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"Discovering Floating IP Host Routes on Non-DVR Routers"},{"line_number":64,"context_line":"------------------------------------------------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"9a41bdd9_a0f978ca","line":61,"in_reply_to":"9a41bdd9_700927dd","updated":"2015-07-17 16:18:39.000000000","message":"Yes, FIP namespace is the nexthop","commit_id":"2856f2369de073d667b446a2ebe6a7ed5e7c8e61"},{"author":{"_account_id":11682,"name":"Ryan Moats","email":"rmoats@us.ibm.com","username":"regXboi"},"change_message_id":"45f539b294f0100e62195aadab9685f87d30beda","unresolved":false,"context_lines":[{"line_number":71,"context_line":"* External network with floating IP subnet of 15.8.0.0/16"},{"line_number":72,"context_line":"* Floating IP\u0027s 15.8.10.2 and 15.8.45.1 are associated and hosted on the Neutron router"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"The table of routes advertised by Neutron look like this:"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"+-------------------------+"},{"line_number":77,"context_line":"|   Network    | Next-hop |"}],"source_content_type":"text/x-rst","patch_set":6,"id":"9a41bdd9_7d99001f","line":74,"updated":"2015-07-16 23:28:03.000000000","message":"nit; *looks*","commit_id":"2856f2369de073d667b446a2ebe6a7ed5e7c8e61"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"224eaee985fe038e51933ea018ec8c8b0e8d59bc","unresolved":false,"context_lines":[{"line_number":85,"context_line":""},{"line_number":86,"context_line":"With DVR-enabled routers, the floating IP can be reached directly on the compute node hosting a given instance.  As such, host routes for the floating IP address"},{"line_number":87,"context_line":"should advertise the FIP agent gateway on the compute node as the nexthop instead of the centralized router. This will keep inbound floating IP traffic from"},{"line_number":88,"context_line":"encountering the bottleneck of the centralized router."},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"#TODO(tidwellr) example"},{"line_number":91,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"9a41bdd9_d07b5328","line":88,"updated":"2015-07-16 23:37:33.000000000","message":"A similar example for DVR-routers would be helpfull to understand.\n\nSay for example. If the gateway is 15.2.1.1.\nthen the fip agent gateway port will be 15.2.1.5\nNow the next will be provided as\n\n15.9.10.2/32  | 15.2.1.5","commit_id":"2856f2369de073d667b446a2ebe6a7ed5e7c8e61"},{"author":{"_account_id":11682,"name":"Ryan Moats","email":"rmoats@us.ibm.com","username":"regXboi"},"change_message_id":"45f539b294f0100e62195aadab9685f87d30beda","unresolved":false,"context_lines":[{"line_number":87,"context_line":"should advertise the FIP agent gateway on the compute node as the nexthop instead of the centralized router. This will keep inbound floating IP traffic from"},{"line_number":88,"context_line":"encountering the bottleneck of the centralized router."},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"#TODO(tidwellr) example"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"Discovering Tenant Network Routes"},{"line_number":93,"context_line":"--------------------------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"9a41bdd9_5d943ce7","line":90,"updated":"2015-07-16 23:28:03.000000000","message":"Extend the previous scenario in the following way:\n\n* The Neutron router with gw_port IP address of 15.1.1.1 is now distributed\n* Floating IP 15.8.10.2 is hosted on a compute node with IP address 15.2.1.20\n* Floating IP 15.8.45.1 is hosted on a compute node with IP address 15.2.2.30\n\nThe table of routes advertised by Neutron looks like this:\n\n+--------------------------+\n|   Network   | Next-hop |\n+--------------------------+\n| 15.8.10.2/32 | 15.2.1.20 |\n| 15.8.45.1/32 | 15.2.2.30 |\n+--------------------------+","commit_id":"2856f2369de073d667b446a2ebe6a7ed5e7c8e61"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"224eaee985fe038e51933ea018ec8c8b0e8d59bc","unresolved":false,"context_lines":[{"line_number":102,"context_line":"to routers on the bound network."},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"# TODO(tidwellr) This could be explained more clearly and a picture is worth 1,000 words"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"Discovering DVR Fixed IP Routes"},{"line_number":107,"context_line":"-------------------------------"},{"line_number":108,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"9a41bdd9_309ddf59","line":105,"updated":"2015-07-16 23:37:33.000000000","message":"Agreed.\nProbably we need a picture for DVR and nonDVR routers.","commit_id":"2856f2369de073d667b446a2ebe6a7ed5e7c8e61"},{"author":{"_account_id":11682,"name":"Ryan Moats","email":"rmoats@us.ibm.com","username":"regXboi"},"change_message_id":"45f539b294f0100e62195aadab9685f87d30beda","unresolved":false,"context_lines":[{"line_number":102,"context_line":"to routers on the bound network."},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"# TODO(tidwellr) This could be explained more clearly and a picture is worth 1,000 words"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"Discovering DVR Fixed IP Routes"},{"line_number":107,"context_line":"-------------------------------"},{"line_number":108,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"9a41bdd9_30a95fe0","line":105,"updated":"2015-07-16 23:28:03.000000000","message":"This picture *might* help:\n\n-------------15.1.2.0/24        ---------------15.1.3.0/24\n       |                                |\n       |                                |\n    +-----+                          +-----+\n    | R1  |                          | R2  |\n    +-----+                          +-----+\n       | 15.1.1.2                       | 15.1.1.3\n       |                                |\n  -------------Network 1---------------------15.1.1.0/24\n\n* Add Network 1 to BGPSpeaker\n* Routes adervtised by BGP Speaker include:\n\n+--------------------------+\n|   Network   |  Next-hop  |\n+--------------------------+\n| 15.1.2.0/24 |  15.1.1.2  |\n| 15.1.3.0/24 |  15.1.1.3  |\n+--------------------------+","commit_id":"2856f2369de073d667b446a2ebe6a7ed5e7c8e61"},{"author":{"_account_id":11682,"name":"Ryan Moats","email":"rmoats@us.ibm.com","username":"regXboi"},"change_message_id":"bb29701fac9e843fe3dc94c8b8eeadf1cfc3ce88","unresolved":false,"context_lines":[{"line_number":102,"context_line":"to routers on the bound network."},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"# TODO(tidwellr) This could be explained more clearly and a picture is worth 1,000 words"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"Discovering DVR Fixed IP Routes"},{"line_number":107,"context_line":"-------------------------------"},{"line_number":108,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"9a41bdd9_b1f9c8ca","line":105,"in_reply_to":"9a41bdd9_20eec88b","updated":"2015-07-17 16:51:31.000000000","message":"@Ryan Tidwell: I think I could craft a picture for that as well (if needed)","commit_id":"2856f2369de073d667b446a2ebe6a7ed5e7c8e61"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"c8a04706013cbacdf477a9d6d4ca6f8aafd5fa1f","unresolved":false,"context_lines":[{"line_number":102,"context_line":"to routers on the bound network."},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"# TODO(tidwellr) This could be explained more clearly and a picture is worth 1,000 words"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"Discovering DVR Fixed IP Routes"},{"line_number":107,"context_line":"-------------------------------"},{"line_number":108,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"9a41bdd9_20eec88b","line":105,"in_reply_to":"9a41bdd9_309ddf59","updated":"2015-07-17 16:18:39.000000000","message":"Thanks for the picture, I think it\u0027s spot-on for non-DVR routers and I\u0027ll put it in the devref.  However, as Swami suggests the picture is a little different with DVR routers.  Anything behind a DVR router will get advertised as a host route.  In other words, when a DVR router is involved we won\u0027t speak for the /24, we will speak for all the /32\u0027s (or /128\u0027s) individually.","commit_id":"2856f2369de073d667b446a2ebe6a7ed5e7c8e61"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"962ac5e1b4f1c446aa77688c424a742683c5ee1c","unresolved":false,"context_lines":[{"line_number":102,"context_line":"to routers on the bound network."},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"# TODO(tidwellr) This could be explained more clearly and a picture is worth 1,000 words"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"Discovering DVR Fixed IP Routes"},{"line_number":107,"context_line":"-------------------------------"},{"line_number":108,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"9a41bdd9_6a158299","line":105,"in_reply_to":"9a41bdd9_b1f9c8ca","updated":"2015-07-17 20:39:40.000000000","message":"@Ryan Moats: That would be awesome!  Feel free to push a new patch set if you want.","commit_id":"2856f2369de073d667b446a2ebe6a7ed5e7c8e61"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"224eaee985fe038e51933ea018ec8c8b0e8d59bc","unresolved":false,"context_lines":[{"line_number":107,"context_line":"-------------------------------"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"When using DVR and IPv6, north-south DVR is hampered by the inability to route return traffic to the proper compute node. Similar to the case of floating IP\u0027s on"},{"line_number":110,"context_line":"a DVR router, north-south DVR for IPv6 fixed IP\u0027s can be enabled by advertising the appropriate host routes for all fixed IP addresses."},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"# TODO(tidwellr) Dive into this more, discuss DB query and other details."},{"line_number":113,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"9a41bdd9_90c38b38","line":110,"updated":"2015-07-16 23:37:33.000000000","message":"It seems both the above sentence kind of tells the same issue.","commit_id":"2856f2369de073d667b446a2ebe6a7ed5e7c8e61"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"224eaee985fe038e51933ea018ec8c8b0e8d59bc","unresolved":false,"context_lines":[{"line_number":121,"context_line":"Agent RPC"},{"line_number":122,"context_line":"---------"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"The BGP Speaker reference implementation in Neutron uses the Neutron dr_agent to \"speak\" BGP route advertisements to peer routers. "},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"# TODO(tidwellr, vikram) fill in dr_agent RPC interface details "},{"line_number":127,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"9a41bdd9_30eb9fb2","line":124,"updated":"2015-07-16 23:37:33.000000000","message":"Fix ths white space","commit_id":"2856f2369de073d667b446a2ebe6a7ed5e7c8e61"},{"author":{"_account_id":11682,"name":"Ryan Moats","email":"rmoats@us.ibm.com","username":"regXboi"},"change_message_id":"45f539b294f0100e62195aadab9685f87d30beda","unresolved":false,"context_lines":[{"line_number":121,"context_line":"Agent RPC"},{"line_number":122,"context_line":"---------"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"The BGP Speaker reference implementation in Neutron uses the Neutron dr_agent to \"speak\" BGP route advertisements to peer routers. "},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"# TODO(tidwellr, vikram) fill in dr_agent RPC interface details "},{"line_number":127,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"9a41bdd9_d0959388","line":124,"updated":"2015-07-16 23:28:03.000000000","message":"nit: trailing space","commit_id":"2856f2369de073d667b446a2ebe6a7ed5e7c8e61"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"35c5cdc2c86d7353de87bc0c5b94a21af8b74a10","unresolved":false,"context_lines":[{"line_number":24,"context_line":"Neutron BGP Speaker"},{"line_number":25,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"BGP speaker is designed as a service plug in which will help to advertise"},{"line_number":28,"context_line":"neutron routes outside the Openstack network via BGP routing protocol using"},{"line_number":29,"context_line":"a BGP speaking driver. In the reference implementation we have used Ryu for"},{"line_number":30,"context_line":"the PoC."}],"source_content_type":"text/x-rst","patch_set":7,"id":"fa1b9901_bd30e4e9","line":27,"updated":"2015-08-23 12:46:58.000000000","message":"nit: plug-in","commit_id":"582b2dc3d5af2f1a147cb9e1b7394d2c5f9e9830"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"35c5cdc2c86d7353de87bc0c5b94a21af8b74a10","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"BGP speaker is designed as a service plug in which will help to advertise"},{"line_number":28,"context_line":"neutron routes outside the Openstack network via BGP routing protocol using"},{"line_number":29,"context_line":"a BGP speaking driver. In the reference implementation we have used Ryu for"},{"line_number":30,"context_line":"the PoC."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"More about the use cases can be found here: `BGP speaker spec \u003chttp://specs.openstack.org/openstack/neutron-specs/specs/liberty/bgp-dynamic-routing.html\u003e`_"}],"source_content_type":"text/x-rst","patch_set":7,"id":"fa1b9901_3d5b7430","line":29,"updated":"2015-08-23 12:46:58.000000000","message":"nit: For the reference implementation, Ryu is used for PoC.","commit_id":"582b2dc3d5af2f1a147cb9e1b7394d2c5f9e9830"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"35c5cdc2c86d7353de87bc0c5b94a21af8b74a10","unresolved":false,"context_lines":[{"line_number":29,"context_line":"a BGP speaking driver. In the reference implementation we have used Ryu for"},{"line_number":30,"context_line":"the PoC."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"More about the use cases can be found here: `BGP speaker spec \u003chttp://specs.openstack.org/openstack/neutron-specs/specs/liberty/bgp-dynamic-routing.html\u003e`_"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"API Extension"},{"line_number":35,"context_line":"-------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"fa1b9901_fd3dfcbb","line":32,"updated":"2015-08-23 12:46:58.000000000","message":"nit: More BGP speaker use cases ..","commit_id":"582b2dc3d5af2f1a147cb9e1b7394d2c5f9e9830"},{"author":{"_account_id":7776,"name":"Paul Carver","email":"pcarver@att.com","username":"pcarver"},"change_message_id":"ccf128be49fa76b61dfbd8d7c4a2e38e61edebe1","unresolved":false,"context_lines":[{"line_number":217,"context_line":"BGP Dynamic Routing Agent"},{"line_number":218,"context_line":"-------------------------"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"BGP Dynamic routing agent (known as BGP DRAgent) host BGP Speaker and advertise"},{"line_number":221,"context_line":"Neutron routes to BGP peers. In the current implementation a maximum of one BGP"},{"line_number":222,"context_line":"speakers can be hosted by a BGP DRAgent. Same BGP speakers can be hosted"},{"line_number":223,"context_line":"different BGP DRAgent to ensuring HA."}],"source_content_type":"text/x-rst","patch_set":7,"id":"da20952f_1399d16e","line":220,"updated":"2015-08-27 01:50:17.000000000","message":"This sentence isn\u0027t quite grammatical. I think what it\u0027s saying is \"The BGP Dynamic Routing Agent (known as BGP DRAgent) controls the host BGP Speaker and advertises\"","commit_id":"582b2dc3d5af2f1a147cb9e1b7394d2c5f9e9830"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"35c5cdc2c86d7353de87bc0c5b94a21af8b74a10","unresolved":false,"context_lines":[{"line_number":218,"context_line":"-------------------------"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"BGP Dynamic routing agent (known as BGP DRAgent) host BGP Speaker and advertise"},{"line_number":221,"context_line":"Neutron routes to BGP peers. In the current implementation a maximum of one BGP"},{"line_number":222,"context_line":"speakers can be hosted by a BGP DRAgent. Same BGP speakers can be hosted"},{"line_number":223,"context_line":"different BGP DRAgent to ensuring HA."},{"line_number":224,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"fa1b9901_1d6d50cc","line":221,"updated":"2015-08-23 12:46:58.000000000","message":"nit: Neutron routes outsides Openstack network.","commit_id":"582b2dc3d5af2f1a147cb9e1b7394d2c5f9e9830"},{"author":{"_account_id":7776,"name":"Paul Carver","email":"pcarver@att.com","username":"pcarver"},"change_message_id":"ccf128be49fa76b61dfbd8d7c4a2e38e61edebe1","unresolved":false,"context_lines":[{"line_number":219,"context_line":""},{"line_number":220,"context_line":"BGP Dynamic routing agent (known as BGP DRAgent) host BGP Speaker and advertise"},{"line_number":221,"context_line":"Neutron routes to BGP peers. In the current implementation a maximum of one BGP"},{"line_number":222,"context_line":"speakers can be hosted by a BGP DRAgent. Same BGP speakers can be hosted"},{"line_number":223,"context_line":"different BGP DRAgent to ensuring HA."},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"+----------+ 1       * +-----------+"}],"source_content_type":"text/x-rst","patch_set":7,"id":"da20952f_13b0f1dc","line":222,"updated":"2015-08-27 01:50:17.000000000","message":"speakers -\u003e speaker\n\n\"The same BGP speakers\"","commit_id":"582b2dc3d5af2f1a147cb9e1b7394d2c5f9e9830"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"422a1b57b7f5cf28a15b52ed58c609d6b113482f","unresolved":false,"context_lines":[{"line_number":220,"context_line":"BGP Dynamic routing agent (known as BGP DRAgent) host BGP Speaker and advertise"},{"line_number":221,"context_line":"Neutron routes to BGP peers. In the current implementation a maximum of one BGP"},{"line_number":222,"context_line":"speakers can be hosted by a BGP DRAgent. Same BGP speakers can be hosted"},{"line_number":223,"context_line":"different BGP DRAgent to ensuring HA."},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"+----------+ 1       * +-----------+"},{"line_number":226,"context_line":"|BGPSpeaker|-----------|BGP DRAgent|"}],"source_content_type":"text/x-rst","patch_set":7,"id":"fa1b9901_1471b3e0","line":223,"updated":"2015-08-22 18:38:44.000000000","message":"nit: by different BGP DRAgent to ensure HA.","commit_id":"582b2dc3d5af2f1a147cb9e1b7394d2c5f9e9830"},{"author":{"_account_id":7776,"name":"Paul Carver","email":"pcarver@att.com","username":"pcarver"},"change_message_id":"ccf128be49fa76b61dfbd8d7c4a2e38e61edebe1","unresolved":false,"context_lines":[{"line_number":267,"context_line":"via API configuration or auto-schedule feature. A set of API\u0027s are exposed to"},{"line_number":268,"context_line":"allow admin for associating a BGPSpeaker with a BGP DRAgent. In addition to"},{"line_number":269,"context_line":"this one can also enable auto-schedule functionality using neutron.conf which"},{"line_number":270,"context_line":"automatically schedules a BGPSpeaker to the first availbale BGP DRAgent"},{"line_number":271,"context_line":"periodically."},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"# TODO(vikram): Show how to associate a BGP speaker to a DRAgent using neutronclient outputs."}],"source_content_type":"text/x-rst","patch_set":7,"id":"da20952f_537989fb","line":270,"updated":"2015-08-27 01:50:17.000000000","message":"availbale -\u003e available","commit_id":"582b2dc3d5af2f1a147cb9e1b7394d2c5f9e9830"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"35c5cdc2c86d7353de87bc0c5b94a21af8b74a10","unresolved":false,"context_lines":[{"line_number":270,"context_line":"automatically schedules a BGPSpeaker to the first availbale BGP DRAgent"},{"line_number":271,"context_line":"periodically."},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"# TODO(vikram): Show how to associate a BGP speaker to a DRAgent using neutronclient outputs."},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"Configuration"},{"line_number":276,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":7,"id":"fa1b9901_dd67d8e8","line":273,"updated":"2015-08-23 12:46:58.000000000","message":"I think we can provide the link to client.py file of python-neutronclient repo.","commit_id":"582b2dc3d5af2f1a147cb9e1b7394d2c5f9e9830"},{"author":{"_account_id":7776,"name":"Paul Carver","email":"pcarver@att.com","username":"pcarver"},"change_message_id":"0eaaeb4166d475a64224579aa4349914b83112d6","unresolved":false,"context_lines":[{"line_number":44,"context_line":"Database API"},{"line_number":45,"context_line":"------------"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"The BGP Speaker API extension adds `BGP Speaker database`_ and `BGP DRAgent Scheduler database`_ model layers to neutron"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":".. _`BGP Speaker database`: https://git.openstack.org/cgit/openstack/neutron/tree/neutron/db/bgp_speaker_db.py"},{"line_number":50,"context_line":".. _`BGP DRAgent Scheduler database`: https://git.openstack.org/cgit/openstack/neutron/tree/neutron/db/bgp_dragentschedulers_db.py"}],"source_content_type":"text/x-rst","patch_set":8,"id":"da20952f_764872cc","line":47,"updated":"2015-09-01 02:28:21.000000000","message":"It would be nice if this line wasn\u0027t broken in the middle of a word, but it\u0027s not a major issue.","commit_id":"66e7903ddd2ff84726e74aa171d7e45902933492"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"4566daeb1d3e7b6a97604dd4eacab6b45859fef4","unresolved":false,"context_lines":[{"line_number":44,"context_line":"Database API"},{"line_number":45,"context_line":"------------"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"The BGP Speaker API extension adds `BGP Speaker database`_ and `BGP DRAgent Scheduler database`_ model layers to neutron"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":".. _`BGP Speaker database`: https://git.openstack.org/cgit/openstack/neutron/tree/neutron/db/bgp_speaker_db.py"},{"line_number":50,"context_line":".. _`BGP DRAgent Scheduler database`: https://git.openstack.org/cgit/openstack/neutron/tree/neutron/db/bgp_dragentschedulers_db.py"}],"source_content_type":"text/x-rst","patch_set":8,"id":"ba15a1d1_bf373faf","line":47,"in_reply_to":"da20952f_764872cc","updated":"2015-09-22 13:13:44.000000000","message":"Please check the generated xml, it\u0027s displayed properly.\ndevref/doc/build/html/devref/bgp_speaker.html","commit_id":"66e7903ddd2ff84726e74aa171d7e45902933492"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"bef7f87099350d89ab722f200e8bc2cef79b3832","unresolved":false,"context_lines":[{"line_number":221,"context_line":"BGP Dynamic Routing Agent"},{"line_number":222,"context_line":"-------------------------"},{"line_number":223,"context_line":"The BGP Dynamic Routing Agent (known as BGP DRAgent) controls the host"},{"line_number":224,"context_line":"BgpSpeaker and advertises Neutron routes outside OpenStack netwok. In the"},{"line_number":225,"context_line":"current implementation a maximum of one BgpSpeaker can only be hosted by a"},{"line_number":226,"context_line":"BGP DRAgent. Same BgpSpeaker can be hosted by different BGP DRAgent for"},{"line_number":227,"context_line":"ensuring HA."}],"source_content_type":"text/x-rst","patch_set":8,"id":"da20952f_508e962e","line":224,"updated":"2015-09-01 01:15:19.000000000","message":"netwok -\u003e network","commit_id":"66e7903ddd2ff84726e74aa171d7e45902933492"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"4566daeb1d3e7b6a97604dd4eacab6b45859fef4","unresolved":false,"context_lines":[{"line_number":221,"context_line":"BGP Dynamic Routing Agent"},{"line_number":222,"context_line":"-------------------------"},{"line_number":223,"context_line":"The BGP Dynamic Routing Agent (known as BGP DRAgent) controls the host"},{"line_number":224,"context_line":"BgpSpeaker and advertises Neutron routes outside OpenStack netwok. In the"},{"line_number":225,"context_line":"current implementation a maximum of one BgpSpeaker can only be hosted by a"},{"line_number":226,"context_line":"BGP DRAgent. Same BgpSpeaker can be hosted by different BGP DRAgent for"},{"line_number":227,"context_line":"ensuring HA."}],"source_content_type":"text/x-rst","patch_set":8,"id":"ba15a1d1_b23c5bc0","line":224,"in_reply_to":"da20952f_508e962e","updated":"2015-09-22 13:13:44.000000000","message":"Done.","commit_id":"66e7903ddd2ff84726e74aa171d7e45902933492"},{"author":{"_account_id":7776,"name":"Paul Carver","email":"pcarver@att.com","username":"pcarver"},"change_message_id":"0eaaeb4166d475a64224579aa4349914b83112d6","unresolved":false,"context_lines":[{"line_number":223,"context_line":"The BGP Dynamic Routing Agent (known as BGP DRAgent) controls the host"},{"line_number":224,"context_line":"BgpSpeaker and advertises Neutron routes outside OpenStack netwok. In the"},{"line_number":225,"context_line":"current implementation a maximum of one BgpSpeaker can only be hosted by a"},{"line_number":226,"context_line":"BGP DRAgent. Same BgpSpeaker can be hosted by different BGP DRAgent for"},{"line_number":227,"context_line":"ensuring HA."},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"::"}],"source_content_type":"text/x-rst","patch_set":8,"id":"da20952f_76e4f2aa","line":226,"updated":"2015-09-01 02:28:21.000000000","message":"Same -\u003e The same\n\nI think it would be clearer if you replace \"different\" with \"multiple\"\n\n\"for ensuring\"-\u003e \"in order to ensure\" or \"in order to provide\"","commit_id":"66e7903ddd2ff84726e74aa171d7e45902933492"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"4566daeb1d3e7b6a97604dd4eacab6b45859fef4","unresolved":false,"context_lines":[{"line_number":223,"context_line":"The BGP Dynamic Routing Agent (known as BGP DRAgent) controls the host"},{"line_number":224,"context_line":"BgpSpeaker and advertises Neutron routes outside OpenStack netwok. In the"},{"line_number":225,"context_line":"current implementation a maximum of one BgpSpeaker can only be hosted by a"},{"line_number":226,"context_line":"BGP DRAgent. Same BgpSpeaker can be hosted by different BGP DRAgent for"},{"line_number":227,"context_line":"ensuring HA."},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"::"}],"source_content_type":"text/x-rst","patch_set":8,"id":"ba15a1d1_9241173c","line":226,"in_reply_to":"da20952f_76e4f2aa","updated":"2015-09-22 13:13:44.000000000","message":"Done.","commit_id":"66e7903ddd2ff84726e74aa171d7e45902933492"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"bef7f87099350d89ab722f200e8bc2cef79b3832","unresolved":false,"context_lines":[{"line_number":266,"context_line":""},{"line_number":267,"context_line":"More about Ryu driver implementation can be found at `BGP Speaker Ryu Implementation`_"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":".. _`BGP Speaker Ryu Implementation`: https://git.openstack.org/cgit/openstack/neutron/tree/neutron/agent/bgp/driver/ryu_driver.py"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"BGP Dynamic Routing Scheduler"},{"line_number":272,"context_line":"-----------------------------"}],"source_content_type":"text/x-rst","patch_set":8,"id":"da20952f_10ea5e74","line":269,"updated":"2015-09-01 01:15:19.000000000","message":"Why is the bgp allocated under neutron/agent/ not neutron/services? BGP speaker is service plugin, isn\u0027t it?\n\nIt\u0027s also better to use bgp/driver\"s\" since we will add other drivers there in future.","commit_id":"66e7903ddd2ff84726e74aa171d7e45902933492"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"9ad3879ab05752fb42ddd11c9c4b72b3bd06d83c","unresolved":false,"context_lines":[{"line_number":266,"context_line":""},{"line_number":267,"context_line":"More about Ryu driver implementation can be found at `BGP Speaker Ryu Implementation`_"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":".. _`BGP Speaker Ryu Implementation`: https://git.openstack.org/cgit/openstack/neutron/tree/neutron/agent/bgp/driver/ryu_driver.py"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"BGP Dynamic Routing Scheduler"},{"line_number":272,"context_line":"-----------------------------"}],"source_content_type":"text/x-rst","patch_set":8,"id":"da20952f_b8e570dd","line":269,"in_reply_to":"da20952f_10ea5e74","updated":"2015-09-01 16:53:13.000000000","message":"Good catch.  Perhaps take a look at https://review.openstack.org/#/c/207625.  I\u0027ll make a comment there.","commit_id":"66e7903ddd2ff84726e74aa171d7e45902933492"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"4566daeb1d3e7b6a97604dd4eacab6b45859fef4","unresolved":false,"context_lines":[{"line_number":266,"context_line":""},{"line_number":267,"context_line":"More about Ryu driver implementation can be found at `BGP Speaker Ryu Implementation`_"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":".. _`BGP Speaker Ryu Implementation`: https://git.openstack.org/cgit/openstack/neutron/tree/neutron/agent/bgp/driver/ryu_driver.py"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"BGP Dynamic Routing Scheduler"},{"line_number":272,"context_line":"-----------------------------"}],"source_content_type":"text/x-rst","patch_set":8,"id":"ba15a1d1_72b48334","line":269,"in_reply_to":"da20952f_b8e570dd","updated":"2015-09-22 13:13:44.000000000","message":"Done.","commit_id":"66e7903ddd2ff84726e74aa171d7e45902933492"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"bef7f87099350d89ab722f200e8bc2cef79b3832","unresolved":false,"context_lines":[{"line_number":320,"context_line":"    | peers     |                                      |"},{"line_number":321,"context_line":"    | tenant_id | a9c1fc1827374f48b4396dfd319ab942     |"},{"line_number":322,"context_line":"    +-----------+--------------------------------------+"},{"line_number":323,"context_line":"    "},{"line_number":324,"context_line":"    * Wait for auto-sync and observe BGP DRAgent logs"},{"line_number":325,"context_line":"    2015-07-23 19:36:46.746 DEBUG neutron.agent.bgp.agent [req-83fac24e-e252-425e-9d47-a1af977ce2b0 None None] Starting _sync_bgp_speaker_task. _sync_bgp_speaker_task /opt/stack/neutron/neutron/agent/bgp/agent.py:93"},{"line_number":326,"context_line":"    2015-07-23 19:36:46.896 INFO bgpspeaker.api.base [req-83fac24e-e252-425e-9d47-a1af977ce2b0 None None] API method core.start called with args: {\u0027router_id\u0027: \u00271.1.1.1\u0027, \u0027label_range\u0027: (100, 100000), \u0027waiter\u0027: \u003cryu.lib.hub.Event object at 0x7ff64bec8210\u003e, \u0027local_as\u0027: 1234, \u0027bgp_server_port\u0027: 179, \u0027refresh_max_eor_time\u0027: 0, \u0027refresh_stalepath_time\u0027: 0}"}],"source_content_type":"text/x-rst","patch_set":8,"id":"da20952f_f0aeca7f","line":323,"updated":"2015-09-01 01:15:19.000000000","message":"Please remove unnecessary space.","commit_id":"66e7903ddd2ff84726e74aa171d7e45902933492"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"4566daeb1d3e7b6a97604dd4eacab6b45859fef4","unresolved":false,"context_lines":[{"line_number":320,"context_line":"    | peers     |                                      |"},{"line_number":321,"context_line":"    | tenant_id | a9c1fc1827374f48b4396dfd319ab942     |"},{"line_number":322,"context_line":"    +-----------+--------------------------------------+"},{"line_number":323,"context_line":"    "},{"line_number":324,"context_line":"    * Wait for auto-sync and observe BGP DRAgent logs"},{"line_number":325,"context_line":"    2015-07-23 19:36:46.746 DEBUG neutron.agent.bgp.agent [req-83fac24e-e252-425e-9d47-a1af977ce2b0 None None] Starting _sync_bgp_speaker_task. _sync_bgp_speaker_task /opt/stack/neutron/neutron/agent/bgp/agent.py:93"},{"line_number":326,"context_line":"    2015-07-23 19:36:46.896 INFO bgpspeaker.api.base [req-83fac24e-e252-425e-9d47-a1af977ce2b0 None None] API method core.start called with args: {\u0027router_id\u0027: \u00271.1.1.1\u0027, \u0027label_range\u0027: (100, 100000), \u0027waiter\u0027: \u003cryu.lib.hub.Event object at 0x7ff64bec8210\u003e, \u0027local_as\u0027: 1234, \u0027bgp_server_port\u0027: 179, \u0027refresh_max_eor_time\u0027: 0, \u0027refresh_stalepath_time\u0027: 0}"}],"source_content_type":"text/x-rst","patch_set":8,"id":"ba15a1d1_12e9871a","line":323,"in_reply_to":"da20952f_f0aeca7f","updated":"2015-09-22 13:13:44.000000000","message":"Done.","commit_id":"66e7903ddd2ff84726e74aa171d7e45902933492"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"bef7f87099350d89ab722f200e8bc2cef79b3832","unresolved":false,"context_lines":[{"line_number":339,"context_line":""},{"line_number":340,"context_line":"    * Check BGP listening port"},{"line_number":341,"context_line":"    ubuntu:~/work/openstack/projects$ sudo netstat -tapen | grep \":179 \""},{"line_number":342,"context_line":"    tcp        0      0 0.0.0.0:179             0.0.0.0:*               LISTEN      0          3817911     14989/python    "},{"line_number":343,"context_line":"    tcp6       0      0 :::179                  :::*                    LISTEN      0          3817912     14989/python    "},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"    * Delete BgpSpeaker"}],"source_content_type":"text/x-rst","patch_set":8,"id":"da20952f_b0cdb267","line":342,"updated":"2015-09-01 01:15:19.000000000","message":"ditto","commit_id":"66e7903ddd2ff84726e74aa171d7e45902933492"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"4566daeb1d3e7b6a97604dd4eacab6b45859fef4","unresolved":false,"context_lines":[{"line_number":339,"context_line":""},{"line_number":340,"context_line":"    * Check BGP listening port"},{"line_number":341,"context_line":"    ubuntu:~/work/openstack/projects$ sudo netstat -tapen | grep \":179 \""},{"line_number":342,"context_line":"    tcp        0      0 0.0.0.0:179             0.0.0.0:*               LISTEN      0          3817911     14989/python    "},{"line_number":343,"context_line":"    tcp6       0      0 :::179                  :::*                    LISTEN      0          3817912     14989/python    "},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"    * Delete BgpSpeaker"}],"source_content_type":"text/x-rst","patch_set":8,"id":"ba15a1d1_52e7ff3f","line":342,"in_reply_to":"da20952f_b0cdb267","updated":"2015-09-22 13:13:44.000000000","message":"Done.","commit_id":"66e7903ddd2ff84726e74aa171d7e45902933492"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"bef7f87099350d89ab722f200e8bc2cef79b3832","unresolved":false,"context_lines":[{"line_number":340,"context_line":"    * Check BGP listening port"},{"line_number":341,"context_line":"    ubuntu:~/work/openstack/projects$ sudo netstat -tapen | grep \":179 \""},{"line_number":342,"context_line":"    tcp        0      0 0.0.0.0:179             0.0.0.0:*               LISTEN      0          3817911     14989/python    "},{"line_number":343,"context_line":"    tcp6       0      0 :::179                  :::*                    LISTEN      0          3817912     14989/python    "},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"    * Delete BgpSpeaker"},{"line_number":346,"context_line":"    ubuntu:~/devstack$ neutron bgp-speaker-delete bac56d01-265d-45a0-9dbd-15e71872335c"}],"source_content_type":"text/x-rst","patch_set":8,"id":"da20952f_70c39a38","line":343,"updated":"2015-09-01 01:15:19.000000000","message":"ditto","commit_id":"66e7903ddd2ff84726e74aa171d7e45902933492"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"4566daeb1d3e7b6a97604dd4eacab6b45859fef4","unresolved":false,"context_lines":[{"line_number":340,"context_line":"    * Check BGP listening port"},{"line_number":341,"context_line":"    ubuntu:~/work/openstack/projects$ sudo netstat -tapen | grep \":179 \""},{"line_number":342,"context_line":"    tcp        0      0 0.0.0.0:179             0.0.0.0:*               LISTEN      0          3817911     14989/python    "},{"line_number":343,"context_line":"    tcp6       0      0 :::179                  :::*                    LISTEN      0          3817912     14989/python    "},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"    * Delete BgpSpeaker"},{"line_number":346,"context_line":"    ubuntu:~/devstack$ neutron bgp-speaker-delete bac56d01-265d-45a0-9dbd-15e71872335c"}],"source_content_type":"text/x-rst","patch_set":8,"id":"ba15a1d1_f2f5f3ec","line":343,"in_reply_to":"da20952f_70c39a38","updated":"2015-09-22 13:13:44.000000000","message":"Done.","commit_id":"66e7903ddd2ff84726e74aa171d7e45902933492"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"bef7f87099350d89ab722f200e8bc2cef79b3832","unresolved":false,"context_lines":[{"line_number":345,"context_line":"    * Delete BgpSpeaker"},{"line_number":346,"context_line":"    ubuntu:~/devstack$ neutron bgp-speaker-delete bac56d01-265d-45a0-9dbd-15e71872335c"},{"line_number":347,"context_line":"    Deleted bgp_speaker: bac56d01-265d-45a0-9dbd-15e71872335c"},{"line_number":348,"context_line":"    "},{"line_number":349,"context_line":"    * Wait for auto-sync"},{"line_number":350,"context_line":"    2015-07-23 19:38:46.745 DEBUG neutron.agent.bgp.agent [req-83fac24e-e252-425e-9d47-a1af977ce2b0 None None] Starting _sync_bgp_speaker_task. _sync_bgp_speaker_task /opt/stack/neutron/neutron/agent/bgp/agent.py:93"},{"line_number":351,"context_line":"    2015-07-23 19:38:46.770 INFO bgpspeaker.api.base [req-83fac24e-e252-425e-9d47-a1af977ce2b0 None None] API method core.stop called with args: {}"}],"source_content_type":"text/x-rst","patch_set":8,"id":"da20952f_f0e56adb","line":348,"updated":"2015-09-01 01:15:19.000000000","message":"ditto","commit_id":"66e7903ddd2ff84726e74aa171d7e45902933492"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"4566daeb1d3e7b6a97604dd4eacab6b45859fef4","unresolved":false,"context_lines":[{"line_number":345,"context_line":"    * Delete BgpSpeaker"},{"line_number":346,"context_line":"    ubuntu:~/devstack$ neutron bgp-speaker-delete bac56d01-265d-45a0-9dbd-15e71872335c"},{"line_number":347,"context_line":"    Deleted bgp_speaker: bac56d01-265d-45a0-9dbd-15e71872335c"},{"line_number":348,"context_line":"    "},{"line_number":349,"context_line":"    * Wait for auto-sync"},{"line_number":350,"context_line":"    2015-07-23 19:38:46.745 DEBUG neutron.agent.bgp.agent [req-83fac24e-e252-425e-9d47-a1af977ce2b0 None None] Starting _sync_bgp_speaker_task. _sync_bgp_speaker_task /opt/stack/neutron/neutron/agent/bgp/agent.py:93"},{"line_number":351,"context_line":"    2015-07-23 19:38:46.770 INFO bgpspeaker.api.base [req-83fac24e-e252-425e-9d47-a1af977ce2b0 None None] API method core.stop called with args: {}"}],"source_content_type":"text/x-rst","patch_set":8,"id":"ba15a1d1_d2f22f06","line":348,"in_reply_to":"da20952f_f0e56adb","updated":"2015-09-22 13:13:44.000000000","message":"Done.","commit_id":"66e7903ddd2ff84726e74aa171d7e45902933492"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"bef7f87099350d89ab722f200e8bc2cef79b3832","unresolved":false,"context_lines":[{"line_number":367,"context_line":""},{"line_number":368,"context_line":"    * Check whether the BgpSpeaker is un-scheduled from the BGP DRAgent or not"},{"line_number":369,"context_line":"    ubuntu:~/devstack$ neutron bgp-speaker-list-on-dr-agent 90669595-48ee-4955-9ecf-61c104da7b30"},{"line_number":370,"context_line":"    "},{"line_number":371,"context_line":"    * Verify BGP listening port"},{"line_number":372,"context_line":"    ubuntu:~/work/openstack/projects$ sudo netstat -tapen | grep \":179 \""},{"line_number":373,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"da20952f_90d50ee6","line":370,"updated":"2015-09-01 01:15:19.000000000","message":"ditto","commit_id":"66e7903ddd2ff84726e74aa171d7e45902933492"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"4566daeb1d3e7b6a97604dd4eacab6b45859fef4","unresolved":false,"context_lines":[{"line_number":367,"context_line":""},{"line_number":368,"context_line":"    * Check whether the BgpSpeaker is un-scheduled from the BGP DRAgent or not"},{"line_number":369,"context_line":"    ubuntu:~/devstack$ neutron bgp-speaker-list-on-dr-agent 90669595-48ee-4955-9ecf-61c104da7b30"},{"line_number":370,"context_line":"    "},{"line_number":371,"context_line":"    * Verify BGP listening port"},{"line_number":372,"context_line":"    ubuntu:~/work/openstack/projects$ sudo netstat -tapen | grep \":179 \""},{"line_number":373,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"ba15a1d1_32d36b61","line":370,"in_reply_to":"da20952f_90d50ee6","updated":"2015-09-22 13:13:44.000000000","message":"Done.","commit_id":"66e7903ddd2ff84726e74aa171d7e45902933492"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"4acc8bfb983b61903bc1bd1358027871e6aa0f8b","unresolved":false,"context_lines":[{"line_number":377,"context_line":"++++++++++++++++++++++++++++++++"},{"line_number":378,"context_line":"* Create a BgpSpeaker with local_as 1234."},{"line_number":379,"context_line":"* Attach it to one of the DRAgent."},{"line_number":380,"context_line":"* Check BgpSpeaker MUST be added to the active DRAgent and scheduled using Ryu."},{"line_number":381,"context_line":"* Delete BgpSpeaker."},{"line_number":382,"context_line":"* Check BgpSpeaker MUST be removed from the active DRAgent and un-scheduled."},{"line_number":383,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"da20952f_da9adc13","line":380,"updated":"2015-09-06 06:21:23.000000000","message":"Change DRAgent \u003d\u003d\u003e BgpDrAgent to make it consistent with the code.","commit_id":"66e7903ddd2ff84726e74aa171d7e45902933492"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"4566daeb1d3e7b6a97604dd4eacab6b45859fef4","unresolved":false,"context_lines":[{"line_number":377,"context_line":"++++++++++++++++++++++++++++++++"},{"line_number":378,"context_line":"* Create a BgpSpeaker with local_as 1234."},{"line_number":379,"context_line":"* Attach it to one of the DRAgent."},{"line_number":380,"context_line":"* Check BgpSpeaker MUST be added to the active DRAgent and scheduled using Ryu."},{"line_number":381,"context_line":"* Delete BgpSpeaker."},{"line_number":382,"context_line":"* Check BgpSpeaker MUST be removed from the active DRAgent and un-scheduled."},{"line_number":383,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"ba15a1d1_92c4b792","line":380,"in_reply_to":"da20952f_da9adc13","updated":"2015-09-22 13:13:44.000000000","message":"Done.","commit_id":"66e7903ddd2ff84726e74aa171d7e45902933492"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"4acc8bfb983b61903bc1bd1358027871e6aa0f8b","unresolved":false,"context_lines":[{"line_number":392,"context_line":""},{"line_number":393,"context_line":"On server side:"},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"* enable BGP Speaker service."},{"line_number":396,"context_line":"  (service_plugins+\u003dbgp_dr, where bgp_dr \u003d neutron.services.bgp_speaker.plugin:BgpSpeakerPlugin);"},{"line_number":397,"context_line":"* set BGP Speaker driver via bgp_drscheduler_driver."},{"line_number":398,"context_line":"  (neutron.scheduler.bgp_dragent_scheduler.ChanceScheduler is the default);"}],"source_content_type":"text/x-rst","patch_set":8,"id":"da20952f_9ab78484","line":395,"updated":"2015-09-06 06:21:23.000000000","message":"Change BGP Speaker \u003d\u003d\u003e with the appropriate service name as mentioned in the neutron.conf","commit_id":"66e7903ddd2ff84726e74aa171d7e45902933492"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"23f3bb5c09746fb8ab4f56d239bfc63cd0d9f5aa","unresolved":false,"context_lines":[{"line_number":401,"context_line":""},{"line_number":402,"context_line":"On Agent side:"},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"* Deploy BGP DRAgent on the required hosts."},{"line_number":405,"context_line":""},{"line_number":406,"context_line":""},{"line_number":407,"context_line":"Testing strategy"}],"source_content_type":"text/x-rst","patch_set":8,"id":"da20952f_0f1b1082","line":404,"updated":"2015-09-01 06:51:18.000000000","message":"Add details about driver integration.","commit_id":"66e7903ddd2ff84726e74aa171d7e45902933492"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"4acc8bfb983b61903bc1bd1358027871e6aa0f8b","unresolved":false,"context_lines":[{"line_number":432,"context_line":""},{"line_number":433,"context_line":"# TODO(vikram): Check for it\u0027s applicability"},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"E2E tests"},{"line_number":436,"context_line":"---------"},{"line_number":437,"context_line":""},{"line_number":438,"context_line":"Guideline on E2E testing can be found: \u0027\u003chttps://wiki.openstack.org/wiki/Neutron/DynamicRouting/TestingDynamicRouting\u003e\u0027_"}],"source_content_type":"text/x-rst","patch_set":8,"id":"da20952f_7a6b90f1","line":435,"updated":"2015-09-06 06:21:23.000000000","message":"Provide a section showing all the newly added neutron-client CLI\u0027s with their usage. It will be better if we can provide the API doc link as well.","commit_id":"66e7903ddd2ff84726e74aa171d7e45902933492"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"4acc8bfb983b61903bc1bd1358027871e6aa0f8b","unresolved":false,"context_lines":[{"line_number":435,"context_line":"E2E tests"},{"line_number":436,"context_line":"---------"},{"line_number":437,"context_line":""},{"line_number":438,"context_line":"Guideline on E2E testing can be found: \u0027\u003chttps://wiki.openstack.org/wiki/Neutron/DynamicRouting/TestingDynamicRouting\u003e\u0027_"},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"Exceptions and Caveats"},{"line_number":441,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":8,"id":"da20952f_9ae9c481","line":438,"updated":"2015-09-06 06:21:23.000000000","message":"Let\u0027 document test snapshot over here..","commit_id":"66e7903ddd2ff84726e74aa171d7e45902933492"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"4acc8bfb983b61903bc1bd1358027871e6aa0f8b","unresolved":false,"context_lines":[{"line_number":445,"context_line":"* All operations exposed by this extension are admin-only operations."},{"line_number":446,"context_line":"* All Neutron networks bound to BgpSpeakers must be from the same address scope."},{"line_number":447,"context_line":"* No support for route distinguishers and route targets."},{"line_number":448,"context_line":"* A BGPDRAgent can only host one BGP Speaker."}],"source_content_type":"text/x-rst","patch_set":8,"id":"da20952f_1af6145d","line":448,"updated":"2015-09-06 06:21:23.000000000","message":"Change BGPDRAgent \u003d\u003d\u003e BgpDrAgent to make it consistent with the code.","commit_id":"66e7903ddd2ff84726e74aa171d7e45902933492"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"4566daeb1d3e7b6a97604dd4eacab6b45859fef4","unresolved":false,"context_lines":[{"line_number":445,"context_line":"* All operations exposed by this extension are admin-only operations."},{"line_number":446,"context_line":"* All Neutron networks bound to BgpSpeakers must be from the same address scope."},{"line_number":447,"context_line":"* No support for route distinguishers and route targets."},{"line_number":448,"context_line":"* A BGPDRAgent can only host one BGP Speaker."}],"source_content_type":"text/x-rst","patch_set":8,"id":"ba15a1d1_d298ef6c","line":448,"in_reply_to":"da20952f_1af6145d","updated":"2015-09-22 13:13:44.000000000","message":"Done.","commit_id":"66e7903ddd2ff84726e74aa171d7e45902933492"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"143b9b30cda3aca23e9dd8fe8aee80de68f4407e","unresolved":false,"context_lines":[{"line_number":79,"context_line":"already available in the Neutron database."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"Discovering What Routes To Advertise"},{"line_number":82,"context_line":"------------------------------------"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"For Neutron to determine what routes it should advertise, a BgpSpeaker must be"},{"line_number":85,"context_line":"bound to a \"gateway\" network. A \"gateway\" network is a simply a Neutron network"}],"source_content_type":"text/x-rst","patch_set":9,"id":"ba15a1d1_b19f64b3","line":82,"updated":"2015-09-15 23:48:41.000000000","message":"Need to point out that the gateway network address scope and the tenant network address scope must be the same for a tenant network to be directly routable.","commit_id":"c8b5df29add5c6da4e65d9560b7cdd13de2c70c3"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"a7b47d1b6a14d33b9d659bdbfb552afe0be82f07","unresolved":false,"context_lines":[{"line_number":304,"context_line":"   +----------+ 1       * +-----------+"},{"line_number":305,"context_line":"   |BgpSpeaker|-----------|BGP DRAgent|"},{"line_number":306,"context_line":"   +----------+           +-----------+"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"RPC communication"},{"line_number":309,"context_line":"~~~~~~~~~~~~~~~~~"},{"line_number":310,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"da20952f_1e409206","line":307,"updated":"2015-09-10 20:29:03.000000000","message":"Quagga does support multiple BGP instances using multiple instances and views.\n\nex:\n\nbgp multiple-instance\n!\nrouter bgp 1 view 1\n neighbor 10.0.0.1 remote-as 2\n neighbor 10.0.0.2 remote-as 3\n!\nrouter bgp 2 view 2\n neighbor 10.0.0.3 remote-as 4\n neighbor 10.0.0.4 remote-as 5\n\nI\u0027d like to be able to support multiple BgpSpeakers per dr_agent and perhaps make the name attribute required and unique. Apparently ryu does not support this, but I\u0027d like to see a Quagga driver for this.  Each driver may have different limitations that we need to deal with.","commit_id":"c8b5df29add5c6da4e65d9560b7cdd13de2c70c3"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"7a4cdd80dd6af20e1f396375827f94115a19d585","unresolved":false,"context_lines":[{"line_number":304,"context_line":"   +----------+ 1       * +-----------+"},{"line_number":305,"context_line":"   |BgpSpeaker|-----------|BGP DRAgent|"},{"line_number":306,"context_line":"   +----------+           +-----------+"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"RPC communication"},{"line_number":309,"context_line":"~~~~~~~~~~~~~~~~~"},{"line_number":310,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"ba15a1d1_7f268769","line":307,"in_reply_to":"ba15a1d1_b3c7fd62","updated":"2015-09-22 13:13:50.000000000","message":"Done.","commit_id":"c8b5df29add5c6da4e65d9560b7cdd13de2c70c3"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"65c125259b26b9d6085205a32211e75067059a56","unresolved":false,"context_lines":[{"line_number":304,"context_line":"   +----------+ 1       * +-----------+"},{"line_number":305,"context_line":"   |BgpSpeaker|-----------|BGP DRAgent|"},{"line_number":306,"context_line":"   +----------+           +-----------+"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"RPC communication"},{"line_number":309,"context_line":"~~~~~~~~~~~~~~~~~"},{"line_number":310,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"da20952f_3ccd5030","line":307,"in_reply_to":"da20952f_1e409206","updated":"2015-09-11 07:34:24.000000000","message":"I agree.\n\nWe can handle this by \n- Having a configuration section in the config file to identify whether the driver can host multiple speakers or not. By default, it will be \u0027False\u0027.\n- Have some display parameter for a BgpSpeaker to flash whether it is ACTIVE/INACTIVE. \u0027ACTIVE\u0027 means it\u0027s running and vice-versa.\n- Scheduler config to limit the number of BgpSpeaker to BgpDrAgent association.\n\nJust a thought!","commit_id":"c8b5df29add5c6da4e65d9560b7cdd13de2c70c3"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"143b9b30cda3aca23e9dd8fe8aee80de68f4407e","unresolved":false,"context_lines":[{"line_number":304,"context_line":"   +----------+ 1       * +-----------+"},{"line_number":305,"context_line":"   |BgpSpeaker|-----------|BGP DRAgent|"},{"line_number":306,"context_line":"   +----------+           +-----------+"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"RPC communication"},{"line_number":309,"context_line":"~~~~~~~~~~~~~~~~~"},{"line_number":310,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"da20952f_4551362f","line":307,"in_reply_to":"da20952f_3ccd5030","updated":"2015-09-15 23:48:41.000000000","message":"Let\u0027s put that intelligence in the driver itself so that when scheduling to an agent we can do something intelligent when placing a BgpSpeaker.","commit_id":"c8b5df29add5c6da4e65d9560b7cdd13de2c70c3"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"3bd9174f317f42f0aa5c69588174dec997af77c0","unresolved":false,"context_lines":[{"line_number":304,"context_line":"   +----------+ 1       * +-----------+"},{"line_number":305,"context_line":"   |BgpSpeaker|-----------|BGP DRAgent|"},{"line_number":306,"context_line":"   +----------+           +-----------+"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"RPC communication"},{"line_number":309,"context_line":"~~~~~~~~~~~~~~~~~"},{"line_number":310,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"ba15a1d1_b3c7fd62","line":307,"in_reply_to":"da20952f_4551362f","updated":"2015-09-18 03:25:46.000000000","message":"+1. Will rephrase and change the code accordingly.","commit_id":"c8b5df29add5c6da4e65d9560b7cdd13de2c70c3"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"c91117969440d2da9cae2450c6cad657e4727f76","unresolved":false,"context_lines":[{"line_number":339,"context_line":""},{"line_number":340,"context_line":"More about Ryu driver implementation can be found at `BGP Speaker Ryu Implementation`_"},{"line_number":341,"context_line":""},{"line_number":342,"context_line":".. _`BGP Speaker Ryu Implementation`: https://git.openstack.org/cgit/openstack/neutron/tree/neutron/agent/bgp/driver/ryu_driver.py"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"BGP Dynamic Routing Scheduler"},{"line_number":345,"context_line":"-----------------------------"}],"source_content_type":"text/x-rst","patch_set":9,"id":"da20952f_fdbaa470","line":342,"updated":"2015-09-10 07:27:31.000000000","message":"Address PS8 comment.","commit_id":"c8b5df29add5c6da4e65d9560b7cdd13de2c70c3"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"7a4cdd80dd6af20e1f396375827f94115a19d585","unresolved":false,"context_lines":[{"line_number":339,"context_line":""},{"line_number":340,"context_line":"More about Ryu driver implementation can be found at `BGP Speaker Ryu Implementation`_"},{"line_number":341,"context_line":""},{"line_number":342,"context_line":".. _`BGP Speaker Ryu Implementation`: https://git.openstack.org/cgit/openstack/neutron/tree/neutron/agent/bgp/driver/ryu_driver.py"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"BGP Dynamic Routing Scheduler"},{"line_number":345,"context_line":"-----------------------------"}],"source_content_type":"text/x-rst","patch_set":9,"id":"ba15a1d1_f2009368","line":342,"in_reply_to":"da20952f_fdbaa470","updated":"2015-09-22 13:13:50.000000000","message":"Done.","commit_id":"c8b5df29add5c6da4e65d9560b7cdd13de2c70c3"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"c91117969440d2da9cae2450c6cad657e4727f76","unresolved":false,"context_lines":[{"line_number":450,"context_line":"++++++++++++++++++++++++++++++++"},{"line_number":451,"context_line":"* Create a BgpSpeaker with local_as 1234."},{"line_number":452,"context_line":"* Attach it to one of the DRAgent."},{"line_number":453,"context_line":"* Check BgpSpeaker MUST be added to the active DRAgent and scheduled using Ryu."},{"line_number":454,"context_line":"* Delete BgpSpeaker."},{"line_number":455,"context_line":"* Check BgpSpeaker MUST be removed from the active DRAgent and un-scheduled."},{"line_number":456,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"da20952f_9d8368a9","line":453,"updated":"2015-09-10 07:27:31.000000000","message":"Address PS8 comment.","commit_id":"c8b5df29add5c6da4e65d9560b7cdd13de2c70c3"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"7a4cdd80dd6af20e1f396375827f94115a19d585","unresolved":false,"context_lines":[{"line_number":450,"context_line":"++++++++++++++++++++++++++++++++"},{"line_number":451,"context_line":"* Create a BgpSpeaker with local_as 1234."},{"line_number":452,"context_line":"* Attach it to one of the DRAgent."},{"line_number":453,"context_line":"* Check BgpSpeaker MUST be added to the active DRAgent and scheduled using Ryu."},{"line_number":454,"context_line":"* Delete BgpSpeaker."},{"line_number":455,"context_line":"* Check BgpSpeaker MUST be removed from the active DRAgent and un-scheduled."},{"line_number":456,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"ba15a1d1_9f9cbb5e","line":453,"in_reply_to":"da20952f_9d8368a9","updated":"2015-09-22 13:13:50.000000000","message":"Done.","commit_id":"c8b5df29add5c6da4e65d9560b7cdd13de2c70c3"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"c91117969440d2da9cae2450c6cad657e4727f76","unresolved":false,"context_lines":[{"line_number":465,"context_line":""},{"line_number":466,"context_line":"On server side:"},{"line_number":467,"context_line":""},{"line_number":468,"context_line":"* enable BGP Speaker service."},{"line_number":469,"context_line":"  (service_plugins+\u003dbgp_dr, where bgp_dr \u003d neutron.services.bgp_speaker.plugin:BgpSpeakerPlugin);"},{"line_number":470,"context_line":"* set BGP Speaker driver via bgp_drscheduler_driver."},{"line_number":471,"context_line":"  (neutron.scheduler.bgp_dragent_scheduler.ChanceScheduler is the default);"}],"source_content_type":"text/x-rst","patch_set":9,"id":"da20952f_7d88d4c6","line":468,"updated":"2015-09-10 07:27:31.000000000","message":"Address PS8 comment.","commit_id":"c8b5df29add5c6da4e65d9560b7cdd13de2c70c3"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"c91117969440d2da9cae2450c6cad657e4727f76","unresolved":false,"context_lines":[{"line_number":474,"context_line":""},{"line_number":475,"context_line":"On Agent side:"},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"* Deploy BGP DRAgent on the required hosts."},{"line_number":478,"context_line":""},{"line_number":479,"context_line":""},{"line_number":480,"context_line":"Testing strategy"}],"source_content_type":"text/x-rst","patch_set":9,"id":"da20952f_dde9e080","line":477,"updated":"2015-09-10 07:27:31.000000000","message":"Address PS8 comment.","commit_id":"c8b5df29add5c6da4e65d9560b7cdd13de2c70c3"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"7a4cdd80dd6af20e1f396375827f94115a19d585","unresolved":false,"context_lines":[{"line_number":474,"context_line":""},{"line_number":475,"context_line":"On Agent side:"},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"* Deploy BGP DRAgent on the required hosts."},{"line_number":478,"context_line":""},{"line_number":479,"context_line":""},{"line_number":480,"context_line":"Testing strategy"}],"source_content_type":"text/x-rst","patch_set":9,"id":"ba15a1d1_ffadb788","line":477,"in_reply_to":"da20952f_dde9e080","updated":"2015-09-22 13:13:50.000000000","message":"Done","commit_id":"c8b5df29add5c6da4e65d9560b7cdd13de2c70c3"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"c91117969440d2da9cae2450c6cad657e4727f76","unresolved":false,"context_lines":[{"line_number":505,"context_line":""},{"line_number":506,"context_line":"# TODO(vikram): Check for it\u0027s applicability"},{"line_number":507,"context_line":""},{"line_number":508,"context_line":"E2E tests"},{"line_number":509,"context_line":"---------"},{"line_number":510,"context_line":""},{"line_number":511,"context_line":"Guideline on E2E testing can be found: \u0027\u003chttps://wiki.openstack.org/wiki/Neutron/DynamicRouting/TestingDynamicRouting\u003e\u0027_"}],"source_content_type":"text/x-rst","patch_set":9,"id":"da20952f_7d01b438","line":508,"updated":"2015-09-10 07:27:31.000000000","message":"Address PS8 comment.","commit_id":"c8b5df29add5c6da4e65d9560b7cdd13de2c70c3"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"7a4cdd80dd6af20e1f396375827f94115a19d585","unresolved":false,"context_lines":[{"line_number":505,"context_line":""},{"line_number":506,"context_line":"# TODO(vikram): Check for it\u0027s applicability"},{"line_number":507,"context_line":""},{"line_number":508,"context_line":"E2E tests"},{"line_number":509,"context_line":"---------"},{"line_number":510,"context_line":""},{"line_number":511,"context_line":"Guideline on E2E testing can be found: \u0027\u003chttps://wiki.openstack.org/wiki/Neutron/DynamicRouting/TestingDynamicRouting\u003e\u0027_"}],"source_content_type":"text/x-rst","patch_set":9,"id":"ba15a1d1_7fb0c7dd","line":508,"in_reply_to":"da20952f_7d01b438","updated":"2015-09-22 13:13:50.000000000","message":"Done","commit_id":"c8b5df29add5c6da4e65d9560b7cdd13de2c70c3"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"c91117969440d2da9cae2450c6cad657e4727f76","unresolved":false,"context_lines":[{"line_number":508,"context_line":"E2E tests"},{"line_number":509,"context_line":"---------"},{"line_number":510,"context_line":""},{"line_number":511,"context_line":"Guideline on E2E testing can be found: \u0027\u003chttps://wiki.openstack.org/wiki/Neutron/DynamicRouting/TestingDynamicRouting\u003e\u0027_"},{"line_number":512,"context_line":""},{"line_number":513,"context_line":"Exceptions and Caveats"},{"line_number":514,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":9,"id":"da20952f_fd9384fe","line":511,"updated":"2015-09-10 07:27:31.000000000","message":"Let\u0027s document this section over here.","commit_id":"c8b5df29add5c6da4e65d9560b7cdd13de2c70c3"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"c91117969440d2da9cae2450c6cad657e4727f76","unresolved":false,"context_lines":[{"line_number":518,"context_line":"* All operations exposed by this extension are admin-only operations."},{"line_number":519,"context_line":"* All Neutron networks bound to BgpSpeakers must be from the same address scope."},{"line_number":520,"context_line":"* No support for route distinguishers and route targets."},{"line_number":521,"context_line":"* A BGPDRAgent can only host one BGP Speaker."}],"source_content_type":"text/x-rst","patch_set":9,"id":"da20952f_1d9758ec","line":521,"updated":"2015-09-10 07:27:31.000000000","message":"Address PS8 comment.","commit_id":"c8b5df29add5c6da4e65d9560b7cdd13de2c70c3"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"7a4cdd80dd6af20e1f396375827f94115a19d585","unresolved":false,"context_lines":[{"line_number":518,"context_line":"* All operations exposed by this extension are admin-only operations."},{"line_number":519,"context_line":"* All Neutron networks bound to BgpSpeakers must be from the same address scope."},{"line_number":520,"context_line":"* No support for route distinguishers and route targets."},{"line_number":521,"context_line":"* A BGPDRAgent can only host one BGP Speaker."}],"source_content_type":"text/x-rst","patch_set":9,"id":"ba15a1d1_b23a1b33","line":521,"in_reply_to":"da20952f_1d9758ec","updated":"2015-09-22 13:13:50.000000000","message":"Done.","commit_id":"c8b5df29add5c6da4e65d9560b7cdd13de2c70c3"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"5df6a516a3d491431530709b876d96964268ded9","unresolved":false,"context_lines":[{"line_number":12,"context_line":"      under the License."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"      Convention for heading levels in Neutron devref:"},{"line_number":16,"context_line":"      \u003d\u003d\u003d\u003d\u003d\u003d\u003d  Heading 0 (reserved for the title in a document)"},{"line_number":17,"context_line":"      -------  Heading 1"},{"line_number":18,"context_line":"      ~~~~~~~  Heading 2"}],"source_content_type":"text/x-rst","patch_set":11,"id":"9a1a9d01_cd982dc3","line":15,"updated":"2015-09-29 20:08:55.000000000","message":"Probably should remove this.","commit_id":"4da221c963e99904750ede3a3e2b428184a21ecf"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"acc2c8df3a0b89f50f166d7e8807e384d54c14c8","unresolved":false,"context_lines":[{"line_number":12,"context_line":"      under the License."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"      Convention for heading levels in Neutron devref:"},{"line_number":16,"context_line":"      \u003d\u003d\u003d\u003d\u003d\u003d\u003d  Heading 0 (reserved for the title in a document)"},{"line_number":17,"context_line":"      -------  Heading 1"},{"line_number":18,"context_line":"      ~~~~~~~  Heading 2"}],"source_content_type":"text/x-rst","patch_set":11,"id":"9a1a9d01_3e0c3aec","line":15,"in_reply_to":"9a1a9d01_cd982dc3","updated":"2015-09-29 22:43:35.000000000","message":"Done","commit_id":"4da221c963e99904750ede3a3e2b428184a21ecf"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"3aa1bb7dd8e01bb4239abb24b0082763e6a4642a","unresolved":false,"context_lines":[{"line_number":37,"context_line":"defining `BGP Speaker`_ and `BGP DRAgent Scheduler`_  REST-ful API, which is"},{"line_number":38,"context_line":"available only to admins."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":".. _`BGP Speaker`: https://git.openstack.org/cgit/openstack/neutron/tree/neutron/extensions/bgp_speaker.py"},{"line_number":41,"context_line":".. _`BGP DRAgent Scheduler`: https://git.openstack.org/cgit/openstack/neutron/tree/neutron/extensions/bgp_dragentscheduler.py"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"9a1a9d01_e7abb373","line":40,"updated":"2015-09-29 13:43:02.000000000","message":"plz update the link, changed after re-structuring.","commit_id":"4da221c963e99904750ede3a3e2b428184a21ecf"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"3aa1bb7dd8e01bb4239abb24b0082763e6a4642a","unresolved":false,"context_lines":[{"line_number":38,"context_line":"available only to admins."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":".. _`BGP Speaker`: https://git.openstack.org/cgit/openstack/neutron/tree/neutron/extensions/bgp_speaker.py"},{"line_number":41,"context_line":".. _`BGP DRAgent Scheduler`: https://git.openstack.org/cgit/openstack/neutron/tree/neutron/extensions/bgp_dragentscheduler.py"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"Database API"}],"source_content_type":"text/x-rst","patch_set":11,"id":"9a1a9d01_c7bd4fb8","line":41,"updated":"2015-09-29 13:43:02.000000000","message":"ditto","commit_id":"4da221c963e99904750ede3a3e2b428184a21ecf"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"3aa1bb7dd8e01bb4239abb24b0082763e6a4642a","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"The BGP Speaker API extension adds `BGP Speaker database`_ and `BGP DRAgent Scheduler database`_ model layers to neutron"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":".. _`BGP Speaker database`: https://git.openstack.org/cgit/openstack/neutron/tree/neutron/db/bgp_speaker_db.py"},{"line_number":50,"context_line":".. _`BGP DRAgent Scheduler database`: https://git.openstack.org/cgit/openstack/neutron/tree/neutron/db/bgp_dragentschedulers_db.py"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"9a1a9d01_67aec382","line":49,"updated":"2015-09-29 13:43:02.000000000","message":"ditto","commit_id":"4da221c963e99904750ede3a3e2b428184a21ecf"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"3aa1bb7dd8e01bb4239abb24b0082763e6a4642a","unresolved":false,"context_lines":[{"line_number":47,"context_line":"The BGP Speaker API extension adds `BGP Speaker database`_ and `BGP DRAgent Scheduler database`_ model layers to neutron"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":".. _`BGP Speaker database`: https://git.openstack.org/cgit/openstack/neutron/tree/neutron/db/bgp_speaker_db.py"},{"line_number":50,"context_line":".. _`BGP DRAgent Scheduler database`: https://git.openstack.org/cgit/openstack/neutron/tree/neutron/db/bgp_dragentschedulers_db.py"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"Logical Model"}],"source_content_type":"text/x-rst","patch_set":11,"id":"9a1a9d01_47ca9f4f","line":50,"updated":"2015-09-29 13:43:02.000000000","message":"ditto","commit_id":"4da221c963e99904750ede3a3e2b428184a21ecf"},{"author":{"_account_id":17609,"name":"steve","email":"ruansx@cn.ibm.com","username":"steve.ruan"},"change_message_id":"6c2ddf5338e448428e419f33d74bfb2a8923ed31","unresolved":false,"context_lines":[{"line_number":62,"context_line":"                             |"},{"line_number":63,"context_line":"                             | N"},{"line_number":64,"context_line":"    +-------+ N       N +----------+ 1       N +-------+"},{"line_number":65,"context_line":"    |BgpPeer|-----------|BgpSpeaker|-----------|Network|"},{"line_number":66,"context_line":"    +-------+           +----------+           +-------+"},{"line_number":67,"context_line":"                             | 1"},{"line_number":68,"context_line":"                             |"}],"source_content_type":"text/x-rst","patch_set":11,"id":"fa69d971_72c121e4","line":65,"range":{"start_line":65,"start_character":25,"end_line":65,"end_character":35},"updated":"2015-12-31 04:44:24.000000000","message":"1 network node can only run 1 BgpSpeaker, for example Ryu.\nBgpSpeaker number equals to the network nodes number.\nTenant number will be more than network node, right?\nIt\u0027s possible that 2 tenant\u0027s BgpPeer(Assume P1 and P2) are added to same BgpSpeaker.\nThen how to prevent P1 advertising routes learnt from P2?","commit_id":"4da221c963e99904750ede3a3e2b428184a21ecf"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"895848a50dc0312f4824581418575971eb2aa4a4","unresolved":false,"context_lines":[{"line_number":62,"context_line":"                             |"},{"line_number":63,"context_line":"                             | N"},{"line_number":64,"context_line":"    +-------+ N       N +----------+ 1       N +-------+"},{"line_number":65,"context_line":"    |BgpPeer|-----------|BgpSpeaker|-----------|Network|"},{"line_number":66,"context_line":"    +-------+           +----------+           +-------+"},{"line_number":67,"context_line":"                             | 1"},{"line_number":68,"context_line":"                             |"}],"source_content_type":"text/x-rst","patch_set":11,"id":"fa69d971_8119cc7b","line":65,"range":{"start_line":65,"start_character":25,"end_line":65,"end_character":35},"in_reply_to":"fa69d971_72c121e4","updated":"2016-01-01 04:33:11.000000000","message":"Current design only does route advertisements. Route learning not considered.","commit_id":"4da221c963e99904750ede3a3e2b428184a21ecf"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"1bd0a6e2fdbd9b8cbc82b114c970be498783a605","unresolved":false,"context_lines":[{"line_number":77,"context_line":"feasible. BgpAdvertisedRoute information can be derived by joining data"},{"line_number":78,"context_line":"already available in the Neutron database."},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"Discovering What Routes To Advertise"},{"line_number":81,"context_line":"------------------------------------"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"For Neutron to determine what routes it should advertise, a BgpSpeaker must be"}],"source_content_type":"text/x-rst","patch_set":11,"id":"ba15a1d1_ff0377b6","line":80,"updated":"2015-09-22 13:13:57.000000000","message":"Address PS9 comment.","commit_id":"4da221c963e99904750ede3a3e2b428184a21ecf"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"5df6a516a3d491431530709b876d96964268ded9","unresolved":false,"context_lines":[{"line_number":81,"context_line":"------------------------------------"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"For Neutron to determine what routes it should advertise, a BgpSpeaker must be"},{"line_number":84,"context_line":"bound to a \"gateway\" network. A \"gateway\" network is a simply a Neutron network"},{"line_number":85,"context_line":"that connects Neutron routers to upstream routers in the network. An external"},{"line_number":86,"context_line":"network is most likely to be used as a gateway network, but Neutron allows any"},{"line_number":87,"context_line":"network to be specified by the admin as a gateway network. A BgpSpeaker can be associated with any number of networks. BgpSpeaker-to-network association is unique per address family. In other words, to advertise routes through a dual-stack"}],"source_content_type":"text/x-rst","patch_set":11,"id":"9a1a9d01_183e33da","line":84,"updated":"2015-09-29 20:08:55.000000000","message":"nit:  s/a simply a/simply a/","commit_id":"4da221c963e99904750ede3a3e2b428184a21ecf"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"5df6a516a3d491431530709b876d96964268ded9","unresolved":false,"context_lines":[{"line_number":84,"context_line":"bound to a \"gateway\" network. A \"gateway\" network is a simply a Neutron network"},{"line_number":85,"context_line":"that connects Neutron routers to upstream routers in the network. An external"},{"line_number":86,"context_line":"network is most likely to be used as a gateway network, but Neutron allows any"},{"line_number":87,"context_line":"network to be specified by the admin as a gateway network. A BgpSpeaker can be associated with any number of networks. BgpSpeaker-to-network association is unique per address family. In other words, to advertise routes through a dual-stack"},{"line_number":88,"context_line":"gateway network the admin would create 2 BgpSpeakers (1 for IPv4 routes, 1 for IPv6"},{"line_number":89,"context_line":"routes) and associate the network with both BgpSpeakers."},{"line_number":90,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"9a1a9d01_1815d347","line":87,"updated":"2015-09-29 20:08:55.000000000","message":"nit:  Line wrapping issue.","commit_id":"4da221c963e99904750ede3a3e2b428184a21ecf"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"5df6a516a3d491431530709b876d96964268ded9","unresolved":false,"context_lines":[{"line_number":92,"context_line":"each of its gateway networks for any routers with a gateway port on that network."},{"line_number":93,"context_line":"For each router identified, Neutron locates each floating IP and tenant network"},{"line_number":94,"context_line":"accessible through the router gateway port.  Neutron then advertises each floating"},{"line_number":95,"context_line":"IP and tenant network with the IP address of the router gateway port as the next hop."},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"Consider the following scenario:"},{"line_number":98,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"9a1a9d01_7b6089cf","line":95,"updated":"2015-09-29 20:08:55.000000000","message":"Just tenant networks with the same scope, right?","commit_id":"4da221c963e99904750ede3a3e2b428184a21ecf"},{"author":{"_account_id":17548,"name":"Paul Jakma","email":"paul@jakma.org","username":"paulj"},"change_message_id":"0bfdd961552374df5a651800e96ac12c18415249","unresolved":false,"context_lines":[{"line_number":141,"context_line":"    |    2001:0DB8:C21A:3::/64    |"},{"line_number":142,"context_line":"    +-----------------------------+"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    In the above scenario, Neutron speaker_v4 will advertise the following to the"},{"line_number":145,"context_line":"    infrastructure router:"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    +----------------------------+"}],"source_content_type":"text/x-rst","patch_set":11,"id":"9a1a9d01_39343048","line":144,"updated":"2015-09-30 16:57:04.000000000","message":"So \"speaker_v4\" and \"speaker_v6\" in this sentence correspond to the BgpSpeaker objects to the right with those labels, which are running on the \"Neutron Router\" box on the left? Is that right? If so, perhaps add text to say that explicitly, to help the reader.","commit_id":"4da221c963e99904750ede3a3e2b428184a21ecf"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"895848a50dc0312f4824581418575971eb2aa4a4","unresolved":false,"context_lines":[{"line_number":141,"context_line":"    |    2001:0DB8:C21A:3::/64    |"},{"line_number":142,"context_line":"    +-----------------------------+"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    In the above scenario, Neutron speaker_v4 will advertise the following to the"},{"line_number":145,"context_line":"    infrastructure router:"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    +----------------------------+"}],"source_content_type":"text/x-rst","patch_set":11,"id":"fa69d971_412af47f","line":144,"in_reply_to":"9a1a9d01_39343048","updated":"2016-01-01 04:33:11.000000000","message":"Will do.","commit_id":"4da221c963e99904750ede3a3e2b428184a21ecf"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"5df6a516a3d491431530709b876d96964268ded9","unresolved":false,"context_lines":[{"line_number":164,"context_line":"* Host routes (x.x.x.x/32) for floating IP addresses hosted on non-DVR routers"},{"line_number":165,"context_line":"* Host routes (x.x.x.x/32) for floating IP addresses hosted on DVR routers"},{"line_number":166,"context_line":"* Routes to IPv4 and IPv6 tenant networks (where direct routing through a"},{"line_number":167,"context_line":"  Neutron router is possible inside an address scope)"},{"line_number":168,"context_line":"* Host routes (/32 and /128) for fixed IP\u0027s with DVR"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"Admins can control what types of routes are advertised by a BgpSpeaker. By setting \"advertise_floating_ip_host_routes\", the admin can control whether a BgpSpeaker"}],"source_content_type":"text/x-rst","patch_set":11,"id":"9a1a9d01_7b53a9e2","line":167,"updated":"2015-09-29 20:08:55.000000000","message":"Here it is.  Should address scopes be mentioned sooner?  Like L95?","commit_id":"4da221c963e99904750ede3a3e2b428184a21ecf"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"acc2c8df3a0b89f50f166d7e8807e384d54c14c8","unresolved":false,"context_lines":[{"line_number":164,"context_line":"* Host routes (x.x.x.x/32) for floating IP addresses hosted on non-DVR routers"},{"line_number":165,"context_line":"* Host routes (x.x.x.x/32) for floating IP addresses hosted on DVR routers"},{"line_number":166,"context_line":"* Routes to IPv4 and IPv6 tenant networks (where direct routing through a"},{"line_number":167,"context_line":"  Neutron router is possible inside an address scope)"},{"line_number":168,"context_line":"* Host routes (/32 and /128) for fixed IP\u0027s with DVR"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"Admins can control what types of routes are advertised by a BgpSpeaker. By setting \"advertise_floating_ip_host_routes\", the admin can control whether a BgpSpeaker"}],"source_content_type":"text/x-rst","patch_set":11,"id":"9a1a9d01_9e746668","line":167,"in_reply_to":"9a1a9d01_7b53a9e2","updated":"2015-09-29 22:43:35.000000000","message":"Yeah, it should.  It\u0027s an important details.","commit_id":"4da221c963e99904750ede3a3e2b428184a21ecf"},{"author":{"_account_id":17548,"name":"Paul Jakma","email":"paul@jakma.org","username":"paulj"},"change_message_id":"0bfdd961552374df5a651800e96ac12c18415249","unresolved":false,"context_lines":[{"line_number":165,"context_line":"* Host routes (x.x.x.x/32) for floating IP addresses hosted on DVR routers"},{"line_number":166,"context_line":"* Routes to IPv4 and IPv6 tenant networks (where direct routing through a"},{"line_number":167,"context_line":"  Neutron router is possible inside an address scope)"},{"line_number":168,"context_line":"* Host routes (/32 and /128) for fixed IP\u0027s with DVR"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"Admins can control what types of routes are advertised by a BgpSpeaker. By setting \"advertise_floating_ip_host_routes\", the admin can control whether a BgpSpeaker"},{"line_number":171,"context_line":"will advertise host routes for floating IP\u0027s. By setting \"advertise_tenant_networks\""}],"source_content_type":"text/x-rst","patch_set":11,"id":"9a1a9d01_d9df34d4","line":168,"updated":"2015-09-30 16:57:04.000000000","message":"Can the expansion of DVR be provided at the first use, which is here, rather than later?","commit_id":"4da221c963e99904750ede3a3e2b428184a21ecf"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"5df6a516a3d491431530709b876d96964268ded9","unresolved":false,"context_lines":[{"line_number":165,"context_line":"* Host routes (x.x.x.x/32) for floating IP addresses hosted on DVR routers"},{"line_number":166,"context_line":"* Routes to IPv4 and IPv6 tenant networks (where direct routing through a"},{"line_number":167,"context_line":"  Neutron router is possible inside an address scope)"},{"line_number":168,"context_line":"* Host routes (/32 and /128) for fixed IP\u0027s with DVR"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"Admins can control what types of routes are advertised by a BgpSpeaker. By setting \"advertise_floating_ip_host_routes\", the admin can control whether a BgpSpeaker"},{"line_number":171,"context_line":"will advertise host routes for floating IP\u0027s. By setting \"advertise_tenant_networks\""}],"source_content_type":"text/x-rst","patch_set":11,"id":"9a1a9d01_5b3345ab","line":168,"updated":"2015-09-29 20:08:55.000000000","message":"Same point about address scopes applies to this bullet point too.","commit_id":"4da221c963e99904750ede3a3e2b428184a21ecf"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"acc2c8df3a0b89f50f166d7e8807e384d54c14c8","unresolved":false,"context_lines":[{"line_number":165,"context_line":"* Host routes (x.x.x.x/32) for floating IP addresses hosted on DVR routers"},{"line_number":166,"context_line":"* Routes to IPv4 and IPv6 tenant networks (where direct routing through a"},{"line_number":167,"context_line":"  Neutron router is possible inside an address scope)"},{"line_number":168,"context_line":"* Host routes (/32 and /128) for fixed IP\u0027s with DVR"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"Admins can control what types of routes are advertised by a BgpSpeaker. By setting \"advertise_floating_ip_host_routes\", the admin can control whether a BgpSpeaker"},{"line_number":171,"context_line":"will advertise host routes for floating IP\u0027s. By setting \"advertise_tenant_networks\""}],"source_content_type":"text/x-rst","patch_set":11,"id":"9a1a9d01_be712a78","line":168,"in_reply_to":"9a1a9d01_5b3345ab","updated":"2015-09-29 22:43:35.000000000","message":"Done","commit_id":"4da221c963e99904750ede3a3e2b428184a21ecf"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"5df6a516a3d491431530709b876d96964268ded9","unresolved":false,"context_lines":[{"line_number":170,"context_line":"Admins can control what types of routes are advertised by a BgpSpeaker. By setting \"advertise_floating_ip_host_routes\", the admin can control whether a BgpSpeaker"},{"line_number":171,"context_line":"will advertise host routes for floating IP\u0027s. By setting \"advertise_tenant_networks\""},{"line_number":172,"context_line":"the admin can control whether routes to tenant networks will be advertised."},{"line_number":173,"context_line":"Route advertisement is initiated as per the BgpSpeaker configuration by binding a Neutron network to it. Once bound, if the BgpSpeaker configuration permits then all the floating IP\u0027s on the bound network are advertised as host routes. In addition, Neutron will identify all routers attached to the bound network and will begin advertising the next-hop for all tenant networks behind these Neutron routers."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"When distributed virtual routing (DVR) is enabled on a router, next-hops for"},{"line_number":176,"context_line":"floating IP\u0027s and fixed IP\u0027s are not advertised as being at the centralized"}],"source_content_type":"text/x-rst","patch_set":11,"id":"9a1a9d01_3b0771cb","line":173,"updated":"2015-09-29 20:08:55.000000000","message":"I think we\u0027d like to stick with 79 character width, at least in regular paragraphs.  Can your editor easily reformat?","commit_id":"4da221c963e99904750ede3a3e2b428184a21ecf"},{"author":{"_account_id":14154,"name":"Takanori Miyagishi","email":"miyagishi.t@jp.fujitsu.com","username":"takanorimiyagishi"},"change_message_id":"2d7d237d04a7d14822e220b3a0ec53005e972697","unresolved":false,"context_lines":[{"line_number":198,"context_line":"            +------+"},{"line_number":199,"context_line":"               | 15.1.1.1"},{"line_number":200,"context_line":"               |"},{"line_number":201,"context_line":"    ----------------------Network (15.8.0.0/16)"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    * The table of routes advertised by Neutron looks like this:"},{"line_number":204,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"9a1a9d01_5bb03c8a","line":201,"updated":"2015-09-29 12:29:43.000000000","message":"mistake of Network (15.1.1.0/24)?","commit_id":"4da221c963e99904750ede3a3e2b428184a21ecf"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"3aa1bb7dd8e01bb4239abb24b0082763e6a4642a","unresolved":false,"context_lines":[{"line_number":198,"context_line":"            +------+"},{"line_number":199,"context_line":"               | 15.1.1.1"},{"line_number":200,"context_line":"               |"},{"line_number":201,"context_line":"    ----------------------Network (15.8.0.0/16)"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    * The table of routes advertised by Neutron looks like this:"},{"line_number":204,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"9a1a9d01_47f85f7b","line":201,"in_reply_to":"9a1a9d01_5bb03c8a","updated":"2015-09-29 13:43:02.000000000","message":"+1. Will change.","commit_id":"4da221c963e99904750ede3a3e2b428184a21ecf"},{"author":{"_account_id":7776,"name":"Paul Carver","email":"pcarver@att.com","username":"pcarver"},"change_message_id":"8af6d1d69297ae0ff0d020096d1a8fd8b0105ead","unresolved":false,"context_lines":[{"line_number":200,"context_line":"               |"},{"line_number":201,"context_line":"    ----------------------Network (15.8.0.0/16)"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    * The table of routes advertised by Neutron looks like this:"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    +-------------------------+"},{"line_number":206,"context_line":"    |   Network    | Next-hop |"}],"source_content_type":"text/x-rst","patch_set":11,"id":"9a1a9d01_3e1aff7d","line":203,"updated":"2015-09-29 20:39:56.000000000","message":"Is this diagram inverted from the previous one? My natural inclination is to read the top network as the external network connected to the infrastructure router because the previous diagram showed the infrastructure router above the Neutron router. But then a next hop of 15.1.1.1 doesn\u0027t work unless there\u0027s an unstated assumption that the infrastructure router has a static route to 15.1.1.1.\n\nI think more likely that you\u0027re drawing the external network at the bottom of this diagram. If so, I\u0027d suggest reversing that or maybe even adding the infrastructure router to this diagram so that it\u0027s clear which network provides interconnect between the Neutron router and the infrastructure router.","commit_id":"4da221c963e99904750ede3a3e2b428184a21ecf"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"acc2c8df3a0b89f50f166d7e8807e384d54c14c8","unresolved":false,"context_lines":[{"line_number":200,"context_line":"               |"},{"line_number":201,"context_line":"    ----------------------Network (15.8.0.0/16)"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    * The table of routes advertised by Neutron looks like this:"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    +-------------------------+"},{"line_number":206,"context_line":"    |   Network    | Next-hop |"}],"source_content_type":"text/x-rst","patch_set":11,"id":"9a1a9d01_fe280235","line":203,"in_reply_to":"9a1a9d01_3e1aff7d","updated":"2015-09-29 22:43:35.000000000","message":"Yes, the diagrams are inverted.  Let\u0027s invert them as @Paul suggests.","commit_id":"4da221c963e99904750ede3a3e2b428184a21ecf"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"5df6a516a3d491431530709b876d96964268ded9","unresolved":false,"context_lines":[{"line_number":222,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":223,"context_line":"* The Neutron router with gw_port IP address of 15.1.1.1 is distributed"},{"line_number":224,"context_line":"* Floating IP 15.8.10.2 is hosted on a compute node with IP address 15.2.1.20"},{"line_number":225,"context_line":"* Floating IP 15.8.45.1 is hosted on a compute node with IP address 15.2.2.30"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"::"},{"line_number":228,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"9a1a9d01_5bc10553","line":225,"updated":"2015-09-29 20:08:55.000000000","message":"These are the IPs of the ports belonging to the fip namespaces?","commit_id":"4da221c963e99904750ede3a3e2b428184a21ecf"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"acc2c8df3a0b89f50f166d7e8807e384d54c14c8","unresolved":false,"context_lines":[{"line_number":222,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":223,"context_line":"* The Neutron router with gw_port IP address of 15.1.1.1 is distributed"},{"line_number":224,"context_line":"* Floating IP 15.8.10.2 is hosted on a compute node with IP address 15.2.1.20"},{"line_number":225,"context_line":"* Floating IP 15.8.45.1 is hosted on a compute node with IP address 15.2.2.30"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"::"},{"line_number":228,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"9a1a9d01_5e532ee2","line":225,"in_reply_to":"9a1a9d01_5bc10553","updated":"2015-09-29 22:43:35.000000000","message":"Correct, this is the fip namespace IP.  If we remove the fip namespace at some point, I\u0027m not sure where to point to as the next-hop, but we can cross that bridge when we get there.","commit_id":"4da221c963e99904750ede3a3e2b428184a21ecf"},{"author":{"_account_id":17609,"name":"steve","email":"ruansx@cn.ibm.com","username":"steve.ruan"},"change_message_id":"6c2ddf5338e448428e419f33d74bfb2a8923ed31","unresolved":false,"context_lines":[{"line_number":234,"context_line":"    |    Network   | Next-hop  |"},{"line_number":235,"context_line":"    +--------------------------+"},{"line_number":236,"context_line":"    | 15.8.10.2/32 | 15.2.1.20 |"},{"line_number":237,"context_line":"    | 15.8.45.1/32 | 15.2.2.30 |"},{"line_number":238,"context_line":"    +--------------------------+"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"Discovering Tenant Network Routes"}],"source_content_type":"text/x-rst","patch_set":11,"id":"fa69d971_92fcd53f","line":237,"range":{"start_line":237,"start_character":28,"end_line":237,"end_character":30},"updated":"2015-12-31 04:44:24.000000000","message":"Based on the BGP nexthop algorithm:\nhttps://tools.ietf.org/html/rfc4271#section-5.1.3\nThis case can not work.","commit_id":"4da221c963e99904750ede3a3e2b428184a21ecf"},{"author":{"_account_id":7776,"name":"Paul Carver","email":"pcarver@att.com","username":"pcarver"},"change_message_id":"8af6d1d69297ae0ff0d020096d1a8fd8b0105ead","unresolved":false,"context_lines":[{"line_number":271,"context_line":"     +-----+                      +-----+"},{"line_number":272,"context_line":"        | 15.1.1.2                   | 15.1.1.3"},{"line_number":273,"context_line":"        |                            |"},{"line_number":274,"context_line":"    ---------Network(15.1.1.0/24)---------"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    * The table of routes advertised by Neutron looks like this:"},{"line_number":277,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"9a1a9d01_29072bcb","line":274,"updated":"2015-09-29 20:39:56.000000000","message":"Here too, I think what you\u0027re trying to show is that the infrastructure router (not shown) is at the bottom attached to the 15.1.1.0/24 network which is opposite of the orientation of the first diagram. It would be clearer if you showed the infrastructure router on the diagram.","commit_id":"4da221c963e99904750ede3a3e2b428184a21ecf"},{"author":{"_account_id":17609,"name":"steve","email":"ruansx@cn.ibm.com","username":"steve.ruan"},"change_message_id":"6c2ddf5338e448428e419f33d74bfb2a8923ed31","unresolved":false,"context_lines":[{"line_number":294,"context_line":""},{"line_number":295,"context_line":"BGP Dynamic Routing Agent"},{"line_number":296,"context_line":"-------------------------"},{"line_number":297,"context_line":"The BGP Dynamic Routing Agent (known as BgpDrAgent) hosts BgpSpeaker and"},{"line_number":298,"context_line":"advertise Neutron routes outside OpenStack network. Based upon the driver"},{"line_number":299,"context_line":"specification, multiple BgpSpeaker/s can be hosted by a BgpDrAgent. Same"},{"line_number":300,"context_line":"BgpSpeaker can be hosted by multiple BgpDrAgent in order to ensure HA."}],"source_content_type":"text/x-rst","patch_set":11,"id":"fa69d971_72092195","line":297,"range":{"start_line":297,"start_character":24,"end_line":297,"end_character":29},"updated":"2015-12-31 04:44:24.000000000","message":"Whether the BgpSpeaker run in a namespace? if not in namesapce, we need make sure the speaker will not install the learnt routing into network nodes.","commit_id":"4da221c963e99904750ede3a3e2b428184a21ecf"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"895848a50dc0312f4824581418575971eb2aa4a4","unresolved":false,"context_lines":[{"line_number":294,"context_line":""},{"line_number":295,"context_line":"BGP Dynamic Routing Agent"},{"line_number":296,"context_line":"-------------------------"},{"line_number":297,"context_line":"The BGP Dynamic Routing Agent (known as BgpDrAgent) hosts BgpSpeaker and"},{"line_number":298,"context_line":"advertise Neutron routes outside OpenStack network. Based upon the driver"},{"line_number":299,"context_line":"specification, multiple BgpSpeaker/s can be hosted by a BgpDrAgent. Same"},{"line_number":300,"context_line":"BgpSpeaker can be hosted by multiple BgpDrAgent in order to ensure HA."}],"source_content_type":"text/x-rst","patch_set":11,"id":"fa69d971_0124fcac","line":297,"range":{"start_line":297,"start_character":24,"end_line":297,"end_character":29},"in_reply_to":"fa69d971_72092195","updated":"2016-01-01 04:33:11.000000000","message":"Current work-scope doesn\u0027t support route learning.","commit_id":"4da221c963e99904750ede3a3e2b428184a21ecf"},{"author":{"_account_id":7776,"name":"Paul Carver","email":"pcarver@att.com","username":"pcarver"},"change_message_id":"67b8fd56fee47618f625a63ae24800b97acb6b0d","unresolved":false,"context_lines":[{"line_number":295,"context_line":"BGP Dynamic Routing Agent"},{"line_number":296,"context_line":"-------------------------"},{"line_number":297,"context_line":"The BGP Dynamic Routing Agent (known as BgpDrAgent) hosts BgpSpeaker and"},{"line_number":298,"context_line":"advertise Neutron routes outside OpenStack network. Based upon the driver"},{"line_number":299,"context_line":"specification, multiple BgpSpeaker/s can be hosted by a BgpDrAgent. Same"},{"line_number":300,"context_line":"BgpSpeaker can be hosted by multiple BgpDrAgent in order to ensure HA."},{"line_number":301,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"ba15a1d1_9a4b4c59","line":298,"updated":"2015-09-23 00:43:52.000000000","message":"advertise -\u003e advertises","commit_id":"4da221c963e99904750ede3a3e2b428184a21ecf"},{"author":{"_account_id":7776,"name":"Paul Carver","email":"pcarver@att.com","username":"pcarver"},"change_message_id":"67b8fd56fee47618f625a63ae24800b97acb6b0d","unresolved":false,"context_lines":[{"line_number":296,"context_line":"-------------------------"},{"line_number":297,"context_line":"The BGP Dynamic Routing Agent (known as BgpDrAgent) hosts BgpSpeaker and"},{"line_number":298,"context_line":"advertise Neutron routes outside OpenStack network. Based upon the driver"},{"line_number":299,"context_line":"specification, multiple BgpSpeaker/s can be hosted by a BgpDrAgent. Same"},{"line_number":300,"context_line":"BgpSpeaker can be hosted by multiple BgpDrAgent in order to ensure HA."},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"::"}],"source_content_type":"text/x-rst","patch_set":11,"id":"ba15a1d1_ba46504d","line":299,"updated":"2015-09-23 00:43:52.000000000","message":"remove /\n\nSame -\u003e The same","commit_id":"4da221c963e99904750ede3a3e2b428184a21ecf"},{"author":{"_account_id":7776,"name":"Paul Carver","email":"pcarver@att.com","username":"pcarver"},"change_message_id":"67b8fd56fee47618f625a63ae24800b97acb6b0d","unresolved":false,"context_lines":[{"line_number":309,"context_line":"~~~~~~~~~~~~~~~~~"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"Existing `Neutron RPC framework`_ is used for facilitating communication between"},{"line_number":312,"context_line":"the Neutron server managing BGP Speaker and the BGP DRAgent."},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"BGP DRAgent Side"},{"line_number":315,"context_line":"++++++++++++++++"}],"source_content_type":"text/x-rst","patch_set":11,"id":"ba15a1d1_a8a7eba5","line":312,"updated":"2015-09-23 00:43:52.000000000","message":"managing the BGP Speaker","commit_id":"4da221c963e99904750ede3a3e2b428184a21ecf"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"3aa1bb7dd8e01bb4239abb24b0082763e6a4642a","unresolved":false,"context_lines":[{"line_number":314,"context_line":"BGP DRAgent Side"},{"line_number":315,"context_line":"++++++++++++++++"},{"line_number":316,"context_line":"BgpDrAgent client side API is defined in"},{"line_number":317,"context_line":"neutron.services.bgp_speaker.agent.dr_agent.BgpDrPluginApi. This class is used"},{"line_number":318,"context_line":"to call remote methods back in the Neutron server. The server side is defined in"},{"line_number":319,"context_line":"neutron.api.rpc.handlers.bgp_speaker_rpc.BgpSpeakerRpcCallback. It is up to the"},{"line_number":320,"context_line":"Neutron plug-in in use to decide whether the BgpSpeakerRpcCallback interface"}],"source_content_type":"text/x-rst","patch_set":11,"id":"9a1a9d01_074587b1","line":317,"updated":"2015-09-29 13:43:02.000000000","message":"plz update the path, changed after re-structuring.","commit_id":"4da221c963e99904750ede3a3e2b428184a21ecf"},{"author":{"_account_id":7776,"name":"Paul Carver","email":"pcarver@att.com","username":"pcarver"},"change_message_id":"67b8fd56fee47618f625a63ae24800b97acb6b0d","unresolved":false,"context_lines":[{"line_number":323,"context_line":"Neutron Server Side"},{"line_number":324,"context_line":"+++++++++++++++++++"},{"line_number":325,"context_line":"An RPC interface is defined which allows Neutron server to remotely invoke"},{"line_number":326,"context_line":"agent side method. The notification API\u0027s are defined in"},{"line_number":327,"context_line":"neutron.api.rpc.agentnotifiers.bgp_dr_rpc_agent_api.BgpDrAgentNotifyApi."},{"line_number":328,"context_line":"The server side of this interface that runs in the BgpDrAgent is defined in"},{"line_number":329,"context_line":"neutron.services.bgp_speaker.agent.dr_agent.BgpDrAgent."}],"source_content_type":"text/x-rst","patch_set":11,"id":"ba15a1d1_c8d25f00","line":326,"updated":"2015-09-23 00:43:52.000000000","message":"API\u0027s -\u003e APIs (apostrophe is for possessive, not for plural)","commit_id":"4da221c963e99904750ede3a3e2b428184a21ecf"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"3aa1bb7dd8e01bb4239abb24b0082763e6a4642a","unresolved":false,"context_lines":[{"line_number":326,"context_line":"agent side method. The notification API\u0027s are defined in"},{"line_number":327,"context_line":"neutron.api.rpc.agentnotifiers.bgp_dr_rpc_agent_api.BgpDrAgentNotifyApi."},{"line_number":328,"context_line":"The server side of this interface that runs in the BgpDrAgent is defined in"},{"line_number":329,"context_line":"neutron.services.bgp_speaker.agent.dr_agent.BgpDrAgent."},{"line_number":330,"context_line":""},{"line_number":331,"context_line":".. _`Neutron RPC framework`: rpc_api.html"},{"line_number":332,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"9a1a9d01_a714db9f","line":329,"updated":"2015-09-29 13:43:02.000000000","message":"plz update the path, changed after re-structuring.","commit_id":"4da221c963e99904750ede3a3e2b428184a21ecf"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"3aa1bb7dd8e01bb4239abb24b0082763e6a4642a","unresolved":false,"context_lines":[{"line_number":339,"context_line":""},{"line_number":340,"context_line":"More details about Ryu driver implementation can be found at `Ryu BgpSpeaker Implementation`_"},{"line_number":341,"context_line":""},{"line_number":342,"context_line":".. _`Ryu BgpSpeaker Implementation`: https://git.openstack.org/cgit/openstack/neutron/tree/neutron/services/bgp_speaker/driver/ryu/driver.py"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"BGP Dynamic Routing Scheduler"},{"line_number":345,"context_line":"-----------------------------"}],"source_content_type":"text/x-rst","patch_set":11,"id":"9a1a9d01_2729abe6","line":342,"updated":"2015-09-29 13:43:02.000000000","message":"plz update the path, changed after re-structuring.","commit_id":"4da221c963e99904750ede3a3e2b428184a21ecf"},{"author":{"_account_id":7776,"name":"Paul Carver","email":"pcarver@att.com","username":"pcarver"},"change_message_id":"67b8fd56fee47618f625a63ae24800b97acb6b0d","unresolved":false,"context_lines":[{"line_number":344,"context_line":"BGP Dynamic Routing Scheduler"},{"line_number":345,"context_line":"-----------------------------"},{"line_number":346,"context_line":""},{"line_number":347,"context_line":"BGP DrScheduler schedules BgpSpeaker to a BgpDrAgent. A set of API\u0027s are"},{"line_number":348,"context_line":"exposed to admin for associating a BgpSpeaker with a BgpDrAgent. In addition"},{"line_number":349,"context_line":"to this one can also enable auto-schedule functionality using neutron.conf"},{"line_number":350,"context_line":"which automatically schedules a BgpSpeaker to the first available active"}],"source_content_type":"text/x-rst","patch_set":11,"id":"ba15a1d1_687f93e0","line":347,"updated":"2015-09-23 00:43:52.000000000","message":"API\u0027s -\u003e APIs","commit_id":"4da221c963e99904750ede3a3e2b428184a21ecf"},{"author":{"_account_id":17609,"name":"steve","email":"ruansx@cn.ibm.com","username":"steve.ruan"},"change_message_id":"6c2ddf5338e448428e419f33d74bfb2a8923ed31","unresolved":false,"context_lines":[{"line_number":353,"context_line":"Auto-scheduling"},{"line_number":354,"context_line":"~~~~~~~~~~~~~~~"},{"line_number":355,"context_line":"Consider the following scenario:"},{"line_number":356,"context_line":"++++++++++++++++++++++++++++++++"},{"line_number":357,"context_line":"* Create a BgpSpeaker with local-as 1234."},{"line_number":358,"context_line":"* Wait for auto-scheduling to happen."},{"line_number":359,"context_line":"* Created BgpSpeaker MUST be added to the active BgpDrAgent."}],"source_content_type":"text/x-rst","patch_set":11,"id":"fa69d971_b2e2399e","line":356,"range":{"start_line":356,"start_character":0,"end_line":356,"end_character":32},"updated":"2015-12-31 04:44:24.000000000","message":"Based on the BGP Nexthop algorithm, https://tools.ietf.org/html/rfc4271#section-5.1.3\nBGP speaker and neutron router should connect to same external network.\nAuto-scheduling should cover this condition.","commit_id":"4da221c963e99904750ede3a3e2b428184a21ecf"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"3aa1bb7dd8e01bb4239abb24b0082763e6a4642a","unresolved":false,"context_lines":[{"line_number":504,"context_line":"    2015-09-10 20:44:33.006 DEBUG neutron.services.bgp_speaker.plugin [req-5a754a3d-3788-4389-9982-6f5404cdfed6 admin demo] Let\u0027s try unscheduling BgpSpeaker if scheduled. delete_bgp_speaker /opt/stack/neutron/neutron/services/bgp_speaker/plugin.py:108"},{"line_number":505,"context_line":""},{"line_number":506,"context_line":"    Observe BgpDrAgent logs:"},{"line_number":507,"context_line":"    2015-09-10 20:44:33.011 DEBUG neutron.services.bgp_speaker.agent [req-5a754a3d-3788-4389-9982-6f5404cdfed6 admin demo] Received BGP speaker remove notification for speaker_id\u003dacc15151-f5b8-4063-a508-20011bbca2d6 from the neutron server. bgp_speaker_remove_end /opt/stack/neutron/neutron/agent/bgp/agent.py:187"},{"line_number":508,"context_line":"    2015-09-10 20:44:33.011 DEBUG neutron.services.bgp_speaker.agent [req-5a754a3d-3788-4389-9982-6f5404cdfed6 admin demo] Calling driver for removing BGP speaker acc15151-f5b8-4063-a508-20011bbca2d6 remove_bgp_speaker_from_dragent /opt/stack/neutron/neutron/agent/bgp/agent.py:320"},{"line_number":509,"context_line":"    2015-09-10 20:44:33.011 INFO bgpspeaker.api.base [req-5a754a3d-3788-4389-9982-6f5404cdfed6 admin demo] API method core.stop called with args: {}"},{"line_number":510,"context_line":"    2015-09-10 20:44:33.011 DEBUG bgpspeaker.base [req-5a754a3d-3788-4389-9982-6f5404cdfed6 admin demo] Stopping activity UnknownActivity: 1441896985.92. stop /usr/local/lib/python2.7/dist-packages/ryu/services/protocols/bgp/base.py:305"}],"source_content_type":"text/x-rst","patch_set":11,"id":"9a1a9d01_6758038b","line":507,"updated":"2015-09-29 13:43:02.000000000","message":"Let\u0027s attach latest logs. Few changes will be there because of code re-factoring and defect fixes.","commit_id":"4da221c963e99904750ede3a3e2b428184a21ecf"},{"author":{"_account_id":17455,"name":"Na Zhu","email":"juno.zhu@huawei.com","username":"Na"},"change_message_id":"430837a62f73fbf3766cebd435906c86349e17d5","unresolved":false,"context_lines":[{"line_number":569,"context_line":"    bgp-speaker-peer-add              Add a peer to the BGP speaker."},{"line_number":570,"context_line":"    bgp-speaker-peer-remove           Remove a peer from the BGP speaker."},{"line_number":571,"context_line":"    bgp-speaker-show                  Show information of a given BGP speaker."},{"line_number":572,"context_line":"    bgp-speaker-update                Update BGP Speaker\u0027s information."},{"line_number":573,"context_line":""},{"line_number":574,"context_line":"Sample Quagga router config file for peering with a Neutron BgpSpeaker:"},{"line_number":575,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"da85f559_e5dc4214","line":572,"updated":"2015-11-10 08:47:46.000000000","message":"VPN is associated with router, not network. So to support VPN, I think it is better to provide another commands to associate router to bgp speaker, such as \"bgp-speaker-router-add/bgp-speaker-router-remove\", and the router association has higher priority than network association.","commit_id":"4da221c963e99904750ede3a3e2b428184a21ecf"},{"author":{"_account_id":17455,"name":"Na Zhu","email":"juno.zhu@huawei.com","username":"Na"},"change_message_id":"cec2f8d6766e2eed030a12a448d8d8a60d7c2160","unresolved":false,"context_lines":[{"line_number":569,"context_line":"    bgp-speaker-peer-add              Add a peer to the BGP speaker."},{"line_number":570,"context_line":"    bgp-speaker-peer-remove           Remove a peer from the BGP speaker."},{"line_number":571,"context_line":"    bgp-speaker-show                  Show information of a given BGP speaker."},{"line_number":572,"context_line":"    bgp-speaker-update                Update BGP Speaker\u0027s information."},{"line_number":573,"context_line":""},{"line_number":574,"context_line":"Sample Quagga router config file for peering with a Neutron BgpSpeaker:"},{"line_number":575,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"da85f559_92cd4cb9","line":572,"in_reply_to":"da85f559_e5dc4214","updated":"2015-11-11 01:56:46.000000000","message":"In your main blueprint, it mentions associate router to bgp speaker, is it a mistake or will you do it in the future? (https://review.openstack.org/#/c/125401/21/specs/liberty/bgp-dynamic-routing.rst)","commit_id":"4da221c963e99904750ede3a3e2b428184a21ecf"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"895848a50dc0312f4824581418575971eb2aa4a4","unresolved":false,"context_lines":[{"line_number":569,"context_line":"    bgp-speaker-peer-add              Add a peer to the BGP speaker."},{"line_number":570,"context_line":"    bgp-speaker-peer-remove           Remove a peer from the BGP speaker."},{"line_number":571,"context_line":"    bgp-speaker-show                  Show information of a given BGP speaker."},{"line_number":572,"context_line":"    bgp-speaker-update                Update BGP Speaker\u0027s information."},{"line_number":573,"context_line":""},{"line_number":574,"context_line":"Sample Quagga router config file for peering with a Neutron BgpSpeaker:"},{"line_number":575,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"fa69d971_c136e4e6","line":572,"in_reply_to":"da85f559_e5dc4214","updated":"2016-01-01 04:33:11.000000000","message":"VPN support is out of scope here.","commit_id":"4da221c963e99904750ede3a3e2b428184a21ecf"},{"author":{"_account_id":18855,"name":"Siddanagouda Khot","email":"siddanmk@yahoo.co.in","username":"siddanmk"},"change_message_id":"4cf7651ccb4d2ab322bb7981cc73f877e1c0d25b","unresolved":false,"context_lines":[{"line_number":634,"context_line":"Please be aware of the following limitations of the BGP speaker functionality:"},{"line_number":635,"context_line":""},{"line_number":636,"context_line":"* All exposed operations MUST be done by admin."},{"line_number":637,"context_line":"* All Neutron networks bound to BgpSpeakers must be from the same address scope."},{"line_number":638,"context_line":"* No support for route distinguishers and route targets."}],"source_content_type":"text/x-rst","patch_set":11,"id":"1a7b0d38_1cd6cac5","line":637,"updated":"2015-12-23 03:04:12.000000000","message":"Is there a writeup/blueprint for address scope usage in BGP Dynamic Routing?","commit_id":"4da221c963e99904750ede3a3e2b428184a21ecf"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"895848a50dc0312f4824581418575971eb2aa4a4","unresolved":false,"context_lines":[{"line_number":634,"context_line":"Please be aware of the following limitations of the BGP speaker functionality:"},{"line_number":635,"context_line":""},{"line_number":636,"context_line":"* All exposed operations MUST be done by admin."},{"line_number":637,"context_line":"* All Neutron networks bound to BgpSpeakers must be from the same address scope."},{"line_number":638,"context_line":"* No support for route distinguishers and route targets."}],"source_content_type":"text/x-rst","patch_set":11,"id":"fa69d971_214ee06f","line":637,"in_reply_to":"1a7b0d38_1cd6cac5","updated":"2016-01-01 04:33:11.000000000","message":"We will be updating the same devref for address-scope support.","commit_id":"4da221c963e99904750ede3a3e2b428184a21ecf"}]}
