Пример #1
0
static int diag_show_summary(const char *dev)
{
	char buf[PRISM2_HOSTAPD_MAX_BUF_SIZE];
	struct prism2_hostapd_param *param;
	int res;

	printf("Host AP driver diagnostics information for '%s'\n\n", dev);

	param = (struct prism2_hostapd_param *) buf;

	res = hostapd_get_rid(dev, param, HFA384X_RID_NICID, 1);
	if (res == EPERM) {
		printf("hostap_diag requires root privileges\n");
		return -1;
	}
	if (res == ENODATA) {
		printf("NICID read did not return any data.\n");
	} else if (res) {
		printf("Could not communicate with the kernel driver.\n");
		return -1;
	}

	if (res == 0)
		hostap_show_nicid(param->u.rid.data, param->u.rid.len);

	if (!hostapd_get_rid(dev, param, HFA384X_RID_PRIID, 1))
		hostap_show_priid(param->u.rid.data, param->u.rid.len);

	if (!hostapd_get_rid(dev, param, HFA384X_RID_STAID, 1))
		hostap_show_staid(param->u.rid.data, param->u.rid.len);

	return 0;
}
Пример #2
0
static int get_rid(const char *dev, u16 rid)
{
    char buf[PRISM2_HOSTAPD_MAX_BUF_SIZE];
    struct prism2_hostapd_param *param;
    int res, i;

    param = (struct prism2_hostapd_param *) buf;

    res = hostapd_get_rid(dev, param, rid, 1);
    if (res == EPERM) {
        printf("hostap_rid requires root privileges\n");
        return -1;
    }
    if (res == ENODATA) {
        printf("Get RID did not return any data.\n");
        return -1;
    } else if (res) {
        printf("Could not communicate with the kernel driver.\n");
        return -1;
    }

    for (i = 0; i < param->u.rid.len; i++)
        printf("%02x ", param->u.rid.data[i]);
    printf("\n");

    return 0;
}
Пример #3
0
static void diag_show_unknown_rids(const char *dev)
{
	char buf[PRISM2_HOSTAPD_MAX_BUF_SIZE];
	struct prism2_hostapd_param *param;
	int res, j;
	u16 rid;
	int pos, rid_entries;

	printf("\nUnknown RIDs (Resource IDentifiers)\n\n");

	param = (struct prism2_hostapd_param *) buf;

	pos = 0;
	rid_entries = sizeof(rid_table) / sizeof(rid_table[0]);

	for (rid = 0xfc00; rid <= 0xfdff; rid++) {
		if (pos < rid_entries) {
			if (rid_table[pos].rid == rid) {
				pos++;
				continue;
			}
			while (pos < rid_entries && rid_table[pos].rid < rid)
				pos++;
		}
		res = hostapd_get_rid(dev, param, rid, 0);
		if (res == ENODATA)
			continue;
		if (res) {
			printf("Could not read RID %04X (res=%d)\n",
			       rid_table[pos].rid, res);
			break;
		}

		printf("%04X=", rid);
		for (j = 0; j < param->u.rid.len; j++)
			printf("<%02x>", param->u.rid.data[j]);
		printf("\n");
	}
}
Пример #4
0
static void diag_show_known_rids(const char *dev)
{
	char buf[PRISM2_HOSTAPD_MAX_BUF_SIZE];
	u8 *rid;
	struct prism2_hostapd_param *param;
	int res, i, j, k, len, slen;
	struct hfa384x_comp_ident *compid;
	struct hfa384x_sup_range *range;

	printf("\nKnown RIDs (Resource IDentifiers)\n\n");

	param = (struct prism2_hostapd_param *) buf;

	for (i = 0; i < sizeof(rid_table) / sizeof(rid_table[0]); i++) {
		res = hostapd_get_rid(dev, param, rid_table[i].rid, 0);
		if (res == ENODATA)
			continue;
		if (res) {
			printf("Could not read RID %04X (res=%d)\n",
			       rid_table[i].rid, res);
			break;
		}

		printf("%04X=%s=", rid_table[i].rid, rid_table[i].name);
		rid = param->u.rid.data;
		len = param->u.rid.len;

		switch (rid_table[i].type) {
		case RID_HEXDUMP:
			for (j = 0; j < len; j++)
				printf("<%02x>", rid[j]);
			printf("\n");
			break;

		case RID_WORD:
			if (len != 2) {
				printf("<INVALID RID_WORD LEN %d>\n", len);
			} else {
				u16 val = le_to_host16(*(u16 *)rid);
				printf("%d\n", val);
			}
			break;

		case RID_HWADDR:
			if (len != 6) {
				printf("<INVALID RID_HWADDR LEN %d>\n", len);
			} else {
				printf(MACSTR "\n", MAC2STR(rid));
			}
			break;

		case RID_STRING:
			slen = le_to_host16(*(u16 *)rid);
			if (slen > len)
				slen = len;
			for (j = 2; j < slen + 2; j++) {
				if (rid[j] >= 32 && rid[j] < 127)
					printf("%c", rid[j]);
				else
					printf("<%02x>", rid[j]);
			}
			printf("\n");
			break;

		case RID_COMPID:
			if (len != sizeof(*compid)) {
				printf("<INVALID RID_COMPID LEN "
					     "%d>\n", len);
				break;
			}
			compid = (struct hfa384x_comp_ident *) rid;
			printf("0x%02x v%d.%d.%d\n",
				     le_to_host16(compid->id),
				     le_to_host16(compid->major),
				     le_to_host16(compid->minor),
				     le_to_host16(compid->variant));
			break;

		case RID_SUPRANGE:
			if (len != sizeof(*range)) {
				printf("<INVALID RID_SUPRANGE LEN "
					     "%d>\n", len);
				break;
			}
			range = (struct hfa384x_sup_range *) rid;
			printf("%d 0x%02x %d %d-%d\n",
				     le_to_host16(range->role),
				     le_to_host16(range->id),
				     le_to_host16(range->variant),
				     le_to_host16(range->bottom),
				     le_to_host16(range->top));
			break;

		case RID_HEXSTRING:
			slen = le_to_host16(*(u16 *)rid);
			if (slen > len)
				slen = len;
			for (j = 2; j < slen + 2; j++)
				printf("<%02x>", rid[j]);
			printf("\n");
			break;

		case RID_CIS:
			k = len;
			while (k > 0 && rid[k - 1] == 0xff)
				k--;
			for (j = 0; j < k; j++)
				printf("<%02x>", rid[j]);
			if (k != len)
				printf(" + %d*<ff>", len - k);
			printf("\n");
			break;

		default:
			printf("<UNKNOWN TYPE %d>\n", rid_table[i].type);
			break;
		}
	}
}