blob: 69ce1c91a366f38cbb7dc2703b0acf784c6ec191 [file] [log] [blame]
Neels Hofmeyr1971b672020-01-23 04:40:51 +01001digraph G {
2rankdir=TB
3labelloc=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}