diff --git a/core/net/rime.h b/core/net/rime.h index 5cd296205..cfd36c6fe 100644 --- a/core/net/rime.h +++ b/core/net/rime.h @@ -94,7 +94,7 @@ extern const struct mac_driver *rime_mac; struct rime_sniffer { struct rime_sniffer *next; void (* input_callback)(void); - void (* output_callback)(void); + void (* output_callback)(int mac_status); }; #define RIME_SNIFFER(name, input_callback, output_callback) \ diff --git a/core/net/rime/rime.c b/core/net/rime/rime.c index 323743cff..08db5b8aa 100644 --- a/core/net/rime/rime.c +++ b/core/net/rime/rime.c @@ -151,7 +151,7 @@ static void packet_sent(void *ptr, int status, int num_tx) { struct channel *c = ptr; - + struct rime_sniffer *s; switch(status) { case MAC_TX_COLLISION: @@ -166,17 +166,14 @@ packet_sent(void *ptr, int status, int num_tx) default: PRINTF("rime: error %d after %d tx\n", status, num_tx); } - - if(status == MAC_TX_OK) { - struct rime_sniffer *s; - /* Call sniffers, but only if the packet was sent. */ - for(s = list_head(sniffers); s != NULL; s = list_item_next(s)) { - if(s->output_callback != NULL) { - s->output_callback(); - } + + /* Call sniffers, pass along the MAC status code. */ + for(s = list_head(sniffers); s != NULL; s = list_item_next(s)) { + if(s->output_callback != NULL) { + s->output_callback(status); } } - + abc_sent(c, status, num_tx); } /*---------------------------------------------------------------------------*/