From f635350e8ea287d08b780790186fdc178f754978 Mon Sep 17 00:00:00 2001 From: Mark Stapp Date: Tue, 29 Sep 2020 13:14:39 -0400 Subject: [PATCH] tests: pim-basic mcast scripts fixes for python3 The pim-basic suite uses some private python scripts to send and receive mcast traffic: revise them to support both py2 and py3. Signed-off-by: Mark Stapp --- tests/topotests/pim-basic/mcast-rx.py | 6 ++++-- tests/topotests/pim-basic/mcast-tx.py | 30 ++++++++++++++++++++------- 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/tests/topotests/pim-basic/mcast-rx.py b/tests/topotests/pim-basic/mcast-rx.py index 8a3a44ecb1..7aa4d4027e 100755 --- a/tests/topotests/pim-basic/mcast-rx.py +++ b/tests/topotests/pim-basic/mcast-rx.py @@ -35,7 +35,8 @@ import time def ifname_to_ifindex(ifname): - output = subprocess.check_output("ip link show %s" % ifname, shell=True) + output = subprocess.check_output("ip link show %s" % ifname, + shell=True, universal_newlines=True) first_line = output.split("\n")[0] re_index = re.search("^(\d+):", first_line) @@ -65,7 +66,8 @@ logging.addLevelName( ) log = logging.getLogger(__name__) -parser = argparse.ArgumentParser(description="Multicast RX utility", version="1.0.0") +parser = argparse.ArgumentParser(description="Multicast RX utility") + parser.add_argument("group", help="Multicast IP") parser.add_argument("ifname", help="Interface name") parser.add_argument("--port", help="UDP port", default=1000) diff --git a/tests/topotests/pim-basic/mcast-tx.py b/tests/topotests/pim-basic/mcast-tx.py index ad6fdc1062..7fb980c647 100755 --- a/tests/topotests/pim-basic/mcast-tx.py +++ b/tests/topotests/pim-basic/mcast-tx.py @@ -24,7 +24,7 @@ import logging import socket import struct import time - +import sys logging.basicConfig( level=logging.DEBUG, format="%(asctime)s %(levelname)5s: %(message)s" @@ -40,7 +40,7 @@ logging.addLevelName( log = logging.getLogger(__name__) parser = argparse.ArgumentParser( - description="Multicast packet generator", version="1.0.0" + description="Multicast packet generator" ) parser.add_argument("group", help="Multicast IP") parser.add_argument("ifname", help="Interface name") @@ -57,9 +57,18 @@ sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # https://github.com/sivel/bonding/issues/10 # # Bind our socket to ifname -sock.setsockopt( - socket.SOL_SOCKET, 25, struct.pack("%ds" % len(args.ifname), args.ifname) -) +# +# Note ugly python version incompatibility +# +if sys.version_info[0] > 2: + sock.setsockopt( + socket.SOL_SOCKET, 25, struct.pack("%ds" % len(args.ifname), + args.ifname.encode('utf-8')) + ) +else: + sock.setsockopt( + socket.SOL_SOCKET, 25, struct.pack("%ds" % len(args.ifname), args.ifname) + ) # We need to make sure our sendto() finishes before we close the socket sock.setblocking(1) @@ -70,11 +79,18 @@ sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, struct.pack("b", arg ms = args.interval / 1000.0 # Send data to the multicast group -for x in xrange(args.count): +for x in range(args.count): log.info( "TX multicast UDP packet to %s:%d on %s" % (args.group, args.port, args.ifname) ) - sent = sock.sendto("foobar %d" % x, (args.group, args.port)) + + # + # Note ugly python version incompatibility + # + if sys.version_info[0] > 2: + sent = sock.sendto(b"foobar %d" % x, (args.group, args.port)) + else: + sent = sock.sendto("foobar %d" % x, (args.group, args.port)) if args.count > 1 and ms: time.sleep(ms) -- 2.39.5