diff --git a/Makefile.dep b/Makefile.dep
index 31fbbaea22de34b32bdb59ed2576c3355e9bbb6b..45958925f611e0e9e7cbcfbf233d6a5a53f8414f 100644
--- a/Makefile.dep
+++ b/Makefile.dep
@@ -13,6 +13,11 @@ ifneq (,$(filter csma_sender,$(USEMODULE)))
   USEMODULE += xtimer
 endif
 
+ifneq (,$(filter gnrc_mac,$(USEMODULE)))
+  USEMODULE += gnrc_priority_pktqueue
+  USEMODULE += csma_sender
+endif
+
 ifneq (,$(filter nhdp,$(USEMODULE)))
   USEMODULE += sock_udp
   USEMODULE += xtimer
diff --git a/sys/include/net/gnrc/netdev.h b/sys/include/net/gnrc/netdev.h
index 4313aa7c928a9c4c7a15859481032705386fcee7..c6882b53d32f6cc734b684a9e9b2c55c697a510d 100644
--- a/sys/include/net/gnrc/netdev.h
+++ b/sys/include/net/gnrc/netdev.h
@@ -38,6 +38,9 @@
 #include "net/gnrc/mac/types.h"
 #include "net/ieee802154.h"
 #include "net/gnrc/mac/mac.h"
+#ifdef MODULE_GNRC_MAC
+#include "net/csma_sender.h"
+#endif
 
 #ifdef __cplusplus
 extern "C" {
@@ -66,6 +69,17 @@ extern "C" {
  */
 #define GNRC_NETDEV_MAC_INFO_RX_STARTED         (0x0004U)
 
+/**
+ * @brief   Flag to track if a device has enabled CSMA for transmissions
+ *
+ * If `gnrc_mac` is used, the user should be noticed that the `send()`
+ * function of gnrc_netdev will be affected with the state of this flag, since
+ * `gnrc_mac` accordingly adapts the `send()` function. If the device doesn't
+ * support on-chip CSMA and this flag is set for requiring CSMA transmission,
+ * then, the device will run software CSMA using `csma_sender` APIs.
+ */
+#define GNRC_NETDEV_MAC_INFO_CSMA_ENABLED       (0x0100U)
+
 /**
  * @brief Structure holding GNRC netdev adapter state
  *
@@ -118,6 +132,11 @@ typedef struct gnrc_netdev {
      */
     uint8_t  l2_addr_len;
 
+    /**
+     * @brief device's software CSMA configuration
+     */
+    csma_sender_conf_t csma_conf;
+
 #if ((GNRC_MAC_RX_QUEUE_SIZE != 0) || (GNRC_MAC_DISPATCH_BUFFER_SIZE != 0)) || defined(DOXYGEN)
     /**
      * @brief MAC internal object which stores reception parameters, queues, and
diff --git a/sys/net/gnrc/link_layer/netdev/gnrc_netdev_ieee802154.c b/sys/net/gnrc/link_layer/netdev/gnrc_netdev_ieee802154.c
index 4c1c8ddf5a4bb651287438470159823ab717fbf9..8ae60a8f1fdd9004cd7605b8088458e8af9cf568 100644
--- a/sys/net/gnrc/link_layer/netdev/gnrc_netdev_ieee802154.c
+++ b/sys/net/gnrc/link_layer/netdev/gnrc_netdev_ieee802154.c
@@ -221,7 +221,16 @@ static int _send(gnrc_netdev_t *gnrc_netdev, gnrc_pktsnip_t *pkt)
             gnrc_netdev->dev->stats.tx_unicast_count++;
         }
 #endif
+#ifdef MODULE_GNRC_MAC
+        if (gnrc_netdev->mac_info & GNRC_NETDEV_MAC_INFO_CSMA_ENABLED) {
+            res = csma_sender_csma_ca_send(netdev, vector, n, &gnrc_netdev->csma_conf);
+        }
+        else {
+            res = netdev->driver->send(netdev, vector, n);
+        }
+#else
         res = netdev->driver->send(netdev, vector, n);
+#endif
     }
     else {
         return -ENOBUFS;