diff --git a/.travis.yml b/.travis.yml
index db506cd03..98f98edff 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -103,6 +103,7 @@ env:
- BUILD_TYPE='collect'
- BUILD_TYPE='collect-lossy'
- BUILD_TYPE='rpl'
+ - BUILD_TYPE='large-rpl'
- BUILD_TYPE='rime'
- BUILD_TYPE='ipv6'
- BUILD_TYPE='ip64' MAKE_TARGETS='cooja'
diff --git a/core/net/rpl/rpl-icmp6.c b/core/net/rpl/rpl-icmp6.c
index 880b7986c..0a4488d13 100644
--- a/core/net/rpl/rpl-icmp6.c
+++ b/core/net/rpl/rpl-icmp6.c
@@ -256,7 +256,8 @@ dio_input(void)
PRINTF(", ");
PRINTLLADDR((uip_lladdr_t *)packetbuf_addr(PACKETBUF_ADDR_SENDER));
PRINTF("\n");
- return;
+
+ goto discard;
}
} else {
PRINTF("RPL: Neighbor already in neighbor cache\n");
@@ -306,7 +307,7 @@ dio_input(void)
if(len + i > buffer_length) {
PRINTF("RPL: Invalid DIO packet\n");
RPL_STAT(rpl_stats.malformed_msgs++);
- return;
+ goto discard;
}
PRINTF("RPL: DIO option %u, length: %u\n", subopt_type, len - 2);
@@ -316,7 +317,7 @@ dio_input(void)
if(len < 6) {
PRINTF("RPL: Invalid DAG MC, len = %d\n", len);
RPL_STAT(rpl_stats.malformed_msgs++);
- return;
+ goto discard;
}
dio.mc.type = buffer[i + 2];
dio.mc.flags = buffer[i + 3] << 1;
@@ -342,14 +343,14 @@ dio_input(void)
dio.mc.obj.energy.energy_est = buffer[i + 7];
} else {
PRINTF("RPL: Unhandled DAG MC type: %u\n", (unsigned)dio.mc.type);
- return;
+ goto discard;
}
break;
case RPL_OPTION_ROUTE_INFO:
if(len < 9) {
PRINTF("RPL: Invalid destination prefix option, len = %d\n", len);
RPL_STAT(rpl_stats.malformed_msgs++);
- return;
+ goto discard;
}
/* The flags field includes the preference value. */
@@ -365,7 +366,7 @@ dio_input(void)
} else {
PRINTF("RPL: Invalid route info option, len = %d\n", len);
RPL_STAT(rpl_stats.malformed_msgs++);
- return;
+ goto discard;
}
break;
@@ -373,7 +374,7 @@ dio_input(void)
if(len != 16) {
PRINTF("RPL: Invalid DAG configuration option, len = %d\n", len);
RPL_STAT(rpl_stats.malformed_msgs++);
- return;
+ goto discard;
}
/* Path control field not yet implemented - at i + 2 */
@@ -395,7 +396,7 @@ dio_input(void)
if(len != 32) {
PRINTF("RPL: Invalid DAG prefix info, len != 32\n");
RPL_STAT(rpl_stats.malformed_msgs++);
- return;
+ goto discard;
}
dio.prefix_info.length = buffer[i + 2];
dio.prefix_info.flags = buffer[i + 3];
@@ -418,6 +419,7 @@ dio_input(void)
rpl_process_dio(&from, &dio);
+ discard:
uip_clear_buf();
}
/*---------------------------------------------------------------------------*/
@@ -622,7 +624,7 @@ dao_input(void)
if(instance == NULL) {
PRINTF("RPL: Ignoring a DAO for an unknown RPL instance(%u)\n",
instance_id);
- return;
+ goto discard;
}
lifetime = instance->default_lifetime;
@@ -637,7 +639,7 @@ dao_input(void)
if(flags & RPL_DAO_D_FLAG) {
if(memcmp(&dag->dag_id, &buffer[pos], sizeof(dag->dag_id))) {
PRINTF("RPL: Ignoring a DAO for a DAG different from ours\n");
- return;
+ goto discard;
}
pos += 16;
}
@@ -658,7 +660,7 @@ dao_input(void)
DAG_RANK(parent->rank, instance), DAG_RANK(dag->rank, instance));
parent->rank = INFINITE_RANK;
parent->flags |= RPL_PARENT_FLAG_UPDATED;
- return;
+ goto discard;
}
/* If we get the DAO from our parent, we also have a loop. */
@@ -666,7 +668,7 @@ dao_input(void)
PRINTF("RPL: Loop detected when receiving a unicast DAO from our parent\n");
parent->rank = INFINITE_RANK;
parent->flags |= RPL_PARENT_FLAG_UPDATED;
- return;
+ goto discard;
}
}
@@ -743,7 +745,7 @@ dao_input(void)
dao_ack_output(instance, &dao_sender_addr, sequence);
}
}
- return;
+ goto discard;
}
PRINTF("RPL: adding DAO route\n");
@@ -765,7 +767,7 @@ dao_input(void)
PRINTF(", ");
PRINTLLADDR((uip_lladdr_t *)packetbuf_addr(PACKETBUF_ADDR_SENDER));
PRINTF("\n");
- return;
+ goto discard;
}
} else {
PRINTF("RPL: Neighbor already in neighbor cache\n");
@@ -777,7 +779,7 @@ dao_input(void)
if(rep == NULL) {
RPL_STAT(rpl_stats.mem_overflows++);
PRINTF("RPL: Could not add a route after receiving a DAO\n");
- return;
+ goto discard;
}
rep->state.lifetime = RPL_LIFETIME(instance, lifetime);
@@ -801,6 +803,8 @@ fwd_dao:
dao_ack_output(instance, &dao_sender_addr, sequence);
}
}
+
+ discard:
uip_clear_buf();
}
/*---------------------------------------------------------------------------*/
diff --git a/core/net/rpl/rpl.c b/core/net/rpl/rpl.c
index dc66528d3..e4724408e 100644
--- a/core/net/rpl/rpl.c
+++ b/core/net/rpl/rpl.c
@@ -89,11 +89,17 @@ rpl_set_mode(enum rpl_mode m)
} else if(m == RPL_MODE_FEATHER) {
PRINTF("RPL: switching to feather mode\n");
- mode = m;
if(default_instance != NULL) {
+ PRINTF("rpl_set_mode: RPL sending DAO with zero lifetime\n");
+ if(default_instance->current_dag != NULL) {
+ dao_output(default_instance->current_dag->preferred_parent, RPL_ZERO_LIFETIME);
+ }
rpl_cancel_dao(default_instance);
+ } else {
+ PRINTF("rpl_set_mode: no default instance\n");
}
+ mode = m;
} else {
mode = m;
}
diff --git a/platform/cooja/dev/rs232.c b/platform/cooja/dev/rs232.c
index a52b9a130..51ee5b6a9 100644
--- a/platform/cooja/dev/rs232.c
+++ b/platform/cooja/dev/rs232.c
@@ -37,7 +37,7 @@
const struct simInterface rs232_interface;
-#define SERIAL_BUF_SIZE 1024
+#define SERIAL_BUF_SIZE 2048
// COOJA variables
char simSerialReceivingData[SERIAL_BUF_SIZE];
diff --git a/regression-tests/21-large-rpl/01-cooja-http-socket-50.csc b/regression-tests/21-large-rpl/01-cooja-http-socket-50.csc
new file mode 100644
index 000000000..48b6f9718
--- /dev/null
+++ b/regression-tests/21-large-rpl/01-cooja-http-socket-50.csc
@@ -0,0 +1,1006 @@
+
+
+ [APPS_DIR]/mrm
+ [APPS_DIR]/mspsim
+ [APPS_DIR]/avrora
+ [APPS_DIR]/serial_socket
+ [APPS_DIR]/collect-view
+ [APPS_DIR]/powertracker
+
+ My simulation
+ 2.0
+ generated
+ 1000000
+
+ org.contikios.cooja.radiomediums.UDGM
+ 50.0
+ 100.0
+ 1.0
+ 1.0
+
+
+ 40000
+
+
+ org.contikios.cooja.contikimote.ContikiMoteType
+ mtype812
+ router TARGET=cooja-ip64
+
+ echo make clean TARGET=cooja-ip64
+make router.cooja-ip64 TARGET=cooja-ip64
+ org.contikios.cooja.interfaces.Position
+ org.contikios.cooja.interfaces.Battery
+ org.contikios.cooja.contikimote.interfaces.ContikiVib
+ org.contikios.cooja.contikimote.interfaces.ContikiMoteID
+ org.contikios.cooja.contikimote.interfaces.ContikiRS232
+ org.contikios.cooja.contikimote.interfaces.ContikiBeeper
+ org.contikios.cooja.interfaces.RimeAddress
+ org.contikios.cooja.contikimote.interfaces.ContikiIPAddress
+ org.contikios.cooja.contikimote.interfaces.ContikiRadio
+ org.contikios.cooja.contikimote.interfaces.ContikiButton
+ org.contikios.cooja.contikimote.interfaces.ContikiPIR
+ org.contikios.cooja.contikimote.interfaces.ContikiClock
+ org.contikios.cooja.contikimote.interfaces.ContikiLED
+ org.contikios.cooja.contikimote.interfaces.ContikiCFS
+ org.contikios.cooja.interfaces.Mote2MoteRelations
+ org.contikios.cooja.interfaces.MoteAttributes
+ false
+
+
+ org.contikios.cooja.contikimote.ContikiMoteType
+ mtype833
+ client
+
+ echo make clean TARGET=cooja
+make client.cooja TARGET=cooja
+ org.contikios.cooja.interfaces.Position
+ org.contikios.cooja.interfaces.Battery
+ org.contikios.cooja.contikimote.interfaces.ContikiVib
+ org.contikios.cooja.contikimote.interfaces.ContikiMoteID
+ org.contikios.cooja.contikimote.interfaces.ContikiRS232
+ org.contikios.cooja.contikimote.interfaces.ContikiBeeper
+ org.contikios.cooja.interfaces.RimeAddress
+ org.contikios.cooja.contikimote.interfaces.ContikiIPAddress
+ org.contikios.cooja.contikimote.interfaces.ContikiRadio
+ org.contikios.cooja.contikimote.interfaces.ContikiButton
+ org.contikios.cooja.contikimote.interfaces.ContikiPIR
+ org.contikios.cooja.contikimote.interfaces.ContikiClock
+ org.contikios.cooja.contikimote.interfaces.ContikiLED
+ org.contikios.cooja.contikimote.interfaces.ContikiCFS
+ org.contikios.cooja.interfaces.Mote2MoteRelations
+ org.contikios.cooja.interfaces.MoteAttributes
+ false
+
+
+
+ org.contikios.cooja.interfaces.Position
+ 55.719691912311305
+ 37.8697579181178
+ 0.0
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiMoteID
+ 1
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiRadio
+ 250.0
+
+ mtype812
+
+
+
+ org.contikios.cooja.interfaces.Position
+ 33.16398380436391
+ 28.280100446725353
+ 0.0
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiMoteID
+ 2
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiRadio
+ 250.0
+
+ mtype833
+
+
+
+ org.contikios.cooja.interfaces.Position
+ 64.7333702437188
+ 86.25343669492709
+ 0.0
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiMoteID
+ 3
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiRadio
+ 250.0
+
+ mtype833
+
+
+
+ org.contikios.cooja.interfaces.Position
+ 34.382213480997194
+ 87.3651616010611
+ 0.0
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiMoteID
+ 4
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiRadio
+ 250.0
+
+ mtype833
+
+
+
+ org.contikios.cooja.interfaces.Position
+ 11.332821198243948
+ 72.43057435800137
+ 0.0
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiMoteID
+ 5
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiRadio
+ 250.0
+
+ mtype833
+
+
+
+ org.contikios.cooja.interfaces.Position
+ 95.94512295362799
+ 71.39152480287795
+ 0.0
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiMoteID
+ 6
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiRadio
+ 250.0
+
+ mtype833
+
+
+
+ org.contikios.cooja.interfaces.Position
+ 34.51186307444599
+ 59.489544081261435
+ 0.0
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiMoteID
+ 7
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiRadio
+ 250.0
+
+ mtype833
+
+
+
+ org.contikios.cooja.interfaces.Position
+ 63.02063881741806
+ 6.725737893296902
+ 0.0
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiMoteID
+ 8
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiRadio
+ 250.0
+
+ mtype833
+
+
+
+ org.contikios.cooja.interfaces.Position
+ 67.16488021441937
+ 54.31377260130722
+ 0.0
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiMoteID
+ 9
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiRadio
+ 250.0
+
+ mtype833
+
+
+
+ org.contikios.cooja.interfaces.Position
+ 9.784878122518437
+ 81.00283052134533
+ 0.0
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiMoteID
+ 10
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiRadio
+ 250.0
+
+ mtype833
+
+
+
+ org.contikios.cooja.interfaces.Position
+ 32.10074353933871
+ 33.071992737644926
+ 0.0
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiMoteID
+ 11
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiRadio
+ 250.0
+
+ mtype833
+
+
+
+ org.contikios.cooja.interfaces.Position
+ 91.82438265710196
+ 51.23700415853406
+ 0.0
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiMoteID
+ 12
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiRadio
+ 250.0
+
+ mtype833
+
+
+
+ org.contikios.cooja.interfaces.Position
+ 21.195462105769337
+ 82.08222111459202
+ 0.0
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiMoteID
+ 13
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiRadio
+ 250.0
+
+ mtype833
+
+
+
+ org.contikios.cooja.interfaces.Position
+ 55.73823429127498
+ 69.24022125144269
+ 0.0
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiMoteID
+ 14
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiRadio
+ 250.0
+
+ mtype833
+
+
+
+ org.contikios.cooja.interfaces.Position
+ 69.71587306768029
+ 57.37071024636343
+ 0.0
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiMoteID
+ 15
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiRadio
+ 250.0
+
+ mtype833
+
+
+
+ org.contikios.cooja.interfaces.Position
+ 66.69012609363311
+ 68.93236248473207
+ 0.0
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiMoteID
+ 16
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiRadio
+ 250.0
+
+ mtype833
+
+
+
+ org.contikios.cooja.interfaces.Position
+ 66.84314708507073
+ 32.20129384563065
+ 0.0
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiMoteID
+ 17
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiRadio
+ 250.0
+
+ mtype833
+
+
+
+ org.contikios.cooja.interfaces.Position
+ 75.11303983172269
+ 17.658699966744983
+ 0.0
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiMoteID
+ 18
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiRadio
+ 250.0
+
+ mtype833
+
+
+
+ org.contikios.cooja.interfaces.Position
+ 27.078612584793017
+ 97.3945649089831
+ 0.0
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiMoteID
+ 19
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiRadio
+ 250.0
+
+ mtype833
+
+
+
+ org.contikios.cooja.interfaces.Position
+ 63.37580990146204
+ 30.66028070022273
+ 0.0
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiMoteID
+ 20
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiRadio
+ 250.0
+
+ mtype833
+
+
+
+ org.contikios.cooja.interfaces.Position
+ 3.866240569639967
+ 58.00787820279949
+ 0.0
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiMoteID
+ 21
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiRadio
+ 250.0
+
+ mtype833
+
+
+
+ org.contikios.cooja.interfaces.Position
+ 57.433437740562496
+ 12.398752526430156
+ 0.0
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiMoteID
+ 22
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiRadio
+ 250.0
+
+ mtype833
+
+
+
+ org.contikios.cooja.interfaces.Position
+ 15.784041174017371
+ 74.78102139434115
+ 0.0
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiMoteID
+ 23
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiRadio
+ 250.0
+
+ mtype833
+
+
+
+ org.contikios.cooja.interfaces.Position
+ 40.67175327199246
+ 52.46247320344863
+ 0.0
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiMoteID
+ 24
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiRadio
+ 250.0
+
+ mtype833
+
+
+
+ org.contikios.cooja.interfaces.Position
+ 38.43045934512656
+ 90.56311604010655
+ 0.0
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiMoteID
+ 25
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiRadio
+ 250.0
+
+ mtype833
+
+
+
+ org.contikios.cooja.interfaces.Position
+ 0.6068936092190724
+ 21.344443973676874
+ 0.0
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiMoteID
+ 26
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiRadio
+ 250.0
+
+ mtype833
+
+
+
+ org.contikios.cooja.interfaces.Position
+ 60.36615377515271
+ 86.59995801287768
+ 0.0
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiMoteID
+ 27
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiRadio
+ 250.0
+
+ mtype833
+
+
+
+ org.contikios.cooja.interfaces.Position
+ 14.39476252794466
+ 9.985669338749425
+ 0.0
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiMoteID
+ 28
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiRadio
+ 250.0
+
+ mtype833
+
+
+
+ org.contikios.cooja.interfaces.Position
+ 95.14872168386105
+ 45.936172484167905
+ 0.0
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiMoteID
+ 29
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiRadio
+ 250.0
+
+ mtype833
+
+
+
+ org.contikios.cooja.interfaces.Position
+ 61.80198040806143
+ 14.891226267286084
+ 0.0
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiMoteID
+ 30
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiRadio
+ 250.0
+
+ mtype833
+
+
+
+ org.contikios.cooja.interfaces.Position
+ 32.11354654266005
+ 38.51630620185639
+ 0.0
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiMoteID
+ 31
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiRadio
+ 250.0
+
+ mtype833
+
+
+
+ org.contikios.cooja.interfaces.Position
+ 37.711371799794335
+ 18.547318360664853
+ 0.0
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiMoteID
+ 32
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiRadio
+ 250.0
+
+ mtype833
+
+
+
+ org.contikios.cooja.interfaces.Position
+ 58.34301426026205
+ 95.91480486240545
+ 0.0
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiMoteID
+ 33
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiRadio
+ 250.0
+
+ mtype833
+
+
+
+ org.contikios.cooja.interfaces.Position
+ 20.456374070589078
+ 13.31295283913667
+ 0.0
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiMoteID
+ 34
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiRadio
+ 250.0
+
+ mtype833
+
+
+
+ org.contikios.cooja.interfaces.Position
+ 4.789895861056081
+ 41.25598476863351
+ 0.0
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiMoteID
+ 35
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiRadio
+ 250.0
+
+ mtype833
+
+
+
+ org.contikios.cooja.interfaces.Position
+ 22.62971444227585
+ 28.645182034255324
+ 0.0
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiMoteID
+ 36
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiRadio
+ 250.0
+
+ mtype833
+
+
+
+ org.contikios.cooja.interfaces.Position
+ 60.457329857492034
+ 24.40308696160821
+ 0.0
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiMoteID
+ 37
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiRadio
+ 250.0
+
+ mtype833
+
+
+
+ org.contikios.cooja.interfaces.Position
+ 4.1096555252476685
+ 27.46211937285302
+ 0.0
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiMoteID
+ 38
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiRadio
+ 250.0
+
+ mtype833
+
+
+
+ org.contikios.cooja.interfaces.Position
+ 87.008751083046
+ 87.28519710099914
+ 0.0
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiMoteID
+ 39
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiRadio
+ 250.0
+
+ mtype833
+
+
+
+ org.contikios.cooja.interfaces.Position
+ 86.65741005585366
+ 99.07543884063683
+ 0.0
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiMoteID
+ 40
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiRadio
+ 250.0
+
+ mtype833
+
+
+
+ org.contikios.cooja.interfaces.Position
+ 96.56473544385348
+ 56.74413810869915
+ 0.0
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiMoteID
+ 41
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiRadio
+ 250.0
+
+ mtype833
+
+
+
+ org.contikios.cooja.interfaces.Position
+ 63.1598358033005
+ 41.18799873508732
+ 0.0
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiMoteID
+ 42
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiRadio
+ 250.0
+
+ mtype833
+
+
+
+ org.contikios.cooja.interfaces.Position
+ 14.556676924656397
+ 98.24257311359364
+ 0.0
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiMoteID
+ 43
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiRadio
+ 250.0
+
+ mtype833
+
+
+
+ org.contikios.cooja.interfaces.Position
+ 34.70728168935242
+ 31.89373622088234
+ 0.0
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiMoteID
+ 44
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiRadio
+ 250.0
+
+ mtype833
+
+
+
+ org.contikios.cooja.interfaces.Position
+ 91.35334037714965
+ 83.59007856757782
+ 0.0
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiMoteID
+ 45
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiRadio
+ 250.0
+
+ mtype833
+
+
+
+ org.contikios.cooja.interfaces.Position
+ 57.18004847306107
+ 1.5650913544456135
+ 0.0
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiMoteID
+ 46
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiRadio
+ 250.0
+
+ mtype833
+
+
+
+ org.contikios.cooja.interfaces.Position
+ 97.14688174768989
+ 29.613231105554448
+ 0.0
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiMoteID
+ 47
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiRadio
+ 250.0
+
+ mtype833
+
+
+
+ org.contikios.cooja.interfaces.Position
+ 12.528733239940715
+ 23.28442121821601
+ 0.0
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiMoteID
+ 48
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiRadio
+ 250.0
+
+ mtype833
+
+
+
+ org.contikios.cooja.interfaces.Position
+ 97.65915972314534
+ 57.204021167070664
+ 0.0
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiMoteID
+ 49
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiRadio
+ 250.0
+
+ mtype833
+
+
+
+ org.contikios.cooja.interfaces.Position
+ 94.8211477197945
+ 15.57384229665848
+ 0.0
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiMoteID
+ 50
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiRadio
+ 250.0
+
+ mtype833
+
+
+
+ org.contikios.cooja.interfaces.Position
+ 69.1730393490499
+ 35.900983349410275
+ 0.0
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiMoteID
+ 51
+
+
+ org.contikios.cooja.contikimote.interfaces.ContikiRadio
+ 250.0
+
+ mtype833
+
+
+
+ org.contikios.cooja.plugins.SimControl
+ 280
+ 3
+ 160
+ 606
+ 15
+
+
+ org.contikios.cooja.plugins.Visualizer
+
+ true
+ org.contikios.cooja.plugins.skins.IDVisualizerSkin
+ org.contikios.cooja.plugins.skins.GridVisualizerSkin
+ org.contikios.cooja.plugins.skins.MoteTypeVisualizerSkin
+ org.contikios.cooja.plugins.skins.LEDVisualizerSkin
+ org.contikios.cooja.plugins.skins.UDGMVisualizerSkin
+ 2.927428245448204 0.0 0.0 2.927428245448204 50.166589953058406 9.691034635016393
+
+ 401
+ 0
+ 368
+ 29
+ 27
+
+
+ org.contikios.cooja.plugins.LogListener
+
+ close
+
+
+
+ 685
+ 2
+ 429
+ 34
+ 307
+
+
+ org.contikios.cooja.plugins.ScriptRunner
+
+ [CONTIKI_DIR]/regression-tests/21-large-rpl/testscript.js
+ true
+
+ 960
+ 1
+ 682
+ 528
+ 192
+
+
+ org.contikios.cooja.serialsocket.SerialSocketServer
+ 0
+
+ 60001
+ true
+
+ 362
+ 4
+ 116
+ 234
+ 101
+
+
+
diff --git a/regression-tests/21-large-rpl/Makefile b/regression-tests/21-large-rpl/Makefile
new file mode 100644
index 000000000..272bc7da1
--- /dev/null
+++ b/regression-tests/21-large-rpl/Makefile
@@ -0,0 +1 @@
+include ../Makefile.simulation-test
diff --git a/regression-tests/21-large-rpl/code/node/Makefile b/regression-tests/21-large-rpl/code/node/Makefile
new file mode 100644
index 000000000..cbaa72ef7
--- /dev/null
+++ b/regression-tests/21-large-rpl/code/node/Makefile
@@ -0,0 +1,7 @@
+CONTIKI=../../../..
+
+MODULES += core/net/http-socket
+
+CFLAGS+=-DPROJECT_CONF_H=\"project-conf.h\"
+
+include $(CONTIKI)/Makefile.include
diff --git a/regression-tests/21-large-rpl/code/node/client.c b/regression-tests/21-large-rpl/code/node/client.c
new file mode 100644
index 000000000..386f18529
--- /dev/null
+++ b/regression-tests/21-large-rpl/code/node/client.c
@@ -0,0 +1,103 @@
+#include "contiki-net.h"
+#include "http-socket.h"
+#include "ip64-addr.h"
+#include "dev/leds.h"
+#include "rpl.h"
+
+#include
+
+static struct http_socket s;
+static int bytes_received = 0;
+static int restarts;
+static struct ctimer reconnect_timer;
+
+static void callback(struct http_socket *s, void *ptr,
+ http_socket_event_t e,
+ const uint8_t *data, uint16_t datalen);
+
+/*---------------------------------------------------------------------------*/
+PROCESS(http_example_process, "HTTP Example");
+AUTOSTART_PROCESSES(&http_example_process);
+/*---------------------------------------------------------------------------*/
+static void
+reconnect(void *dummy)
+{
+ rpl_set_mode(RPL_MODE_MESH);
+ http_socket_get(&s, "http://www.contiki-os.org/", 0, 0,
+ callback, NULL);
+}
+/*---------------------------------------------------------------------------*/
+static void
+restart(void)
+{
+ int scale;
+ restarts++;
+ printf("restart %d\n", restarts);
+
+ scale = restarts;
+ if(scale > 5) {
+ scale = 5;
+ }
+ ctimer_set(&reconnect_timer, random_rand() % ((CLOCK_SECOND * 10) << scale),
+ reconnect, NULL);
+}
+/*---------------------------------------------------------------------------*/
+static void
+callback(struct http_socket *s, void *ptr,
+ http_socket_event_t e,
+ const uint8_t *data, uint16_t datalen)
+{
+ if(e == HTTP_SOCKET_ERR) {
+ printf("HTTP socket error\n");
+ } else if(e == HTTP_SOCKET_TIMEDOUT) {
+ printf("HTTP socket error: timed out\n");
+ restart();
+ } else if(e == HTTP_SOCKET_ABORTED) {
+ printf("HTTP socket error: aborted\n");
+ restart();
+ } else if(e == HTTP_SOCKET_HOSTNAME_NOT_FOUND) {
+ printf("HTTP socket error: hostname not found\n");
+ restart();
+ } else if(e == HTTP_SOCKET_CLOSED) {
+ if(bytes_received > 0) {
+ printf("HTTP socket closed, %d bytes received\n", bytes_received);
+ leds_off(LEDS_RED);
+ rpl_set_mode(RPL_MODE_FEATHER);
+ } else {
+ restart();
+ }
+ } else if(e == HTTP_SOCKET_DATA) {
+ bytes_received += datalen;
+ printf("HTTP socket received %d bytes of data\n", datalen);
+ }
+}
+/*---------------------------------------------------------------------------*/
+PROCESS_THREAD(http_example_process, ev, data)
+{
+ static struct etimer et;
+ uip_ip4addr_t ip4addr;
+ uip_ip6addr_t ip6addr;
+
+ PROCESS_BEGIN();
+
+ uip_ipaddr(&ip4addr, 8,8,8,8);
+ ip64_addr_4to6(&ip4addr, &ip6addr);
+ uip_nameserver_update(&ip6addr, UIP_NAMESERVER_INFINITE_LIFETIME);
+
+ etimer_set(&et, CLOCK_SECOND * 20);
+ PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et));
+
+ http_socket_init(&s);
+ http_socket_get(&s, "http://www.contiki-os.org/", 0, 0,
+ callback, NULL);
+ leds_on(LEDS_RED);
+ restarts = 0;
+ etimer_set(&et, CLOCK_SECOND);
+ while(1) {
+ PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et));
+ etimer_reset(&et);
+ }
+
+ PROCESS_END();
+}
+/*---------------------------------------------------------------------------*/
diff --git a/regression-tests/21-large-rpl/code/node/project-conf.h b/regression-tests/21-large-rpl/code/node/project-conf.h
new file mode 100644
index 000000000..c8cfeb645
--- /dev/null
+++ b/regression-tests/21-large-rpl/code/node/project-conf.h
@@ -0,0 +1,6 @@
+#define QUEUEBUF_CONF_STATS 1
+#define RESOLV_CONF_SUPPORTS_MDNS 0
+#define COOJA_MTARCH_STACKSIZE 4096
+
+#define UIP_CONF_MAX_ROUTES 3
+#define NBR_TABLE_CONF_MAX_NEIGHBORS 3
diff --git a/regression-tests/21-large-rpl/code/router/Makefile b/regression-tests/21-large-rpl/code/router/Makefile
new file mode 100644
index 000000000..a482f0a6a
--- /dev/null
+++ b/regression-tests/21-large-rpl/code/router/Makefile
@@ -0,0 +1,5 @@
+CONTIKI=../../../..
+
+CFLAGS+=-DPROJECT_CONF_H=\"project-conf.h\"
+
+include $(CONTIKI)/Makefile.include
diff --git a/regression-tests/21-large-rpl/code/router/project-conf.h b/regression-tests/21-large-rpl/code/router/project-conf.h
new file mode 100644
index 000000000..2fa5e2977
--- /dev/null
+++ b/regression-tests/21-large-rpl/code/router/project-conf.h
@@ -0,0 +1,9 @@
+#define QUEUEBUF_CONF_STATS 1
+#define RESOLV_CONF_SUPPORTS_MDNS 0
+#define COOJA_MTARCH_STACKSIZE 4096
+
+#define UIP_CONF_MAX_ROUTES 8
+#define NBR_TABLE_CONF_MAX_NEIGHBORS 8
+
+/*#define RPL_CONF_DEFAULT_LIFETIME_UNIT 10
+ #define RPL_CONF_DEFAULT_LIFETIME 10*/
diff --git a/regression-tests/21-large-rpl/code/router/router.c b/regression-tests/21-large-rpl/code/router/router.c
new file mode 100644
index 000000000..391b5038b
--- /dev/null
+++ b/regression-tests/21-large-rpl/code/router/router.c
@@ -0,0 +1,27 @@
+#include "contiki.h"
+#include "contiki-net.h"
+#include "ip64.h"
+#include "net/netstack.h"
+
+/*---------------------------------------------------------------------------*/
+PROCESS(router_node_process, "Router node");
+AUTOSTART_PROCESSES(&router_node_process);
+/*---------------------------------------------------------------------------*/
+PROCESS_THREAD(router_node_process, ev, data)
+{
+ PROCESS_BEGIN();
+
+ /* Set us up as a RPL root node. */
+ rpl_dag_root_init_dag();
+
+ /* Initialize the IP64 module so we'll start translating packets */
+ ip64_init();
+
+ /* ... and do nothing more. */
+ while(1) {
+ PROCESS_WAIT_EVENT();
+ }
+
+ PROCESS_END();
+}
+/*---------------------------------------------------------------------------*/
diff --git a/regression-tests/21-large-rpl/testscript.js b/regression-tests/21-large-rpl/testscript.js
new file mode 100644
index 000000000..0c23bceef
--- /dev/null
+++ b/regression-tests/21-large-rpl/testscript.js
@@ -0,0 +1,78 @@
+
+TIMEOUT(2400000); /* 40 minutes */
+
+var NR_FEATHERS = mote.getSimulation().getMotesCount() - 1;
+
+/* conf */
+var travis = java.lang.System.getenv().get("TRAVIS");
+if (travis == null) {
+ /* Instant Contiki */
+ CMD_TUNNEL = "echo '-vj' > ~/.slirprc && make Connect.class && java Connect 'nc localhost 60001' 'script -t -f -c slirp'";
+ CMD_PING = "ping -c 5 8.8.8.8";
+ CMD_DIR = "../../wpcapslip";
+} else {
+ /* Travis */
+ CMD_TUNNEL = "cd $TRAVIS_BUILD_DIR/tools/wpcapslip && sudo apt-get install slirp && echo '-vj' > ~/.slirprc && make Connect.class && java Connect 'nc localhost 60001' 'script -t -f -c slirp'";
+ CMD_PING = "ping -c 5 8.8.8.8";
+ CMD_DIR = ".";
+}
+
+/* delay */
+GENERATE_MSG(1000, "continue");
+YIELD_THEN_WAIT_UNTIL(msg.equals("continue"));
+
+/* realtime speed */
+sim.setSpeedLimit(2.0);
+
+/* tunnel interface */
+log.log("opening tunnel interface: " + CMD_TUNNEL + "\n");
+launcher = new java.lang.ProcessBuilder["(java.lang.String[])"](['sh','-c',CMD_TUNNEL]);
+launcher.directory(new java.io.File(CMD_DIR));
+launcher.redirectErrorStream(true);
+tunProcess = launcher.start();
+tunRunnable = new Object();
+tunRunnable.run = function() {
+ var stdIn = new java.io.BufferedReader(new java.io.InputStreamReader(tunProcess.getInputStream()));
+ while ((line = stdIn.readLine()) != null) {
+ if (line != null && !line.trim().equals("")) {
+ //log.log("TUN> " + line + "\n");
+ }
+ }
+ tunProcess.destroy();
+}
+new java.lang.Thread(new java.lang.Runnable(tunRunnable)).start();
+
+GENERATE_MSG(1000, "continue");
+YIELD_THEN_WAIT_UNTIL(msg.equals("continue"));
+
+/* ping */
+log.log("pinging: " + CMD_PING + "\n");
+launcher = new java.lang.ProcessBuilder["(java.lang.String[])"](['sh','-c',CMD_PING]);
+launcher.directory(new java.io.File(CMD_DIR));
+launcher.redirectErrorStream(true);
+tunProcess = launcher.start();
+tunRunnable = new Object();
+tunRunnable.run = function() {
+ var stdIn = new java.io.BufferedReader(new java.io.InputStreamReader(tunProcess.getInputStream()));
+ while ((line = stdIn.readLine()) != null) {
+ if (line != null && !line.trim().equals("")) {
+ log.log("PING> " + line + "\n");
+ }
+ }
+ tunProcess.destroy();
+}
+new java.lang.Thread(new java.lang.Runnable(tunRunnable)).start();
+
+var completed = {};
+while(Object.keys(completed).length < NR_FEATHERS) {
+ if (!msg.startsWith("#L") && !msg.startsWith("E")) {
+ //log.log(mote + ": " + msg + "\n");
+ }
+ if (id != 1 && msg.startsWith("HTTP socket closed")) {
+ completed[id] = id;
+ log.log("Data compelete " + id + ", heard " + Object.keys(completed).length + " in total\n");
+ }
+ YIELD();
+}
+
+log.testOK();
diff --git a/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiRS232.java b/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiRS232.java
index 2607bc1ea..e8e7589e5 100644
--- a/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiRS232.java
+++ b/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiRS232.java
@@ -71,7 +71,7 @@ public class ContikiRS232 extends SerialUI implements ContikiMoteInterface, Poll
private ContikiMote mote = null;
private VarMemory moteMem = null;
- static final int SERIAL_BUF_SIZE = 1024; /* rs232.c:40 */
+ static final int SERIAL_BUF_SIZE = 2048; /* rs232.c:40 */
/**
* Creates an interface to the RS232 at mote.