don't compare against the frame control flags.
fixes: "got unexpected frame" behavior for
retransmitted frames. (retry flag == 1)

Signed-off-by: Emanuel Taube <[email protected]>
---
 linux/meshd-nl80211.c |    9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/linux/meshd-nl80211.c b/linux/meshd-nl80211.c
index 6489439..4fd56a2 100644
--- a/linux/meshd-nl80211.c
+++ b/linux/meshd-nl80211.c
@@ -778,6 +778,7 @@ static int event_handler(struct nl_msg *msg, void *arg)
     struct nlattr *tb[NL80211_ATTR_MAX + 1];
     struct ieee80211_mgmt_frame *frame;
     int frame_len;
+    unsigned short frame_control;
     struct timeval now;
 
     gettimeofday(&now, NULL);
@@ -806,12 +807,12 @@ static int event_handler(struct nl_msg *msg, void *arg)
                 sae_debug(MESHD_DEBUG, "NL80211_CMD_FRAME (%d.%d)\n", 
now.tv_sec, now.tv_usec);
                 frame = nla_data(tb[NL80211_ATTR_FRAME]);
                 frame_len = nla_len(tb[NL80211_ATTR_FRAME]);
+                frame_control = ieee_order(frame->frame_control);
                 sae_hexdump(MESHD_DEBUG, "rx frame", (unsigned char *) frame, 
frame_len);
                 /* Auth frames go to SAE */
-                if ((frame->frame_control == htole16((IEEE802_11_FC_TYPE_MGMT 
<< 2 |
-                                                      IEEE802_11_FC_STYPE_AUTH 
<< 4))) ||
-                     (frame->frame_control == htole16((IEEE802_11_FC_TYPE_MGMT 
<< 2 |
-                                                      
IEEE802_11_FC_STYPE_ACTION << 4)))) {
+                if (IEEE802_11_FC_GET_TYPE(frame_control) == 
IEEE802_11_FC_TYPE_MGMT &&
+                     (IEEE802_11_FC_GET_STYPE(frame_control) == 
IEEE802_11_FC_STYPE_ACTION ||
+                      IEEE802_11_FC_GET_STYPE(frame_control) == 
IEEE802_11_FC_STYPE_AUTH)) {
                     if (process_mgmt_frame(frame, frame_len, mesh.mymacaddr, 
&nlcfg))
                         fprintf(stderr, "libsae: process_mgmt_frame failed\n");
                 } else
-- 
1.7.10.4

_______________________________________________
Devel mailing list
[email protected]
http://lists.open80211s.org/cgi-bin/mailman/listinfo/devel

Reply via email to