blob: d74dc5d15e0a0039d8bff32a4b1e54998dca6e13 [file] [log] [blame]
Harald Weltef5d6fee2016-01-13 22:29:10 +01001#include <osmocom/core/utils.h>
2#include <osmocom/core/msgb.h>
3
4#include "diagcmd.h"
5#include "diag_gsm.h"
Harald Welte234b56b2016-12-23 23:44:19 +01006#include "protocol.h"
Harald Weltef5d6fee2016-01-13 22:29:10 +01007
8const struct value_string diag_gsm_rr_st_vals[] = {
9 { DIAG_RR_ST_INACTIVE, "INACTIVE" },
10 { DIAG_RR_ST_GOING_ACTIVE, "GOING_ACTIVE" },
11 { DIAG_RR_ST_GOING_INACTIVE, "GOING_INACTIVE" },
12 { DIAG_RR_ST_CELL_SELECTION, "CELL_SELECTION" },
13 { DIAG_RR_ST_PLMN_LIST_CONSTRUCTION, "PLMN_LIST_CONSTR" },
14 { DIAG_RR_ST_IDLE, "IDLE" },
15 { DIAG_RR_ST_CELL_RESELECTION, "CELL_RESELECTION" },
16 { DIAG_RR_ST_CONNECTION_PENDING, "CONNECTION_PENDING" },
17 { DIAG_RR_ST_CHOOSE_CELL, "CHOOSE_CELL" },
18 { DIAG_RR_ST_DATA_TRANSFER, "DATA_TRANSFER" },
19 { DIAG_RR_ST_NO_CHANNELS, "NO_CHANNELS" },
20 { DIAG_RR_ST_CONNECTION_RELEASE, "CONNECTION_RELEASE" },
21 { DIAG_RR_ST_EARLY_CAMPED_WAIT_FOR_SI, "EARLY_CAMPED_WAIT_SI" },
22 { DIAG_RR_ST_W2G_INTERRAT_HO_PROGRESS, "IRAT_W2G_HO_PROGRESS" },
23 { DIAG_RR_ST_W2G_INTERRAT_RESELECTION_PROGRESS, "IRAT_W2G_RESEL_PROGRESS" },
24 { DIAG_RR_ST_W2G_INTERRAT_CC_ORDER_PROGRESS, "IRAT_W2G_CC_ORDER_PROGRESS" },
25 { DIAG_RR_ST_G2W_INTERRAT_RESELECTION_PROGRESS, "IRAT_G2W_RESEL_PROGRESS" },
26 { DIAG_RR_ST_WAIT_FOR_EARLY_PSCAN, "WAIT_FOR_EARLY_PSCAN" },
27 { DIAG_RR_ST_GRR, "GRR" },
28 { DIAG_RR_ST_G2W_INTERRAT_HO_PROGRESS, "IRAT_G2W_HO_PROGRESS" },
29 { DIAG_RR_ST_BACKGROUND_PLMN_SEARCH, "BGROUND_PLMN_SEARCH" },
30 { DIAG_RR_ST_W2G_SERVICE_REDIR_IN_PROGRESS, "W2G_SERVICE_REDIR_PROGRESS" },
31 { DIAG_RR_ST_RESET, "RESET" },
32 { DIAG_RR_ST_W2G_BACKGROUND_PLN_SEARCH, "W2G_BGROUND_PLMN_SEARCH" },
33 { 0, NULL }
34};
35
36const struct value_string diag_gprs_grr_st_vals[] = {
37 { DIAG_GRR_ST_NULL, "NULL" },
38 { DIAG_GRR_ST_ACQUIRE, "ACQUIRE" },
39 { DIAG_GRR_ST_CAMPED, "CAMPED" },
40 { DIAG_GRR_ST_CONN_PEND, "CONN_PEND" },
41 { DIAG_GRR_ST_CELL_RESEL, "CELL_RESEL" },
42 { DIAG_GRR_ST_CELL_RESEL_G2W, "CELL_RESEL_G2W" },
43 { DIAG_GRR_ST_BG_PLMN_SEARCH, "BG_PLMNN_SEARCH" },
44 { DIAG_GRR_ST_PCCO, "PCCO" },
45 { 0, NULL }
46};
47
48const struct value_string diag_gprs_llme_st_vals[] = {
49 { DIAG_GPRS_LLMES_TLLI_UNASS, "TLLI_UNASSIGNED" },
50 { DIAG_GPRS_LLMES_TLLI_ASS, "TLLI_ASSIGNED" },
51 { DIAG_GPRS_LLMES_TEST_MODE, "TEST_MODE" },
52 { 0, NULL }
53};
54
55
56
57/* GSM_GPRS_LOG_PACKET_REQ_F */
58struct diag_gsm_log_packet_req {
59 uint16_t code;
60 uint8_t zero_stats;
61 uint8_t addl_info;
62} __attribute__((packed));
63
Harald Welte234b56b2016-12-23 23:44:19 +010064struct msgb *diag_gsm_make_log_pack_req(uint16_t log_code, uint8_t zero_stats, uint8_t addl_info)
Harald Weltef5d6fee2016-01-13 22:29:10 +010065{
66 struct msgb *msg = msgb_alloc_headroom(1024, 128, "GSM Log Packet Req");
67 struct diag_gsm_log_packet_req *glpr;
68
69 glpr = (struct diag_gsm_log_packet_req *) msgb_put(msg, sizeof(*glpr));
70 glpr->code = log_code;
71 glpr->zero_stats = zero_stats;
72 glpr->addl_info = addl_info;
73 diag_push_subsys_hdr(msg, DIAG_SUBSYS_GSM, GSM_GPRS_LOG_PACKET_REQ_F);
74
75 return msg;
76}