Hi,
“5. Description of the Protocol for Group Members
IGMP is an asymmetric protocol, specifying separate behaviors for group members -- that is, hosts or routers that wish to receive multicast packets -- and multicast routers. “
As explained in RFC 3376 you can use INCLUDE ({}) as initial state to calculate the record sent when there is a change in a interface state using the table below:
Old State New State State-Change Record Sent
--------- --------- ------------------------
INCLUDE (A) INCLUDE (B) ALLOW (B-A), BLOCK (A-B)
EXCLUDE (A) EXCLUDE (B) ALLOW (A-B), BLOCK (B-A)
INCLUDE (A) EXCLUDE (B) TO_EX (B)
EXCLUDE (A) INCLUDE (B) TO_IN (B)
But I would not affirm that you can do the same in the initial state of the routers because in routers you must consider not only the final state but also the router actions.
Note that if one host send the message TO_IN(B) to a router is because there is a change from EXCLUDE filter mode to INCLUDE filter mode.
So when one router receives a TO_IN(B) I have a doubt about if the router should consider the initial state to be INCLUDE({})
There are two possible initial states and 6 membership reports. That is 12 combinations in the table below.
In the table below the message TO_IN are rows 8 and 12 and note that the actions in the router are different. In 12 there is a group specific query and in 8 there is not.
Best Regards
Alvaro
INITIAL STATE REPORT FINAL STATE ACTIONS
------------ --------- ------------------ -------------
1. INCLUDE (A) IS_IN (B) INCLUDE (A+B) T(B)=GMI
------------ --------- ------------------ -------------
2. INCLUDE (A) IS_EX (B) EXCLUDE (A*B,B-A) T(B-A)=0
DEL(A-B)
GT=GMI
------------ --------- ------------------ -------------
3. EXCLUDE (X,Y) IS_IN (A) EXCLUDE (X+A,Y-A) T(A)=GMI
------------ -------- ------------------ -------------
4. EXCLUDE (X,Y) IS_EX (A) EXCLUDE (A-Y,Y*A) T(A-X-Y)=GMI
DEL (X-A)
DEL (Y-A)
GT=GMI
------------ --------- ------------------ -------------
5. INCLUDE (A) ALLOW (B) INCLUDE (A+B) T(B)=GMI
------------ --------- ------------------ -------------
6. INCLUDE (A) BLOCK (B) INCLUDE (A) SEND Q(G,A*B)
------------ --------- ------------------ -------------
7. INCLUDE (A) TO_EX (B) EXCLUDE (A*B,B-A) T(B-A)=0
DEL (A-B)
SEND Q(G,A*B)
GT=GMI
------------ --------- ------------------ -------------
8. INCLUDE (A) TO_IN (B) INCLUDE (A+B) T(B)=GMI
SEND Q(G,A-B)
------------ --------- ------------------ -------------
9. EXCLUDE (X,Y) ALLOW (A) EXCLUDE (X+A,Y-A) T(A)=GMI
------------ --------- ------------------ -------------
10. EXCLUDE (X,Y) BLOCK (A) EXCLUDE (X+(A-Y),Y) T(A-X-Y)=GT
SEND Q(G,A-Y)
------------ --------- ------------------ -------------
11. EXCLUDE (X,Y) TO_EX (A) EXCLUDE (A-Y,Y*A) T(A-X-Y)=GT
DEL (X-A)
DEL (Y-A)
SEND Q(G,A-Y)
GT=GMI
------------ --------- ------------------ -------------
12. EXCLUDE (X,Y) TO_IN (A) EXCLUDE (X+A,Y-A) T(A)=GMI
SEND Q(G,X-A)
SEND Q(G)