include k-nets.srl; # Kawaihiko nets include nz-nets.srl; # New Zealand nets (including Kawaihiko) optimise 3; # Over expressions and statements if SourcePeerType == IP save; else ignore; call net_group(SourcePeerAddress, FlowKind) 1: { # Kawaihiko call net_group(DestPeerAddress, DestKind) 1: # Kawaihiko store FlowKind := '*'; 2: # NZIX store FlowKind := 'Z'; 3: { # Not Kawaihiko if DestPeerAddress == (nz_nets) # Test the New Zealand nets store DestKind := '@'; optimise *; # Force break in cross-statement optimisation else if DestPeerAddress == 10.0/8 # Test net 10 on it's own store DestKind := '@'; else store DestKind := '?'; if DestKind == '@' { # LC letters for Kawaiahiko-NZ if FlowKind == 'A' store FlowKind := 'a'; else if FlowKind == 'T' store FlowKind := 't'; else if FlowKind == 'W' store FlowKind := 'w'; else if FlowKind == 'C' store FlowKind := 'c'; else if FlowKind == 'L' store FlowKind := 'l'; else if FlowKind == 'O' store FlowKind := 'o'; } } endcall; save SourcePeerAddress; save DestPeerAddress; save SourceTransType; save SourceTransAddress; save DestTransAddress; count; } endcall; if MatchingStoD == 1 nomatch; # We want Kawaihiko as source else { save SourcePeerAddress; save DestPeerAddress; save SourceTransType; save SourceTransAddress; save DestTransAddress; count; } subroutine net_group(ADDRESS peer, VARIABLE kind) if peer == (Auckland_B) save, { # Test the /16 nets first store kind := 'A'; return 1; } else if peer == (AIT_B) save, { store kind := 'T'; return 1; } else if peer == (Waikato_B) save, { store kind := 'W'; return 1; } else if peer == (Canterbury_B) save, { store kind := 'C'; return 1; } else if peer == (Lincoln_B) save, { store kind := 'L'; return 1; } else if peer == (Otago_B) save, { store kind := 'O'; return 1; } else if peer == (NZIX) save, { # Test the other Kawaihiko nets store kind := 'Z'; return 2; } else if # peer == (Auckland) || peer == (Auckland_N) save, { store kind := 'A'; return 1; } # else if peer == (AIT) || peer == (AIT_N) save, { # store kind := 'T'; return 1; # } else if peer == (Waikato) || peer == (Waikato_N) save, { store kind := 'W'; return 1; } else if peer == (Canterbury) || peer == (Canterbury_N) save, { store kind := 'C'; return 1; } else if peer == (Lincoln) || peer == (Lincoln_N) save, { store kind := 'L'; return 1; } else if peer == (Otago) || peer == (Otago_N) save, { store kind := 'O'; return 1; } else { # Not a Kawaihiko net save peer; store kind := '?'; return 3; } endsub; set 3; #format # SourceKind DestKind FlowKind " " # SourcePeerType SourcePeerAddress DestPeerAddress " " # SourceTransType SourceTransAddress DestTransAddress;