Logic table derived from PurgeChange.logic

Variables

  1. isEgress
    "MPS is acting as a gateway, so next hop is not necessarily same as shortcut destination. Shortcut next hop is an IP address on the MPS/NHS. [per cache entry]"
  2. MPOA-NH
    "Whether CIP has been associated with the reply, i.e.shortcut destination is an MPC. [per cache entry]"
  3. dest-type
    "where the next hop is with respect to the IP interfaces of the NHS/MPS.nonAuth implies a non-authoritative reply has been issued from the NHRP cache. so is necessarily remote too. (egress implies remote)? [no, NBMA-ID change is example where dest can be local/subnet] [per cache entry]"
  4. Change
    "The type of indication of the change.
    + Route change [Dest/Mask]: oldNHIP -> newNHIP
    + MPC change [Elan+MAC]: oldMPC ATM -> new MPC ATM
    + ARP change [IP] oldMAC->newMAC (subnet implied by IP)
    + Registration (NHRP) [IP] oldNBMA->newNBMA
    + Port failure [IP] ifOper=down, llc_read fail? (Should we handle this, or have it translate to route changes?)
    + Neighbour change [MPC-ATM] (An existing MPC changes device type, to MPS)
    + Egress device sent a purge for some reason [SrcIP,cie.DestIP,cie.mask]:dataATM->null
    (For NHRP SrcIP==NHCIP, for MPOA SrcIP==MPSIP(of router i/f on elan)
    + other device sent a purge for some reason [SrcIP,cie.DestIP,cie.mask]:dataATM->null
    (is different case, but how is it distinguished?)
    + Configuration/Policy change (e.g. security) [???]"

Outcomes

  1. reality
    "Indicates whether this case can actually happen due to dependencies between the variables."
  2. SeeRouteChange
    "A poll or active indication from routing subsystem that the existing IP/Mask -> next hop is no longer valid
    SeeRouteChange(dest,mask,was_via)}
    "
  3. Context
    "How the change is identified to the MPS/NHS
    + RouteChange from routing subsystem (poll or message) also I/F fail?
    + RequestPlus i.e. during resolution request processing, le_arp, arp etc, and also asynchronous le_arp invalidation
    + Registration (upon receipt of NHRP registration pkt)
    + Purge (upon receipt of a purge pkt)"
  4. pg-path
    "Purges destinations that were routed through existing next hop implying reply history match of next hop IP and old route next hop AND the masked compare using the old route mask gives equality of reply's destination and the old route dest AND there is no other route using the same next hop with a more specific mask. (Refer to day book 16/4/97 for sample config)
    pg-path(RouteDestIP, oldNH){
      For all History in ReplyHistoryTable
      if ( (History.NHIP == oldNH) && 
         (History.mask & RouteDestIP) == (History.mask & History.targetIP)) {
              lookup(History.dest)=>[new.NHIP, new.PrefixLen] ;
              if ( (new.NHIP = oldNH) && 
                   (new.PrefixLen > History.PrefixLen)  {
                   do_nothing();
              } else {
                   send_purge ( History.{target, prefixLen, ...})
              }
      } else {
        do_nothing();
      }
    }
    "
  5. pg-MAC
    "Purges all MPOA reply history records with shortcut set up set to this MAC on this ELAN.
    RH.MAC == MAC && RH.ifIndex == ifIndex(ELAN)
    pg-MAC(MAC,ELAN) {
    	// alternate implementation using assumption that MAC unique in subnet
    	for all ARP records in ELAN
    		if arp.MAC == MAC
    			pg-IP(arp.IP)   // problem with Multicast IPs?
    }
    "
  6. pg-IP
    "Purge all replies with Next Hop IP equal original IP, or IP with changed ATM.
    pg-IP (IP) {
    	for all in RH table
    		if RH.nextHopIp == IP	
    			purge RH
    }
    "
  7. pg-MskegressIP
    "Purge all replies for which MPS/NHS is egress, with egress IP address equal to the original route's IP or the IP with the changed ATM address masked with the the mask of the subnet on which the MPS has an interface. (IP = egressMPS.IP's interface)
    (RH.nextHopIp & mask(IP.ifIndex)) == (IP & mask(IP.ifIndex)))
    pg-MskegressIP(EIP) {
    	lookup(IpAddrTable, EIP) [using masked compare ipAdEntNetMask] => Lmask
    	for all RH in ReplyHistoryTable
    		if ((RH.nextHopIp & Lmask == (EIP & mask(RH.ifIndex))) && RH.isEgress)
    			send_purge(RH)
    
    }
    "
  8. pg-NBMA
    "Purges based on match of final destination protocol address, and an ATM address that was previously used in the reply.
    pg-NBMA (DestIP, Prefix, NBMA) {// also have sourceIP of either NHC or MPS
        for all RH in ReplyHistoryTable
            if (DestIP == RH.DestIP)&& (NBMA==RH.NBMA)&&(Prefix>RH.prefix)
                 purge(RH)
    }
    // should it be ::-
    //if (DestIP/prefix == RH.DestIP/prefix)&&(NBMA==RH.NBMA)&&(Prefix>RH.prefix)
    
    "

Rules

  1. "Notification of route changes"
    Conditions
    Outcomes
  2. "Notification of route changes (default). Don't know what happens with a port fail, as may or may not get detection by routing system."
    Conditions
    Outcomes
  3. "For destinations local to NHS/MPS, it must be the egress"
    Conditions
    Outcomes
  4. "MPOA subnets require imposition. [could this change if subnet type changes?]"
    Conditions
    Outcomes
  5. "MPOA subnets require imposition. [could this change if subnet type changes?]"
    Conditions
    Outcomes
  6. "MPOA subnets require IP-ARP. [could this change if subnet type changes?]"
    Conditions
    Outcomes
  7. "NHRP subnets require registration [could this change if subnet type changes?]"
    Conditions
    Outcomes
  8. "Local knowledge is authoritative"
    Conditions
    Outcomes
  9. "MAC changes can 'always' be converted to use NH-IP. pg-IP(invArp(MAC,ELAN))"
    Conditions
    Outcomes
  10. "Egress point changed.
    pg-path(dest,was_via) -- note that lost mask!"
    Conditions
    Outcomes
  11. "Egress shuts down [Note: need to match control address of E-MPC/E-NHC to reply history, else cache entries purged on different(new) egress point]
    pg-IP (cie.DestIP)
    
    "
    Conditions
    Outcomes
  12. "LANE bridging change
    	pg-MAC(ELAN,MAC)	// have old and new MPC-Data ATM addresses too?
    
    "
    Conditions
    Outcomes
  13. "LANE bridging change, ARP change (unlikely?)
    	pg-MAC(ELAN(IP),oldMAC)
    
    "
    Conditions
    Outcomes
  14. "Device ATM address changes (unlikely?)
    	NHRP_Registration_change(IP, oldNBMA, newNBMA) {
    		pg-IP(IP)
    	}
    
    "
    Conditions
    Outcomes
  15. "lose local ATM I/F. In NHRP no requirement to purge, but MPOA equivalent of MPC losing keep-alive. Addresses purged are all those with IP on subnet. [Not sure if this should be sent or not, Keep-alive mechanism may be enough! [problem that can't send any purges anyway?] [What happens with NBMA differences, where NHS/MPS is egressing?]
    port_fail(IP) {
    	pg-MskegressIP(IP)
    }
    
    "
    Conditions
    Outcomes
  16. "Lose other I/F
    port_fail(IP) {
    	pg-MskegressIP(IP)
    }
    
    "
    Conditions
    Outcomes
  17. "NHC/MPC purge.
    purge_packet(CIE_IP, CIE_Prefix, CIE_NBMA) {
    		pg-NBMA(CIE_IP, CIE_Prefix, CIE_NBMA)
    }
    
    "
    Conditions
    Outcomes
  18. "Context for changes"
    Conditions
    Outcomes
  19. "Context for changes"
    Conditions
    Outcomes
  20. "Context for changes"
    Conditions
    Outcomes
  21. "Context for changes"
    Conditions
    Outcomes
  22. "Context for changes (sililar to route change at least)"
    Conditions
    Outcomes
  23. "Context for changes"
    Conditions
    Outcomes
  24. "Context for changes"
    Conditions
    Outcomes

Variables Summary Table

Summary table of variables and outcomes table derived from PurgeChange.logic
isEgress MPOA-NH dest-type Change
notEgress CIP local route
egress noCIP subnet MPC
- - remote ARP
- - nonAuth Register
- - - PortFail
- - - Neighbour
- - - RecvPurge
- - - -

Outcomes Summary Table

Summary table of variables and outcomes table derived from PurgeChange.logic
reality SeeRouteChange Context pg-path pg-MAC pg-IP pg-MskegressIP pg-NBMA
possible SeeRouteChange RouteChange purgePath purgeMAC purgeNHIP pg-EgressIPSub pg-NBMA
impossible none RequestPlus none none none none none
- - Register - - - - -
- - Purge - - - - -
- - - - - - - -

Logic Table

Logic table derived from PurgeChange.logic
isEgress MPOA-NH dest-type Change reality SeeRouteChange Context pg-path pg-MAC pg-IP pg-MskegressIP pg-NBMA Rules
notEgress CIP local route impossible SeeRouteChange RouteChange - - - - - 1,3,18,#0
notEgress CIP local MPC impossible none RequestPlus - - - - - 2,3,19,#1
notEgress CIP local ARP impossible none RequestPlus - - - - - 2,3,20,#2
notEgress CIP local Register impossible none Register - - - - - 2,3,21,#3
notEgress CIP local PortFail impossible - RouteChange - - - - - 3,22,#4
notEgress CIP local Neighbour impossible none RequestPlus - - - - - 2,3,23,#5
notEgress CIP local RecvPurge impossible none Purge - - - - - 2,3,24,#6
notEgress CIP subnet route - SeeRouteChange RouteChange purgePath - - - - 1,10,18,#7
notEgress CIP subnet MPC - none RequestPlus - purgeMAC purgeNHIP - - 2,9,12,19,#8
notEgress CIP subnet ARP - none RequestPlus - purgeMAC purgeNHIP - - 2,9,13,20,#9
notEgress CIP subnet Register impossible none Register - - - - - 2,7,21,#10
notEgress CIP subnet PortFail - - RouteChange - - - pg-EgressIPSub - 15,22,#11
notEgress CIP subnet Neighbour - none RequestPlus - - - - - 2,23,#12
notEgress CIP subnet RecvPurge - none Purge - - purgeNHIP - pg-NBMA 2,11,17,24,#13
notEgress CIP remote route - SeeRouteChange RouteChange purgePath - - - - 1,10,18,#14
notEgress CIP remote MPC - none RequestPlus - purgeMAC purgeNHIP - - 2,9,12,19,#15
notEgress CIP remote ARP - none RequestPlus - purgeMAC purgeNHIP - - 2,9,13,20,#16
notEgress CIP remote Register impossible none Register - - - - - 2,7,21,#17
notEgress CIP remote PortFail - - RouteChange - - - pg-EgressIPSub - 15,22,#18
notEgress CIP remote Neighbour - none RequestPlus - - - - - 2,23,#19
notEgress CIP remote RecvPurge - none Purge - - purgeNHIP - pg-NBMA 2,11,17,24,#20
notEgress CIP nonAuth route - SeeRouteChange RouteChange purgePath - - - - 1,10,18,#21
notEgress CIP nonAuth MPC - none RequestPlus - purgeMAC purgeNHIP - - 2,9,12,19,#22
notEgress CIP nonAuth ARP - none RequestPlus - purgeMAC purgeNHIP - - 2,9,13,20,#23
notEgress CIP nonAuth Register impossible none Register - - - - - 2,7,21,#24
notEgress CIP nonAuth PortFail - - RouteChange - - - pg-EgressIPSub - 15,22,#25
notEgress CIP nonAuth Neighbour - none RequestPlus - - - - - 2,23,#26
notEgress CIP nonAuth RecvPurge - none Purge - - purgeNHIP - pg-NBMA 2,11,17,24,#27
notEgress noCIP local route impossible SeeRouteChange RouteChange - - - - - 1,3,18,#28
notEgress noCIP local MPC impossible none RequestPlus - - - - - 2,3,19,#29
notEgress noCIP local ARP impossible none RequestPlus - - - - - 2,3,20,#30
notEgress noCIP local Register impossible none Register - - - - - 2,3,21,#31
notEgress noCIP local PortFail impossible - RouteChange - - - - - 3,22,#32
notEgress noCIP local Neighbour impossible none RequestPlus - - - - - 2,3,23,#33
notEgress noCIP local RecvPurge impossible none Purge - - - - - 2,3,24,#34
notEgress noCIP subnet route - SeeRouteChange RouteChange purgePath - - - - 1,10,18,#35
notEgress noCIP subnet MPC impossible none RequestPlus - - - - - 2,4,19,#36
notEgress noCIP subnet ARP impossible none RequestPlus - - - - - 2,6,20,#37
notEgress noCIP subnet Register - none Register - - purgeNHIP - - 2,14,21,#38
notEgress noCIP subnet PortFail - - RouteChange - - - - - 22,#39
notEgress noCIP subnet Neighbour impossible none RequestPlus - - - - - 2,5,23,#40
notEgress noCIP subnet RecvPurge - none Purge - - purgeNHIP - pg-NBMA 2,11,17,24,#41
notEgress noCIP remote route - SeeRouteChange RouteChange purgePath - - - - 1,10,18,#42
notEgress noCIP remote MPC impossible none RequestPlus - - - - - 2,4,19,#43
notEgress noCIP remote ARP impossible none RequestPlus - - - - - 2,6,20,#44
notEgress noCIP remote Register - none Register - - purgeNHIP - - 2,14,21,#45
notEgress noCIP remote PortFail - - RouteChange - - - - - 22,#46
notEgress noCIP remote Neighbour impossible none RequestPlus - - - - - 2,5,23,#47
notEgress noCIP remote RecvPurge - none Purge - - purgeNHIP - pg-NBMA 2,11,17,24,#48
notEgress noCIP nonAuth route - SeeRouteChange RouteChange purgePath - - - - 1,10,18,#49
notEgress noCIP nonAuth MPC impossible none RequestPlus - - - - - 2,4,19,#50
notEgress noCIP nonAuth ARP impossible none RequestPlus - - - - - 2,6,20,#51
notEgress noCIP nonAuth Register - none Register - - purgeNHIP - - 2,14,21,#52
notEgress noCIP nonAuth PortFail - - RouteChange - - - - - 22,#53
notEgress noCIP nonAuth Neighbour impossible none RequestPlus - - - - - 2,5,23,#54
notEgress noCIP nonAuth RecvPurge - none Purge - - purgeNHIP - pg-NBMA 2,11,17,24,#55
egress CIP local route - SeeRouteChange RouteChange purgePath - - - - 1,10,18,#56
egress CIP local MPC - none RequestPlus - purgeMAC purgeNHIP - - 2,9,12,19,#57
egress CIP local ARP - none RequestPlus - purgeMAC purgeNHIP - - 2,9,13,20,#58
egress CIP local Register impossible none Register - - - - - 2,7,21,#59
egress CIP local PortFail - - RouteChange - - - pg-EgressIPSub - 16,22,#60
egress CIP local Neighbour - none RequestPlus - - - - - 2,23,#61
egress CIP local RecvPurge - none Purge - - purgeNHIP - pg-NBMA 2,11,17,24,#62
egress CIP subnet route - SeeRouteChange RouteChange purgePath - - - - 1,10,18,#63
egress CIP subnet MPC - none RequestPlus - purgeMAC purgeNHIP - - 2,9,12,19,#64
egress CIP subnet ARP - none RequestPlus - purgeMAC purgeNHIP - - 2,9,13,20,#65
egress CIP subnet Register impossible none Register - - - - - 2,7,21,#66
egress CIP subnet PortFail - - RouteChange - - - pg-EgressIPSub - 16,22,#67
egress CIP subnet Neighbour - none RequestPlus - - - - - 2,23,#68
egress CIP subnet RecvPurge - none Purge - - purgeNHIP - pg-NBMA 2,11,17,24,#69
egress CIP remote route - SeeRouteChange RouteChange purgePath - - - - 1,10,18,#70
egress CIP remote MPC - none RequestPlus - purgeMAC purgeNHIP - - 2,9,12,19,#71
egress CIP remote ARP - none RequestPlus - purgeMAC purgeNHIP - - 2,9,13,20,#72
egress CIP remote Register impossible none Register - - - - - 2,7,21,#73
egress CIP remote PortFail - - RouteChange - - - pg-EgressIPSub - 16,22,#74
egress CIP remote Neighbour - none RequestPlus - - - - - 2,23,#75
egress CIP remote RecvPurge - none Purge - - purgeNHIP - pg-NBMA 2,11,17,24,#76
egress CIP nonAuth route impossible SeeRouteChange RouteChange - - - - - 1,8,18,#77
egress CIP nonAuth MPC impossible none RequestPlus - - - - - 2,8,19,#78
egress CIP nonAuth ARP impossible none RequestPlus - - - - - 2,8,20,#79
egress CIP nonAuth Register impossible none Register - - - - - 2,7,21,#80
egress CIP nonAuth PortFail impossible - RouteChange - - - - - 8,22,#81
egress CIP nonAuth Neighbour impossible none RequestPlus - - - - - 2,8,23,#82
egress CIP nonAuth RecvPurge impossible none Purge - - - - - 2,8,24,#83
egress noCIP local route - SeeRouteChange RouteChange purgePath - - - - 1,10,18,#84
egress noCIP local MPC impossible none RequestPlus - - - - - 2,4,19,#85
egress noCIP local ARP impossible none RequestPlus - - - - - 2,6,20,#86
egress noCIP local Register - none Register - - purgeNHIP - - 2,14,21,#87
egress noCIP local PortFail - - RouteChange - - - pg-EgressIPSub - 16,22,#88
egress noCIP local Neighbour impossible none RequestPlus - - - - - 2,5,23,#89
egress noCIP local RecvPurge - none Purge - - purgeNHIP - pg-NBMA 2,11,17,24,#90
egress noCIP subnet route - SeeRouteChange RouteChange purgePath - - - - 1,10,18,#91
egress noCIP subnet MPC impossible none RequestPlus - - - - - 2,4,19,#92
egress noCIP subnet ARP impossible none RequestPlus - - - - - 2,6,20,#93
egress noCIP subnet Register - none Register - - purgeNHIP - - 2,14,21,#94
egress noCIP subnet PortFail - - RouteChange - - - pg-EgressIPSub - 16,22,#95
egress noCIP subnet Neighbour impossible none RequestPlus - - - - - 2,5,23,#96
egress noCIP subnet RecvPurge - none Purge - - purgeNHIP - pg-NBMA 2,11,17,24,#97
egress noCIP remote route - SeeRouteChange RouteChange purgePath - - - - 1,10,18,#98
egress noCIP remote MPC impossible none RequestPlus - - - - - 2,4,19,#99
egress noCIP remote ARP impossible none RequestPlus - - - - - 2,6,20,#100
egress noCIP remote Register - none Register - - purgeNHIP - - 2,14,21,#101
egress noCIP remote PortFail - - RouteChange - - - pg-EgressIPSub - 16,22,#102
egress noCIP remote Neighbour impossible none RequestPlus - - - - - 2,5,23,#103
egress noCIP remote RecvPurge - none Purge - - purgeNHIP - pg-NBMA 2,11,17,24,#104
egress noCIP nonAuth route impossible SeeRouteChange RouteChange - - - - - 1,8,18,#105
egress noCIP nonAuth MPC impossible none RequestPlus - - - - - 2,4,19,#106
egress noCIP nonAuth ARP impossible none RequestPlus - - - - - 2,6,20,#107
egress noCIP nonAuth Register impossible none Register - - - - - 2,8,21,#108
egress noCIP nonAuth PortFail impossible - RouteChange - - - - - 8,22,#109
egress noCIP nonAuth Neighbour impossible none RequestPlus - - - - - 2,5,23,#110
egress noCIP nonAuth RecvPurge impossible none Purge - - - - - 2,8,24,#111