On 12 Mar 2025, at 18:01, Aaron Conole wrote:

> When the 'mirror-to' option was conceived, it was intended to allow users
> the ability to arbitrarily build their own ports to use the mirror port
> rather than always using an algorithmically defined mirror port.  However,
> the mirror port code never accommodated a port that the user defined as
> part of an OVS bridge.  This could be useful for running against all kinds
> of OVS specific ports.
>
> Adjust the 'mirror-to' option so that when the user specifies a port, the
> utility searches through system interfaces, as well as the OVS DB.  This
> means that we need to drop the port_exists() check for the mirror port,
> but that should be okay.
>
> Reported-at: 
> https://mail.openvswitch.org/pipermail/ovs-discuss/2025-March/053508.html
> Reported-by: Jun Wang <junwan...@cestc.cn>
> Signed-off-by: Aaron Conole <acon...@redhat.com>

Some style comment below. The rest looks good to me.

Cheers,

Eelco

> ---
>  utilities/ovs-tcpdump.in | 28 +++++++++++++++++-----------
>  1 file changed, 17 insertions(+), 11 deletions(-)
>
> diff --git a/utilities/ovs-tcpdump.in b/utilities/ovs-tcpdump.in
> index 187eafdf25..2070678b3a 100755
> --- a/utilities/ovs-tcpdump.in
> +++ b/utilities/ovs-tcpdump.in
> @@ -421,13 +421,16 @@ def py_which(executable):
>                 for path in os.environ["PATH"].split(os.pathsep))
>
>
> -def teardown(db_sock, interface, mirror_interface, tap_created):
> +def teardown(db_sock, interface, mirror_interface, tap_created,
> +             created_mirror):
>      def cleanup_mirror():
>          try:
>              ovsdb = OVSDB(db_sock)
>              ovsdb.destroy_mirror(interface, ovsdb.port_bridge(interface))
> -            ovsdb.destroy_port(mirror_interface, 
> ovsdb.port_bridge(interface))
> -            if tap_created is True:
> +            if created_mirror:
> +                ovsdb.destroy_port(mirror_interface,
> +                                   ovsdb.port_bridge(interface))
> +            if tap_created:
>                  _del_taps[sys.platform](mirror_interface)
>          except Exception:
>              print("Unable to tear down the ports and mirrors.")
> @@ -505,15 +508,21 @@ def main():
>          if sys.platform in _make_mirror_name:
>              mirror_interface = _make_mirror_name[sys.platform](interface)
>
> +    created_mirror = True
>      if sys.platform in _make_taps and \
> -       mirror_interface not in interfaces():
> +       mirror_interface not in interfaces() and \
> +       not ovsdb.port_exists(mirror_interface):
>          _make_taps[sys.platform](mirror_interface,
>                                   ovsdb.interface_mtu(interface))
>          tap_created = True
>      else:
> +        if mirror_interface in interfaces() or \
> +           ovsdb.port_exists(mirror_interface):
> +            created_mirror = False
>          tap_created = False
>
> -    if mirror_interface not in interfaces():
> +    if mirror_interface not in interfaces() and \
> +       not ovsdb.port_exists(mirror_interface):
>          print("ERROR: Please create an interface called `%s`" %
>                mirror_interface)
>          print("See your OS guide for how to do this.")
> @@ -524,15 +533,12 @@ def main():
>      if not ovsdb.port_exists(interface):
>          print("ERROR: Port %s does not exist." % interface)
>          sys.exit(1)
> -    if ovsdb.port_exists(mirror_interface):
> -        print("ERROR: Mirror port (%s) exists for port %s." %
> -              (mirror_interface, interface))
> -        sys.exit(1)
>
> -    teardown(db_sock, interface, mirror_interface, tap_created)
> +    teardown(db_sock, interface, mirror_interface, tap_created, 
> created_mirror)

Move the two mirror-related arguments together, and use consistent naming for 
the created boolean.
So for example:
        teardown(db_sock, interface, mirror_interface, mirror_created, 
tap_created)

>
>      try:
> -        ovsdb.make_port(mirror_interface, ovsdb.port_bridge(interface))
> +        if created_mirror:
> +            ovsdb.make_port(mirror_interface, ovsdb.port_bridge(interface))
>          ovsdb.bridge_mirror(interface, mirror_interface,
>                              ovsdb.port_bridge(interface),
>                              mirror_select_all, mirror_filter=mirror_filter)
> -- 
> 2.47.1
>
> _______________________________________________
> dev mailing list
> d...@openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev

_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to