⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 draft-ietf-pim-sm-v2-new-11.txt

📁 xorp源码hg
💻 TXT
📖 第 1 页 / 共 5 页
字号:
PIM (S,G) Join/Prune state is the result of receiving PIM (S,G)Join/Prune messages on this interface, and is specified in Section4.5.2. The state is used by the macros that calculate the outgoinginterface list in Section 4.1.6, and in the JoinDesired(S,G) macro(defined in Section 4.5.7) that is used in deciding whether a Join(S,G)should be sent upstream.(S,G) Assert Winner state is the result of sending or receiving (S,G)Assert messages on this interface.  It is specified in Section 4.6.1.The upstream (S,G) Join/Prune State reflects the state of the upstream(S,G) state machine described in Section 4.5.7.The upstream (S,G) Join/Prune Timer is used to send out periodicJoin(S,G) messages, and to override Prune(S,G) messages from peers on anupstream LAN interface.Fenner/Handley/Holbrook/Kouvelas               Section 4.1.4.  [Page 19]INTERNET-DRAFT             Expires: April 2005              October 2004The last RPF neighbor towards S is stored because if the MRIB changesthen the RPF neighbor towards S may change.  If it does so, then we needto trigger a new Join(S,G) to the new upstream neighbor and a Prune(S,G)to the old upstream neighbor.  Similarly, if the router detects througha changed GenID in a Hello message that the upstream neighbor towards Shas rebooted, then it should re-instantiate state by sending aJoin(S,G).  These mechanisms are specified in Section 4.5.7.The SPTbit is used to indicate whether forwarding is taking place on the(S,G) Shortest Path Tree (SPT) or on the (*,G) tree.  A router can have(S,G) state and still be forwarding on (*,G) state during the intervalwhen the source-specific tree is being constructed.  When SPTbit isFALSE, only (*,G) forwarding state is used to forward packets from S toG.  When SPTbit is TRUE, both (*,G) and (S,G) forwarding state are used.The (S,G) Keepalive Timer is updated by data being forwarded using this(S,G) forwarding state.  It is used to keep (S,G) state alive in theabsence of explicit (S,G) Joins.  Amongst other things, this isnecessary for the so-called "turnaround rules" - when the RP uses (S,G)joins to stop encapsulation, and then (S,G) prunes to prevent trafficfrom unnecessarily reaching the RP.On a DR, the (S,G) Register State is used to keep track of whether toencapsulate data to the RP on the Register Tunnel; the (S,G) Register-Stop timer tracks how long before encapsulation begins again for a given(S,G).On an RP, the PMBR value must be cleared when the Keepalive Timerexpires.4.1.5.  (S,G,rpt) StateFor every source/group pair (S,G) for which a router also has (*,G)state, it also keeps the following state:     (S,G,rpt) state:          For each interface:               Local Membership:                    State: One of {"NoInfo", "Exclude"}               PIM (S,G,rpt) Join/Prune State:                    o State: One of {"NoInfo", "Pruned", "Prune-                      Pending"}Fenner/Handley/Holbrook/Kouvelas               Section 4.1.5.  [Page 20]INTERNET-DRAFT             Expires: April 2005              October 2004                    o Prune-Pending Timer (PPT)                    o Join/Prune Expiry Timer (ET)          Not interface specific:               Upstream (S,G,rpt) Join/Prune State:                    o State: One of {"RPTNotJoined(G)",                      "NotPruned(S,G,rpt)", "Pruned(S,G,rpt)"}                    o Override Timer (OT)Local membership is the result of the local source-specific membershipmechanism (such as IGMPv3) running on that interface and specifying thatalthough there is (*,G) Include state, this particular source should beexcluded.  As stored here, this state is the resulting state after anyIGMPv3 inconsistencies between LAN members have been resolved.  It neednot be kept if this router is not the DR on that interface unless thisrouter won a (*,G) assert on this interface for this group.  However, werecommend storing this information if possible, as it reduces latencyconverging to stable operating conditions after a failure causing achange of DR.  This information is used by the pim_exclude(S,G) macrodescribed in Section 4.1.6.PIM (S,G,rpt) Join/Prune state is the result of receiving PIM (S,G,rpt)Join/Prune messages on this interface, and is specified in Section4.5.4. The state is used by the macros that calculate the outgoinginterface list in Section 4.1.6, and in the rules for addingPrune(S,G,rpt) messages to Join(*,G) messages specified in Section4.5.8.The upstream (S,G,rpt) Join/Prune state is used along with the OverrideTimer to send the correct override messages in response to Join/Prunemessages sent by upstream peers on a LAN.  This state and behavior arespecified in Section 4.5.9.4.1.6.  State Summarization MacrosUsing this state, we define the following "macro" definitions which wewill use in the descriptions of the state machines and pseudocode in thefollowing sections.The most important macros are those that define the outgoing interfacelist (or "olist") for the relevant state.  An olist can be "immediate"if it is built directly from the state of the relevant type.  Forexample, the immediate_olist(S,G) is the olist that would be built ifthe router only had (S,G) state and no (*,G) or (S,G,rpt) state.  InFenner/Handley/Holbrook/Kouvelas               Section 4.1.6.  [Page 21]INTERNET-DRAFT             Expires: April 2005              October 2004contrast, the "inherited" olist inherits state from other types.  Forexample, the inherited_olist(S,G) is the olist that is relevant forforwarding a packet from S to G using both source-specific and group-specific state.There is no immediate_olist(S,G,rpt) as (S,G,rpt) state is negativestate - it removes interfaces in the (*,G) olist from the olist that isactually used to forward traffic.  The inherited_olist(S,G,rpt) istherefore the olist that would be used for a packet from S to Gforwarding on the RP tree.  It is a strict subset of(immediate_olist(*,*,RP) (+) immediate_olist(*,G)).Generally speaking, the inherited olists are used for forwarding, andthe immediate_olists are used to make decisions about state maintenance.immediate_olist(*,*,RP) =    joins(*,*,RP)immediate_olist(*,G) =    joins(*,G) (+) pim_include(*,G) (-) lost_assert(*,G)immediate_olist(S,G) =    joins(S,G) (+) pim_include(S,G) (-) lost_assert(S,G)inherited_olist(S,G,rpt) =        ( joins(*,*,RP(G)) (+) joins(*,G) (-) prunes(S,G,rpt) )    (+) ( pim_include(*,G) (-) pim_exclude(S,G))    (-) ( lost_assert(*,G) (+) lost_assert(S,G,rpt) )inherited_olist(S,G) =                                                   |    inherited_olist(S,G,rpt) (+)                                         |    joins(S,G) (+) pim_include(S,G) (-) lost_assert(S,G)The macros pim_include(*,G) and pim_include(S,G) indicate the interfacesto which traffic might be forwarded because of hosts that are localmembers on that interface.  Note that normally only the DR cares aboutlocal membership, but when an assert happens, the assert winner takesover responsibility for forwarding traffic to local members that haverequested traffic on a group or source/group pair.pim_include(*,G) =   { all interfaces I such that:     ( ( I_am_DR( I ) AND lost_assert(*,G,I) == FALSE )       OR AssertWinner(*,G,I) == me )     AND  local_receiver_include(*,G,I) }pim_include(S,G) =Fenner/Handley/Holbrook/Kouvelas               Section 4.1.6.  [Page 22]INTERNET-DRAFT             Expires: April 2005              October 2004    { all interfaces I such that:      ( (I_am_DR( I ) AND lost_assert(S,G,I) == FALSE )        OR AssertWinner(S,G,I) == me )       AND  local_receiver_include(S,G,I) }pim_exclude(S,G) =    { all interfaces I such that:                                        |      ( (I_am_DR( I ) AND lost_assert(*,G,I) == FALSE )                  |        OR AssertWinner(*,G,I) == me )                                   |       AND  local_receiver_exclude(S,G,I) }The clause "local_receiver_include(S,G,I)" is true if the IGMP/MLDmodule or other local membership mechanism has determined that local     |members on interface I desire to receive traffic sent specifically by Sto G.  "local_receiver_include(*,G,I)" is true if the IGMP/MLD module orother local membership mechanism has determined that local members on    |interface I desire to receive all traffic sent to G (possibly excluding  |traffic from a specific set of sources).  "local_receiver_exclude(S,G,I) |is true if "local_receiver_include(*,G,I)" is true but none of the localmembers desire to receive traffic from S.The set "joins(*,*,RP)" is the set of all interfaces on which the routerhas received (*,*,RP) Joins:joins(*,*,RP) =    { all interfaces I such that      DownstreamJPState(*,*,RP,I) is either Join or          Prune-Pending }DownstreamJPState(*,*,RP,I) is the state of the finite state machine inSection 4.5.1.The set "joins(*,G)" is the set of all interfaces on which the routerhas received (*,G) Joins:joins(*,G) =    { all interfaces I such that      DownstreamJPState(*,G,I) is either Join or Prune-Pending }DownstreamJPState(*,G,I) is the state of the finite state machine inSection 4.5.2.The set "joins(S,G)" is the set of all interfaces on which the routerhas received (S,G) Joins:Fenner/Handley/Holbrook/Kouvelas               Section 4.1.6.  [Page 23]INTERNET-DRAFT             Expires: April 2005              October 2004joins(S,G) =    { all interfaces I such that      DownstreamJPState(S,G,I) is either Join or Prune-Pending }DownstreamJPState(S,G,I) is the state of the finite state machine inSection 4.5.3.The set "prunes(S,G,rpt)" is the set of all interfaces on which therouter has received (*,G) joins and (S,G,rpt) prunes.prunes(S,G,rpt) =    { all interfaces I such that      DownstreamJPState(S,G,rpt,I) is Prune or PruneTmp }DownstreamJPState(S,G,rpt,I) is the state of the finite state machine inSection 4.5.4.The set "lost_assert(*,G)" is the set of all interfaces on which therouter has received (*,G) joins but has lost a (*,G) assert.  The macrolost_assert(*,G,I) is defined in Section 4.6.5.lost_assert(*,G) =    { all interfaces I such that      lost_assert(*,G,I) == TRUE }The set "lost_assert(S,G,rpt)" is the set of all interfaces on which therouter has received (*,G) joins but has lost an (S,G) assert.  The macrolost_assert(S,G,rpt,I) is defined in Section 4.6.5.lost_assert(S,G,rpt) =    { all interfaces I such that      lost_assert(S,G,rpt,I) == TRUE }The set "lost_assert(S,G)" is the set of all interfaces on which therouter has received (S,G) joins but has lost an (S,G) assert.  The macrolost_assert(S,G,I) is defined in Section 4.6.5.lost_assert(S,G) =    { all interfaces I such that      lost_assert(S,G,I) == TRUE }The following pseudocode macro definitions are also used in many placesin the specification.  Basically RPF' is the RPF neighbor towards an RPor source unless a PIM-Assert has overridden the normal choice ofneighbor.Fenner/Handley/Holbrook/Kouvelas               Section 4.1.6.  [Page 24]INTERNET-DRAFT             Expires: April 2005              October 2004  neighbor RPF'(*,G) {      if ( I_Am_Assert_Loser(*, G, RPF_interface(RP(G))) ) {           return AssertWinner(*, G, RPF_interface(RP(G)) )      } else {           return NBR( RPF_interface(RP(G)), MRIB.next_hop( RP(G) ) )      }  }  neighbor RPF'(S,G,rpt) {      if( I_Am_Assert_Loser(S, G, RPF_interface(RP(G)) ) ) {           return AssertWinner(S, G, RPF_interface(RP(G)) )      } else {           return RPF'(*,G)      }  }  neighbor RPF'(S,G) {      if ( I_Am_Assert_Loser(S, G, RPF_interface(S) )) {           return AssertWinner(S, G, RPF_interface(S) )      } else {           return NBR( RPF_interface(S), MRIB.next_hop( S ) )      }  }RPF'(*,G) and RPF'(S,G) indicate the neighbor from which data packetsshould be coming and to which joins should be sent on the RP tree andSPT respectively.RPF'(S,G,rpt) is basically RPF'(*,G) modified by the result of anAssert(S,G) on RPF_interface(RP(G)).  In such a case, packets from Swill be originating from a different router than RPF'(*,G).  If we onlyhave active (*,G) Join state, we need to accept packets fromRPF'(S,G,rpt), and add a Prune(S,G,rpt) to the periodic Join(*,G)messages that we send to RPF'(*,G) (See Section 4.5.8).

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -