- Added attack script.

- Worked on ni-synch claims.
  Todo: weirdness with: ./scyther ../spdl/nsl3-nisynch.spdl -t1 -r2
This commit is contained in:
ccremers 2004-07-21 14:26:28 +00:00
parent 7e80d048d7
commit 7ce5736af3
8 changed files with 54 additions and 22 deletions

View File

@ -25,10 +25,10 @@ events_match (const System sys, const int i, const int j)
rdi = sys->traceEvent[i]; rdi = sys->traceEvent[i];
rdj = sys->traceEvent[j]; rdj = sys->traceEvent[j];
if (isTermEqual (rdi->message, rdj->message) && if ((isTermEqual (rdi->message, rdj->message)) &&
isTermEqual (rdi->from, rdj->from) && (isTermEqual (rdi->from, rdj->from)) &&
isTermEqual (rdi->to, rdj->to) && (isTermEqual (rdi->to, rdj->to)) &&
isTermEqual (rdi->label, rdj->label) && (isTermEqual (rdi->label, rdj->label)) &&
!(rdi->internal || rdj->internal)) !(rdi->internal || rdj->internal))
{ {
if (rdi->type == SEND && rdj->type == READ) if (rdi->type == SEND && rdj->type == READ)
@ -61,7 +61,7 @@ int
oki_nisynch (const System sys, const int i, const Termmap f, const Termmap g) oki_nisynch (const System sys, const int i, const Termmap f, const Termmap g)
{ {
// Check for completed trace // Check for completed trace
if (i == -1) if (i < 0)
{ {
// Are all labels well linked? // Are all labels well linked?
Termmap gscan; Termmap gscan;
@ -130,7 +130,6 @@ oki_nisynch (const System sys, const int i, const Termmap f, const Termmap g)
int result; int result;
int rid2; int rid2;
Term rolename; Term rolename;
Termmap gscan;
/* /*
* Two options: it is either involved or not * Two options: it is either involved or not
@ -142,6 +141,7 @@ oki_nisynch (const System sys, const int i, const Termmap f, const Termmap g)
rid2 = termmapGet (f, rolename); rid2 = termmapGet (f, rolename);
if (rid2 == -1 || rid2 == rid) if (rid2 == -1 || rid2 == rid)
{ {
Termmap gscan;
// Was not involved yet in a registerd way, or was the correct rid // Was not involved yet in a registerd way, or was the correct rid
gscan = g; gscan = g;
while (!result && gscan != NULL) while (!result && gscan != NULL)
@ -159,7 +159,7 @@ oki_nisynch (const System sys, const int i, const Termmap f, const Termmap g)
fbuf = termmapSet (fbuf, rolename, rid); fbuf = termmapSet (fbuf, rolename, rid);
gbuf = termmapDuplicate (g); gbuf = termmapDuplicate (g);
gbuf = termmapSet (gbuf, rd->label, -3); gbuf = termmapSet (gbuf, rd->label, -3);
result = oki_nisynch (sys, i-1, fbuf, gbuf) || result; result = oki_nisynch (sys, i-1, fbuf, gbuf);
termmapDelete (gbuf); termmapDelete (gbuf);
termmapDelete (fbuf); termmapDelete (fbuf);
} }
@ -198,7 +198,7 @@ check_claim_nisynch (const System sys, const int i)
rid = sys->traceRun[i]; rid = sys->traceRun[i];
rd = sys->traceEvent[i]; rd = sys->traceEvent[i];
cl = rd->claiminfo; cl = rd->claiminfo;
cl->count++; cl->count = statesIncrease (cl->count);
f = termmapSet (NULL, sys->runs[rid].role->nameterm, rid); f = termmapSet (NULL, sys->runs[rid].role->nameterm, rid);
// map all labels in prec to LABEL_TODO // map all labels in prec to LABEL_TODO
@ -217,7 +217,22 @@ check_claim_nisynch (const System sys, const int i)
result = oki_nisynch(sys, i, f, g); result = oki_nisynch(sys, i, f, g);
if (!result) if (!result)
{ {
cl->failed++; cl->failed = statesIncrease (cl->failed);
//#ifdef DEBUG
warning ("Claim has failed!");
printf ("To be exact, claim label ");
termPrint (cl->label);
printf (" with prec set ");
termlistPrint (cl->prec);
printf ("\n");
printf ("i: %i\nf: ",i);
termmapPrint (f);
printf ("\ng: ");
termmapPrint (g);
printf ("\n");
//#endif
} }
termmapDelete (f); termmapDelete (f);
termmapDelete (g); termmapDelete (g);

View File

@ -113,16 +113,16 @@ systemReset (const System sys)
Claimlist cl; Claimlist cl;
/* some initial counters */ /* some initial counters */
sys->states = STATES0; sys->states = statesIncrease (STATES0); //!< Initial state is not explored, so start counting at 1
sys->interval = STATES0; sys->interval = statesIncrease (STATES0); //!< To keep in line with the states
sys->claims = STATES0; sys->claims = STATES0;
sys->failed = STATES0; sys->failed = STATES0;
sys->explore = 1; // do explore the space sys->explore = 1; // do explore the space
cl = sys->claimlist; cl = sys->claimlist;
while (cl != NULL) while (cl != NULL)
{ {
cl->count = 0; cl->count = STATES0;
cl->failed = 0; cl->failed = STATES0;
cl = cl->next; cl = cl->next;
} }

View File

@ -23,9 +23,9 @@ struct claimlist
//! The name of the role in which it occurs. //! The name of the role in which it occurs.
Term rolename; Term rolename;
//! Number of occurrences in system exploration. //! Number of occurrences in system exploration.
int count; states_t count;
//! Number of occurrences that failed. //! Number of occurrences that failed.
int failed; states_t failed;
int r; //!< role number for mapping int r; //!< role number for mapping
int ev; //!< event index in role int ev; //!< event index in role
//! Preceding label list //! Preceding label list

View File

@ -5,7 +5,7 @@
# #
# Usage example: # Usage example:
# #
# ./testl ns3 # ./scytherat ns3
# #
file=../spdl/$1.spdl file=../spdl/$1.spdl
@ -19,10 +19,10 @@ then
latex $template.tex latex $template.tex
mv $template.dvi attack.dvi mv $template.dvi attack.dvi
dvips attack.dvi -o attack.ps #dvips attack.dvi -o attack.ps
# also eps output now # also eps output now
ps2eps -f attack.ps #ps2eps -f attack.ps
xdvi attack.dvi # for Xdvi xdvi attack.dvi # for Xdvi
# kdvi attack.dvi # for KDE environment # kdvi attack.dvi # for KDE environment

View File

@ -105,3 +105,19 @@ termmapDelete (const Termmap f)
memFree (f, sizeof (struct termmap)); memFree (f, sizeof (struct termmap));
} }
} }
//! Print a function
void termmapPrint (Termmap f)
{
if (f != NULL)
{
printf ("\"");
termPrint (f->term);
printf ("\" -> %i", f->result);
if (f->next != NULL)
{
printf (", ");
termmapPrint (f->next);
}
}
}

View File

@ -26,5 +26,6 @@ int termmapGet (Termmap f, const Term x);
Termmap termmapSet (const Termmap f, const Term x, const int y); Termmap termmapSet (const Termmap f, const Term x, const int y);
Termmap termmapDuplicate (const Termmap f); Termmap termmapDuplicate (const Termmap f);
void termmapDelete (const Termmap f); void termmapDelete (const Termmap f);
void termmapPrint (Termmap f);
#endif #endif

View File

@ -166,7 +166,8 @@ hasTermVariable (Term term)
} }
} }
#ifdef DEBUG //! Safe wrapper for isTermEqual
int isTermEqualDebug (Term t1, Term t2) int isTermEqualDebug (Term t1, Term t2)
{ {
int test1, test2; int test1, test2;
@ -187,7 +188,6 @@ int isTermEqualDebug (Term t1, Term t2)
} }
return test1; return test1;
} }
#endif
//!Tests whether two terms are completely identical. //!Tests whether two terms are completely identical.
/** /**

View File

@ -102,7 +102,7 @@ int isTermEqualDebug (Term t1, Term t2);
) )
#define isTermEqual2(t1,t2) ((substVar(t1) || substVar(t2)) \ #define isTermEqual2(t1,t2) ((substVar(t1) || substVar(t2)) \
? isTermEqual1(t1,t2) \ ? isTermEqualFn(t1,t2) \
: ( \ : ( \
(t1 == t2) \ (t1 == t2) \
? 1 \ ? 1 \
@ -125,7 +125,7 @@ int isTermEqualDebug (Term t1, Term t2);
) )
#define isTermEqual3(t1,t2) ((substVar(t1) || substVar(t2)) \ #define isTermEqual3(t1,t2) ((substVar(t1) || substVar(t2)) \
? isTermEqual2(t1,t2) \ ? isTermEqualFn(t1,t2) \
: ( \ : ( \
(t1 == t2) \ (t1 == t2) \
? 1 \ ? 1 \