%description: Tests group specific state transitions of Non-Querier IGMP routers RFC 2236 7.: ________________ | | | | timer expired| |timer expired (notify routing -)| No Members |(notify routing -) --------->| Present |<--------- | | | | | | | | | | | | | |________________| | | | | | |report received | | |(notify routing +,| | | start timer) | ________|________ | ________|________ | |<--------- | | | | report received | | | | (start timer) | | | Members Present |<-------------------| Checking | | | g-s query rec'd | Membership | | | (start timer*) | | ---->| |------------------->| | | |_________________| |_________________| | report received | | (start timer) | ----------------- This scenario checks the following trajectories: NO MEMBERS PRESENT --> report received --> MEMBERS PRESENT --> report received -> MEMBERS PRESENT --> --> g-s query received -> CHECKING MEMBERSHIP --> report received -> MEMBERS PRESENT --> --> g-s query received -> CHECKING MEMBERSHIP --> g-s query received --> CHECKING MEMBERSHIP --> --> timer expired --> NO MEMBERS PRESENT NO MEMBERS PRESENT --> report received --> MEMBERS PRESENT --> report received --> MEMBERS PRESENT --> --> timer expired --> NO MEMBERS PRESENT %inifile: omnetpp.ini [General] ned-path = .;../../../../src;../../lib sim-time-limit=500s cmdenv-express-mode = true #omnetpp 5.0 - 5.1 compatibility: eventlog-file = "${resultdir}/${configname}-${runnumber}.elog" output-scalar-file = "${resultdir}/${configname}-${runnumber}.sca" output-vector-file = "${resultdir}/${configname}-${runnumber}.vec" snapshot-file = "${resultdir}/${configname}-${runnumber}.sna" network=IGMPTestNetwork **.igmpType = "TestIGMP" **.scenarioManager.script = xmldoc("scenario.xml") **.nqrouter.networkLayer.igmp.outputFile = "nqrouter-output.txt" **.igmp.queryResponseInterval = 6s **.igmp.startupQueryInterval = 1000s **.igmp.queryInterval = 1000s **.igmp.groupMembershipInterval = 200s %file: scenario.xml %contains-regex: nqrouter-output.txt t=0\..* nqrouter/eth0/: QUERIER --> query received <> --> NON_QUERIER %contains-regex: nqrouter-output.txt t=100\..* nqrouter/eth0/225.0.0.1: NON_QUERIER NO_MEMBERS_PRESENT NON_MEMBER --> report received <> --> NON_QUERIER MEMBERS_PRESENT NON_MEMBER t=10.\..* nqrouter/eth0/225.0.0.1: NON_QUERIER MEMBERS_PRESENT NON_MEMBER --> report received <> --> NON_QUERIER MEMBERS_PRESENT NON_MEMBER t=120\..* nqrouter/eth0/225.0.0.1: NON_QUERIER MEMBERS_PRESENT NON_MEMBER --> query received <> --> NON_QUERIER CHECKING_MEMBERSHIP NON_MEMBER t=.* nqrouter/eth0/225.0.0.1: NON_QUERIER CHECKING_MEMBERSHIP NON_MEMBER --> report received <> --> NON_QUERIER MEMBERS_PRESENT NON_MEMBER .* t=130\..* nqrouter/eth0/225.0.0.1: NON_QUERIER MEMBERS_PRESENT NON_MEMBER --> query received <> --> NON_QUERIER CHECKING_MEMBERSHIP NON_MEMBER t=131\..* nqrouter/eth0/225.0.0.1: NON_QUERIER CHECKING_MEMBERSHIP NON_MEMBER --> query received <> --> NON_QUERIER CHECKING_MEMBERSHIP NON_MEMBER t=132\..* nqrouter/eth0/225.0.0.1: CHECKING_MEMBERSHIP --> timer expired <> --> NO_MEMBERS_PRESENT %contains-regex: nqrouter-output.txt t=200\..* nqrouter/eth0/225.0.0.2: NON_QUERIER NO_MEMBERS_PRESENT NON_MEMBER --> report received <> --> NON_QUERIER MEMBERS_PRESENT NON_MEMBER t=20.\..* nqrouter/eth0/225.0.0.2: NON_QUERIER MEMBERS_PRESENT NON_MEMBER --> report received <> --> NON_QUERIER MEMBERS_PRESENT NON_MEMBER t=40.\..* nqrouter/eth0/225.0.0.2: MEMBERS_PRESENT --> timer expired <> --> NO_MEMBERS_PRESENT %#-------------------------------------------------------------------------------------------------------------- %not-contains: stdout undisposed object: %not-contains: stdout -- check module destructor %#--------------------------------------------------------------------------------------------------------------