diff --git a/src/cmdu.c b/src/cmdu.c index 5fb18ee6144cdd6efb0ddf63d187a0ab01f677cf..381cfaa036673bdb230bcfd263bed25e24e06cc0 100644 --- a/src/cmdu.c +++ b/src/cmdu.c @@ -85,6 +85,13 @@ int is_cmdu_type_valid(uint16_t type) type <= CMDU_TYPE_MAX); } +int is_cmdu_tlv_required(uint16_t type) +{ + return !(type == CMDU_TYPE_TOPOLOGY_DISCOVERY || + type == CMDU_TYPE_HIGHER_LAYER_QUERY || + type == CMDU_TYPE_GENERIC_PHY_QUERY); +} + int cmdu_should_relay(uint16_t type) { return (type == CMDU_TYPE_TOPOLOGY_NOTIFICATION || diff --git a/src/cmdu.h b/src/cmdu.h index 25f59aa37d63d5df05ee664313c216ae21816da7..1f500ff6066b939b61a2070f41072f22c4e8911b 100644 --- a/src/cmdu.h +++ b/src/cmdu.h @@ -147,6 +147,7 @@ uint16_t cmdu_expect_response(uint16_t req_type); int cmdu_should_relay(uint16_t type); int is_cmdu_type_valid(uint16_t type); int is_cmdu_type_response(uint16_t type); +int is_cmdu_tlv_required(uint16_t type); int cmdu_validate(struct cmdu_buff *c, int max_tlvtype, struct tlv_policy *policy); diff --git a/src/i1905.c b/src/i1905.c index a30b76416810c5541fbabe7ef18c4a4a35034647..cc428edb20463a9c801cf4642d104950b1957827 100644 --- a/src/i1905.c +++ b/src/i1905.c @@ -401,7 +401,7 @@ int i1905_cmdu_tx(struct i1905_interface_private *ifp, int ret = 0; - if (!data && type != CMDU_TYPE_TOPOLOGY_QUERY) { + if (!data && is_cmdu_tlv_required(type)) { fprintf(stderr, "%s: Invalid cmdu. %s requires tlv data\n", __func__, cmdu_type2str(type)); return -1;