P2P: Add more user friendly debug print of channel lists

This makes it easier to go through the P2P channel list operations in
the debug log without having to parse through the hexdump manually.

Signed-hostap: Jouni Malinen <jouni@qca.qualcomm.com>
This commit is contained in:
Jouni Malinen 2013-10-22 18:44:05 +03:00 committed by Jouni Malinen
parent 538922a628
commit 941dae0a2e
3 changed files with 38 additions and 9 deletions

View file

@ -465,9 +465,11 @@ static int p2p_go_select_channel(struct p2p_data *p2p, struct p2p_device *dev,
u8 *status) u8 *status)
{ {
struct p2p_channels intersection; struct p2p_channels intersection;
size_t i;
p2p_channels_dump(p2p, "own channels", &p2p->channels);
p2p_channels_dump(p2p, "peer channels", &dev->channels);
p2p_channels_intersect(&p2p->channels, &dev->channels, &intersection); p2p_channels_intersect(&p2p->channels, &dev->channels, &intersection);
p2p_channels_dump(p2p, "intersection", &intersection);
if (intersection.reg_classes == 0 || if (intersection.reg_classes == 0 ||
intersection.reg_class[0].channels == 0) { intersection.reg_class[0].channels == 0) {
*status = P2P_SC_FAIL_NO_COMMON_CHANNELS; *status = P2P_SC_FAIL_NO_COMMON_CHANNELS;
@ -475,14 +477,6 @@ static int p2p_go_select_channel(struct p2p_data *p2p, struct p2p_device *dev,
return -1; return -1;
} }
for (i = 0; i < intersection.reg_classes; i++) {
struct p2p_reg_class *c;
c = &intersection.reg_class[i];
p2p_dbg(p2p, "reg_class %u", c->reg_class);
wpa_hexdump(MSG_DEBUG, "P2P: channels",
c->channel, c->channels);
}
if (!p2p_channels_includes(&intersection, p2p->op_reg_class, if (!p2p_channels_includes(&intersection, p2p->op_reg_class,
p2p->op_channel)) { p2p->op_channel)) {
if (dev->flags & P2P_DEV_FORCE_FREQ) { if (dev->flags & P2P_DEV_FORCE_FREQ) {

View file

@ -572,6 +572,8 @@ void p2p_channels_intersect(const struct p2p_channels *a,
struct p2p_channels *res); struct p2p_channels *res);
int p2p_channels_includes(const struct p2p_channels *channels, u8 reg_class, int p2p_channels_includes(const struct p2p_channels *channels, u8 reg_class,
u8 channel); u8 channel);
void p2p_channels_dump(struct p2p_data *p2p, const char *title,
const struct p2p_channels *chan);
/* p2p_parse.c */ /* p2p_parse.c */
int p2p_parse_p2p_ie(const struct wpabuf *buf, struct p2p_message *msg); int p2p_parse_p2p_ie(const struct wpabuf *buf, struct p2p_message *msg);

View file

@ -280,3 +280,36 @@ unsigned int p2p_get_pref_freq(struct p2p_data *p2p,
return 0; return 0;
} }
void p2p_channels_dump(struct p2p_data *p2p, const char *title,
const struct p2p_channels *chan)
{
char buf[500], *pos, *end;
size_t i, j;
int ret;
pos = buf;
end = pos + sizeof(buf);
for (i = 0; i < chan->reg_classes; i++) {
const struct p2p_reg_class *c;
c = &chan->reg_class[i];
ret = os_snprintf(pos, end - pos, " %u:", c->reg_class);
if (ret < 0 || ret >= end - pos)
break;
pos += ret;
for (j = 0; j < c->channels; j++) {
ret = os_snprintf(pos, end - pos, "%s%u",
j == 0 ? "" : ",",
c->channel[j]);
if (ret < 0 || ret >= end - pos)
break;
pos += ret;
}
}
*pos = '\0';
p2p_dbg(p2p, "%s:%s", title, buf);
}