blob: e1463b03fceb19e1f4b09edea9238a1ac71aa67c [file] [log] [blame]
#define _GNU_SOURCE
#define _XOPEN_SOURCE 600
#define _FILE_OFFSET_BITS 64
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/sysmacros.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
#include <signal.h>
#include <stdio.h>
#include <getopt.h>
#include <stdlib.h>
#include <ctype.h>
#include <linux/drbd.h>
#include <linux/fs.h> /* for BLKGETSIZE64 */
#include <string.h>
#include "drbdtool_common.h"
#include "config.h"
int force = 0;
int confirmed(const char *text)
{
const char yes[] = "yes";
const ssize_t N = sizeof(yes);
char *answer = NULL;
size_t n = 0;
int ok;
printf("\n%s\n", text);
if (force) {
printf("*** confirmation forced via --force option ***\n");
ok = 1;
}
else {
printf("[need to type '%s' to confirm] ", yes);
ok = getline(&answer,&n,stdin) == N &&
strncmp(answer,yes,N-1) == 0;
if (answer) free(answer);
printf("\n");
}
return ok;
}
/* input size is expected to be in KB */
void dt_pretty_print_uuids(const uint64_t* uuid, unsigned int flags)
{
printf(
"\n"
" +--< Current data generation UUID >-\n"
" | +--< Bitmap's base data generation UUID >-\n"
" | | +--< younger history UUID >-\n"
" | | | +-< older history >-\n"
" V V V V\n");
dt_print_uuids(uuid, flags);
printf(
" ^ ^ ^ ^ ^ ^ ^\n"
" -< Data consistency flag >--+ | | | | | |\n"
" -< Data was/is currently up-to-date >--+ | | | | |\n"
" -< Node was/is currently primary >--+ | | | |\n"
" -< Node was/is currently connected >--+ | | |\n"
" -< Node was in the progress of setting all bits in the bitmap >--+ | |\n"
" -< The peer's disk was out-dated or inconsistent >--+ |\n"
" -< This node was a crashed primary, and has not seen its peer since >--+\n"
"\n");
printf("flags:%s %s, %s, %s%s%s\n",
(flags & MDF_CRASHED_PRIMARY) ? " crashed" : "",
(flags & MDF_PRIMARY_IND) ? "Primary" : "Secondary",
(flags & MDF_CONNECTED_IND) ? "Connected" : "StandAlone",
(flags & MDF_CONSISTENT)
? ((flags & MDF_WAS_UP_TO_DATE) ? "UpToDate" : "Outdated")
: "Inconsistent",
(flags & MDF_FULL_SYNC) ? ", need full sync" : "",
(flags & MDF_PEER_OUT_DATED) ? ", peer Outdated" : "");
}