12 #include <sys/types.h> 21 static inline void doread(
int f,
void *buf,
size_t len) {
25 if((res=read(f, buf, len)) <=0) {
28 perror (
"Error reading transactions");
36 int main(
int argc,
char**argv) {
50 if(strcmp(argv[1],
"--help") && strcmp(argv[1],
"-h")) {
51 printf(
"E: unknown option %s.\n", argv[1]);
55 printf(
"Use: %s < transactionlog\n", argv[0]);
61 doread(readfd, &magic,
sizeof(magic));
65 doread(readfd,
sizeof(magic)+(
char *)(&req),
sizeof(
struct nbd_request)-
sizeof(magic));
69 command = ntohl(req.
type);
76 ctext=
"NBD_CMD_WRITE";
82 ctext=
"NBD_CMD_FLUSH";
88 printf(
"> H=%016llx C=0x%08x (%13s+%4s) O=%016llx L=%08x\n",
89 (
long long unsigned int) handle,
93 (
long long unsigned int) offset,
98 doread(readfd,
sizeof(magic)+(
char *)(&rep),
sizeof(
struct nbd_reply)-
sizeof(magic));
100 error = ntohl(rep.
error);
102 printf(
"< H=%016llx E=0x%08x\n",
103 (
long long unsigned int) handle,
108 printf(
"? Unknown transaction type %08x\n",magic);
static void doread(int f, void *buf, size_t len)
#define NBD_CMD_MASK_COMMAND
#define NBD_REQUEST_MAGIC
int main(int argc, char **argv)