Beispiel #1
0
static int irq_stats(const char *ifname, struct ifstat *s)
{
	int i;
	char *ptr, *ptr2;
	char buff[4096];
	FILE *fp;

	/* We exclude lo! */
	if (!strncmp("lo", ifname, strlen("lo")))
		return 0;

	fp = fopen("/proc/interrupts", "r");
	if (!fp) {
		whine("Cannot open /proc/interrupts!\n");
		return -ENOENT;
	}

	stats_check_alloc(s);

	memset(buff, 0, sizeof(buff));
	while (fgets(buff, sizeof(buff), fp) != NULL) {
		buff[sizeof(buff) - 1] = 0;

		if (strstr(buff, ifname) == NULL)
			continue;

		ptr = buff;
		while (*ptr != ':')
			ptr++;
		*ptr = 0;
		s->irq_nr = atoi(buff);

		bug_on(s->irq_nr == 0);

		for (i = 0; i < s->irqs_len; ++i) {
			ptr++;
			ptr2 = ptr;
			while (*ptr == ' ')
				ptr++;
			while (*ptr != ' '  && *ptr != 0)
				ptr++;
			*ptr = 0;
			s->irqs[i] = atoi(ptr2);
		}

		memset(buff, 0, sizeof(buff));
	}

	fclose(fp);

	return 0;
}
Beispiel #2
0
static int irq_sstats(struct ifstat *s)
{
	int i, rx = 0;
	char *ptr, *ptr2;
	char buff[4096];

	FILE *fp = fopen("/proc/softirqs", "r");
	if (!fp) {
		whine("Cannot open /proc/softirqs!\n");
		return -ENOENT;
	}

	stats_check_alloc(s);

	memset(buff, 0, sizeof(buff));
	while (fgets(buff, sizeof(buff), fp) != NULL) {
		buff[sizeof(buff) - 1] = 0;

		if ((ptr = strstr(buff, "NET_TX:")) == NULL) {
			ptr = strstr(buff, "NET_RX:");

			if (ptr == NULL)
				continue;
			rx = 1;
		} else {
			rx = 0;
		}

		ptr += strlen("NET_TX:");

		for (i = 0; i < s->irqs_len; ++i) {
			ptr++;
			while (*ptr == ' ')
				ptr++;
			ptr2 = ptr;
			while (*ptr != ' ' && *ptr != 0)
				ptr++;
			*ptr = 0;
			if (rx)
				s->irqs_srx[i] = atoi(ptr2);
			else
				s->irqs_stx[i] = atoi(ptr2);
		}

		memset(buff, 0, sizeof(buff));
	}

	fclose(fp);

	return 0;
}
Beispiel #3
0
static int sys_stats(struct ifstat *s)
{
	int ret, cpu;
	char *ptr, *ptr2;
	char buff[4096];

	FILE *fp = fopen("/proc/stat", "r");
	if (!fp) {
		whine("Cannot open /proc/stat!\n");
		return -ENOENT;
	}
	stats_check_alloc(s);
	memset(buff, 0, sizeof(buff));
	while (fgets(buff, sizeof(buff), fp) != NULL) {
		buff[sizeof(buff) - 1] = 0;
		if ((ptr = strstr(buff, "cpu")) != NULL) {
			ptr += strlen("cpu");
			if (*ptr == ' ')
				goto next;
			ptr2 = ptr;
			while (*ptr != ' ' && *ptr != 0)
				ptr++;
			*ptr = 0;
			cpu = atoi(ptr2);
			if (cpu < 0 || cpu >= s->irqs_len)
				goto next;
			ptr++;
			ret = sscanf(ptr, "%lu%lu%lu%lu%lu", &s->cpu_user[cpu],
				     &s->cpu_nice[cpu], &s->cpu_sys[cpu],
				     &s->cpu_idle[cpu], &s->cpu_iow[cpu]);
			if (ret != 5)
				goto next;
		} else if ((ptr = strstr(buff, "ctxt")) != NULL) {
			ptr += strlen("ctxt");
			ptr++;
			while (*ptr == ' ')
				ptr++;
			ret = sscanf(ptr, "%lu", &s->ctxt);
			if (ret != 1)
				s->ctxt = 0;
		} else if ((ptr = strstr(buff, "processes")) != NULL) {
			ptr += strlen("processes");
			ptr++;
			while (*ptr == ' ')
				ptr++;
			ret = sscanf(ptr, "%lu", &s->forks);
			if (ret != 1)
				s->forks = 0;
		} else if ((ptr = strstr(buff, "procs_running")) != NULL) {
			ptr += strlen("procs_running");
			ptr++;
			while (*ptr == ' ')
				ptr++;
			ret = sscanf(ptr, "%lu", &s->procs_run);
			if (ret != 1)
				s->procs_run = 0;
		} else if ((ptr = strstr(buff, "procs_blocked")) != NULL) {
			ptr += strlen("procs_blocked");
			ptr++;
			while (*ptr == ' ')
				ptr++;
			ret = sscanf(ptr, "%lu", &s->procs_iow);
			if (ret != 1)
				s->procs_iow = 0;
		}
next:
		memset(buff, 0, sizeof(buff));
	}
	fclose(fp);
	return 0;
}