/** do the stats command */ static void do_stats(SSL* ssl, struct daemon_remote* rc, int reset) { struct daemon* daemon = rc->worker->daemon; struct stats_info total; struct stats_info s; int i; log_assert(daemon->num > 0); /* gather all thread statistics in one place */ for(i=0; i<daemon->num; i++) { server_stats_obtain(rc->worker, daemon->workers[i], &s, reset); if(!print_thread_stats(ssl, i, &s)) return; if(i == 0) total = s; else server_stats_add(&total, &s); } /* print the thread statistics */ total.mesh_time_median /= (double)daemon->num; if(!print_stats(ssl, "total", &total)) return; if(!print_uptime(ssl, rc->worker)) return; if(daemon->cfg->stat_extended) { if(!print_mem(ssl, rc->worker, daemon)) return; if(!print_hist(ssl, &total)) return; if(!print_ext(ssl, &total)) return; } }
/* ARGSUSED1 */ void pfkey_monitor_sa(struct sadb_msg *msg, int opts) { int i; setup_extensions(msg); printf("%s: satype %s vers %u len %u seq %u pid %u\n", lookup_name(msg_types, msg->sadb_msg_type), lookup_name(sa_types, msg->sadb_msg_satype), msg->sadb_msg_version, msg->sadb_msg_len, msg->sadb_msg_seq, msg->sadb_msg_pid); if (msg->sadb_msg_errno) printf("\terrno %u: %s\n", msg->sadb_msg_errno, strerror(msg->sadb_msg_errno)); for (i = 0; i <= SADB_EXT_MAX; i++) if (extensions[i]) print_ext(extensions[i], msg); fflush(stdout); }
/* opposite of pfkey_sa() */ void pfkey_print_sa(struct sadb_msg *msg, int opts) { int i; struct ipsec_rule r; struct ipsec_key enckey, authkey; struct ipsec_transforms xfs; struct ipsec_addr_wrap src, dst; struct sadb_sa *sa; setup_extensions(msg); sa = (struct sadb_sa *)extensions[SADB_EXT_SA]; if (!(opts & IPSECCTL_OPT_SHOWKEY)) { extensions[SADB_EXT_KEY_AUTH] = NULL; extensions[SADB_EXT_KEY_ENCRYPT] = NULL; } bzero(&r, sizeof r); r.type |= RULE_SA; r.tmode = (msg->sadb_msg_satype != SADB_X_SATYPE_TCPSIGNATURE) && (sa->sadb_sa_flags & SADB_X_SAFLAGS_TUNNEL) ? IPSEC_TUNNEL : IPSEC_TRANSPORT; r.spi = ntohl(sa->sadb_sa_spi); switch (msg->sadb_msg_satype) { case SADB_SATYPE_AH: r.satype = IPSEC_AH; break; case SADB_SATYPE_ESP: r.satype = IPSEC_ESP; break; case SADB_X_SATYPE_IPCOMP: r.satype = IPSEC_IPCOMP; break; case SADB_X_SATYPE_TCPSIGNATURE: r.satype = IPSEC_TCPMD5; break; case SADB_X_SATYPE_IPIP: r.satype = IPSEC_IPIP; break; default: return; } bzero(&dst, sizeof dst); bzero(&src, sizeof src); parse_addr(extensions[SADB_EXT_ADDRESS_SRC], &src); parse_addr(extensions[SADB_EXT_ADDRESS_DST], &dst); r.src = &src; r.dst = &dst; if (r.satype == IPSEC_IPCOMP) { if (sa->sadb_sa_encrypt) { bzero(&xfs, sizeof xfs); r.xfs = &xfs; switch (sa->sadb_sa_encrypt) { case SADB_X_CALG_DEFLATE: xfs.encxf = &compxfs[COMPXF_DEFLATE]; break; case SADB_X_CALG_LZS: xfs.encxf = &compxfs[COMPXF_LZS]; break; } } } else if (r.satype == IPSEC_TCPMD5) { bzero(&authkey, sizeof authkey); parse_key(extensions[SADB_EXT_KEY_AUTH], &authkey); r.authkey = &authkey; } else if (sa->sadb_sa_encrypt || sa->sadb_sa_auth) { bzero(&xfs, sizeof xfs); r.xfs = &xfs; if (sa->sadb_sa_encrypt) { switch (sa->sadb_sa_encrypt) { case SADB_EALG_3DESCBC: xfs.encxf = &encxfs[ENCXF_3DES_CBC]; break; case SADB_EALG_DESCBC: xfs.encxf = &encxfs[ENCXF_DES_CBC]; break; case SADB_X_EALG_AES: xfs.encxf = &encxfs[ENCXF_AES]; break; case SADB_X_EALG_AESCTR: xfs.encxf = &encxfs[ENCXF_AESCTR]; break; case SADB_X_EALG_BLF: xfs.encxf = &encxfs[ENCXF_BLOWFISH]; break; case SADB_X_EALG_CAST: xfs.encxf = &encxfs[ENCXF_CAST128]; break; case SADB_EALG_NULL: xfs.encxf = &encxfs[ENCXF_NULL]; break; case SADB_X_EALG_SKIPJACK: xfs.encxf = &encxfs[ENCXF_SKIPJACK]; break; } bzero(&enckey, sizeof enckey); parse_key(extensions[SADB_EXT_KEY_ENCRYPT], &enckey); r.enckey = &enckey; } if (sa->sadb_sa_auth) { switch (sa->sadb_sa_auth) { case SADB_AALG_MD5HMAC: xfs.authxf = &authxfs[AUTHXF_HMAC_MD5]; break; case SADB_X_AALG_RIPEMD160HMAC: xfs.authxf = &authxfs[AUTHXF_HMAC_RIPEMD160]; break; case SADB_AALG_SHA1HMAC: xfs.authxf = &authxfs[AUTHXF_HMAC_SHA1]; break; case SADB_X_AALG_SHA2_256: xfs.authxf = &authxfs[AUTHXF_HMAC_SHA2_256]; break; case SADB_X_AALG_SHA2_384: xfs.authxf = &authxfs[AUTHXF_HMAC_SHA2_384]; break; case SADB_X_AALG_SHA2_512: xfs.authxf = &authxfs[AUTHXF_HMAC_SHA2_512]; break; } bzero(&authkey, sizeof authkey); parse_key(extensions[SADB_EXT_KEY_AUTH], &authkey); r.authkey = &authkey; } } ipsecctl_print_rule(&r, opts); if (opts & IPSECCTL_OPT_VERBOSE) { for (i = 0; i <= SADB_EXT_MAX; i++) if (extensions[i]) print_ext(extensions[i], msg); } fflush(stdout); }
int main(int argc, char *argv[]) { int fd; int ret = 0; char *filename; #if defined(HAVE_FSTAT64) && !defined(__OSX_AVAILABLE_BUT_DEPRECATED) struct stat64 st; #else struct stat st; #endif int total_blks; unsigned int i; struct file_ext ext; __u32 start_lba; __u32 blknum; if (argc != 2) { fprintf(stderr, "No filename\n"); exit(-1); } filename = argv[1]; fd = open(filename, O_RDONLY|O_LARGEFILE); if (fd < 0) { ret = errno; perror(filename); exit(-1); } fsync(fd); #if defined(HAVE_FSTAT64) && !defined(__OSX_AVAILABLE_BUT_DEPRECATED) if (fstat64(fd, &st) < 0) { #else if (fstat(fd, &st) < 0) { #endif ret = errno; perror(filename); goto out; } stat_bdev(&st, &start_lba); total_blks = (st.st_size + st.st_blksize - 1) / st.st_blksize; printf("\n----------------file info-------------------\n"); printf("%s :\n", filename); print_stat(&st); printf("file_pos start_blk end_blk blks\n"); blknum = 0; if (ioctl(fd, FIBMAP, &blknum) < 0) { ret = errno; perror("ioctl(FIBMAP)"); goto out; } ext.f_pos = 0; ext.start_blk = blknum; ext.end_blk = blknum; ext.blk_count = 1; for (i = 1; i < total_blks; i++) { blknum = i; if (ioctl(fd, FIBMAP, &blknum) < 0) { ret = errno; perror("ioctl(FIBMAP)"); goto out; } if ((blknum == 0 && blknum == ext.end_blk) || (ext.end_blk + 1) == blknum) { ext.end_blk = blknum; ext.blk_count++; } else { print_ext(&ext); ext.f_pos = i * st.st_blksize; ext.start_blk = blknum; ext.end_blk = blknum; ext.blk_count = 1; } } print_ext(&ext); out: close(fd); return ret; }