)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"15d45d2cd883c2336fdf711eb80397ccdf3ecbc6","unresolved":false,"context_lines":[{"line_number":9,"context_line":"The following spec provides the Port Forwarding extension"},{"line_number":10,"context_line":"on L3."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Depends-On: I80e4aefe5700f6c1dcf1037f22bf58b5d23ea95d"},{"line_number":13,"context_line":"Change-Id: Ib2c47b585538bbc067a488e34fd0fc8097314f98"},{"line_number":14,"context_line":"Partial-Bug: #1491317"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"7f515b1d_90c61c9a","line":12,"range":{"start_line":12,"start_character":0,"end_line":12,"end_character":53},"updated":"2017-10-07 22:56:28.000000000","message":"This can be removed now, since it merged: https://review.openstack.org/#/c/498953/","commit_id":"cbc8f400c6318847c96871597ccb0db37c07cc0a"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"3562ab4678b33a84c0c8c52e6d3362c608047875","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Spec for Port Forwarding"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The following spec provides the Port Forwarding extension"},{"line_number":10,"context_line":"on L3."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Ib2c47b585538bbc067a488e34fd0fc8097314f98"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":21,"id":"ff82abbf_16451a43","line":9,"range":{"start_line":9,"start_character":14,"end_line":9,"end_character":27},"updated":"2017-11-27 23:17:13.000000000","message":"We are not providing the extension yet. We are specifyin it. So consider changing this to:\n\nspecifies","commit_id":"9db97fae59aae7dae328900e1e14efe214db2035"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"6aff17a5e1a0ad4a42e5e1ae47d7f5d22d1ca542","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Spec for Port Forwarding"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The following spec provides the Port Forwarding extension"},{"line_number":10,"context_line":"on L3."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Ib2c47b585538bbc067a488e34fd0fc8097314f98"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":21,"id":"ff82abbf_51496c2e","line":9,"range":{"start_line":9,"start_character":14,"end_line":9,"end_character":27},"in_reply_to":"ff82abbf_16451a43","updated":"2017-11-28 00:42:16.000000000","message":"Done","commit_id":"9db97fae59aae7dae328900e1e14efe214db2035"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"3562ab4678b33a84c0c8c52e6d3362c608047875","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Spec for Port Forwarding"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The following spec provides the Port Forwarding extension"},{"line_number":10,"context_line":"on L3."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Ib2c47b585538bbc067a488e34fd0fc8097314f98"},{"line_number":13,"context_line":"Partial-Bug: #1491317"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":21,"id":"ff82abbf_96728aac","line":10,"range":{"start_line":10,"start_character":0,"end_line":10,"end_character":5},"updated":"2017-11-27 23:17:13.000000000","message":"Since in the spec we mention that this spec focuses on FIPs, why not change this to:\n\nfor floating IPs","commit_id":"9db97fae59aae7dae328900e1e14efe214db2035"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"6aff17a5e1a0ad4a42e5e1ae47d7f5d22d1ca542","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Spec for Port Forwarding"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The following spec provides the Port Forwarding extension"},{"line_number":10,"context_line":"on L3."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Ib2c47b585538bbc067a488e34fd0fc8097314f98"},{"line_number":13,"context_line":"Partial-Bug: #1491317"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":21,"id":"ff82abbf_f151a0da","line":10,"range":{"start_line":10,"start_character":0,"end_line":10,"end_character":5},"in_reply_to":"ff82abbf_96728aac","updated":"2017-11-28 00:42:16.000000000","message":"Done","commit_id":"9db97fae59aae7dae328900e1e14efe214db2035"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"b4317aeae03e1e7de7e1ba39e1a4ac03d4a14783","unresolved":false,"context_lines":[{"line_number":10,"context_line":"for Floating IPs. And intro a new sub resource into floatingip for port"},{"line_number":11,"context_line":"forwarding support."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Depends-On: If40305044c9dfe0024b64bd3921232bb0a6c9372"},{"line_number":14,"context_line":"Change-Id: Ib2c47b585538bbc067a488e34fd0fc8097314f98"},{"line_number":15,"context_line":"Partial-Bug: #1491317"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":33,"id":"7f96bb07_6a34274b","line":13,"range":{"start_line":13,"start_character":0,"end_line":13,"end_character":53},"updated":"2018-01-22 19:57:17.000000000","message":"Why do we have this Depends-On here? I think that\u0027s the reason this is not merged yet. I recommend removing it","commit_id":"66eb7e172912acbeb7670d7154a9686bb0726c47"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"2ee3b1a5631eda35ebf9931571fc4882a1c7edab","unresolved":false,"context_lines":[{"line_number":10,"context_line":"for Floating IPs. And intro a new sub resource into floatingip for port"},{"line_number":11,"context_line":"forwarding support."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Depends-On: If40305044c9dfe0024b64bd3921232bb0a6c9372"},{"line_number":14,"context_line":"Change-Id: Ib2c47b585538bbc067a488e34fd0fc8097314f98"},{"line_number":15,"context_line":"Partial-Bug: #1491317"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":33,"id":"7f96bb07_b62db547","line":13,"range":{"start_line":13,"start_character":0,"end_line":13,"end_character":53},"in_reply_to":"7f96bb07_6a34274b","updated":"2018-01-23 00:29:47.000000000","message":"If we don\u0027t do this, the zuul will always -1.. So I\u0027m afraid that removing it is not a good way.","commit_id":"66eb7e172912acbeb7670d7154a9686bb0726c47"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"a5dd77be26293fb99726a4b25846f997ab6cb75e","unresolved":false,"context_lines":[{"line_number":10,"context_line":"for Floating IPs. And intro a new sub resource into floatingip for port"},{"line_number":11,"context_line":"forwarding support."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Depends-On: If40305044c9dfe0024b64bd3921232bb0a6c9372"},{"line_number":14,"context_line":"Change-Id: Ib2c47b585538bbc067a488e34fd0fc8097314f98"},{"line_number":15,"context_line":"Partial-Bug: #1491317"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":33,"id":"7f96bb07_91ff6366","line":13,"range":{"start_line":13,"start_character":0,"end_line":13,"end_character":53},"in_reply_to":"7f96bb07_b62db547","updated":"2018-01-23 01:15:58.000000000","message":"So could we turn around to see that CI fix?","commit_id":"66eb7e172912acbeb7670d7154a9686bb0726c47"}],"specs/pike/port-forwarding.rst":[{"author":{"_account_id":20421,"name":"brenda_tian","email":"tian.mingming@h3c.com","username":"brenda_tian"},"change_message_id":"16580537419d04a9c2f89f3d2e02a9778d5a3305","unresolved":false,"context_lines":[{"line_number":49,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"Introduce port forwarding API and implementation on the public address of the"},{"line_number":52,"context_line":"virtual router external gateway interface (connecting the router to a public network)."},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"The user can define various port forwarding rules on the router containing"},{"line_number":55,"context_line":"the client port and the destination port, connected with the VM they want to expose."}],"source_content_type":"text/x-rst","patch_set":2,"id":"bf091321_98e80a17","line":52,"updated":"2017-06-08 02:07:32.000000000","message":"I think we should make clear that if our purpose is to design an api that can be used by both the virtual router gateway ip and the floating ips to implement port forwarding.","commit_id":"dd49cae919af40fc9655ca29ced5f68225c60118"},{"author":{"_account_id":20421,"name":"brenda_tian","email":"tian.mingming@h3c.com","username":"brenda_tian"},"change_message_id":"16580537419d04a9c2f89f3d2e02a9778d5a3305","unresolved":false,"context_lines":[{"line_number":54,"context_line":"The user can define various port forwarding rules on the router containing"},{"line_number":55,"context_line":"the client port and the destination port, connected with the VM they want to expose."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"An optional enhancement for this would be to define extra public IPs on the"},{"line_number":58,"context_line":"router external gateway and perform port forwarding on them, but this will"},{"line_number":59,"context_line":"be described in more detail in the implementation spec."},{"line_number":60,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"bf091321_d85322e2","line":57,"range":{"start_line":57,"start_character":11,"end_line":57,"end_character":12},"updated":"2017-06-08 02:07:32.000000000","message":"The rest api change described below can only apply to provide the port forwarding of floating ips, so it is not an \"optional\" enhancement.","commit_id":"dd49cae919af40fc9655ca29ced5f68225c60118"},{"author":{"_account_id":20421,"name":"brenda_tian","email":"tian.mingming@h3c.com","username":"brenda_tian"},"change_message_id":"16580537419d04a9c2f89f3d2e02a9778d5a3305","unresolved":false,"context_lines":[{"line_number":76,"context_line":"cannot be deleted."},{"line_number":77,"context_line":""},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"Data Model Impact"},{"line_number":80,"context_line":"-----------------"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"The following new table is added as part of the port forwarding feature::"}],"source_content_type":"text/x-rst","patch_set":2,"id":"bf091321_b8174eee","line":79,"updated":"2017-06-08 02:07:32.000000000","message":"There is still the problem that the purpose is not clear. why we use port_forwarding data model, but not just extend the floating ips\u0027 data model according to the rest api change below.","commit_id":"dd49cae919af40fc9655ca29ced5f68225c60118"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"7cd0207258b70abfeb5f6d026cc70025aebb2325","unresolved":false,"context_lines":[{"line_number":76,"context_line":"cannot be deleted."},{"line_number":77,"context_line":""},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"Data Model Impact"},{"line_number":80,"context_line":"-----------------"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"The following new table is added as part of the port forwarding feature::"}],"source_content_type":"text/x-rst","patch_set":2,"id":"bf091321_2a7ac123","line":79,"in_reply_to":"bf091321_b8174eee","updated":"2017-09-21 05:29:04.000000000","message":"Oh, I actually redefined the REST API , forgot the table modifications.\nThanks","commit_id":"dd49cae919af40fc9655ca29ced5f68225c60118"},{"author":{"_account_id":20421,"name":"brenda_tian","email":"tian.mingming@h3c.com","username":"brenda_tian"},"change_message_id":"2f291e93b0ca50d82d9476d358d5613fbbb70c21","unresolved":false,"context_lines":[{"line_number":93,"context_line":"Optional check can be to maintain a Unique constraint between Router and External Port ID,"},{"line_number":94,"context_line":"an the VM port and Internal Port."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"REST API Impact"},{"line_number":97,"context_line":"---------------"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"The idea is to extend the Floating IP Rest API with a new extension ``port_forwarding``"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f231b9d_b8c151e7","line":96,"updated":"2017-06-13 03:10:02.000000000","message":"There is still the problem that using floating ip extensin couldn\u0027t realize the port-forwarding of router\u0027s gateway ip.","commit_id":"8d595439943a72bef0dfa4a3b55908610c1b52f5"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"4512ee5792941d45cd183e5ec275326b3892fc0e","unresolved":false,"context_lines":[{"line_number":93,"context_line":"Optional check can be to maintain a Unique constraint between Router and External Port ID,"},{"line_number":94,"context_line":"an the VM port and Internal Port."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"REST API Impact"},{"line_number":97,"context_line":"---------------"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"The idea is to extend the Floating IP Rest API with a new extension ``port_forwarding``"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7f231b9d_93579603","line":96,"in_reply_to":"7f231b9d_b8c151e7","updated":"2017-06-13 03:22:14.000000000","message":"Can you explain a bit more about it?","commit_id":"8d595439943a72bef0dfa4a3b55908610c1b52f5"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"9ffe26aa2ed3ed4f212362ce81638cecd1ff28f0","unresolved":false,"context_lines":[{"line_number":28,"context_line":"client1  172.24.4.2:4001   \u003d\u003e maps to 10.0.0.2 port 80 (VM1)"},{"line_number":29,"context_line":"client2  172.24.4.2:4002   \u003d\u003e maps to 10.0.0.3 port 80 (VM2)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"This spec focus on the API level, a detailed reference implementation spec"},{"line_number":32,"context_line":"will be written upon approve of API."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"9f436f4f_6acc1fbc","line":31,"range":{"start_line":31,"start_character":10,"end_line":31,"end_character":15},"updated":"2017-08-09 22:23:26.000000000","message":"focuses","commit_id":"1f9035295507ea46642c8cee98cb41eae278aac6"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"6f0ffe99c2a954320c8d335eae2214d1ea38fb58","unresolved":false,"context_lines":[{"line_number":28,"context_line":"client1  172.24.4.2:4001   \u003d\u003e maps to 10.0.0.2 port 80 (VM1)"},{"line_number":29,"context_line":"client2  172.24.4.2:4002   \u003d\u003e maps to 10.0.0.3 port 80 (VM2)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"This spec focus on the API level, a detailed reference implementation spec"},{"line_number":32,"context_line":"will be written upon approve of API."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"9f436f4f_bcd36d38","line":31,"range":{"start_line":31,"start_character":10,"end_line":31,"end_character":15},"in_reply_to":"9f436f4f_6acc1fbc","updated":"2017-08-10 04:02:43.000000000","message":"Oops","commit_id":"1f9035295507ea46642c8cee98cb41eae278aac6"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"9ffe26aa2ed3ed4f212362ce81638cecd1ff28f0","unresolved":false,"context_lines":[{"line_number":29,"context_line":"client2  172.24.4.2:4002   \u003d\u003e maps to 10.0.0.3 port 80 (VM2)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"This spec focus on the API level, a detailed reference implementation spec"},{"line_number":32,"context_line":"will be written upon approve of API."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"Problem Description"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9f436f4f_2ac6179c","line":32,"range":{"start_line":32,"start_character":21,"end_line":32,"end_character":28},"updated":"2017-08-09 22:23:26.000000000","message":"approval","commit_id":"1f9035295507ea46642c8cee98cb41eae278aac6"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"6f0ffe99c2a954320c8d335eae2214d1ea38fb58","unresolved":false,"context_lines":[{"line_number":29,"context_line":"client2  172.24.4.2:4002   \u003d\u003e maps to 10.0.0.3 port 80 (VM2)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"This spec focus on the API level, a detailed reference implementation spec"},{"line_number":32,"context_line":"will be written upon approve of API."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"Problem Description"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9f436f4f_9cd66927","line":32,"range":{"start_line":32,"start_character":21,"end_line":32,"end_character":28},"in_reply_to":"9f436f4f_2ac6179c","updated":"2017-08-10 04:02:43.000000000","message":"my bad :(","commit_id":"1f9035295507ea46642c8cee98cb41eae278aac6"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"9ffe26aa2ed3ed4f212362ce81638cecd1ff28f0","unresolved":false,"context_lines":[{"line_number":63,"context_line":"* Default SNAT use case - traffic flowing out to the external network will go"},{"line_number":64,"context_line":"through the Network/Service Node, and the SNAT Namespace hosted there, to get"},{"line_number":65,"context_line":"out. Response traffic will again go through the SNAT Namespace for translation"},{"line_number":66,"context_line":"and is then directly switched to the appropriate VM in a Compute Node."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"* VMs with Floating IPs(FIP) use case - traffic flowing out will go through the"},{"line_number":69,"context_line":"DVR Router for routing and translation and then through the FIP Namespace"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9f436f4f_8a8d0333","line":66,"range":{"start_line":66,"start_character":4,"end_line":66,"end_character":30},"updated":"2017-08-09 22:23:26.000000000","message":"since you started the sentence in the future tense, the following would be clearer:\n\nwill then be directly switched\n\nMaybe even better:\n\nwill then be directed","commit_id":"1f9035295507ea46642c8cee98cb41eae278aac6"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"6f0ffe99c2a954320c8d335eae2214d1ea38fb58","unresolved":false,"context_lines":[{"line_number":63,"context_line":"* Default SNAT use case - traffic flowing out to the external network will go"},{"line_number":64,"context_line":"through the Network/Service Node, and the SNAT Namespace hosted there, to get"},{"line_number":65,"context_line":"out. Response traffic will again go through the SNAT Namespace for translation"},{"line_number":66,"context_line":"and is then directly switched to the appropriate VM in a Compute Node."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"* VMs with Floating IPs(FIP) use case - traffic flowing out will go through the"},{"line_number":69,"context_line":"DVR Router for routing and translation and then through the FIP Namespace"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9f436f4f_1ce27902","line":66,"range":{"start_line":66,"start_character":4,"end_line":66,"end_character":30},"in_reply_to":"9f436f4f_8a8d0333","updated":"2017-08-10 04:02:43.000000000","message":"I need to proof-read :(","commit_id":"1f9035295507ea46642c8cee98cb41eae278aac6"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"9ffe26aa2ed3ed4f212362ce81638cecd1ff28f0","unresolved":false,"context_lines":[{"line_number":72,"context_line":"then the FIP Namespace and through the Internal Router which also handles"},{"line_number":73,"context_line":"translation to the VM."},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"DVR runs the L3Agent on Network as well as on the Compute Nodes."},{"line_number":76,"context_line":"Port Forwarding rules would be installed in the SNAT Namespace in Network"},{"line_number":77,"context_line":"Node and in the IR Namespace to be applied on traffic flowing"},{"line_number":78,"context_line":"through the FIP Namespace(to ensure that there is no effect on East - West"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9f436f4f_ca72eb49","line":75,"range":{"start_line":75,"start_character":24,"end_line":75,"end_character":31},"updated":"2017-08-09 22:23:26.000000000","message":"the Network node","commit_id":"1f9035295507ea46642c8cee98cb41eae278aac6"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"6f0ffe99c2a954320c8d335eae2214d1ea38fb58","unresolved":false,"context_lines":[{"line_number":72,"context_line":"then the FIP Namespace and through the Internal Router which also handles"},{"line_number":73,"context_line":"translation to the VM."},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"DVR runs the L3Agent on Network as well as on the Compute Nodes."},{"line_number":76,"context_line":"Port Forwarding rules would be installed in the SNAT Namespace in Network"},{"line_number":77,"context_line":"Node and in the IR Namespace to be applied on traffic flowing"},{"line_number":78,"context_line":"through the FIP Namespace(to ensure that there is no effect on East - West"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9f436f4f_dcc4f161","line":75,"range":{"start_line":75,"start_character":24,"end_line":75,"end_character":31},"in_reply_to":"9f436f4f_ca72eb49","updated":"2017-08-10 04:02:43.000000000","message":"\"Network as well as on Compute nodes\"\nI meant it to mean a single sentence. Thats why I kept it Capitalized ( Common Noun from Openstack\u0027s point of view ). Also , it saved a word :)\nBut now that I see the comment takes more words, so I fixed it.","commit_id":"1f9035295507ea46642c8cee98cb41eae278aac6"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"9ffe26aa2ed3ed4f212362ce81638cecd1ff28f0","unresolved":false,"context_lines":[{"line_number":75,"context_line":"DVR runs the L3Agent on Network as well as on the Compute Nodes."},{"line_number":76,"context_line":"Port Forwarding rules would be installed in the SNAT Namespace in Network"},{"line_number":77,"context_line":"Node and in the IR Namespace to be applied on traffic flowing"},{"line_number":78,"context_line":"through the FIP Namespace(to ensure that there is no effect on East - West"},{"line_number":79,"context_line":"flows)."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"The port forwarding entry is NATing a specific floating ip:port to a specific"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9f436f4f_6a99bf6c","line":78,"range":{"start_line":78,"start_character":25,"end_line":78,"end_character":26},"updated":"2017-08-09 22:23:26.000000000","message":"missing space here","commit_id":"1f9035295507ea46642c8cee98cb41eae278aac6"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"6f0ffe99c2a954320c8d335eae2214d1ea38fb58","unresolved":false,"context_lines":[{"line_number":75,"context_line":"DVR runs the L3Agent on Network as well as on the Compute Nodes."},{"line_number":76,"context_line":"Port Forwarding rules would be installed in the SNAT Namespace in Network"},{"line_number":77,"context_line":"Node and in the IR Namespace to be applied on traffic flowing"},{"line_number":78,"context_line":"through the FIP Namespace(to ensure that there is no effect on East - West"},{"line_number":79,"context_line":"flows)."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"The port forwarding entry is NATing a specific floating ip:port to a specific"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9f436f4f_bca12dac","line":78,"range":{"start_line":78,"start_character":25,"end_line":78,"end_character":26},"in_reply_to":"9f436f4f_6a99bf6c","updated":"2017-08-10 04:02:43.000000000","message":"Done","commit_id":"1f9035295507ea46642c8cee98cb41eae278aac6"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"9ffe26aa2ed3ed4f212362ce81638cecd1ff28f0","unresolved":false,"context_lines":[{"line_number":129,"context_line":"The Floating IP extension definition would be expanded as :"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    \u0027floatingips\u0027: {"},{"line_number":132,"context_line":"        \u0027external_port\u0027: { \u0027allow_post\u0027:True, \u0027allow_put\u0027: True,"},{"line_number":133,"context_line":"                           \u0027validate\u0027: {\u0027type:int\u0027:None},"},{"line_number":134,"context_line":"                           \u0027is_visible\u0027: True,"},{"line_number":135,"context_line":"                         },"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9f436f4f_aac7a712","line":132,"range":{"start_line":132,"start_character":59,"end_line":132,"end_character":63},"updated":"2017-08-09 22:23:26.000000000","message":"Right now, the semantics of the FIPs PUT is to associate a port with the FIP. Are you prposing to change that?","commit_id":"1f9035295507ea46642c8cee98cb41eae278aac6"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"6f0ffe99c2a954320c8d335eae2214d1ea38fb58","unresolved":false,"context_lines":[{"line_number":129,"context_line":"The Floating IP extension definition would be expanded as :"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    \u0027floatingips\u0027: {"},{"line_number":132,"context_line":"        \u0027external_port\u0027: { \u0027allow_post\u0027:True, \u0027allow_put\u0027: True,"},{"line_number":133,"context_line":"                           \u0027validate\u0027: {\u0027type:int\u0027:None},"},{"line_number":134,"context_line":"                           \u0027is_visible\u0027: True,"},{"line_number":135,"context_line":"                         },"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9f436f4f_7cb2a5e8","line":132,"range":{"start_line":132,"start_character":59,"end_line":132,"end_character":63},"in_reply_to":"9f436f4f_aac7a712","updated":"2017-08-10 04:02:43.000000000","message":"Since this is also associating a port with the FIP, so yes, I am proposing to add this functionality without breaking anything which existed previously.","commit_id":"1f9035295507ea46642c8cee98cb41eae278aac6"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"9ffe26aa2ed3ed4f212362ce81638cecd1ff28f0","unresolved":false,"context_lines":[{"line_number":133,"context_line":"                           \u0027validate\u0027: {\u0027type:int\u0027:None},"},{"line_number":134,"context_line":"                           \u0027is_visible\u0027: True,"},{"line_number":135,"context_line":"                         },"},{"line_number":136,"context_line":"        \u0027internal_port\u0027: { \u0027allow_post\u0027:True, \u0027allow_put\u0027: True,"},{"line_number":137,"context_line":"                           \u0027validate\u0027: {\u0027type:int\u0027:None},"},{"line_number":138,"context_line":"                           \u0027is_visible\u0027: True,"},{"line_number":139,"context_line":"                         },"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9f436f4f_0ad6b3c4","line":136,"range":{"start_line":136,"start_character":59,"end_line":136,"end_character":63},"updated":"2017-08-09 22:23:26.000000000","message":"Same comment here","commit_id":"1f9035295507ea46642c8cee98cb41eae278aac6"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"6f0ffe99c2a954320c8d335eae2214d1ea38fb58","unresolved":false,"context_lines":[{"line_number":133,"context_line":"                           \u0027validate\u0027: {\u0027type:int\u0027:None},"},{"line_number":134,"context_line":"                           \u0027is_visible\u0027: True,"},{"line_number":135,"context_line":"                         },"},{"line_number":136,"context_line":"        \u0027internal_port\u0027: { \u0027allow_post\u0027:True, \u0027allow_put\u0027: True,"},{"line_number":137,"context_line":"                           \u0027validate\u0027: {\u0027type:int\u0027:None},"},{"line_number":138,"context_line":"                           \u0027is_visible\u0027: True,"},{"line_number":139,"context_line":"                         },"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9f436f4f_9cbb09c3","line":136,"range":{"start_line":136,"start_character":59,"end_line":136,"end_character":63},"in_reply_to":"9f436f4f_0ad6b3c4","updated":"2017-08-10 04:02:43.000000000","message":"Ditto","commit_id":"1f9035295507ea46642c8cee98cb41eae278aac6"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"9ffe26aa2ed3ed4f212362ce81638cecd1ff28f0","unresolved":false,"context_lines":[{"line_number":137,"context_line":"                           \u0027validate\u0027: {\u0027type:int\u0027:None},"},{"line_number":138,"context_line":"                           \u0027is_visible\u0027: True,"},{"line_number":139,"context_line":"                         },"},{"line_number":140,"context_line":"        \u0027protocol\u0027: { \u0027allow_post\u0027:True, \u0027allow_put\u0027: True,"},{"line_number":141,"context_line":"                      \u0027validate\u0027: {"},{"line_number":142,"context_line":"                          \u0027type:values\u0027: neutron_lib.constants.IPTABLES_PROTOCOL_MAP},"},{"line_number":143,"context_line":"                      \u0027is_visible\u0027: True,"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9f436f4f_eae48fae","line":140,"range":{"start_line":140,"start_character":54,"end_line":140,"end_character":58},"updated":"2017-08-09 22:23:26.000000000","message":"Ditto","commit_id":"1f9035295507ea46642c8cee98cb41eae278aac6"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"6f0ffe99c2a954320c8d335eae2214d1ea38fb58","unresolved":false,"context_lines":[{"line_number":137,"context_line":"                           \u0027validate\u0027: {\u0027type:int\u0027:None},"},{"line_number":138,"context_line":"                           \u0027is_visible\u0027: True,"},{"line_number":139,"context_line":"                         },"},{"line_number":140,"context_line":"        \u0027protocol\u0027: { \u0027allow_post\u0027:True, \u0027allow_put\u0027: True,"},{"line_number":141,"context_line":"                      \u0027validate\u0027: {"},{"line_number":142,"context_line":"                          \u0027type:values\u0027: neutron_lib.constants.IPTABLES_PROTOCOL_MAP},"},{"line_number":143,"context_line":"                      \u0027is_visible\u0027: True,"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9f436f4f_bcb80dc8","line":140,"range":{"start_line":140,"start_character":54,"end_line":140,"end_character":58},"in_reply_to":"9f436f4f_eae48fae","updated":"2017-08-10 04:02:43.000000000","message":"This is tricky, because protocol should be allowed only if Internal and External port is provided. \nTherefore, yes, this might be a change in the FIP\u0027s Put method, but it would be dependent on the other attributes","commit_id":"1f9035295507ea46642c8cee98cb41eae278aac6"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"9ffe26aa2ed3ed4f212362ce81638cecd1ff28f0","unresolved":false,"context_lines":[{"line_number":153,"context_line":"Security Impact"},{"line_number":154,"context_line":"---------------"},{"line_number":155,"context_line":"Port forwarding is similar in nature to centralized DNAT,"},{"line_number":156,"context_line":"so should not posses additional security implications."},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"Notifications Impact"},{"line_number":159,"context_line":"--------------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9f436f4f_cadf8bd4","line":156,"range":{"start_line":156,"start_character":14,"end_line":156,"end_character":20},"updated":"2017-08-09 22:23:26.000000000","message":"pose","commit_id":"1f9035295507ea46642c8cee98cb41eae278aac6"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"6f0ffe99c2a954320c8d335eae2214d1ea38fb58","unresolved":false,"context_lines":[{"line_number":153,"context_line":"Security Impact"},{"line_number":154,"context_line":"---------------"},{"line_number":155,"context_line":"Port forwarding is similar in nature to centralized DNAT,"},{"line_number":156,"context_line":"so should not posses additional security implications."},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"Notifications Impact"},{"line_number":159,"context_line":"--------------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9f436f4f_5c9c815c","line":156,"range":{"start_line":156,"start_character":14,"end_line":156,"end_character":20},"in_reply_to":"9f436f4f_cadf8bd4","updated":"2017-08-10 04:02:43.000000000","message":"Done","commit_id":"1f9035295507ea46642c8cee98cb41eae278aac6"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"9ffe26aa2ed3ed4f212362ce81638cecd1ff28f0","unresolved":false,"context_lines":[{"line_number":181,"context_line":"Developer Impact"},{"line_number":182,"context_line":"----------------"},{"line_number":183,"context_line":"Future SNAT distribution plans should take port forwarding into consideration."},{"line_number":184,"context_line":"Kuryr can leverage port forwarding for feature compatbility"},{"line_number":185,"context_line":"with Docker port mapping."},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"Community Impact"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9f436f4f_6aeadf75","line":184,"range":{"start_line":184,"start_character":47,"end_line":184,"end_character":59},"updated":"2017-08-09 22:23:26.000000000","message":"compatibility","commit_id":"1f9035295507ea46642c8cee98cb41eae278aac6"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"6f0ffe99c2a954320c8d335eae2214d1ea38fb58","unresolved":false,"context_lines":[{"line_number":181,"context_line":"Developer Impact"},{"line_number":182,"context_line":"----------------"},{"line_number":183,"context_line":"Future SNAT distribution plans should take port forwarding into consideration."},{"line_number":184,"context_line":"Kuryr can leverage port forwarding for feature compatbility"},{"line_number":185,"context_line":"with Docker port mapping."},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"Community Impact"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9f436f4f_dc999179","line":184,"range":{"start_line":184,"start_character":47,"end_line":184,"end_character":59},"in_reply_to":"9f436f4f_6aeadf75","updated":"2017-08-10 04:02:43.000000000","message":"Done","commit_id":"1f9035295507ea46642c8cee98cb41eae278aac6"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"9ffe26aa2ed3ed4f212362ce81638cecd1ff28f0","unresolved":false,"context_lines":[{"line_number":201,"context_line":"-----------"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"Primary assignee:"},{"line_number":204,"context_line":"  gal-sagie \u003cgal.sagie@gmail.com\u003e"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"Other contributors:"},{"line_number":207,"context_line":"  reedip \u003creedip.banerjee@nectechnologies.in\u003e"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9f436f4f_2ab29795","line":204,"range":{"start_line":204,"start_character":2,"end_line":204,"end_character":33},"updated":"2017-08-09 22:23:26.000000000","message":"Is he still available to do this? I have the impression he is not. Better check with him","commit_id":"1f9035295507ea46642c8cee98cb41eae278aac6"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"a36a1465358e339e445d733c60a882c273d9bd70","unresolved":false,"context_lines":[{"line_number":61,"context_line":"DVR[1] classifies North - South traffic into two categories:"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"* Default SNAT use case - traffic flowing out to the external network will go"},{"line_number":64,"context_line":"through the Network/Service Node, and the SNAT Namespace hosted there, to get"},{"line_number":65,"context_line":"out. Response traffic will again go through the SNAT Namespace for translation"},{"line_number":66,"context_line":"and will then be directly switched to the appropriate VM in a Compute Node."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"* VMs with Floating IPs(FIP) use case - traffic flowing out will go through the"},{"line_number":69,"context_line":"DVR Router for routing and translation and then through the FIP Namespace"}],"source_content_type":"text/x-rst","patch_set":6,"id":"9f436f4f_6b197c20","line":66,"range":{"start_line":64,"start_character":0,"end_line":66,"end_character":74},"updated":"2017-08-11 23:19:34.000000000","message":"I think you need to indent this","commit_id":"3a8a8104ddd0c52d6cb70c0c57b5a0071fb23321"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"a36a1465358e339e445d733c60a882c273d9bd70","unresolved":false,"context_lines":[{"line_number":66,"context_line":"and will then be directly switched to the appropriate VM in a Compute Node."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"* VMs with Floating IPs(FIP) use case - traffic flowing out will go through the"},{"line_number":69,"context_line":"DVR Router for routing and translation and then through the FIP Namespace"},{"line_number":70,"context_line":"on the Compute Node to the external network through its br-ex. And on the"},{"line_number":71,"context_line":"incoming traffic, again the flow is through the br-ex on the Compute Node,"},{"line_number":72,"context_line":"then the FIP Namespace and through the Internal Router which also handles"},{"line_number":73,"context_line":"translation to the VM."},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"DVR runs the L3Agent on Network nodes as well as on the Compute nodes."},{"line_number":76,"context_line":"Port Forwarding rules would be installed in the SNAT Namespace in Network"}],"source_content_type":"text/x-rst","patch_set":6,"id":"9f436f4f_0bdaf04a","line":73,"range":{"start_line":69,"start_character":0,"end_line":73,"end_character":22},"updated":"2017-08-11 23:19:34.000000000","message":"Ditto","commit_id":"3a8a8104ddd0c52d6cb70c0c57b5a0071fb23321"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"20191d9e9af64de8752f3093f1016780d66f8507","unresolved":false,"context_lines":[{"line_number":128,"context_line":""},{"line_number":129,"context_line":"The Floating IP extension definition would be expanded as :"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    \u0027floatingips\u0027: {"},{"line_number":132,"context_line":"        \u0027external_port\u0027: { \u0027allow_post\u0027:True, \u0027allow_put\u0027: True,"},{"line_number":133,"context_line":"                           \u0027validate\u0027: {\u0027type:int\u0027:None},"},{"line_number":134,"context_line":"                           \u0027is_visible\u0027: True,"},{"line_number":135,"context_line":"                         },"},{"line_number":136,"context_line":"        \u0027internal_port\u0027: { \u0027allow_post\u0027:True, \u0027allow_put\u0027: True,"},{"line_number":137,"context_line":"                           \u0027validate\u0027: {\u0027type:int\u0027:None},"},{"line_number":138,"context_line":"                           \u0027is_visible\u0027: True,"},{"line_number":139,"context_line":"                         },"},{"line_number":140,"context_line":"        \u0027protocol\u0027: { \u0027allow_post\u0027:True, \u0027allow_put\u0027: True,"},{"line_number":141,"context_line":"                      \u0027validate\u0027: {"},{"line_number":142,"context_line":"                          \u0027type:values\u0027: neutron_lib.constants.IPTABLES_PROTOCOL_MAP},"},{"line_number":143,"context_line":"                      \u0027is_visible\u0027: True,"},{"line_number":144,"context_line":"                      \u0027convert_to\u0027: converters.convert_to_protocol,"},{"line_number":145,"context_line":"                     },"},{"line_number":146,"context_line":"        }"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"Command Line Client Impact"},{"line_number":149,"context_line":"--------------------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"9f436f4f_9c36c802","line":146,"range":{"start_line":131,"start_character":0,"end_line":146,"end_character":9},"updated":"2017-08-16 16:25:10.000000000","message":"It seems your patchset is being tripped in the gate-neutron-specs-docs-ubuntu-xenial check by this json block. I suggest using .. code-block:: json. Here\u0027s an example: http://git.openstack.org/cgit/openstack/neutron-specs/tree/specs/pike/logging-API-for-security-group-rules.rst#n255","commit_id":"13e7b81618fdfff94c841373a20a371862e00c80"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"8e6fc9b96cd6d0275fa188b292313c4523ebbe10","unresolved":false,"context_lines":[{"line_number":128,"context_line":""},{"line_number":129,"context_line":"The Floating IP extension definition would be expanded as :"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    \u0027floatingips\u0027: {"},{"line_number":132,"context_line":"        \u0027external_port\u0027: { \u0027allow_post\u0027:True, \u0027allow_put\u0027: True,"},{"line_number":133,"context_line":"                           \u0027validate\u0027: {\u0027type:int\u0027:None},"},{"line_number":134,"context_line":"                           \u0027is_visible\u0027: True,"},{"line_number":135,"context_line":"                         },"},{"line_number":136,"context_line":"        \u0027internal_port\u0027: { \u0027allow_post\u0027:True, \u0027allow_put\u0027: True,"},{"line_number":137,"context_line":"                           \u0027validate\u0027: {\u0027type:int\u0027:None},"},{"line_number":138,"context_line":"                           \u0027is_visible\u0027: True,"},{"line_number":139,"context_line":"                         },"},{"line_number":140,"context_line":"        \u0027protocol\u0027: { \u0027allow_post\u0027:True, \u0027allow_put\u0027: True,"},{"line_number":141,"context_line":"                      \u0027validate\u0027: {"},{"line_number":142,"context_line":"                          \u0027type:values\u0027: neutron_lib.constants.IPTABLES_PROTOCOL_MAP},"},{"line_number":143,"context_line":"                      \u0027is_visible\u0027: True,"},{"line_number":144,"context_line":"                      \u0027convert_to\u0027: converters.convert_to_protocol,"},{"line_number":145,"context_line":"                     },"},{"line_number":146,"context_line":"        }"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"Command Line Client Impact"},{"line_number":149,"context_line":"--------------------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"9f436f4f_b9c2b151","line":146,"range":{"start_line":131,"start_character":0,"end_line":146,"end_character":9},"in_reply_to":"9f436f4f_9c36c802","updated":"2017-08-17 02:48:37.000000000","message":"Done","commit_id":"13e7b81618fdfff94c841373a20a371862e00c80"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"3b72b4362ff1087e5ea6805ffe5df1436dfb8cff","unresolved":false,"context_lines":[{"line_number":130,"context_line":""},{"line_number":131,"context_line":".. code-block:: json"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    {\u0027floatingips\u0027: {"},{"line_number":134,"context_line":"        \u0027external_port\u0027: { \u0027allow_post\u0027:True, \u0027allow_put\u0027: True,"},{"line_number":135,"context_line":"                           \u0027validate\u0027: {\u0027type:int\u0027:None},"},{"line_number":136,"context_line":"                           \u0027is_visible\u0027: True,"},{"line_number":137,"context_line":"                         },"},{"line_number":138,"context_line":"        \u0027internal_port\u0027: { \u0027allow_post\u0027:True, \u0027allow_put\u0027: True,"},{"line_number":139,"context_line":"                           \u0027validate\u0027: {\u0027type:int\u0027:None},"},{"line_number":140,"context_line":"                           \u0027is_visible\u0027: True,"},{"line_number":141,"context_line":"                         },"},{"line_number":142,"context_line":"        \u0027protocol\u0027: { \u0027allow_post\u0027:True, \u0027allow_put\u0027: True,"},{"line_number":143,"context_line":"                      \u0027validate\u0027: {"},{"line_number":144,"context_line":"                          \u0027type:values\u0027: neutron_lib.constants.IPTABLES_PROTOCOL_MAP},"},{"line_number":145,"context_line":"                      \u0027is_visible\u0027: True,"},{"line_number":146,"context_line":"                      \u0027convert_to\u0027: converters.convert_to_protocol,"},{"line_number":147,"context_line":"                     },"},{"line_number":148,"context_line":"        }"},{"line_number":149,"context_line":"    }"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"Command Line Client Impact"},{"line_number":152,"context_line":"--------------------------"}],"source_content_type":"text/x-rst","patch_set":9,"id":"9f436f4f_18c40492","line":149,"range":{"start_line":133,"start_character":0,"end_line":149,"end_character":5},"updated":"2017-08-17 17:18:50.000000000","message":"The message now is:\n\nsphinx.errors.SphinxWarning: /home/jenkins/workspace/gate-neutron-specs-docs-ubuntu-xenial/doc/source/specs/pike/port-forwarding.rst:131: WARNING: Could not lex literal_block as \"json\". Highlighting skipped.\n\nSo using this online json validator https://codebeautify.org/jsonvalidator, I was able to almost pass it as follows:\n\n    {\"floatingips\": {\n        \"external_port\": { \"allow_post\":true, \"allow_put\": true,\n                           \"validate\": {\"type:int\":null},\n                           \"is_visible\": true\n                         },\n        \"internal_port\": { \"allow_post\":true, \"allow_put\": true,\n                           \"validate\": {\"type:int\":null},\n                           \"is_visible\": true\n                         },\n        \"protocol\": { \"allow_post\":true, \"allow_put\": true,\n                      \"validate\": {\n                          \"type:values\": neutron_lib.constants.IPTABLES_PROTOCOL_MAP},\n                      \"is_visible\": true,\n                      \"convert_to\": converters.convert_to_protocol,\n                     }\n        }\n    }\n\nThe neutron_lib.... and converters... stuff still fail. Maybe try . code-block:: console","commit_id":"3fe045c9847aa6051d9ade38ed29edc68284df4e"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"f9fa6255becd0b3aea04446c95893eea88aee55a","unresolved":false,"context_lines":[{"line_number":130,"context_line":""},{"line_number":131,"context_line":".. code-block:: json"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    {\u0027floatingips\u0027: {"},{"line_number":134,"context_line":"        \u0027external_port\u0027: { \u0027allow_post\u0027:True, \u0027allow_put\u0027: True,"},{"line_number":135,"context_line":"                           \u0027validate\u0027: {\u0027type:int\u0027:None},"},{"line_number":136,"context_line":"                           \u0027is_visible\u0027: True,"},{"line_number":137,"context_line":"                         },"},{"line_number":138,"context_line":"        \u0027internal_port\u0027: { \u0027allow_post\u0027:True, \u0027allow_put\u0027: True,"},{"line_number":139,"context_line":"                           \u0027validate\u0027: {\u0027type:int\u0027:None},"},{"line_number":140,"context_line":"                           \u0027is_visible\u0027: True,"},{"line_number":141,"context_line":"                         },"},{"line_number":142,"context_line":"        \u0027protocol\u0027: { \u0027allow_post\u0027:True, \u0027allow_put\u0027: True,"},{"line_number":143,"context_line":"                      \u0027validate\u0027: {"},{"line_number":144,"context_line":"                          \u0027type:values\u0027: neutron_lib.constants.IPTABLES_PROTOCOL_MAP},"},{"line_number":145,"context_line":"                      \u0027is_visible\u0027: True,"},{"line_number":146,"context_line":"                      \u0027convert_to\u0027: converters.convert_to_protocol,"},{"line_number":147,"context_line":"                     },"},{"line_number":148,"context_line":"        }"},{"line_number":149,"context_line":"    }"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"Command Line Client Impact"},{"line_number":152,"context_line":"--------------------------"}],"source_content_type":"text/x-rst","patch_set":9,"id":"9f436f4f_b8ebb8da","line":149,"range":{"start_line":133,"start_character":0,"end_line":149,"end_character":5},"in_reply_to":"9f436f4f_18c40492","updated":"2017-08-17 17:26:14.000000000","message":"After second thought, nevermind the json stuff. This is python code. So I suggest trying .. code-block:: python or, as I said above, .. code-block:: console","commit_id":"3fe045c9847aa6051d9ade38ed29edc68284df4e"}],"specs/queens/port-forwarding.rst":[{"author":{"_account_id":20421,"name":"brenda_tian","email":"tian.mingming@h3c.com","username":"brenda_tian"},"change_message_id":"8e20d699403c36b9f308914e193dba250d009b10","unresolved":false,"context_lines":[{"line_number":90,"context_line":"Data Model Impact"},{"line_number":91,"context_line":"-----------------"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"The following new table is added as part of the port forwarding feature::"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    CREATE TABLE port_forwarding ("},{"line_number":96,"context_line":"        id CHAR(36) NOT NULL PRI KEY,"}],"source_content_type":"text/x-rst","patch_set":11,"id":"7f287b81_17c86ca3","line":93,"updated":"2017-08-31 08:56:38.000000000","message":"when there is a new port-forwarding table, I think original floatingips table also do some modification. I think we should move columns of \"fixed_port_id\"、\"fixed_ip_address\"and \"router_id\" to port-forwarding table.","commit_id":"de0dfd4bf7d941fef67701c52186f457465b8f38"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"f4091ddf24b205cbd325537952b72fcd3a29f960","unresolved":false,"context_lines":[{"line_number":90,"context_line":"Data Model Impact"},{"line_number":91,"context_line":"-----------------"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"The following new table is added as part of the port forwarding feature::"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    CREATE TABLE port_forwarding ("},{"line_number":96,"context_line":"        id CHAR(36) NOT NULL PRI KEY,"}],"source_content_type":"text/x-rst","patch_set":11,"id":"7f287b81_bc9963d1","line":93,"in_reply_to":"7f287b81_17c86ca3","updated":"2017-09-01 07:25:42.000000000","message":"The internal IP corresponds to the fixed IP address.\nIs there a reason to suggest addition of the other columns?\nCan you elaborate a bit?","commit_id":"de0dfd4bf7d941fef67701c52186f457465b8f38"},{"author":{"_account_id":12860,"name":"Dongcan Ye","email":"yedongcan@yeah.net","username":"yedongcan"},"change_message_id":"1cff03b9e354705bd5d23488eebda88f2dcb2b6d","unresolved":false,"context_lines":[{"line_number":141,"context_line":"                         },"},{"line_number":142,"context_line":"        \u0027protocol\u0027: { \u0027allow_post\u0027:True, \u0027allow_put\u0027: True,"},{"line_number":143,"context_line":"                      \u0027validate\u0027: {"},{"line_number":144,"context_line":"                          \u0027type:values\u0027: neutron_lib.constants.IPTABLES_PROTOCOL_MAP},"},{"line_number":145,"context_line":"                      \u0027is_visible\u0027: True,"},{"line_number":146,"context_line":"                      \u0027convert_to\u0027: converters.convert_to_protocol,"},{"line_number":147,"context_line":"                     },"}],"source_content_type":"text/x-rst","patch_set":13,"id":"5f2577a7_2b815a4b","line":144,"range":{"start_line":144,"start_character":41,"end_line":144,"end_character":84},"updated":"2017-09-13 08:28:21.000000000","message":"Since this constant contains more protocols, this is not correctly now.","commit_id":"fbc97f93389b9957997fd6cb8b89a8ed1f9b25cd"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"7cd0207258b70abfeb5f6d026cc70025aebb2325","unresolved":false,"context_lines":[{"line_number":141,"context_line":"                         },"},{"line_number":142,"context_line":"        \u0027protocol\u0027: { \u0027allow_post\u0027:True, \u0027allow_put\u0027: True,"},{"line_number":143,"context_line":"                      \u0027validate\u0027: {"},{"line_number":144,"context_line":"                          \u0027type:values\u0027: neutron_lib.constants.IPTABLES_PROTOCOL_MAP},"},{"line_number":145,"context_line":"                      \u0027is_visible\u0027: True,"},{"line_number":146,"context_line":"                      \u0027convert_to\u0027: converters.convert_to_protocol,"},{"line_number":147,"context_line":"                     },"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9f5c4f37_06970f93","line":144,"range":{"start_line":144,"start_character":41,"end_line":144,"end_character":84},"in_reply_to":"5f2577a7_2b815a4b","updated":"2017-09-21 05:29:04.000000000","message":"The additional protocols ( SCTP, DCCP ) wont have a major impact. Would they?","commit_id":"fbc97f93389b9957997fd6cb8b89a8ed1f9b25cd"},{"author":{"_account_id":12860,"name":"Dongcan Ye","email":"yedongcan@yeah.net","username":"yedongcan"},"change_message_id":"1cff03b9e354705bd5d23488eebda88f2dcb2b6d","unresolved":false,"context_lines":[{"line_number":151,"context_line":"Command Line Client Impact"},{"line_number":152,"context_line":"--------------------------"},{"line_number":153,"context_line":"OpenstackClient would have additional options for floating IP CLI, which would"},{"line_number":154,"context_line":"define the port-forwaring characteristics."},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"Security Impact"},{"line_number":157,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":13,"id":"5f2577a7_eb92329f","line":154,"range":{"start_line":154,"start_character":16,"end_line":154,"end_character":25},"updated":"2017-09-13 08:28:21.000000000","message":"forwarding","commit_id":"fbc97f93389b9957997fd6cb8b89a8ed1f9b25cd"},{"author":{"_account_id":12860,"name":"Dongcan Ye","email":"yedongcan@yeah.net","username":"yedongcan"},"change_message_id":"1cff03b9e354705bd5d23488eebda88f2dcb2b6d","unresolved":false,"context_lines":[{"line_number":184,"context_line":"Developer Impact"},{"line_number":185,"context_line":"----------------"},{"line_number":186,"context_line":"Future SNAT distribution plans should take port forwarding into consideration."},{"line_number":187,"context_line":"Kuryr can leverage port forwarding for feature compatibility."},{"line_number":188,"context_line":"with Docker port mapping."},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"Community Impact"},{"line_number":191,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":13,"id":"5f2577a7_4bcca6bb","line":188,"range":{"start_line":187,"start_character":0,"end_line":188,"end_character":25},"updated":"2017-09-13 08:28:21.000000000","message":"nit: This can be merged as one line.","commit_id":"fbc97f93389b9957997fd6cb8b89a8ed1f9b25cd"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"15d45d2cd883c2336fdf711eb80397ccdf3ecbc6","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        id CHAR(36) NOT NULL PRI KEY,"},{"line_number":97,"context_line":"        floating_ip_id VARCHAR(255) NOT NULL FK,"},{"line_number":98,"context_line":"        external_port INT NOT NULL,"},{"line_number":99,"context_line":"        internal_ip CHAR(15) NOT NULL,"},{"line_number":100,"context_line":"        internal_port INT NOT NULL,"},{"line_number":101,"context_line":"        protocol CHAR(4) NOT NULL,"},{"line_number":102,"context_line":"    );"}],"source_content_type":"text/x-rst","patch_set":14,"id":"7f515b1d_50730417","line":99,"range":{"start_line":99,"start_character":8,"end_line":99,"end_character":38},"updated":"2017-10-07 22:56:28.000000000","message":"See my question in L107. If the answer is yes, do we need to keep the internal ip in the DB model? isn\u0027t that ip already in the associated port?","commit_id":"cbc8f400c6318847c96871597ccb0db37c07cc0a"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"fd563d2f4a37a5a87c614ef74dfb5b183a079bd8","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        id CHAR(36) NOT NULL PRI KEY,"},{"line_number":97,"context_line":"        floating_ip_id VARCHAR(255) NOT NULL FK,"},{"line_number":98,"context_line":"        external_port INT NOT NULL,"},{"line_number":99,"context_line":"        internal_ip CHAR(15) NOT NULL,"},{"line_number":100,"context_line":"        internal_port INT NOT NULL,"},{"line_number":101,"context_line":"        protocol CHAR(4) NOT NULL,"},{"line_number":102,"context_line":"    );"}],"source_content_type":"text/x-rst","patch_set":14,"id":"7f515b1d_6bf7318d","line":99,"range":{"start_line":99,"start_character":8,"end_line":99,"end_character":38},"in_reply_to":"7f515b1d_50730417","updated":"2017-10-08 02:28:22.000000000","message":"Hmm, I had kept it so that if the user modifies the port address ( say from 10.0.0.1 to 10.0.0.2 ), autmoatic port forwarding doesnt happen. Its a security concern in that aspect, isnt it?","commit_id":"cbc8f400c6318847c96871597ccb0db37c07cc0a"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"15d45d2cd883c2336fdf711eb80397ccdf3ecbc6","unresolved":false,"context_lines":[{"line_number":104,"context_line":"Optional check can be to maintain a Unique constraint between Router and External Port ID,"},{"line_number":105,"context_line":"an the VM port and Internal Port."},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"REST API Impact"},{"line_number":108,"context_line":"---------------"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"The idea is to extend the Floating IP Rest API with a new extension ``port_forwarding``"}],"source_content_type":"text/x-rst","patch_set":14,"id":"7f515b1d_b08478d4","line":107,"updated":"2017-10-07 22:56:28.000000000","message":"Based on the API described in L110 - 149, is the intent to do port forwarding between the FIP and the Neutron port associated to it? Is this the key concept of the proposal?","commit_id":"cbc8f400c6318847c96871597ccb0db37c07cc0a"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"fd563d2f4a37a5a87c614ef74dfb5b183a079bd8","unresolved":false,"context_lines":[{"line_number":104,"context_line":"Optional check can be to maintain a Unique constraint between Router and External Port ID,"},{"line_number":105,"context_line":"an the VM port and Internal Port."},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"REST API Impact"},{"line_number":108,"context_line":"---------------"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"The idea is to extend the Floating IP Rest API with a new extension ``port_forwarding``"}],"source_content_type":"text/x-rst","patch_set":14,"id":"7f515b1d_4bd7d5ef","line":107,"in_reply_to":"7f515b1d_b08478d4","updated":"2017-10-08 02:28:22.000000000","message":"The Router external Gateway Interface , or the port containing the FIP can be mapped with the VM\u0027s Neutron port.","commit_id":"cbc8f400c6318847c96871597ccb0db37c07cc0a"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"15d45d2cd883c2336fdf711eb80397ccdf3ecbc6","unresolved":false,"context_lines":[{"line_number":183,"context_line":""},{"line_number":184,"context_line":"Developer Impact"},{"line_number":185,"context_line":"----------------"},{"line_number":186,"context_line":"Future SNAT distribution plans should take port forwarding into consideration. Kuryr can leverage "},{"line_number":187,"context_line":"port forwarding for feature compatibility with Docker port mapping."},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"Community Impact"}],"source_content_type":"text/x-rst","patch_set":14,"id":"7f515b1d_10deac10","line":186,"range":{"start_line":186,"start_character":97,"end_line":186,"end_character":98},"updated":"2017-10-07 22:56:28.000000000","message":"whitespace, remove","commit_id":"cbc8f400c6318847c96871597ccb0db37c07cc0a"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"fd563d2f4a37a5a87c614ef74dfb5b183a079bd8","unresolved":false,"context_lines":[{"line_number":183,"context_line":""},{"line_number":184,"context_line":"Developer Impact"},{"line_number":185,"context_line":"----------------"},{"line_number":186,"context_line":"Future SNAT distribution plans should take port forwarding into consideration. Kuryr can leverage "},{"line_number":187,"context_line":"port forwarding for feature compatibility with Docker port mapping."},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"Community Impact"}],"source_content_type":"text/x-rst","patch_set":14,"id":"7f515b1d_2bbff9aa","line":186,"range":{"start_line":186,"start_character":97,"end_line":186,"end_character":98},"in_reply_to":"7f515b1d_10deac10","updated":"2017-10-08 02:28:22.000000000","message":"Done","commit_id":"cbc8f400c6318847c96871597ccb0db37c07cc0a"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"15d45d2cd883c2336fdf711eb80397ccdf3ecbc6","unresolved":false,"context_lines":[{"line_number":192,"context_line":""},{"line_number":193,"context_line":"Alternatives"},{"line_number":194,"context_line":"------------"},{"line_number":195,"context_line":"Users can use an external VM that provide this NAT capability or assign a new floating ip for "},{"line_number":196,"context_line":"each VM."},{"line_number":197,"context_line":""},{"line_number":198,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"7f515b1d_d0e374d7","line":195,"range":{"start_line":195,"start_character":93,"end_line":195,"end_character":94},"updated":"2017-10-07 22:56:28.000000000","message":"whitespace, remove","commit_id":"cbc8f400c6318847c96871597ccb0db37c07cc0a"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"fd563d2f4a37a5a87c614ef74dfb5b183a079bd8","unresolved":false,"context_lines":[{"line_number":192,"context_line":""},{"line_number":193,"context_line":"Alternatives"},{"line_number":194,"context_line":"------------"},{"line_number":195,"context_line":"Users can use an external VM that provide this NAT capability or assign a new floating ip for "},{"line_number":196,"context_line":"each VM."},{"line_number":197,"context_line":""},{"line_number":198,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"7f515b1d_4bc23536","line":195,"range":{"start_line":195,"start_character":93,"end_line":195,"end_character":94},"in_reply_to":"7f515b1d_d0e374d7","updated":"2017-10-08 02:28:22.000000000","message":"Done","commit_id":"cbc8f400c6318847c96871597ccb0db37c07cc0a"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"7ef33eed3c3ff008894fd86990e6ff018c1d0691","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        protocol CHAR(4) NOT NULL,"},{"line_number":102,"context_line":"    );"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"Optional check can be to maintain a Unique constraint between Router and External Port ID,"},{"line_number":105,"context_line":"an the VM port and Internal Port."},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"REST API Impact"}],"source_content_type":"text/x-rst","patch_set":15,"id":"7f515b1d_6b25f108","line":104,"range":{"start_line":104,"start_character":73,"end_line":104,"end_character":89},"updated":"2017-10-08 02:53:37.000000000","message":"what is extenal port ID, is it a neutron port? or udp/tcp port? If it is a udp/tcp port,  I think to remove \u0027ID\u0027 is better.","commit_id":"8656029b7e312c9d7fb5004540b79cee8139125f"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"9dd3a5bf85bbd8cb017f105e6d04794d54bd4bee","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        protocol CHAR(4) NOT NULL,"},{"line_number":102,"context_line":"    );"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"Optional check can be to maintain a Unique constraint between Router and External Port ID,"},{"line_number":105,"context_line":"an the VM port and Internal Port."},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"REST API Impact"}],"source_content_type":"text/x-rst","patch_set":15,"id":"5f4e5783_240d6737","line":104,"range":{"start_line":104,"start_character":73,"end_line":104,"end_character":89},"in_reply_to":"7f515b1d_6b25f108","updated":"2017-10-10 08:38:02.000000000","message":"@gongysh, thanks for review. This must be a protocol port number, as the line 98.","commit_id":"8656029b7e312c9d7fb5004540b79cee8139125f"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"7ef33eed3c3ff008894fd86990e6ff018c1d0691","unresolved":false,"context_lines":[{"line_number":151,"context_line":"Command Line Client Impact"},{"line_number":152,"context_line":"--------------------------"},{"line_number":153,"context_line":"OpenstackClient would have additional options for floating IP CLI, which would"},{"line_number":154,"context_line":"define the port-forwarding characteristics."},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"Security Impact"},{"line_number":157,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":15,"id":"7f515b1d_2b701908","line":154,"range":{"start_line":154,"start_character":43,"end_line":154,"end_character":43},"updated":"2017-10-08 02:53:37.000000000","message":"what is the operation sequence?\nusers first create floatingip, and then associate floating ip with port forwarding feature?\n\nwhat will happen if users associate floatingip with an neutron port in previous way, and then reassociate this floating ip with port forwarding to another neutron port? which will take precedence? the general associate or the specific associate?","commit_id":"8656029b7e312c9d7fb5004540b79cee8139125f"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"8f510c02bd110a99d3db124a8dc6e775fe1d1a33","unresolved":false,"context_lines":[{"line_number":151,"context_line":"Command Line Client Impact"},{"line_number":152,"context_line":"--------------------------"},{"line_number":153,"context_line":"OpenstackClient would have additional options for floating IP CLI, which would"},{"line_number":154,"context_line":"define the port-forwarding characteristics."},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"Security Impact"},{"line_number":157,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":15,"id":"3f4b6375_ede7d6e3","line":154,"range":{"start_line":154,"start_character":43,"end_line":154,"end_character":43},"in_reply_to":"5f4e5783_c47573fc","updated":"2017-10-23 04:58:17.000000000","message":"To keep things simple, if a floating IP is associated with a Neutron port, then the user needs to dis-associate the floating ip from the port and associate with the port forwarding neutron port. \n\nIf a  Floating IP is already connected to a port, it cannot be connected to a new port","commit_id":"8656029b7e312c9d7fb5004540b79cee8139125f"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"9dd3a5bf85bbd8cb017f105e6d04794d54bd4bee","unresolved":false,"context_lines":[{"line_number":151,"context_line":"Command Line Client Impact"},{"line_number":152,"context_line":"--------------------------"},{"line_number":153,"context_line":"OpenstackClient would have additional options for floating IP CLI, which would"},{"line_number":154,"context_line":"define the port-forwarding characteristics."},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"Security Impact"},{"line_number":157,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":15,"id":"5f4e5783_c47573fc","line":154,"range":{"start_line":154,"start_character":43,"end_line":154,"end_character":43},"in_reply_to":"7f515b1d_2b701908","updated":"2017-10-10 08:38:02.000000000","message":"I think it\u0027s better to not change the original behavior. So user cannot reassociate the floatingip with port forwarding with other neutron port if there is a relationship with 1 port already. Right? :) @Reedip","commit_id":"8656029b7e312c9d7fb5004540b79cee8139125f"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"15c8acdbab8cea9cdffaecc8cb4a9215a0e0a630","unresolved":false,"context_lines":[{"line_number":17,"context_line":"This is especially relevant for deployments which lack a large number of"},{"line_number":18,"context_line":"public IPs they can assign."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Common use case for this feature is a client requesting a specific service, the"},{"line_number":21,"context_line":"serving platform (PaaS, SaaS) allocate a VM to run the service and then allocate a"},{"line_number":22,"context_line":"client port to access this service."},{"line_number":23,"context_line":"This means that various clients use the same public IP, but the TCP/UDP destination"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3f4b6375_734bb12a","line":20,"range":{"start_line":20,"start_character":76,"end_line":20,"end_character":79},"updated":"2017-10-23 18:51:32.000000000","message":"where the","commit_id":"ba5f904f55b657dd2ab8b7fd7f1fad7be63d3cb2"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"50741290401c789b701b267b28494a71c35ccdee","unresolved":false,"context_lines":[{"line_number":17,"context_line":"This is especially relevant for deployments which lack a large number of"},{"line_number":18,"context_line":"public IPs they can assign."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Common use case for this feature is a client requesting a specific service, the"},{"line_number":21,"context_line":"serving platform (PaaS, SaaS) allocate a VM to run the service and then allocate a"},{"line_number":22,"context_line":"client port to access this service."},{"line_number":23,"context_line":"This means that various clients use the same public IP, but the TCP/UDP destination"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3f4b6375_094e8996","line":20,"range":{"start_line":20,"start_character":76,"end_line":20,"end_character":79},"in_reply_to":"3f4b6375_734bb12a","updated":"2017-10-28 09:31:56.000000000","message":"Done","commit_id":"ba5f904f55b657dd2ab8b7fd7f1fad7be63d3cb2"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"e171482ddf9403574729a84d42fdb237ad740fa1","unresolved":false,"context_lines":[{"line_number":17,"context_line":"This is especially relevant for deployments which lack a large number of"},{"line_number":18,"context_line":"public IPs they can assign."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Common use case for this feature is a client requesting a specific service, the"},{"line_number":21,"context_line":"serving platform (PaaS, SaaS) allocate a VM to run the service and then allocate a"},{"line_number":22,"context_line":"client port to access this service."},{"line_number":23,"context_line":"This means that various clients use the same public IP, but the TCP/UDP destination"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3f4b6375_2902650c","line":20,"range":{"start_line":20,"start_character":76,"end_line":20,"end_character":79},"in_reply_to":"3f4b6375_734bb12a","updated":"2017-11-05 09:51:49.000000000","message":"Done","commit_id":"ba5f904f55b657dd2ab8b7fd7f1fad7be63d3cb2"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"15c8acdbab8cea9cdffaecc8cb4a9215a0e0a630","unresolved":false,"context_lines":[{"line_number":18,"context_line":"public IPs they can assign."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Common use case for this feature is a client requesting a specific service, the"},{"line_number":21,"context_line":"serving platform (PaaS, SaaS) allocate a VM to run the service and then allocate a"},{"line_number":22,"context_line":"client port to access this service."},{"line_number":23,"context_line":"This means that various clients use the same public IP, but the TCP/UDP destination"},{"line_number":24,"context_line":"port is used to distinguish between the end point VMs."}],"source_content_type":"text/x-rst","patch_set":16,"id":"3f4b6375_335539c7","line":21,"range":{"start_line":21,"start_character":30,"end_line":21,"end_character":38},"updated":"2017-10-23 18:51:32.000000000","message":"allocates","commit_id":"ba5f904f55b657dd2ab8b7fd7f1fad7be63d3cb2"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"e171482ddf9403574729a84d42fdb237ad740fa1","unresolved":false,"context_lines":[{"line_number":18,"context_line":"public IPs they can assign."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Common use case for this feature is a client requesting a specific service, the"},{"line_number":21,"context_line":"serving platform (PaaS, SaaS) allocate a VM to run the service and then allocate a"},{"line_number":22,"context_line":"client port to access this service."},{"line_number":23,"context_line":"This means that various clients use the same public IP, but the TCP/UDP destination"},{"line_number":24,"context_line":"port is used to distinguish between the end point VMs."}],"source_content_type":"text/x-rst","patch_set":16,"id":"3f4b6375_1b012c06","line":21,"range":{"start_line":21,"start_character":30,"end_line":21,"end_character":38},"in_reply_to":"3f4b6375_335539c7","updated":"2017-11-05 09:51:49.000000000","message":"Done","commit_id":"ba5f904f55b657dd2ab8b7fd7f1fad7be63d3cb2"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"50741290401c789b701b267b28494a71c35ccdee","unresolved":false,"context_lines":[{"line_number":18,"context_line":"public IPs they can assign."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Common use case for this feature is a client requesting a specific service, the"},{"line_number":21,"context_line":"serving platform (PaaS, SaaS) allocate a VM to run the service and then allocate a"},{"line_number":22,"context_line":"client port to access this service."},{"line_number":23,"context_line":"This means that various clients use the same public IP, but the TCP/UDP destination"},{"line_number":24,"context_line":"port is used to distinguish between the end point VMs."}],"source_content_type":"text/x-rst","patch_set":16,"id":"3f4b6375_e9520d3b","line":21,"range":{"start_line":21,"start_character":30,"end_line":21,"end_character":38},"in_reply_to":"3f4b6375_335539c7","updated":"2017-10-28 09:31:56.000000000","message":"Done","commit_id":"ba5f904f55b657dd2ab8b7fd7f1fad7be63d3cb2"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"15c8acdbab8cea9cdffaecc8cb4a9215a0e0a630","unresolved":false,"context_lines":[{"line_number":39,"context_line":"  to reuse public IPs instead of assigning to each VM its own public"},{"line_number":40,"context_line":"  IP (floating IP)."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"* Docker support port-mapping feature and hence a big eco-system of automation"},{"line_number":43,"context_line":"  orchestration and management plugins leverage it."},{"line_number":44,"context_line":"  We would like to make Neutron compatible for these tools and systems"},{"line_number":45,"context_line":"  and provide a similar API."}],"source_content_type":"text/x-rst","patch_set":16,"id":"3f4b6375_73f971c6","line":42,"range":{"start_line":42,"start_character":17,"end_line":42,"end_character":29},"updated":"2017-10-23 18:51:32.000000000","message":"a port-mapping","commit_id":"ba5f904f55b657dd2ab8b7fd7f1fad7be63d3cb2"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"15c8acdbab8cea9cdffaecc8cb4a9215a0e0a630","unresolved":false,"context_lines":[{"line_number":39,"context_line":"  to reuse public IPs instead of assigning to each VM its own public"},{"line_number":40,"context_line":"  IP (floating IP)."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"* Docker support port-mapping feature and hence a big eco-system of automation"},{"line_number":43,"context_line":"  orchestration and management plugins leverage it."},{"line_number":44,"context_line":"  We would like to make Neutron compatible for these tools and systems"},{"line_number":45,"context_line":"  and provide a similar API."}],"source_content_type":"text/x-rst","patch_set":16,"id":"3f4b6375_d30825da","line":42,"range":{"start_line":42,"start_character":9,"end_line":42,"end_character":16},"updated":"2017-10-23 18:51:32.000000000","message":"supports","commit_id":"ba5f904f55b657dd2ab8b7fd7f1fad7be63d3cb2"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"50741290401c789b701b267b28494a71c35ccdee","unresolved":false,"context_lines":[{"line_number":39,"context_line":"  to reuse public IPs instead of assigning to each VM its own public"},{"line_number":40,"context_line":"  IP (floating IP)."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"* Docker support port-mapping feature and hence a big eco-system of automation"},{"line_number":43,"context_line":"  orchestration and management plugins leverage it."},{"line_number":44,"context_line":"  We would like to make Neutron compatible for these tools and systems"},{"line_number":45,"context_line":"  and provide a similar API."}],"source_content_type":"text/x-rst","patch_set":16,"id":"3f4b6375_c943d16b","line":42,"range":{"start_line":42,"start_character":17,"end_line":42,"end_character":29},"in_reply_to":"3f4b6375_73f971c6","updated":"2017-10-28 09:31:56.000000000","message":"Done","commit_id":"ba5f904f55b657dd2ab8b7fd7f1fad7be63d3cb2"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"50741290401c789b701b267b28494a71c35ccdee","unresolved":false,"context_lines":[{"line_number":39,"context_line":"  to reuse public IPs instead of assigning to each VM its own public"},{"line_number":40,"context_line":"  IP (floating IP)."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"* Docker support port-mapping feature and hence a big eco-system of automation"},{"line_number":43,"context_line":"  orchestration and management plugins leverage it."},{"line_number":44,"context_line":"  We would like to make Neutron compatible for these tools and systems"},{"line_number":45,"context_line":"  and provide a similar API."}],"source_content_type":"text/x-rst","patch_set":16,"id":"3f4b6375_a9489586","line":42,"range":{"start_line":42,"start_character":9,"end_line":42,"end_character":16},"in_reply_to":"3f4b6375_d30825da","updated":"2017-10-28 09:31:56.000000000","message":"Done","commit_id":"ba5f904f55b657dd2ab8b7fd7f1fad7be63d3cb2"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"e171482ddf9403574729a84d42fdb237ad740fa1","unresolved":false,"context_lines":[{"line_number":39,"context_line":"  to reuse public IPs instead of assigning to each VM its own public"},{"line_number":40,"context_line":"  IP (floating IP)."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"* Docker support port-mapping feature and hence a big eco-system of automation"},{"line_number":43,"context_line":"  orchestration and management plugins leverage it."},{"line_number":44,"context_line":"  We would like to make Neutron compatible for these tools and systems"},{"line_number":45,"context_line":"  and provide a similar API."}],"source_content_type":"text/x-rst","patch_set":16,"id":"3f4b6375_db06f41c","line":42,"range":{"start_line":42,"start_character":9,"end_line":42,"end_character":16},"in_reply_to":"3f4b6375_d30825da","updated":"2017-11-05 09:51:49.000000000","message":"Not necessary, Docker supports port-mapping seems fine ...","commit_id":"ba5f904f55b657dd2ab8b7fd7f1fad7be63d3cb2"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"15c8acdbab8cea9cdffaecc8cb4a9215a0e0a630","unresolved":false,"context_lines":[{"line_number":49,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"Introduce port forwarding API and implementation which can be used on"},{"line_number":52,"context_line":"virtual router external gateway interface as well as on the Floating IPs."},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"The user can define various port forwarding rules on the router containing"},{"line_number":55,"context_line":"the client port and the destination port, connected with the VM they want to expose."}],"source_content_type":"text/x-rst","patch_set":16,"id":"3f4b6375_935aad27","line":52,"range":{"start_line":52,"start_character":0,"end_line":52,"end_character":41},"updated":"2017-10-23 18:51:32.000000000","message":"See comment to L110","commit_id":"ba5f904f55b657dd2ab8b7fd7f1fad7be63d3cb2"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"85daaf2c4eb3b6b2387775ce954c1fa4ca17a3c9","unresolved":false,"context_lines":[{"line_number":49,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"Introduce port forwarding API and implementation which can be used on"},{"line_number":52,"context_line":"virtual router external gateway interface as well as on the Floating IPs."},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"The user can define various port forwarding rules on the router containing"},{"line_number":55,"context_line":"the client port and the destination port, connected with the VM they want to expose."}],"source_content_type":"text/x-rst","patch_set":16,"id":"3f4b6375_1f5ec611","line":52,"range":{"start_line":52,"start_character":60,"end_line":52,"end_character":68},"updated":"2017-11-01 21:34:22.000000000","message":"You used \u0027floating\u0027 above, should just stick to same capitalization throughout, it doesn\u0027t matter to me which one.","commit_id":"ba5f904f55b657dd2ab8b7fd7f1fad7be63d3cb2"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"8d2234e25a2983e903811d00a97ab8a1cf92add8","unresolved":false,"context_lines":[{"line_number":49,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"Introduce port forwarding API and implementation which can be used on"},{"line_number":52,"context_line":"virtual router external gateway interface as well as on the Floating IPs."},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"The user can define various port forwarding rules on the router containing"},{"line_number":55,"context_line":"the client port and the destination port, connected with the VM they want to expose."}],"source_content_type":"text/x-rst","patch_set":16,"id":"3f4b6375_939bcd64","line":52,"range":{"start_line":52,"start_character":60,"end_line":52,"end_character":68},"in_reply_to":"3f4b6375_1f5ec611","updated":"2017-11-02 12:08:09.000000000","message":"Thanks, Haley, will update in the next patchset.","commit_id":"ba5f904f55b657dd2ab8b7fd7f1fad7be63d3cb2"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"15c8acdbab8cea9cdffaecc8cb4a9215a0e0a630","unresolved":false,"context_lines":[{"line_number":51,"context_line":"Introduce port forwarding API and implementation which can be used on"},{"line_number":52,"context_line":"virtual router external gateway interface as well as on the Floating IPs."},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"The user can define various port forwarding rules on the router containing"},{"line_number":55,"context_line":"the client port and the destination port, connected with the VM they want to expose."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"An enhancement for this would be to define extra public IPs on the"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3f4b6375_f32e8141","line":54,"range":{"start_line":54,"start_character":57,"end_line":54,"end_character":63},"updated":"2017-10-23 18:51:32.000000000","message":"Likewise, see comment to L110","commit_id":"ba5f904f55b657dd2ab8b7fd7f1fad7be63d3cb2"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"15c8acdbab8cea9cdffaecc8cb4a9215a0e0a630","unresolved":false,"context_lines":[{"line_number":54,"context_line":"The user can define various port forwarding rules on the router containing"},{"line_number":55,"context_line":"the client port and the destination port, connected with the VM they want to expose."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"An enhancement for this would be to define extra public IPs on the"},{"line_number":58,"context_line":"router external gateway and perform port forwarding on them, but this will"},{"line_number":59,"context_line":"be described in more detail in the implementation spec."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"DVR[1] classifies North - South traffic into two categories:"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3f4b6375_331c1911","line":58,"range":{"start_line":57,"start_character":0,"end_line":58,"end_character":59},"updated":"2017-10-23 18:51:32.000000000","message":"Same here, see comment to L110","commit_id":"ba5f904f55b657dd2ab8b7fd7f1fad7be63d3cb2"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"85daaf2c4eb3b6b2387775ce954c1fa4ca17a3c9","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"* VMs with Floating IPs(FIP) use case - traffic flowing out will go through the"},{"line_number":69,"context_line":"  DVR Router for routing and translation and then through the FIP Namespace"},{"line_number":70,"context_line":"  on the Compute Node to the external network through its br-ex. And on the"},{"line_number":71,"context_line":"  incoming traffic, again the flow is through the br-ex on the Compute Node,"},{"line_number":72,"context_line":"  then the FIP Namespace and through the Internal Router which also handles"},{"line_number":73,"context_line":"  translation to the VM."}],"source_content_type":"text/x-rst","patch_set":16,"id":"3f4b6375_bf7d726f","line":70,"range":{"start_line":70,"start_character":58,"end_line":70,"end_character":63},"updated":"2017-11-01 21:34:22.000000000","message":"would just use \u0027external bridge\u0027 everywhere","commit_id":"ba5f904f55b657dd2ab8b7fd7f1fad7be63d3cb2"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"8d2234e25a2983e903811d00a97ab8a1cf92add8","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"* VMs with Floating IPs(FIP) use case - traffic flowing out will go through the"},{"line_number":69,"context_line":"  DVR Router for routing and translation and then through the FIP Namespace"},{"line_number":70,"context_line":"  on the Compute Node to the external network through its br-ex. And on the"},{"line_number":71,"context_line":"  incoming traffic, again the flow is through the br-ex on the Compute Node,"},{"line_number":72,"context_line":"  then the FIP Namespace and through the Internal Router which also handles"},{"line_number":73,"context_line":"  translation to the VM."}],"source_content_type":"text/x-rst","patch_set":16,"id":"3f4b6375_73f9717e","line":70,"range":{"start_line":70,"start_character":58,"end_line":70,"end_character":63},"in_reply_to":"3f4b6375_bf7d726f","updated":"2017-11-02 12:08:09.000000000","message":"Thanks, update it. :)","commit_id":"ba5f904f55b657dd2ab8b7fd7f1fad7be63d3cb2"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"15c8acdbab8cea9cdffaecc8cb4a9215a0e0a630","unresolved":false,"context_lines":[{"line_number":69,"context_line":"  DVR Router for routing and translation and then through the FIP Namespace"},{"line_number":70,"context_line":"  on the Compute Node to the external network through its br-ex. And on the"},{"line_number":71,"context_line":"  incoming traffic, again the flow is through the br-ex on the Compute Node,"},{"line_number":72,"context_line":"  then the FIP Namespace and through the Internal Router which also handles"},{"line_number":73,"context_line":"  translation to the VM."},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"DVR runs the L3Agent on Network nodes as well as on the Compute nodes."}],"source_content_type":"text/x-rst","patch_set":16,"id":"3f4b6375_54a1bc93","line":72,"range":{"start_line":72,"start_character":41,"end_line":72,"end_character":49},"updated":"2017-10-23 18:51:32.000000000","message":"DVR","commit_id":"ba5f904f55b657dd2ab8b7fd7f1fad7be63d3cb2"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"50741290401c789b701b267b28494a71c35ccdee","unresolved":false,"context_lines":[{"line_number":69,"context_line":"  DVR Router for routing and translation and then through the FIP Namespace"},{"line_number":70,"context_line":"  on the Compute Node to the external network through its br-ex. And on the"},{"line_number":71,"context_line":"  incoming traffic, again the flow is through the br-ex on the Compute Node,"},{"line_number":72,"context_line":"  then the FIP Namespace and through the Internal Router which also handles"},{"line_number":73,"context_line":"  translation to the VM."},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"DVR runs the L3Agent on Network nodes as well as on the Compute nodes."}],"source_content_type":"text/x-rst","patch_set":16,"id":"3f4b6375_89615908","line":72,"range":{"start_line":72,"start_character":41,"end_line":72,"end_character":49},"in_reply_to":"3f4b6375_54a1bc93","updated":"2017-10-28 09:31:56.000000000","message":"Done","commit_id":"ba5f904f55b657dd2ab8b7fd7f1fad7be63d3cb2"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"e171482ddf9403574729a84d42fdb237ad740fa1","unresolved":false,"context_lines":[{"line_number":69,"context_line":"  DVR Router for routing and translation and then through the FIP Namespace"},{"line_number":70,"context_line":"  on the Compute Node to the external network through its br-ex. And on the"},{"line_number":71,"context_line":"  incoming traffic, again the flow is through the br-ex on the Compute Node,"},{"line_number":72,"context_line":"  then the FIP Namespace and through the Internal Router which also handles"},{"line_number":73,"context_line":"  translation to the VM."},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"DVR runs the L3Agent on Network nodes as well as on the Compute nodes."}],"source_content_type":"text/x-rst","patch_set":16,"id":"3f4b6375_fb2e5090","line":72,"range":{"start_line":72,"start_character":41,"end_line":72,"end_character":49},"in_reply_to":"3f4b6375_54a1bc93","updated":"2017-11-05 09:51:49.000000000","message":"Done","commit_id":"ba5f904f55b657dd2ab8b7fd7f1fad7be63d3cb2"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"15c8acdbab8cea9cdffaecc8cb4a9215a0e0a630","unresolved":false,"context_lines":[{"line_number":73,"context_line":"  translation to the VM."},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"DVR runs the L3Agent on Network nodes as well as on the Compute nodes."},{"line_number":76,"context_line":"Port Forwarding rules would be installed in the SNAT Namespace in Network"},{"line_number":77,"context_line":"Node and in the IR Namespace to be applied on traffic flowing"},{"line_number":78,"context_line":"through the FIP Namespace (to ensure that there is no effect on East - West"},{"line_number":79,"context_line":"flows)."}],"source_content_type":"text/x-rst","patch_set":16,"id":"3f4b6375_74d27802","line":76,"range":{"start_line":76,"start_character":0,"end_line":76,"end_character":62},"updated":"2017-10-23 18:51:32.000000000","message":"See my comment to L110","commit_id":"ba5f904f55b657dd2ab8b7fd7f1fad7be63d3cb2"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"85daaf2c4eb3b6b2387775ce954c1fa4ca17a3c9","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"DVR runs the L3Agent on Network nodes as well as on the Compute nodes."},{"line_number":76,"context_line":"Port Forwarding rules would be installed in the SNAT Namespace in Network"},{"line_number":77,"context_line":"Node and in the IR Namespace to be applied on traffic flowing"},{"line_number":78,"context_line":"through the FIP Namespace (to ensure that there is no effect on East - West"},{"line_number":79,"context_line":"flows)."},{"line_number":80,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"3f4b6375_bfcb32a3","line":77,"range":{"start_line":77,"start_character":16,"end_line":77,"end_character":28},"updated":"2017-11-01 21:34:22.000000000","message":"What is the IR namespace?","commit_id":"ba5f904f55b657dd2ab8b7fd7f1fad7be63d3cb2"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"85daaf2c4eb3b6b2387775ce954c1fa4ca17a3c9","unresolved":false,"context_lines":[{"line_number":73,"context_line":"  translation to the VM."},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"DVR runs the L3Agent on Network nodes as well as on the Compute nodes."},{"line_number":76,"context_line":"Port Forwarding rules would be installed in the SNAT Namespace in Network"},{"line_number":77,"context_line":"Node and in the IR Namespace to be applied on traffic flowing"},{"line_number":78,"context_line":"through the FIP Namespace (to ensure that there is no effect on East - West"},{"line_number":79,"context_line":"flows)."},{"line_number":80,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"3f4b6375_7fdc9a73","line":77,"range":{"start_line":76,"start_character":63,"end_line":77,"end_character":4},"updated":"2017-11-01 21:34:22.000000000","message":"s/on Network Nodes","commit_id":"ba5f904f55b657dd2ab8b7fd7f1fad7be63d3cb2"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"8d2234e25a2983e903811d00a97ab8a1cf92add8","unresolved":false,"context_lines":[{"line_number":73,"context_line":"  translation to the VM."},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"DVR runs the L3Agent on Network nodes as well as on the Compute nodes."},{"line_number":76,"context_line":"Port Forwarding rules would be installed in the SNAT Namespace in Network"},{"line_number":77,"context_line":"Node and in the IR Namespace to be applied on traffic flowing"},{"line_number":78,"context_line":"through the FIP Namespace (to ensure that there is no effect on East - West"},{"line_number":79,"context_line":"flows)."},{"line_number":80,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"3f4b6375_d364a54b","line":77,"range":{"start_line":76,"start_character":63,"end_line":77,"end_character":4},"in_reply_to":"3f4b6375_7fdc9a73","updated":"2017-11-02 12:08:09.000000000","message":"Done","commit_id":"ba5f904f55b657dd2ab8b7fd7f1fad7be63d3cb2"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"8d2234e25a2983e903811d00a97ab8a1cf92add8","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"DVR runs the L3Agent on Network nodes as well as on the Compute nodes."},{"line_number":76,"context_line":"Port Forwarding rules would be installed in the SNAT Namespace in Network"},{"line_number":77,"context_line":"Node and in the IR Namespace to be applied on traffic flowing"},{"line_number":78,"context_line":"through the FIP Namespace (to ensure that there is no effect on East - West"},{"line_number":79,"context_line":"flows)."},{"line_number":80,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"3f4b6375_eed21a34","line":77,"range":{"start_line":77,"start_character":16,"end_line":77,"end_character":28},"in_reply_to":"3f4b6375_bfcb32a3","updated":"2017-11-02 12:08:09.000000000","message":"This is the internal Router namespace on the compute node. Also, could i just make this spec focus on the floating IP port forwarding? Because the router gateway case need more discussion and will be done in the other spec. So I want to remove the paragraphs which related with this case, including this paragraph","commit_id":"ba5f904f55b657dd2ab8b7fd7f1fad7be63d3cb2"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"15c8acdbab8cea9cdffaecc8cb4a9215a0e0a630","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"DVR runs the L3Agent on Network nodes as well as on the Compute nodes."},{"line_number":76,"context_line":"Port Forwarding rules would be installed in the SNAT Namespace in Network"},{"line_number":77,"context_line":"Node and in the IR Namespace to be applied on traffic flowing"},{"line_number":78,"context_line":"through the FIP Namespace (to ensure that there is no effect on East - West"},{"line_number":79,"context_line":"flows)."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"The port forwarding entry is NATing a specific floating ip:port to a specific"},{"line_number":82,"context_line":"Neutron port (and a private IP that is attached to this port)."}],"source_content_type":"text/x-rst","patch_set":16,"id":"3f4b6375_9437344e","line":79,"range":{"start_line":77,"start_character":16,"end_line":79,"end_character":7},"updated":"2017-10-23 18:51:32.000000000","message":"Will the rules applied here be for the floating ips? In the spec that provided the basis for this there seems to be reluctance to go this way (see comment here: https://review.openstack.org/#/c/224727/2/specs/mitaka/port_forwarding.rst@63) Have we concluded this is a viable approach?","commit_id":"ba5f904f55b657dd2ab8b7fd7f1fad7be63d3cb2"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"816f29ee7fafacd1028223921eeb57fef4823135","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"DVR runs the L3Agent on Network nodes as well as on the Compute nodes."},{"line_number":76,"context_line":"Port Forwarding rules would be installed in the SNAT Namespace in Network"},{"line_number":77,"context_line":"Node and in the IR Namespace to be applied on traffic flowing"},{"line_number":78,"context_line":"through the FIP Namespace (to ensure that there is no effect on East - West"},{"line_number":79,"context_line":"flows)."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"The port forwarding entry is NATing a specific floating ip:port to a specific"},{"line_number":82,"context_line":"Neutron port (and a private IP that is attached to this port)."}],"source_content_type":"text/x-rst","patch_set":16,"id":"3f4b6375_df0fe02b","line":79,"range":{"start_line":77,"start_character":16,"end_line":79,"end_character":7},"in_reply_to":"3f4b6375_9437344e","updated":"2017-11-08 04:24:35.000000000","message":"Yeah, this is like a centric DNAT feature, distributed DNAT can not use it. But for DVR use cases, I think if some vm port associated with port forwarding rules based on floating IPs, we need also install the rule in the network node.","commit_id":"ba5f904f55b657dd2ab8b7fd7f1fad7be63d3cb2"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"85daaf2c4eb3b6b2387775ce954c1fa4ca17a3c9","unresolved":false,"context_lines":[{"line_number":78,"context_line":"through the FIP Namespace (to ensure that there is no effect on East - West"},{"line_number":79,"context_line":"flows)."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"The port forwarding entry is NATing a specific floating ip:port to a specific"},{"line_number":82,"context_line":"Neutron port (and a private IP that is attached to this port)."},{"line_number":83,"context_line":"If the Neutron port is deleted, the port forwarding entries that match this port are"},{"line_number":84,"context_line":"also deleted."}],"source_content_type":"text/x-rst","patch_set":16,"id":"3f4b6375_5fc0be7c","line":81,"range":{"start_line":81,"start_character":29,"end_line":81,"end_character":35},"updated":"2017-11-01 21:34:22.000000000","message":"s/NATted ?","commit_id":"ba5f904f55b657dd2ab8b7fd7f1fad7be63d3cb2"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"8d2234e25a2983e903811d00a97ab8a1cf92add8","unresolved":false,"context_lines":[{"line_number":78,"context_line":"through the FIP Namespace (to ensure that there is no effect on East - West"},{"line_number":79,"context_line":"flows)."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"The port forwarding entry is NATing a specific floating ip:port to a specific"},{"line_number":82,"context_line":"Neutron port (and a private IP that is attached to this port)."},{"line_number":83,"context_line":"If the Neutron port is deleted, the port forwarding entries that match this port are"},{"line_number":84,"context_line":"also deleted."}],"source_content_type":"text/x-rst","patch_set":16,"id":"3f4b6375_6ee62a19","line":81,"range":{"start_line":81,"start_character":29,"end_line":81,"end_character":35},"in_reply_to":"3f4b6375_5fc0be7c","updated":"2017-11-02 12:08:09.000000000","message":"Done","commit_id":"ba5f904f55b657dd2ab8b7fd7f1fad7be63d3cb2"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"85daaf2c4eb3b6b2387775ce954c1fa4ca17a3c9","unresolved":false,"context_lines":[{"line_number":83,"context_line":"If the Neutron port is deleted, the port forwarding entries that match this port are"},{"line_number":84,"context_line":"also deleted."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"Similar to floating ip, if port forwaring is configured on a specific router,"},{"line_number":87,"context_line":"the external gateway can not be removed and also the router itself"},{"line_number":88,"context_line":"cannot be deleted."},{"line_number":89,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"3f4b6375_bf40d208","line":86,"range":{"start_line":86,"start_character":20,"end_line":86,"end_character":22},"updated":"2017-11-01 21:34:22.000000000","message":"s/IP","commit_id":"ba5f904f55b657dd2ab8b7fd7f1fad7be63d3cb2"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"8d2234e25a2983e903811d00a97ab8a1cf92add8","unresolved":false,"context_lines":[{"line_number":83,"context_line":"If the Neutron port is deleted, the port forwarding entries that match this port are"},{"line_number":84,"context_line":"also deleted."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"Similar to floating ip, if port forwaring is configured on a specific router,"},{"line_number":87,"context_line":"the external gateway can not be removed and also the router itself"},{"line_number":88,"context_line":"cannot be deleted."},{"line_number":89,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"3f4b6375_0e72164a","line":86,"range":{"start_line":86,"start_character":20,"end_line":86,"end_character":22},"in_reply_to":"3f4b6375_bf40d208","updated":"2017-11-02 12:08:09.000000000","message":"Done","commit_id":"ba5f904f55b657dd2ab8b7fd7f1fad7be63d3cb2"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"15c8acdbab8cea9cdffaecc8cb4a9215a0e0a630","unresolved":false,"context_lines":[{"line_number":84,"context_line":"also deleted."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"Similar to floating ip, if port forwaring is configured on a specific router,"},{"line_number":87,"context_line":"the external gateway can not be removed and also the router itself"},{"line_number":88,"context_line":"cannot be deleted."},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"Data Model Impact"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3f4b6375_344d20c4","line":87,"range":{"start_line":87,"start_character":1,"end_line":87,"end_character":39},"updated":"2017-10-23 18:51:32.000000000","message":"See comment to L110","commit_id":"ba5f904f55b657dd2ab8b7fd7f1fad7be63d3cb2"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"15c8acdbab8cea9cdffaecc8cb4a9215a0e0a630","unresolved":false,"context_lines":[{"line_number":93,"context_line":"The following new table is added as part of the port forwarding feature::"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    CREATE TABLE port_forwarding ("},{"line_number":96,"context_line":"        id CHAR(36) NOT NULL PRI KEY,"},{"line_number":97,"context_line":"        floating_ip_id VARCHAR(255) NOT NULL FK,"},{"line_number":98,"context_line":"        external_port INT NOT NULL,"},{"line_number":99,"context_line":"        internal_ip CHAR(15) NOT NULL,"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3f4b6375_d3d5c544","line":96,"updated":"2017-10-23 18:51:32.000000000","message":"Do we need an id in this table?","commit_id":"ba5f904f55b657dd2ab8b7fd7f1fad7be63d3cb2"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"8d2234e25a2983e903811d00a97ab8a1cf92add8","unresolved":false,"context_lines":[{"line_number":93,"context_line":"The following new table is added as part of the port forwarding feature::"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    CREATE TABLE port_forwarding ("},{"line_number":96,"context_line":"        id CHAR(36) NOT NULL PRI KEY,"},{"line_number":97,"context_line":"        floating_ip_id VARCHAR(255) NOT NULL FK,"},{"line_number":98,"context_line":"        external_port INT NOT NULL,"},{"line_number":99,"context_line":"        internal_ip CHAR(15) NOT NULL,"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3f4b6375_2ee02b26","line":96,"in_reply_to":"3f4b6375_d3d5c544","updated":"2017-11-02 12:08:09.000000000","message":"I think in this case, the \u0027id\u0027 is not necessary now. But in the future, I\u0027m not sure. What I concerned is whether there is a requirements in the future that user want to query the port_forwarding records, also sort, list staff.","commit_id":"ba5f904f55b657dd2ab8b7fd7f1fad7be63d3cb2"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"15c8acdbab8cea9cdffaecc8cb4a9215a0e0a630","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        protocol CHAR(4) NOT NULL,"},{"line_number":102,"context_line":"    );"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"Optional check can be to maintain a Unique constraint between Router and External Port,"},{"line_number":105,"context_line":"also the VM port and Internal Port."},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"REST API Impact"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3f4b6375_54d9bcf0","line":104,"range":{"start_line":104,"start_character":54,"end_line":104,"end_character":68},"updated":"2017-10-23 18:51:32.000000000","message":"We don\u0027t have router in this proposed table","commit_id":"ba5f904f55b657dd2ab8b7fd7f1fad7be63d3cb2"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"15c8acdbab8cea9cdffaecc8cb4a9215a0e0a630","unresolved":false,"context_lines":[{"line_number":107,"context_line":"REST API Impact"},{"line_number":108,"context_line":"---------------"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"The idea is to extend the Floating IP Rest API with a new extension ``port_forwarding``"},{"line_number":111,"context_line":"with the below defined attributes."},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"+----------+-------+---------+---------+------------+--------------+"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3f4b6375_533795e4","line":110,"range":{"start_line":110,"start_character":0,"end_line":110,"end_character":85},"updated":"2017-10-23 18:51:32.000000000","message":"I am a little confused here. In L51 above, it is stated that the proposed change is \"Introduce port forwarding API and implementation which can be used on\nvirtual router external gateway interface...\". However, the proposal in this section is to extend the floating ips API with new attributes. Should the spec be updated to reflect the fact the proposed API is going to be floating ip centric? This is in contrast to spec https://review.openstack.org/#/c/224727, from which this one borrows a heavily, that proposes to focus on the external gateway interface and therefore revolves around the router","commit_id":"ba5f904f55b657dd2ab8b7fd7f1fad7be63d3cb2"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"15c8acdbab8cea9cdffaecc8cb4a9215a0e0a630","unresolved":false,"context_lines":[{"line_number":131,"context_line":".. code-block:: python"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    {\u0027floatingips\u0027: {"},{"line_number":134,"context_line":"        \u0027external_port\u0027: { \u0027allow_post\u0027:True, \u0027allow_put\u0027: True,"},{"line_number":135,"context_line":"                           \u0027validate\u0027: {\u0027type:int\u0027:None},"},{"line_number":136,"context_line":"                           \u0027is_visible\u0027: True,"},{"line_number":137,"context_line":"                         },"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3f4b6375_f729ca89","line":134,"range":{"start_line":134,"start_character":47,"end_line":134,"end_character":64},"updated":"2017-10-23 18:51:32.000000000","message":"PUT is used in the case of floating ips for port association: https://developer.openstack.org/api-ref/network/v2/index.html#floating-ips-floatingips. neutron python client and OSC make the same assumption. So maybe these new attributes shouldn\u0027t be allowed in a put","commit_id":"ba5f904f55b657dd2ab8b7fd7f1fad7be63d3cb2"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"816f29ee7fafacd1028223921eeb57fef4823135","unresolved":false,"context_lines":[{"line_number":131,"context_line":".. code-block:: python"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    {\u0027floatingips\u0027: {"},{"line_number":134,"context_line":"        \u0027external_port\u0027: { \u0027allow_post\u0027:True, \u0027allow_put\u0027: True,"},{"line_number":135,"context_line":"                           \u0027validate\u0027: {\u0027type:int\u0027:None},"},{"line_number":136,"context_line":"                           \u0027is_visible\u0027: True,"},{"line_number":137,"context_line":"                         },"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3f4b6375_ff129c57","line":134,"range":{"start_line":134,"start_character":47,"end_line":134,"end_character":64},"in_reply_to":"3f4b6375_f729ca89","updated":"2017-11-08 04:24:35.000000000","message":"Hi Miguel, could we","commit_id":"ba5f904f55b657dd2ab8b7fd7f1fad7be63d3cb2"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"8d2234e25a2983e903811d00a97ab8a1cf92add8","unresolved":false,"context_lines":[{"line_number":131,"context_line":".. code-block:: python"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    {\u0027floatingips\u0027: {"},{"line_number":134,"context_line":"        \u0027external_port\u0027: { \u0027allow_post\u0027:True, \u0027allow_put\u0027: True,"},{"line_number":135,"context_line":"                           \u0027validate\u0027: {\u0027type:int\u0027:None},"},{"line_number":136,"context_line":"                           \u0027is_visible\u0027: True,"},{"line_number":137,"context_line":"                         },"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3f4b6375_5b60c4cf","line":134,"range":{"start_line":134,"start_character":47,"end_line":134,"end_character":64},"in_reply_to":"3f4b6375_f729ca89","updated":"2017-11-02 12:08:09.000000000","message":"I think we can analysis the request body, if there are the related fields about port forwarding, we can process it by port forwarding logic. So if can not do that, I don\u0027t think another way , except introduce a new resource.","commit_id":"ba5f904f55b657dd2ab8b7fd7f1fad7be63d3cb2"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"15c8acdbab8cea9cdffaecc8cb4a9215a0e0a630","unresolved":false,"context_lines":[{"line_number":135,"context_line":"                           \u0027validate\u0027: {\u0027type:int\u0027:None},"},{"line_number":136,"context_line":"                           \u0027is_visible\u0027: True,"},{"line_number":137,"context_line":"                         },"},{"line_number":138,"context_line":"        \u0027internal_port\u0027: { \u0027allow_post\u0027:True, \u0027allow_put\u0027: True,"},{"line_number":139,"context_line":"                           \u0027validate\u0027: {\u0027type:int\u0027:None},"},{"line_number":140,"context_line":"                           \u0027is_visible\u0027: True,"},{"line_number":141,"context_line":"                         },"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3f4b6375_573adecb","line":138,"range":{"start_line":138,"start_character":47,"end_line":138,"end_character":64},"updated":"2017-10-23 18:51:32.000000000","message":"See comment to L134","commit_id":"ba5f904f55b657dd2ab8b7fd7f1fad7be63d3cb2"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"15c8acdbab8cea9cdffaecc8cb4a9215a0e0a630","unresolved":false,"context_lines":[{"line_number":139,"context_line":"                           \u0027validate\u0027: {\u0027type:int\u0027:None},"},{"line_number":140,"context_line":"                           \u0027is_visible\u0027: True,"},{"line_number":141,"context_line":"                         },"},{"line_number":142,"context_line":"        \u0027protocol\u0027: { \u0027allow_post\u0027:True, \u0027allow_put\u0027: True,"},{"line_number":143,"context_line":"                      \u0027validate\u0027: {"},{"line_number":144,"context_line":"                          \u0027type:values\u0027: neutron_lib.constants.IPTABLES_PROTOCOL_MAP},"},{"line_number":145,"context_line":"                      \u0027is_visible\u0027: True,"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3f4b6375_97597636","line":142,"range":{"start_line":142,"start_character":42,"end_line":142,"end_character":59},"updated":"2017-10-23 18:51:32.000000000","message":"See comment to L134","commit_id":"ba5f904f55b657dd2ab8b7fd7f1fad7be63d3cb2"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"15c8acdbab8cea9cdffaecc8cb4a9215a0e0a630","unresolved":false,"context_lines":[{"line_number":155,"context_line":""},{"line_number":156,"context_line":"Security Impact"},{"line_number":157,"context_line":"---------------"},{"line_number":158,"context_line":"Port forwarding is similar in nature to centralized DNAT,"},{"line_number":159,"context_line":"so should not pose additional security implications."},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"Notifications Impact"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3f4b6375_f7778a9f","line":158,"range":{"start_line":158,"start_character":40,"end_line":158,"end_character":56},"updated":"2017-10-23 18:51:32.000000000","message":"I this still true given that DVR is proposed to be supported","commit_id":"ba5f904f55b657dd2ab8b7fd7f1fad7be63d3cb2"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"8d2234e25a2983e903811d00a97ab8a1cf92add8","unresolved":false,"context_lines":[{"line_number":155,"context_line":""},{"line_number":156,"context_line":"Security Impact"},{"line_number":157,"context_line":"---------------"},{"line_number":158,"context_line":"Port forwarding is similar in nature to centralized DNAT,"},{"line_number":159,"context_line":"so should not pose additional security implications."},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"Notifications Impact"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3f4b6375_f74d4a72","line":158,"range":{"start_line":158,"start_character":40,"end_line":158,"end_character":56},"in_reply_to":"3f4b6375_f7778a9f","updated":"2017-11-02 12:08:09.000000000","message":"I thought a way to support DVR. But I think it may not be appropriate, and I will introduce it in the next patch. Need kind suggestion and review.","commit_id":"ba5f904f55b657dd2ab8b7fd7f1fad7be63d3cb2"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"85daaf2c4eb3b6b2387775ce954c1fa4ca17a3c9","unresolved":false,"context_lines":[{"line_number":156,"context_line":"Security Impact"},{"line_number":157,"context_line":"---------------"},{"line_number":158,"context_line":"Port forwarding is similar in nature to centralized DNAT,"},{"line_number":159,"context_line":"so should not pose additional security implications."},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"Notifications Impact"},{"line_number":162,"context_line":"--------------------"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3f4b6375_7ff81ac3","line":159,"updated":"2017-11-01 21:34:22.000000000","message":"I know it\u0027s obvious, but since we\u0027re forwarding packets to a fixed_ip:port, if there is no security group allowing ingress this is all a waste.","commit_id":"ba5f904f55b657dd2ab8b7fd7f1fad7be63d3cb2"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"8d2234e25a2983e903811d00a97ab8a1cf92add8","unresolved":false,"context_lines":[{"line_number":156,"context_line":"Security Impact"},{"line_number":157,"context_line":"---------------"},{"line_number":158,"context_line":"Port forwarding is similar in nature to centralized DNAT,"},{"line_number":159,"context_line":"so should not pose additional security implications."},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"Notifications Impact"},{"line_number":162,"context_line":"--------------------"}],"source_content_type":"text/x-rst","patch_set":16,"id":"3f4b6375_f728aa86","line":159,"in_reply_to":"3f4b6375_7ff81ac3","updated":"2017-11-02 12:08:09.000000000","message":"Yeah, it\u0027s correct. Thank you.","commit_id":"ba5f904f55b657dd2ab8b7fd7f1fad7be63d3cb2"},{"author":{"_account_id":14352,"name":"Antoni Segura Puimedon","email":"celebdor@gmail.com","username":"toni"},"change_message_id":"9a95cabd06fd6084be5e273a6281cb39311dc115","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        internal_port INT NOT NULL,"},{"line_number":108,"context_line":"        protocol CHAR(4) NOT NULL,"},{"line_number":109,"context_line":"        CONSTRAINT floating_ip_id_external_port_constraint UNIQUE (floating_ip_id, external_port),"},{"line_number":110,"context_line":"        CONSTRAINT internal_port_id_internal_port_constraint UNIQUE (internal_port_id, internal_port)"},{"line_number":111,"context_line":"    );"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"3f4b6375_8e06d885","line":110,"updated":"2017-11-03 11:38:59.000000000","message":"Why should the internal_port_id, internal_port be unique? Is it because we are not interested in having multiple FIP+port pointing to a single internal+port?","commit_id":"54792bb1299cddbd2ae13175ef2357b679ad1aea"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"816f29ee7fafacd1028223921eeb57fef4823135","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        internal_port INT NOT NULL,"},{"line_number":108,"context_line":"        protocol CHAR(4) NOT NULL,"},{"line_number":109,"context_line":"        CONSTRAINT floating_ip_id_external_port_constraint UNIQUE (floating_ip_id, external_port),"},{"line_number":110,"context_line":"        CONSTRAINT internal_port_id_internal_port_constraint UNIQUE (internal_port_id, internal_port)"},{"line_number":111,"context_line":"    );"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"3f4b6375_6d3b549b","line":110,"in_reply_to":"3f4b6375_1607841a","updated":"2017-11-08 04:24:35.000000000","message":"Good suggestion. Will update","commit_id":"54792bb1299cddbd2ae13175ef2357b679ad1aea"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"e171482ddf9403574729a84d42fdb237ad740fa1","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        internal_port INT NOT NULL,"},{"line_number":108,"context_line":"        protocol CHAR(4) NOT NULL,"},{"line_number":109,"context_line":"        CONSTRAINT floating_ip_id_external_port_constraint UNIQUE (floating_ip_id, external_port),"},{"line_number":110,"context_line":"        CONSTRAINT internal_port_id_internal_port_constraint UNIQUE (internal_port_id, internal_port)"},{"line_number":111,"context_line":"    );"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"3f4b6375_1607841a","line":110,"in_reply_to":"3f4b6375_8e06d885","updated":"2017-11-05 09:51:49.000000000","message":"Internal Port ID is the Neutron\u0027s port ( Virtual NIC ) and it has the fixed IP address\nInternal Port is the port with which communication occurs.\n\nThe (IP:Port number ) which creates a socket needs to be a unique value here. So yes, multiple FIPs wont be directing to a single Socket, atleast for now.\n@Zhaobo: I think the term \u0027socket\u0027 would be better here to reduce confusion. Can we remove the Internal Port and Internal IP address to create a single VarChar for Socket ?","commit_id":"54792bb1299cddbd2ae13175ef2357b679ad1aea"},{"author":{"_account_id":14352,"name":"Antoni Segura Puimedon","email":"celebdor@gmail.com","username":"toni"},"change_message_id":"9a95cabd06fd6084be5e273a6281cb39311dc115","unresolved":false,"context_lines":[{"line_number":129,"context_line":"|          |       |         |         |            |              |"},{"line_number":130,"context_line":"+----------+-------+---------+---------+------------+--------------+"},{"line_number":131,"context_line":"|protocol  |string |RW, all  | \u0027tcp\u0027   | \u0027tcp\u0027 or   |              |"},{"line_number":132,"context_line":"|          |       |         |         | \u0027udp\u0027      |              |"},{"line_number":133,"context_line":"|          |       |         |         |            |              |"},{"line_number":134,"context_line":"+----------+-------+---------+---------+------------+--------------+"},{"line_number":135,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"3f4b6375_ce44d0ba","line":132,"updated":"2017-11-03 11:38:59.000000000","message":"It seems to me like this would not allow to have a mapping for both tcp and udp. Not saying that is wrong. Just pointing it out.","commit_id":"54792bb1299cddbd2ae13175ef2357b679ad1aea"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"e171482ddf9403574729a84d42fdb237ad740fa1","unresolved":false,"context_lines":[{"line_number":129,"context_line":"|          |       |         |         |            |              |"},{"line_number":130,"context_line":"+----------+-------+---------+---------+------------+--------------+"},{"line_number":131,"context_line":"|protocol  |string |RW, all  | \u0027tcp\u0027   | \u0027tcp\u0027 or   |              |"},{"line_number":132,"context_line":"|          |       |         |         | \u0027udp\u0027      |              |"},{"line_number":133,"context_line":"|          |       |         |         |            |              |"},{"line_number":134,"context_line":"+----------+-------+---------+---------+------------+--------------+"},{"line_number":135,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"3f4b6375_d6144c46","line":132,"in_reply_to":"3f4b6375_ce44d0ba","updated":"2017-11-05 09:51:49.000000000","message":"each protocol would be treated differently, so that the same IP:Port Socket doesnt handle 2 different protocols.","commit_id":"54792bb1299cddbd2ae13175ef2357b679ad1aea"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"816f29ee7fafacd1028223921eeb57fef4823135","unresolved":false,"context_lines":[{"line_number":129,"context_line":"|          |       |         |         |            |              |"},{"line_number":130,"context_line":"+----------+-------+---------+---------+------------+--------------+"},{"line_number":131,"context_line":"|protocol  |string |RW, all  | \u0027tcp\u0027   | \u0027tcp\u0027 or   |              |"},{"line_number":132,"context_line":"|          |       |         |         | \u0027udp\u0027      |              |"},{"line_number":133,"context_line":"|          |       |         |         |            |              |"},{"line_number":134,"context_line":"+----------+-------+---------+---------+------------+--------------+"},{"line_number":135,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"3f4b6375_cd6008d2","line":132,"in_reply_to":"3f4b6375_d6144c46","updated":"2017-11-08 04:24:35.000000000","message":"As reedip said, :).","commit_id":"54792bb1299cddbd2ae13175ef2357b679ad1aea"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"55a4385becb688179d1690abb06da41c1304028c","unresolved":false,"context_lines":[{"line_number":18,"context_line":"IPs they can assign."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Common use case for this feature is a client requesting a specific service, where"},{"line_number":21,"context_line":"the serving platform (PaaS, SaaS) allocates a VM to run the service and then allocate"},{"line_number":22,"context_line":"a client port to access this service."},{"line_number":23,"context_line":"This means that various clients use the same public IP, but the TCP/UDP destination"},{"line_number":24,"context_line":"port is used to distinguish between the end point VMs."}],"source_content_type":"text/x-rst","patch_set":19,"id":"1f485f77_285495fe","line":21,"range":{"start_line":21,"start_character":77,"end_line":21,"end_character":85},"updated":"2017-11-17 00:02:59.000000000","message":"allocates","commit_id":"49c687c62810e9df58630a114a46064cc1d291f7"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"55a4385becb688179d1690abb06da41c1304028c","unresolved":false,"context_lines":[{"line_number":62,"context_line":"For the Generic Router deployment, the port forwarding rule must be installed in"},{"line_number":63,"context_line":"Internal Router namespace and perform the simple forwarding functions."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"DVR[1] classifies North - South traffic into one categories:"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"* VMs with Floating IPs(FIP) use case - traffic flowing out will go through the"},{"line_number":68,"context_line":"  DVR Router for routing and translation and then through the FIP Namespace"},{"line_number":69,"context_line":"  on the Compute Node to the external network through its external bridge. And"},{"line_number":70,"context_line":"  on the incoming traffic, again the flow is through the external bridge on the"},{"line_number":71,"context_line":"  Compute Node, then the FIP Namespace and through the DVR Router which also"},{"line_number":72,"context_line":"  handles translation to the VM."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"  If VMs locate on the same compute node, it is enough to install the port forwarding"},{"line_number":75,"context_line":"  rule on the compute node, server just send the router_update to the single dst node."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"  TBD DVR case solution:"},{"line_number":78,"context_line":"  But for 2 VMs locate on the different compute nodes, associated with the same"},{"line_number":79,"context_line":"  Public IP(Floating IP) and different external ports. According to the current"},{"line_number":80,"context_line":"  DVR implementation, there must be the same IP in both of the FIP namaspace on"},{"line_number":81,"context_line":"  the compute nodes. This must break the outside Lay 2 traffic, because the"},{"line_number":82,"context_line":"  different MAC Addresses of compute nodes. So the external physic Router need"},{"line_number":83,"context_line":"  to process the 2 VMs traffics in different way, like marking the traffic in"},{"line_number":84,"context_line":"  the different Public IPs and protocol ports from the outside, then routing the"},{"line_number":85,"context_line":"  traffic to the correct compute node. That means we need the same count of"},{"line_number":86,"context_line":"  routing tables with compute nodes. For a large scaled system, it is inefficient."},{"line_number":87,"context_line":"  So this feature is most like a centralized DNAT staff, need to find a way to"},{"line_number":88,"context_line":"  support DVR case in another good way."},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"The port forwarding entry is NATted a specific Floating IP:Port to a specific"},{"line_number":91,"context_line":"Neutron port (and a private IP that is attached to this port)."}],"source_content_type":"text/x-rst","patch_set":19,"id":"1f485f77_7e5c5fec","line":88,"range":{"start_line":65,"start_character":0,"end_line":88,"end_character":39},"updated":"2017-11-17 00:02:59.000000000","message":"Let\u0027s agree on a basic assumption. To be a general solution, a floating IP that we use for port forwarding must be able to forward traffic to ports associated with ports / VMs that reside in any compute node in the deployment. As a consequence, such a floating ip must be centralized, and that means it has to reside in a network node. Based on this, we have two implementation possibilities:\n\n1) For deployments that only use legacy routers, all the floating IPs are already centralized in the networks nodes\n\n2) For deployments that use DVR, we can use the functionality that was introduced recently to centralize floating IPs: https://review.openstack.org/#/c/485333/20\n\nThese two implementation alternatives is what needs to be explained in this section","commit_id":"49c687c62810e9df58630a114a46064cc1d291f7"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"47e87a5889cd8bfeba3150d49a3030f9a3aafec9","unresolved":false,"context_lines":[{"line_number":62,"context_line":"For the Generic Router deployment, the port forwarding rule must be installed in"},{"line_number":63,"context_line":"Internal Router namespace and perform the simple forwarding functions."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"DVR[1] classifies North - South traffic into one categories:"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"* VMs with Floating IPs(FIP) use case - traffic flowing out will go through the"},{"line_number":68,"context_line":"  DVR Router for routing and translation and then through the FIP Namespace"},{"line_number":69,"context_line":"  on the Compute Node to the external network through its external bridge. And"},{"line_number":70,"context_line":"  on the incoming traffic, again the flow is through the external bridge on the"},{"line_number":71,"context_line":"  Compute Node, then the FIP Namespace and through the DVR Router which also"},{"line_number":72,"context_line":"  handles translation to the VM."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"  If VMs locate on the same compute node, it is enough to install the port forwarding"},{"line_number":75,"context_line":"  rule on the compute node, server just send the router_update to the single dst node."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"  TBD DVR case solution:"},{"line_number":78,"context_line":"  But for 2 VMs locate on the different compute nodes, associated with the same"},{"line_number":79,"context_line":"  Public IP(Floating IP) and different external ports. According to the current"},{"line_number":80,"context_line":"  DVR implementation, there must be the same IP in both of the FIP namaspace on"},{"line_number":81,"context_line":"  the compute nodes. This must break the outside Lay 2 traffic, because the"},{"line_number":82,"context_line":"  different MAC Addresses of compute nodes. So the external physic Router need"},{"line_number":83,"context_line":"  to process the 2 VMs traffics in different way, like marking the traffic in"},{"line_number":84,"context_line":"  the different Public IPs and protocol ports from the outside, then routing the"},{"line_number":85,"context_line":"  traffic to the correct compute node. That means we need the same count of"},{"line_number":86,"context_line":"  routing tables with compute nodes. For a large scaled system, it is inefficient."},{"line_number":87,"context_line":"  So this feature is most like a centralized DNAT staff, need to find a way to"},{"line_number":88,"context_line":"  support DVR case in another good way."},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"The port forwarding entry is NATted a specific Floating IP:Port to a specific"},{"line_number":91,"context_line":"Neutron port (and a private IP that is attached to this port)."}],"source_content_type":"text/x-rst","patch_set":19,"id":"1f485f77_e8441449","line":88,"range":{"start_line":65,"start_character":0,"end_line":88,"end_character":39},"in_reply_to":"1f485f77_7e5c5fec","updated":"2017-11-17 02:54:42.000000000","message":"Ok, that clears a lot of stuff up.","commit_id":"49c687c62810e9df58630a114a46064cc1d291f7"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"55a4385becb688179d1690abb06da41c1304028c","unresolved":false,"context_lines":[{"line_number":101,"context_line":"    CREATE TABLE port_forwarding ("},{"line_number":102,"context_line":"        id CHAR(36) NOT NULL PRI KEY,"},{"line_number":103,"context_line":"        floating_ip_id VARCHAR(36) NOT NULL,"},{"line_number":104,"context_line":"        external_port INT NOT NULL,"},{"line_number":105,"context_line":"        internal_port_id VARCHAR(36) NOT NULL FOREIGN KEY,"},{"line_number":106,"context_line":"        protocol CHAR(4) NOT NULL,"},{"line_number":107,"context_line":"        socket VARCHAR(20) NOT NULL,"}],"source_content_type":"text/x-rst","patch_set":19,"id":"1f485f77_1ec32b3a","line":104,"range":{"start_line":104,"start_character":8,"end_line":104,"end_character":21},"updated":"2017-11-17 00:02:59.000000000","message":"Why not call this external_tcp_udp_port?","commit_id":"49c687c62810e9df58630a114a46064cc1d291f7"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"47e87a5889cd8bfeba3150d49a3030f9a3aafec9","unresolved":false,"context_lines":[{"line_number":101,"context_line":"    CREATE TABLE port_forwarding ("},{"line_number":102,"context_line":"        id CHAR(36) NOT NULL PRI KEY,"},{"line_number":103,"context_line":"        floating_ip_id VARCHAR(36) NOT NULL,"},{"line_number":104,"context_line":"        external_port INT NOT NULL,"},{"line_number":105,"context_line":"        internal_port_id VARCHAR(36) NOT NULL FOREIGN KEY,"},{"line_number":106,"context_line":"        protocol CHAR(4) NOT NULL,"},{"line_number":107,"context_line":"        socket VARCHAR(20) NOT NULL,"}],"source_content_type":"text/x-rst","patch_set":19,"id":"1f485f77_c87718a0","line":104,"range":{"start_line":104,"start_character":8,"end_line":104,"end_character":21},"in_reply_to":"1f485f77_1ec32b3a","updated":"2017-11-17 02:54:42.000000000","message":"too long a name....\nanything wrong with external_port?\nOr does it seem a tad bit confusing because its named as a port","commit_id":"49c687c62810e9df58630a114a46064cc1d291f7"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"55a4385becb688179d1690abb06da41c1304028c","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        id CHAR(36) NOT NULL PRI KEY,"},{"line_number":103,"context_line":"        floating_ip_id VARCHAR(36) NOT NULL,"},{"line_number":104,"context_line":"        external_port INT NOT NULL,"},{"line_number":105,"context_line":"        internal_port_id VARCHAR(36) NOT NULL FOREIGN KEY,"},{"line_number":106,"context_line":"        protocol CHAR(4) NOT NULL,"},{"line_number":107,"context_line":"        socket VARCHAR(20) NOT NULL,"},{"line_number":108,"context_line":"        CONSTRAINT floating_ip_id_external_port_constraint UNIQUE (floating_ip_id, external_port),"}],"source_content_type":"text/x-rst","patch_set":19,"id":"1f485f77_9e96fb3d","line":105,"range":{"start_line":105,"start_character":8,"end_line":105,"end_character":58},"updated":"2017-11-17 00:02:59.000000000","message":"Is this the internal neutron port ID? Let\u0027s call it internal_neutron_port_id","commit_id":"49c687c62810e9df58630a114a46064cc1d291f7"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"47e87a5889cd8bfeba3150d49a3030f9a3aafec9","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        id CHAR(36) NOT NULL PRI KEY,"},{"line_number":103,"context_line":"        floating_ip_id VARCHAR(36) NOT NULL,"},{"line_number":104,"context_line":"        external_port INT NOT NULL,"},{"line_number":105,"context_line":"        internal_port_id VARCHAR(36) NOT NULL FOREIGN KEY,"},{"line_number":106,"context_line":"        protocol CHAR(4) NOT NULL,"},{"line_number":107,"context_line":"        socket VARCHAR(20) NOT NULL,"},{"line_number":108,"context_line":"        CONSTRAINT floating_ip_id_external_port_constraint UNIQUE (floating_ip_id, external_port),"}],"source_content_type":"text/x-rst","patch_set":19,"id":"1f485f77_88a240fb","line":105,"range":{"start_line":105,"start_character":8,"end_line":105,"end_character":58},"in_reply_to":"1f485f77_9e96fb3d","updated":"2017-11-17 02:54:42.000000000","message":"Hmm, the problem with Port( as in the Virtual Interface ) and port ( as in the socket through which communication would occur ) is confusing in this spec. I will put this as internal_neutron_port_id, but I am not very happy about it :)","commit_id":"49c687c62810e9df58630a114a46064cc1d291f7"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"55a4385becb688179d1690abb06da41c1304028c","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        external_port INT NOT NULL,"},{"line_number":105,"context_line":"        internal_port_id VARCHAR(36) NOT NULL FOREIGN KEY,"},{"line_number":106,"context_line":"        protocol CHAR(4) NOT NULL,"},{"line_number":107,"context_line":"        socket VARCHAR(20) NOT NULL,"},{"line_number":108,"context_line":"        CONSTRAINT floating_ip_id_external_port_constraint UNIQUE (floating_ip_id, external_port),"},{"line_number":109,"context_line":"        CONSTRAINT internal_port_id_socket_constraint UNIQUE (internal_port_id, socket)"},{"line_number":110,"context_line":"    );"}],"source_content_type":"text/x-rst","patch_set":19,"id":"1f485f77_1e744bfd","line":107,"range":{"start_line":107,"start_character":8,"end_line":107,"end_character":35},"updated":"2017-11-17 00:02:59.000000000","message":"instead of introducing a new concept (socket) why don\u0027t we specify two fields, one for the fixed IP and one for the internal_tcp_udp_port?","commit_id":"49c687c62810e9df58630a114a46064cc1d291f7"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"47e87a5889cd8bfeba3150d49a3030f9a3aafec9","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        external_port INT NOT NULL,"},{"line_number":105,"context_line":"        internal_port_id VARCHAR(36) NOT NULL FOREIGN KEY,"},{"line_number":106,"context_line":"        protocol CHAR(4) NOT NULL,"},{"line_number":107,"context_line":"        socket VARCHAR(20) NOT NULL,"},{"line_number":108,"context_line":"        CONSTRAINT floating_ip_id_external_port_constraint UNIQUE (floating_ip_id, external_port),"},{"line_number":109,"context_line":"        CONSTRAINT internal_port_id_socket_constraint UNIQUE (internal_port_id, socket)"},{"line_number":110,"context_line":"    );"}],"source_content_type":"text/x-rst","patch_set":19,"id":"1f485f77_e88bf464","line":107,"range":{"start_line":107,"start_character":8,"end_line":107,"end_character":35},"in_reply_to":"1f485f77_1e744bfd","updated":"2017-11-17 02:54:42.000000000","message":"I would be of the opinion to keep it as a socket in the DB, for simplicity....","commit_id":"49c687c62810e9df58630a114a46064cc1d291f7"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"55a4385becb688179d1690abb06da41c1304028c","unresolved":false,"context_lines":[{"line_number":117,"context_line":"The idea is to extend the Floating IP Rest API with a new extension ``floating_ip_port_forwarding``"},{"line_number":118,"context_line":"with the below defined attributes."},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"+----------+-------+---------+---------+------------+--------------+"},{"line_number":121,"context_line":"|Attribute |Type   |Access   |Default  |Validation/ |Description   |"},{"line_number":122,"context_line":"|Name      |       |         |Value    |Conversion  |              |"},{"line_number":123,"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\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+"},{"line_number":124,"context_line":"|external  |int    |RW, all  |         |            |              |"},{"line_number":125,"context_line":"|port      |       |         |         |            |              |"},{"line_number":126,"context_line":"+----------+-------+---------+---------+------------+--------------+"},{"line_number":127,"context_line":"|internal  |int    |RW, all  |         |            |              |"},{"line_number":128,"context_line":"|port      |       |         |         |            |              |"},{"line_number":129,"context_line":"|          |       |         |         |            |              |"},{"line_number":130,"context_line":"+----------+-------+---------+---------+------------+--------------+"},{"line_number":131,"context_line":"|protocol  |string |RW, all  | \u0027tcp\u0027   | \u0027tcp\u0027 or   |              |"},{"line_number":132,"context_line":"|          |       |         |         | \u0027udp\u0027      |              |"},{"line_number":133,"context_line":"|          |       |         |         |            |              |"},{"line_number":134,"context_line":"+----------+-------+---------+---------+------------+--------------+"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"The Floating IP extension definition would be expanded as :"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":".. code-block:: python"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    {\u0027floatingips\u0027: {"},{"line_number":141,"context_line":"        \u0027external_port\u0027: { \u0027allow_post\u0027:True, \u0027allow_put\u0027: False,"},{"line_number":142,"context_line":"                           \u0027validate\u0027: {\u0027type:int\u0027:None},"},{"line_number":143,"context_line":"                           \u0027is_visible\u0027: True,"},{"line_number":144,"context_line":"                         },"},{"line_number":145,"context_line":"        \u0027internal_port\u0027: { \u0027allow_post\u0027:True, \u0027allow_put\u0027: False,"},{"line_number":146,"context_line":"                           \u0027validate\u0027: {\u0027type:int\u0027:None},"},{"line_number":147,"context_line":"                           \u0027is_visible\u0027: True,"},{"line_number":148,"context_line":"                         },"},{"line_number":149,"context_line":"        \u0027protocol\u0027: { \u0027allow_post\u0027:True, \u0027allow_put\u0027: False,"},{"line_number":150,"context_line":"                      \u0027validate\u0027: {"},{"line_number":151,"context_line":"                          \u0027type:values\u0027: neutron_lib.constants.IPTABLES_PROTOCOL_MAP},"},{"line_number":152,"context_line":"                      \u0027is_visible\u0027: True,"},{"line_number":153,"context_line":"                      \u0027convert_to\u0027: converters.convert_to_protocol,"},{"line_number":154,"context_line":"                     },"},{"line_number":155,"context_line":"        }"},{"line_number":156,"context_line":"    }"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"Command Line Client Impact"},{"line_number":159,"context_line":"--------------------------"}],"source_content_type":"text/x-rst","patch_set":19,"id":"1f485f77_be9bf715","line":156,"range":{"start_line":120,"start_character":0,"end_line":156,"end_character":5},"updated":"2017-11-17 00:02:59.000000000","message":"We lack attributes here, don\u0027t we? We need to specify the following: external tcp/udp port, internal neutron port id, fixed ip, internal tcp/udp port. I also think that we have to group all of this in a \u0027port_forwarding\u0027 attribute under floatingips, that will be a list of 4-tuples (external tcp/udp port, internal neutron port id, fixed ip, internal tcp/udp port)","commit_id":"49c687c62810e9df58630a114a46064cc1d291f7"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"47e87a5889cd8bfeba3150d49a3030f9a3aafec9","unresolved":false,"context_lines":[{"line_number":117,"context_line":"The idea is to extend the Floating IP Rest API with a new extension ``floating_ip_port_forwarding``"},{"line_number":118,"context_line":"with the below defined attributes."},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"+----------+-------+---------+---------+------------+--------------+"},{"line_number":121,"context_line":"|Attribute |Type   |Access   |Default  |Validation/ |Description   |"},{"line_number":122,"context_line":"|Name      |       |         |Value    |Conversion  |              |"},{"line_number":123,"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\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+"},{"line_number":124,"context_line":"|external  |int    |RW, all  |         |            |              |"},{"line_number":125,"context_line":"|port      |       |         |         |            |              |"},{"line_number":126,"context_line":"+----------+-------+---------+---------+------------+--------------+"},{"line_number":127,"context_line":"|internal  |int    |RW, all  |         |            |              |"},{"line_number":128,"context_line":"|port      |       |         |         |            |              |"},{"line_number":129,"context_line":"|          |       |         |         |            |              |"},{"line_number":130,"context_line":"+----------+-------+---------+---------+------------+--------------+"},{"line_number":131,"context_line":"|protocol  |string |RW, all  | \u0027tcp\u0027   | \u0027tcp\u0027 or   |              |"},{"line_number":132,"context_line":"|          |       |         |         | \u0027udp\u0027      |              |"},{"line_number":133,"context_line":"|          |       |         |         |            |              |"},{"line_number":134,"context_line":"+----------+-------+---------+---------+------------+--------------+"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"The Floating IP extension definition would be expanded as :"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":".. code-block:: python"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    {\u0027floatingips\u0027: {"},{"line_number":141,"context_line":"        \u0027external_port\u0027: { \u0027allow_post\u0027:True, \u0027allow_put\u0027: False,"},{"line_number":142,"context_line":"                           \u0027validate\u0027: {\u0027type:int\u0027:None},"},{"line_number":143,"context_line":"                           \u0027is_visible\u0027: True,"},{"line_number":144,"context_line":"                         },"},{"line_number":145,"context_line":"        \u0027internal_port\u0027: { \u0027allow_post\u0027:True, \u0027allow_put\u0027: False,"},{"line_number":146,"context_line":"                           \u0027validate\u0027: {\u0027type:int\u0027:None},"},{"line_number":147,"context_line":"                           \u0027is_visible\u0027: True,"},{"line_number":148,"context_line":"                         },"},{"line_number":149,"context_line":"        \u0027protocol\u0027: { \u0027allow_post\u0027:True, \u0027allow_put\u0027: False,"},{"line_number":150,"context_line":"                      \u0027validate\u0027: {"},{"line_number":151,"context_line":"                          \u0027type:values\u0027: neutron_lib.constants.IPTABLES_PROTOCOL_MAP},"},{"line_number":152,"context_line":"                      \u0027is_visible\u0027: True,"},{"line_number":153,"context_line":"                      \u0027convert_to\u0027: converters.convert_to_protocol,"},{"line_number":154,"context_line":"                     },"},{"line_number":155,"context_line":"        }"},{"line_number":156,"context_line":"    }"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"Command Line Client Impact"},{"line_number":159,"context_line":"--------------------------"}],"source_content_type":"text/x-rst","patch_set":19,"id":"1f485f77_88da4048","line":156,"range":{"start_line":120,"start_character":0,"end_line":156,"end_character":5},"in_reply_to":"1f485f77_be9bf715","updated":"2017-11-17 02:54:42.000000000","message":"Actually the external port should deal with the external tcp/udp port (same for internal port).\nWe did miss the internal neutron port id, but I dont think we need a fixed IP here.\nThe Internal Neutron port would have an associated Fixed IP , right?\nAnd we can take the Fixed IP from there and allocate it to the socket tuple","commit_id":"49c687c62810e9df58630a114a46064cc1d291f7"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"3562ab4678b33a84c0c8c52e6d3362c608047875","unresolved":false,"context_lines":[{"line_number":24,"context_line":"port is used to distinguish between the end point VMs."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Example:"},{"line_number":27,"context_line":"* client1  172.24.4.2:4001   \u003d\u003e maps to 10.0.0.2 port 80 (VM1)"},{"line_number":28,"context_line":"* client2  172.24.4.2:4002   \u003d\u003e maps to 10.0.0.3 port 80 (VM2)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"This spec focuses on the API level, a detailed reference implementation spec"},{"line_number":31,"context_line":"will be written upon approval of API."}],"source_content_type":"text/x-rst","patch_set":21,"id":"ff82abbf_6b327f60","line":28,"range":{"start_line":27,"start_character":0,"end_line":28,"end_character":62},"updated":"2017-11-27 23:17:13.000000000","message":"This is not rendering correctly as a list: http://logs.openstack.org/96/470596/21/check/build-openstack-sphinx-docs/1d90dce/html/specs/queens/port-forwarding.html#port-forwarding-api.\n\nI think you need a blank line after L26","commit_id":"9db97fae59aae7dae328900e1e14efe214db2035"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"6aff17a5e1a0ad4a42e5e1ae47d7f5d22d1ca542","unresolved":false,"context_lines":[{"line_number":24,"context_line":"port is used to distinguish between the end point VMs."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Example:"},{"line_number":27,"context_line":"* client1  172.24.4.2:4001   \u003d\u003e maps to 10.0.0.2 port 80 (VM1)"},{"line_number":28,"context_line":"* client2  172.24.4.2:4002   \u003d\u003e maps to 10.0.0.3 port 80 (VM2)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"This spec focuses on the API level, a detailed reference implementation spec"},{"line_number":31,"context_line":"will be written upon approval of API."}],"source_content_type":"text/x-rst","patch_set":21,"id":"ff82abbf_167bdabd","line":28,"range":{"start_line":27,"start_character":0,"end_line":28,"end_character":62},"in_reply_to":"ff82abbf_6b327f60","updated":"2017-11-28 00:42:16.000000000","message":"Done","commit_id":"9db97fae59aae7dae328900e1e14efe214db2035"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"3562ab4678b33a84c0c8c52e6d3362c608047875","unresolved":false,"context_lines":[{"line_number":27,"context_line":"* client1  172.24.4.2:4001   \u003d\u003e maps to 10.0.0.2 port 80 (VM1)"},{"line_number":28,"context_line":"* client2  172.24.4.2:4002   \u003d\u003e maps to 10.0.0.3 port 80 (VM2)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"This spec focuses on the API level, a detailed reference implementation spec"},{"line_number":31,"context_line":"will be written upon approval of API."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"This mean need to introduce port forwarding API and implementation which can be"},{"line_number":34,"context_line":"used on the Floating IPs."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"We can divided into 2 parts about port forwarding feature logically, So this"},{"line_number":37,"context_line":"spec will cover the Floating IPs part, the virtual router external gateway"},{"line_number":38,"context_line":"interface part will be described in the next spec."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"Problem Description"}],"source_content_type":"text/x-rst","patch_set":21,"id":"ff82abbf_cb686b1e","line":38,"range":{"start_line":30,"start_character":0,"end_line":38,"end_character":50},"updated":"2017-11-27 23:17:13.000000000","message":"I would replace all this with:\n\nThis spec will focus on port forwarding based on Floating IPs. A future spec will be submitted for port forwarding based on routers external gateway interface.","commit_id":"9db97fae59aae7dae328900e1e14efe214db2035"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"6aff17a5e1a0ad4a42e5e1ae47d7f5d22d1ca542","unresolved":false,"context_lines":[{"line_number":27,"context_line":"* client1  172.24.4.2:4001   \u003d\u003e maps to 10.0.0.2 port 80 (VM1)"},{"line_number":28,"context_line":"* client2  172.24.4.2:4002   \u003d\u003e maps to 10.0.0.3 port 80 (VM2)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"This spec focuses on the API level, a detailed reference implementation spec"},{"line_number":31,"context_line":"will be written upon approval of API."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"This mean need to introduce port forwarding API and implementation which can be"},{"line_number":34,"context_line":"used on the Floating IPs."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"We can divided into 2 parts about port forwarding feature logically, So this"},{"line_number":37,"context_line":"spec will cover the Floating IPs part, the virtual router external gateway"},{"line_number":38,"context_line":"interface part will be described in the next spec."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"Problem Description"}],"source_content_type":"text/x-rst","patch_set":21,"id":"ff82abbf_16299a99","line":38,"range":{"start_line":30,"start_character":0,"end_line":38,"end_character":50},"in_reply_to":"ff82abbf_cb686b1e","updated":"2017-11-28 00:42:16.000000000","message":"Thanks, miguel. For rewording these paragraph. :). Will update as your suggest.","commit_id":"9db97fae59aae7dae328900e1e14efe214db2035"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"3562ab4678b33a84c0c8c52e6d3362c608047875","unresolved":false,"context_lines":[{"line_number":60,"context_line":"VM they want to expose."},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"a) Legacy Router: For the Generic Router deployment, the port forwarding rule must be installed in"},{"line_number":63,"context_line":"Internal Router namespace on the network node and perform the simple forwarding functions."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"b) DVR: After [1] was merged, we have the ability to create centralized Floating IPs in a"},{"line_number":66,"context_line":"DVR supported deployment. This helps in mapping the Compute nodes where the destination VM is"}],"source_content_type":"text/x-rst","patch_set":21,"id":"ff82abbf_cbcdcb31","line":63,"range":{"start_line":63,"start_character":0,"end_line":63,"end_character":8},"updated":"2017-11-27 23:17:13.000000000","message":"We should remove this. it is confusing","commit_id":"9db97fae59aae7dae328900e1e14efe214db2035"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"6aff17a5e1a0ad4a42e5e1ae47d7f5d22d1ca542","unresolved":false,"context_lines":[{"line_number":60,"context_line":"VM they want to expose."},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"a) Legacy Router: For the Generic Router deployment, the port forwarding rule must be installed in"},{"line_number":63,"context_line":"Internal Router namespace on the network node and perform the simple forwarding functions."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"b) DVR: After [1] was merged, we have the ability to create centralized Floating IPs in a"},{"line_number":66,"context_line":"DVR supported deployment. This helps in mapping the Compute nodes where the destination VM is"}],"source_content_type":"text/x-rst","patch_set":21,"id":"ff82abbf_d62012af","line":63,"range":{"start_line":63,"start_character":0,"end_line":63,"end_character":8},"in_reply_to":"ff82abbf_cbcdcb31","updated":"2017-11-28 00:42:16.000000000","message":"Done","commit_id":"9db97fae59aae7dae328900e1e14efe214db2035"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"3562ab4678b33a84c0c8c52e6d3362c608047875","unresolved":false,"context_lines":[{"line_number":116,"context_line":".. code-block:: python"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    {\u0027floatingips\u0027: {"},{"line_number":119,"context_line":"        \u0027port_forwarding\u0027: {"},{"line_number":120,"context_line":"            \u0027external_port\u0027: { \u0027allow_post\u0027:True, \u0027allow_put\u0027: False,"},{"line_number":121,"context_line":"                               \u0027validate\u0027: {\u0027type:int\u0027:None},"},{"line_number":122,"context_line":"                               \u0027is_visible\u0027: True,"}],"source_content_type":"text/x-rst","patch_set":21,"id":"ff82abbf_ab1ba77e","line":119,"updated":"2017-11-27 23:17:13.000000000","message":"This attribute is a list, correct? Each floating ip  can have several of the l120-l138, correct?","commit_id":"9db97fae59aae7dae328900e1e14efe214db2035"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"6aff17a5e1a0ad4a42e5e1ae47d7f5d22d1ca542","unresolved":false,"context_lines":[{"line_number":116,"context_line":".. code-block:: python"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    {\u0027floatingips\u0027: {"},{"line_number":119,"context_line":"        \u0027port_forwarding\u0027: {"},{"line_number":120,"context_line":"            \u0027external_port\u0027: { \u0027allow_post\u0027:True, \u0027allow_put\u0027: False,"},{"line_number":121,"context_line":"                               \u0027validate\u0027: {\u0027type:int\u0027:None},"},{"line_number":122,"context_line":"                               \u0027is_visible\u0027: True,"}],"source_content_type":"text/x-rst","patch_set":21,"id":"ff82abbf_b185585c","line":119,"in_reply_to":"ff82abbf_ab1ba77e","updated":"2017-11-28 00:42:16.000000000","message":"Yeah, it is. You mentioned is a valid use case. Did you mean that, it\u0027s better to change the attribute name to \u0027port_forwardings\u0027?","commit_id":"9db97fae59aae7dae328900e1e14efe214db2035"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"7f72f519846aa39e26008bbdba54184223a0bc92","unresolved":false,"context_lines":[{"line_number":116,"context_line":".. code-block:: python"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    {\u0027floatingips\u0027: {"},{"line_number":119,"context_line":"        \u0027port_forwarding\u0027: {"},{"line_number":120,"context_line":"            \u0027external_port\u0027: { \u0027allow_post\u0027:True, \u0027allow_put\u0027: False,"},{"line_number":121,"context_line":"                               \u0027validate\u0027: {\u0027type:int\u0027:None},"},{"line_number":122,"context_line":"                               \u0027is_visible\u0027: True,"}],"source_content_type":"text/x-rst","patch_set":21,"id":"ff82abbf_d78ec977","line":119,"in_reply_to":"ff82abbf_b185585c","updated":"2017-11-28 05:17:22.000000000","message":"I think Miguel is stating that it should be \n\n {\u0027floatingips\u0027: [{\n   \u0027port_forwarding\u0027:{\n     .\n     .\n     .\n     }},{\n    \u0027port_forwarding\u0027:{\n     .\n     .\n     .\n     }}]\n }","commit_id":"9db97fae59aae7dae328900e1e14efe214db2035"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"bb8d3a649eac4d029d978103939172c3e513e99e","unresolved":false,"context_lines":[{"line_number":116,"context_line":".. code-block:: python"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    {\u0027floatingips\u0027: {"},{"line_number":119,"context_line":"        \u0027port_forwarding\u0027: {"},{"line_number":120,"context_line":"            \u0027external_port\u0027: { \u0027allow_post\u0027:True, \u0027allow_put\u0027: False,"},{"line_number":121,"context_line":"                               \u0027validate\u0027: {\u0027type:int\u0027:None},"},{"line_number":122,"context_line":"                               \u0027is_visible\u0027: True,"}],"source_content_type":"text/x-rst","patch_set":21,"id":"ff82abbf_f2c3db55","line":119,"in_reply_to":"ff82abbf_d78ec977","updated":"2017-11-28 06:48:52.000000000","message":"@Reedip, yeah, I think we got the same thing. So I change the name to \"**s\", that mean it is a List. \nYou mean that we need to change like below?\nRESOURCE_ATTR_MAP \u003d \n{\u0027floatingips:\n   \u0027port_forwardings\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: False,\n                        \u0027is_visible\u0027: True, \u0027validate\u0027: \n                        {\u0027type:List\u0027: None}\n                        }\n\n}\n\nSUB_RESOURCE_ATTR_MAP \u003d\n{\n\u0027port_forwardings\u0027: {\n\u0027external_port\u0027..\n\u0027protocol\u0027...\n}\n}\n\n\nAnd the db defination already met this requirement, didn\u0027t it?","commit_id":"9db97fae59aae7dae328900e1e14efe214db2035"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"3562ab4678b33a84c0c8c52e6d3362c608047875","unresolved":false,"context_lines":[{"line_number":147,"context_line":"Security Impact"},{"line_number":148,"context_line":"---------------"},{"line_number":149,"context_line":"Port forwarding is similar in nature to centralized DNAT, so should not pose"},{"line_number":150,"context_line":"additional security implications. But if actually want to use Port forwarding,"},{"line_number":151,"context_line":"users must make sure to allow the associated ingress Security Group towards the"},{"line_number":152,"context_line":"internal ip which used by the neutron port of their VMs."},{"line_number":153,"context_line":""}],"source_content_type":"text/x-rst","patch_set":21,"id":"ff82abbf_4b0c5b40","line":150,"range":{"start_line":150,"start_character":41,"end_line":150,"end_character":49},"updated":"2017-11-27 23:17:13.000000000","message":"users actually","commit_id":"9db97fae59aae7dae328900e1e14efe214db2035"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"6aff17a5e1a0ad4a42e5e1ae47d7f5d22d1ca542","unresolved":false,"context_lines":[{"line_number":147,"context_line":"Security Impact"},{"line_number":148,"context_line":"---------------"},{"line_number":149,"context_line":"Port forwarding is similar in nature to centralized DNAT, so should not pose"},{"line_number":150,"context_line":"additional security implications. But if actually want to use Port forwarding,"},{"line_number":151,"context_line":"users must make sure to allow the associated ingress Security Group towards the"},{"line_number":152,"context_line":"internal ip which used by the neutron port of their VMs."},{"line_number":153,"context_line":""}],"source_content_type":"text/x-rst","patch_set":21,"id":"ff82abbf_51116c51","line":150,"range":{"start_line":150,"start_character":41,"end_line":150,"end_character":49},"in_reply_to":"ff82abbf_4b0c5b40","updated":"2017-11-28 00:42:16.000000000","message":"Done","commit_id":"9db97fae59aae7dae328900e1e14efe214db2035"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"3562ab4678b33a84c0c8c52e6d3362c608047875","unresolved":false,"context_lines":[{"line_number":148,"context_line":"---------------"},{"line_number":149,"context_line":"Port forwarding is similar in nature to centralized DNAT, so should not pose"},{"line_number":150,"context_line":"additional security implications. But if actually want to use Port forwarding,"},{"line_number":151,"context_line":"users must make sure to allow the associated ingress Security Group towards the"},{"line_number":152,"context_line":"internal ip which used by the neutron port of their VMs."},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"Notifications Impact"}],"source_content_type":"text/x-rst","patch_set":21,"id":"ff82abbf_eb044f1a","line":151,"range":{"start_line":151,"start_character":0,"end_line":151,"end_character":5},"updated":"2017-11-27 23:17:13.000000000","message":"they","commit_id":"9db97fae59aae7dae328900e1e14efe214db2035"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"6aff17a5e1a0ad4a42e5e1ae47d7f5d22d1ca542","unresolved":false,"context_lines":[{"line_number":148,"context_line":"---------------"},{"line_number":149,"context_line":"Port forwarding is similar in nature to centralized DNAT, so should not pose"},{"line_number":150,"context_line":"additional security implications. But if actually want to use Port forwarding,"},{"line_number":151,"context_line":"users must make sure to allow the associated ingress Security Group towards the"},{"line_number":152,"context_line":"internal ip which used by the neutron port of their VMs."},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"Notifications Impact"}],"source_content_type":"text/x-rst","patch_set":21,"id":"ff82abbf_3114e843","line":151,"range":{"start_line":151,"start_character":0,"end_line":151,"end_character":5},"in_reply_to":"ff82abbf_eb044f1a","updated":"2017-11-28 00:42:16.000000000","message":"Done","commit_id":"9db97fae59aae7dae328900e1e14efe214db2035"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"3562ab4678b33a84c0c8c52e6d3362c608047875","unresolved":false,"context_lines":[{"line_number":149,"context_line":"Port forwarding is similar in nature to centralized DNAT, so should not pose"},{"line_number":150,"context_line":"additional security implications. But if actually want to use Port forwarding,"},{"line_number":151,"context_line":"users must make sure to allow the associated ingress Security Group towards the"},{"line_number":152,"context_line":"internal ip which used by the neutron port of their VMs."},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"Notifications Impact"},{"line_number":155,"context_line":"--------------------"}],"source_content_type":"text/x-rst","patch_set":21,"id":"ff82abbf_7606e61e","line":152,"range":{"start_line":152,"start_character":18,"end_line":152,"end_character":22},"updated":"2017-11-27 23:17:13.000000000","message":"is used","commit_id":"9db97fae59aae7dae328900e1e14efe214db2035"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"6aff17a5e1a0ad4a42e5e1ae47d7f5d22d1ca542","unresolved":false,"context_lines":[{"line_number":149,"context_line":"Port forwarding is similar in nature to centralized DNAT, so should not pose"},{"line_number":150,"context_line":"additional security implications. But if actually want to use Port forwarding,"},{"line_number":151,"context_line":"users must make sure to allow the associated ingress Security Group towards the"},{"line_number":152,"context_line":"internal ip which used by the neutron port of their VMs."},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"Notifications Impact"},{"line_number":155,"context_line":"--------------------"}],"source_content_type":"text/x-rst","patch_set":21,"id":"ff82abbf_910b7422","line":152,"range":{"start_line":152,"start_character":18,"end_line":152,"end_character":22},"in_reply_to":"ff82abbf_7606e61e","updated":"2017-11-28 00:42:16.000000000","message":"Done","commit_id":"9db97fae59aae7dae328900e1e14efe214db2035"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"3562ab4678b33a84c0c8c52e6d3362c608047875","unresolved":false,"context_lines":[{"line_number":171,"context_line":""},{"line_number":172,"context_line":"Other Deployer Impact"},{"line_number":173,"context_line":"---------------------"},{"line_number":174,"context_line":"Deployer will be able to leverage port forwarding for unique way to reach a"},{"line_number":175,"context_line":"private VM/Container without wasting new public IPs"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"Developer Impact"}],"source_content_type":"text/x-rst","patch_set":21,"id":"ff82abbf_363dbec3","line":174,"range":{"start_line":174,"start_character":54,"end_line":174,"end_character":60},"updated":"2017-11-27 23:17:13.000000000","message":"a unique","commit_id":"9db97fae59aae7dae328900e1e14efe214db2035"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"6aff17a5e1a0ad4a42e5e1ae47d7f5d22d1ca542","unresolved":false,"context_lines":[{"line_number":171,"context_line":""},{"line_number":172,"context_line":"Other Deployer Impact"},{"line_number":173,"context_line":"---------------------"},{"line_number":174,"context_line":"Deployer will be able to leverage port forwarding for unique way to reach a"},{"line_number":175,"context_line":"private VM/Container without wasting new public IPs"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"Developer Impact"}],"source_content_type":"text/x-rst","patch_set":21,"id":"ff82abbf_f604361a","line":174,"range":{"start_line":174,"start_character":54,"end_line":174,"end_character":60},"in_reply_to":"ff82abbf_363dbec3","updated":"2017-11-28 00:42:16.000000000","message":"Done","commit_id":"9db97fae59aae7dae328900e1e14efe214db2035"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"3562ab4678b33a84c0c8c52e6d3362c608047875","unresolved":false,"context_lines":[{"line_number":179,"context_line":"Future SNAT distribution plans should take port forwarding into consideration."},{"line_number":180,"context_line":"Kuryr can leverage port forwarding for feature compatibility with Docker port mapping."},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"Community Impact"},{"line_number":183,"context_line":"----------------"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":21,"id":"ff82abbf_b64eae6c","line":183,"range":{"start_line":182,"start_character":0,"end_line":183,"end_character":16},"updated":"2017-11-27 23:17:13.000000000","message":"Do we need to keep this header?","commit_id":"9db97fae59aae7dae328900e1e14efe214db2035"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"6aff17a5e1a0ad4a42e5e1ae47d7f5d22d1ca542","unresolved":false,"context_lines":[{"line_number":179,"context_line":"Future SNAT distribution plans should take port forwarding into consideration."},{"line_number":180,"context_line":"Kuryr can leverage port forwarding for feature compatibility with Docker port mapping."},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"Community Impact"},{"line_number":183,"context_line":"----------------"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":21,"id":"ff82abbf_b100f802","line":183,"range":{"start_line":182,"start_character":0,"end_line":183,"end_character":16},"in_reply_to":"ff82abbf_b64eae6c","updated":"2017-11-28 00:42:16.000000000","message":"will remove.","commit_id":"9db97fae59aae7dae328900e1e14efe214db2035"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"9f06ea9ed5d2f643aad4a5999251cc957129024d","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"The user can define various port forwarding rules on the Floating IPs containing"},{"line_number":54,"context_line":"the internal/client port and the external/destination port, connected with the"},{"line_number":55,"context_line":"VM they want to expose."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"a) Legacy Router: For the Generic Router deployment, the port forwarding rule"},{"line_number":58,"context_line":"must be installed in the Router namespace on the network node and perform the"}],"source_content_type":"text/x-rst","patch_set":22,"id":"df87a7cf_a0e12fd3","line":55,"updated":"2017-12-01 21:45:44.000000000","message":"Please add to this line:\n\nWe will have two deployment variants:","commit_id":"7bd383154dca34077cef9945e954a9edbd453382"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"db0626a4703575777bc949dc95de9d781a1ea613","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"The user can define various port forwarding rules on the Floating IPs containing"},{"line_number":54,"context_line":"the internal/client port and the external/destination port, connected with the"},{"line_number":55,"context_line":"VM they want to expose."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"a) Legacy Router: For the Generic Router deployment, the port forwarding rule"},{"line_number":58,"context_line":"must be installed in the Router namespace on the network node and perform the"}],"source_content_type":"text/x-rst","patch_set":22,"id":"df87a7cf_1d0aafd1","line":55,"in_reply_to":"df87a7cf_a0e12fd3","updated":"2017-12-04 03:53:19.000000000","message":"Done","commit_id":"7bd383154dca34077cef9945e954a9edbd453382"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"9f06ea9ed5d2f643aad4a5999251cc957129024d","unresolved":false,"context_lines":[{"line_number":55,"context_line":"VM they want to expose."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"a) Legacy Router: For the Generic Router deployment, the port forwarding rule"},{"line_number":58,"context_line":"must be installed in the Router namespace on the network node and perform the"},{"line_number":59,"context_line":"simple forwarding functions."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"b) DVR: After [1] was merged, we have the ability to create centralized"}],"source_content_type":"text/x-rst","patch_set":22,"id":"df87a7cf_20cd1f5d","line":58,"range":{"start_line":58,"start_character":0,"end_line":58,"end_character":4},"updated":"2017-12-01 21:45:44.000000000","message":"will","commit_id":"7bd383154dca34077cef9945e954a9edbd453382"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"db0626a4703575777bc949dc95de9d781a1ea613","unresolved":false,"context_lines":[{"line_number":55,"context_line":"VM they want to expose."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"a) Legacy Router: For the Generic Router deployment, the port forwarding rule"},{"line_number":58,"context_line":"must be installed in the Router namespace on the network node and perform the"},{"line_number":59,"context_line":"simple forwarding functions."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"b) DVR: After [1] was merged, we have the ability to create centralized"}],"source_content_type":"text/x-rst","patch_set":22,"id":"df87a7cf_bd0e23e3","line":58,"range":{"start_line":58,"start_character":0,"end_line":58,"end_character":4},"in_reply_to":"df87a7cf_20cd1f5d","updated":"2017-12-04 03:53:19.000000000","message":"Done","commit_id":"7bd383154dca34077cef9945e954a9edbd453382"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"9f06ea9ed5d2f643aad4a5999251cc957129024d","unresolved":false,"context_lines":[{"line_number":61,"context_line":"b) DVR: After [1] was merged, we have the ability to create centralized"},{"line_number":62,"context_line":"Floating IPs in a DVR supported deployment. This helps in mapping the Compute"},{"line_number":63,"context_line":"nodes where the destination VM is present with the centralized FIP for Port"},{"line_number":64,"context_line":"forwarding."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"The port forwarding entry is NATted a specific Floating IP:Port to a specific"},{"line_number":67,"context_line":"Neutron port (and a private IP that is attached to this port)."}],"source_content_type":"text/x-rst","patch_set":22,"id":"df87a7cf_63d01152","line":64,"updated":"2017-12-01 21:45:44.000000000","message":"I dug deeper in the centralized floating ip under DVR. We will have to generalize the mechanism. As a consequence, I suggest we add the following to this paragraph:\n\nThis mechanism will be generalized to centralize a floating IP not only when it is associated with a port bound to a host with the \u0027dvr_no_external\u0027 option enabled, but also when port forwarding attributes are added to it.","commit_id":"7bd383154dca34077cef9945e954a9edbd453382"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"db0626a4703575777bc949dc95de9d781a1ea613","unresolved":false,"context_lines":[{"line_number":61,"context_line":"b) DVR: After [1] was merged, we have the ability to create centralized"},{"line_number":62,"context_line":"Floating IPs in a DVR supported deployment. This helps in mapping the Compute"},{"line_number":63,"context_line":"nodes where the destination VM is present with the centralized FIP for Port"},{"line_number":64,"context_line":"forwarding."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"The port forwarding entry is NATted a specific Floating IP:Port to a specific"},{"line_number":67,"context_line":"Neutron port (and a private IP that is attached to this port)."}],"source_content_type":"text/x-rst","patch_set":22,"id":"df87a7cf_c0a45c0b","line":64,"in_reply_to":"df87a7cf_63d01152","updated":"2017-12-04 03:53:19.000000000","message":"Done","commit_id":"7bd383154dca34077cef9945e954a9edbd453382"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"9f06ea9ed5d2f643aad4a5999251cc957129024d","unresolved":false,"context_lines":[{"line_number":63,"context_line":"nodes where the destination VM is present with the centralized FIP for Port"},{"line_number":64,"context_line":"forwarding."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"The port forwarding entry is NATted a specific Floating IP:Port to a specific"},{"line_number":67,"context_line":"Neutron port (and a private IP that is attached to this port)."},{"line_number":68,"context_line":"If the Neutron port is deleted, the port forwarding entries that match this port"},{"line_number":69,"context_line":"are also deleted."}],"source_content_type":"text/x-rst","patch_set":22,"id":"df87a7cf_034a6526","line":66,"range":{"start_line":66,"start_character":0,"end_line":66,"end_character":36},"updated":"2017-12-01 21:45:44.000000000","message":"For clarity, change to:\n\nIn both deployment variants, the port forwarding entry NATs","commit_id":"7bd383154dca34077cef9945e954a9edbd453382"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"db0626a4703575777bc949dc95de9d781a1ea613","unresolved":false,"context_lines":[{"line_number":63,"context_line":"nodes where the destination VM is present with the centralized FIP for Port"},{"line_number":64,"context_line":"forwarding."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"The port forwarding entry is NATted a specific Floating IP:Port to a specific"},{"line_number":67,"context_line":"Neutron port (and a private IP that is attached to this port)."},{"line_number":68,"context_line":"If the Neutron port is deleted, the port forwarding entries that match this port"},{"line_number":69,"context_line":"are also deleted."}],"source_content_type":"text/x-rst","patch_set":22,"id":"df87a7cf_e02640b8","line":66,"range":{"start_line":66,"start_character":0,"end_line":66,"end_character":36},"in_reply_to":"df87a7cf_034a6526","updated":"2017-12-04 03:53:19.000000000","message":"Done","commit_id":"7bd383154dca34077cef9945e954a9edbd453382"},{"author":{"_account_id":20421,"name":"brenda_tian","email":"tian.mingming@h3c.com","username":"brenda_tian"},"change_message_id":"8487ae88921500fc2f7ce7913d4a29d6ed96ef91","unresolved":false,"context_lines":[{"line_number":92,"context_line":"---------------"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"The idea is to extend the Floating IP Rest API with a new extension"},{"line_number":95,"context_line":"``floating_ip_port_forwarding`` with the below defined attributes."},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"+------------------+-------+---------+---------+------------+--------------+"},{"line_number":98,"context_line":"|Attribute Name    |Type   |Access   |Default  |Validation/ |Description   |"}],"source_content_type":"text/x-rst","patch_set":22,"id":"df87a7cf_f85367e1","line":95,"updated":"2017-12-02 09:51:53.000000000","message":"when \"port_forwarding\" is to be dealt as a subresource of \"floatingip\", \"floating_ip_port_forwarding\" should be a new model which should has its \u0027id\u0027, \u0027tenant_id\u0027 and has \"floatingip_id\" as its foreign key. In this way, I think the data model would work well with the api defination.","commit_id":"7bd383154dca34077cef9945e954a9edbd453382"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"94e6b29bed40e1157f2142c2c2d05d670c2adad5","unresolved":false,"context_lines":[{"line_number":92,"context_line":"---------------"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"The idea is to extend the Floating IP Rest API with a new extension"},{"line_number":95,"context_line":"``floating_ip_port_forwarding`` with the below defined attributes."},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"+------------------+-------+---------+---------+------------+--------------+"},{"line_number":98,"context_line":"|Attribute Name    |Type   |Access   |Default  |Validation/ |Description   |"}],"source_content_type":"text/x-rst","patch_set":22,"id":"df87a7cf_1205b6c2","line":95,"in_reply_to":"df87a7cf_f85367e1","updated":"2017-12-04 08:48:39.000000000","message":"Yeah, it already contains its \u0027id\u0027. But for \u0027tenant_id\u0027, I think it should be the same as the Floating IP resource. So .. Also in the url, we already associated with a existing Floating IP which owned by a particular tenant.","commit_id":"7bd383154dca34077cef9945e954a9edbd453382"},{"author":{"_account_id":20421,"name":"brenda_tian","email":"tian.mingming@h3c.com","username":"brenda_tian"},"change_message_id":"b84dd37c9e8bd4c5a247973c4d133268b39894a8","unresolved":false,"context_lines":[{"line_number":113,"context_line":".. code-block:: python"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    {\u0027floatingips\u0027: {"},{"line_number":116,"context_line":"        \u0027port_forwardings\u0027: {"},{"line_number":117,"context_line":"            \u0027external_port\u0027: { \u0027allow_post\u0027:True, \u0027allow_put\u0027: False,"},{"line_number":118,"context_line":"                               \u0027validate\u0027: {\u0027type:int\u0027:None},"},{"line_number":119,"context_line":"                               \u0027is_visible\u0027: True,"}],"source_content_type":"text/x-rst","patch_set":22,"id":"ff82abbf_a7904c50","line":116,"updated":"2017-12-01 10:03:44.000000000","message":"According to the data model and \u0027port_forwarding\u0027 group, I think the floating ip extension definition would be like this:\nSUB_RESOURCE_ATTRIBUTE_MAP \u003d {\n    \u0027port_forwarding\u0027:{\n        \u0027parent\u0027:{\u0027collection_name\u0027:\u0027floatingips\u0027,\n                  \u0027member_name\u0027:\u0027pool\u0027}\n\n         \u0027parameters\u0027:{\n                \u0027external_port\u0027: { \u0027allow_post\u0027:True, \n                                   \u0027allow_put\u0027: False,\n                               \u0027validate\u0027:{\u0027type:int\u0027:None},\n                               \u0027is_visible\u0027: True,\n                             },\n                 ...\n                                    \n             }\n         }\n    }\n          \nThe request url would be like this:\n/v2.0/floatingips/(floatingip uuid)/port_forwardings.\n\nI think this is better, so we can add a new extension without affecting original code and db model.","commit_id":"7bd383154dca34077cef9945e954a9edbd453382"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"db0626a4703575777bc949dc95de9d781a1ea613","unresolved":false,"context_lines":[{"line_number":113,"context_line":".. code-block:: python"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    {\u0027floatingips\u0027: {"},{"line_number":116,"context_line":"        \u0027port_forwardings\u0027: {"},{"line_number":117,"context_line":"            \u0027external_port\u0027: { \u0027allow_post\u0027:True, \u0027allow_put\u0027: False,"},{"line_number":118,"context_line":"                               \u0027validate\u0027: {\u0027type:int\u0027:None},"},{"line_number":119,"context_line":"                               \u0027is_visible\u0027: True,"}],"source_content_type":"text/x-rst","patch_set":22,"id":"df87a7cf_40592c58","line":116,"in_reply_to":"ff82abbf_a7904c50","updated":"2017-12-04 03:53:19.000000000","message":"Correct. Agree. Let\u0027s rework this part. :)","commit_id":"7bd383154dca34077cef9945e954a9edbd453382"},{"author":{"_account_id":20421,"name":"brenda_tian","email":"tian.mingming@h3c.com","username":"brenda_tian"},"change_message_id":"b84dd37c9e8bd4c5a247973c4d133268b39894a8","unresolved":false,"context_lines":[{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    {\u0027floatingips\u0027: {"},{"line_number":116,"context_line":"        \u0027port_forwardings\u0027: {"},{"line_number":117,"context_line":"            \u0027external_port\u0027: { \u0027allow_post\u0027:True, \u0027allow_put\u0027: False,"},{"line_number":118,"context_line":"                               \u0027validate\u0027: {\u0027type:int\u0027:None},"},{"line_number":119,"context_line":"                               \u0027is_visible\u0027: True,"},{"line_number":120,"context_line":"                             },"}],"source_content_type":"text/x-rst","patch_set":22,"id":"ff82abbf_47ab8074","line":117,"updated":"2017-12-01 10:03:44.000000000","message":"I think we can use \u0027external_L4_port\u0027 to avoid confusing with neutron port. so does \u0027internal_port\u0027","commit_id":"7bd383154dca34077cef9945e954a9edbd453382"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"db0626a4703575777bc949dc95de9d781a1ea613","unresolved":false,"context_lines":[{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    {\u0027floatingips\u0027: {"},{"line_number":116,"context_line":"        \u0027port_forwardings\u0027: {"},{"line_number":117,"context_line":"            \u0027external_port\u0027: { \u0027allow_post\u0027:True, \u0027allow_put\u0027: False,"},{"line_number":118,"context_line":"                               \u0027validate\u0027: {\u0027type:int\u0027:None},"},{"line_number":119,"context_line":"                               \u0027is_visible\u0027: True,"},{"line_number":120,"context_line":"                             },"}],"source_content_type":"text/x-rst","patch_set":22,"id":"df87a7cf_c3a4660b","line":117,"in_reply_to":"ff82abbf_47ab8074","updated":"2017-12-04 03:53:19.000000000","message":"eh, I think \u0027external_port\u0027/\u0027internal_port\u0027 is enough, because user just know we should input the body/API looks like, if we add \u0027L4\u0027 into the fields, I think it\u0027s so specialized for users. Do you think so?","commit_id":"7bd383154dca34077cef9945e954a9edbd453382"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"9f06ea9ed5d2f643aad4a5999251cc957129024d","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":".. code-block:: python"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    {\u0027floatingips\u0027: {"},{"line_number":116,"context_line":"        \u0027port_forwardings\u0027: {"},{"line_number":117,"context_line":"            \u0027external_port\u0027: { \u0027allow_post\u0027:True, \u0027allow_put\u0027: False,"},{"line_number":118,"context_line":"                               \u0027validate\u0027: {\u0027type:int\u0027:None},"},{"line_number":119,"context_line":"                               \u0027is_visible\u0027: True,"},{"line_number":120,"context_line":"                             },"},{"line_number":121,"context_line":"            \u0027internal_port\u0027: { \u0027allow_post\u0027:True, \u0027allow_put\u0027: False,"},{"line_number":122,"context_line":"                               \u0027validate\u0027: {\u0027type:int\u0027:None},"},{"line_number":123,"context_line":"                               \u0027is_visible\u0027: True,"},{"line_number":124,"context_line":"                             },"},{"line_number":125,"context_line":"            \u0027protocol\u0027: { \u0027allow_post\u0027:True, \u0027allow_put\u0027: False,"},{"line_number":126,"context_line":"                          \u0027validate\u0027: {"},{"line_number":127,"context_line":"                              \u0027type:values\u0027: neutron_lib.constants.IPTABLES_PROTOCOL_MAP},"},{"line_number":128,"context_line":"                          \u0027is_visible\u0027: True,"},{"line_number":129,"context_line":"                          \u0027convert_to\u0027: converters.convert_to_protocol,"},{"line_number":130,"context_line":"                        },"},{"line_number":131,"context_line":"            \u0027internal_port_id\u0027: {\u0027allow_post\u0027:True, \u0027allow_put\u0027: False,"},{"line_number":132,"context_line":"                               \u0027validate\u0027: {\u0027type:int\u0027:None},"},{"line_number":133,"context_line":"                               \u0027is_visible\u0027: True,"},{"line_number":134,"context_line":"                             },"},{"line_number":135,"context_line":"             }"},{"line_number":136,"context_line":"         }"},{"line_number":137,"context_line":"    }"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"Command Line Client Impact"},{"line_number":140,"context_line":"--------------------------"}],"source_content_type":"text/x-rst","patch_set":22,"id":"df87a7cf_4382adca","line":137,"range":{"start_line":115,"start_character":0,"end_line":137,"end_character":5},"updated":"2017-12-01 21:45:44.000000000","message":"Although I don\u0027t think it is syntactically correct, this way to specify the API seems to suggest that you are envisioning that the port forwarding attributes will be similar to fixed_ips in ports: https://github.com/openstack/neutron-lib/blob/master/neutron_lib/api/definitions/port.py#L50. In other words: \n\n{\n    \"port\": {\n     .....\n        \"fixed_ips\": [\n            {\n                \"ip_address\": \"10.0.0.2\",\n                \"subnet_id\": \"a0304c3a-4f08-4c43-88af-d796509c97d2\"\n            }\n        ],\n     .....\n}\n\nThe downside of this approach is that every time you want to add or remove one forwarding source / destination pair, the request has to contain the entire list of source / destination pairs that we want leave active in the floating IP. In the case of fixed_ips for ports, this is reflected here: https://github.com/openstack/neutron/blob/master/neutron/tests/unit/db/test_db_base_plugin_v2.py#L1691.\n\nIs this the kind of API experience that we want? Wouldn\u0027t it be better to enable the users to add or remove forwarding source / destination pairs one by one? If the answer is yes, then I think we need add the port forwarding attribute as a sub-resource to floating IPs. One example of this is the work we are doing for multiple port bindings: https://specs.openstack.org/openstack/neutron-specs/specs/backlog/pike/portbinding_information_for_nova.html#binding-api-extension-for-ports\n\nHave you considered this alternative? I also think that instead of using an attributes map to specify the API we can follow the same approach as the spec for multiple ports binding pointed out above. It will be be much clearer","commit_id":"7bd383154dca34077cef9945e954a9edbd453382"},{"author":{"_account_id":20421,"name":"brenda_tian","email":"tian.mingming@h3c.com","username":"brenda_tian"},"change_message_id":"8487ae88921500fc2f7ce7913d4a29d6ed96ef91","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":".. code-block:: python"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    {\u0027floatingips\u0027: {"},{"line_number":116,"context_line":"        \u0027port_forwardings\u0027: {"},{"line_number":117,"context_line":"            \u0027external_port\u0027: { \u0027allow_post\u0027:True, \u0027allow_put\u0027: False,"},{"line_number":118,"context_line":"                               \u0027validate\u0027: {\u0027type:int\u0027:None},"},{"line_number":119,"context_line":"                               \u0027is_visible\u0027: True,"},{"line_number":120,"context_line":"                             },"},{"line_number":121,"context_line":"            \u0027internal_port\u0027: { \u0027allow_post\u0027:True, \u0027allow_put\u0027: False,"},{"line_number":122,"context_line":"                               \u0027validate\u0027: {\u0027type:int\u0027:None},"},{"line_number":123,"context_line":"                               \u0027is_visible\u0027: True,"},{"line_number":124,"context_line":"                             },"},{"line_number":125,"context_line":"            \u0027protocol\u0027: { \u0027allow_post\u0027:True, \u0027allow_put\u0027: False,"},{"line_number":126,"context_line":"                          \u0027validate\u0027: {"},{"line_number":127,"context_line":"                              \u0027type:values\u0027: neutron_lib.constants.IPTABLES_PROTOCOL_MAP},"},{"line_number":128,"context_line":"                          \u0027is_visible\u0027: True,"},{"line_number":129,"context_line":"                          \u0027convert_to\u0027: converters.convert_to_protocol,"},{"line_number":130,"context_line":"                        },"},{"line_number":131,"context_line":"            \u0027internal_port_id\u0027: {\u0027allow_post\u0027:True, \u0027allow_put\u0027: False,"},{"line_number":132,"context_line":"                               \u0027validate\u0027: {\u0027type:int\u0027:None},"},{"line_number":133,"context_line":"                               \u0027is_visible\u0027: True,"},{"line_number":134,"context_line":"                             },"},{"line_number":135,"context_line":"             }"},{"line_number":136,"context_line":"         }"},{"line_number":137,"context_line":"    }"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"Command Line Client Impact"},{"line_number":140,"context_line":"--------------------------"}],"source_content_type":"text/x-rst","patch_set":22,"id":"df87a7cf_f5905298","line":137,"range":{"start_line":115,"start_character":0,"end_line":137,"end_character":5},"in_reply_to":"df87a7cf_4382adca","updated":"2017-12-02 09:51:53.000000000","message":"My opinion is the same with yours, Miguel.","commit_id":"7bd383154dca34077cef9945e954a9edbd453382"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"db0626a4703575777bc949dc95de9d781a1ea613","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":".. code-block:: python"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    {\u0027floatingips\u0027: {"},{"line_number":116,"context_line":"        \u0027port_forwardings\u0027: {"},{"line_number":117,"context_line":"            \u0027external_port\u0027: { \u0027allow_post\u0027:True, \u0027allow_put\u0027: False,"},{"line_number":118,"context_line":"                               \u0027validate\u0027: {\u0027type:int\u0027:None},"},{"line_number":119,"context_line":"                               \u0027is_visible\u0027: True,"},{"line_number":120,"context_line":"                             },"},{"line_number":121,"context_line":"            \u0027internal_port\u0027: { \u0027allow_post\u0027:True, \u0027allow_put\u0027: False,"},{"line_number":122,"context_line":"                               \u0027validate\u0027: {\u0027type:int\u0027:None},"},{"line_number":123,"context_line":"                               \u0027is_visible\u0027: True,"},{"line_number":124,"context_line":"                             },"},{"line_number":125,"context_line":"            \u0027protocol\u0027: { \u0027allow_post\u0027:True, \u0027allow_put\u0027: False,"},{"line_number":126,"context_line":"                          \u0027validate\u0027: {"},{"line_number":127,"context_line":"                              \u0027type:values\u0027: neutron_lib.constants.IPTABLES_PROTOCOL_MAP},"},{"line_number":128,"context_line":"                          \u0027is_visible\u0027: True,"},{"line_number":129,"context_line":"                          \u0027convert_to\u0027: converters.convert_to_protocol,"},{"line_number":130,"context_line":"                        },"},{"line_number":131,"context_line":"            \u0027internal_port_id\u0027: {\u0027allow_post\u0027:True, \u0027allow_put\u0027: False,"},{"line_number":132,"context_line":"                               \u0027validate\u0027: {\u0027type:int\u0027:None},"},{"line_number":133,"context_line":"                               \u0027is_visible\u0027: True,"},{"line_number":134,"context_line":"                             },"},{"line_number":135,"context_line":"             }"},{"line_number":136,"context_line":"         }"},{"line_number":137,"context_line":"    }"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"Command Line Client Impact"},{"line_number":140,"context_line":"--------------------------"}],"source_content_type":"text/x-rst","patch_set":22,"id":"df87a7cf_805f3440","line":137,"range":{"start_line":115,"start_character":0,"end_line":137,"end_character":5},"in_reply_to":"df87a7cf_f5905298","updated":"2017-12-04 03:53:19.000000000","message":"Thanks very much, miguel and tian. That\u0027s very correct that we need to make a good API behavior for users(User can remove/add the port forwarding one by one, not contain the existing port forwarding fields in the request). And I also think the new subresource is necessary. I think we\u0027d better to choose the things like multi-port-binding did.","commit_id":"7bd383154dca34077cef9945e954a9edbd453382"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"9f06ea9ed5d2f643aad4a5999251cc957129024d","unresolved":false,"context_lines":[{"line_number":242,"context_line":""},{"line_number":243,"context_line":"References"},{"line_number":244,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":245,"context_line":"[1] https://review.openstack.org/#/c/485333/20"},{"line_number":246,"context_line":"[2] https://ask.openstack.org/en/question/75190/neutron-port-forwarding-qrouter-vms/"},{"line_number":247,"context_line":"[3] http://www.gossamer-threads.com/lists/openstack/dev/34307"},{"line_number":248,"context_line":"[4] http://openstack.10931.n7.nabble.com/Neutron-port-forwarding-for-router-td46639.html"},{"line_number":249,"context_line":"[5] http://openstack.10931.n7.nabble.com/Neutron-port-forwarding-from-gateway-to-internal-hosts-td32410.html"},{"line_number":250,"context_line":"[6] https://blueprints.launchpad.net/neutron/+spec/neutron-ovs-dvr"}],"source_content_type":"text/x-rst","patch_set":22,"id":"df87a7cf_be887071","line":250,"range":{"start_line":245,"start_character":0,"end_line":250,"end_character":66},"updated":"2017-12-01 21:45:44.000000000","message":"This is not rendering correctly: http://logs.openstack.org/96/470596/22/check/build-openstack-sphinx-docs/aba46e7/html/specs/queens/port-forwarding.html#references\n\nPlease add blank lines between the items of this list","commit_id":"7bd383154dca34077cef9945e954a9edbd453382"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"db0626a4703575777bc949dc95de9d781a1ea613","unresolved":false,"context_lines":[{"line_number":242,"context_line":""},{"line_number":243,"context_line":"References"},{"line_number":244,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":245,"context_line":"[1] https://review.openstack.org/#/c/485333/20"},{"line_number":246,"context_line":"[2] https://ask.openstack.org/en/question/75190/neutron-port-forwarding-qrouter-vms/"},{"line_number":247,"context_line":"[3] http://www.gossamer-threads.com/lists/openstack/dev/34307"},{"line_number":248,"context_line":"[4] http://openstack.10931.n7.nabble.com/Neutron-port-forwarding-for-router-td46639.html"},{"line_number":249,"context_line":"[5] http://openstack.10931.n7.nabble.com/Neutron-port-forwarding-from-gateway-to-internal-hosts-td32410.html"},{"line_number":250,"context_line":"[6] https://blueprints.launchpad.net/neutron/+spec/neutron-ovs-dvr"}],"source_content_type":"text/x-rst","patch_set":22,"id":"df87a7cf_fda02ba8","line":250,"range":{"start_line":245,"start_character":0,"end_line":250,"end_character":66},"in_reply_to":"df87a7cf_be887071","updated":"2017-12-04 03:53:19.000000000","message":"Done","commit_id":"7bd383154dca34077cef9945e954a9edbd453382"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"6ee15081a79a53d7c541019beb92b7e1ff394a42","unresolved":false,"context_lines":[{"line_number":98,"context_line":"----------------------"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"Neutron ``floatingips`` will be extended with a sub resource"},{"line_number":101,"context_line":"``port_forwardings``, it will contains some fields to expose the"},{"line_number":102,"context_line":"``port_forwarding`` which based on the ``floatingip`` resource. The new sub"},{"line_number":103,"context_line":"resource extension will be implemented in Neutron repo at first, and have a"},{"line_number":104,"context_line":"parent resource of ``floatingip``, then move to neutron-lib repo if possible."}],"source_content_type":"text/x-rst","patch_set":23,"id":"df87a7cf_9fcaf817","line":101,"range":{"start_line":101,"start_character":30,"end_line":101,"end_character":38},"updated":"2017-12-05 23:49:28.000000000","message":"contain","commit_id":"bfcb16cdf06e8d2d78e43d2604829e1029b638d3"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"bf78f0c72c5c9478193d9ecd9682d55baf36a998","unresolved":false,"context_lines":[{"line_number":98,"context_line":"----------------------"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"Neutron ``floatingips`` will be extended with a sub resource"},{"line_number":101,"context_line":"``port_forwardings``, it will contains some fields to expose the"},{"line_number":102,"context_line":"``port_forwarding`` which based on the ``floatingip`` resource. The new sub"},{"line_number":103,"context_line":"resource extension will be implemented in Neutron repo at first, and have a"},{"line_number":104,"context_line":"parent resource of ``floatingip``, then move to neutron-lib repo if possible."}],"source_content_type":"text/x-rst","patch_set":23,"id":"df87a7cf_d5cb806f","line":101,"range":{"start_line":101,"start_character":30,"end_line":101,"end_character":38},"in_reply_to":"df87a7cf_9fcaf817","updated":"2017-12-06 01:49:42.000000000","message":"Done","commit_id":"bfcb16cdf06e8d2d78e43d2604829e1029b638d3"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"6ee15081a79a53d7c541019beb92b7e1ff394a42","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"Neutron ``floatingips`` will be extended with a sub resource"},{"line_number":101,"context_line":"``port_forwardings``, it will contains some fields to expose the"},{"line_number":102,"context_line":"``port_forwarding`` which based on the ``floatingip`` resource. The new sub"},{"line_number":103,"context_line":"resource extension will be implemented in Neutron repo at first, and have a"},{"line_number":104,"context_line":"parent resource of ``floatingip``, then move to neutron-lib repo if possible."},{"line_number":105,"context_line":""}],"source_content_type":"text/x-rst","patch_set":23,"id":"df87a7cf_5f70f0dc","line":102,"range":{"start_line":102,"start_character":20,"end_line":102,"end_character":34},"updated":"2017-12-05 23:49:28.000000000","message":"assigned to the","commit_id":"bfcb16cdf06e8d2d78e43d2604829e1029b638d3"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"bf78f0c72c5c9478193d9ecd9682d55baf36a998","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"Neutron ``floatingips`` will be extended with a sub resource"},{"line_number":101,"context_line":"``port_forwardings``, it will contains some fields to expose the"},{"line_number":102,"context_line":"``port_forwarding`` which based on the ``floatingip`` resource. The new sub"},{"line_number":103,"context_line":"resource extension will be implemented in Neutron repo at first, and have a"},{"line_number":104,"context_line":"parent resource of ``floatingip``, then move to neutron-lib repo if possible."},{"line_number":105,"context_line":""}],"source_content_type":"text/x-rst","patch_set":23,"id":"df87a7cf_75cab46d","line":102,"range":{"start_line":102,"start_character":20,"end_line":102,"end_character":34},"in_reply_to":"df87a7cf_5f70f0dc","updated":"2017-12-06 01:49:42.000000000","message":"Done","commit_id":"bfcb16cdf06e8d2d78e43d2604829e1029b638d3"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"6ee15081a79a53d7c541019beb92b7e1ff394a42","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        }"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"Also, there are something to clear here:"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"* For exist Floating IP resource, how to know whether it contains some"},{"line_number":159,"context_line":"  port-forwarding sub resources, it\u0027s better to add into the existing"},{"line_number":160,"context_line":"  ``floatingip`` attribute map for identify whether the Floating IP resource is"},{"line_number":161,"context_line":"  in-use if enable the new service plugin, it\u0027s for user-friendly."},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"* Users cannot create a port-forwarding resource directly, they must create an"},{"line_number":164,"context_line":"  \u0027empty\u0027 Floating IP resource, then they can CRD port-forwarding operations"}],"source_content_type":"text/x-rst","patch_set":23,"id":"df87a7cf_daebaed9","line":161,"range":{"start_line":156,"start_character":0,"end_line":161,"end_character":66},"updated":"2017-12-05 23:49:28.000000000","message":"I would remove this. You are getting the point much better explained below in L171-225","commit_id":"bfcb16cdf06e8d2d78e43d2604829e1029b638d3"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"bf78f0c72c5c9478193d9ecd9682d55baf36a998","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        }"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"Also, there are something to clear here:"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"* For exist Floating IP resource, how to know whether it contains some"},{"line_number":159,"context_line":"  port-forwarding sub resources, it\u0027s better to add into the existing"},{"line_number":160,"context_line":"  ``floatingip`` attribute map for identify whether the Floating IP resource is"},{"line_number":161,"context_line":"  in-use if enable the new service plugin, it\u0027s for user-friendly."},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"* Users cannot create a port-forwarding resource directly, they must create an"},{"line_number":164,"context_line":"  \u0027empty\u0027 Floating IP resource, then they can CRD port-forwarding operations"}],"source_content_type":"text/x-rst","patch_set":23,"id":"df87a7cf_b5959c42","line":161,"range":{"start_line":156,"start_character":0,"end_line":161,"end_character":66},"in_reply_to":"df87a7cf_daebaed9","updated":"2017-12-06 01:49:42.000000000","message":"Thanks, Miguel. I will remove this paragraph.","commit_id":"bfcb16cdf06e8d2d78e43d2604829e1029b638d3"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"6ee15081a79a53d7c541019beb92b7e1ff394a42","unresolved":false,"context_lines":[{"line_number":160,"context_line":"  ``floatingip`` attribute map for identify whether the Floating IP resource is"},{"line_number":161,"context_line":"  in-use if enable the new service plugin, it\u0027s for user-friendly."},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"* Users cannot create a port-forwarding resource directly, they must create an"},{"line_number":164,"context_line":"  \u0027empty\u0027 Floating IP resource, then they can CRD port-forwarding operations"},{"line_number":165,"context_line":"  based on this Floating IP resource."},{"line_number":166,"context_line":""},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"REST API Impact"}],"source_content_type":"text/x-rst","patch_set":23,"id":"df87a7cf_1a79162e","line":165,"range":{"start_line":163,"start_character":0,"end_line":165,"end_character":37},"updated":"2017-12-05 23:49:28.000000000","message":"I don\u0027t think we need this. since forwarding is a sub-resource, it is understood you need a floating ip","commit_id":"bfcb16cdf06e8d2d78e43d2604829e1029b638d3"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"bf78f0c72c5c9478193d9ecd9682d55baf36a998","unresolved":false,"context_lines":[{"line_number":160,"context_line":"  ``floatingip`` attribute map for identify whether the Floating IP resource is"},{"line_number":161,"context_line":"  in-use if enable the new service plugin, it\u0027s for user-friendly."},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"* Users cannot create a port-forwarding resource directly, they must create an"},{"line_number":164,"context_line":"  \u0027empty\u0027 Floating IP resource, then they can CRD port-forwarding operations"},{"line_number":165,"context_line":"  based on this Floating IP resource."},{"line_number":166,"context_line":""},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"REST API Impact"}],"source_content_type":"text/x-rst","patch_set":23,"id":"df87a7cf_35de6c11","line":165,"range":{"start_line":163,"start_character":0,"end_line":165,"end_character":37},"in_reply_to":"df87a7cf_1a79162e","updated":"2017-12-06 01:49:42.000000000","message":"Correct, I will remove this one too. If we introduce a new field into floating ip, that already show if there is a forwarding resource.","commit_id":"bfcb16cdf06e8d2d78e43d2604829e1029b638d3"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"6ee15081a79a53d7c541019beb92b7e1ff394a42","unresolved":false,"context_lines":[{"line_number":198,"context_line":"        }"},{"line_number":199,"context_line":"    }"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"This new field will be exposed during show/list request of Floating IP"},{"line_number":202,"context_line":"resource."},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"GET /v2.0/floatingips/\u003cfloatingip-uuid\u003e"},{"line_number":205,"context_line":""}],"source_content_type":"text/x-rst","patch_set":23,"id":"df87a7cf_9ae0c6ce","line":202,"range":{"start_line":201,"start_character":38,"end_line":202,"end_character":9},"updated":"2017-12-05 23:49:28.000000000","message":"In the implementation you achieve this by adding something that will look like this:\n\n     @resource_extend.extends([l3.FLOATINGIPS])\n     def _extend_floatingip_dict_forwarding(floatingip_res, floatingip_db):\n\n\nThis method will be called also for floating creation and update, not only for show / list","commit_id":"bfcb16cdf06e8d2d78e43d2604829e1029b638d3"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"bf78f0c72c5c9478193d9ecd9682d55baf36a998","unresolved":false,"context_lines":[{"line_number":198,"context_line":"        }"},{"line_number":199,"context_line":"    }"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"This new field will be exposed during show/list request of Floating IP"},{"line_number":202,"context_line":"resource."},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"GET /v2.0/floatingips/\u003cfloatingip-uuid\u003e"},{"line_number":205,"context_line":""}],"source_content_type":"text/x-rst","patch_set":23,"id":"df87a7cf_75f4f486","line":202,"range":{"start_line":201,"start_character":38,"end_line":202,"end_character":9},"in_reply_to":"df87a7cf_9ae0c6ce","updated":"2017-12-06 01:49:42.000000000","message":"Thanks, miguel. You are right. I may describe not correct here, My thought was not allow to create floatingip with forwarding. And the above attribute map already show this. I think I\u0027d better to reword this line.","commit_id":"bfcb16cdf06e8d2d78e43d2604829e1029b638d3"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"6ee15081a79a53d7c541019beb92b7e1ff394a42","unresolved":false,"context_lines":[{"line_number":220,"context_line":"                {\"internal_ip_address\": \"10.0.0.3\", \"protocol\": \"TCP\","},{"line_number":221,"context_line":"                 \"internal_port\": \"22\", \"external_port\": \"7001\"},"},{"line_number":222,"context_line":"                {\"internal_ip_address\": \"192.168.4.32\", \"protocol\": \"TCP\","},{"line_number":223,"context_line":"                 \"internal_port\": \"22\", \"external_port\": \"7002\"}]"},{"line_number":224,"context_line":"       }"},{"line_number":225,"context_line":"   }"},{"line_number":226,"context_line":""}],"source_content_type":"text/x-rst","patch_set":23,"id":"df87a7cf_3a009a67","line":223,"range":{"start_line":223,"start_character":64,"end_line":223,"end_character":65},"updated":"2017-12-05 23:49:28.000000000","message":"Move this bracket to its own line aligned vertically with the initial \u0027p\u0027 in L219","commit_id":"bfcb16cdf06e8d2d78e43d2604829e1029b638d3"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"bf78f0c72c5c9478193d9ecd9682d55baf36a998","unresolved":false,"context_lines":[{"line_number":220,"context_line":"                {\"internal_ip_address\": \"10.0.0.3\", \"protocol\": \"TCP\","},{"line_number":221,"context_line":"                 \"internal_port\": \"22\", \"external_port\": \"7001\"},"},{"line_number":222,"context_line":"                {\"internal_ip_address\": \"192.168.4.32\", \"protocol\": \"TCP\","},{"line_number":223,"context_line":"                 \"internal_port\": \"22\", \"external_port\": \"7002\"}]"},{"line_number":224,"context_line":"       }"},{"line_number":225,"context_line":"   }"},{"line_number":226,"context_line":""}],"source_content_type":"text/x-rst","patch_set":23,"id":"df87a7cf_f58324cb","line":223,"range":{"start_line":223,"start_character":64,"end_line":223,"end_character":65},"in_reply_to":"df87a7cf_3a009a67","updated":"2017-12-06 01:49:42.000000000","message":"Done","commit_id":"bfcb16cdf06e8d2d78e43d2604829e1029b638d3"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"6ee15081a79a53d7c541019beb92b7e1ff394a42","unresolved":false,"context_lines":[{"line_number":236,"context_line":"::"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"   {"},{"line_number":239,"context_line":"       \"port_forwardings\": {"},{"line_number":240,"context_line":"            {"},{"line_number":241,"context_line":"                \"id\": \"ae34051f-aa6c-4c75-abf5-50dc9ac99ef3\","},{"line_number":242,"context_line":"                \"external_port\": \"7003\","}],"source_content_type":"text/x-rst","patch_set":23,"id":"df87a7cf_7a2b82ea","line":239,"updated":"2017-12-05 23:49:28.000000000","message":"This is a list, so you need an opening bracket here: [","commit_id":"bfcb16cdf06e8d2d78e43d2604829e1029b638d3"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"bf78f0c72c5c9478193d9ecd9682d55baf36a998","unresolved":false,"context_lines":[{"line_number":236,"context_line":"::"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"   {"},{"line_number":239,"context_line":"       \"port_forwardings\": {"},{"line_number":240,"context_line":"            {"},{"line_number":241,"context_line":"                \"id\": \"ae34051f-aa6c-4c75-abf5-50dc9ac99ef3\","},{"line_number":242,"context_line":"                \"external_port\": \"7003\","}],"source_content_type":"text/x-rst","patch_set":23,"id":"df87a7cf_f55c847f","line":239,"in_reply_to":"df87a7cf_7a2b82ea","updated":"2017-12-06 01:49:42.000000000","message":"Yeah, thanks for point out.","commit_id":"bfcb16cdf06e8d2d78e43d2604829e1029b638d3"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"6ee15081a79a53d7c541019beb92b7e1ff394a42","unresolved":false,"context_lines":[{"line_number":252,"context_line":"                \"internal_ip_address\": \"10.0.0.11\","},{"line_number":253,"context_line":"                \"protocol\": \"TCP\","},{"line_number":254,"context_line":"                \"internal_port_id\": \"0c56df5d-ace5-46c8-8f4c-45fa4e334d18\""},{"line_number":255,"context_line":"            }"},{"line_number":256,"context_line":"       }"},{"line_number":257,"context_line":"   }"},{"line_number":258,"context_line":""}],"source_content_type":"text/x-rst","patch_set":23,"id":"df87a7cf_ba482acc","line":255,"updated":"2017-12-05 23:49:28.000000000","message":"and you are going to need a line with a closing bracket ] here.","commit_id":"bfcb16cdf06e8d2d78e43d2604829e1029b638d3"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"bf78f0c72c5c9478193d9ecd9682d55baf36a998","unresolved":false,"context_lines":[{"line_number":252,"context_line":"                \"internal_ip_address\": \"10.0.0.11\","},{"line_number":253,"context_line":"                \"protocol\": \"TCP\","},{"line_number":254,"context_line":"                \"internal_port_id\": \"0c56df5d-ace5-46c8-8f4c-45fa4e334d18\""},{"line_number":255,"context_line":"            }"},{"line_number":256,"context_line":"       }"},{"line_number":257,"context_line":"   }"},{"line_number":258,"context_line":""}],"source_content_type":"text/x-rst","patch_set":23,"id":"df87a7cf_15600832","line":255,"in_reply_to":"df87a7cf_ba482acc","updated":"2017-12-06 01:49:42.000000000","message":"Done","commit_id":"bfcb16cdf06e8d2d78e43d2604829e1029b638d3"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"9a21a2c0258f8574948223ee0be29f50c548dd82","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Example:"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"* client1  172.24.4.2:4001   \u003d\u003e maps to 10.0.0.2 port 80 (VM1)"},{"line_number":29,"context_line":"* client2  172.24.4.2:4002   \u003d\u003e maps to 10.0.0.3 port 80 (VM2)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"This spec will focus on port forwarding based on Floating IPs. A future spec"}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_7391de46","line":28,"updated":"2017-12-12 08:19:41.000000000","message":"The protocol specification is part of the mapping, so I think it also should be shown in the examples here","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"cc0abb8d697ea0140081d7bb15a90f857425592d","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Example:"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"* client1  172.24.4.2:4001   \u003d\u003e maps to 10.0.0.2 port 80 (VM1)"},{"line_number":29,"context_line":"* client2  172.24.4.2:4002   \u003d\u003e maps to 10.0.0.3 port 80 (VM2)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"This spec will focus on port forwarding based on Floating IPs. A future spec"}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_f6995cc3","line":28,"in_reply_to":"df87a7cf_7391de46","updated":"2017-12-12 08:57:43.000000000","message":"Thanks for suggestion, this is just a sample for web server.","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"9a21a2c0258f8574948223ee0be29f50c548dd82","unresolved":false,"context_lines":[{"line_number":43,"context_line":"* Docker supports a port-mapping feature and hence a big eco-system of"},{"line_number":44,"context_line":"  automation orchestration and management plugins leverage it."},{"line_number":45,"context_line":"  We would like to make Neutron compatible for these tools and systems"},{"line_number":46,"context_line":"  and provide a similar API."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"Proposed Change"}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_3397d63c","line":46,"updated":"2017-12-12 08:19:41.000000000","message":"Can we add a reference to the docker specification? If we want to be \"similar\", it would be good to have some concrete sample to compare to.","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"6ad805fbe95dd810c731e84808928f526f26087e","unresolved":false,"context_lines":[{"line_number":43,"context_line":"* Docker supports a port-mapping feature and hence a big eco-system of"},{"line_number":44,"context_line":"  automation orchestration and management plugins leverage it."},{"line_number":45,"context_line":"  We would like to make Neutron compatible for these tools and systems"},{"line_number":46,"context_line":"  and provide a similar API."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"Proposed Change"}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_bce96ee3","line":46,"in_reply_to":"df87a7cf_3397d63c","updated":"2017-12-12 14:16:07.000000000","message":"Guess this would be useful\n\nhttps://docs.docker.com/engine/userguide/networking/default_network/binding/","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"06bbceecd930a15b8233324043083aeafd8eda23","unresolved":false,"context_lines":[{"line_number":43,"context_line":"* Docker supports a port-mapping feature and hence a big eco-system of"},{"line_number":44,"context_line":"  automation orchestration and management plugins leverage it."},{"line_number":45,"context_line":"  We would like to make Neutron compatible for these tools and systems"},{"line_number":46,"context_line":"  and provide a similar API."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"Proposed Change"}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_f61f0607","line":46,"in_reply_to":"df87a7cf_bce96ee3","updated":"2017-12-13 02:13:28.000000000","message":"Great. Until now, few reviewer concerned this.. T_T","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"9a21a2c0258f8574948223ee0be29f50c548dd82","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"Proposed Change"},{"line_number":50,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":51,"context_line":"Introduce port forwarding API and implementation to Floatng IPs."},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"The user can define various port forwarding rules on the Floating IPs containing"},{"line_number":54,"context_line":"the internal/client port and the external/destination port, connected with the"}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_f33deec3","line":51,"updated":"2017-12-12 08:19:41.000000000","message":"Nit: Floating","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"cc0abb8d697ea0140081d7bb15a90f857425592d","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"Proposed Change"},{"line_number":50,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":51,"context_line":"Introduce port forwarding API and implementation to Floatng IPs."},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"The user can define various port forwarding rules on the Floating IPs containing"},{"line_number":54,"context_line":"the internal/client port and the external/destination port, connected with the"}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_96eed01f","line":51,"in_reply_to":"df87a7cf_f33deec3","updated":"2017-12-12 08:57:43.000000000","message":"Done","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"9a21a2c0258f8574948223ee0be29f50c548dd82","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"The user can define various port forwarding rules on the Floating IPs containing"},{"line_number":54,"context_line":"the internal/client port and the external/destination port, connected with the"},{"line_number":55,"context_line":"VM they want to expose."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"We will have two deployment variants:"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_f323ae54","line":55,"updated":"2017-12-12 08:19:41.000000000","message":"Not sure where to place this, but I think it would be good to specify whether we want this to work for FIPs associated to an instance in the classical way too, or only for \"free\" FIPs to avoid confusion.","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"cc0abb8d697ea0140081d7bb15a90f857425592d","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"The user can define various port forwarding rules on the Floating IPs containing"},{"line_number":54,"context_line":"the internal/client port and the external/destination port, connected with the"},{"line_number":55,"context_line":"VM they want to expose."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"We will have two deployment variants:"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_f6c71c95","line":55,"in_reply_to":"df87a7cf_f323ae54","updated":"2017-12-12 08:57:43.000000000","message":"Sorry for that, just concern the \u0027free\u0027 one. If a FIP already associated with a neutron internal port is not allowed. :)","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"9a21a2c0258f8574948223ee0be29f50c548dd82","unresolved":false,"context_lines":[{"line_number":54,"context_line":"the internal/client port and the external/destination port, connected with the"},{"line_number":55,"context_line":"VM they want to expose."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"We will have two deployment variants:"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"a) Legacy Router: For the Generic Router deployment, the port forwarding rule"},{"line_number":60,"context_line":"will be installed in the Router namespace on the network node and perform the"}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_53a61a11","line":57,"updated":"2017-12-12 08:19:41.000000000","message":"What about HA routers?","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"cc0abb8d697ea0140081d7bb15a90f857425592d","unresolved":false,"context_lines":[{"line_number":54,"context_line":"the internal/client port and the external/destination port, connected with the"},{"line_number":55,"context_line":"VM they want to expose."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"We will have two deployment variants:"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"a) Legacy Router: For the Generic Router deployment, the port forwarding rule"},{"line_number":60,"context_line":"will be installed in the Router namespace on the network node and perform the"}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_963c9093","line":57,"in_reply_to":"df87a7cf_53a61a11","updated":"2017-12-12 08:57:43.000000000","message":"I think the iptables rules will be installed on both side, as the vip moving based on keepalived vrrp instance.","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"6ad805fbe95dd810c731e84808928f526f26087e","unresolved":false,"context_lines":[{"line_number":54,"context_line":"the internal/client port and the external/destination port, connected with the"},{"line_number":55,"context_line":"VM they want to expose."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"We will have two deployment variants:"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"a) Legacy Router: For the Generic Router deployment, the port forwarding rule"},{"line_number":60,"context_line":"will be installed in the Router namespace on the network node and perform the"}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_1ca97a8e","line":57,"in_reply_to":"df87a7cf_963c9093","updated":"2017-12-12 14:16:07.000000000","message":"+1 to zhaobo","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"34c48679decb312911931070e1314be486486c86","unresolved":false,"context_lines":[{"line_number":63,"context_line":"b) DVR: After [1] was merged, we have the ability to create centralized"},{"line_number":64,"context_line":"Floating IPs in a DVR supported deployment. This helps in mapping the Compute"},{"line_number":65,"context_line":"nodes where the destination VM is present with the centralized FIP for Port"},{"line_number":66,"context_line":"forwarding. This mechanism will be generalized to centralize a floating IP not"},{"line_number":67,"context_line":"only when it is associated with a port bound to a host with the"},{"line_number":68,"context_line":"\u0027dvr_no_external\u0027 option enabled, but also when port forwarding attributes are"},{"line_number":69,"context_line":"added to it."}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_fabe8db2","line":66,"range":{"start_line":66,"start_character":31,"end_line":66,"end_character":49},"updated":"2017-12-07 04:51:40.000000000","message":"can be removed","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"06dffcdb51ab31635c889dccba89d4f190ba034a","unresolved":false,"context_lines":[{"line_number":65,"context_line":"nodes where the destination VM is present with the centralized FIP for Port"},{"line_number":66,"context_line":"forwarding. This mechanism will be generalized to centralize a floating IP not"},{"line_number":67,"context_line":"only when it is associated with a port bound to a host with the"},{"line_number":68,"context_line":"\u0027dvr_no_external\u0027 option enabled, but also when port forwarding attributes are"},{"line_number":69,"context_line":"added to it."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"In both deployment variants, the port forwarding entry NATs a specific"}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_96140350","line":68,"range":{"start_line":68,"start_character":0,"end_line":68,"end_character":17},"updated":"2017-12-06 23:12:49.000000000","message":"No action needed at this time. Only if you need to roll another patch. Change this to ``dvr_no_external``. It will format better","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"eb0599ad6a57451fe0cc9dad94f055d988f580bc","unresolved":false,"context_lines":[{"line_number":65,"context_line":"nodes where the destination VM is present with the centralized FIP for Port"},{"line_number":66,"context_line":"forwarding. This mechanism will be generalized to centralize a floating IP not"},{"line_number":67,"context_line":"only when it is associated with a port bound to a host with the"},{"line_number":68,"context_line":"\u0027dvr_no_external\u0027 option enabled, but also when port forwarding attributes are"},{"line_number":69,"context_line":"added to it."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"In both deployment variants, the port forwarding entry NATs a specific"}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_d1bff45e","line":68,"range":{"start_line":68,"start_character":0,"end_line":68,"end_character":17},"in_reply_to":"df87a7cf_96140350","updated":"2017-12-07 02:24:08.000000000","message":"OK, thanks, miguel. I will update until other kind reviewers leave some thing in this spec.","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"9a21a2c0258f8574948223ee0be29f50c548dd82","unresolved":false,"context_lines":[{"line_number":69,"context_line":"added to it."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"In both deployment variants, the port forwarding entry NATs a specific"},{"line_number":72,"context_line":"Floating IP:Port to a specific Neutron port (and a private IP that is attached"},{"line_number":73,"context_line":"to this port)."},{"line_number":74,"context_line":"If the Neutron port is deleted, the port forwarding entries that match this port"},{"line_number":75,"context_line":"are also deleted."}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_b3e4463d","line":72,"updated":"2017-12-12 08:19:41.000000000","message":"We have overloaded \"port\" quite a bit, so I think it would be good to clarify this. We want to map \"FIP:proto:extport\" to \"Neutron port:proto:intport\" so the \"port forwarding entry\" corresponds to a 5-tuple.","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"cc0abb8d697ea0140081d7bb15a90f857425592d","unresolved":false,"context_lines":[{"line_number":69,"context_line":"added to it."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"In both deployment variants, the port forwarding entry NATs a specific"},{"line_number":72,"context_line":"Floating IP:Port to a specific Neutron port (and a private IP that is attached"},{"line_number":73,"context_line":"to this port)."},{"line_number":74,"context_line":"If the Neutron port is deleted, the port forwarding entries that match this port"},{"line_number":75,"context_line":"are also deleted."}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_f6571c57","line":72,"in_reply_to":"df87a7cf_b3e4463d","updated":"2017-12-12 08:57:43.000000000","message":"Yeah, that\u0027s the key point, but every forwarding resource contains the same protocol field. Please check the db part.","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"34c48679decb312911931070e1314be486486c86","unresolved":false,"context_lines":[{"line_number":72,"context_line":"Floating IP:Port to a specific Neutron port (and a private IP that is attached"},{"line_number":73,"context_line":"to this port)."},{"line_number":74,"context_line":"If the Neutron port is deleted, the port forwarding entries that match this port"},{"line_number":75,"context_line":"are also deleted."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"Data Model Impact"}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_7a3d9d29","line":75,"range":{"start_line":75,"start_character":0,"end_line":75,"end_character":9},"updated":"2017-12-07 04:51:40.000000000","message":"will also be","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":20421,"name":"brenda_tian","email":"tian.mingming@h3c.com","username":"brenda_tian"},"change_message_id":"a01147e99a977513d12c1eedd4fe74987c7837bb","unresolved":false,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":"The following new table is added as part of the port forwarding feature::"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    CREATE TABLE port_forwarding ("},{"line_number":84,"context_line":"        id CHAR(36) NOT NULL PRI KEY,"},{"line_number":85,"context_line":"        floating_ip_id VARCHAR(36) NOT NULL,"},{"line_number":86,"context_line":"        external_port INT NOT NULL,"}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_ef9ee952","line":83,"updated":"2017-12-06 23:35:06.000000000","message":"This table lacks \"tenant_id\".","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"07738548b6e79fcf7eccc5e82289032058488e82","unresolved":false,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":"The following new table is added as part of the port forwarding feature::"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    CREATE TABLE port_forwarding ("},{"line_number":84,"context_line":"        id CHAR(36) NOT NULL PRI KEY,"},{"line_number":85,"context_line":"        floating_ip_id VARCHAR(36) NOT NULL,"},{"line_number":86,"context_line":"        external_port INT NOT NULL,"}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_c05e3875","line":83,"in_reply_to":"df87a7cf_3af87547","updated":"2017-12-07 07:38:57.000000000","message":"Yeah, we need a logic to cover this case.","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"34c48679decb312911931070e1314be486486c86","unresolved":false,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":"The following new table is added as part of the port forwarding feature::"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    CREATE TABLE port_forwarding ("},{"line_number":84,"context_line":"        id CHAR(36) NOT NULL PRI KEY,"},{"line_number":85,"context_line":"        floating_ip_id VARCHAR(36) NOT NULL,"},{"line_number":86,"context_line":"        external_port INT NOT NULL,"}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_3af87547","line":83,"in_reply_to":"df87a7cf_7493765c","updated":"2017-12-07 04:51:40.000000000","message":"Naah, you are correct zhaobo\n\nActually brenda_tian , we do not need the tenant ID here.\nBut yes, we need to habe a Tenant ID check in our code.\n\nThere are 2 cases here :\na) The floating IP and Internal Neutron port are owned by same tenant\nb) They are owned by different tenant.\n\nNow we need to check if the owner of the intenral port/floating IP exists on a shared network. If not then we need to prevent association of the floating IP to intenral port.","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"eb0599ad6a57451fe0cc9dad94f055d988f580bc","unresolved":false,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":"The following new table is added as part of the port forwarding feature::"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    CREATE TABLE port_forwarding ("},{"line_number":84,"context_line":"        id CHAR(36) NOT NULL PRI KEY,"},{"line_number":85,"context_line":"        floating_ip_id VARCHAR(36) NOT NULL,"},{"line_number":86,"context_line":"        external_port INT NOT NULL,"}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_7493765c","line":83,"in_reply_to":"df87a7cf_ef9ee952","updated":"2017-12-07 02:24:08.000000000","message":"I think this sub resource should be owned by the parent resource, so the tenant_id/project_id should be the same with \u0027floatingip\u0027 resource, also we had already contained a floating_ip_id for a foreigh key for \u0027floatingips\u0027 table, for my opinion, why we need to store the same field and intro a complex tenant resource concept or maybe quota problems? Could you give more advices/desrciptions? Please feel free to correct me.","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":20421,"name":"brenda_tian","email":"tian.mingming@h3c.com","username":"brenda_tian"},"change_message_id":"a01147e99a977513d12c1eedd4fe74987c7837bb","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        external_port INT NOT NULL,"},{"line_number":87,"context_line":"        internal_neutron_port_id VARCHAR(36) NOT NULL FOREIGN KEY,"},{"line_number":88,"context_line":"        protocol CHAR(4) NOT NULL,"},{"line_number":89,"context_line":"        socket VARCHAR(20) NOT NULL,"},{"line_number":90,"context_line":"        CONSTRAINT floating_ip_id_external_port_constraint UNIQUE (floating_ip_id, external_port),"},{"line_number":91,"context_line":"        CONSTRAINT internal_neutron_port_id_socket_constraint UNIQUE ("},{"line_number":92,"context_line":"            internal_neutron_port_id, socket)"}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_2aa91fde","line":89,"updated":"2017-12-06 23:35:06.000000000","message":"for now we already have \"internal_neutron_port_id\" in this table and we use \"internal_port_id\" and \"internal_port\" in the api defination, so I suggest you\u0027d better replace the \"socket\" attribute to be \"internal_port\" in keep with api defination.","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"eb0599ad6a57451fe0cc9dad94f055d988f580bc","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        external_port INT NOT NULL,"},{"line_number":87,"context_line":"        internal_neutron_port_id VARCHAR(36) NOT NULL FOREIGN KEY,"},{"line_number":88,"context_line":"        protocol CHAR(4) NOT NULL,"},{"line_number":89,"context_line":"        socket VARCHAR(20) NOT NULL,"},{"line_number":90,"context_line":"        CONSTRAINT floating_ip_id_external_port_constraint UNIQUE (floating_ip_id, external_port),"},{"line_number":91,"context_line":"        CONSTRAINT internal_neutron_port_id_socket_constraint UNIQUE ("},{"line_number":92,"context_line":"            internal_neutron_port_id, socket)"}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_9754fcff","line":89,"in_reply_to":"df87a7cf_2aa91fde","updated":"2017-12-07 02:24:08.000000000","message":"I know you point. Let\u0027s wait for the comments from other reviewers. Then we can decide if this api defination is acceptable, and change it if possible. Please also check the comments in the same parts of PS17. That\u0027s why we need \u0027socket\u0027 field here.","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"34c48679decb312911931070e1314be486486c86","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        external_port INT NOT NULL,"},{"line_number":87,"context_line":"        internal_neutron_port_id VARCHAR(36) NOT NULL FOREIGN KEY,"},{"line_number":88,"context_line":"        protocol CHAR(4) NOT NULL,"},{"line_number":89,"context_line":"        socket VARCHAR(20) NOT NULL,"},{"line_number":90,"context_line":"        CONSTRAINT floating_ip_id_external_port_constraint UNIQUE (floating_ip_id, external_port),"},{"line_number":91,"context_line":"        CONSTRAINT internal_neutron_port_id_socket_constraint UNIQUE ("},{"line_number":92,"context_line":"            internal_neutron_port_id, socket)"}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_9ab50181","line":89,"in_reply_to":"df87a7cf_9754fcff","updated":"2017-12-07 04:51:40.000000000","message":"Honestly, I would not like to expose \u0027socket\u0027 in the API definition becuase most users are unfamiliar to socket at user layer.\nwe can deal with it internally though.","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":20421,"name":"brenda_tian","email":"tian.mingming@h3c.com","username":"brenda_tian"},"change_message_id":"0729bffa1464a4d9d4add04eafb5711a2099145d","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        external_port INT NOT NULL,"},{"line_number":87,"context_line":"        internal_neutron_port_id VARCHAR(36) NOT NULL FOREIGN KEY,"},{"line_number":88,"context_line":"        protocol CHAR(4) NOT NULL,"},{"line_number":89,"context_line":"        socket VARCHAR(20) NOT NULL,"},{"line_number":90,"context_line":"        CONSTRAINT floating_ip_id_external_port_constraint UNIQUE (floating_ip_id, external_port),"},{"line_number":91,"context_line":"        CONSTRAINT internal_neutron_port_id_socket_constraint UNIQUE ("},{"line_number":92,"context_line":"            internal_neutron_port_id, socket)"}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_133d402a","line":89,"in_reply_to":"df87a7cf_9754fcff","updated":"2017-12-08 04:47:00.000000000","message":"zhaobo, I have checked the corresponding part of PS17, Reedip suggested using \u0027socket\u0027 to replace (IP:Portnumber),  now \u0027internal_neutron_port_id\u0027 is taken as an alone attribute, so is \u0027internal_port\u0027 I think. Let\u0027s wait for other reviews\u0027 opinion.","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"07738548b6e79fcf7eccc5e82289032058488e82","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        external_port INT NOT NULL,"},{"line_number":87,"context_line":"        internal_neutron_port_id VARCHAR(36) NOT NULL FOREIGN KEY,"},{"line_number":88,"context_line":"        protocol CHAR(4) NOT NULL,"},{"line_number":89,"context_line":"        socket VARCHAR(20) NOT NULL,"},{"line_number":90,"context_line":"        CONSTRAINT floating_ip_id_external_port_constraint UNIQUE (floating_ip_id, external_port),"},{"line_number":91,"context_line":"        CONSTRAINT internal_neutron_port_id_socket_constraint UNIQUE ("},{"line_number":92,"context_line":"            internal_neutron_port_id, socket)"}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_6bc70d98","line":89,"in_reply_to":"df87a7cf_9ab50181","updated":"2017-12-07 07:38:57.000000000","message":"Yeah, we can only expose the \"internal_ip_address\" and \"internal_port_id\"if there are multi fixed ips on the port, \"internal_port\"(protocol), \"external-port\"(protocol), \"protocol\".\n\nFor the UNIQUE KEY of this table, it means that:\nFIP:EPORT  1 : 1  PORT-FIXIP:IPORT \nIf there are some records already in this table.\nPORT-FIXIP:IPORT1 \u003c-\u003e FIP:EPORT1     EXIST\nPORT-FIXIP:IPORT2 \u003c-\u003e FIP:EPORT2     EXIST\n\nNEW REQUEST：\nPORT2-FIXIP:IPORT1 \u003c-\u003e FIP:EPORT1    NOT ALLOW\nPORT-FIXIP:IPORT1 \u003c-\u003e FIP2:EPORT1    NOT ALLOW\nPORT-FIXIP2:IPORT1 \u003c-\u003e FIP:EPORT3    ALLOW\nPORT2-FIXIP:IPORT1 \u003c-\u003e FIP:EPORT4    ALLOW","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"34c48679decb312911931070e1314be486486c86","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"Neutron ``floatingips`` will be extended with a sub resource"},{"line_number":101,"context_line":"``port_forwardings``, it will contain some fields to expose the"},{"line_number":102,"context_line":"``port_forwarding`` assigned to the ``floatingip`` resource. The new sub"},{"line_number":103,"context_line":"resource extension will be implemented in Neutron repo at first, and have a"},{"line_number":104,"context_line":"parent resource of ``floatingip``, then move to neutron-lib repo if possible."},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"For this new function, a new service plugin will be introduced, and the"},{"line_number":107,"context_line":"following methods will be added:"}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_baba456b","line":104,"range":{"start_line":102,"start_character":60,"end_line":104,"end_character":77},"updated":"2017-12-07 04:51:40.000000000","message":"this is not required.\nthis is internal to our work, so lets skip this section","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"34c48679decb312911931070e1314be486486c86","unresolved":false,"context_lines":[{"line_number":106,"context_line":"For this new function, a new service plugin will be introduced, and the"},{"line_number":107,"context_line":"following methods will be added:"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"* \u0027create_floatingip_port_forwarding()\u0027"},{"line_number":110,"context_line":"* \u0027delete_floatingip_port_forwarding()\u0027"},{"line_number":111,"context_line":"* \u0027get_floatingip_port_forwarding()\u0027"},{"line_number":112,"context_line":"* \u0027get_floatingip_port_forwardings()\u0027"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"For update operation, we will extend the function in the future if possible."},{"line_number":115,"context_line":"But for the simple beginning, just support create/delete/get functions."}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_7a759dca","line":112,"range":{"start_line":109,"start_character":0,"end_line":112,"end_character":37},"updated":"2017-12-07 04:51:40.000000000","message":"Not exactly a fan of Create and Delete because we are not exactly creating a floating Ip or deleting it.\nWe are associating floatingip for port fowarding.\n\nSo maybe associate_floating_ip_for_port_fwd, disassocaite_floaitng_ip_for_port_fwd","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"07738548b6e79fcf7eccc5e82289032058488e82","unresolved":false,"context_lines":[{"line_number":106,"context_line":"For this new function, a new service plugin will be introduced, and the"},{"line_number":107,"context_line":"following methods will be added:"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"* \u0027create_floatingip_port_forwarding()\u0027"},{"line_number":110,"context_line":"* \u0027delete_floatingip_port_forwarding()\u0027"},{"line_number":111,"context_line":"* \u0027get_floatingip_port_forwarding()\u0027"},{"line_number":112,"context_line":"* \u0027get_floatingip_port_forwardings()\u0027"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"For update operation, we will extend the function in the future if possible."},{"line_number":115,"context_line":"But for the simple beginning, just support create/delete/get functions."}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_eb38fda0","line":112,"range":{"start_line":109,"start_character":0,"end_line":112,"end_character":37},"in_reply_to":"df87a7cf_7a759dca","updated":"2017-12-07 07:38:57.000000000","message":"Good point.","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"1c3f9d18862fc42f36e2d95a51c3f222e5786627","unresolved":false,"context_lines":[{"line_number":106,"context_line":"For this new function, a new service plugin will be introduced, and the"},{"line_number":107,"context_line":"following methods will be added:"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"* \u0027create_floatingip_port_forwarding()\u0027"},{"line_number":110,"context_line":"* \u0027delete_floatingip_port_forwarding()\u0027"},{"line_number":111,"context_line":"* \u0027get_floatingip_port_forwarding()\u0027"},{"line_number":112,"context_line":"* \u0027get_floatingip_port_forwardings()\u0027"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"For update operation, we will extend the function in the future if possible."},{"line_number":115,"context_line":"But for the simple beginning, just support create/delete/get functions."}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_15bb760e","line":112,"range":{"start_line":109,"start_character":0,"end_line":112,"end_character":37},"in_reply_to":"df87a7cf_eb38fda0","updated":"2017-12-13 10:12:03.000000000","message":"hmmm..let\u0027s still keep this choice for a while. And tian\u0027s comments need concerned.","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"34c48679decb312911931070e1314be486486c86","unresolved":false,"context_lines":[{"line_number":111,"context_line":"* \u0027get_floatingip_port_forwarding()\u0027"},{"line_number":112,"context_line":"* \u0027get_floatingip_port_forwardings()\u0027"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"For update operation, we will extend the function in the future if possible."},{"line_number":115,"context_line":"But for the simple beginning, just support create/delete/get functions."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"So the attributes map of new sub resource would be like:"}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_3a7b95be","line":114,"range":{"start_line":114,"start_character":20,"end_line":114,"end_character":76},"updated":"2017-12-07 04:51:40.000000000","message":"sounds good enough","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"9a21a2c0258f8574948223ee0be29f50c548dd82","unresolved":false,"context_lines":[{"line_number":127,"context_line":"                                     \u0027validate\u0027: {\u0027type:int\u0027: None},"},{"line_number":128,"context_line":"                                     \u0027is_visible\u0027: True},"},{"line_number":129,"context_line":"                \u0027internal_port\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":130,"context_line":"                                     \u0027validate\u0027: {\u0027type:int\u0027: None},"},{"line_number":131,"context_line":"                                     \u0027is_visible\u0027: True},"},{"line_number":132,"context_line":"                \u0027internal_ip_address\u0027: {\u0027allow_post\u0027: True,"},{"line_number":133,"context_line":"                                            \u0027allow_put\u0027: False,"}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_5315ba47","line":130,"updated":"2017-12-12 08:19:41.000000000","message":"IMO you need to validate 1 \u003c\u003d port \u003c\u003d 65535","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"cc0abb8d697ea0140081d7bb15a90f857425592d","unresolved":false,"context_lines":[{"line_number":127,"context_line":"                                     \u0027validate\u0027: {\u0027type:int\u0027: None},"},{"line_number":128,"context_line":"                                     \u0027is_visible\u0027: True},"},{"line_number":129,"context_line":"                \u0027internal_port\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":130,"context_line":"                                     \u0027validate\u0027: {\u0027type:int\u0027: None},"},{"line_number":131,"context_line":"                                     \u0027is_visible\u0027: True},"},{"line_number":132,"context_line":"                \u0027internal_ip_address\u0027: {\u0027allow_post\u0027: True,"},{"line_number":133,"context_line":"                                            \u0027allow_put\u0027: False,"}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_b6e2f49e","line":130,"in_reply_to":"df87a7cf_5315ba47","updated":"2017-12-12 08:57:43.000000000","message":"Correct. will update \u0027external_port\u0027 and \u0027internal_port\u0027","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"9a21a2c0258f8574948223ee0be29f50c548dd82","unresolved":false,"context_lines":[{"line_number":136,"context_line":"                                            \u0027is_visible\u0027: True},"},{"line_number":137,"context_line":"                \u0027protocol\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":138,"context_line":"                               \u0027validate\u0027: {"},{"line_number":139,"context_line":"                                  \u0027type:values\u0027: neutron_lib.constants.IPTABLES_PROTOCOL_MAP},"},{"line_number":140,"context_line":"                               \u0027is_visible\u0027: True,"},{"line_number":141,"context_line":"                               \u0027convert_to\u0027: converters.convert_to_protocol},"},{"line_number":142,"context_line":"                \u0027internal_port_id\u0027: {\u0027allow_post\u0027: True,"}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_b32c46ac","line":139,"updated":"2017-12-12 08:19:41.000000000","message":"Isn\u0027t that too wide a range? NATting icmp doesn\u0027t really seem useful to me","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"cc0abb8d697ea0140081d7bb15a90f857425592d","unresolved":false,"context_lines":[{"line_number":136,"context_line":"                                            \u0027is_visible\u0027: True},"},{"line_number":137,"context_line":"                \u0027protocol\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":138,"context_line":"                               \u0027validate\u0027: {"},{"line_number":139,"context_line":"                                  \u0027type:values\u0027: neutron_lib.constants.IPTABLES_PROTOCOL_MAP},"},{"line_number":140,"context_line":"                               \u0027is_visible\u0027: True,"},{"line_number":141,"context_line":"                               \u0027convert_to\u0027: converters.convert_to_protocol},"},{"line_number":142,"context_line":"                \u0027internal_port_id\u0027: {\u0027allow_post\u0027: True,"}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_f605dc46","line":139,"in_reply_to":"df87a7cf_b32c46ac","updated":"2017-12-12 08:57:43.000000000","message":"we just want not to limit the user. But you are right, update then. Thanks","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":20421,"name":"brenda_tian","email":"tian.mingming@h3c.com","username":"brenda_tian"},"change_message_id":"a01147e99a977513d12c1eedd4fe74987c7837bb","unresolved":false,"context_lines":[{"line_number":140,"context_line":"                               \u0027is_visible\u0027: True,"},{"line_number":141,"context_line":"                               \u0027convert_to\u0027: converters.convert_to_protocol},"},{"line_number":142,"context_line":"                \u0027internal_port_id\u0027: {\u0027allow_post\u0027: True,"},{"line_number":143,"context_line":"                                        \u0027allow_put\u0027: False,"},{"line_number":144,"context_line":"                                        \u0027validate\u0027: {\u0027type:int\u0027:None},"},{"line_number":145,"context_line":"                                        \u0027is_visible\u0027: True},"},{"line_number":146,"context_line":"            }"}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_7190694f","line":143,"updated":"2017-12-06 23:35:06.000000000","message":"Do we need to change \"internal_port_id\" to \"internal_neutron_port_id\" to keep with data model ?","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"eb0599ad6a57451fe0cc9dad94f055d988f580bc","unresolved":false,"context_lines":[{"line_number":140,"context_line":"                               \u0027is_visible\u0027: True,"},{"line_number":141,"context_line":"                               \u0027convert_to\u0027: converters.convert_to_protocol},"},{"line_number":142,"context_line":"                \u0027internal_port_id\u0027: {\u0027allow_post\u0027: True,"},{"line_number":143,"context_line":"                                        \u0027allow_put\u0027: False,"},{"line_number":144,"context_line":"                                        \u0027validate\u0027: {\u0027type:int\u0027:None},"},{"line_number":145,"context_line":"                                        \u0027is_visible\u0027: True},"},{"line_number":146,"context_line":"            }"}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_97063c1c","line":143,"in_reply_to":"df87a7cf_7190694f","updated":"2017-12-07 02:24:08.000000000","message":"I think it should be sync. Let\u0027s wait for other reviewers at this time.","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"34c48679decb312911931070e1314be486486c86","unresolved":false,"context_lines":[{"line_number":140,"context_line":"                               \u0027is_visible\u0027: True,"},{"line_number":141,"context_line":"                               \u0027convert_to\u0027: converters.convert_to_protocol},"},{"line_number":142,"context_line":"                \u0027internal_port_id\u0027: {\u0027allow_post\u0027: True,"},{"line_number":143,"context_line":"                                        \u0027allow_put\u0027: False,"},{"line_number":144,"context_line":"                                        \u0027validate\u0027: {\u0027type:int\u0027:None},"},{"line_number":145,"context_line":"                                        \u0027is_visible\u0027: True},"},{"line_number":146,"context_line":"            }"}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_5a61b904","line":143,"in_reply_to":"df87a7cf_7190694f","updated":"2017-12-07 04:51:40.000000000","message":"that is a good point.\nWe can keep neutron, but I would prefer just internal_port_id","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"34c48679decb312911931070e1314be486486c86","unresolved":false,"context_lines":[{"line_number":160,"context_line":"    - CRUD"},{"line_number":161,"context_line":"    - Default Value"},{"line_number":162,"context_line":"    - Description"},{"line_number":163,"context_line":"  * - port_forwardings"},{"line_number":164,"context_line":"    - List"},{"line_number":165,"context_line":"    - R"},{"line_number":166,"context_line":"    - None"}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_da32a910","line":163,"range":{"start_line":163,"start_character":2,"end_line":163,"end_character":3},"updated":"2017-12-07 04:51:40.000000000","message":"These bullets seem unnecessary right now","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"34c48679decb312911931070e1314be486486c86","unresolved":false,"context_lines":[{"line_number":173,"context_line":""},{"line_number":174,"context_line":"   RESOURCE_ATTRIBUTE_MAP \u003d {"},{"line_number":175,"context_line":"        \u0027floatingips\u0027: {"},{"line_number":176,"context_line":"            \u0027port_forwardings\u0027: {\u0027allow_post\u0027: False,"},{"line_number":177,"context_line":"                                    \u0027allow_put\u0027: False,"},{"line_number":178,"context_line":"                                    \u0027is_visible\u0027: True, \u0027default\u0027: None}"},{"line_number":179,"context_line":"        }"},{"line_number":180,"context_line":"   }"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"This new field will be exposed in the response during GET/POST/PUT requests of"},{"line_number":183,"context_line":"Floating IP resource. For example, GET a Floating IP:"}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_fa376dfe","line":180,"range":{"start_line":176,"start_character":8,"end_line":180,"end_character":4},"updated":"2017-12-07 04:51:40.000000000","message":"this can be put as a list as described in PS#22","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"6ad805fbe95dd810c731e84808928f526f26087e","unresolved":false,"context_lines":[{"line_number":173,"context_line":""},{"line_number":174,"context_line":"   RESOURCE_ATTRIBUTE_MAP \u003d {"},{"line_number":175,"context_line":"        \u0027floatingips\u0027: {"},{"line_number":176,"context_line":"            \u0027port_forwardings\u0027: {\u0027allow_post\u0027: False,"},{"line_number":177,"context_line":"                                    \u0027allow_put\u0027: False,"},{"line_number":178,"context_line":"                                    \u0027is_visible\u0027: True, \u0027default\u0027: None}"},{"line_number":179,"context_line":"        }"},{"line_number":180,"context_line":"   }"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"This new field will be exposed in the response during GET/POST/PUT requests of"},{"line_number":183,"context_line":"Floating IP resource. For example, GET a Floating IP:"}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_fc9ff64c","line":180,"range":{"start_line":176,"start_character":8,"end_line":180,"end_character":4},"in_reply_to":"df87a7cf_4ba7a9a8","updated":"2017-12-12 14:16:07.000000000","message":"So you mean that the response oin PS#22 is incorrect?\nOr is that the list of port-forwarding be applicable only for Create/Get?","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"1251a40483f20eb0fac91105837dfec90b4c75ee","unresolved":false,"context_lines":[{"line_number":173,"context_line":""},{"line_number":174,"context_line":"   RESOURCE_ATTRIBUTE_MAP \u003d {"},{"line_number":175,"context_line":"        \u0027floatingips\u0027: {"},{"line_number":176,"context_line":"            \u0027port_forwardings\u0027: {\u0027allow_post\u0027: False,"},{"line_number":177,"context_line":"                                    \u0027allow_put\u0027: False,"},{"line_number":178,"context_line":"                                    \u0027is_visible\u0027: True, \u0027default\u0027: None}"},{"line_number":179,"context_line":"        }"},{"line_number":180,"context_line":"   }"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"This new field will be exposed in the response during GET/POST/PUT requests of"},{"line_number":183,"context_line":"Floating IP resource. For example, GET a Floating IP:"}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_e3450145","line":180,"range":{"start_line":176,"start_character":8,"end_line":180,"end_character":4},"in_reply_to":"df87a7cf_d6df62d4","updated":"2017-12-13 05:08:03.000000000","message":"Honestly, changing the Resource attribute map LATER would be simply dangerous.\nIf we are of the opinion that the Port Fowarding can be a LIST , then please express the same here.\n\nAlso, you stated that we can create the Port-forwarding as a list, but you mentioning allow-post as False.\nIs that correct?","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"3d9b3eade7cfe73c89ae79dcb39064d27809d7f6","unresolved":false,"context_lines":[{"line_number":173,"context_line":""},{"line_number":174,"context_line":"   RESOURCE_ATTRIBUTE_MAP \u003d {"},{"line_number":175,"context_line":"        \u0027floatingips\u0027: {"},{"line_number":176,"context_line":"            \u0027port_forwardings\u0027: {\u0027allow_post\u0027: False,"},{"line_number":177,"context_line":"                                    \u0027allow_put\u0027: False,"},{"line_number":178,"context_line":"                                    \u0027is_visible\u0027: True, \u0027default\u0027: None}"},{"line_number":179,"context_line":"        }"},{"line_number":180,"context_line":"   }"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"This new field will be exposed in the response during GET/POST/PUT requests of"},{"line_number":183,"context_line":"Floating IP resource. For example, GET a Floating IP:"}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_9e29ecf3","line":180,"range":{"start_line":176,"start_character":8,"end_line":180,"end_character":4},"in_reply_to":"df87a7cf_e3450145","updated":"2017-12-13 06:30:15.000000000","message":"No, no. Sorry. I said if we create the forwardings as a list during create/update floatingip, then we will hit the issue. I suggest we not allow that. User can only create the forwardings one by one with the new API, and the FloatingIP GET response will contain the port_forwardings field which is read only. User can not change the forwarding resource through CRU FloatingIP. \nAha, sorry for misleading. Please recheck. :)","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"07738548b6e79fcf7eccc5e82289032058488e82","unresolved":false,"context_lines":[{"line_number":173,"context_line":""},{"line_number":174,"context_line":"   RESOURCE_ATTRIBUTE_MAP \u003d {"},{"line_number":175,"context_line":"        \u0027floatingips\u0027: {"},{"line_number":176,"context_line":"            \u0027port_forwardings\u0027: {\u0027allow_post\u0027: False,"},{"line_number":177,"context_line":"                                    \u0027allow_put\u0027: False,"},{"line_number":178,"context_line":"                                    \u0027is_visible\u0027: True, \u0027default\u0027: None}"},{"line_number":179,"context_line":"        }"},{"line_number":180,"context_line":"   }"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"This new field will be exposed in the response during GET/POST/PUT requests of"},{"line_number":183,"context_line":"Floating IP resource. For example, GET a Floating IP:"}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_4ba7a9a8","line":180,"range":{"start_line":176,"start_character":8,"end_line":180,"end_character":4},"in_reply_to":"df87a7cf_fa376dfe","updated":"2017-12-07 07:38:57.000000000","message":"OH, Do we need to put a list forwardings during FLOATING IP update ? The new url had been introduced, use need only request forwarding resource through the specific url. I think we cannot allow this. We only can see that in floatingip response, not allow to change.","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"06bbceecd930a15b8233324043083aeafd8eda23","unresolved":false,"context_lines":[{"line_number":173,"context_line":""},{"line_number":174,"context_line":"   RESOURCE_ATTRIBUTE_MAP \u003d {"},{"line_number":175,"context_line":"        \u0027floatingips\u0027: {"},{"line_number":176,"context_line":"            \u0027port_forwardings\u0027: {\u0027allow_post\u0027: False,"},{"line_number":177,"context_line":"                                    \u0027allow_put\u0027: False,"},{"line_number":178,"context_line":"                                    \u0027is_visible\u0027: True, \u0027default\u0027: None}"},{"line_number":179,"context_line":"        }"},{"line_number":180,"context_line":"   }"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"This new field will be exposed in the response during GET/POST/PUT requests of"},{"line_number":183,"context_line":"Floating IP resource. For example, GET a Floating IP:"}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_d6df62d4","line":180,"range":{"start_line":176,"start_character":8,"end_line":180,"end_character":4},"in_reply_to":"df87a7cf_fc9ff64c","updated":"2017-12-13 02:13:28.000000000","message":"Sorry for that, I think it is incorrect.\nThe initial thought for this part is just can show/list the floatingip resource, that will be contained the \u0027port_forwardings\u0027 fields in the response body. Also we mentioned in L114 not support update portforwarding in the first implementation. So that means if a \"free\" existing Floating IP resource, user can just allow to create the forwarding resource with the existing Floating IP and new API. So user can not update the port_forwardings field when create/update FloatingIP resource, and if we support to apply port-forwarding in create/update FloatingIP, it will hit the issue like port\u0027s \u0027fixed_ips\u0027 part. That means users may need to update the whole part of port-forwarding in FLoatingIP resource, like:\n\nexisting port-forwarding\n\u0027port-forwarding\u0027: [{ForwardingA},{ForwardingB},{ForwardingC}]\n\nthen user want to update ForwardingB, they must pass the whole list into the request.\n\u0027port-forwarding\u0027: [{ForwardingA},{NEWForwardingB},{ForwardingC}]\n\nI just want to limit this in my opinion, Thoughts?","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"9a21a2c0258f8574948223ee0be29f50c548dd82","unresolved":false,"context_lines":[{"line_number":200,"context_line":"            \"port_forwardings\": ["},{"line_number":201,"context_line":"                {"},{"line_number":202,"context_line":"                    \"internal_ip_address\": \"10.0.0.3\","},{"line_number":203,"context_line":"                    \"protocol\": \"TCP\","},{"line_number":204,"context_line":"                    \"internal_port\": \"22\","},{"line_number":205,"context_line":"                    \"external_port\": \"7001\""},{"line_number":206,"context_line":"                },"}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_d300ea04","line":203,"updated":"2017-12-12 08:19:41.000000000","message":"This should be \"tcp\" to be consistent with the constants that we have.","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"cc0abb8d697ea0140081d7bb15a90f857425592d","unresolved":false,"context_lines":[{"line_number":200,"context_line":"            \"port_forwardings\": ["},{"line_number":201,"context_line":"                {"},{"line_number":202,"context_line":"                    \"internal_ip_address\": \"10.0.0.3\","},{"line_number":203,"context_line":"                    \"protocol\": \"TCP\","},{"line_number":204,"context_line":"                    \"internal_port\": \"22\","},{"line_number":205,"context_line":"                    \"external_port\": \"7001\""},{"line_number":206,"context_line":"                },"}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_d6f6985d","line":203,"in_reply_to":"df87a7cf_d300ea04","updated":"2017-12-12 08:57:43.000000000","message":"Done","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"9a21a2c0258f8574948223ee0be29f50c548dd82","unresolved":false,"context_lines":[{"line_number":206,"context_line":"                },"},{"line_number":207,"context_line":"                {"},{"line_number":208,"context_line":"                    \"internal_ip_address\": \"192.168.4.32\","},{"line_number":209,"context_line":"                    \"protocol\": \"TCP\","},{"line_number":210,"context_line":"                    \"internal_port\": \"22\","},{"line_number":211,"context_line":"                    \"external_port\": \"7002\""},{"line_number":212,"context_line":"                }"}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_3607c41a","line":209,"updated":"2017-12-12 08:19:41.000000000","message":"dito","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"cc0abb8d697ea0140081d7bb15a90f857425592d","unresolved":false,"context_lines":[{"line_number":206,"context_line":"                },"},{"line_number":207,"context_line":"                {"},{"line_number":208,"context_line":"                    \"internal_ip_address\": \"192.168.4.32\","},{"line_number":209,"context_line":"                    \"protocol\": \"TCP\","},{"line_number":210,"context_line":"                    \"internal_port\": \"22\","},{"line_number":211,"context_line":"                    \"external_port\": \"7002\""},{"line_number":212,"context_line":"                }"}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_76978ced","line":209,"in_reply_to":"df87a7cf_3607c41a","updated":"2017-12-12 08:57:43.000000000","message":"Done","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"34c48679decb312911931070e1314be486486c86","unresolved":false,"context_lines":[{"line_number":270,"context_line":"::"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"   {"},{"line_number":273,"context_line":"       \"port_forwarding\": {"},{"line_number":274,"context_line":"            \"id\": \"ae34051f-aa6c-4c75-abf5-50dc9ac99ef3\","},{"line_number":275,"context_line":"            \"external_port\": \"7003\","},{"line_number":276,"context_line":"            \"internal_port\": \"22\","}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_3a29559a","line":273,"range":{"start_line":273,"start_character":8,"end_line":273,"end_character":23},"updated":"2017-12-07 04:51:40.000000000","message":"port_fowarding exists in this response.\nBut it is missing in the response given in L229-244\nAdd port-fowarding as a value of port-fowardings, I think","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"07738548b6e79fcf7eccc5e82289032058488e82","unresolved":false,"context_lines":[{"line_number":270,"context_line":"::"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"   {"},{"line_number":273,"context_line":"       \"port_forwarding\": {"},{"line_number":274,"context_line":"            \"id\": \"ae34051f-aa6c-4c75-abf5-50dc9ac99ef3\","},{"line_number":275,"context_line":"            \"external_port\": \"7003\","},{"line_number":276,"context_line":"            \"internal_port\": \"22\","}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_4beb29db","line":273,"range":{"start_line":273,"start_character":8,"end_line":273,"end_character":23},"in_reply_to":"df87a7cf_3a29559a","updated":"2017-12-07 07:38:57.000000000","message":"The main idea is following the multi port binding API looks like. Such as https://specs.openstack.org/openstack/neutron-specs/specs/backlog/pike/portbinding_information_for_nova.html#list-bindings\nSo let\u0027s left it here for a while. :)","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"34c48679decb312911931070e1314be486486c86","unresolved":false,"context_lines":[{"line_number":385,"context_line":"~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":386,"context_line":""},{"line_number":387,"context_line":"DELETE /v2.0/floatingips/\u003cfloatingip-uuid\u003e/port_forwardings/\u003cport-forwarding-id\u003e"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"This operation does not accept a request body and does not return a response"},{"line_number":390,"context_line":"body."},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"Effects on Existing Floating IP APIs"},{"line_number":393,"context_line":"------------------------------------"}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_fa20cdae","line":390,"range":{"start_line":388,"start_character":0,"end_line":390,"end_character":5},"updated":"2017-12-07 04:51:40.000000000","message":"Delete operation would only DISASSOCIATE the Intenral Neutron port from Floating IP and not exactly delete it.\n\nHowever, deleting the floating IP would surely remove the association.","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"6f3c1320ddab75767c87e80dcfb786cdcbedfa68","unresolved":false,"context_lines":[{"line_number":385,"context_line":"~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":386,"context_line":""},{"line_number":387,"context_line":"DELETE /v2.0/floatingips/\u003cfloatingip-uuid\u003e/port_forwardings/\u003cport-forwarding-id\u003e"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"This operation does not accept a request body and does not return a response"},{"line_number":390,"context_line":"body."},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"Effects on Existing Floating IP APIs"},{"line_number":393,"context_line":"------------------------------------"}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_520ef432","line":390,"range":{"start_line":388,"start_character":0,"end_line":390,"end_character":5},"in_reply_to":"df87a7cf_6f81cfc3","updated":"2017-12-13 09:32:35.000000000","message":"Yeah. I forget that we will do records remove from db table actually. I also consider this during update this spec.","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":20421,"name":"brenda_tian","email":"tian.mingming@h3c.com","username":"brenda_tian"},"change_message_id":"61c6ceaa6e49a100a5abd73c134fb07d0b7140d0","unresolved":false,"context_lines":[{"line_number":385,"context_line":"~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":386,"context_line":""},{"line_number":387,"context_line":"DELETE /v2.0/floatingips/\u003cfloatingip-uuid\u003e/port_forwardings/\u003cport-forwarding-id\u003e"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"This operation does not accept a request body and does not return a response"},{"line_number":390,"context_line":"body."},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"Effects on Existing Floating IP APIs"},{"line_number":393,"context_line":"------------------------------------"}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_6f81cfc3","line":390,"range":{"start_line":388,"start_character":0,"end_line":390,"end_character":5},"in_reply_to":"df87a7cf_fa20cdae","updated":"2017-12-13 09:25:36.000000000","message":"In fact, there we should not use associate/disassociate to replace create/delete, because one piece of port-forwarding means one forwarding rule which is a subresource of floatingip.","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"07738548b6e79fcf7eccc5e82289032058488e82","unresolved":false,"context_lines":[{"line_number":385,"context_line":"~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":386,"context_line":""},{"line_number":387,"context_line":"DELETE /v2.0/floatingips/\u003cfloatingip-uuid\u003e/port_forwardings/\u003cport-forwarding-id\u003e"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"This operation does not accept a request body and does not return a response"},{"line_number":390,"context_line":"body."},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"Effects on Existing Floating IP APIs"},{"line_number":393,"context_line":"------------------------------------"}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_8bf7f1d3","line":390,"range":{"start_line":388,"start_character":0,"end_line":390,"end_character":5},"in_reply_to":"df87a7cf_fa20cdae","updated":"2017-12-07 07:38:57.000000000","message":"That\u0027s correct","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"34c48679decb312911931070e1314be486486c86","unresolved":false,"context_lines":[{"line_number":410,"context_line":""},{"line_number":411,"context_line":"Command Line Client Impact"},{"line_number":412,"context_line":"--------------------------"},{"line_number":413,"context_line":"Openstack Client would have additional options \u0027portforwarding\u0027for Floating IP"},{"line_number":414,"context_line":"CLI, which would define the port-forwarding characteristics."},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"Security Impact"}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_ba16c554","line":413,"range":{"start_line":413,"start_character":46,"end_line":413,"end_character":66},"updated":"2017-12-07 04:51:40.000000000","message":"no space ?","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"07738548b6e79fcf7eccc5e82289032058488e82","unresolved":false,"context_lines":[{"line_number":410,"context_line":""},{"line_number":411,"context_line":"Command Line Client Impact"},{"line_number":412,"context_line":"--------------------------"},{"line_number":413,"context_line":"Openstack Client would have additional options \u0027portforwarding\u0027for Floating IP"},{"line_number":414,"context_line":"CLI, which would define the port-forwarding characteristics."},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"Security Impact"}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_6bfaadbd","line":413,"range":{"start_line":413,"start_character":46,"end_line":413,"end_character":66},"in_reply_to":"df87a7cf_ba16c554","updated":"2017-12-07 07:38:57.000000000","message":"My bad.","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"34c48679decb312911931070e1314be486486c86","unresolved":false,"context_lines":[{"line_number":469,"context_line":""},{"line_number":470,"context_line":"  tian-mingming \u003ctian.mingming@h3c.com\u003e"},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"  zhaobo \u003czhaobo6@huawei.com\u003e"},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"Work Items"},{"line_number":475,"context_line":"----------"}],"source_content_type":"text/x-rst","patch_set":24,"id":"df87a7cf_1a057114","line":472,"range":{"start_line":472,"start_character":0,"end_line":472,"end_character":29},"updated":"2017-12-07 04:51:40.000000000","message":"ADD YOURSELF AS THE PRIMARY ASSIGNEE WITH ME.\nYou are putting a lot of efforts in this patch","commit_id":"0e30094c54f80ff090ca1c18d0130d25a6eff48f"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"3ec6f9028227c0761632635c480850fb1e92e1e4","unresolved":false,"context_lines":[{"line_number":63,"context_line":"simple forwarding functions."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"b) HA Router: For the HA Router deployment, the port forwarding rule will be"},{"line_number":66,"context_line":"installed in both ACTIVE/BACKUP Router namespace on the network node they"},{"line_number":67,"context_line":"located on, the function between them will based on the keepalived VRRP"},{"line_number":68,"context_line":"instance to maintain the traffic will pass through which Router, then the"},{"line_number":69,"context_line":"corresponding port forwarding rule which installed in the Router will perform"},{"line_number":70,"context_line":"the forwarding function."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"c) DVR: After [#foot2]_ was merged, we have the ability to create centralized"},{"line_number":73,"context_line":"Floating IPs in a DVR supported deployment. This helps in mapping the Compute"}],"source_content_type":"text/x-rst","patch_set":25,"id":"df87a7cf_8cf76bd5","line":70,"range":{"start_line":66,"start_character":18,"end_line":70,"end_character":24},"updated":"2017-12-13 22:59:30.000000000","message":"Great we are adding the HA scenario! I don\u0027t think we need to explain here how VRRP selects the correct router. It makes the whole paragraph confusing. Consider the following, briefer alternative:\n\nthe ACTIVE and the BACKUP routers namespaces.","commit_id":"01f61aeec6ed1f67b4fdcffd4ecfbf36d3f5f37f"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"27d452a2890e6b2365115382cc4ce8bc4e9e18f0","unresolved":false,"context_lines":[{"line_number":63,"context_line":"simple forwarding functions."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"b) HA Router: For the HA Router deployment, the port forwarding rule will be"},{"line_number":66,"context_line":"installed in both ACTIVE/BACKUP Router namespace on the network node they"},{"line_number":67,"context_line":"located on, the function between them will based on the keepalived VRRP"},{"line_number":68,"context_line":"instance to maintain the traffic will pass through which Router, then the"},{"line_number":69,"context_line":"corresponding port forwarding rule which installed in the Router will perform"},{"line_number":70,"context_line":"the forwarding function."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"c) DVR: After [#foot2]_ was merged, we have the ability to create centralized"},{"line_number":73,"context_line":"Floating IPs in a DVR supported deployment. This helps in mapping the Compute"}],"source_content_type":"text/x-rst","patch_set":25,"id":"df87a7cf_69dbf47c","line":70,"range":{"start_line":66,"start_character":18,"end_line":70,"end_character":24},"in_reply_to":"df87a7cf_8cf76bd5","updated":"2017-12-14 02:46:43.000000000","message":"Good point. I will reword this paragraph. Thanks.","commit_id":"01f61aeec6ed1f67b4fdcffd4ecfbf36d3f5f37f"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"3ec6f9028227c0761632635c480850fb1e92e1e4","unresolved":false,"context_lines":[{"line_number":84,"context_line":"multiple port forwarding entries for a particular Neutron port with different"},{"line_number":85,"context_line":"external ports, such as:"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"* Neutron PortQ Fixed IPA:INTPORTA PROTOCOLA \u003d\u003e FIPX:EXTPORTX PROTOCOLA"},{"line_number":88,"context_line":"* Neutron PortQ Fixed IPB:INTPORTA PROTOCOLA \u003d\u003e FIPX:EXTPORTY PROTOCOLA"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"But not allow the same Fixed IP:intport socket to map with different protocols."},{"line_number":91,"context_line":""}],"source_content_type":"text/x-rst","patch_set":25,"id":"df87a7cf_0cb7dbda","line":88,"range":{"start_line":87,"start_character":0,"end_line":88,"end_character":71},"updated":"2017-12-13 22:59:30.000000000","message":"IMO, these examples would be clearer if we show them like in  L28-29 above: i.e. ext \u003d\u003e int. It seems odd to show them the other way around","commit_id":"01f61aeec6ed1f67b4fdcffd4ecfbf36d3f5f37f"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"27d452a2890e6b2365115382cc4ce8bc4e9e18f0","unresolved":false,"context_lines":[{"line_number":84,"context_line":"multiple port forwarding entries for a particular Neutron port with different"},{"line_number":85,"context_line":"external ports, such as:"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"* Neutron PortQ Fixed IPA:INTPORTA PROTOCOLA \u003d\u003e FIPX:EXTPORTX PROTOCOLA"},{"line_number":88,"context_line":"* Neutron PortQ Fixed IPB:INTPORTA PROTOCOLA \u003d\u003e FIPX:EXTPORTY PROTOCOLA"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"But not allow the same Fixed IP:intport socket to map with different protocols."},{"line_number":91,"context_line":""}],"source_content_type":"text/x-rst","patch_set":25,"id":"df87a7cf_498dd079","line":88,"range":{"start_line":87,"start_character":0,"end_line":88,"end_character":71},"in_reply_to":"df87a7cf_0cb7dbda","updated":"2017-12-14 02:46:43.000000000","message":"Thanks for suggest. Miguel, I will reformat this example. :)","commit_id":"01f61aeec6ed1f67b4fdcffd4ecfbf36d3f5f37f"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"3ec6f9028227c0761632635c480850fb1e92e1e4","unresolved":false,"context_lines":[{"line_number":116,"context_line":"           ``port_forwarding`` must be the owner of associated Floating IP. So"},{"line_number":117,"context_line":"           there is a project_id check for preventing association of"},{"line_number":118,"context_line":"           Floating IP to internal Neutron Port if their ``project_id`` are"},{"line_number":119,"context_line":"           different. And allow the association that Floating IP/internal"},{"line_number":120,"context_line":"           Neutron Port exists on a shared network."},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"Sub Resource Extension"},{"line_number":123,"context_line":"----------------------"}],"source_content_type":"text/x-rst","patch_set":25,"id":"df87a7cf_ec039772","line":120,"range":{"start_line":119,"start_character":22,"end_line":120,"end_character":51},"updated":"2017-12-13 22:59:30.000000000","message":"Is this what we tried to say here:\n\nAssociation of a floating IP with a port on a shared network will be allowed","commit_id":"01f61aeec6ed1f67b4fdcffd4ecfbf36d3f5f37f"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"27d452a2890e6b2365115382cc4ce8bc4e9e18f0","unresolved":false,"context_lines":[{"line_number":116,"context_line":"           ``port_forwarding`` must be the owner of associated Floating IP. So"},{"line_number":117,"context_line":"           there is a project_id check for preventing association of"},{"line_number":118,"context_line":"           Floating IP to internal Neutron Port if their ``project_id`` are"},{"line_number":119,"context_line":"           different. And allow the association that Floating IP/internal"},{"line_number":120,"context_line":"           Neutron Port exists on a shared network."},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"Sub Resource Extension"},{"line_number":123,"context_line":"----------------------"}],"source_content_type":"text/x-rst","patch_set":25,"id":"df87a7cf_69969497","line":120,"range":{"start_line":119,"start_character":22,"end_line":120,"end_character":51},"in_reply_to":"df87a7cf_ec039772","updated":"2017-12-14 02:46:43.000000000","message":"Yeah, but only for admin owner, it can be allowed. For the general users, if they saw the shared network, the created port owner still is themself, whatever the external net is shared or internal tenant net is shared, they may just face the same project id case. I think.","commit_id":"01f61aeec6ed1f67b4fdcffd4ecfbf36d3f5f37f"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"3ec6f9028227c0761632635c480850fb1e92e1e4","unresolved":false,"context_lines":[{"line_number":123,"context_line":"----------------------"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"Neutron ``floatingips`` will be extended with a sub resource"},{"line_number":126,"context_line":"``port_forwardings``, it will contain some fields to expose the"},{"line_number":127,"context_line":"``port_forwarding`` assigned to the ``floatingip`` resource."},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"For this new function, a new service plugin will be introduced, and the"}],"source_content_type":"text/x-rst","patch_set":25,"id":"df87a7cf_0c2a7be6","line":126,"range":{"start_line":126,"start_character":17,"end_line":126,"end_character":18},"updated":"2017-12-13 22:59:30.000000000","message":"I don\u0027t think we need this \u0027s\u0027","commit_id":"01f61aeec6ed1f67b4fdcffd4ecfbf36d3f5f37f"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"27d452a2890e6b2365115382cc4ce8bc4e9e18f0","unresolved":false,"context_lines":[{"line_number":123,"context_line":"----------------------"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"Neutron ``floatingips`` will be extended with a sub resource"},{"line_number":126,"context_line":"``port_forwardings``, it will contain some fields to expose the"},{"line_number":127,"context_line":"``port_forwarding`` assigned to the ``floatingip`` resource."},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"For this new function, a new service plugin will be introduced, and the"}],"source_content_type":"text/x-rst","patch_set":25,"id":"df87a7cf_a65a8b80","line":126,"range":{"start_line":126,"start_character":17,"end_line":126,"end_character":18},"in_reply_to":"df87a7cf_0c2a7be6","updated":"2017-12-14 02:46:43.000000000","message":"Oh, thanks Miguel. My bad here.","commit_id":"01f61aeec6ed1f67b4fdcffd4ecfbf36d3f5f37f"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"3ec6f9028227c0761632635c480850fb1e92e1e4","unresolved":false,"context_lines":[{"line_number":126,"context_line":"``port_forwardings``, it will contain some fields to expose the"},{"line_number":127,"context_line":"``port_forwarding`` assigned to the ``floatingip`` resource."},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"For this new function, a new service plugin will be introduced, and the"},{"line_number":130,"context_line":"following methods will be added:"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"* \u0027create_floatingip_port_forwarding()\u0027"}],"source_content_type":"text/x-rst","patch_set":25,"id":"df87a7cf_8c3d2b2e","line":129,"range":{"start_line":129,"start_character":13,"end_line":129,"end_character":21},"updated":"2017-12-13 22:59:30.000000000","message":"feature","commit_id":"01f61aeec6ed1f67b4fdcffd4ecfbf36d3f5f37f"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"27d452a2890e6b2365115382cc4ce8bc4e9e18f0","unresolved":false,"context_lines":[{"line_number":126,"context_line":"``port_forwardings``, it will contain some fields to expose the"},{"line_number":127,"context_line":"``port_forwarding`` assigned to the ``floatingip`` resource."},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"For this new function, a new service plugin will be introduced, and the"},{"line_number":130,"context_line":"following methods will be added:"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"* \u0027create_floatingip_port_forwarding()\u0027"}],"source_content_type":"text/x-rst","patch_set":25,"id":"df87a7cf_e6609338","line":129,"range":{"start_line":129,"start_character":13,"end_line":129,"end_character":21},"in_reply_to":"df87a7cf_8c3d2b2e","updated":"2017-12-14 02:46:43.000000000","message":"Done","commit_id":"01f61aeec6ed1f67b4fdcffd4ecfbf36d3f5f37f"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"3ec6f9028227c0761632635c480850fb1e92e1e4","unresolved":false,"context_lines":[{"line_number":135,"context_line":"* \u0027get_floatingip_port_forwardings()\u0027"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"For update operation, we will extend the function in the future if possible."},{"line_number":138,"context_line":"But for the simple beginning, just support create/delete/get functions."},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"So the attributes map of new sub resource would be like:"},{"line_number":141,"context_line":""}],"source_content_type":"text/x-rst","patch_set":25,"id":"df87a7cf_6c1d47bc","line":138,"range":{"start_line":138,"start_character":8,"end_line":138,"end_character":30},"updated":"2017-12-13 22:59:30.000000000","message":"now, we will","commit_id":"01f61aeec6ed1f67b4fdcffd4ecfbf36d3f5f37f"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"27d452a2890e6b2365115382cc4ce8bc4e9e18f0","unresolved":false,"context_lines":[{"line_number":135,"context_line":"* \u0027get_floatingip_port_forwardings()\u0027"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"For update operation, we will extend the function in the future if possible."},{"line_number":138,"context_line":"But for the simple beginning, just support create/delete/get functions."},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"So the attributes map of new sub resource would be like:"},{"line_number":141,"context_line":""}],"source_content_type":"text/x-rst","patch_set":25,"id":"df87a7cf_46729f13","line":138,"range":{"start_line":138,"start_character":8,"end_line":138,"end_character":30},"in_reply_to":"df87a7cf_6c1d47bc","updated":"2017-12-14 02:46:43.000000000","message":"Done","commit_id":"01f61aeec6ed1f67b4fdcffd4ecfbf36d3f5f37f"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"3ec6f9028227c0761632635c480850fb1e92e1e4","unresolved":false,"context_lines":[{"line_number":437,"context_line":"  resource had already associated with a neutron port for 1:1 DNAT. If a"},{"line_number":438,"context_line":"  Floating IP resource contains more than 1 port-forwarding sub resource, it is"},{"line_number":439,"context_line":"  better to show the ``port-forwardings`` summary in the Floating IP response"},{"line_number":440,"context_line":"  body for distinguish which Floating IP resource is available for different"},{"line_number":441,"context_line":"  requirements, such as 1:1 DNAT, port-forwarding."},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"Command Line Client Impact"}],"source_content_type":"text/x-rst","patch_set":25,"id":"df87a7cf_ecbb976f","line":440,"range":{"start_line":440,"start_character":7,"end_line":440,"end_character":11},"updated":"2017-12-13 22:59:30.000000000","message":"to","commit_id":"01f61aeec6ed1f67b4fdcffd4ecfbf36d3f5f37f"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"27d452a2890e6b2365115382cc4ce8bc4e9e18f0","unresolved":false,"context_lines":[{"line_number":437,"context_line":"  resource had already associated with a neutron port for 1:1 DNAT. If a"},{"line_number":438,"context_line":"  Floating IP resource contains more than 1 port-forwarding sub resource, it is"},{"line_number":439,"context_line":"  better to show the ``port-forwardings`` summary in the Floating IP response"},{"line_number":440,"context_line":"  body for distinguish which Floating IP resource is available for different"},{"line_number":441,"context_line":"  requirements, such as 1:1 DNAT, port-forwarding."},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"Command Line Client Impact"}],"source_content_type":"text/x-rst","patch_set":25,"id":"df87a7cf_a6812bc6","line":440,"range":{"start_line":440,"start_character":7,"end_line":440,"end_character":11},"in_reply_to":"df87a7cf_ecbb976f","updated":"2017-12-14 02:46:43.000000000","message":"Done","commit_id":"01f61aeec6ed1f67b4fdcffd4ecfbf36d3f5f37f"},{"author":{"_account_id":20421,"name":"brenda_tian","email":"tian.mingming@h3c.com","username":"brenda_tian"},"change_message_id":"66cbc729938029f697b7dbca3de1efc9b2bd304f","unresolved":false,"context_lines":[{"line_number":438,"context_line":"  Floating IP resource contains more than 1 port-forwarding sub resource, it is"},{"line_number":439,"context_line":"  better to show the ``port-forwardings`` summary in the Floating IP response"},{"line_number":440,"context_line":"  body for distinguish which Floating IP resource is available for different"},{"line_number":441,"context_line":"  requirements, such as 1:1 DNAT, port-forwarding."},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"Command Line Client Impact"},{"line_number":444,"context_line":"--------------------------"}],"source_content_type":"text/x-rst","patch_set":25,"id":"df87a7cf_82839304","line":441,"updated":"2017-12-15 03:50:59.000000000","message":"Add one more piece, like below:\nUpdating a floationgip to make it associate with a neutron port should first check if there are some port-forwarding rules associated with it. And creating a new port-forwarding of a floatingip should also check if the floatingip has been associated to a neutron port for 1:1 DNAT.","commit_id":"01f61aeec6ed1f67b4fdcffd4ecfbf36d3f5f37f"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"96e3390ea04aba871d8e2d9eeb86a910ec861bdf","unresolved":false,"context_lines":[{"line_number":438,"context_line":"  Floating IP resource contains more than 1 port-forwarding sub resource, it is"},{"line_number":439,"context_line":"  better to show the ``port-forwardings`` summary in the Floating IP response"},{"line_number":440,"context_line":"  body for distinguish which Floating IP resource is available for different"},{"line_number":441,"context_line":"  requirements, such as 1:1 DNAT, port-forwarding."},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"Command Line Client Impact"},{"line_number":444,"context_line":"--------------------------"}],"source_content_type":"text/x-rst","patch_set":25,"id":"df87a7cf_a55ca1ed","line":441,"in_reply_to":"df87a7cf_82839304","updated":"2017-12-15 04:03:47.000000000","message":"Correct, make sense to me. Thanks. :)","commit_id":"01f61aeec6ed1f67b4fdcffd4ecfbf36d3f5f37f"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"11b005ca3e887f8fc5ecc24f5621fe51586112bc","unresolved":false,"context_lines":[{"line_number":53,"context_line":"The user can define various port forwarding rules on the Floating IPs containing"},{"line_number":54,"context_line":"the internal/client port and the external/destination port, connected with the"},{"line_number":55,"context_line":"VM they want to expose. And users could be only allowed to create port"},{"line_number":56,"context_line":"forwarding rules in a \"free\" Floating IP which is not associated with any"},{"line_number":57,"context_line":"Neutron port."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"We will have three deployment variants:"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-rst","patch_set":26,"id":"df87a7cf_7f464624","line":57,"range":{"start_line":56,"start_character":21,"end_line":57,"end_character":13},"updated":"2017-12-19 03:31:51.000000000","message":"this explanation may be a bit confusing.\nIt seems like if an FIP is used for port fowarding to a particular Client port, it cannot be reused ( its not free :) )\n\nSo maybe reword it :\n\n Users can create port fowarding rules on those Floating IPs which are not directly associated with a tenant VM\u0027s fixed IPs ( or somethign else which seems correct).","commit_id":"2cc75e5add092b9733427a828074124cada055ec"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"2d160528d5d9bc6e83eb41f2de1bddba600e40a3","unresolved":false,"context_lines":[{"line_number":53,"context_line":"The user can define various port forwarding rules on the Floating IPs containing"},{"line_number":54,"context_line":"the internal/client port and the external/destination port, connected with the"},{"line_number":55,"context_line":"VM they want to expose. And users could be only allowed to create port"},{"line_number":56,"context_line":"forwarding rules in a \"free\" Floating IP which is not associated with any"},{"line_number":57,"context_line":"Neutron port."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"We will have three deployment variants:"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-rst","patch_set":26,"id":"df87a7cf_5e3d168d","line":57,"range":{"start_line":56,"start_character":21,"end_line":57,"end_character":13},"in_reply_to":"df87a7cf_7f464624","updated":"2017-12-19 03:37:26.000000000","message":"Yeah, bad \u0027free\u0027 :)","commit_id":"2cc75e5add092b9733427a828074124cada055ec"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"5ea727e51c04a8acf43ab947e04e769c2fe9bbc9","unresolved":false,"context_lines":[{"line_number":114,"context_line":"           ``port_forwarding`` must be the owner of associated Floating IP. So"},{"line_number":115,"context_line":"           there is a project_id check for preventing association of"},{"line_number":116,"context_line":"           Floating IP to internal Neutron Port if their ``project_id`` are"},{"line_number":117,"context_line":"           different. And allow the association that Floating IP/internal"},{"line_number":118,"context_line":"           Neutron Port exists on a shared network for admin users in different"},{"line_number":119,"context_line":"           project_id cases, such as FloatingIP from a shared public network"},{"line_number":120,"context_line":"           created by a admin user and a Neutron Port from a particular"}],"source_content_type":"text/x-rst","patch_set":28,"id":"df87a7cf_125c5feb","line":117,"range":{"start_line":117,"start_character":22,"end_line":117,"end_character":25},"updated":"2017-12-19 08:35:29.000000000","message":"I think that sentence shouldn\u0027t starts with \"and\"","commit_id":"7335f840b8d2ddbaa6ba802781b670c1bb98be0f"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"37375ac2a478de54389a5375f0a479fbfb9ae238","unresolved":false,"context_lines":[{"line_number":114,"context_line":"           ``port_forwarding`` must be the owner of associated Floating IP. So"},{"line_number":115,"context_line":"           there is a project_id check for preventing association of"},{"line_number":116,"context_line":"           Floating IP to internal Neutron Port if their ``project_id`` are"},{"line_number":117,"context_line":"           different. And allow the association that Floating IP/internal"},{"line_number":118,"context_line":"           Neutron Port exists on a shared network for admin users in different"},{"line_number":119,"context_line":"           project_id cases, such as FloatingIP from a shared public network"},{"line_number":120,"context_line":"           created by a admin user and a Neutron Port from a particular"}],"source_content_type":"text/x-rst","patch_set":28,"id":"df87a7cf_12a1bf46","line":117,"range":{"start_line":117,"start_character":22,"end_line":117,"end_character":25},"in_reply_to":"df87a7cf_125c5feb","updated":"2017-12-19 09:34:44.000000000","message":"remove \"and\"? :)","commit_id":"7335f840b8d2ddbaa6ba802781b670c1bb98be0f"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"44b5fc6a2af780defbb4be97134f58485c48458f","unresolved":false,"context_lines":[{"line_number":114,"context_line":"           ``port_forwarding`` must be the owner of associated Floating IP. So"},{"line_number":115,"context_line":"           there is a project_id check for preventing association of"},{"line_number":116,"context_line":"           Floating IP to internal Neutron Port if their ``project_id`` are"},{"line_number":117,"context_line":"           different. And allow the association that Floating IP/internal"},{"line_number":118,"context_line":"           Neutron Port exists on a shared network for admin users in different"},{"line_number":119,"context_line":"           project_id cases, such as FloatingIP from a shared public network"},{"line_number":120,"context_line":"           created by a admin user and a Neutron Port from a particular"}],"source_content_type":"text/x-rst","patch_set":28,"id":"df87a7cf_9d8aa418","line":117,"range":{"start_line":117,"start_character":22,"end_line":117,"end_character":25},"in_reply_to":"df87a7cf_12a1bf46","updated":"2017-12-20 09:59:44.000000000","message":"Done","commit_id":"7335f840b8d2ddbaa6ba802781b670c1bb98be0f"},{"author":{"_account_id":20421,"name":"brenda_tian","email":"tian.mingming@h3c.com","username":"brenda_tian"},"change_message_id":"66cbc729938029f697b7dbca3de1efc9b2bd304f","unresolved":false,"context_lines":[{"line_number":114,"context_line":"           ``port_forwarding`` must be the owner of associated Floating IP. So"},{"line_number":115,"context_line":"           there is a project_id check for preventing association of"},{"line_number":116,"context_line":"           Floating IP to internal Neutron Port if their ``project_id`` are"},{"line_number":117,"context_line":"           different. And allow the association that Floating IP/internal"},{"line_number":118,"context_line":"           Neutron Port exists on a shared network for admin users in different"},{"line_number":119,"context_line":"           project_id cases, such as FloatingIP from a shared public network"},{"line_number":120,"context_line":"           created by a admin user and a Neutron Port from a particular"},{"line_number":121,"context_line":"           internal tenant network created by the tenant user, then admin user"}],"source_content_type":"text/x-rst","patch_set":28,"id":"df87a7cf_253091e8","line":118,"range":{"start_line":117,"start_character":22,"end_line":118,"end_character":50},"updated":"2017-12-15 03:50:59.000000000","message":"Hmm,is there necessary to mention \"shared network\"?\nis it proper to just divide this to two scenarios:\n1) floatingip and neutron port belongs to the same project.(we  \n don\u0027t need to care about whether floatingip or neutron port belongs to share network)\n2) floatingip and neutron port belongs to different projects,\nin this case, floatingip must be created by \"admin\".\ncan we make a discussion about the necessity and user stories of this scenario.","commit_id":"7335f840b8d2ddbaa6ba802781b670c1bb98be0f"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"96e3390ea04aba871d8e2d9eeb86a910ec861bdf","unresolved":false,"context_lines":[{"line_number":114,"context_line":"           ``port_forwarding`` must be the owner of associated Floating IP. So"},{"line_number":115,"context_line":"           there is a project_id check for preventing association of"},{"line_number":116,"context_line":"           Floating IP to internal Neutron Port if their ``project_id`` are"},{"line_number":117,"context_line":"           different. And allow the association that Floating IP/internal"},{"line_number":118,"context_line":"           Neutron Port exists on a shared network for admin users in different"},{"line_number":119,"context_line":"           project_id cases, such as FloatingIP from a shared public network"},{"line_number":120,"context_line":"           created by a admin user and a Neutron Port from a particular"},{"line_number":121,"context_line":"           internal tenant network created by the tenant user, then admin user"}],"source_content_type":"text/x-rst","patch_set":28,"id":"df87a7cf_65e1b9fc","line":118,"range":{"start_line":117,"start_character":22,"end_line":118,"end_character":50},"in_reply_to":"df87a7cf_253091e8","updated":"2017-12-15 04:03:47.000000000","message":"Thanks, tian. They are very similar, the same meaning. OK. we can raise and discuss it.","commit_id":"7335f840b8d2ddbaa6ba802781b670c1bb98be0f"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"5ea727e51c04a8acf43ab947e04e769c2fe9bbc9","unresolved":false,"context_lines":[{"line_number":120,"context_line":"           created by a admin user and a Neutron Port from a particular"},{"line_number":121,"context_line":"           internal tenant network created by the tenant user, then admin user"},{"line_number":122,"context_line":"           want a association of them which have different project_ids. For"},{"line_number":123,"context_line":"           general users, there is only the same project_id case."},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"Sub Resource Extension"},{"line_number":126,"context_line":"----------------------"}],"source_content_type":"text/x-rst","patch_set":28,"id":"df87a7cf_f2d9bb55","line":123,"updated":"2017-12-19 08:35:29.000000000","message":"So this means that in general if user will \"use\" Floating IP to associate it with one port, he will be owner of it and only he will be able to associate other ports forwarding on it. Did I understood it correct?","commit_id":"7335f840b8d2ddbaa6ba802781b670c1bb98be0f"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"44b5fc6a2af780defbb4be97134f58485c48458f","unresolved":false,"context_lines":[{"line_number":120,"context_line":"           created by a admin user and a Neutron Port from a particular"},{"line_number":121,"context_line":"           internal tenant network created by the tenant user, then admin user"},{"line_number":122,"context_line":"           want a association of them which have different project_ids. For"},{"line_number":123,"context_line":"           general users, there is only the same project_id case."},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"Sub Resource Extension"},{"line_number":126,"context_line":"----------------------"}],"source_content_type":"text/x-rst","patch_set":28,"id":"df87a7cf_5d9bbc15","line":123,"in_reply_to":"df87a7cf_adf992c8","updated":"2017-12-20 09:59:44.000000000","message":"+1","commit_id":"7335f840b8d2ddbaa6ba802781b670c1bb98be0f"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"37375ac2a478de54389a5375f0a479fbfb9ae238","unresolved":false,"context_lines":[{"line_number":120,"context_line":"           created by a admin user and a Neutron Port from a particular"},{"line_number":121,"context_line":"           internal tenant network created by the tenant user, then admin user"},{"line_number":122,"context_line":"           want a association of them which have different project_ids. For"},{"line_number":123,"context_line":"           general users, there is only the same project_id case."},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"Sub Resource Extension"},{"line_number":126,"context_line":"----------------------"}],"source_content_type":"text/x-rst","patch_set":28,"id":"df87a7cf_adf992c8","line":123,"in_reply_to":"df87a7cf_f2d9bb55","updated":"2017-12-19 09:34:44.000000000","message":"For general users, they can not see the FloatingIP which owned by other tenants. If they want a FloatingIP, they must create a FloatingIP from a shared public net. Then associate with floatingip and internal ports owned by themselves. This is the default behavior currently. And they can only associated port forwarding with \"free\" FloatingIP.","commit_id":"7335f840b8d2ddbaa6ba802781b670c1bb98be0f"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"5ea727e51c04a8acf43ab947e04e769c2fe9bbc9","unresolved":false,"context_lines":[{"line_number":138,"context_line":"* \u0027get_floatingip_port_forwardings()\u0027"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"For update operation, we will extend the function in the future if possible."},{"line_number":141,"context_line":"But for now, we will just support create/delete/get functions."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"So the attributes map of new sub resource would be like:"},{"line_number":144,"context_line":""}],"source_content_type":"text/x-rst","patch_set":28,"id":"df87a7cf_52c2e75a","line":141,"updated":"2017-12-19 08:35:29.000000000","message":"why? is it so hard to implement update operation for it?\nIMHO it should be specified here also even if it would be maybe implemented in two separate patches :)","commit_id":"7335f840b8d2ddbaa6ba802781b670c1bb98be0f"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"44b5fc6a2af780defbb4be97134f58485c48458f","unresolved":false,"context_lines":[{"line_number":138,"context_line":"* \u0027get_floatingip_port_forwardings()\u0027"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"For update operation, we will extend the function in the future if possible."},{"line_number":141,"context_line":"But for now, we will just support create/delete/get functions."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"So the attributes map of new sub resource would be like:"},{"line_number":144,"context_line":""}],"source_content_type":"text/x-rst","patch_set":28,"id":"df87a7cf_d8e03a9a","line":141,"in_reply_to":"df87a7cf_2d96e2f1","updated":"2017-12-20 09:59:44.000000000","message":"Lets keep Update separate. But yes, we can provide Update , in the next release","commit_id":"7335f840b8d2ddbaa6ba802781b670c1bb98be0f"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"37375ac2a478de54389a5375f0a479fbfb9ae238","unresolved":false,"context_lines":[{"line_number":138,"context_line":"* \u0027get_floatingip_port_forwardings()\u0027"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"For update operation, we will extend the function in the future if possible."},{"line_number":141,"context_line":"But for now, we will just support create/delete/get functions."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"So the attributes map of new sub resource would be like:"},{"line_number":144,"context_line":""}],"source_content_type":"text/x-rst","patch_set":28,"id":"df87a7cf_2d96e2f1","line":141,"in_reply_to":"df87a7cf_52c2e75a","updated":"2017-12-19 09:34:44.000000000","message":"IMHO, It\u0027s not I think. We just don\u0027t want to bring so many at a time. For the initial idea, we could implement it like current \u0027fixed_ips\u0027 in port resource. First support create/delete/get as the basic operations.","commit_id":"7335f840b8d2ddbaa6ba802781b670c1bb98be0f"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"5ea727e51c04a8acf43ab947e04e769c2fe9bbc9","unresolved":false,"context_lines":[{"line_number":144,"context_line":""},{"line_number":145,"context_line":".. code-block:: python"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    SUB_RESOURCE_ATTRIBUTE_MAP \u003d {"},{"line_number":148,"context_line":"        \u0027port_forwarding\u0027: {"},{"line_number":149,"context_line":"            \u0027parent\u0027: {\u0027collection_name\u0027: \u0027floatingips\u0027,"},{"line_number":150,"context_line":"                        \u0027member_name\u0027: \u0027floatingip\u0027},"}],"source_content_type":"text/x-rst","patch_set":28,"id":"df87a7cf_32b963cb","line":147,"updated":"2017-12-19 08:35:29.000000000","message":"I don\u0027t know if it wouldn\u0027t be better to propose it as separate resource which would contain floating IP address and ID and the same for internal IP (port_id, address and port).\nThen You would be maybe able to add also some fields like description or name for it which could be quite useful from user point of view.","commit_id":"7335f840b8d2ddbaa6ba802781b670c1bb98be0f"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"44b5fc6a2af780defbb4be97134f58485c48458f","unresolved":false,"context_lines":[{"line_number":144,"context_line":""},{"line_number":145,"context_line":".. code-block:: python"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    SUB_RESOURCE_ATTRIBUTE_MAP \u003d {"},{"line_number":148,"context_line":"        \u0027port_forwarding\u0027: {"},{"line_number":149,"context_line":"            \u0027parent\u0027: {\u0027collection_name\u0027: \u0027floatingips\u0027,"},{"line_number":150,"context_line":"                        \u0027member_name\u0027: \u0027floatingip\u0027},"}],"source_content_type":"text/x-rst","patch_set":28,"id":"df87a7cf_9895d2e6","line":147,"in_reply_to":"df87a7cf_32b963cb","updated":"2017-12-20 09:59:44.000000000","message":"Honestly, proposing it as a separate resource has very less difference than proposing it as an extension of Floating IP.\nBesides, the port fowarding concept logically seems like the extension of Floating IP . So I would like to keep it like this","commit_id":"7335f840b8d2ddbaa6ba802781b670c1bb98be0f"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"37375ac2a478de54389a5375f0a479fbfb9ae238","unresolved":false,"context_lines":[{"line_number":144,"context_line":""},{"line_number":145,"context_line":".. code-block:: python"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    SUB_RESOURCE_ATTRIBUTE_MAP \u003d {"},{"line_number":148,"context_line":"        \u0027port_forwarding\u0027: {"},{"line_number":149,"context_line":"            \u0027parent\u0027: {\u0027collection_name\u0027: \u0027floatingips\u0027,"},{"line_number":150,"context_line":"                        \u0027member_name\u0027: \u0027floatingip\u0027},"}],"source_content_type":"text/x-rst","patch_set":28,"id":"df87a7cf_2da101f8","line":147,"in_reply_to":"df87a7cf_32b963cb","updated":"2017-12-19 09:34:44.000000000","message":"Yeah, I know. But the name or description are not very useful here. If users want to know, they can update the same fields in the floatingip contains. The forwarding is a mapping. So if they use floatingip, they may think that \"hmmm, I may setting some port forwarding during operate floatingip resource\", so I think it may probably in floatingip resource for floatingip port forwarding function, as we also want to use the \u0027router_id\u0027 in Floatingip, since this must be associated with a Router, this is only my opinion. :). So we implement it like mutil-port-binding . That\u0027s it. Please feel free to correct","commit_id":"7335f840b8d2ddbaa6ba802781b670c1bb98be0f"},{"author":{"_account_id":20421,"name":"brenda_tian","email":"tian.mingming@h3c.com","username":"brenda_tian"},"change_message_id":"66cbc729938029f697b7dbca3de1efc9b2bd304f","unresolved":false,"context_lines":[{"line_number":164,"context_line":"                                            \u0027is_visible\u0027: True},"},{"line_number":165,"context_line":"                \u0027protocol\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":166,"context_line":"                               \u0027validate\u0027: {"},{"line_number":167,"context_line":"                                  \u0027type:values\u0027: constants.IPTABLES_PROTOCOL_MAP.keys()},"},{"line_number":168,"context_line":"                               \u0027is_visible\u0027: True,"},{"line_number":169,"context_line":"                               \u0027convert_to\u0027: converters.convert_to_protocol},"},{"line_number":170,"context_line":"                \u0027internal_port_id\u0027: {\u0027allow_post\u0027: True,"}],"source_content_type":"text/x-rst","patch_set":28,"id":"df87a7cf_c22d1b47","line":167,"range":{"start_line":167,"start_character":49,"end_line":167,"end_character":87},"updated":"2017-12-15 03:50:59.000000000","message":"Why \u0027protocol\u0027 goes back to including \"icmp\" and \"icmp6\"?  It would mislead user if \"icmp\" or \"icmp6\" appears in the api document.","commit_id":"7335f840b8d2ddbaa6ba802781b670c1bb98be0f"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"2d160528d5d9bc6e83eb41f2de1bddba600e40a3","unresolved":false,"context_lines":[{"line_number":164,"context_line":"                                            \u0027is_visible\u0027: True},"},{"line_number":165,"context_line":"                \u0027protocol\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":166,"context_line":"                               \u0027validate\u0027: {"},{"line_number":167,"context_line":"                                  \u0027type:values\u0027: constants.IPTABLES_PROTOCOL_MAP.keys()},"},{"line_number":168,"context_line":"                               \u0027is_visible\u0027: True,"},{"line_number":169,"context_line":"                               \u0027convert_to\u0027: converters.convert_to_protocol},"},{"line_number":170,"context_line":"                \u0027internal_port_id\u0027: {\u0027allow_post\u0027: True,"}],"source_content_type":"text/x-rst","patch_set":28,"id":"df87a7cf_7ee33a35","line":167,"range":{"start_line":167,"start_character":49,"end_line":167,"end_character":87},"in_reply_to":"df87a7cf_be98e2bf","updated":"2017-12-19 03:37:26.000000000","message":"I don\u0027t think ping use a L4 protocol port..","commit_id":"7335f840b8d2ddbaa6ba802781b670c1bb98be0f"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"11b005ca3e887f8fc5ecc24f5621fe51586112bc","unresolved":false,"context_lines":[{"line_number":164,"context_line":"                                            \u0027is_visible\u0027: True},"},{"line_number":165,"context_line":"                \u0027protocol\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":166,"context_line":"                               \u0027validate\u0027: {"},{"line_number":167,"context_line":"                                  \u0027type:values\u0027: constants.IPTABLES_PROTOCOL_MAP.keys()},"},{"line_number":168,"context_line":"                               \u0027is_visible\u0027: True,"},{"line_number":169,"context_line":"                               \u0027convert_to\u0027: converters.convert_to_protocol},"},{"line_number":170,"context_line":"                \u0027internal_port_id\u0027: {\u0027allow_post\u0027: True,"}],"source_content_type":"text/x-rst","patch_set":28,"id":"df87a7cf_be98e2bf","line":167,"range":{"start_line":167,"start_character":49,"end_line":167,"end_character":87},"in_reply_to":"df87a7cf_c22d1b47","updated":"2017-12-19 03:31:51.000000000","message":"Umm, why shouldnt user filter ping and ping6 ?","commit_id":"7335f840b8d2ddbaa6ba802781b670c1bb98be0f"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"96e3390ea04aba871d8e2d9eeb86a910ec861bdf","unresolved":false,"context_lines":[{"line_number":164,"context_line":"                                            \u0027is_visible\u0027: True},"},{"line_number":165,"context_line":"                \u0027protocol\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":166,"context_line":"                               \u0027validate\u0027: {"},{"line_number":167,"context_line":"                                  \u0027type:values\u0027: constants.IPTABLES_PROTOCOL_MAP.keys()},"},{"line_number":168,"context_line":"                               \u0027is_visible\u0027: True,"},{"line_number":169,"context_line":"                               \u0027convert_to\u0027: converters.convert_to_protocol},"},{"line_number":170,"context_line":"                \u0027internal_port_id\u0027: {\u0027allow_post\u0027: True,"}],"source_content_type":"text/x-rst","patch_set":28,"id":"df87a7cf_c58e8526","line":167,"range":{"start_line":167,"start_character":49,"end_line":167,"end_character":87},"in_reply_to":"df87a7cf_c22d1b47","updated":"2017-12-15 04:03:47.000000000","message":"o(╯□╰)o， what happened?","commit_id":"7335f840b8d2ddbaa6ba802781b670c1bb98be0f"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"a0e38ccd46ba3829118ef46497255788eded2690","unresolved":false,"context_lines":[{"line_number":72,"context_line":"with the centralized FIP for Port forwarding. This mechanism will centralize"},{"line_number":73,"context_line":"a floating IP not only when it is associated with a port bound to a host with"},{"line_number":74,"context_line":"the ``dvr_no_external`` option enabled, but also when port forwarding attributes"},{"line_number":75,"context_line":"are added to it."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"In all deployment variants, the port forwarding entry NATs a specific"},{"line_number":78,"context_line":"Floating IP:Port and protocol to a specific Neutron port (and a private IP that"}],"source_content_type":"text/x-rst","patch_set":30,"id":"7f96bb07_35daa64a","line":75,"updated":"2018-01-16 20:38:10.000000000","message":"So would DVR+HA need any special support?","commit_id":"a6acb57887753a09a6f6c257e7314a285132edb5"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"5c878d28747284416609aa38cb3c26b28c0483d0","unresolved":false,"context_lines":[{"line_number":72,"context_line":"with the centralized FIP for Port forwarding. This mechanism will centralize"},{"line_number":73,"context_line":"a floating IP not only when it is associated with a port bound to a host with"},{"line_number":74,"context_line":"the ``dvr_no_external`` option enabled, but also when port forwarding attributes"},{"line_number":75,"context_line":"are added to it."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"In all deployment variants, the port forwarding entry NATs a specific"},{"line_number":78,"context_line":"Floating IP:Port and protocol to a specific Neutron port (and a private IP that"}],"source_content_type":"text/x-rst","patch_set":30,"id":"7f96bb07_981ad1c9","line":75,"in_reply_to":"7f96bb07_35daa64a","updated":"2018-01-16 21:34:43.000000000","message":"Brian and I talked about this over IRC today. He suggested adding a case d) for DVR+HA. In that case, if the router is not ha, we use approach c (L69), whereas if the router is HA, we centralize in the HA router","commit_id":"a6acb57887753a09a6f6c257e7314a285132edb5"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"1a61f1782b72bf597eb6a473b9770448c4a9778c","unresolved":false,"context_lines":[{"line_number":72,"context_line":"with the centralized FIP for Port forwarding. This mechanism will centralize"},{"line_number":73,"context_line":"a floating IP not only when it is associated with a port bound to a host with"},{"line_number":74,"context_line":"the ``dvr_no_external`` option enabled, but also when port forwarding attributes"},{"line_number":75,"context_line":"are added to it."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"In all deployment variants, the port forwarding entry NATs a specific"},{"line_number":78,"context_line":"Floating IP:Port and protocol to a specific Neutron port (and a private IP that"}],"source_content_type":"text/x-rst","patch_set":30,"id":"7f96bb07_fe3c1230","line":75,"in_reply_to":"7f96bb07_981ad1c9","updated":"2018-01-17 08:44:41.000000000","message":"Thanks Brian \u0026 Miguel. It is very useful for me to clear the last case（DVR+HA）. I will add today. Thank you very much.","commit_id":"a6acb57887753a09a6f6c257e7314a285132edb5"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"4109496b0bf899d233fc46620ff8d713a8686f3d","unresolved":false,"context_lines":[{"line_number":88,"context_line":"However, the same Fixed IP:intport socket cannot be mapped with different protocols."},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"If the Neutron port is deleted, the port forwarding entries that match this port"},{"line_number":91,"context_line":"are also be deleted. Same is applicable in case the Floating IP is deleted."},{"line_number":92,"context_line":""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"Data Model Impact"}],"source_content_type":"text/x-rst","patch_set":30,"id":"9f91af0f_e2c7e444","line":91,"range":{"start_line":91,"start_character":9,"end_line":91,"end_character":11},"updated":"2018-01-15 22:46:23.000000000","message":"Remove, not needed","commit_id":"a6acb57887753a09a6f6c257e7314a285132edb5"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"1a61f1782b72bf597eb6a473b9770448c4a9778c","unresolved":false,"context_lines":[{"line_number":88,"context_line":"However, the same Fixed IP:intport socket cannot be mapped with different protocols."},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"If the Neutron port is deleted, the port forwarding entries that match this port"},{"line_number":91,"context_line":"are also be deleted. Same is applicable in case the Floating IP is deleted."},{"line_number":92,"context_line":""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"Data Model Impact"}],"source_content_type":"text/x-rst","patch_set":30,"id":"7f96bb07_de13565b","line":91,"range":{"start_line":91,"start_character":9,"end_line":91,"end_character":11},"in_reply_to":"9f91af0f_e2c7e444","updated":"2018-01-17 08:44:41.000000000","message":"Done","commit_id":"a6acb57887753a09a6f6c257e7314a285132edb5"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"df6975c01c3d1f54ccf5c2a36cccde80caa1b9da","unresolved":false,"context_lines":[{"line_number":483,"context_line":""},{"line_number":484,"context_line":"Alternatives"},{"line_number":485,"context_line":"------------"},{"line_number":486,"context_line":"Users can use an external VM that provide this NAT capability or assign a new"},{"line_number":487,"context_line":"Floating IP for each VM."},{"line_number":488,"context_line":""},{"line_number":489,"context_line":""},{"line_number":490,"context_line":"Implementation"}],"source_content_type":"text/x-rst","patch_set":30,"id":"7f96bb07_78b03e44","line":487,"range":{"start_line":486,"start_character":0,"end_line":487,"end_character":24},"updated":"2018-01-16 07:59:44.000000000","message":"IIUC other alternative could be also to use LBaaS in some (very specific) way to provide same/similar functionality of mapping public IP:port to some private IP:port","commit_id":"a6acb57887753a09a6f6c257e7314a285132edb5"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"1a61f1782b72bf597eb6a473b9770448c4a9778c","unresolved":false,"context_lines":[{"line_number":483,"context_line":""},{"line_number":484,"context_line":"Alternatives"},{"line_number":485,"context_line":"------------"},{"line_number":486,"context_line":"Users can use an external VM that provide this NAT capability or assign a new"},{"line_number":487,"context_line":"Floating IP for each VM."},{"line_number":488,"context_line":""},{"line_number":489,"context_line":""},{"line_number":490,"context_line":"Implementation"}],"source_content_type":"text/x-rst","patch_set":30,"id":"7f96bb07_7ebec2b4","line":487,"range":{"start_line":486,"start_character":0,"end_line":487,"end_character":24},"in_reply_to":"7f96bb07_78b03e44","updated":"2018-01-17 08:44:41.000000000","message":"Yeah, haproxy or any apps own the redirect function can work like that. And like your said \"in very specific way\". It\u0027s not very normal. So, I even not consider implement it with LBaaS. :)","commit_id":"a6acb57887753a09a6f6c257e7314a285132edb5"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"df6975c01c3d1f54ccf5c2a36cccde80caa1b9da","unresolved":false,"context_lines":[{"line_number":531,"context_line":""},{"line_number":532,"context_line":"API Tests"},{"line_number":533,"context_line":"---------"},{"line_number":534,"context_line":"Need to add API tests"},{"line_number":535,"context_line":""},{"line_number":536,"context_line":""},{"line_number":537,"context_line":"Documentation Impact"}],"source_content_type":"text/x-rst","patch_set":30,"id":"7f96bb07_b87b2679","line":534,"updated":"2018-01-16 07:59:44.000000000","message":"Would be good also to add some fullstack test for this future someday :)","commit_id":"a6acb57887753a09a6f6c257e7314a285132edb5"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"1a61f1782b72bf597eb6a473b9770448c4a9778c","unresolved":false,"context_lines":[{"line_number":531,"context_line":""},{"line_number":532,"context_line":"API Tests"},{"line_number":533,"context_line":"---------"},{"line_number":534,"context_line":"Need to add API tests"},{"line_number":535,"context_line":""},{"line_number":536,"context_line":""},{"line_number":537,"context_line":"Documentation Impact"}],"source_content_type":"text/x-rst","patch_set":30,"id":"7f96bb07_be152ae7","line":534,"in_reply_to":"7f96bb07_b87b2679","updated":"2018-01-17 08:44:41.000000000","message":"OK, It contains multiple scenarios. It is necessary to add the test. :)","commit_id":"a6acb57887753a09a6f6c257e7314a285132edb5"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"6036029d2026a3239f4ca04f9d65914c7691f753","unresolved":false,"context_lines":[{"line_number":56,"context_line":"port forwarding rules only on a \"free\" Floating IP, i.e. a Floating IP which is"},{"line_number":57,"context_line":"not directly associated with a Fixed IP of a tenant\u0027s VM."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"We will have three deployment variants:"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"a) Legacy Router: For the generic Router deployment, the port forwarding rules"},{"line_number":62,"context_line":"would be installed in the Router namespace on the network node and forwarding"}],"source_content_type":"text/x-rst","patch_set":32,"id":"7f96bb07_30084dd8","line":59,"range":{"start_line":59,"start_character":13,"end_line":59,"end_character":18},"updated":"2018-01-17 20:36:11.000000000","message":"now there are four variants :)","commit_id":"90bdceb8d7d2f853b270a10ae6a82f82d49373df"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"9e856c1fb508439313bc12b824c94419c0765785","unresolved":false,"context_lines":[{"line_number":56,"context_line":"port forwarding rules only on a \"free\" Floating IP, i.e. a Floating IP which is"},{"line_number":57,"context_line":"not directly associated with a Fixed IP of a tenant\u0027s VM."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"We will have three deployment variants:"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"a) Legacy Router: For the generic Router deployment, the port forwarding rules"},{"line_number":62,"context_line":"would be installed in the Router namespace on the network node and forwarding"}],"source_content_type":"text/x-rst","patch_set":32,"id":"7f96bb07_57d86b79","line":59,"range":{"start_line":59,"start_character":13,"end_line":59,"end_character":18},"in_reply_to":"7f96bb07_30084dd8","updated":"2018-01-18 00:28:37.000000000","message":"Oh, Thanks. My bad.","commit_id":"90bdceb8d7d2f853b270a10ae6a82f82d49373df"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"22377c823a036dd949cfdf1c048eaf6bbca756bc","unresolved":false,"context_lines":[{"line_number":75,"context_line":"attributes are added to it."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"d) DVR + HA: If the created router is not an HA router, then we can proceed"},{"line_number":78,"context_line":"with option(c). While if the router is HA router, then we will use the"},{"line_number":79,"context_line":"centralized HA router to implement the port forwardings requests."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"In all deployment variants, the port forwarding entry NATs a specific"}],"source_content_type":"text/x-rst","patch_set":32,"id":"7f96bb07_70e335a5","line":78,"range":{"start_line":78,"start_character":39,"end_line":78,"end_character":41},"updated":"2018-01-17 20:52:06.000000000","message":"s/an HA","commit_id":"90bdceb8d7d2f853b270a10ae6a82f82d49373df"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"22377c823a036dd949cfdf1c048eaf6bbca756bc","unresolved":false,"context_lines":[{"line_number":75,"context_line":"attributes are added to it."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"d) DVR + HA: If the created router is not an HA router, then we can proceed"},{"line_number":78,"context_line":"with option(c). While if the router is HA router, then we will use the"},{"line_number":79,"context_line":"centralized HA router to implement the port forwardings requests."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"In all deployment variants, the port forwarding entry NATs a specific"}],"source_content_type":"text/x-rst","patch_set":32,"id":"7f96bb07_10ec318d","line":78,"range":{"start_line":78,"start_character":11,"end_line":78,"end_character":14},"updated":"2018-01-17 20:52:06.000000000","message":"space after option","commit_id":"90bdceb8d7d2f853b270a10ae6a82f82d49373df"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"9e856c1fb508439313bc12b824c94419c0765785","unresolved":false,"context_lines":[{"line_number":75,"context_line":"attributes are added to it."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"d) DVR + HA: If the created router is not an HA router, then we can proceed"},{"line_number":78,"context_line":"with option(c). While if the router is HA router, then we will use the"},{"line_number":79,"context_line":"centralized HA router to implement the port forwardings requests."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"In all deployment variants, the port forwarding entry NATs a specific"}],"source_content_type":"text/x-rst","patch_set":32,"id":"7f96bb07_f7cad79e","line":78,"range":{"start_line":78,"start_character":39,"end_line":78,"end_character":41},"in_reply_to":"7f96bb07_70e335a5","updated":"2018-01-18 00:28:37.000000000","message":"Done","commit_id":"90bdceb8d7d2f853b270a10ae6a82f82d49373df"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"22377c823a036dd949cfdf1c048eaf6bbca756bc","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"d) DVR + HA: If the created router is not an HA router, then we can proceed"},{"line_number":78,"context_line":"with option(c). While if the router is HA router, then we will use the"},{"line_number":79,"context_line":"centralized HA router to implement the port forwardings requests."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"In all deployment variants, the port forwarding entry NATs a specific"},{"line_number":82,"context_line":"Floating IP:Port and protocol to a specific Neutron port (and a private IP that"}],"source_content_type":"text/x-rst","patch_set":32,"id":"7f96bb07_90de01d8","line":79,"range":{"start_line":79,"start_character":44,"end_line":79,"end_character":55},"updated":"2018-01-17 20:52:06.000000000","message":"s/forwarding","commit_id":"90bdceb8d7d2f853b270a10ae6a82f82d49373df"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"a9c4fe0ded42a03082302039d48674647707101f","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"d) DVR + HA: If the created router is not an HA router, then we can proceed"},{"line_number":78,"context_line":"with option(c). While if the router is HA router, then we will use the"},{"line_number":79,"context_line":"centralized HA router to implement the port forwardings requests."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"In all deployment variants, the port forwarding entry NATs a specific"},{"line_number":82,"context_line":"Floating IP:Port and protocol to a specific Neutron port (and a private IP that"}],"source_content_type":"text/x-rst","patch_set":32,"id":"7f96bb07_a3e975e6","line":79,"range":{"start_line":79,"start_character":24,"end_line":79,"end_character":35},"updated":"2018-01-17 21:21:56.000000000","message":"s/implement/install","commit_id":"90bdceb8d7d2f853b270a10ae6a82f82d49373df"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"a9c4fe0ded42a03082302039d48674647707101f","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"d) DVR + HA: If the created router is not an HA router, then we can proceed"},{"line_number":78,"context_line":"with option(c). While if the router is HA router, then we will use the"},{"line_number":79,"context_line":"centralized HA router to implement the port forwardings requests."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"In all deployment variants, the port forwarding entry NATs a specific"},{"line_number":82,"context_line":"Floating IP:Port and protocol to a specific Neutron port (and a private IP that"}],"source_content_type":"text/x-rst","patch_set":32,"id":"7f96bb07_c3e4c10f","line":79,"range":{"start_line":79,"start_character":56,"end_line":79,"end_character":64},"updated":"2018-01-17 21:21:56.000000000","message":"s/requests/rules","commit_id":"90bdceb8d7d2f853b270a10ae6a82f82d49373df"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"9e856c1fb508439313bc12b824c94419c0765785","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"d) DVR + HA: If the created router is not an HA router, then we can proceed"},{"line_number":78,"context_line":"with option(c). While if the router is HA router, then we will use the"},{"line_number":79,"context_line":"centralized HA router to implement the port forwardings requests."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"In all deployment variants, the port forwarding entry NATs a specific"},{"line_number":82,"context_line":"Floating IP:Port and protocol to a specific Neutron port (and a private IP that"}],"source_content_type":"text/x-rst","patch_set":32,"id":"7f96bb07_d7c31b88","line":79,"range":{"start_line":79,"start_character":44,"end_line":79,"end_character":55},"in_reply_to":"7f96bb07_90de01d8","updated":"2018-01-18 00:28:37.000000000","message":"Done","commit_id":"90bdceb8d7d2f853b270a10ae6a82f82d49373df"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"9e856c1fb508439313bc12b824c94419c0765785","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"d) DVR + HA: If the created router is not an HA router, then we can proceed"},{"line_number":78,"context_line":"with option(c). While if the router is HA router, then we will use the"},{"line_number":79,"context_line":"centralized HA router to implement the port forwardings requests."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"In all deployment variants, the port forwarding entry NATs a specific"},{"line_number":82,"context_line":"Floating IP:Port and protocol to a specific Neutron port (and a private IP that"}],"source_content_type":"text/x-rst","patch_set":32,"id":"7f96bb07_b7c8cfa5","line":79,"range":{"start_line":79,"start_character":56,"end_line":79,"end_character":64},"in_reply_to":"7f96bb07_c3e4c10f","updated":"2018-01-18 00:28:37.000000000","message":"Done","commit_id":"90bdceb8d7d2f853b270a10ae6a82f82d49373df"}]}
