def METHOD_NAME(args):
    # ID conversion and size check
    print('Using source ID: {}'.format(args.can_id))
    can_id_i = int(args.can_id, 16)
    if can_id_i > 2047 and not args.effid:
        raise SystemExit('ERROR: CAN ID to high for SFF')
    id_flags = 0
    if args.effid:
        print('Setting EFF CAN ID flag')
        id_flags = ctypes.c_ulong(socket.CAN_EFF_FLAG).value
    # Whether to enable local loopback, required for local only test
    # but only want to parse packets from other end if remote
    loopback = not args.remote
    # Default data size is 8 bytes but if testing FD Mode use 64
    data_size = 8
    if args.fdmode:
        data_size = 64
    data_b = os.urandom(data_size)
    print('Sending data: {}'.format(data_b.hex()))
    recv_id_i = None
    recv_data_b = None
    def receive():
        nonlocal recv_id_i
        nonlocal recv_data_b
        print('Opening read socket on {}'.format(args.interface))
        with CANSocket(args.interface, fdmode=args.fdmode,
                       loopback=loopback) as recv_s:
            recv_id_i, recv_data_b = recv_s.recv()
    # Create a receive thread
    recv_t = threading.Thread(target=receive, daemon=True)
    recv_t.start()
    time.sleep(1)
    print('Opening send socket on {}'.format(args.interface))
    # Open socket, will raise OSError on failure
    with CANSocket(args.interface, fdmode=args.fdmode,
                   loopback=loopback) as send_s:
        print('Sending data...', flush=True)
        try:
            send_s.send(can_id_i, data_b, id_flags=id_flags)
        except OSError as e:
            print(e, file=sys.stderr)
            if e.errno == 90:
                raise SystemExit('ERROR: interface does not support FD Mode')
            else:
                raise SystemExit('ERROR: OSError on attempt to send')
    recv_t.join(10)
    if recv_t.is_alive():
        raise SystemExit('ERROR: Timeout waiting to receive data')
    print('Received packet')
    print('  ID  : {:x}'.format(recv_id_i))
    print('  Data: {}'.format(recv_data_b.hex()))
    if recv_id_i != can_id_i or recv_data_b != data_b:
        raise SystemExit('ERROR: ID/Data received does not match sent')
    print('\nPASSED')