diff --git a/src/cmdu.h b/src/cmdu.h index b266b031f74402a1bc20905f29fd60799aab572f..35dd1d3142a9435078e161881bff6367f9e2c00e 100644 --- a/src/cmdu.h +++ b/src/cmdu.h @@ -93,6 +93,12 @@ struct cmdu_buff { struct list_head list; }; +#define CMDU_PROCESSED 0x1 + +#define IS_CMDU_PROCESSED(c) !!((c)->flags & CMDU_PROCESSED) +#define CMDU_SET_PROCESSED(c) ((c)->flags |= CMDU_PROCESSED) + + /** * @enum tlv_presence * @brief defines the policy for occurrences of a TLV in a CMDU frame. diff --git a/src/cmdu_input.c b/src/cmdu_input.c index 405ec9151848dddde54c50f9c5adc3b52673055c..d1c31ca82833bdc99b61f7251191775c205c3015 100644 --- a/src/cmdu_input.c +++ b/src/cmdu_input.c @@ -113,8 +113,7 @@ int i1905_handle_topology_discovery(const char *ifname, uint8_t *from, neigh_set_1905(&((struct i1905_private *)priv)->neigh_q, aladdr_origin); neigh_set_1905_slave(&((struct i1905_private *)priv)->neigh_q, macaddr_origin); - //TODO: processed by extensions; use meaningful flag - if (rxf->flags == 1) + if (IS_CMDU_PROCESSED(rxf)) return 0; //TODO: conditionally send topology query @@ -179,8 +178,8 @@ int i1905_handle_topology_notification(const char *ifname, uint8_t *from, if (ret) i1905_dbg(LOG_RX, "Error sending relaying TOPOLOGY_CHANGE\n"); - //TODO: processed by extensions; use meaningful flag - if (rxf->flags == 1) + + if (IS_CMDU_PROCESSED(rxf)) return 0; /* query what changed */ @@ -196,8 +195,7 @@ int i1905_handle_topology_query(const char *ifname, uint8_t *from, struct i1905_interface *iface; - //TODO: processed by extensions; use meaningful flag - if (rxf->flags == 1) + if (IS_CMDU_PROCESSED(rxf)) return 0; iface = i1905_ifname_to_interface(priv, ifname); @@ -346,8 +344,7 @@ int i1905_handle_link_metric_query(const char *ifname, uint8_t *from, - //TODO: processed by extensions; use meaningful flag - if (rxf->flags == 1) + if (IS_CMDU_PROCESSED(rxf)) return 0; ret = i1905_cmdu_parse_tlvs(rxf, tv, 1); @@ -511,8 +508,8 @@ int i1905_handle_ap_autoconfig_search(const char *ifname, uint8_t *from, if (ret) i1905_dbg(LOG_RX, "Error sending AP_AUTOCONFIG_SEARCH\n"); - /* processed by extensions; don't proceed further */ - if (rxf->flags == 1) + + if (IS_CMDU_PROCESSED(rxf)) return 0; if (tv[1][0]->data[0] != IEEE80211_ROLE_REGISTRAR) { @@ -609,9 +606,7 @@ int i1905_handle_ap_autoconfig_response(const char *ifname, uint8_t *from, if (((struct i1905_private *)priv)->start_apconfig != 1) return 0; - - //TODO: processed by extensions; use meaningful flag - if (rxf->flags == 1) + if (IS_CMDU_PROCESSED(rxf)) return 0; @@ -699,12 +694,9 @@ int i1905_handle_ap_autoconfig_renew(const char *ifname, uint8_t *from, if (ret) i1905_dbg(LOG_RX, "Error relaying AP_AUTOCONFIG_RENEW\n"); - - //TODO: processed by extensions; use meaningful flag - if (rxf->flags == 1) + if (IS_CMDU_PROCESSED(rxf)) return 0; - if (tv[1][0]->data[0] != IEEE80211_ROLE_REGISTRAR) { i1905_dbg(LOG_RX, "%s: Discard ap-autoconfig renew for role != registrar\n", @@ -848,8 +840,7 @@ int i1905_handle_ap_autoconfig_wsc(const char *ifname, uint8_t *from, - //TODO: processed by extensions; use meaningful flag - if (rxf->flags == 1) + if (IS_CMDU_PROCESSED(rxf)) return 0; @@ -1028,8 +1019,7 @@ int i1905_handle_higherlayer_query(const char *ifname, uint8_t *from, struct i1905_interface *iface; - //TODO: processed by extensions; use meaningful flag - if (rxf->flags == 1) + if (IS_CMDU_PROCESSED(rxf)) return 0; @@ -1223,7 +1213,7 @@ int i1905_process_cmdu(struct i1905_private *priv, struct cmdu_buff *rxf) case CMDU_DONE: case CMDU_DROP: case CMDU_RELAY: - rxf->flags = 1; + CMDU_SET_PROCESSED(rxf); default: break; } @@ -1246,7 +1236,7 @@ int i1905_process_cmdu(struct i1905_private *priv, struct cmdu_buff *rxf) return -1; } - if (rxf->flags == 0 && is_cmdu_type_response(type)) { + if (!IS_CMDU_PROCESSED(rxf) && is_cmdu_type_response(type)) { /* discard responses with no matching request awaiting */ ret = cmdu_ackq_dequeue(&priv->txack_q, type, mid, src, &cookie); if (ret) {