示例#1
0
static void
rpc_detail_call(int flags, int xid, int rpcvers, int prog, int vers, int proc,
    char *data, int len)
{
	char *nameof_flavor();
	char *nameof_prog();

	(void) sprintf(get_line(pos, getxdr_pos()),
		"RPC version = %d",
		rpcvers);
	(void) sprintf(get_line(pos, getxdr_pos()),
		"Program = %d (%s), version = %d, procedure = %d",
		prog, nameof_prog(prog), vers, proc);
	print_creds(xid);
	print_verif(CALL);
	show_trailer();
	protoprint(flags, CALL, xid, prog, vers, proc, data, len);
}
示例#2
0
static
void print_message(struct debug_hdr_t *req)
{
	struct in_addr in_addr;
	struct bproc_message_hdr_t *hdr;

	hdr = bproc_debug_msg(req);
	printf("  %d.%03d:%4d: ", (int)req->time.tv_sec,
	       (int)req->time.tv_usec / 1000, hdr->size);

	if (req->tofrom == BPROC_DEBUG_OTHER) {
		switch (hdr->req) {
		case 1000:{
				struct bproc_debug_1000_msg_t *msg;
				msg = bproc_debug_msg(req);
				printf("Process move %d  %d -> %d", msg->pid,
				       msg->last, msg->node);
			} break;
		default:
			printf(" ???? ");
		}
	} else {
		/* Routing */
		printf("%8p %s %4d %c%5d->%c%5d\t",
		       hdr->id, msg_dst_names[req->tofrom], req->node,
		       (hdr->fromtype == BPROC_ROUTE_REAL) ? 'R' :
		       (hdr->fromtype == BPROC_ROUTE_NODE) ? 'N' :
		       (hdr->fromtype == BPROC_ROUTE_GHOST) ? 'G' : '?',
		       hdr->from,
		       (hdr->totype == BPROC_ROUTE_REAL) ? 'R' :
		       (hdr->totype == BPROC_ROUTE_NODE) ? 'N' :
		       (hdr->totype == BPROC_ROUTE_GHOST) ? 'G' : '?', hdr->to);

		printf("%-13s %c %4ld\t",
		       desc_lookup(descs, BPROC_REQUEST(hdr->req)),
		       BPROC_ISRESPONSE(hdr->req) ? 'R' : ' ', hdr->result);

		/* Misc message details */
		switch (hdr->req) {
		case BPROC_VERSION:{
				struct bproc_version_msg_t *msg;
				msg = bproc_debug_msg(req);
				printf("%s-%u-%d  %Ld",
				       msg->vers.version_string,
				       (int)msg->vers.magic,
				       (int)msg->vers.arch,
				       (long long)msg->cookie);
			} break;
		case BPROC_NODE_CONF:{
				struct bproc_conf_msg_t *msg;
				msg = bproc_debug_msg(req);
				printf("time=%ld.%06ld ping=%d masters=%d@%d",
				       msg->time_sec, msg->time_usec,
				       msg->ping_timeout, msg->masters_size,
				       msg->masters);
			} break;
		case BPROC_NODE_PING:{
				struct bproc_ping_msg_t *msg;
				msg = bproc_debug_msg(req);
				printf("time=%ld.%06ld", msg->time_sec,
				       msg->time_usec);
			} break;

		case BPROC_RUN:{
				struct bproc_move_msg_t *msg;
				msg = bproc_debug_msg(req);
				in_addr.s_addr = msg->addr;
				printf
				    ("pid=%d ppid=%d addr=%s:%d chld=%d o/ppid=%d/%d",
				     msg->pid, msg->ppid, inet_ntoa(in_addr),
				     (int)ntohs(msg->port), msg->children,
				     msg->ppid, msg->oppid);
				if (verbose_moves) {
					printf("	  exit signal = %d\n",
					       msg->exit_signal);
					printf("\n");
					printf("	  call_creds (@%d)\n",
					       msg->call_creds);
					print_creds(hdr, msg->call_creds);
					printf("	  proc_creds (@%d)\n",
					       msg->proc_creds);
					print_creds(hdr, msg->proc_creds);
				}
			}
			break;
		case BPROC_EXEC:{
#if 0
				in_addr.s_addr = req->req.bpr_move_addr;
				printf("addr=%s:%d chld=%d o/ppid=%d/%d",
				       inet_ntoa(in_addr),
				       (int)ntohs(req->req.bpr_move_port),
				       req->req.bpr_move_children,
				       req->req.bpr_move_ppid,
				       req->req.bpr_move_oppid);
#endif
			} break;
		case BPROC_RESPONSE(BPROC_RUN):{
				struct bproc_move_msg_t *msg;
				msg = bproc_debug_msg(req);

				/* Move responses can be small... */
				if (msg->hdr.size >= sizeof(*msg)) {
					in_addr.s_addr = msg->addr;
					printf("addr=%s:%d",
					       inet_ntoa(in_addr),
					       (int)ntohs(msg->port));

					if (verbose_moves) {
						printf("\n");
						printf
						    ("	      call_creds (@%d)\n",
						     msg->call_creds);
						print_creds(hdr,
							    msg->call_creds);
						printf
						    ("	      proc_creds (@%d)\n",
						     msg->proc_creds);
						print_creds(hdr,
							    msg->proc_creds);
					}
				}
			}
			break;
		case BPROC_SYS_FORK:{
				struct bproc_rsyscall_msg_t *msg;
				msg = bproc_debug_msg(req);
				printf("flags=0x%lx", msg->arg[0]);
			} break;
		case BPROC_RESPONSE(BPROC_SYS_FORK):{
				struct bproc_fork_resp_t *msg;
				msg = bproc_debug_msg(req);
				printf("oppid=%d ppid=%d", msg->oppid,
				       msg->ppid);
			} break;

		case BPROC_SYS_WAIT:{
				struct bproc_rsyscall_msg_t *msg;
				msg = bproc_debug_msg(req);
				printf("pid=%ld options=0x%lx", msg->arg[0],
				       msg->arg[1]);
			} break;

		case BPROC_PTRACE:{
				struct bproc_ptrace_msg_t *msg =
				    bproc_debug_msg(req);
				printf("%-8.8s pid=%d addr=0x%lx data=0x%lx",
				       desc_lookup(descs_ptrace, msg->request),
				       msg->hdr.to, msg->addr,
				       msg->data.data[0]);
				if (msg->request == PTRACE_ATTACH) {
					printf(" uid=%d gid=%d ce=0x%x",
					       msg->uid, msg->gid,
					       msg->cap_effective);
				}
			}
			break;
		case BPROC_RESPONSE(BPROC_PTRACE):{
				struct bproc_ptrace_msg_t *msg =
				    bproc_debug_msg(req);
				printf("%-8.8s",
				       desc_lookup(descs_ptrace, msg->request));
				if (msg->request == PTRACE_ATTACH) {
					printf(" nlchild_adj=%d",
					       msg->data.data ? 1 : 0);
				}
				if (msg->request == PTRACE_PEEKDATA ||
				    msg->request == PTRACE_PEEKTEXT) {
					int i;
					printf(" addr=0x%0*lx bytes=%d",
					       (int)sizeof(long) * 2, msg->addr,
					       msg->bytes);
					/* ah fun. Cast depends on architecture type. I really love gcc */
					for (i = 0;
					     i < msg->bytes / sizeof(int); i++)
						printf(" %0*lx",
						       (int)sizeof(int) * 2,
						       ((long unsigned int *)
							msg->data.data)[i]);
				}
			} break;
		case BPROC_REPARENT:{
				struct bproc_reparent_msg_t *msg =
				    bproc_debug_msg(req);
				printf("ptrace=0x%x new_parent=%d", msg->ptrace,
				       msg->new_parent);
			} break;

		case BPROC_FWD_SIG:{
				struct bproc_signal_msg_t *sig =
				    bproc_debug_msg(req);
				printf("sig = %d   kill: pid=%d uid=%d",
				       sig->info.si_signo,
				       sig->info._sifields._kill._pid,
				       sig->info._sifields._kill._uid);
			} break;
		case BPROC_SYS_SETPGID:{
				struct bproc_rsyscall_msg_t *msg =
				    bproc_debug_msg(req);
				printf("pid=%ld pgid=%ld", msg->arg[0],
				       msg->arg[1]);
			} break;
		case BPROC_SYS_GETPGID:{
				struct bproc_rsyscall_msg_t *msg =
				    bproc_debug_msg(req);
				printf("pid=%ld", msg->arg[0]);
			} break;
		case BPROC_PGRP_CHANGE:{
				struct bproc_pgrp_msg_t *msg =
				    bproc_debug_msg(req);
				printf("pgid=%d", msg->pgid);
			} break;
		case BPROC_SYS_KILL:{
				struct bproc_signal_msg_t *msg =
				    bproc_debug_msg(req);
				printf("pid=%d sig=%d", msg->pid,
				       msg->info.si_signo);
			} break;
		case BPROC_STOP:
		case BPROC_CONT:
		case BPROC_RESPONSE(BPROC_GET_STATUS):{
				struct bproc_status_msg_t *msg =
				    bproc_debug_msg(req);
				printf("state=%d exit_code=0x%x (vm=%ld %ld)",
				       msg->state, msg->exit_code,
				       msg->vm.statm.size,
				       msg->vm.status.total_vm);
			} break;
		}
	}
	printf("\n");
	fflush(stdout);
}