\doxysection{gsm\+\_\+04\+\_\+08\+\_\+gprs.\+h}
\label{gsm__04__08__gprs_8h_source}\index{include/osmocom/gsm/protocol/gsm\_04\_08\_gprs.h@{include/osmocom/gsm/protocol/gsm\_04\_08\_gprs.h}}
\textbf{ Go to the documentation of this file.}
\begin{DoxyCode}{0}
\DoxyCodeLine{1 }
\DoxyCodeLine{3 \textcolor{preprocessor}{\#pragma once}}
\DoxyCodeLine{4 }
\DoxyCodeLine{5 \textcolor{preprocessor}{\#include <stdint.h>}}
\DoxyCodeLine{6 \textcolor{preprocessor}{\#include <stdbool.h>}}
\DoxyCodeLine{7 \textcolor{preprocessor}{\#include <osmocom/gsm/protocol/gsm\_04\_08.h>}}
\DoxyCodeLine{8 \textcolor{preprocessor}{\#include <osmocom/crypt/gprs\_cipher.h>}}
\DoxyCodeLine{9 \textcolor{preprocessor}{\#include <osmocom/core/endian.h>}}
\DoxyCodeLine{10 }
\DoxyCodeLine{11 \textcolor{comment}{/* Table 10.4 / 10.4a, GPRS Mobility Management (GMM) */}}
\DoxyCodeLine{12 \textcolor{preprocessor}{\#define GSM48\_MT\_GMM\_ATTACH\_REQ         0x01}}
\DoxyCodeLine{13 \textcolor{preprocessor}{\#define GSM48\_MT\_GMM\_ATTACH\_ACK         0x02}}
\DoxyCodeLine{14 \textcolor{preprocessor}{\#define GSM48\_MT\_GMM\_ATTACH\_COMPL       0x03}}
\DoxyCodeLine{15 \textcolor{preprocessor}{\#define GSM48\_MT\_GMM\_ATTACH\_REJ         0x04}}
\DoxyCodeLine{16 \textcolor{preprocessor}{\#define GSM48\_MT\_GMM\_DETACH\_REQ         0x05}}
\DoxyCodeLine{17 \textcolor{preprocessor}{\#define GSM48\_MT\_GMM\_DETACH\_ACK         0x06}}
\DoxyCodeLine{18 }
\DoxyCodeLine{19 \textcolor{preprocessor}{\#define GSM48\_MT\_GMM\_RA\_UPD\_REQ         0x08}}
\DoxyCodeLine{20 \textcolor{preprocessor}{\#define GSM48\_MT\_GMM\_RA\_UPD\_ACK         0x09}}
\DoxyCodeLine{21 \textcolor{preprocessor}{\#define GSM48\_MT\_GMM\_RA\_UPD\_COMPL       0x0a}}
\DoxyCodeLine{22 \textcolor{preprocessor}{\#define GSM48\_MT\_GMM\_RA\_UPD\_REJ         0x0b}}
\DoxyCodeLine{23 }
\DoxyCodeLine{24 \textcolor{preprocessor}{\#define GSM48\_MT\_GMM\_PTMSI\_REALL\_CMD    0x10}}
\DoxyCodeLine{25 \textcolor{preprocessor}{\#define GSM48\_MT\_GMM\_PTMSI\_REALL\_COMPL  0x11}}
\DoxyCodeLine{26 \textcolor{preprocessor}{\#define GSM48\_MT\_GMM\_AUTH\_CIPH\_REQ      0x12}}
\DoxyCodeLine{27 \textcolor{preprocessor}{\#define GSM48\_MT\_GMM\_AUTH\_CIPH\_RESP     0x13}}
\DoxyCodeLine{28 \textcolor{preprocessor}{\#define GSM48\_MT\_GMM\_AUTH\_CIPH\_REJ      0x14}}
\DoxyCodeLine{29 \textcolor{preprocessor}{\#define GSM48\_MT\_GMM\_AUTH\_CIPH\_FAIL     0x1C}}
\DoxyCodeLine{30 \textcolor{preprocessor}{\#define GSM48\_MT\_GMM\_ID\_REQ             0x15}}
\DoxyCodeLine{31 \textcolor{preprocessor}{\#define GSM48\_MT\_GMM\_ID\_RESP            0x16}}
\DoxyCodeLine{32 \textcolor{preprocessor}{\#define GSM48\_MT\_GMM\_STATUS             0x20}}
\DoxyCodeLine{33 \textcolor{preprocessor}{\#define GSM48\_MT\_GMM\_INFO               0x21}}
\DoxyCodeLine{34 }
\DoxyCodeLine{35 \textcolor{comment}{/* Table 10.4a, GPRS Session Management (GSM) */}}
\DoxyCodeLine{36 \textcolor{preprocessor}{\#define GSM48\_MT\_GSM\_ACT\_PDP\_REQ        0x41}}
\DoxyCodeLine{37 \textcolor{preprocessor}{\#define GSM48\_MT\_GSM\_ACT\_PDP\_ACK        0x42}}
\DoxyCodeLine{38 \textcolor{preprocessor}{\#define GSM48\_MT\_GSM\_ACT\_PDP\_REJ        0x43}}
\DoxyCodeLine{39 \textcolor{preprocessor}{\#define GSM48\_MT\_GSM\_REQ\_PDP\_ACT        0x44}}
\DoxyCodeLine{40 \textcolor{preprocessor}{\#define GSM48\_MT\_GSM\_REQ\_PDP\_ACT\_REJ    0x45}}
\DoxyCodeLine{41 \textcolor{preprocessor}{\#define GSM48\_MT\_GSM\_DEACT\_PDP\_REQ      0x46}}
\DoxyCodeLine{42 \textcolor{preprocessor}{\#define GSM48\_MT\_GSM\_DEACT\_PDP\_ACK      0x47}}
\DoxyCodeLine{43 \textcolor{preprocessor}{\#define GSM48\_MT\_GSM\_ACT\_AA\_PDP\_REQ     0x50}}
\DoxyCodeLine{44 \textcolor{preprocessor}{\#define GSM48\_MT\_GSM\_ACT\_AA\_PDP\_ACK     0x51}}
\DoxyCodeLine{45 \textcolor{preprocessor}{\#define GSM48\_MT\_GSM\_ACT\_AA\_PDP\_REJ     0x52}}
\DoxyCodeLine{46 \textcolor{preprocessor}{\#define GSM48\_MT\_GSM\_DEACT\_AA\_PDP\_REQ   0x53}}
\DoxyCodeLine{47 \textcolor{preprocessor}{\#define GSM48\_MT\_GSM\_DEACT\_AA\_PDP\_ACK   0x54}}
\DoxyCodeLine{48 \textcolor{preprocessor}{\#define GSM48\_MT\_GSM\_STATUS             0x55}}
\DoxyCodeLine{49 }
\DoxyCodeLine{50 \textcolor{comment}{/* Chapter 10.5.5.2 / Table 10.5.135 */}}
\DoxyCodeLine{51 \textcolor{preprocessor}{\#define GPRS\_ATT\_T\_ATTACH               1}}
\DoxyCodeLine{52 \textcolor{preprocessor}{\#define GPRS\_ATT\_T\_ATT\_WHILE\_IMSI       2}}
\DoxyCodeLine{53 \textcolor{preprocessor}{\#define GPRS\_ATT\_T\_COMBINED             3}}
\DoxyCodeLine{54 }
\DoxyCodeLine{55 \textcolor{keyword}{extern} \textcolor{keyword}{const} \textcolor{keyword}{struct }value\_string *gprs\_att\_t\_strs;}
\DoxyCodeLine{56 \textcolor{keyword}{extern} \textcolor{keyword}{const} \textcolor{keyword}{struct }value\_string gprs\_msgt\_gmm\_names[];}
\DoxyCodeLine{57 }
\DoxyCodeLine{58 \textcolor{comment}{/* Chapter 10.5.5.5 / Table 10.5.138 */}}
\DoxyCodeLine{59 \textcolor{preprocessor}{\#define GPRS\_DET\_T\_MO\_GPRS              1}}
\DoxyCodeLine{60 \textcolor{preprocessor}{\#define GPRS\_DET\_T\_MO\_IMSI              2}}
\DoxyCodeLine{61 \textcolor{preprocessor}{\#define GPRS\_DET\_T\_MO\_COMBINED          3}}
\DoxyCodeLine{62 \textcolor{comment}{/* Network to MS direction */}}
\DoxyCodeLine{63 \textcolor{preprocessor}{\#define GPRS\_DET\_T\_MT\_REATT\_REQ         1}}
\DoxyCodeLine{64 \textcolor{preprocessor}{\#define GPRS\_DET\_T\_MT\_REATT\_NOTREQ      2}}
\DoxyCodeLine{65 \textcolor{preprocessor}{\#define GPRS\_DET\_T\_MT\_IMSI              3}}
\DoxyCodeLine{66 }
\DoxyCodeLine{67 \textcolor{keyword}{extern} \textcolor{keyword}{const} \textcolor{keyword}{struct }value\_string *gprs\_det\_t\_mo\_strs;}
\DoxyCodeLine{68 \textcolor{keyword}{extern} \textcolor{keyword}{const} \textcolor{keyword}{struct }value\_string *gprs\_det\_t\_mt\_strs;}
\DoxyCodeLine{69 }
\DoxyCodeLine{70 \textcolor{comment}{/* Chapter 10.5.5.18 / Table 105.150 */}}
\DoxyCodeLine{71 \textcolor{preprocessor}{\#define GPRS\_UPD\_T\_RA                   0}}
\DoxyCodeLine{72 \textcolor{preprocessor}{\#define GPRS\_UPD\_T\_RA\_LA                1}}
\DoxyCodeLine{73 \textcolor{preprocessor}{\#define GPRS\_UPD\_T\_RA\_LA\_IMSI\_ATT       2}}
\DoxyCodeLine{74 \textcolor{preprocessor}{\#define GPRS\_UPD\_T\_PERIODIC             3}}
\DoxyCodeLine{75 }
\DoxyCodeLine{76 \textcolor{keyword}{extern} \textcolor{keyword}{const} \textcolor{keyword}{struct }value\_string *gprs\_upd\_t\_strs;}
\DoxyCodeLine{77 }
\DoxyCodeLine{78 \textcolor{comment}{/* Table 10.4 in 3GPP TS 24.008 (successor to 04.08) */}}
\DoxyCodeLine{79 \textcolor{preprocessor}{\#define GSM48\_MT\_GMM\_SERVICE\_REQ        0x0c}}
\DoxyCodeLine{80 \textcolor{preprocessor}{\#define GSM48\_MT\_GMM\_SERVICE\_ACK        0x0d}}
\DoxyCodeLine{81 \textcolor{preprocessor}{\#define GSM48\_MT\_GMM\_SERVICE\_REJ        0x0e}}
\DoxyCodeLine{82 }
\DoxyCodeLine{83 \textcolor{keyword}{enum} gsm48\_gprs\_ie\_mm \{}
\DoxyCodeLine{84         GSM48\_IE\_GMM\_CIPH\_CKSN            = 0x08, \textcolor{comment}{/* 10.5.1.2 */}}
\DoxyCodeLine{85         GSM48\_IE\_GMM\_TMSI\_STATUS        = 0x09, \textcolor{comment}{/* 10.5.5.4 */}}
\DoxyCodeLine{86         GSM48\_IE\_GMM\_MS\_NET\_FEAT\_SUP        = 0x0c, \textcolor{comment}{/* 10.5.1.15 */}}
\DoxyCodeLine{87         GSM48\_IE\_GMM\_DEVICE\_PROP        = 0x0d, \textcolor{comment}{/* 10.5.7.8 */}}
\DoxyCodeLine{88         GSM48\_IE\_GMM\_PTMSI\_TYPE          = 0x0e, \textcolor{comment}{/* 10.5.5.29 */}}
\DoxyCodeLine{89         GSM48\_IE\_GMM\_ADD\_UPDATE\_TYPE        = 0x0f, \textcolor{comment}{/* 10.5.5.0 */}}
\DoxyCodeLine{90         GSM48\_IE\_GMM\_TMSI\_BASED\_NRI\_C      = 0x10, \textcolor{comment}{/* 10.5.5.31 */}}
\DoxyCodeLine{91         GSM48\_IE\_GMM\_MS\_CLASSMARK2    = 0x11, \textcolor{comment}{/* 10.5.1.6 */}}
\DoxyCodeLine{92         GSM48\_IE\_GMM\_OLD\_LAI                = 0x14, \textcolor{comment}{/* 10.5.5.30 */}}
\DoxyCodeLine{93         GSM48\_IE\_GMM\_TIMER\_READY        = 0x17, \textcolor{comment}{/* 10.5.7.3 */}}
\DoxyCodeLine{94         GSM48\_IE\_GMM\_ALLOC\_PTMSI        = 0x18, \textcolor{comment}{/* 10.5.1.4 */}}
\DoxyCodeLine{95         GSM48\_IE\_GMM\_PTMSI\_SIG            = 0x19, \textcolor{comment}{/* 10.5.5.8 */}}
\DoxyCodeLine{96         GSM48\_IE\_GMM\_ADD\_IDENTITY      = 0x1a, \textcolor{comment}{/* 10.5.1.4 */}}
\DoxyCodeLine{97         GSM48\_IE\_GMM\_RAI2              = 0x1b, \textcolor{comment}{/* 10.5.5.15a */}}
\DoxyCodeLine{98         GSM48\_IE\_GMM\_MS\_CLASSMARK3    = 0x20, \textcolor{comment}{/* 10.5.1.7 */}}
\DoxyCodeLine{99         GSM48\_IE\_GMM\_AUTH\_RAND            = 0x21, \textcolor{comment}{/* 10.5.3.1 */}}
\DoxyCodeLine{100         GSM48\_IE\_GMM\_AUTH\_SRES            = 0x22, \textcolor{comment}{/* 10.5.3.2 */}}
\DoxyCodeLine{101         GSM48\_IE\_GMM\_IMEISV          = 0x23, \textcolor{comment}{/* 10.5.1.4 */}}
\DoxyCodeLine{102         GSM48\_IE\_GMM\_CAUSE            = 0x25, \textcolor{comment}{/* 10.5.5.14 */}}
\DoxyCodeLine{103         GSM48\_IE\_GMM\_RX\_NPDU\_NUM\_LIST      = 0x26, \textcolor{comment}{/* 10.5.5.11 */}}
\DoxyCodeLine{104         GSM48\_IE\_GMM\_DRX\_PARAM            = 0x27, \textcolor{comment}{/* 10.5.5.6 */}}
\DoxyCodeLine{105         GSM48\_IE\_GMM\_AUTN              = 0x28, \textcolor{comment}{/* 10.5.3.1.1 */}}
\DoxyCodeLine{106         GSM48\_IE\_GMM\_AUTH\_RES\_EXT      = 0x29, \textcolor{comment}{/* 10.5.3.2.1 */}}
\DoxyCodeLine{107         GSM48\_IE\_GMM\_TIMER\_T3302        = 0x2A, \textcolor{comment}{/* 10.5.7.4 */}}
\DoxyCodeLine{108         GSM48\_IE\_GMM\_AUTH\_FAIL\_PAR    = 0x30, \textcolor{comment}{/* 10.5.3.2.2 */}}
\DoxyCodeLine{109         GSM48\_IE\_GMM\_MS\_NET\_CAPA        = 0x31, \textcolor{comment}{/* 10.5.5.12 */}}
\DoxyCodeLine{110         GSM48\_IE\_GMM\_PDP\_CTX\_STATUS  = 0x32, \textcolor{comment}{/* 10.5.7.1 */}}
\DoxyCodeLine{111         GSM48\_IE\_GMM\_PS\_LCS\_CAPA        = 0x33, \textcolor{comment}{/* 10.5.5.22 */}}
\DoxyCodeLine{112         GSM48\_IE\_GMM\_GMM\_MBMS\_CTX\_ST        = 0x35, \textcolor{comment}{/* 10.5.7.6 */}}
\DoxyCodeLine{113         GSM48\_IE\_GMM\_TIMER\_T3312\_EXT        = 0x39, \textcolor{comment}{/* 10.5.7.4a */}}
\DoxyCodeLine{114         GSM48\_IE\_GMM\_TIMER\_T3346        = 0x3A, \textcolor{comment}{/* 10.5.7.4 */}}
\DoxyCodeLine{115         GSM48\_IE\_GMM\_SUPP\_CODEC\_LIST        = 0x40, \textcolor{comment}{/* 10.5.4.32 */}}
\DoxyCodeLine{116         GSM48\_IE\_GMM\_UE\_NET\_CAP          = 0x58, \textcolor{comment}{/* 10.5.5.26 */}}
\DoxyCodeLine{117         GSM48\_IE\_GMM\_VD\_PREF\_UE\_USAGE      = 0x5d, \textcolor{comment}{/* 10.5.5.28 */}}
\DoxyCodeLine{118         GMM48\_IE\_GMM\_TIMER\_T3324        = 0x6a, \textcolor{comment}{/* 10.5.7.4 */}}
\DoxyCodeLine{119         GSM48\_IE\_GMM\_EXT\_DRX\_PARAMS  = 0x6e, \textcolor{comment}{/* 10.5.5.32 */}}
\DoxyCodeLine{120         GSM48\_IE\_GMM\_NET\_FEAT\_SUPPORT      = 0xB0, \textcolor{comment}{/* 10.5.5.23 */}}
\DoxyCodeLine{121 \};}
\DoxyCodeLine{122 }
\DoxyCodeLine{123 \textcolor{keyword}{enum} gsm48\_gprs\_ie\_sm \{}
\DoxyCodeLine{124         GSM48\_IE\_GSM\_RADIO\_PRIO          = 0x08, \textcolor{comment}{/* 10.5.7.2 */}}
\DoxyCodeLine{125         GSM48\_IE\_GSM\_DEV\_PROP              = 0x0C, \textcolor{comment}{/* 10.5.7.8 */}}
\DoxyCodeLine{126         GSM48\_IE\_GSM\_APN                = 0x28, \textcolor{comment}{/* 10.5.6.1 */}}
\DoxyCodeLine{127         GSM48\_IE\_GSM\_PROTO\_CONF\_OPT  = 0x27, \textcolor{comment}{/* 10.5.6.3 */}}
\DoxyCodeLine{128         GSM48\_IE\_GSM\_PDP\_ADDR              = 0x2b, \textcolor{comment}{/* 10.5.6.4 */}}
\DoxyCodeLine{129         GSM48\_IE\_GSM\_AA\_TMR          = 0x29, \textcolor{comment}{/* 10.5.7.3 */}}
\DoxyCodeLine{130         GSM48\_IE\_GSM\_QOS                = 0x30, \textcolor{comment}{/* 10.5.6.5 */}}
\DoxyCodeLine{131         GSM48\_IE\_GSM\_TFT                = 0x31, \textcolor{comment}{/* 10.5.6.12 */}}
\DoxyCodeLine{132         GSM48\_IE\_GSM\_LLC\_SAPI              = 0x32, \textcolor{comment}{/* 10.5.6.9 */}}
\DoxyCodeLine{133         GSM48\_IE\_GSM\_MBIFOM\_CONT        = 0x33, \textcolor{comment}{/* 10.5.6.21 */}}
\DoxyCodeLine{134         GSM48\_IE\_GSM\_PFI                = 0x34, \textcolor{comment}{/* 10.5.6.11 */}}
\DoxyCodeLine{135         GSM48\_IE\_GSM\_NAME\_FULL            = 0x43, \textcolor{comment}{/* 10.5.3.5a */}}
\DoxyCodeLine{136         GSM48\_IE\_GSM\_NAME\_SHORT          = 0x45, \textcolor{comment}{/* 10.5.3.5a */}}
\DoxyCodeLine{137         GSM48\_IE\_GSM\_TIMEZONE              = 0x46, \textcolor{comment}{/* 10.5.3.8 */}}
\DoxyCodeLine{138         GSM48\_IE\_GSM\_UTC\_AND\_TZ          = 0x47, \textcolor{comment}{/* 10.5.3.9 */}}
\DoxyCodeLine{139         GSM48\_IE\_GSM\_LSA\_ID          = 0x48, \textcolor{comment}{/* 10.5.3.11 */}}
\DoxyCodeLine{140         GSM48\_IE\_GSM\_EXT\_QOS                = 0x5C, \textcolor{comment}{/* 10.5.6.5B */}}
\DoxyCodeLine{141         GSM48\_IE\_GSM\_EXT\_PROTO\_CONF\_OPT  = 0x7B, \textcolor{comment}{/* 10.5.6.3a */}}
\DoxyCodeLine{142 }
\DoxyCodeLine{143         \textcolor{comment}{/* Fake IEs that are not present on the Layer3 air interface,}}
\DoxyCodeLine{144 \textcolor{comment}{         * but which we use to simplify internal APIs */}}
\DoxyCodeLine{145         OSMO\_IE\_GSM\_CHARG\_CHAR            = 0xfc,}
\DoxyCodeLine{146         OSMO\_IE\_GSM\_REQ\_QOS          = 0xfd,}
\DoxyCodeLine{147         OSMO\_IE\_GSM\_REQ\_PDP\_ADDR        = 0xfe,}
\DoxyCodeLine{148         OSMO\_IE\_GSM\_SUB\_QOS          = 0xff,}
\DoxyCodeLine{149 \};}
\DoxyCodeLine{150 }
\DoxyCodeLine{151 \textcolor{comment}{/* Chapter 9.4.15 / Table 9.4.15 */}}
\DoxyCodeLine{152 \textcolor{keyword}{struct }gsm48\_ra\_upd\_ack \{}
\DoxyCodeLine{153 \textcolor{preprocessor}{\#if OSMO\_IS\_LITTLE\_ENDIAN}}
\DoxyCodeLine{154         uint8\_t force\_stby:4,   \textcolor{comment}{/* 10.5.5.7 */}}
\DoxyCodeLine{155                  upd\_result:4;  \textcolor{comment}{/* 10.5.5.17 */}}
\DoxyCodeLine{156         uint8\_t ra\_upd\_timer;   \textcolor{comment}{/* 10.5.7.3 */}}
\DoxyCodeLine{157         \textcolor{keyword}{struct }gsm48\_ra\_id ra\_id; \textcolor{comment}{/* 10.5.5.15 */}}
\DoxyCodeLine{158         uint8\_t data[0];}
\DoxyCodeLine{159 \textcolor{preprocessor}{\#elif OSMO\_IS\_BIG\_ENDIAN}}
\DoxyCodeLine{160 \textcolor{comment}{/* auto-\/generated from the little endian part above (libosmocore/contrib/struct\_endianness.py) */}}
\DoxyCodeLine{161         uint8\_t upd\_result:4, force\_stby:4;}
\DoxyCodeLine{162         uint8\_t ra\_upd\_timer;}
\DoxyCodeLine{163         \textcolor{keyword}{struct }gsm48\_ra\_id ra\_id;}
\DoxyCodeLine{164         uint8\_t data[0];}
\DoxyCodeLine{165 \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{166 \} \_\_attribute\_\_((packed));}
\DoxyCodeLine{167 }
\DoxyCodeLine{168 \textcolor{comment}{/* Chapter 10.5.7.3 */}}
\DoxyCodeLine{169 \textcolor{keyword}{enum} gsm48\_gprs\_tmr\_unit \{}
\DoxyCodeLine{170         GPRS\_TMR\_2SECONDS      = 0 << 5,}
\DoxyCodeLine{171         GPRS\_TMR\_MINUTE          = 1 << 5,}
\DoxyCodeLine{172         GPRS\_TMR\_6MINUTE        = 2 << 5,}
\DoxyCodeLine{173         GPRS\_TMR\_DEACTIVATED        = 7 << 5,}
\DoxyCodeLine{174 \};}
\DoxyCodeLine{175 }
\DoxyCodeLine{176 \textcolor{preprocessor}{\#define GPRS\_TMR\_UNIT\_MASK (7 << 5)}}
\DoxyCodeLine{177 \textcolor{preprocessor}{\#define GPRS\_TMR\_FACT\_MASK ((1 << 5)-\/1)}}
\DoxyCodeLine{178 }
\DoxyCodeLine{179 \textcolor{comment}{/* Chapter 9.4.2 / Table 9.4.2 */}}
\DoxyCodeLine{180 \textcolor{keyword}{struct }gsm48\_attach\_ack \{}
\DoxyCodeLine{181 \textcolor{preprocessor}{\#if OSMO\_IS\_LITTLE\_ENDIAN}}
\DoxyCodeLine{182         uint8\_t att\_result:4,   \textcolor{comment}{/* 10.5.5.7 */}}
\DoxyCodeLine{183                  force\_stby:4;  \textcolor{comment}{/* 10.5.5.1 */}}
\DoxyCodeLine{184         uint8\_t ra\_upd\_timer;   \textcolor{comment}{/* 10.5.7.3 */}}
\DoxyCodeLine{185         uint8\_t radio\_prio;     \textcolor{comment}{/* 10.5.7.2 */}}
\DoxyCodeLine{186         \textcolor{keyword}{struct }gsm48\_ra\_id ra\_id; \textcolor{comment}{/* 10.5.5.15 */}}
\DoxyCodeLine{187         uint8\_t data[0];}
\DoxyCodeLine{188 \textcolor{preprocessor}{\#elif OSMO\_IS\_BIG\_ENDIAN}}
\DoxyCodeLine{189 \textcolor{comment}{/* auto-\/generated from the little endian part above (libosmocore/contrib/struct\_endianness.py) */}}
\DoxyCodeLine{190         uint8\_t force\_stby:4, att\_result:4;}
\DoxyCodeLine{191         uint8\_t ra\_upd\_timer;}
\DoxyCodeLine{192         uint8\_t radio\_prio;}
\DoxyCodeLine{193         \textcolor{keyword}{struct }gsm48\_ra\_id ra\_id;}
\DoxyCodeLine{194         uint8\_t data[0];}
\DoxyCodeLine{195 \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{196 \} \_\_attribute\_\_((packed));}
\DoxyCodeLine{197 }
\DoxyCodeLine{198 \textcolor{comment}{/* Chapter 9.4.9 / Table 9.4.9 */}}
\DoxyCodeLine{199 \textcolor{keyword}{struct }gsm48\_auth\_ciph\_req \{}
\DoxyCodeLine{200 \textcolor{preprocessor}{\#if OSMO\_IS\_LITTLE\_ENDIAN}}
\DoxyCodeLine{201         uint8\_t ciph\_alg:4,     \textcolor{comment}{/* 10.5.5.3 */}}
\DoxyCodeLine{202                 imeisv\_req:4;   \textcolor{comment}{/* 10.5.5.10 */}}
\DoxyCodeLine{203         uint8\_t force\_stby:4,   \textcolor{comment}{/* 10.5.5.7 */}}
\DoxyCodeLine{204                 ac\_ref\_nr:4;    \textcolor{comment}{/* 10.5.5.19 */}}
\DoxyCodeLine{205         uint8\_t data[0];}
\DoxyCodeLine{206 \textcolor{preprocessor}{\#elif OSMO\_IS\_BIG\_ENDIAN}}
\DoxyCodeLine{207 \textcolor{comment}{/* auto-\/generated from the little endian part above (libosmocore/contrib/struct\_endianness.py) */}}
\DoxyCodeLine{208         uint8\_t imeisv\_req:4, ciph\_alg:4;}
\DoxyCodeLine{209         uint8\_t ac\_ref\_nr:4, force\_stby:4;}
\DoxyCodeLine{210         uint8\_t data[0];}
\DoxyCodeLine{211 \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{212 \} \_\_attribute\_\_((packed));}
\DoxyCodeLine{213 \textcolor{comment}{/* optional: TV RAND, TV CKSN */}}
\DoxyCodeLine{214 }
\DoxyCodeLine{215 \textcolor{keyword}{struct }gsm48\_auth\_ciph\_resp \{}
\DoxyCodeLine{216 \textcolor{preprocessor}{\#if OSMO\_IS\_LITTLE\_ENDIAN}}
\DoxyCodeLine{217         uint8\_t ac\_ref\_nr:4,}
\DoxyCodeLine{218                 spare:4;}
\DoxyCodeLine{219         uint8\_t data[0];}
\DoxyCodeLine{220 \textcolor{preprocessor}{\#elif OSMO\_IS\_BIG\_ENDIAN}}
\DoxyCodeLine{221 \textcolor{comment}{/* auto-\/generated from the little endian part above (libosmocore/contrib/struct\_endianness.py) */}}
\DoxyCodeLine{222         uint8\_t spare:4, ac\_ref\_nr:4;}
\DoxyCodeLine{223         uint8\_t data[0];}
\DoxyCodeLine{224 \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{225 \} \_\_attribute\_\_((packed));}
\DoxyCodeLine{226 }
\DoxyCodeLine{227 \textcolor{comment}{/* Chapter 9.5.1 / Table 9.5.1 */}}
\DoxyCodeLine{228 \textcolor{keyword}{struct }gsm48\_act\_pdp\_ctx\_req \{}
\DoxyCodeLine{229         uint8\_t req\_nsapi;}
\DoxyCodeLine{230         uint8\_t req\_llc\_sapi;}
\DoxyCodeLine{231         uint8\_t data[0];}
\DoxyCodeLine{232 \} \_\_attribute\_\_((packed));}
\DoxyCodeLine{233 }
\DoxyCodeLine{234 \textcolor{comment}{/* Chapter 10.5.5.14 / Table 10.5.147 */}}
\DoxyCodeLine{235 \textcolor{keyword}{enum} gsm48\_gmm\_cause \{}
\DoxyCodeLine{236         GMM\_CAUSE\_IMSI\_UNKNOWN            = 0x02,}
\DoxyCodeLine{237         GMM\_CAUSE\_ILLEGAL\_MS                = 0x03,}
\DoxyCodeLine{238         GMM\_CAUSE\_IMEI\_NOT\_ACCEPTED  = 0x05,}
\DoxyCodeLine{239         GMM\_CAUSE\_ILLEGAL\_ME                = 0x06,}
\DoxyCodeLine{240         GMM\_CAUSE\_GPRS\_NOTALLOWED      = 0x07,}
\DoxyCodeLine{241         GMM\_CAUSE\_GPRS\_OTHER\_NOTALLOWED  = 0x08,}
\DoxyCodeLine{242         GMM\_CAUSE\_MS\_ID\_NOT\_DERIVED  = 0x09,}
\DoxyCodeLine{243         GMM\_CAUSE\_IMPL\_DETACHED          = 0x0a,}
\DoxyCodeLine{244         GMM\_CAUSE\_PLMN\_NOTALLOWED      = 0x0b,}
\DoxyCodeLine{245         GMM\_CAUSE\_LA\_NOTALLOWED          = 0x0c,}
\DoxyCodeLine{246         GMM\_CAUSE\_ROAMING\_NOTALLOWED        = 0x0d,}
\DoxyCodeLine{247         GMM\_CAUSE\_NO\_GPRS\_PLMN            = 0x0e,}
\DoxyCodeLine{248         GMM\_CAUSE\_NO\_SUIT\_CELL\_IN\_LA        = 0x0f,}
\DoxyCodeLine{249         GMM\_CAUSE\_MSC\_TEMP\_NOTREACH  = 0x10,}
\DoxyCodeLine{250         GMM\_CAUSE\_NET\_FAIL            = 0x11,}
\DoxyCodeLine{251         GMM\_CAUSE\_MAC\_FAIL            = 0x14,}
\DoxyCodeLine{252         GMM\_CAUSE\_SYNC\_FAIL          = 0x15,}
\DoxyCodeLine{253         GMM\_CAUSE\_CONGESTION                = 0x16,}
\DoxyCodeLine{254         GMM\_CAUSE\_GSM\_AUTH\_UNACCEPT  = 0x17,}
\DoxyCodeLine{255         GMM\_CAUSE\_NOT\_AUTH\_FOR\_CSG    = 0x19,}
\DoxyCodeLine{256         GMM\_CAUSE\_SMS\_VIA\_GPRS\_IN\_RA        = 0x1c,}
\DoxyCodeLine{257         GMM\_CAUSE\_NO\_PDP\_ACTIVATED    = 0x28,}
\DoxyCodeLine{258         GMM\_CAUSE\_SEM\_INCORR\_MSG        = 0x5f,}
\DoxyCodeLine{259         GMM\_CAUSE\_INV\_MAND\_INFO          = 0x60,}
\DoxyCodeLine{260         GMM\_CAUSE\_MSGT\_NOTEXIST\_NOTIMPL  = 0x61,}
\DoxyCodeLine{261         GMM\_CAUSE\_MSGT\_INCOMP\_P\_STATE      = 0x62,}
\DoxyCodeLine{262         GMM\_CAUSE\_IE\_NOTEXIST\_NOTIMPL      = 0x63,}
\DoxyCodeLine{263         GMM\_CAUSE\_COND\_IE\_ERR              = 0x64,}
\DoxyCodeLine{264         GMM\_CAUSE\_MSG\_INCOMP\_P\_STATE        = 0x65,}
\DoxyCodeLine{265         GMM\_CAUSE\_PROTO\_ERR\_UNSPEC    = 0x6f,}
\DoxyCodeLine{266 \};}
\DoxyCodeLine{267 }
\DoxyCodeLine{268 \textcolor{keyword}{extern} \textcolor{keyword}{const} \textcolor{keyword}{struct }value\_string *gsm48\_gmm\_cause\_names;}
\DoxyCodeLine{269 }
\DoxyCodeLine{270 \textcolor{comment}{/* 3GPP TS 24.008 10.5.6.6 / Table 10.5.157 */}}
\DoxyCodeLine{271 \textcolor{keyword}{enum} gsm48\_gsm\_cause \{}
\DoxyCodeLine{272         GSM\_CAUSE\_OPER\_DET\_BARR          = 0x08,}
\DoxyCodeLine{273         GSM\_CAUSE\_MBMS\_CAP\_INSUF        = 0x18,}
\DoxyCodeLine{274         GSM\_CAUSE\_LLC\_SNDCP\_FAIL        = 0x19,}
\DoxyCodeLine{275         GSM\_CAUSE\_INSUFF\_RSRC              = 0x1a,}
\DoxyCodeLine{276         GSM\_CAUSE\_MISSING\_APN              = 0x1b,}
\DoxyCodeLine{277         GSM\_CAUSE\_UNKNOWN\_PDP              = 0x1c,}
\DoxyCodeLine{278         GSM\_CAUSE\_AUTH\_FAILED              = 0x1d,}
\DoxyCodeLine{279         GSM\_CAUSE\_ACT\_REJ\_GGSN            = 0x1e,}
\DoxyCodeLine{280         GSM\_CAUSE\_ACT\_REJ\_UNSPEC        = 0x1f,}
\DoxyCodeLine{281         GSM\_CAUSE\_SERV\_OPT\_NOTSUPP    = 0x20,}
\DoxyCodeLine{282         GSM\_CAUSE\_REQ\_SERV\_OPT\_NOTSUB      = 0x21,}
\DoxyCodeLine{283         GSM\_CAUSE\_SERV\_OPT\_TEMP\_OOO  = 0x22,}
\DoxyCodeLine{284         GSM\_CAUSE\_NSAPI\_IN\_USE            = 0x23,}
\DoxyCodeLine{285         GSM\_CAUSE\_DEACT\_REGULAR          = 0x24,}
\DoxyCodeLine{286         GSM\_CAUSE\_QOS\_NOT\_ACCEPTED    = 0x25,}
\DoxyCodeLine{287         GSM\_CAUSE\_NET\_FAIL            = 0x26,}
\DoxyCodeLine{288         GSM\_CAUSE\_REACT\_RQD          = 0x27,}
\DoxyCodeLine{289         GSM\_CAUSE\_FEATURE\_NOTSUPP      = 0x28,}
\DoxyCodeLine{290         GSM\_CAUSE\_INVALID\_TRANS\_ID    = 0x51,}
\DoxyCodeLine{291         GSM\_CAUSE\_SEM\_INCORR\_MSG        = 0x5f,}
\DoxyCodeLine{292         GSM\_CAUSE\_INV\_MAND\_INFO          = 0x60,}
\DoxyCodeLine{293         GSM\_CAUSE\_MSGT\_NOTEXIST\_NOTIMPL  = 0x61,}
\DoxyCodeLine{294         GSM\_CAUSE\_MSGT\_INCOMP\_P\_STATE      = 0x62,}
\DoxyCodeLine{295         GSM\_CAUSE\_IE\_NOTEXIST\_NOTIMPL      = 0x63,}
\DoxyCodeLine{296         GSM\_CAUSE\_COND\_IE\_ERR              = 0x64,}
\DoxyCodeLine{297         GSM\_CAUSE\_MSG\_INCOMP\_P\_STATE        = 0x65,}
\DoxyCodeLine{298         GSM\_CAUSE\_PROTO\_ERR\_UNSPEC    = 0x6f,}
\DoxyCodeLine{299 \};}
\DoxyCodeLine{300 }
\DoxyCodeLine{301 \textcolor{keyword}{extern} \textcolor{keyword}{const} \textcolor{keyword}{struct }value\_string *gsm48\_gsm\_cause\_names;}
\DoxyCodeLine{302 }
\DoxyCodeLine{303 \textcolor{comment}{/* Section 6.1.2.2: Session management states on the network side */}}
\DoxyCodeLine{304 \textcolor{keyword}{enum} gsm48\_pdp\_state \{}
\DoxyCodeLine{305         PDP\_S\_INACTIVE,}
\DoxyCodeLine{306         PDP\_S\_ACTIVE\_PENDING,}
\DoxyCodeLine{307         PDP\_S\_ACTIVE,}
\DoxyCodeLine{308         PDP\_S\_INACTIVE\_PENDING,}
\DoxyCodeLine{309         PDP\_S\_MODIFY\_PENDING,}
\DoxyCodeLine{310 \};}
\DoxyCodeLine{311 }
\DoxyCodeLine{312 \textcolor{comment}{/* TS 24.008 Table 10.5.155/3GPP */}}
\DoxyCodeLine{313 \textcolor{keyword}{enum} gsm48\_pdp\_type\_org \{}
\DoxyCodeLine{314         PDP\_TYPE\_ORG\_ETSI              = 0x00,}
\DoxyCodeLine{315         PDP\_TYPE\_ORG\_IETF              = 0x01,}
\DoxyCodeLine{316         PDP\_TYPE\_ORG\_EMPTY            = 0x0f,}
\DoxyCodeLine{317 \};}
\DoxyCodeLine{318 \textcolor{keyword}{enum} gsm48\_pdp\_type\_nr \{}
\DoxyCodeLine{319         PDP\_TYPE\_N\_ETSI\_RESERVED        = 0x00,}
\DoxyCodeLine{320         PDP\_TYPE\_N\_ETSI\_PPP          = 0x01,}
\DoxyCodeLine{321         PDP\_TYPE\_N\_IETF\_IPv4                = 0x21,}
\DoxyCodeLine{322         PDP\_TYPE\_N\_IETF\_IPv6                = 0x57,}
\DoxyCodeLine{323         PDP\_TYPE\_N\_IETF\_IPv4v6            = 0x8D,}
\DoxyCodeLine{324 \};}
\DoxyCodeLine{325 \textcolor{comment}{/* TS 24.008 10.5.6.4 "{}Packet data protocol address"{} value}}
\DoxyCodeLine{326 \textcolor{comment}{ * Note: This can be reused for 3GPP TS 29.060 7.7.27 "{}End User Address"{}}}
\DoxyCodeLine{327 \textcolor{comment}{ * with minor changes in the values, like spare being 1111 instead.}}
\DoxyCodeLine{328 \textcolor{comment}{*/}}
\DoxyCodeLine{329 \textcolor{keyword}{struct }gsm48\_pdp\_address \{}
\DoxyCodeLine{330 \textcolor{preprocessor}{\#if OSMO\_IS\_LITTLE\_ENDIAN}}
\DoxyCodeLine{331 uint8\_t organization:4, \textcolor{comment}{/* enum gsm48\_pdp\_type\_org */}}
\DoxyCodeLine{332         spare:4; \textcolor{comment}{/* 0000 */}}
\DoxyCodeLine{333 \textcolor{preprocessor}{\#elif OSMO\_IS\_BIG\_ENDIAN}}
\DoxyCodeLine{334 \textcolor{comment}{/* auto-\/generated from the little endian part above (libosmocore/contrib/struct\_endianness.py) */}}
\DoxyCodeLine{335 uint8\_t spare:4, organization:4;}
\DoxyCodeLine{336 \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{337 uint8\_t type; \textcolor{comment}{/* enum gsm48\_pdp\_type\_nr */}}
\DoxyCodeLine{338         \textcolor{keyword}{union }\{}
\DoxyCodeLine{339                 \textcolor{comment}{/* PDP\_TYPE\_ORG\_ETSI */}}
\DoxyCodeLine{340                 \textcolor{keyword}{union }\{}
\DoxyCodeLine{341                 \} etsi;}
\DoxyCodeLine{342                 \textcolor{comment}{/* PDP\_TYPE\_ORG\_IETF */}}
\DoxyCodeLine{343                 \textcolor{keyword}{union }\{}
\DoxyCodeLine{344                         \textcolor{comment}{/* PDP\_TYPE\_N\_IETF\_IPv4 */}}
\DoxyCodeLine{345                         uint32\_t v4;}
\DoxyCodeLine{346 }
\DoxyCodeLine{347                         \textcolor{comment}{/* PDP\_TYPE\_N\_IETF\_IPv6 */}}
\DoxyCodeLine{348                         uint8\_t v6[16];}
\DoxyCodeLine{349 }
\DoxyCodeLine{350                         \textcolor{comment}{/* PDP\_TYPE\_N\_IETF\_IPv4v6 */}}
\DoxyCodeLine{351                         \textcolor{keyword}{struct }\{}
\DoxyCodeLine{352                                 uint32\_t v4;}
\DoxyCodeLine{353                                 uint8\_t v6[16];}
\DoxyCodeLine{354                         \} \_\_attribute\_\_ ((packed)) v4v6;}
\DoxyCodeLine{355                 \} ietf;}
\DoxyCodeLine{356         \};}
\DoxyCodeLine{357 \} \_\_attribute\_\_ ((packed));}
\DoxyCodeLine{358 }
\DoxyCodeLine{359 \textcolor{comment}{/* Figure 10.5.138/24.008 / Chapter 10.5.6.5 */}}
\DoxyCodeLine{360 \textcolor{keyword}{enum} gsm48\_qos\_reliab\_class \{}
\DoxyCodeLine{361         GSM48\_QOS\_RC\_LLC\_ACK\_RLC\_ACK\_DATA\_PROT    = 2,}
\DoxyCodeLine{362         GSM48\_QOS\_RC\_LLC\_UN\_RLC\_ACK\_DATA\_PROT      = 3,}
\DoxyCodeLine{363         GSM48\_QOS\_RC\_LLC\_UN\_RLC\_UN\_PROT\_DATA        = 4,}
\DoxyCodeLine{364         GSM48\_QOS\_RC\_LLC\_UN\_RLC\_UN\_DATA\_UN    = 5,}
\DoxyCodeLine{365 \};}
\DoxyCodeLine{366 }
\DoxyCodeLine{367 \textcolor{comment}{/* Figure 10.5.138/24.008 / Chapter 10.5.6.5 */}}
\DoxyCodeLine{368 \textcolor{keyword}{enum} gsm48\_qos\_preced\_class \{}
\DoxyCodeLine{369         GSM48\_QOS\_PC\_HIGH      = 1,}
\DoxyCodeLine{370         GSM48\_QOS\_PC\_NORMAL  = 2,}
\DoxyCodeLine{371         GSM48\_QOS\_PC\_LOW        = 3,}
\DoxyCodeLine{372 \};}
\DoxyCodeLine{373 }
\DoxyCodeLine{374 \textcolor{comment}{/* Figure 10.5.138/24.008 / Chapter 10.5.6.5 */}}
\DoxyCodeLine{375 \textcolor{keyword}{enum} gsm48\_qos\_peak\_tput \{}
\DoxyCodeLine{376         GSM48\_QOS\_PEAK\_TPUT\_1000bps  = 1,}
\DoxyCodeLine{377         GSM48\_QOS\_PEAK\_TPUT\_2000bps  = 2,}
\DoxyCodeLine{378         GSM48\_QOS\_PEAK\_TPUT\_4000bps  = 3,}
\DoxyCodeLine{379         GSM48\_QOS\_PEAK\_TPUT\_8000bps  = 4,}
\DoxyCodeLine{380         GSM48\_QOS\_PEAK\_TPUT\_16000bps        = 5,}
\DoxyCodeLine{381         GSM48\_QOS\_PEAK\_TPUT\_32000bps        = 6,}
\DoxyCodeLine{382         GSM48\_QOS\_PEAK\_TPUT\_64000bps        = 7,}
\DoxyCodeLine{383         GSM48\_QOS\_PEAK\_TPUT\_128000bps      = 8,}
\DoxyCodeLine{384         GSM48\_QOS\_PEAK\_TPUT\_256000bps      = 9,}
\DoxyCodeLine{385 \};}
\DoxyCodeLine{386 }
\DoxyCodeLine{387 \textcolor{comment}{/* Figure 10.5.138/24.008 / Chapter 10.5.6.5 */}}
\DoxyCodeLine{388 \textcolor{keyword}{enum} gsm48\_qos\_mean\_tput \{}
\DoxyCodeLine{389         GSM48\_QOS\_MEAN\_TPUT\_100bph    = 1,}
\DoxyCodeLine{390         GSM48\_QOS\_MEAN\_TPUT\_200bph    = 2,}
\DoxyCodeLine{391         GSM48\_QOS\_MEAN\_TPUT\_500bph    = 3,}
\DoxyCodeLine{392         GSM48\_QOS\_MEAN\_TPUT\_1000bph  = 4,}
\DoxyCodeLine{393         GSM48\_QOS\_MEAN\_TPUT\_2000bph  = 5,}
\DoxyCodeLine{394         GSM48\_QOS\_MEAN\_TPUT\_5000bph  = 6,}
\DoxyCodeLine{395         GSM48\_QOS\_MEAN\_TPUT\_10000bph        = 7,}
\DoxyCodeLine{396         GSM48\_QOS\_MEAN\_TPUT\_20000bph        = 8,}
\DoxyCodeLine{397         GSM48\_QOS\_MEAN\_TPUT\_50000bph        = 9,}
\DoxyCodeLine{398         GSM48\_QOS\_MEAN\_TPUT\_100kbph  = 10,}
\DoxyCodeLine{399         GSM48\_QOS\_MEAN\_TPUT\_200kbph  = 11,}
\DoxyCodeLine{400         GSM48\_QOS\_MEAN\_TPUT\_500kbph  = 0xc,}
\DoxyCodeLine{401         GSM48\_QOS\_MEAN\_TPUT\_1Mbph      = 0xd,}
\DoxyCodeLine{402         GSM48\_QOS\_MEAN\_TPUT\_2Mbph      = 0xe,}
\DoxyCodeLine{403         GSM48\_QOS\_MEAN\_TPUT\_5Mbph      = 0xf,}
\DoxyCodeLine{404         GSM48\_QOS\_MEAN\_TPUT\_10Mbph    = 0x10,}
\DoxyCodeLine{405         GSM48\_QOS\_MEAN\_TPUT\_20Mbph    = 0x11,}
\DoxyCodeLine{406         GSM48\_QOS\_MEAN\_TPUT\_50Mbph    = 0x12,}
\DoxyCodeLine{407         GSM48\_QOS\_MEAN\_TPUT\_BEST\_EFFORT  = 0x1f,}
\DoxyCodeLine{408 \};}
\DoxyCodeLine{409 }
\DoxyCodeLine{410 \textcolor{comment}{/* Figure 10.5.138/24.008 / Chapter 10.5.6.5 */}}
\DoxyCodeLine{411 \textcolor{keyword}{enum} gsm48\_qos\_err\_sdu \{}
\DoxyCodeLine{412         GSM48\_QOS\_ERRSDU\_NODETECT      = 1,}
\DoxyCodeLine{413         GSM48\_QOS\_ERRSDU\_YES                = 2,}
\DoxyCodeLine{414         GSM48\_QOS\_ERRSDU\_NO          = 3,}
\DoxyCodeLine{415 \};}
\DoxyCodeLine{416 }
\DoxyCodeLine{417 \textcolor{comment}{/* Figure 10.5.138/24.008 / Chapter 10.5.6.5 */}}
\DoxyCodeLine{418 \textcolor{keyword}{enum} gsm48\_qos\_deliv\_order \{}
\DoxyCodeLine{419         GSM48\_QOS\_DO\_ORDERED                = 1,}
\DoxyCodeLine{420         GSM48\_QOS\_DO\_UNORDERED            = 2,}
\DoxyCodeLine{421 \};}
\DoxyCodeLine{422 }
\DoxyCodeLine{423 \textcolor{comment}{/* Figure 10.5.138/24.008 / Chapter 10.5.6.5 */}}
\DoxyCodeLine{424 \textcolor{keyword}{enum} gsm48\_qos\_traf\_class \{}
\DoxyCodeLine{425         GSM48\_QOS\_TC\_CONVERSATIONAL  = 1,}
\DoxyCodeLine{426         GSM48\_QOS\_TC\_STREAMING            = 2,}
\DoxyCodeLine{427         GSM48\_QOS\_TC\_INTERACTIVE        = 3,}
\DoxyCodeLine{428         GSM48\_QOS\_TC\_BACKGROUND          = 4,}
\DoxyCodeLine{429 \};}
\DoxyCodeLine{430 }
\DoxyCodeLine{431 \textcolor{comment}{/* Figure 10.5.138/24.008 / Chapter 10.5.6.5 */}}
\DoxyCodeLine{432 \textcolor{keyword}{enum} gsm48\_qos\_max\_sdu\_size \{}
\DoxyCodeLine{433         \textcolor{comment}{/* values below in 10 octet granularity */}}
\DoxyCodeLine{434         GSM48\_QOS\_MAXSDU\_1502              = 0x97,}
\DoxyCodeLine{435         GSM48\_QOS\_MAXSDU\_1510              = 0x98,}
\DoxyCodeLine{436         GSM48\_QOS\_MAXSDU\_1520              = 0x99,}
\DoxyCodeLine{437 \};}
\DoxyCodeLine{438 }
\DoxyCodeLine{439 \textcolor{comment}{/* Figure 10.5.138/24.008 / Chapter 10.5.6.5 */}}
\DoxyCodeLine{440 \textcolor{keyword}{enum} gsm48\_qos\_max\_bitrate \{}
\DoxyCodeLine{441         GSM48\_QOS\_MBRATE\_1k          = 0x01,}
\DoxyCodeLine{442         GSM48\_QOS\_MBRATE\_63k                = 0x3f,}
\DoxyCodeLine{443         GSM48\_QOS\_MBRATE\_64k                = 0x40,}
\DoxyCodeLine{444         GSM48\_QOS\_MBRATE\_568k              = 0x7f,}
\DoxyCodeLine{445         GSM48\_QOS\_MBRATE\_576k              = 0x80,}
\DoxyCodeLine{446         GSM48\_QOS\_MBRATE\_8640k            = 0xfe,}
\DoxyCodeLine{447         GSM48\_QOS\_MBRATE\_0k          = 0xff,}
\DoxyCodeLine{448 \};}
\DoxyCodeLine{449 }
\DoxyCodeLine{450 \textcolor{comment}{/* Figure 10.5.138/24.008 / Chapter 10.5.6.5 */}}
\DoxyCodeLine{451 \textcolor{keyword}{enum} gsm48\_qos\_resid\_ber \{}
\DoxyCodeLine{452         GSM48\_QOS\_RBER\_5e\_2          = 0x01,}
\DoxyCodeLine{453         GSM48\_QOS\_RBER\_1e\_2          = 0x02,}
\DoxyCodeLine{454         GSM48\_QOS\_RBER\_5e\_3          = 0x03,}
\DoxyCodeLine{455         GSM48\_QOS\_RBER\_4e\_3          = 0x04,}
\DoxyCodeLine{456         GSM48\_QOS\_RBER\_1e\_3          = 0x05,}
\DoxyCodeLine{457         GSM48\_QOS\_RBER\_1e\_4          = 0x06,}
\DoxyCodeLine{458         GSM48\_QOS\_RBER\_1e\_5          = 0x07,}
\DoxyCodeLine{459         GSM48\_QOS\_RBER\_1e\_6          = 0x08,}
\DoxyCodeLine{460         GSM48\_QOS\_RBER\_6e\_8          = 0x09,}
\DoxyCodeLine{461 \};}
\DoxyCodeLine{462 }
\DoxyCodeLine{463 \textcolor{comment}{/* Figure 10.5.138/24.008 / Chapter 10.5.6.5 */}}
\DoxyCodeLine{464 \textcolor{keyword}{enum} gsm48\_qos\_sdu\_err \{}
\DoxyCodeLine{465         GSM48\_QOS\_SERR\_1e\_2          = 0x01,}
\DoxyCodeLine{466         GSM48\_QOS\_SERR\_7e\_2          = 0x02,}
\DoxyCodeLine{467         GSM48\_QOS\_SERR\_1e\_3          = 0x03,}
\DoxyCodeLine{468         GSM48\_QOS\_SERR\_1e\_4          = 0x04,}
\DoxyCodeLine{469         GSM48\_QOS\_SERR\_1e\_5          = 0x05,}
\DoxyCodeLine{470         GSM48\_QOS\_SERR\_1e\_6          = 0x06,}
\DoxyCodeLine{471         GSM48\_QOS\_SERR\_1e\_1          = 0x07,}
\DoxyCodeLine{472 \};}
\DoxyCodeLine{473 }
\DoxyCodeLine{474 \textcolor{comment}{/* 3GPP 24.008 / Chapter 10.5.5.20 / Table 10.5.153a */}}
\DoxyCodeLine{475 \textcolor{keyword}{enum} gsm48\_gmm\_service\_type \{}
\DoxyCodeLine{476         GPRS\_SERVICE\_T\_SIGNALLING      = 0x00,}
\DoxyCodeLine{477         GPRS\_SERVICE\_T\_DATA          = 0x01,}
\DoxyCodeLine{478         GPRS\_SERVICE\_T\_PAGING\_RESP    = 0x02,}
\DoxyCodeLine{479         GPRS\_SERVICE\_T\_MBMS\_MC\_SERV  = 0x03,}
\DoxyCodeLine{480         GPRS\_SERVICE\_T\_MBMS\_BC\_SERV  = 0x04,}
\DoxyCodeLine{481 \};}
\DoxyCodeLine{482 }
\DoxyCodeLine{483 \textcolor{keyword}{extern} \textcolor{keyword}{const} \textcolor{keyword}{struct }value\_string *gprs\_service\_t\_strs;}
\DoxyCodeLine{484 }
\DoxyCodeLine{485 \textcolor{keywordtype}{bool} gprs\_ms\_net\_cap\_gea\_supported(\textcolor{keyword}{const} uint8\_t *ms\_net\_cap, uint8\_t cap\_len,}
\DoxyCodeLine{486                                    \textcolor{keyword}{enum} gprs\_ciph\_algo gea);}
\DoxyCodeLine{487 }
\DoxyCodeLine{488 \textcolor{comment}{/* Figure 10.5.138/24.008 / Chapter 10.5.6.5 */}}
\DoxyCodeLine{489 \textcolor{keyword}{struct }gsm48\_qos \{}
\DoxyCodeLine{490         \textcolor{comment}{/* octet 3 */}}
\DoxyCodeLine{491         uint8\_t reliab\_class:3;}
\DoxyCodeLine{492         uint8\_t delay\_class:3;}
\DoxyCodeLine{493         uint8\_t spare:2;}
\DoxyCodeLine{494         \textcolor{comment}{/* octet 4 */}}
\DoxyCodeLine{495         uint8\_t preced\_class:3;}
\DoxyCodeLine{496         uint8\_t spare2:1;}
\DoxyCodeLine{497         uint8\_t peak\_tput:4;}
\DoxyCodeLine{498         \textcolor{comment}{/* octet 5 */}}
\DoxyCodeLine{499         uint8\_t mean\_tput:5;}
\DoxyCodeLine{500         uint8\_t spare3:3;}
\DoxyCodeLine{501         \textcolor{comment}{/* octet 6 */}}
\DoxyCodeLine{502         uint8\_t deliv\_err\_sdu:3;}
\DoxyCodeLine{503         uint8\_t deliv\_order:2;}
\DoxyCodeLine{504         uint8\_t traf\_class:3;}
\DoxyCodeLine{505         \textcolor{comment}{/* octet 7 */}}
\DoxyCodeLine{506         uint8\_t max\_sdu\_size;}
\DoxyCodeLine{507         \textcolor{comment}{/* octet 8 */}}
\DoxyCodeLine{508         uint8\_t max\_bitrate\_up;}
\DoxyCodeLine{509         \textcolor{comment}{/* octet 9 */}}
\DoxyCodeLine{510         uint8\_t max\_bitrate\_down;}
\DoxyCodeLine{511         \textcolor{comment}{/* octet 10 */}}
\DoxyCodeLine{512         uint8\_t sdu\_err\_ratio:4;}
\DoxyCodeLine{513         uint8\_t resid\_ber:4;}
\DoxyCodeLine{514         \textcolor{comment}{/* octet 11 */}}
\DoxyCodeLine{515         uint8\_t handling\_prio:2;}
\DoxyCodeLine{516         uint8\_t xfer\_delay:6;}
\DoxyCodeLine{517         \textcolor{comment}{/* octet 12 */}}
\DoxyCodeLine{518         uint8\_t guar\_bitrate\_up;}
\DoxyCodeLine{519         \textcolor{comment}{/* octet 13 */}}
\DoxyCodeLine{520         uint8\_t guar\_bitrate\_down;}
\DoxyCodeLine{521         \textcolor{comment}{/* octet 14 */}}
\DoxyCodeLine{522         uint8\_t src\_stats\_desc:4;}
\DoxyCodeLine{523         uint8\_t sig\_ind:1;}
\DoxyCodeLine{524         uint8\_t spare5:3;}
\DoxyCodeLine{525         \textcolor{comment}{/* octet 15 */}}
\DoxyCodeLine{526         uint8\_t max\_bitrate\_down\_ext;}
\DoxyCodeLine{527         \textcolor{comment}{/* octet 16 */}}
\DoxyCodeLine{528         uint8\_t guar\_bitrate\_down\_ext;}
\DoxyCodeLine{529 \};}
\DoxyCodeLine{530 }
\DoxyCodeLine{531 \textcolor{comment}{/* TS 24.008 Table 10.5.5.29 */}}
\DoxyCodeLine{532 \textcolor{keyword}{enum} gsm48\_ptsmi\_type \{}
\DoxyCodeLine{533         PTMSI\_TYPE\_NATIVE              = 0x00,}
\DoxyCodeLine{534         PTMSI\_TYPE\_MAPPED              = 0x01,}
\DoxyCodeLine{535 \};}
\DoxyCodeLine{536 }

\end{DoxyCode}
