In a federated program that does not enable authentication (using auth C target property), importing a reactor from a file where authentication is required will cause the program to fail.
To reproduce, consider the following 2 lf programs:
R1.lf:
target C {
auth: true
}
reactor R1 {
input in: int
reaction(in) {=
lf_print("R1 reacted to input %d", in->value);
=}
}
And IssueAuth.lf:
target C
import R1 from "R1.lf"
reactor R0 {
output out: int
state s: int = 0
timer t(0, 100 ms)
reaction(t) -> out {=
self->s ++ ;
lf_set(out, self->s);
lf_print("R0 is sending %d.", self->s);
=}
}
federated reactor {
r1 = new R1()
r0 = new R0()
r0.out -> r1.in
}
Executing IssueAuth says:
DEBUG: RTI sending MSG_TYPE_REJECT.
ERROR: RTI expected a MSG_TYPE_FED_IDS message. Got 100 (see net_common.h).
Fed 0 (r1): WARNING: Failed to read RTI response.
Fed 0 (r1): Trying RTI again on port 15046.
Fed 0 (r1): Trying RTI again on port 15047.
Fed 0 (r1): Trying RTI again on port 15048.
Fed 0 (r1): Trying RTI again on port 15049.
...
The reason is that r1 wants to proceed with authentication (Message id 100), while the RTI is not expecting such a message, but rather the neighborhood structure.
In a federated program that does not enable authentication (using
auth
C target property), importing a reactor from a file where authentication is required will cause the program to fail.To reproduce, consider the following 2
lf
programs:R1.lf
:And
IssueAuth.lf
:Executing
IssueAuth
says:The reason is that
r1
wants to proceed with authentication (Message id 100), while the RTI is not expecting such a message, but rather the neighborhood structure.