int main(int argc, char *argv[]) { struct addrinfo *ailist, *aip; struct addrinfo hint; int sockfd, err; struct sigaction sa; sa.sa_handler = sigalarm; sa.sa_flags = 0; sigemptyset(&sa.sa_mask); sigaction(SIGALARM, &sa, NULL); memeset(&hint, 0, sizeof(hint)); hint.ai_socktype = SOCK_DGRAM; hint.ai_canonname = NULL; hint.ai_addr = NULL; hint.ai_next = NULL; getaddrinfo(argv[1], "ruptime", &hint, &ailist); for (aip = ailist; aip != NULL; aip = aip->next) { sockfd = socket(aip->ai_family, SOCK_DGRAM, 0); print_uptime(sockfd, aip); exit(0); } exit(-1); }
/** 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; } }
int main(int argc, char *argv[]) { struct addrinfo *ailist, *aip; struct addrinfo hint; int sockfd, err; if (argc != 2) err_quit("usage: ruptime hostname"); hint.ai_flags = 0; hint.ai_family = 0; hint.ai_socktype = SOCK_STREAM; hint.ai_protocol = 0; hint.ai_addrlen = 0; hint.ai_canonname = NULL; hint.ai_addr = NULL; hint.ai_next = NULL; if ((err = getaddrinfo(argv[1], "ruptime", &hint, &ailist)) != 0) err_quit("getaddrinfo error: %s", gai_strerror(err)); for (aip = ailist; aip != NULL; aip = aip->ai_next) { if ((sockfd = socket(aip->ai_family, SOCK_STREAM, 0)) < 0) err = errno; if (connect_retry(sockfd, aip->ai_addr, aip->ai_addrlen) < 0) { err = errno; } else { print_uptime(sockfd); exit(0); } } fprintf(stderr, "can't connect to %s: %s\n", argv[1], strerror(err)); exit(1); }
int main(int argc, char * argv[]) { int just_pretty_uptime = 0; if (argc > 1) { int index, c; while ((c = getopt(argc, argv, "p?")) != -1) { switch (c) { case 'p': just_pretty_uptime = 1; break; case '?': show_usage(argc, argv); return 0; } } } if (!just_pretty_uptime) print_time(); print_uptime(); printf("\n"); return 0; }
int main(int argc, char *argv[]) { struct addrinfo *ailist, *aip; struct addrinfo hint; int sockfd, err; if (argc != 2) err_quit("usage: ruptime hostname"); memset(&hint, 0, sizeof(hint)); hint.ai_socktype = SOCK_STREAM; hint.ai_canonname = NULL; hint.ai_addr = NULL; hint.ai_next = NULL; if ((err = getaddrinfo(argv[1], "ruptime", &hint, &ailist)) != 0) err_quit("getaddrinfo error: %s", gai_strerror(err)); // 如果服务器支持多重网络接口或多重网络协议,getaddrinfo可能会返回多个后续地址 // 轮流尝试对每个地址进行连接,找到一个便可停止 for (aip = ailist; aip != NULL; aip = aip->ai_next) { if ((sockfd = connect_retry(aip->ai_family, SOCK_STREAM, 0, aip->ai_addr, aip->ai_addrlen)) < 0) { err = errno; } else { print_uptime(sockfd); exit(0); } } err_exit(err, "can't connect to %s", argv[1]); }
int main(int argc, char *argv[]) { // déclaration des variables int tmp_flag = 0; int pct_flag = 0; int n = -1; int i; int c; // affichage du pid printf("PID: %d\n", getpid()); // affichage nombre de jobs en attente print_loadavg(); // récupération des options (si existants) while ((c = getopt(argc, argv, "ir:")) != -1) { switch(c) { case 'i': print_uptime(); pct_flag = 1; break; case 'r': tmp_flag = 1; // nombre de secondes de la mise à jour n = atoi(optarg); break; } } // mise à jours des informations tout les n secondes if(tmp_flag == 1) while(1) { sleep(n); print_loadavg(); if(pct_flag == 1) print_uptime(); } return 0; }
/* * Shutdown the system cleanly to prepare for reboot, halt, or power off. */ void kern_reboot(int howto) { static int once = 0; #if defined(SMP) /* * Bind us to CPU 0 so that all shutdown code runs there. Some * systems don't shutdown properly (i.e., ACPI power off) if we * run on another processor. */ if (!SCHEDULER_STOPPED()) { thread_lock(curthread); sched_bind(curthread, 0); thread_unlock(curthread); KASSERT(PCPU_GET(cpuid) == 0, ("boot: not running on cpu 0")); } #endif /* We're in the process of rebooting. */ rebooting = 1; /* We are out of the debugger now. */ kdb_active = 0; /* * Do any callouts that should be done BEFORE syncing the filesystems. */ EVENTHANDLER_INVOKE(shutdown_pre_sync, howto); /* * Now sync filesystems */ if (!cold && (howto & RB_NOSYNC) == 0 && once == 0) { once = 1; bufshutdown(show_busybufs); } print_uptime(); cngrab(); /* * Ok, now do things that assume all filesystem activity has * been completed. */ EVENTHANDLER_INVOKE(shutdown_post_sync, howto); if ((howto & (RB_HALT|RB_DUMP)) == RB_DUMP && !cold && !dumping) doadump(TRUE); /* Now that we're going to really halt the system... */ EVENTHANDLER_INVOKE(shutdown_final, howto); for(;;) ; /* safety against shutdown_reset not working */ /* NOTREACHED */ }
/** print statistics out of memory structures */ static void do_stats_shm(struct config_file* cfg, struct ub_stats_info* stats, struct ub_shm_stat_info* shm_stat) { int i; char nm[32]; for(i=0; i<cfg->num_threads; i++) { snprintf(nm, sizeof(nm), "thread%d", i); pr_stats(nm, &stats[i+1]); } pr_stats("total", &stats[0]); print_uptime(shm_stat); if(cfg->stat_extended) { print_mem(shm_stat); print_hist(stats); print_extended(stats); } }
void client(int argc,char *argv[]) { struct addrinfo *alist,*aip ; struct addrinfo hint ; int sockfd ,err; if(argc != 2) { perror("usage:uptime hostname") ; } hint.ai_flags = 0 ; hint.ai_family = AF_INET ; hint.ai_socktype = SOCK_STREAM ; hint.ai_addrlen = 0 ; hint.ai_addr = NULL ; hint.ai_canonname = NULL ; hint.ai_protocol = 0 ; hint.ai_next = NULL ; if(getaddrinfo(argv[1],"uptime",&hint,&alist) != 0) { gai_strerror(errno) ; } for(aip = alist; aip != NULL ; aip = aip->ai_next) { if( (sockfd = socket(AF_INET,SOCK_STREAM,0)) < 0) { //perror("socket failed ") ; err = errno ; } if( connect_retry(sockfd,aip->ai_addr,aip->ai_addrlen) < 0) { perror("connect_retry failed") ; err = errno ; } else { print_uptime(sockfd) ; exit(0) ; } } fprintf(stderr,"cannot connect to %s: %s\n",argv[1],strerror(err)) ; exit(1) ; }
int main(int argc, char *argv[]) { struct addrinfo *ailist, *aip; struct addrinfo hint; int socketfd, err; if (argc != 2) { printf("intput 2 arg\n"); return 0; } hint.ai_flags = 0; hint.ai_family = 0; hint.ai_socktype = SOCK_STREAM; hint.ai_protocol = 0; hint.ai_addrlen = 0; hint.ai_canonname = NULL; hint.ai_addr = NULL; hint.ai_next = NULL; if ((err = getaddrinfo(argv[1], "ruptime", &hint, &ailist)) != 0) { printf("getaddrinfo error\n"); return -1; } for (aip = ailist; aip != NULL; aip = aip->ai_next) { if ((socketfd = socket(aip->ai_family, SOCK_STREAM, 0)) < 0) err = errno; if (connect_retry(socketfd, aip->ai_addr, aip->ai_addrlen) < 0) { err = errno ; } else { print_uptime(socketfd); exit(0); } } fprintf(stderr, "can't, connetc, to %s\n", argv[1]); exit(1); }
int main(int argc, char *argv[]) { struct addrinfo *ailist, *aip; struct addrinfo hint; int sockfd, err; struct sigaction sa; if (argc != 2) err_quit("usage: ruptime hostname"); sa.sa_handler = sigalrm; sa.sa_flags = 0; sigemptyset(&sa.sa_mask); if (sigaction(SIGALRM, &sa, NULL) < 0) err_sys("sigaction error"); hint.ai_flags = 0; hint.ai_family = 0; hint.ai_socktype = SOCK_DGRAM; hint.ai_protocol = 0; hint.ai_addrlen = 0; hint.ai_canonname = NULL; hint.ai_addr = NULL; hint.ai_next = NULL; if ((err = getaddrinfo(argv[1], "ruptime", &hint, &ailist)) != 0) err_quit("getaddrinfo error: %s", gai_strerror(err)); for (aip = ailist; aip != NULL; aip = aip->ai_next) { if ((sockfd = socket(aip->ai_family, SOCK_DGRAM, 0)) < 0) { err = errno; } else { print_uptime(sockfd, aip); exit(0); } } fprintf(stderr, "can't contact %s: %s\n", argv[1], strerror(err)); exit(1); }
int main(int argc, char **argv) { int c; static const struct option longopts[] = { {"help", no_argument, NULL, 'h'}, {"since", no_argument, NULL, 's'}, {"version", no_argument, NULL, 'V'}, {NULL, 0, NULL, 0} }; #ifdef HAVE_PROGRAM_INVOCATION_NAME program_invocation_name = program_invocation_short_name; #endif setlocale (LC_ALL, ""); bindtextdomain(PACKAGE, LOCALEDIR); textdomain(PACKAGE); atexit(close_stdout); while ((c = getopt_long(argc, argv, "hsV", longopts, NULL)) != -1) switch (c) { case 'h': usage(stdout); case 's': print_uptime_since(); return EXIT_SUCCESS; case 'V': printf(PROCPS_NG_VERSION); return EXIT_SUCCESS; default: usage(stderr); } print_uptime(); return EXIT_SUCCESS; }
static int sysinfo_cb (char *word[], char *word_eol[], void *userdata) { error_printed = 0; int announce = 0; int buffer; char format[bsize]; if (!hexchat_pluginpref_get_str (ph, "format", format)) { hexchat_printf (ph, "%s\tError reading config file!", name); return HEXCHAT_EAT_ALL; } if (hexchat_list_int (ph, NULL, "type") >= 2) { announce = 1; } if (!g_ascii_strcasecmp ("HELP", word[2])) { hexchat_printf (ph, sysinfo_help); return HEXCHAT_EAT_ALL; } else if (!g_ascii_strcasecmp ("LIST", word[2])) { list_settings (); return HEXCHAT_EAT_ALL; } else if (!g_ascii_strcasecmp ("SET", word[2])) { if (!g_ascii_strcasecmp ("", word_eol[4])) { hexchat_printf (ph, "%s\tEnter a value!\n", name); return HEXCHAT_EAT_ALL; } if (!g_ascii_strcasecmp ("format", word[3])) { hexchat_pluginpref_set_str (ph, "format", word_eol[4]); hexchat_printf (ph, "%s\tformat is set to: %s\n", name, word_eol[4]); } else if (!g_ascii_strcasecmp ("percent", word[3])) { buffer = atoi (word[4]); /* don't use word_eol, numbers must not contain spaces */ if (buffer > 0 && buffer < INT_MAX) { hexchat_pluginpref_set_int (ph, "percent", buffer); hexchat_printf (ph, "%s\tpercent is set to: %d\n", name, buffer); } else { hexchat_printf (ph, "%s\tInvalid input!\n", name); } } else if (!g_ascii_strcasecmp ("pciids", word[3])) { hexchat_pluginpref_set_str (ph, "pciids", word_eol[4]); hexchat_printf (ph, "%s\tpciids is set to: %s\n", name, word_eol[4]); } else { hexchat_printf (ph, "%s\tInvalid variable name! Use 'pciids', 'format' or 'percent'!\n", name); return HEXCHAT_EAT_ALL; } return HEXCHAT_EAT_ALL; } else if (!g_ascii_strcasecmp ("RESET", word[2])) { reset_settings (); hexchat_printf (ph, "%s\tSettings have been restored to defaults.\n", name); return HEXCHAT_EAT_ALL; } else if (!g_ascii_strcasecmp ("OS", word[2])) { print_os (announce, format); return HEXCHAT_EAT_ALL; } else if (!g_ascii_strcasecmp ("DISTRO", word[2])) { print_distro (announce, format); return HEXCHAT_EAT_ALL; } else if (!g_ascii_strcasecmp ("CPU", word[2])) { print_cpu (announce, format); return HEXCHAT_EAT_ALL; } else if (!g_ascii_strcasecmp ("RAM", word[2])) { print_ram (announce, format); return HEXCHAT_EAT_ALL; } else if (!g_ascii_strcasecmp ("DISK", word[2])) { print_disk (announce, format); return HEXCHAT_EAT_ALL; } else if (!g_ascii_strcasecmp ("VGA", word[2])) { print_vga (announce, format); return HEXCHAT_EAT_ALL; } else if (!g_ascii_strcasecmp ("SOUND", word[2])) { print_sound (announce, format); return HEXCHAT_EAT_ALL; } else if (!g_ascii_strcasecmp ("ETHERNET", word[2])) { print_ethernet (announce, format); return HEXCHAT_EAT_ALL; } else if (!g_ascii_strcasecmp ("UPTIME", word[2])) { print_uptime (announce, format); return HEXCHAT_EAT_ALL; } else if (!g_ascii_strcasecmp ("", word[2])) { print_summary (announce, format); return HEXCHAT_EAT_ALL; } else { hexchat_printf (ph, sysinfo_help); return HEXCHAT_EAT_ALL; } }
/* Main */ int main (int argc, char **argv) { const char *buptime_file = BUPTIME, *uptime_file = UPTIME; double uptime, idle, tuptime, tidle, muptime, midle; char *c, mode = 'p'; FILE *fp; int i; /* Parse program name */ for (program_name = c = *argv; *c; ++c) { if (*c=='/') { program_name = c+1; } } /* Parse arguments */ i = 0; c = 0; while ((c && *++c) || (c = 0) || ++i < argc) { char *arg; if (!c) { c = argv[i]; if (c[0]!='-' || c[1]==0 || c[1]=='-') { ERR("invalid argument: %s", argv[i]); return 1; } ++c; } switch (*c) { case 'h': usage(); return 0; case 'r': mode = 'r'; break; case 'b': case 'u': if (c[1]) { arg = c + 1; } else if (++i<argc) { arg = argv[i]; } else { ERR("parameter expected after -%c", *c); return 1; } *c == 'b' ? (buptime_file = arg) : (uptime_file = arg); c = 0; break; default: ERR("invalid option: -%c", *c); return 1; } } /* Read /proc/uptime */ fp = fopen(uptime_file, "r"); if (!fp) { ERR("could not open %s", uptime_file); return 2; } if (fscanf(fp, "%lf %lf", &uptime, &idle)!=2) { fclose(fp); ERR("error reading %s", uptime_file); return 2; } fclose(fp); /* Read buptime */ fp = fopen(buptime_file, "r"); if (!fp) { ERR("could not open %s (skipping)", buptime_file); tuptime = tidle = 0; } else { i = fscanf(fp, "%lf %lf %lf %lf", &tuptime, &tidle, &muptime, &midle); if (i!=2 && i!=4) { ERR("error reading %s (skipping)", buptime_file); tuptime = tidle = 0; } fclose(fp); } /* Calculate total uptime */ if (uptime>muptime) { muptime = uptime; midle = idle; } tuptime += uptime; tidle += idle; /* Print raw */ if (mode=='r') { printf("%.2f %.2f\n%.2f %.2f\n", tuptime, tidle, muptime, midle); return 0; } /* Print if print mode */ print_uptime("total: ", tuptime, tidle); putchar('\n'); print_uptime("biggest: ", muptime, midle); printf(" (%.2f%% of total)\n", muptime*100/tuptime); print_uptime("current: ", uptime, idle); printf(" (%.2f%% of total, %.2f%% of biggest)\n", uptime*100/tuptime, uptime*100/muptime); return 0; }
/* FUNCTION: netmain_iface() * * Display interface status * * PARAM1: CLI_CTX CLI context * * RETURN: int 0 if successful, otherwise error code * * iface -i <iface> */ STATIC int netmain_iface(CLI_CTX ctx) { GIO *gio = ctx->gio; struct net *ifp; int iface; if (CLI_HELP(ctx)) { return (0); } if (CLI_DEFINED(ctx, 'i')) { iface = (int)CLI_VALUE(ctx, 'i'); if ((iface < 1) || (iface > (int)ifNumber)) return (CLI_ERR_PARAM); ifp = nets[iface - 1]; if (CLI_DEFINED(ctx, 'm')) { uint32_t mtu = (uint32_t)CLI_VALUE(ctx, 'm'); if ((mtu >= 128) && (mtu < 65536)) { ifp->n_mtu = mtu; /* new interface MTU value */ } else return (CLI_ERR_PARAM); } gio_printf(gio, "Interface %s - %s, MTU %d\n", ifp->name, ifp->n_mib->ifDescr, ifp->n_mtu); #ifdef IP_V4 gio_printf(gio, "IPv4 address: %u.%u.%u.%u, ", PUSH_IPADDR(ifp->n_ipaddr)); gio_printf(gio, "subnet mask: %u.%u.%u.%u, ", PUSH_IPADDR(ifp->snmask)); gio_printf(gio, "gateway: %u.%u.%u.%u\n", PUSH_IPADDR(ifp->n_defgw)); #endif /* IP_V4 */ { char buf[80]; gio_printf(gio, "Flags: %s\n", in_bit2str(&ifp_flags[0], ifp->n_flags, &buf[0], 80, ',')); } #if defined(IP_V6) && defined(IP6_MENUS) if (ifp->n_flags & NF_IPV6) { int i; char ip6buf[46]; /* tmp buffer for ipv6 address text */ for (i = 0; i < MAX_V6_ADDRS; i++) { if (ifp->v6addrs[i]) { gio_printf(gio, "IPv6 %6s addr: %s", v6types[i], print_ip6(&(ifp->v6addrs[i]->addr), ip6buf)); gio_printf(gio, " - %s\n", ip6addrstates[ifp->v6addrs[i]->flags & IA_STATEMASK]); } } } else gio_printf(gio, "No IPv6 addresses\n"); #endif /* IP_V6 && IP6_MENUS */ gio_printf(gio, "Status: Admin:%s Oper:%s for: %s\n", (ifp->n_mib->ifAdminStatus == 1) ? "up" : "down", (ifp->n_mib->ifOperStatus == 1) ? "up" : "down", print_uptime(TIME_SUB(sysuptime(), (ifp->n_mib->ifLastChange)))); gio_printf(gio, "rcvd: errors:%lu dropped:%lu station:%lu bcast:%lu bytes:%lu\n", ifp->n_mib->ifInErrors, ifp->n_mib->ifInDiscards, ifp->n_mib->ifInUcastPkts, ifp->n_mib->ifInNUcastPkts, ifp->n_mib->ifInOctets); gio_printf(gio, "sent: errors:%lu dropped:%lu station:%lu bcast:%lu bytes:%lu\n", ifp->n_mib->ifOutErrors, ifp->n_mib->ifOutDiscards, ifp->n_mib->ifOutUcastPkts, ifp->n_mib->ifOutNUcastPkts, ifp->n_mib->ifOutOctets); gio_printf(gio, "MAC address: "); gio_hexdump(gio, ifp->n_mib->ifPhysAddress, 6, TRUE, FALSE); gio_printf(gio, " \n"); #ifdef IP_MULTICAST /* Print any multicast addresses assigned to this iface */ #ifndef USE_IGMPV3 if (ifp->mc_list) { struct in_multi *imp; gio_printf(gio, " Multicast addresses: \n"); for (imp = ifp->mc_list; imp; imp = imp->inm_next) { #ifdef IP_V6 if (*(u_long *)&imp->ip6addr != 0x0) { char ip6buf[40]; /* tmp buffer for ipv6 address text */ gio_printf(gio, " %s\n", print_ip6(&(imp->ip6addr), ip6buf)); } else #endif /* IP_V6 */ { gio_printf(gio, " %u.%u.%u.%u\n", PUSH_IPADDR(imp->inm_addr)); } } } #else /* if USE_IGMPV3 defined*/ igmp_print_membership(ifp, gio); #endif /* USE_IGMPV3 */ #endif /* IP_MULTICAST */ } else /* list all interfaces */ { for (iface = 1; iface <= (int)ifNumber; iface++) { gio_printf(gio, "%2d: %s - %s\n", iface, nets[iface-1]->name, nets[iface-1]->n_mib->ifDescr); } } return (0); }
int main(int argc, char *argv[]) { bool toggle_tasks = true; bool toggle_threads = false; bool toggle_all = false; bool toggle_cpus = false; bool toggle_load = false; bool toggle_uptime = false; task_id_t task_id = 0; int i; for (i = 1; i < argc; i++) { int off; /* Usage */ if ((off = arg_parse_short_long(argv[i], "-h", "--help")) != -1) { usage(argv[0]); return 0; } /* All threads */ if ((off = arg_parse_short_long(argv[i], "-a", "--all")) != -1) { toggle_tasks = false; toggle_threads = true; toggle_all = true; continue; } /* CPUs */ if ((off = arg_parse_short_long(argv[i], "-c", "--cpus")) != -1) { toggle_tasks = false; toggle_cpus = true; continue; } /* Threads */ if ((off = arg_parse_short_long(argv[i], "-t", "--task=")) != -1) { // TODO: Support for 64b range int tmp; int ret = arg_parse_int(argc, argv, &i, &tmp, off); if (ret != EOK) { printf("%s: Malformed task_id '%s'\n", NAME, argv[i]); return -1; } task_id = tmp; toggle_tasks = false; toggle_threads = true; continue; } /* Load */ if ((off = arg_parse_short_long(argv[i], "-l", "--load")) != -1) { toggle_tasks = false; toggle_load = true; continue; } /* Uptime */ if ((off = arg_parse_short_long(argv[i], "-u", "--uptime")) != -1) { toggle_tasks = false; toggle_uptime = true; continue; } } if (toggle_tasks) list_tasks(); if (toggle_threads) list_threads(task_id, toggle_all); if (toggle_cpus) list_cpus(); if (toggle_load) print_load(); if (toggle_uptime) print_uptime(); return 0; }
/***** main */ int main(int argc, char **argv) { char *user = NULL; utmp_t *u; struct winsize win; int header=1, longform=1, from=1, args, maxcmd=80, ch; #ifndef W_SHOWFROM from = 0; #endif for (args=0; (ch = getopt(argc, argv, "hlusfV")) != EOF; args++) switch (ch) { case 'h': header = 0; break; case 'l': longform = 1; break; case 's': longform = 0; break; case 'f': from = !from; break; case 'V': display_version(); exit(0); case 'u': ignoreuser = 1; break; default: printf("usage: w -hlsufV [user]\n" " -h skip header\n" " -l long listing (default)\n" " -s short listing\n" " -u ignore uid of processes\n" " -f toggle FROM field (default %s)\n" " -V display version\n", FROM_STRING); exit(1); } if ((argv[optind])) user = (argv[optind]); if (ioctl(1, TIOCGWINSZ, &win) != -1 && win.ws_col > 0) maxcmd = win.ws_col; if (maxcmd < 71) { fprintf(stderr, "%d column window is too narrow\n", maxcmd); exit(1); } maxcmd -= 29 + (from ? 16 : 0) + (longform ? 20 : 0); if (maxcmd < 3) fprintf(stderr, "warning: screen width %d suboptimal.\n", win.ws_col); procs = readproctab(PROC_FILLCMD | PROC_FILLUSR); if (header) { /* print uptime and headers */ print_uptime(); printf("USER TTY "); if (from) printf("FROM "); if (longform) printf(" LOGIN@ IDLE JCPU PCPU WHAT\n"); else printf(" IDLE WHAT\n"); } utmpname(UTMP_FILE); setutent(); while ((u=getutent())) { if (u->ut_type == USER_PROCESS && (user ? !strncmp(u->ut_user, user, USERSZ) : *u->ut_user)) showinfo(u, longform, maxcmd, from); } endutent(); return 0; }
/* * Shutdown the system cleanly to prepare for reboot, halt, or power off. */ void kern_reboot(int howto) { static int first_buf_printf = 1; #if defined(SMP) /* * Bind us to CPU 0 so that all shutdown code runs there. Some * systems don't shutdown properly (i.e., ACPI power off) if we * run on another processor. */ if (!SCHEDULER_STOPPED()) { thread_lock(curthread); sched_bind(curthread, 0); thread_unlock(curthread); KASSERT(PCPU_GET(cpuid) == 0, ("boot: not running on cpu 0")); } #endif /* We're in the process of rebooting. */ rebooting = 1; /* collect extra flags that shutdown_nice might have set */ howto |= shutdown_howto; /* We are out of the debugger now. */ kdb_active = 0; /* * Do any callouts that should be done BEFORE syncing the filesystems. */ EVENTHANDLER_INVOKE(shutdown_pre_sync, howto); /* * Now sync filesystems */ if (!cold && (howto & RB_NOSYNC) == 0 && waittime < 0) { register struct buf *bp; int iter, nbusy, pbusy; #ifndef PREEMPTION int subiter; #endif waittime = 0; wdog_kern_pat(WD_LASTVAL); sys_sync(curthread, NULL); /* * With soft updates, some buffers that are * written will be remarked as dirty until other * buffers are written. */ for (iter = pbusy = 0; iter < 20; iter++) { nbusy = 0; for (bp = &buf[nbuf]; --bp >= buf; ) if (isbufbusy(bp)) nbusy++; if (nbusy == 0) { if (first_buf_printf) printf("All buffers synced."); break; } if (first_buf_printf) { printf("Syncing disks, buffers remaining... "); first_buf_printf = 0; } printf("%d ", nbusy); if (nbusy < pbusy) iter = 0; pbusy = nbusy; wdog_kern_pat(WD_LASTVAL); sys_sync(curthread, NULL); #ifdef PREEMPTION /* * Drop Giant and spin for a while to allow * interrupt threads to run. */ DROP_GIANT(); DELAY(50000 * iter); PICKUP_GIANT(); #else /* * Drop Giant and context switch several times to * allow interrupt threads to run. */ DROP_GIANT(); for (subiter = 0; subiter < 50 * iter; subiter++) { thread_lock(curthread); mi_switch(SW_VOL, NULL); thread_unlock(curthread); DELAY(1000); } PICKUP_GIANT(); #endif } printf("\n"); /* * Count only busy local buffers to prevent forcing * a fsck if we're just a client of a wedged NFS server */ nbusy = 0; for (bp = &buf[nbuf]; --bp >= buf; ) { if (isbufbusy(bp)) { #if 0 /* XXX: This is bogus. We should probably have a BO_REMOTE flag instead */ if (bp->b_dev == NULL) { TAILQ_REMOVE(&mountlist, bp->b_vp->v_mount, mnt_list); continue; } #endif nbusy++; if (show_busybufs > 0) { printf( "%d: buf:%p, vnode:%p, flags:%0x, blkno:%jd, lblkno:%jd, buflock:", nbusy, bp, bp->b_vp, bp->b_flags, (intmax_t)bp->b_blkno, (intmax_t)bp->b_lblkno); BUF_LOCKPRINTINFO(bp); if (show_busybufs > 1) vn_printf(bp->b_vp, "vnode content: "); } } } if (nbusy) { /* * Failed to sync all blocks. Indicate this and don't * unmount filesystems (thus forcing an fsck on reboot). */ printf("Giving up on %d buffers\n", nbusy); DELAY(5000000); /* 5 seconds */ } else { if (!first_buf_printf) printf("Final sync complete\n"); /* * Unmount filesystems */ if (panicstr == 0) vfs_unmountall(); } swapoff_all(); DELAY(100000); /* wait for console output to finish */ } print_uptime(); cngrab(); /* * Ok, now do things that assume all filesystem activity has * been completed. */ EVENTHANDLER_INVOKE(shutdown_post_sync, howto); if ((howto & (RB_HALT|RB_DUMP)) == RB_DUMP && !cold && !dumping) doadump(TRUE); /* Now that we're going to really halt the system... */ EVENTHANDLER_INVOKE(shutdown_final, howto); for(;;) ; /* safety against shutdown_reset not working */ /* NOTREACHED */ }
int ifstats(void * pio, struct net * ifp) { ns_printf(pio, "Interface %s - %s \n", ifp->name, ifp->n_mib->ifDescr); #ifdef IP_V4 ns_printf(pio,"IPv4 address: %s, " , print_ipad(ifp->n_ipaddr)); ns_printf(pio,"subnet mask: %s, ", print_ipad(ifp->snmask)); ns_printf(pio,"gateway: %s\n" , print_ipad(ifp->n_defgw)); #endif /* IP_V4 */ #ifdef IP_V6 if(ifp->n_flags & NF_IPV6) { int i; char ip6buf[46]; /* tmp buffer for ipv6 address text */ for(i = 0; i < MAX_V6_ADDRS; i++) { if(ifp->v6addrs[i]) { ns_printf(pio,"IPv6 %6s addr: %s", v6types[i], print_ip6(&(ifp->v6addrs[i]->addr), ip6buf)); ns_printf(pio," - %s\n", ip6addrstates[ifp->v6addrs[i]->flags & IA_STATEMASK]); } } } else ns_printf(pio,"No IPv6 addresses\n"); #endif /* IP_V6 */ ns_printf(pio,"Status; Admin:%s Oper:%s for: %s\n", ifp->n_mib->ifAdminStatus==1?"up":"down", ifp->n_mib->ifOperStatus==1?"up":"down", print_uptime(sysuptime() - (ifp->n_mib->ifLastChange))); ns_printf(pio,"rcvd: errors:%lu dropped:%lu station:%lu bcast:%lu bytes:%lu\n", ifp->n_mib->ifInErrors, ifp->n_mib->ifInDiscards, ifp->n_mib->ifInUcastPkts, ifp->n_mib->ifInNUcastPkts, ifp->n_mib->ifInOctets); ns_printf(pio,"sent: errors:%lu dropped:%lu station:%lu bcast:%lu bytes:%lu\n", ifp->n_mib->ifOutErrors, ifp->n_mib->ifOutDiscards, ifp->n_mib->ifOutUcastPkts, ifp->n_mib->ifOutNUcastPkts, ifp->n_mib->ifOutOctets); ns_printf(pio,"MAC address: "); hexdump(pio,ifp->n_mib->ifPhysAddress, 6); ns_printf(pio," \n"); #ifdef IP_MULTICAST /* Print any multicast addresses assign to this iface */ if(ifp->mc_list) { struct in_multi * imp; ns_printf(pio, " Multicast addresses: \n"); for (imp = ifp->mc_list; imp; imp = imp->inm_next) { #ifdef IP_V6 { char ip6buf[40]; /* tmp buffer for ipv6 address text */ ns_printf(pio, " %s\n", print_ip6(&(imp->ip6addr), ip6buf)); continue; } #endif /* IP_V6 */ ns_printf(pio, " %s\n", print_ipad(imp->inm_addr) ); } } #endif /* IP_MULTICAST */ return 0; }
/* * Go through the rigmarole of shutting down.. * this used to be in machdep.c but I'll be dammned if I could see * anything machine dependant in it. */ static void boot(int howto) { /* * Get rid of any user scheduler baggage and then give * us a high priority. */ if (curthread->td_release) curthread->td_release(curthread); lwkt_setpri_self(TDPRI_MAX); /* collect extra flags that shutdown_nice might have set */ howto |= shutdown_howto; #ifdef SMP /* * We really want to shutdown on the BSP. Subsystems such as ACPI * can't power-down the box otherwise. */ if (smp_active_mask > 1) { kprintf("boot() called on cpu#%d\n", mycpu->gd_cpuid); } if (panicstr == NULL && mycpu->gd_cpuid != 0) { kprintf("Switching to cpu #0 for shutdown\n"); lwkt_setcpu_self(globaldata_find(0)); } #endif /* * Do any callouts that should be done BEFORE syncing the filesystems. */ EVENTHANDLER_INVOKE(shutdown_pre_sync, howto); /* * Try to get rid of any remaining FS references. The calling * process, proc0, and init may still hold references. The * VFS cache subsystem may still hold a root reference to root. * * XXX this needs work. We really need to SIGSTOP all remaining * processes in order to avoid blowups due to proc0's filesystem * references going away. For now just make sure that the init * process is stopped. */ if (panicstr == NULL) { shutdown_cleanup_proc(curproc); shutdown_cleanup_proc(&proc0); if (initproc) { if (initproc != curproc) { ksignal(initproc, SIGSTOP); tsleep(boot, 0, "shutdn", hz / 20); } shutdown_cleanup_proc(initproc); } vfs_cache_setroot(NULL, NULL); } /* * Now sync filesystems */ if (!cold && (howto & RB_NOSYNC) == 0 && waittime < 0) { int iter, nbusy, pbusy; waittime = 0; kprintf("\nsyncing disks... "); sys_sync(NULL); /* YYY was sync(&proc0, NULL). why proc0 ? */ /* * With soft updates, some buffers that are * written will be remarked as dirty until other * buffers are written. */ for (iter = pbusy = 0; iter < 20; iter++) { nbusy = scan_all_buffers(shutdown_busycount1, NULL); if (nbusy == 0) break; kprintf("%d ", nbusy); if (nbusy < pbusy) iter = 0; pbusy = nbusy; /* * XXX: * Process soft update work queue if buffers don't sync * after 6 iterations by permitting the syncer to run. */ if (iter > 5) bio_ops_sync(NULL); sys_sync(NULL); /* YYY was sync(&proc0, NULL). why proc0 ? */ tsleep(boot, 0, "shutdn", hz * iter / 20 + 1); } kprintf("\n"); /* * Count only busy local buffers to prevent forcing * a fsck if we're just a client of a wedged NFS server */ nbusy = scan_all_buffers(shutdown_busycount2, NULL); if (nbusy) { /* * Failed to sync all blocks. Indicate this and don't * unmount filesystems (thus forcing an fsck on reboot). */ kprintf("giving up on %d buffers\n", nbusy); #ifdef DDB if (debugger_on_panic) Debugger("busy buffer problem"); #endif /* DDB */ tsleep(boot, 0, "shutdn", hz * 5 + 1); } else { kprintf("done\n"); /* * Unmount filesystems */ if (panicstr == NULL) vfs_unmountall(); } tsleep(boot, 0, "shutdn", hz / 10 + 1); } print_uptime(); /* * Dump before doing post_sync shutdown ops */ crit_enter(); if ((howto & (RB_HALT|RB_DUMP)) == RB_DUMP && !cold) { dumpsys(); } /* * Ok, now do things that assume all filesystem activity has * been completed. This will also call the device shutdown * methods. */ EVENTHANDLER_INVOKE(shutdown_post_sync, howto); /* Now that we're going to really halt the system... */ EVENTHANDLER_INVOKE(shutdown_final, howto); for(;;) ; /* safety against shutdown_reset not working */ /* NOTREACHED */ }
/* wathchdog is runned in NORMAL_PERIOD, 1 seconds * check in each NORMAL_PERIOD * 1. button * * check in each NORAML_PERIOD*10 * * 1. ntptime * 2. time-dependent service * 3. http-process * 4. usb hotplug status */ void watchdog(void) { /* handle button */ btn_check(); /* if timer is set to less than 1 sec, then bypass the following */ if (itv.it_value.tv_sec == 0) return; if (nvram_match("asus_mfg", "1")) { system("rmmod hw_nat"); if (pids("ntp")) system("killall -SIGTERM ntp"); if (pids("ntpclient")) system("killall ntpclient"); if (pids("udhcpc")) system("killall -SIGTERM udhcpc"); #if (!defined(W7_LOGO) && !defined(WIFI_LOGO)) if (pids("ots")) system("killall ots"); #endif stop_wanduck(); stop_logger(); stop_upnp(); // it may cause upnp cannot run stop_dhcpd(); stop_dns(); #if (!defined(W7_LOGO) && !defined(WIFI_LOGO)) stop_pspfix(); #endif stop_wsc(); stop_wsc_2g(); stop_lltd(); stop_networkmap(); stop_httpd(); stop_lpd(); stop_u2ec(); kill_pidfile_s("/var/run/linkstatus_monitor.pid", SIGTERM); if (pids("detectWan")) system("killall detectWan"); #if (!defined(W7_LOGO) && !defined(WIFI_LOGO)) stop_rstats(); kill_pidfile_s("/var/run/detect_internet.pid", SIGTERM); #endif if (pids("tcpcheck")) system("killall -SIGTERM tcpcheck"); #ifdef HTTPD_CHECK if (pids("httpdcheck")) system("killall -SIGTERM httpdcheck"); #endif if (pids("traceroute")) system("killall traceroute"); if (pids("usbled")) system("killall -SIGTERM usbled"); nvram_set("asus_mfg", "2"); } #if 0 // reboot signal checking if (nvram_match("reboot", "1")) { printf("[watchdog] nvram match reboot\n"); reboot_count++; if (reboot_count >= 2) { // kill(1, SIGTERM); sys_exit(); } return; } #else if (nvram_match("reboot", "1")) return; #endif if (stop_service_type_99) return; if (!nvram_match("asus_mfg", "0")) return; watchdog_period = (watchdog_period + 1) % 10; if (watchdog_period) return; #ifdef BTN_SETUP if (btn_pressed_setup >= BTNSETUP_START) return; #endif #if (!defined(W7_LOGO) && !defined(WIFI_LOGO)) if (count_to_stop_wps > 0) { count_to_stop_wps--; if (!count_to_stop_wps) { // if (nvram_match("wl_radio_x", "1")) stop_wsc(); // psp fix // if (nvram_match("rt_radio_x", "1")) stop_wsc_2g(); // psp fix nvram_set("wps_enable", "0"); // psp fix } } #endif ddns_timer = (ddns_timer + 1) % 4320; if (nvram_match("asus_debug", "1")) mem_timer = (mem_timer + 1) % 60; if (!watchdog_count) watchdog_count++; else if (watchdog_count++ == 1) { #if 0 if (!strcmp(nvram_safe_get("rc_service"), "restart_upnp")) service_handle(); else #endif if ( nvram_match("router_disable", "0") && nvram_match("upnp_enable", "1") && nvram_match("upnp_started", "0") ) { // if (has_wan_ip()) { dbg("[watchdog] starting upnp...\n"); stop_upnp(); start_upnp(); } } } /* check for time-dependent services */ svc_timecheck(); /* http server check */ httpd_processcheck(); u2ec_processcheck(); media_processcheck(); #if 0 samba_processcheck(); #endif pppd_processcheck(); if (nvram_match("wan_route_x", "IP_Routed")) nm_processcheck(); cpu_usage_minotor(); dm_block_chk(); if (nvram_match("asus_debug", "1") && !mem_timer) { print_num_of_connections(); dbg("Hardware NAT: %s\n", is_hwnat_loaded() ? "Enabled": "Disabled"); dbg("Software QoS: %s\n", nvram_match("qos_enable", "1") ? "Enabled": "Disabled"); dbg("pppd running: %s\n", pids("pppd") ? "Yes": "No"); #if 0 dbg("CPU usage: %d%%\n", get_cpu_usage()); #else dbg("CPU usage: %d%%\n", cpu_main(0, NULL, 0)); #endif system("free"); system("date"); print_uptime(); } #ifdef CDMA /* CDMA_DOWN = 99, none * CDMA_DOWN = 1, currently down * CDMA_DOWN = 2, currently up * CDMA_DOWN = 0, currently trying to connect */ if (nvram_match("cdma_down", "1")) { logmessage("CDMA client", "cdma is down(%d)!", cdma_down); cdma_down++; cdma_connec t = 0; if (cdma_down == 2) { printf("[watchdog] stop wan\n"); stop_wan(); start_wan(); } else if (cdma_down >= 12) /* 2 minutes timeout for retry */ { cdma_down = 0; } } else if (nvram_match("cdma_down", "0")) { logmessage("CDMA client", "cdma try connect(%d)!", cdma_connect); cdma_down = 0; cdma_connect++; if (cdma_connect > 12) /* 2 minitues timeout for connecting */ { nvram_set("cdma_down", "1"); } } else { cdma_down = 0; cdma_connect = 0; } #endif if (nvram_match("wan_route_x", "IP_Routed")) { if (!is_phyconnected() || !has_wan_ip()) return; /* sync time to ntp server if necessary */ if (!nvram_match("wan_dns_t", "") && !nvram_match("wan_gateway_t", "")) { ntp_timesync(); } if ( nvram_match("ddns_enable_x", "1") && (!nvram_match("ddns_updated", "1") || !ddns_timer) ) { logmessage("RT-N56U", "[start ddns] watchdog"); start_ddns(); } if (!ddns_timer) { stop_networkmap(); start_networkmap(); } } else { if (/*!nvram_match("lan_dns_t", "") && */!nvram_match("lan_gateway_t", "")) ntp_timesync(); } }