[net80211] add placeholders for the VHT action frame handling.

Upcoming vht support will register send/receive action handlers.
This commit is contained in:
Adrian Chadd 2016-12-31 07:50:14 +00:00
parent 34694ebe05
commit 7c87f23e82
2 changed files with 27 additions and 1 deletions

@ -382,7 +382,7 @@ struct ieee80211_action {
#define IEEE80211_ACTION_CAT_MESH 13 /* Mesh */ #define IEEE80211_ACTION_CAT_MESH 13 /* Mesh */
#define IEEE80211_ACTION_CAT_SELF_PROT 15 /* Self-protected */ #define IEEE80211_ACTION_CAT_SELF_PROT 15 /* Self-protected */
/* 16 - 125 reserved */ /* 16 - 125 reserved */
#define IEEE80211_ACTION_VHT 21 #define IEEE80211_ACTION_CAT_VHT 21
#define IEEE80211_ACTION_CAT_VENDOR 127 /* Vendor Specific */ #define IEEE80211_ACTION_CAT_VENDOR 127 /* Vendor Specific */
#define IEEE80211_ACTION_HT_TXCHWIDTH 0 /* recommended xmit chan width*/ #define IEEE80211_ACTION_HT_TXCHWIDTH 0 /* recommended xmit chan width*/

@ -79,6 +79,10 @@ static ieee80211_send_action_func *vendor_send_action[8] = {
send_inval, send_inval, send_inval, send_inval, send_inval, send_inval, send_inval, send_inval,
}; };
static ieee80211_send_action_func *vht_send_action[3] = {
send_inval, send_inval, send_inval,
};
int int
ieee80211_send_action_register(int cat, int act, ieee80211_send_action_func *f) ieee80211_send_action_register(int cat, int act, ieee80211_send_action_func *f)
{ {
@ -108,6 +112,11 @@ ieee80211_send_action_register(int cat, int act, ieee80211_send_action_func *f)
break; break;
vendor_send_action[act] = f; vendor_send_action[act] = f;
return 0; return 0;
case IEEE80211_ACTION_CAT_VHT:
if (act >= nitems(vht_send_action))
break;
vht_send_action[act] = f;
return 0;
} }
return EINVAL; return EINVAL;
} }
@ -144,6 +153,10 @@ ieee80211_send_action(struct ieee80211_node *ni, int cat, int act, void *sa)
if (act < nitems(vendor_send_action)) if (act < nitems(vendor_send_action))
f = vendor_send_action[act]; f = vendor_send_action[act];
break; break;
case IEEE80211_ACTION_CAT_VHT:
if (act < nitems(vht_send_action))
f = vht_send_action[act];
break;
} }
return f(ni, cat, act, sa); return f(ni, cat, act, sa);
} }
@ -177,6 +190,10 @@ static ieee80211_recv_action_func *vendor_recv_action[8] = {
recv_inval, recv_inval, recv_inval, recv_inval, recv_inval, recv_inval, recv_inval, recv_inval,
}; };
static ieee80211_recv_action_func *vht_recv_action[3] = {
recv_inval, recv_inval, recv_inval
};
int int
ieee80211_recv_action_register(int cat, int act, ieee80211_recv_action_func *f) ieee80211_recv_action_register(int cat, int act, ieee80211_recv_action_func *f)
{ {
@ -206,6 +223,11 @@ ieee80211_recv_action_register(int cat, int act, ieee80211_recv_action_func *f)
break; break;
vendor_recv_action[act] = f; vendor_recv_action[act] = f;
return 0; return 0;
case IEEE80211_ACTION_CAT_VHT:
if (act >= nitems(vht_recv_action))
break;
vht_recv_action[act] = f;
return 0;
} }
return EINVAL; return EINVAL;
} }
@ -256,6 +278,10 @@ ieee80211_recv_action(struct ieee80211_node *ni,
if (ia->ia_action < nitems(vendor_recv_action)) if (ia->ia_action < nitems(vendor_recv_action))
f = vendor_recv_action[ia->ia_action]; f = vendor_recv_action[ia->ia_action];
break; break;
case IEEE80211_ACTION_CAT_VHT:
if (ia->ia_action < nitems(vht_recv_action))
f = vht_recv_action[ia->ia_action];
break;
} }
return f(ni, wh, frm, efrm); return f(ni, wh, frm, efrm);
} }