Neels Hofmeyr | 1971b67 | 2020-01-23 04:40:51 +0100 | [diff] [blame^] | 1 | digraph G { |
| 2 | rankdir=TB |
| 3 | labelloc=t; label="HLR Proxy to Home HLR FSM" |
| 4 | |
| 5 | top,to_top1,to_top2,to_top3,to_top4,to_top5[shape=invtriangle,label="(A)"] |
| 6 | top->junction_resolve_home_hlr |
| 7 | |
| 8 | at_clear,to_clear1,to_clear2 [shape=invtriangle,label="(X)"] |
| 9 | |
| 10 | mm_fsm [shape=box3d,label="Proxy MM FSM"] |
| 11 | mm_fsm -> junction_resolve_home_hlr [style=invisible,arrowhead=none] |
| 12 | |
| 13 | WAIT_HOME_HLR_RESOLVED [style=bold] |
| 14 | WAIT_UPDATE_LOCATION_RESULT [style=bold] |
| 15 | WAIT_SEND_AUTH_INFO_RESULT [style=bold] |
| 16 | IDLE [style=bold] |
| 17 | CLEAR [style=bold] |
| 18 | |
| 19 | new [label="proxy_cache_subscr_new()\n/ proxy_cache_subscr_from_db()",shape=box] |
| 20 | { |
| 21 | rank=same; |
| 22 | junction_resolve_home_hlr [shape=diamond,label="Home HLR\n known?"] |
| 23 | junction_confirm_home_hlr [shape=diamond,label="mslookup\n for home HLR\n very old?"] |
| 24 | junction_update_location [shape=diamond,label="Did MM FSM emit another\n HOME_EV_CONFIRM_LU?"] |
| 25 | junction_auth_info [shape=diamond,label="Auth tuple\ncache full of\nfresh tuples?"] |
| 26 | } |
| 27 | |
| 28 | new -> {junction_resolve_home_hlr, mm_fsm} |
| 29 | |
| 30 | junction_resolve_home_hlr -> junction_confirm_home_hlr [label="known"] |
| 31 | junction_resolve_home_hlr -> action_mslookup [label="wat"] |
| 32 | action_mslookup [shape=larrow,label="start mslookup"] |
| 33 | action_mslookup -> WAIT_HOME_HLR_RESOLVED |
| 34 | WAIT_HOME_HLR_RESOLVED -> rx_mslookup_res [arrowhead=none] |
| 35 | rx_mslookup_res [shape=rarrow,label="home HLR\n resolved"] |
| 36 | rx_mslookup_res -> to_top1 |
| 37 | WAIT_HOME_HLR_RESOLVED -> CLEAR [style=dashed,label=Timeout] |
| 38 | |
| 39 | junction_update_location -> action_lu_req [label="need data\n/\nneed to confirm LU"] |
| 40 | action_lu_req [shape=larrow,label="Tx GSUP Update Location Req\nto home HLR"] |
| 41 | action_lu_req -> WAIT_UPDATE_LOCATION_RESULT |
| 42 | WAIT_UPDATE_LOCATION_RESULT->rx_isd [arrowhead=none] |
| 43 | rx_isd [shape=rarrow,label="Rx GSUP\n Insert Subscriber\n Data Request\nfrom home HLR"] |
| 44 | rx_isd -> emit_rx_subscr_data |
| 45 | emit_rx_subscr_data [shape=lpromoter,label="emit\n MM_EV_RX_SUBSCR_DATA"] |
| 46 | emit_rx_subscr_data->action_tx_isd_res |
| 47 | action_tx_isd_res -> WAIT_UPDATE_LOCATION_RESULT |
| 48 | action_tx_isd_res [shape=larrow,label="Tx GSUP Insert Subscriber Data Result\nto home HLR"] |
| 49 | WAIT_UPDATE_LOCATION_RESULT -> rx_lu_res [arrowhead=none] |
| 50 | rx_lu_res [shape=rarrow,label="Rx GSUP Update\n Location Result\nfrom home HLR"] |
| 51 | rx_lu_res -> to_top2 |
| 52 | junction_update_location -> junction_auth_info [label="data known,\nLU confirmed"] |
| 53 | WAIT_UPDATE_LOCATION_RESULT->junction_lu_failed [label="Timeout "] |
| 54 | junction_lu_failed [shape=diamond,label="has home HLR\never confirmed\na LU before?"]; |
| 55 | junction_lu_failed -> to_clear2 [label="never\nconfirmed",style=dashed] |
| 56 | junction_lu_failed -> note_lu_failed [label="has\nconfirmed\nbefore"] |
| 57 | note_lu_failed [shape=note,label="Home HLR is\ntemporarily unreachable,\n just carry on."] |
| 58 | note_lu_failed -> to_top3 |
| 59 | |
| 60 | junction_confirm_home_hlr -> action_mslookup_confirm [label="very old"] |
| 61 | junction_confirm_home_hlr -> junction_update_location [label="fair enough"] |
| 62 | action_mslookup_confirm [shape=larrow,label="start mslookup"] |
| 63 | note_mslookup_confirm [shape=note,label="Result evaluated in IDLE state.\nIf no mslookup result comes\n back, the home HLR is\ntemporarily unreachable:\ncontinue anyway.\nThis is sanity checking for\na *modified* home HLR"] |
| 64 | action_mslookup_confirm -> note_mslookup_confirm [arrowhead=none,style=dotted] |
| 65 | action_mslookup_confirm -> junction_update_location |
| 66 | |
| 67 | junction_auth_info -> action_sai_req [label="need more tuples"] |
| 68 | junction_auth_info -> set_idle_timeout [label="cache is fresh"] |
| 69 | action_sai_req [shape=larrow,label="Tx GSUP\n Send Auth Info Request\n to home HLR"] |
| 70 | action_sai_req -> WAIT_SEND_AUTH_INFO_RESULT |
| 71 | WAIT_SEND_AUTH_INFO_RESULT->rx_sai_res[arrowhead=none] |
| 72 | rx_sai_res[shape=rarrow,label="Rx GSUP\n Send Auth Info\n Result\nfrom home HLR"] |
| 73 | rx_sai_res -> emit_rx_tuples |
| 74 | emit_rx_tuples [shape=lpromoter,label="emit\n MM_EV_RX_AUTH_TUPLES"] |
| 75 | emit_rx_tuples -> to_top4 |
| 76 | WAIT_SEND_AUTH_INFO_RESULT->set_idle_timeout[label="Timeout",style=dashed] |
| 77 | set_idle_timeout [shape=diamond,label="Select IDLE\n timeout:\nmin(\nretry tuples,\n confirm mslookup)"] |
| 78 | set_idle_timeout -> IDLE |
| 79 | |
| 80 | IDLE -> rx_mslookup_confirm_res [arrowhead=none] |
| 81 | rx_mslookup_confirm_res [shape=rarrow,label="Rx mslookup result"] |
| 82 | rx_mslookup_confirm_res -> junction_compare_home_hlr |
| 83 | junction_compare_home_hlr [shape=diamond,label="mslookup result\n matches home HLR\n on record?"] |
| 84 | junction_compare_home_hlr -> set_idle_timeout [label="matches"] |
| 85 | junction_compare_home_hlr -> to_clear1 [label="mismatch",style=dashed] |
| 86 | |
| 87 | IDLE -> to_top5 [label="Timeout"] |
| 88 | IDLE -> {rx_ev_check_tuples,rx_ev_confirm_lu} [arrowhead=none] |
| 89 | rx_ev_check_tuples [shape=rpromoter,label="receive\n HOME_EV_CHECK_TUPLES"] |
| 90 | rx_ev_confirm_lu [shape=rpromoter,label="receive\n HOME_EV_CONFIRM_LU"] |
| 91 | {rx_ev_check_tuples,rx_ev_confirm_lu} -> to_top5 |
| 92 | |
| 93 | at_clear -> CLEAR |
| 94 | CLEAR -> emit_subscr_invalid -> TERM |
| 95 | emit_subscr_invalid [shape=lpromoter,label="emit\n MM_EV_SUBSCR_INVALID"] |
| 96 | TERM[shape=octagon][style=bold] |
| 97 | } |