)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"f82c324c6750d72782a84130cc44fa839fcbd722","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"22fa7941_a7bdb053","updated":"2026-10-08 19:18:28.000000000","message":"few questions. Thank you for working on this","commit_id":"4edaeb19b0dc43efa18d8759b54ceaa48c85e9c4"},{"author":{"_account_id":32077,"name":"chanyeol yoon","display_name":"chanyeol","email":"ycy1766@gmail.com","username":"ycy1766","status":"ktcloud cloud engineer "},"change_message_id":"abe0d1c3be786a84c1f604119565bbe9cec4ff12","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"698de98e_d9bf68ca","in_reply_to":"22fa7941_a7bdb053","updated":"2026-10-09 04:40:05.000000000","message":"Thanks for taking a look, Miro! Answered inline. PS3 only touches the api-ref: the lport example now uses BOTH and the directions description shows both forms.","commit_id":"4edaeb19b0dc43efa18d8759b54ceaa48c85e9c4"}],"api-ref/source/v2/parameters.yaml":[{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"f82c324c6750d72782a84130cc44fa839fcbd722","unresolved":true,"context_lines":[{"line_number":2985,"context_line":"directions_tap_mirror:"},{"line_number":2986,"context_line":"  description: |"},{"line_number":2987,"context_line":"    A dictionary of ``direction`` and ``tunnel_id``."},{"line_number":2988,"context_line":"    Direction can be ``IN``, ``OUT`` and ``BOTH``. For an ``lport`` mirror"},{"line_number":2989,"context_line":"    the tunnel ID values are not used and must be ``null``."},{"line_number":2990,"context_line":"  in: body"},{"line_number":2991,"context_line":"  required: true"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"8b7f5422_20f9dcc7","line":2988,"range":{"start_line":2988,"start_character":60,"end_line":2988,"end_character":65},"updated":"2026-10-08 19:18:28.000000000","message":"nit: Wouldn\u0027t it be better to say \"local_port\" when it comes to user visible strings?","commit_id":"4edaeb19b0dc43efa18d8759b54ceaa48c85e9c4"},{"author":{"_account_id":32077,"name":"chanyeol yoon","display_name":"chanyeol","email":"ycy1766@gmail.com","username":"ycy1766","status":"ktcloud cloud engineer "},"change_message_id":"abe0d1c3be786a84c1f604119565bbe9cec4ff12","unresolved":false,"context_lines":[{"line_number":2985,"context_line":"directions_tap_mirror:"},{"line_number":2986,"context_line":"  description: |"},{"line_number":2987,"context_line":"    A dictionary of ``direction`` and ``tunnel_id``."},{"line_number":2988,"context_line":"    Direction can be ``IN``, ``OUT`` and ``BOTH``. For an ``lport`` mirror"},{"line_number":2989,"context_line":"    the tunnel ID values are not used and must be ``null``."},{"line_number":2990,"context_line":"  in: body"},{"line_number":2991,"context_line":"  required: true"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"537909a9_a77364d1","line":2988,"in_reply_to":"8b7f5422_20f9dcc7","updated":"2026-10-09 04:40:05.000000000","message":"Same reasoning as above: that port is the sink of the mirror, wherever it happens to be, so I named it to pair with remote_ip (remote_ip for the tunnel types, remote_port_id for lport). If the team would rather avoid \"remote\", sink_port_id would be my next pick, but I would keep it away from \"local\" because of the OVN local mirror type.","commit_id":"4edaeb19b0dc43efa18d8759b54ceaa48c85e9c4"},{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"f82c324c6750d72782a84130cc44fa839fcbd722","unresolved":true,"context_lines":[{"line_number":4846,"context_line":"  type: string"},{"line_number":4847,"context_line":"mirror_type:"},{"line_number":4848,"context_line":"  description: |"},{"line_number":4849,"context_line":"    The type of the mirroring, it can be ``gre``, ``erspanv1`` or ``lport``"},{"line_number":4850,"context_line":"    (mirror to another Neutron port, ML2/OVN only)."},{"line_number":4851,"context_line":"  in: body"},{"line_number":4852,"context_line":"  required: true"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"ac290c9f_d78166fa","line":4849,"range":{"start_line":4849,"start_character":68,"end_line":4849,"end_character":73},"updated":"2026-10-08 19:18:28.000000000","message":"nit: Maybe it just my personal preference but why not call it `local`\nthe full OSP CLI command would read like this\n`openstack tap mirror create --mirror-type local --local-port \u003cfoo\u003e --directions BOTH\u003d123 --name my_local_mirror`","commit_id":"4edaeb19b0dc43efa18d8759b54ceaa48c85e9c4"},{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"a4ffda707a3d2faa61cc55bb5e73f96516336a43","unresolved":false,"context_lines":[{"line_number":4846,"context_line":"  type: string"},{"line_number":4847,"context_line":"mirror_type:"},{"line_number":4848,"context_line":"  description: |"},{"line_number":4849,"context_line":"    The type of the mirroring, it can be ``gre``, ``erspanv1`` or ``lport``"},{"line_number":4850,"context_line":"    (mirror to another Neutron port, ML2/OVN only)."},{"line_number":4851,"context_line":"  in: body"},{"line_number":4852,"context_line":"  required: true"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"84a0c331_02bb321a","line":4849,"range":{"start_line":4849,"start_character":68,"end_line":4849,"end_character":73},"in_reply_to":"427b8273_591a7235","updated":"2026-10-14 14:24:35.000000000","message":"Good point, let\u0027s stay consistent","commit_id":"4edaeb19b0dc43efa18d8759b54ceaa48c85e9c4"},{"author":{"_account_id":32077,"name":"chanyeol yoon","display_name":"chanyeol","email":"ycy1766@gmail.com","username":"ycy1766","status":"ktcloud cloud engineer "},"change_message_id":"abe0d1c3be786a84c1f604119565bbe9cec4ff12","unresolved":false,"context_lines":[{"line_number":4846,"context_line":"  type: string"},{"line_number":4847,"context_line":"mirror_type:"},{"line_number":4848,"context_line":"  description: |"},{"line_number":4849,"context_line":"    The type of the mirroring, it can be ``gre``, ``erspanv1`` or ``lport``"},{"line_number":4850,"context_line":"    (mirror to another Neutron port, ML2/OVN only)."},{"line_number":4851,"context_line":"  in: body"},{"line_number":4852,"context_line":"  required: true"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"427b8273_591a7235","line":4849,"in_reply_to":"ac290c9f_d78166fa","updated":"2026-10-09 04:40:05.000000000","message":"I went back and forth on the name too. I kept `lport` because that is what OVN calls the type (Mirror.type is one of gre, erspan, local, lport), the same way we take `gre` as-is. And `local` is already taken on the OVN side: it is the mirror type whose sink is an interface on the hypervisor\u0027s br-int (bug 2135228 is about exposing that one), so reusing the word here would get confusing the day someone adds it. On top of that the sink port of an lport mirror usually lives on another compute node, so \"local\" would read a bit odd for it.","commit_id":"4edaeb19b0dc43efa18d8759b54ceaa48c85e9c4"},{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"f82c324c6750d72782a84130cc44fa839fcbd722","unresolved":true,"context_lines":[{"line_number":6210,"context_line":"  description: |"},{"line_number":6211,"context_line":"    The remote IP of the Tap Mirror, this will be the remote end of the"},{"line_number":6212,"context_line":"    GRE or ERSPAN v1 tunnel. Required for ``gre`` and ``erspanv1`` mirrors,"},{"line_number":6213,"context_line":"    must be omitted for ``lport`` mirrors."},{"line_number":6214,"context_line":"  in: body"},{"line_number":6215,"context_line":"  required: false"},{"line_number":6216,"context_line":"  type: string"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"0c8ae5c6_2e76209a","line":6213,"range":{"start_line":6213,"start_character":4,"end_line":6213,"end_character":23},"updated":"2026-10-08 19:18:28.000000000","message":"technically, you can just ignore this value for lport type, no? So\n\n`openstack tap mirror create --mirror-type lport --remote-ip 1.2.3.4 --remote-port foo` would still work the --remote-ip value would be ignored. Or are you planning to explicitly raise error for this condition?","commit_id":"4edaeb19b0dc43efa18d8759b54ceaa48c85e9c4"},{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"96cd41d708f2102741686d9739b5a46db1b4910f","unresolved":false,"context_lines":[{"line_number":6210,"context_line":"  description: |"},{"line_number":6211,"context_line":"    The remote IP of the Tap Mirror, this will be the remote end of the"},{"line_number":6212,"context_line":"    GRE or ERSPAN v1 tunnel. Required for ``gre`` and ``erspanv1`` mirrors,"},{"line_number":6213,"context_line":"    must be omitted for ``lport`` mirrors."},{"line_number":6214,"context_line":"  in: body"},{"line_number":6215,"context_line":"  required: false"},{"line_number":6216,"context_line":"  type: string"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"8ca76add_6fd62cc1","line":6213,"range":{"start_line":6213,"start_character":4,"end_line":6213,"end_character":23},"in_reply_to":"0c8ae5c6_2e76209a","updated":"2026-10-08 19:29:18.000000000","message":"I just saw your patch here:\nhttps://review.opendev.org/c/openstack/tap-as-a-service/+/1009194\nLooks like you are explicitly rejecting remote-ip, good","commit_id":"4edaeb19b0dc43efa18d8759b54ceaa48c85e9c4"},{"author":{"_account_id":32077,"name":"chanyeol yoon","display_name":"chanyeol","email":"ycy1766@gmail.com","username":"ycy1766","status":"ktcloud cloud engineer "},"change_message_id":"abe0d1c3be786a84c1f604119565bbe9cec4ff12","unresolved":false,"context_lines":[{"line_number":6210,"context_line":"  description: |"},{"line_number":6211,"context_line":"    The remote IP of the Tap Mirror, this will be the remote end of the"},{"line_number":6212,"context_line":"    GRE or ERSPAN v1 tunnel. Required for ``gre`` and ``erspanv1`` mirrors,"},{"line_number":6213,"context_line":"    must be omitted for ``lport`` mirrors."},{"line_number":6214,"context_line":"  in: body"},{"line_number":6215,"context_line":"  required: false"},{"line_number":6216,"context_line":"  type: string"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"13d3a708_98052c1a","line":6213,"in_reply_to":"0c8ae5c6_2e76209a","updated":"2026-10-09 04:40:05.000000000","message":"Right, the service plugin rejects remote_ip (and tunnel IDs) for an lport mirror with a 400 instead of ignoring them, so nobody ends up believing a value is in use when it is not. That is why the api-ref says \"must be omitted\".","commit_id":"4edaeb19b0dc43efa18d8759b54ceaa48c85e9c4"},{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"a4ffda707a3d2faa61cc55bb5e73f96516336a43","unresolved":true,"context_lines":[{"line_number":4848,"context_line":"mirror_type:"},{"line_number":4849,"context_line":"  description: |"},{"line_number":4850,"context_line":"    The type of the mirroring, it can be ``gre``, ``erspanv1`` or ``lport``"},{"line_number":4851,"context_line":"    (mirror to another Neutron port, ML2/OVN only)."},{"line_number":4852,"context_line":"  in: body"},{"line_number":4853,"context_line":"  required: true"},{"line_number":4854,"context_line":"  type: string"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"c49fc4f2_1a6d16cb","line":4851,"range":{"start_line":4851,"start_character":4,"end_line":4851,"end_character":51},"updated":"2026-10-14 14:24:35.000000000","message":"I dont think mirror_type existed for tapflow/tapservice (aka ML2/OVS). So I would remove this sentence","commit_id":"0a7fee3e1529bda40da7d2d8449d66c6546ccb09"},{"author":{"_account_id":32077,"name":"chanyeol yoon","display_name":"chanyeol","email":"ycy1766@gmail.com","username":"ycy1766","status":"ktcloud cloud engineer "},"change_message_id":"906843c044c30b633b0d197b78f7031e0650fc91","unresolved":false,"context_lines":[{"line_number":4848,"context_line":"mirror_type:"},{"line_number":4849,"context_line":"  description: |"},{"line_number":4850,"context_line":"    The type of the mirroring, it can be ``gre``, ``erspanv1`` or ``lport``"},{"line_number":4851,"context_line":"    (mirror to another Neutron port, ML2/OVN only)."},{"line_number":4852,"context_line":"  in: body"},{"line_number":4853,"context_line":"  required: true"},{"line_number":4854,"context_line":"  type: string"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"0676f16d_b78eb8d0","line":4851,"in_reply_to":"c49fc4f2_1a6d16cb","updated":"2026-10-14 22:53:10.000000000","message":"Agreed, mirror_type only exists on tap_mirrors anyway. Dropped in PS4, which also adds one exception used by the TaaS change.","commit_id":"0a7fee3e1529bda40da7d2d8449d66c6546ccb09"}],"api-ref/source/v2/samples/taas/tap_mirror-create-lport-request.json":[{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"f82c324c6750d72782a84130cc44fa839fcbd722","unresolved":true,"context_lines":[{"line_number":5,"context_line":"        \"port_id\": \"c63e4f48-da76-466c-a6f1-f4e4a4902c6a\","},{"line_number":6,"context_line":"        \"directions\": {"},{"line_number":7,"context_line":"            \"IN\": null,"},{"line_number":8,"context_line":"            \"OUT\": null"},{"line_number":9,"context_line":"        },"},{"line_number":10,"context_line":"        \"remote_port_id\": \"8801f350-9c1e-4b7a-a2d3-5e6f7a8b9c0d\","},{"line_number":11,"context_line":"        \"mirror_type\": \"lport\""}],"source_content_type":"application/json","patch_set":2,"id":"5760d73b_650bc635","line":8,"updated":"2026-10-08 19:18:28.000000000","message":"Why is this missing BOTH direction?","commit_id":"4edaeb19b0dc43efa18d8759b54ceaa48c85e9c4"},{"author":{"_account_id":32077,"name":"chanyeol yoon","display_name":"chanyeol","email":"ycy1766@gmail.com","username":"ycy1766","status":"ktcloud cloud engineer "},"change_message_id":"abe0d1c3be786a84c1f604119565bbe9cec4ff12","unresolved":false,"context_lines":[{"line_number":5,"context_line":"        \"port_id\": \"c63e4f48-da76-466c-a6f1-f4e4a4902c6a\","},{"line_number":6,"context_line":"        \"directions\": {"},{"line_number":7,"context_line":"            \"IN\": null,"},{"line_number":8,"context_line":"            \"OUT\": null"},{"line_number":9,"context_line":"        },"},{"line_number":10,"context_line":"        \"remote_port_id\": \"8801f350-9c1e-4b7a-a2d3-5e6f7a8b9c0d\","},{"line_number":11,"context_line":"        \"mirror_type\": \"lport\""}],"source_content_type":"application/json","patch_set":2,"id":"363b56ce_59017c8b","line":8,"in_reply_to":"5760d73b_650bc635","updated":"2026-10-09 04:40:05.000000000","message":"Good catch, it was not left out on purpose, I just wrote the long form. Both work: {\"IN\": null, \"OUT\": null} and {\"BOTH\": null} (the definition requires tap-mirror-both-direction). PS3 switches the example to BOTH and mentions both forms in the directions description.","commit_id":"4edaeb19b0dc43efa18d8759b54ceaa48c85e9c4"}]}
