From 9508d2c4d7479c9bc594182ffd41ba77c0adbf9e Mon Sep 17 00:00:00 2001 From: nifi Date: Fri, 26 Mar 2010 12:29:29 +0000 Subject: [PATCH] * Added configurable default number of transmissions for CSMA to use when not specified using packetbuf attributes (CSMA_CONF_MAX_MAC_TRANSMISSIONS). * Renamed packetbuf attribute PACKETBUF_ATTR_MAX_MAC_REXMIT to PACKETBUF_ATTR_MAX_MAC_TRANSMISSIONS where value 0 (attribute not set) means that default number of transmissions should be used. --- core/net/mac/csma.c | 23 +++++++++++++++++++++-- core/net/rime/collect.c | 6 +++--- core/net/rime/packetbuf.h | 4 ++-- core/net/rime/runicast.c | 4 ++-- core/net/sicslowpan.c | 4 ++-- 5 files changed, 30 insertions(+), 11 deletions(-) diff --git a/core/net/mac/csma.c b/core/net/mac/csma.c index 45b8a1d6b..62d4e3714 100644 --- a/core/net/mac/csma.c +++ b/core/net/mac/csma.c @@ -28,7 +28,7 @@ * * This file is part of the Contiki operating system. * - * $Id: csma.c,v 1.14 2010/03/09 20:38:55 adamdunkels Exp $ + * $Id: csma.c,v 1.15 2010/03/26 12:29:29 nifi Exp $ */ /** @@ -60,6 +60,19 @@ #define PRINTF(...) #endif /* DEBUG */ +#ifndef CSMA_MAX_MAC_TRANSMISSIONS +#ifdef CSMA_CONF_MAX_MAC_TRANSMISSIONS +#define CSMA_MAX_MAC_TRANSMISSIONS CSMA_CONF_MAX_MAC_TRANSMISSIONS +#else +#define CSMA_MAX_MAC_TRANSMISSIONS 1 +#endif /* CSMA_CONF_MAX_MAC_TRANSMISSIONS */ +#endif /* CSMA_MAX_MAC_TRANSMISSIONS */ + +#if CSMA_MAX_MAC_TRANSMISSIONS < 1 +#error CSMA_CONF_MAX_MAC_TRANSMISSIONS must be at least 1. +#error Change CSMA_CONF_MAX_MAC_TRANSMISSIONS in contiki-conf.h or in your Makefile. +#endif /* CSMA_CONF_MAX_MAC_TRANSMISSIONS < 1 */ + struct queued_packet { struct queued_packet *next; struct queuebuf *buf; @@ -179,7 +192,13 @@ send_packet(mac_callback_t sent, void *ptr) if(q != NULL) { q->buf = queuebuf_new_from_packetbuf(); if(q != NULL) { - q->max_transmissions = packetbuf_attr(PACKETBUF_ATTR_MAX_MAC_REXMIT) + 1; + if(packetbuf_attr(PACKETBUF_ATTR_MAX_MAC_TRANSMISSIONS) == 0) { + /* Use default configuration for max transmissions */ + q->max_transmissions = CSMA_MAX_MAC_TRANSMISSIONS; + } else { + q->max_transmissions = + packetbuf_attr(PACKETBUF_ATTR_MAX_MAC_TRANSMISSIONS); + } q->transmissions = 0; q->collisions = 0; q->deferrals = 0; diff --git a/core/net/rime/collect.c b/core/net/rime/collect.c index ef4fd9046..63c69ca88 100644 --- a/core/net/rime/collect.c +++ b/core/net/rime/collect.c @@ -33,7 +33,7 @@ * * This file is part of the Contiki operating system. * - * $Id: collect.c,v 1.42 2010/03/25 08:51:07 adamdunkels Exp $ + * $Id: collect.c,v 1.43 2010/03/26 12:29:29 nifi Exp $ */ /** @@ -277,7 +277,7 @@ send_queued_packet(void) c->max_rexmits = packetbuf_attr(PACKETBUF_ATTR_MAX_REXMIT); PRINTF("max_rexmits %d\n", c->max_rexmits); packetbuf_set_attr(PACKETBUF_ATTR_RELIABLE, 1); - packetbuf_set_attr(PACKETBUF_ATTR_MAX_MAC_REXMIT, 2); + packetbuf_set_attr(PACKETBUF_ATTR_MAX_MAC_TRANSMISSIONS, 3); packetbuf_set_attr(PACKETBUF_ATTR_PACKET_ID, c->seqno); unicast_send(&c->unicast_conn, &n->addr); rexmit_time_scaling = c->transmissions; @@ -382,7 +382,7 @@ send_ack(struct collect_conn *tc, const rimeaddr_t *to, int congestion, int drop packetbuf_set_attr(PACKETBUF_ATTR_RELIABLE, 0); packetbuf_set_attr(PACKETBUF_ATTR_ERELIABLE, 0); packetbuf_set_attr(PACKETBUF_ATTR_PACKET_ID, packet_seqno); - packetbuf_set_attr(PACKETBUF_ATTR_MAX_MAC_REXMIT, 2); + packetbuf_set_attr(PACKETBUF_ATTR_MAX_MAC_TRANSMISSIONS, 3); unicast_send(&tc->unicast_conn, to); PRINTF("%d.%d: collect: Sending ACK to %d.%d for %d\n", diff --git a/core/net/rime/packetbuf.h b/core/net/rime/packetbuf.h index b153f1a60..d4780c260 100644 --- a/core/net/rime/packetbuf.h +++ b/core/net/rime/packetbuf.h @@ -40,7 +40,7 @@ * * This file is part of the Contiki operating system. * - * $Id: packetbuf.h,v 1.6 2010/02/28 09:19:43 adamdunkels Exp $ + * $Id: packetbuf.h,v 1.7 2010/03/26 12:29:29 nifi Exp $ */ /** @@ -341,7 +341,7 @@ enum { PACKETBUF_ATTR_RADIO_TXPOWER, PACKETBUF_ATTR_LISTEN_TIME, PACKETBUF_ATTR_TRANSMIT_TIME, - PACKETBUF_ATTR_MAX_MAC_REXMIT, + PACKETBUF_ATTR_MAX_MAC_TRANSMISSIONS, /* Scope 1 attributes: used between two neighbors only. */ PACKETBUF_ATTR_RELIABLE, diff --git a/core/net/rime/runicast.c b/core/net/rime/runicast.c index 153a768ad..e03a881d1 100644 --- a/core/net/rime/runicast.c +++ b/core/net/rime/runicast.c @@ -34,7 +34,7 @@ * * This file is part of the Contiki operating system. * - * $Id: runicast.c,v 1.11 2010/03/19 13:21:59 adamdunkels Exp $ + * $Id: runicast.c,v 1.12 2010/03/26 12:29:29 nifi Exp $ */ /** @@ -233,7 +233,7 @@ runicast_send(struct runicast_conn *c, const rimeaddr_t *receiver, packetbuf_set_attr(PACKETBUF_ATTR_RELIABLE, 1); packetbuf_set_attr(PACKETBUF_ATTR_PACKET_TYPE, PACKETBUF_ATTR_PACKET_TYPE_DATA); packetbuf_set_attr(PACKETBUF_ATTR_PACKET_ID, c->sndnxt); - packetbuf_set_attr(PACKETBUF_ATTR_MAX_MAC_REXMIT, 2); + packetbuf_set_attr(PACKETBUF_ATTR_MAX_MAC_TRANSMISSIONS, 3); c->max_rxmit = max_retransmissions; c->rxmit = 0; c->is_tx = 1; diff --git a/core/net/sicslowpan.c b/core/net/sicslowpan.c index 3fd8c3234..0c64271fd 100644 --- a/core/net/sicslowpan.c +++ b/core/net/sicslowpan.c @@ -32,7 +32,7 @@ * * This file is part of the Contiki operating system. * - * $Id: sicslowpan.c,v 1.33 2010/03/26 10:28:52 joxe Exp $ + * $Id: sicslowpan.c,v 1.34 2010/03/26 12:29:29 nifi Exp $ */ /** * \file @@ -1342,7 +1342,7 @@ output(uip_lladdr_t *localdest) packetbuf_clear(); rime_ptr = packetbuf_dataptr(); - packetbuf_set_attr(PACKETBUF_ATTR_MAX_MAC_REXMIT, 2); + packetbuf_set_attr(PACKETBUF_ATTR_MAX_MAC_TRANSMISSIONS, 3); if(UIP_IP_BUF->proto == UIP_PROTO_TCP) { /* packetbuf_set_attr(PACKETBUF_ATTR_PACKET_TYPE,