diff --git a/src/cntlr.c b/src/cntlr.c
index 478162c838d5671fd224e101ba1db644807aefdb..59a1007fb943fbf222c9d82321a0ed0d27b6b0a0 100644
--- a/src/cntlr.c
+++ b/src/cntlr.c
@@ -416,7 +416,7 @@ static int cntlr_steer_sta(struct controller *c, struct sta *s,
 			   struct steer_target *to, uint32_t mode,
 			   uint32_t reason)
 {
-	struct cmdu_buff *cmdu;
+	int ret = 0;
 
 	trace("%s:--->\n", __func__);
 
@@ -443,22 +443,20 @@ static int cntlr_steer_sta(struct controller *c, struct sta *s,
 		break;
 	case STEER_MODE_BTM_REQ:
 	case STEER_MODE_OPPORTUNITY:
-		cmdu = cntlr_gen_client_steer_request(c, s->fh->agent->alid,
+		ret = cntlr_send_client_steer_request(c, s->fh->agent->alid,
 					s->bssid, 0,
 					1, (uint8_t (*)[6])s->macaddr,
 					1, (uint8_t (*)[6])to->bssid,
 					mode);
-		if (!cmdu) {
-			warn("%s: Failed to generate cmdu for steering sta!\n", __func__);
-			return -1;
+		if (ret) {
+			warn("%s: Failed to send cmdu for steering sta!\n", __func__);
+			return ret;
 		}
 
 		cntlr_notify_client_steer_req_evt(c, s->bssid,
 				1, (uint8_t (*)[6])s->macaddr,
 				1, (uint8_t (*)[6])to->bssid);
 
-		send_cmdu(c, cmdu);
-		cmdu_free(cmdu);
 		break;
 	case STEER_MODE_UNDEFINED:
 	default:
diff --git a/src/cntlr_cmdu.c b/src/cntlr_cmdu.c
index 37df7bcef90ed9ce18776c9169a1d1ad1488704d..da0c328a950495ef563370d8f088678a56f0a075 100644
--- a/src/cntlr_cmdu.c
+++ b/src/cntlr_cmdu.c
@@ -884,13 +884,14 @@ struct cmdu_buff *cntlr_gen_client_steer_request(struct controller *c,
 
 	frm = cmdu_alloc_simple(CMDU_CLIENT_STEERING_REQUEST, &mid);
 	if (!frm) {
+		warn("%s: Failed to generate cmdu for steering sta!\n", __func__);
 		dbg("%s: -ENOMEM\n", __func__);
 		return NULL;
 	}
 
 	dbg("%s %d sta_id " MACFMT "\n", __func__, __LINE__, MAC2STR(stas[0]));
 
-	ret = cntlr_gen_steer_request(c, frm,
+	ret = cntlr_gen_tlv_steer_request(c, frm,
 			MAP_TLV_STEERING_REQUEST, bssid,
 			steer_timeout, sta_nr, stas, bssid_nr,
 			target_bssid, request_mode);
@@ -906,6 +907,27 @@ error:
 	return NULL;
 }
 
+int cntlr_send_client_steer_request(struct controller *c,
+			uint8_t *agent_mac, uint8_t *bssid,
+			uint32_t steer_timeout, uint32_t sta_nr, uint8_t stas[][6],
+			uint32_t bssid_nr, uint8_t target_bssid[][6], uint32_t request_mode)
+{
+	struct cmdu_buff *cmdu_data = NULL;
+
+	trace("%s:--->\n", __func__);
+
+	cmdu_data = cntlr_gen_client_steer_request(c, agent_mac, bssid, steer_timeout,
+					sta_nr, stas, bssid_nr, target_bssid, request_mode);
+
+	if (!cmdu_data)
+		return -1;
+
+	send_cmdu(c, cmdu_data);
+	cmdu_free(cmdu_data);
+
+	return 0;
+}
+
 struct cmdu_buff *cntlr_gen_comb_infra_metrics_query(struct controller *c, uint8_t *origin, uint8_t *bssid)
 {
 	struct cmdu_buff *frm;
diff --git a/src/cntlr_cmdu.h b/src/cntlr_cmdu.h
index 2888a146df6ebd544c35205c3e2491313dc8656c..b6e6c6d7771404da6716fa70c0034352ce58fab0 100644
--- a/src/cntlr_cmdu.h
+++ b/src/cntlr_cmdu.h
@@ -78,4 +78,8 @@ int cntlr_send_cac_req(struct controller *c, uint8_t *agent,
 		       int num_data, struct cac_data *data);
 int cntlr_send_cac_term(struct controller *c, uint8_t *agent,
 		        int num_data, struct cac_data *data);
+int cntlr_send_client_steer_request(struct controller *c,
+			uint8_t *agent_mac, uint8_t *bssid,
+			uint32_t steer_timeout, uint32_t sta_nr, uint8_t stas[][6],
+			uint32_t bssid_nr, uint8_t target_bssid[][6], uint32_t request_mode);
 #endif
diff --git a/src/cntlr_map.c b/src/cntlr_map.c
index a7c678d08ff3219ba34314afffbbb01bf89394ab..d211967478259d42cca577fdb1449cd96401f7e1 100644
--- a/src/cntlr_map.c
+++ b/src/cntlr_map.c
@@ -1634,6 +1634,7 @@ void cntlr_check_usta_steer(struct controller *c, struct sta *s)
 			&& memcmp(best_fh->bssid, s->bssid, 6)) {
 
 		struct cmdu_buff *cmdu;
+		int ret = 0;
 
 		if ((s->type == IEEE1905 && !c->cfg.enable_bsta_steer) ||
 		    (s->type == NON_IEEE1905 && !c->cfg.enable_sta_steer)) {
@@ -1648,19 +1649,22 @@ void cntlr_check_usta_steer(struct controller *c, struct sta *s)
 		    __func__, __LINE__,
 		    MAC2STR(s->macaddr), MAC2STR(s->bssid), MAC2STR(best_fh->bssid));
 
-		if (s->type == IEEE1905)
+		if (s->type == IEEE1905) {
 			cmdu = cntlr_gen_backhaul_steer_request(c, s->agent->alid,
 					s->macaddr, best_fh->bssid, 0, 0);
-		else
-			cmdu = cntlr_gen_client_steer_request(c, s->fh->agent->alid,
+			if (cmdu) {
+				send_cmdu(c, cmdu);
+				cmdu_free(cmdu);
+			}
+		}
+		else {
+			ret = cntlr_send_client_steer_request(c, s->fh->agent->alid,
 					s->bssid, 0,
 					1, (uint8_t (*)[6])s->macaddr,
 					1, (uint8_t (*)[6])best_fh->bssid,
 					STEER_MODE_BTM_REQ); /* mandate */
-
-		if (cmdu) {
-			send_cmdu(c, cmdu);
-			cmdu_free(cmdu);
+			if (ret)
+				warn("%s: Failed to send cmdu for steering sta!\n", __func__);
 		}
 	}
 }
diff --git a/src/cntlr_tlv.c b/src/cntlr_tlv.c
index 33abebc9abe35b0c1b5f581d4d1d2a913dca4876..c07393e995d65c5108d71906aaae475e05f1d2c6 100644
--- a/src/cntlr_tlv.c
+++ b/src/cntlr_tlv.c
@@ -707,7 +707,7 @@ int cntlr_gen_backhaul_steer_req(struct controller *c, struct cmdu_buff *frm,
 	return 0;
 }
 
-int cntlr_gen_steer_request(struct controller *c,
+int cntlr_gen_tlv_steer_request(struct controller *c,
 		struct cmdu_buff *frm, uint8_t tlv_type,
 		uint8_t *bssid, uint32_t steer_timeout,
 		uint32_t sta_nr, uint8_t sta_id[][6],
diff --git a/src/cntlr_tlv.h b/src/cntlr_tlv.h
index bb67923e571e84938e729b1af54e0f17771d4b5c..af0ca5969bf1637c46ef99963de8c0e1557a683c 100644
--- a/src/cntlr_tlv.h
+++ b/src/cntlr_tlv.h
@@ -64,7 +64,7 @@ int cntlr_gen_backhaul_steer_req(struct controller *c, struct cmdu_buff *frm,
 int cntlr_gen_channel_scan_req(struct controller *c, struct cmdu_buff *frm,
 		uint8_t num_radios, const uint8_t *num_ch_to_scan, uint8_t **channel,
 		char (*radio)[18]);
-int cntlr_gen_steer_request(struct controller *c,
+int cntlr_gen_tlv_steer_request(struct controller *c,
 		struct cmdu_buff *frm, uint8_t tlv_type,
 		uint8_t *bss_id, uint32_t steer_timeout,
 		uint32_t sta_nr, uint8_t sta_id[][6], uint32_t bssid_nr,
diff --git a/src/cntlr_ubus.c b/src/cntlr_ubus.c
index e43420404bf4a02ae0f7d6578d2ebdac9da49be6..efebf7bd6b017dcbe2afbe2d3e063f633b18717b 100644
--- a/src/cntlr_ubus.c
+++ b/src/cntlr_ubus.c
@@ -1299,7 +1299,7 @@ static int cntlr_client_steering(struct ubus_context *ctx, struct ubus_object *o
 			bssid_nr);
 
 		/* Client Steering Request TLV */
-		ret = cntlr_gen_steer_request(c, cmdu,
+		ret = cntlr_gen_tlv_steer_request(c, cmdu,
 				MAP_TLV_STEERING_REQUEST, bss_id,
 				steer_timeout, sta_nr, sta_id, bssid_nr,
 				target_bbsid, request_mode);
@@ -1315,7 +1315,7 @@ static int cntlr_client_steering(struct ubus_context *ctx, struct ubus_object *o
 					sta_multi_present != -1)) {
 
 		/* Client Steering Request TLV 17.2.57 */
-		ret = cntlr_gen_steer_request(c, cmdu,
+		ret = cntlr_gen_tlv_steer_request(c, cmdu,
 				MAP_TLV_PROFILE2_STEERING_REQ, bss_id,
 				steer_timeout, sta_multi_nr, sta_multi_id,
 				bssid_multi_nr, target_bbsid_multi, request_mode);