Changes of Revision 60

open5gs_2.4.9.32.def9.202208250002.dsc Deleted
x
 
1
@@ -1,37 +0,0 @@
2
-Format: 3.0 (native)
3
-Source: open5gs
4
-Binary: open5gs-common, open5gs-mme, open5gs-sgwc, open5gs-smf, open5gs-amf, open5gs-sgwu, open5gs-upf, open5gs-hss, open5gs-pcrf, open5gs-nrf, open5gs-ausf, open5gs-udm, open5gs-pcf, open5gs-nssf, open5gs-bsf, open5gs-udr, open5gs, open5gs-dbg
5
-Architecture: any
6
-Version: 2.4.9.32.def9.202208250002
7
-Maintainer: Harald Welte <laforge@gnumonks.org>
8
-Uploaders: Sukchan Lee <acetcom@gmail.com>
9
-Homepage: https://open5gs.org
10
-Standards-Version: 4.3.0
11
-Vcs-Browser: https://github.com/open5gs/open5gs
12
-Vcs-Git: git://github.com/open5gs/open5gs
13
-Build-Depends: debhelper (>= 11), git, pkg-config, meson (>= 0.43.0), flex, bison, libgnutls28-dev, libgcrypt-dev, libssl-dev, libidn11-dev, libmongoc-dev, libbson-dev, libsctp-dev, libyaml-dev, libmicrohttpd-dev, libcurl4-gnutls-dev, libnghttp2-dev, libtins-dev, libtalloc-dev
14
-Package-List:
15
- open5gs deb net optional arch=any
16
- open5gs-amf deb net optional arch=any
17
- open5gs-ausf deb net optional arch=any
18
- open5gs-bsf deb net optional arch=any
19
- open5gs-common deb net optional arch=any
20
- open5gs-dbg deb net optional arch=any
21
- open5gs-hss deb net optional arch=any
22
- open5gs-mme deb net optional arch=any
23
- open5gs-nrf deb net optional arch=any
24
- open5gs-nssf deb net optional arch=any
25
- open5gs-pcf deb net optional arch=any
26
- open5gs-pcrf deb net optional arch=any
27
- open5gs-sgwc deb net optional arch=any
28
- open5gs-sgwu deb net optional arch=any
29
- open5gs-smf deb net optional arch=any
30
- open5gs-udm deb net optional arch=any
31
- open5gs-udr deb net optional arch=any
32
- open5gs-upf deb net optional arch=any
33
-Checksums-Sha1:
34
- f892abc9bba513e58b094333f777f4086b30607c 11454128 open5gs_2.4.9.32.def9.202208250002.tar.xz
35
-Checksums-Sha256:
36
- 36dfce773594f92decd67f849333890e750a7a69ae6cce8381277a1266f536b4 11454128 open5gs_2.4.9.32.def9.202208250002.tar.xz
37
-Files:
38
- bde7c2828a3c3a700c57cd6814a18303 11454128 open5gs_2.4.9.32.def9.202208250002.tar.xz
39
open5gs_2.4.9.34.83a20.202208260002.dsc Added
39
 
1
@@ -0,0 +1,37 @@
2
+Format: 3.0 (native)
3
+Source: open5gs
4
+Binary: open5gs-common, open5gs-mme, open5gs-sgwc, open5gs-smf, open5gs-amf, open5gs-sgwu, open5gs-upf, open5gs-hss, open5gs-pcrf, open5gs-nrf, open5gs-ausf, open5gs-udm, open5gs-pcf, open5gs-nssf, open5gs-bsf, open5gs-udr, open5gs, open5gs-dbg
5
+Architecture: any
6
+Version: 2.4.9.34.83a20.202208260002
7
+Maintainer: Harald Welte <laforge@gnumonks.org>
8
+Uploaders: Sukchan Lee <acetcom@gmail.com>
9
+Homepage: https://open5gs.org
10
+Standards-Version: 4.3.0
11
+Vcs-Browser: https://github.com/open5gs/open5gs
12
+Vcs-Git: git://github.com/open5gs/open5gs
13
+Build-Depends: debhelper (>= 11), git, pkg-config, meson (>= 0.43.0), flex, bison, libgnutls28-dev, libgcrypt-dev, libssl-dev, libidn11-dev, libmongoc-dev, libbson-dev, libsctp-dev, libyaml-dev, libmicrohttpd-dev, libcurl4-gnutls-dev, libnghttp2-dev, libtins-dev, libtalloc-dev
14
+Package-List:
15
+ open5gs deb net optional arch=any
16
+ open5gs-amf deb net optional arch=any
17
+ open5gs-ausf deb net optional arch=any
18
+ open5gs-bsf deb net optional arch=any
19
+ open5gs-common deb net optional arch=any
20
+ open5gs-dbg deb net optional arch=any
21
+ open5gs-hss deb net optional arch=any
22
+ open5gs-mme deb net optional arch=any
23
+ open5gs-nrf deb net optional arch=any
24
+ open5gs-nssf deb net optional arch=any
25
+ open5gs-pcf deb net optional arch=any
26
+ open5gs-pcrf deb net optional arch=any
27
+ open5gs-sgwc deb net optional arch=any
28
+ open5gs-sgwu deb net optional arch=any
29
+ open5gs-smf deb net optional arch=any
30
+ open5gs-udm deb net optional arch=any
31
+ open5gs-udr deb net optional arch=any
32
+ open5gs-upf deb net optional arch=any
33
+Checksums-Sha1:
34
+ b6ba03179163f7f170c5b595d96123fc2d948ebc 11455464 open5gs_2.4.9.34.83a20.202208260002.tar.xz
35
+Checksums-Sha256:
36
+ 309d8e5d583205698a3d4de9188a4184b8c4b4131032e902042261b7ce15274a 11455464 open5gs_2.4.9.34.83a20.202208260002.tar.xz
37
+Files:
38
+ 58b6a54ad80f2daad503a01e1a7a8c79 11455464 open5gs_2.4.9.34.83a20.202208260002.tar.xz
39
open5gs_2.4.9.32.def9.202208250002.tar.xz/.tarball-version -> open5gs_2.4.9.34.83a20.202208260002.tar.xz/.tarball-version Changed
4
 
1
@@ -1 +1 @@
2
-2.4.9.32-def9.202208250002
3
+2.4.9.34-83a20.202208260002
4
open5gs_2.4.9.32.def9.202208250002.tar.xz/debian/changelog -> open5gs_2.4.9.34.83a20.202208260002.tar.xz/debian/changelog Changed
12
 
1
@@ -1,8 +1,8 @@
2
-open5gs (2.4.9.32.def9.202208250002) unstable; urgency=medium
3
+open5gs (2.4.9.34.83a20.202208260002) unstable; urgency=medium
4
 
5
   * Automatically generated changelog entry for building the Osmocom nightly feed
6
 
7
- -- Osmocom OBS scripts <info@osmocom.org>  Thu, 25 Aug 2022 00:04:30 +0000
8
+ -- Osmocom OBS scripts <info@osmocom.org>  Fri, 26 Aug 2022 00:04:38 +0000
9
 
10
 open5gs (2.4.9) unstable; urgency=medium
11
 
12
open5gs_2.4.9.32.def9.202208250002.tar.xz/lib/core/ogs-conv.c -> open5gs_2.4.9.34.83a20.202208260002.tar.xz/lib/core/ogs-conv.c Changed
20
 
1
@@ -54,15 +54,16 @@
2
 
3
 void *ogs_hex_to_ascii(void *in, int in_len, void *out, int out_len)
4
 {
5
-    char *p;
6
+    char *p, *last;
7
     int i = 0, l, off = 0;
8
 
9
     p = out;
10
+    last = p + out_len;
11
     p0 = 0;
12
 
13
     l = (in_len - off) > out_len ? out_len : in_len - off;
14
     for (i = 0; i < l; i++) {
15
-        p += sprintf(p, "%02x", ((char*)in)off+i & 0xff);
16
+        p = ogs_slprintf(p, last, "%02x", ((char*)in)off+i & 0xff);
17
     }
18
 
19
     return out;
20
open5gs_2.4.9.32.def9.202208250002.tar.xz/lib/core/ogs-uuid.c -> open5gs_2.4.9.34.83a20.202208260002.tar.xz/lib/core/ogs-uuid.c Changed
11
 
1
@@ -162,7 +162,8 @@
2
 {
3
     const unsigned char *d = uuid->data;
4
 
5
-    sprintf(buffer, "%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-"
6
+    ogs_snprintf(buffer, OGS_UUID_FORMATTED_LENGTH + 1,
7
+                    "%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-"
8
                     "%02x%02x%02x%02x%02x%02x",
9
                     d0, d1, d2, d3, d4, d5, d6, d7,
10
                     d8, d9, d10, d11, d12, d13, d14, d15);
11
open5gs_2.4.9.32.def9.202208250002.tar.xz/lib/diameter/s6a/dict.c -> open5gs_2.4.9.34.83a20.202208260002.tar.xz/lib/diameter/s6a/dict.c Changed
73
 
1
@@ -583,6 +583,71 @@
2
            PARSE_loc_rules( rules, cmd );
3
        }
4
 
5
+       /* Insert-Subscriber-Data-Request (IDR) Command - 3GPP TS 29.272 #7.2.9 */
6
+       {
7
+           struct dict_object * cmd;
8
+           struct dict_cmd_data data = {
9
+               319,                                                        /* Code */
10
+               "Insert-Subscriber-Data-Request",                           /* Name */
11
+               CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR,     /* Fixed flags */
12
+               CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE                       /* Fixed flag values */
13
+           };
14
+           struct local_rules_definition rules =
15
+           {
16
+                {  {                      .avp_name = "Session-Id" }, RULE_FIXED_HEAD, -1, 1 },
17
+                {  {                      .avp_name = "Vendor-Specific-Application-Id" }, RULE_OPTIONAL, -1, 1 },
18
+                {  {                      .avp_name = "Auth-Session-State" }, RULE_REQUIRED, -1, 1 },
19
+                {  {                      .avp_name = "Origin-Host" }, RULE_REQUIRED, -1, 1 },
20
+                {  {                      .avp_name = "Origin-Realm" }, RULE_REQUIRED, -1, 1 },
21
+                {  {                      .avp_name = "Destination-Host" }, RULE_OPTIONAL, -1, 1 },
22
+                {  {                      .avp_name = "Destination-Realm" }, RULE_REQUIRED, -1, 1 },
23
+                {  {                      .avp_name = "User-Name" }, RULE_REQUIRED, -1, 1 },
24
+                {  { .avp_vendor = 10415, .avp_name = "Supported-Features" }, RULE_OPTIONAL, -1, -1 },
25
+                {  { .avp_vendor = 10415, .avp_name = "Subscription-Data" }, RULE_REQUIRED, -1, 1 },                
26
+                {  { .avp_vendor = 10415, .avp_name = "IDR-Flags" }, RULE_OPTIONAL, -1, 1 },
27
+                {  {                      .avp_name = "Proxy-Info" }, RULE_OPTIONAL, -1, -1 },
28
+                {  {                      .avp_name = "Route-Record" }, RULE_OPTIONAL, -1, -1 },
29
+           };
30
+
31
+           CHECK_dict_new( DICT_COMMAND, &data, s6a, &cmd);
32
+           PARSE_loc_rules( rules, cmd );
33
+       }
34
+
35
+       /* Insert-Subscriber-Data-Answer (IDA) Command - 3GPP TS 29.272 #7.2.10 */
36
+       {
37
+           struct dict_object * cmd;
38
+           struct dict_cmd_data data = {
39
+               319,                                                    /* Code */
40
+               "Insert-Subscriber-Data-Answer",                        /* Name */
41
+               CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR, /* Fixed flags */
42
+               CMD_FLAG_PROXIABLE                                      /* Fixed flag values */
43
+           };
44
+           struct local_rules_definition rules =
45
+           {
46
+                {  {                      .avp_name = "Session-Id" }, RULE_FIXED_HEAD, -1, 1 },
47
+                {  {                      .avp_name = "Vendor-Specific-Application-Id" }, RULE_OPTIONAL, -1, 1 },
48
+                {  {                      .avp_name = "Result-Code" }, RULE_OPTIONAL, -1, 1 },
49
+                {  {                      .avp_name = "Experimental-Result" }, RULE_OPTIONAL, -1, 1 },
50
+                {  {                      .avp_name = "Auth-Session-State" }, RULE_REQUIRED, -1, 1 },
51
+                {  {                      .avp_name = "Origin-Host" }, RULE_REQUIRED, -1, 1 },
52
+                {  {                      .avp_name = "Origin-Realm" }, RULE_REQUIRED, -1, 1 },
53
+                {  { .avp_vendor = 10415, .avp_name = "IMS-Voice-Over-PS-Sessions-Supported" }, RULE_OPTIONAL, -1, 1 },
54
+                {  { .avp_vendor = 10415, .avp_name = "Last-UE-Activity-Time" }, RULE_OPTIONAL, -1, 1 },
55
+                {  { .avp_vendor = 10415, .avp_name = "RAT-Type" }, RULE_OPTIONAL, -1, 1 },
56
+                {  { .avp_vendor = 10415, .avp_name = "IDA-Flags" }, RULE_OPTIONAL, -1, 1 },
57
+                {  { .avp_vendor = 10415, .avp_name = "EPS-User-State" }, RULE_OPTIONAL, -1, 1 },
58
+                {  { .avp_vendor = 10415, .avp_name = "EPS-Location-Information" }, RULE_OPTIONAL, -1, 1 },
59
+                {  { .avp_vendor = 10415, .avp_name = "Local-Time-Zone" }, RULE_OPTIONAL, -1, 1 },
60
+                {  { .avp_vendor = 10415, .avp_name = "Supported-Services" }, RULE_OPTIONAL, -1, 1 },                                                                                                
61
+                {  {                      .avp_name = "Failed-AVP" }, RULE_OPTIONAL, -1, -1 },
62
+                {  {                      .avp_name = "Proxy-Info" }, RULE_OPTIONAL, -1, -1 },
63
+                {  {                      .avp_name = "Route-Record" }, RULE_OPTIONAL, -1, -1 },
64
+           };
65
+
66
+           CHECK_dict_new( DICT_COMMAND, &data, s6a, &cmd);
67
+           PARSE_loc_rules( rules, cmd );
68
+       }
69
+
70
     }
71
 
72
     LOG_D( "Extension 'Dictionary definitions for DCCA 3GPP S6A' initialized");
73
open5gs_2.4.9.32.def9.202208250002.tar.xz/lib/diameter/s6a/message.c -> open5gs_2.4.9.34.83a20.202208260002.tar.xz/lib/diameter/s6a/message.c Changed
56
 
1
@@ -32,10 +32,13 @@
2
 struct dict_object *ogs_diam_s6a_cmd_pua = NULL;
3
 struct dict_object *ogs_diam_s6a_cmd_clr = NULL;
4
 struct dict_object *ogs_diam_s6a_cmd_cla = NULL;
5
+struct dict_object *ogs_diam_s6a_cmd_idr = NULL;
6
+struct dict_object *ogs_diam_s6a_cmd_ida = NULL;
7
 
8
 struct dict_object *ogs_diam_s6a_ulr_flags = NULL;
9
 struct dict_object *ogs_diam_s6a_ula_flags = NULL;
10
 struct dict_object *ogs_diam_s6a_clr_flags = NULL;
11
+struct dict_object *ogs_diam_s6a_idr_flags = NULL;
12
 struct dict_object *ogs_diam_s6a_cancellation_type = NULL;
13
 struct dict_object *ogs_diam_s6a_subscription_data = NULL;
14
 struct dict_object *ogs_diam_s6a_req_eutran_auth_info = NULL;
15
@@ -71,6 +74,11 @@
16
 struct dict_object *ogs_diam_s6a_pre_emption_vulnerability = NULL;
17
 struct dict_object *ogs_diam_s6a_pdn_gw_allocation_type = NULL;
18
 struct dict_object *ogs_diam_s6a_vplmn_dynamic_address_allowed = NULL;
19
+struct dict_object *ogs_diam_s6a_eps_location_information = NULL;
20
+struct dict_object *ogs_diam_s6a_mme_location_information = NULL;
21
+struct dict_object *ogs_diam_s6a_e_utran_cell_global_identity = NULL;
22
+struct dict_object *ogs_diam_s6a_tracking_area_identity = NULL;
23
+struct dict_object *ogs_diam_s6a_age_of_location_information = NULL;
24
 
25
 struct dict_object *ogs_diam_s6a_terminal_information = NULL;
26
 struct dict_object *ogs_diam_s6a_imei = NULL;
27
@@ -96,11 +104,14 @@
28
     CHECK_dict_search(DICT_COMMAND, CMD_BY_NAME, "Purge-UE-Request", &ogs_diam_s6a_cmd_pur);
29
     CHECK_dict_search(DICT_COMMAND, CMD_BY_NAME, "Purge-UE-Answer", &ogs_diam_s6a_cmd_pua);
30
     CHECK_dict_search(DICT_COMMAND, CMD_BY_NAME, "Cancel-Location-Request", &ogs_diam_s6a_cmd_clr);
31
-    CHECK_dict_search(DICT_COMMAND, CMD_BY_NAME, "Cancel-Location-Answer", &ogs_diam_s6a_cmd_cla);    
32
+    CHECK_dict_search(DICT_COMMAND, CMD_BY_NAME, "Cancel-Location-Answer", &ogs_diam_s6a_cmd_cla);
33
+    CHECK_dict_search(DICT_COMMAND, CMD_BY_NAME, "Insert-Subscriber-Data-Request", &ogs_diam_s6a_cmd_idr);
34
+    CHECK_dict_search(DICT_COMMAND, CMD_BY_NAME, "Insert-Subscriber-Data-Answer", &ogs_diam_s6a_cmd_ida);
35
 
36
     CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "ULR-Flags", &ogs_diam_s6a_ulr_flags);
37
     CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "ULA-Flags", &ogs_diam_s6a_ula_flags);
38
     CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "CLR-Flags", &ogs_diam_s6a_clr_flags);
39
+    CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "IDR-Flags", &ogs_diam_s6a_idr_flags);
40
     CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Cancellation-Type", &ogs_diam_s6a_cancellation_type);
41
     CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "UE-SRVCC-Capability", &ogs_diam_s6a_ue_srvcc_capability);
42
 
43
@@ -142,6 +153,12 @@
44
     CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Access-Restriction-Data", &ogs_diam_s6a_access_restriction_data);
45
     CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Subscribed-Periodic-RAU-TAU-Timer", &ogs_diam_s6a_subscribed_rau_tau_timer);
46
 
47
+    CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "EPS-Location-Information", &ogs_diam_s6a_eps_location_information);
48
+    CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "MME-Location-Information", &ogs_diam_s6a_mme_location_information);
49
+    CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "E-UTRAN-Cell-Global-Identity", &ogs_diam_s6a_e_utran_cell_global_identity);
50
+    CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Tracking-Area-Identity", &ogs_diam_s6a_tracking_area_identity);
51
+    CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Age-Of-Location-Information", &ogs_diam_s6a_age_of_location_information);
52
+
53
     CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Terminal-Information", &ogs_diam_s6a_terminal_information);
54
     CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "IMEI", &ogs_diam_s6a_imei);
55
     CHECK_dict_search(DICT_AVP, AVP_BY_NAME_ALL_VENDORS, "Software-Version", &ogs_diam_s6a_software_version);
56
open5gs_2.4.9.32.def9.202208250002.tar.xz/lib/diameter/s6a/message.h -> open5gs_2.4.9.34.83a20.202208260002.tar.xz/lib/diameter/s6a/message.h Changed
62
 
1
@@ -78,10 +78,13 @@
2
 extern struct dict_object *ogs_diam_s6a_cmd_pua;
3
 extern struct dict_object *ogs_diam_s6a_cmd_clr;
4
 extern struct dict_object *ogs_diam_s6a_cmd_cla;
5
+extern struct dict_object *ogs_diam_s6a_cmd_idr;
6
+extern struct dict_object *ogs_diam_s6a_cmd_ida;
7
 
8
 extern struct dict_object *ogs_diam_s6a_ulr_flags;
9
 extern struct dict_object *ogs_diam_s6a_ula_flags;
10
 extern struct dict_object *ogs_diam_s6a_clr_flags;
11
+extern struct dict_object *ogs_diam_s6a_idr_flags;
12
 extern struct dict_object *ogs_diam_s6a_cancellation_type;
13
 extern struct dict_object *ogs_diam_s6a_subscription_data;
14
 extern struct dict_object *ogs_diam_s6a_req_eutran_auth_info;
15
@@ -117,6 +120,11 @@
16
 extern struct dict_object *ogs_diam_s6a_pre_emption_vulnerability;
17
 extern struct dict_object *ogs_diam_s6a_pdn_gw_allocation_type;
18
 extern struct dict_object *ogs_diam_s6a_vplmn_dynamic_address_allowed;
19
+extern struct dict_object *ogs_diam_s6a_eps_location_information;
20
+extern struct dict_object *ogs_diam_s6a_mme_location_information;
21
+extern struct dict_object *ogs_diam_s6a_e_utran_cell_global_identity;
22
+extern struct dict_object *ogs_diam_s6a_tracking_area_identity;
23
+extern struct dict_object *ogs_diam_s6a_age_of_location_information;
24
 
25
 extern struct dict_object *ogs_diam_s6a_terminal_information;
26
 extern struct dict_object *ogs_diam_s6a_imei;
27
@@ -150,10 +158,26 @@
28
     uint32_t clr_flags;
29
 } ogs_diam_s6a_clr_message_t;
30
 
31
+typedef struct ogs_diam_s6a_idr_message_s {
32
+#define OGS_DIAM_S6A_IDR_FLAGS_UE_REACHABILITY             (1)
33
+#define OGS_DIAM_S6A_IDR_FLAGS_TADS_DATA                   (1 << 1)
34
+#define OGS_DIAM_S6A_IDR_FLAGS_EPS_USER_STATE              (1 << 2)
35
+#define OGS_DIAM_S6A_IDR_FLAGS_EPS_LOCATION_INFO           (1 << 3)
36
+#define OGS_DIAM_S6A_IDR_FLAGS_CURRENT_LOCATION            (1 << 4)
37
+#define OGS_DIAM_S6A_IDR_FLAGS_LOCAL_TZ                    (1 << 5)
38
+#define OGS_DIAM_S6A_IDR_FLAGS_REMOVE_SMS_REG              (1 << 6)
39
+#define OGS_DIAM_S6A_IDR_FLAGS_RAT_TYPE                    (1 << 7)
40
+#define OGS_DIAM_S6A_IDR_FLAGS_PCSCF_Restoration           (1 << 8)
41
+    uint32_t idr_flags;
42
+    ogs_subscription_data_t subscription_data;
43
+} ogs_diam_s6a_idr_message_t;
44
+
45
 typedef struct ogs_diam_s6a_message_s {
46
 #define OGS_DIAM_S6A_CMD_CODE_UPDATE_LOCATION               316
47
 #define OGS_DIAM_S6A_CMD_CODE_CANCEL_LOCATION               317
48
 #define OGS_DIAM_S6A_CMD_CODE_AUTHENTICATION_INFORMATION    318
49
+#define OGS_DIAM_S6A_CMD_CODE_INSERT_SUBSCRIBER_DATA        319
50
+#define OGS_DIAM_S6A_CMD_CODE_PURGE_UE                      321
51
     uint16_t                        cmd_code;
52
 
53
     /* Experimental Result Code */
54
@@ -168,6 +192,7 @@
55
     uint32_t                        *err;
56
     uint32_t                        *exp_err;
57
 
58
+    ogs_diam_s6a_idr_message_t      idr_message;
59
     ogs_diam_s6a_clr_message_t      clr_message;
60
     ogs_diam_s6a_aia_message_t      aia_message;
61
     ogs_diam_s6a_ula_message_t      ula_message;
62
open5gs_2.4.9.32.def9.202208250002.tar.xz/src/mme/emm-handler.c -> open5gs_2.4.9.34.83a20.202208260002.tar.xz/src/mme/emm-handler.c Changed
25
 
1
@@ -121,6 +121,7 @@
2
     mme_ue->enb_ostream_id = enb_ue->enb_ostream_id;
3
     memcpy(&mme_ue->tai, &enb_ue->saved.tai, sizeof(ogs_eps_tai_t));
4
     memcpy(&mme_ue->e_cgi, &enb_ue->saved.e_cgi, sizeof(ogs_e_cgi_t));
5
+    mme_ue->ue_location_timestamp = ogs_time_now();
6
 
7
     /* Check TAI */
8
     served_tai_index = mme_find_served_tai(&mme_ue->tai);
9
@@ -538,6 +539,7 @@
10
     mme_ue->enb_ostream_id = enb_ue->enb_ostream_id;
11
     memcpy(&mme_ue->tai, &enb_ue->saved.tai, sizeof(ogs_eps_tai_t));
12
     memcpy(&mme_ue->e_cgi, &enb_ue->saved.e_cgi, sizeof(ogs_e_cgi_t));
13
+    mme_ue->ue_location_timestamp = ogs_time_now();
14
 
15
     /* Check TAI */
16
     served_tai_index = mme_find_served_tai(&mme_ue->tai);
17
@@ -655,6 +657,7 @@
18
     mme_ue->enb_ostream_id = enb_ue->enb_ostream_id;
19
     memcpy(&mme_ue->tai, &enb_ue->saved.tai, sizeof(ogs_eps_tai_t));
20
     memcpy(&mme_ue->e_cgi, &enb_ue->saved.e_cgi, sizeof(ogs_e_cgi_t));
21
+    mme_ue->ue_location_timestamp = ogs_time_now();
22
 
23
     /* Check TAI */
24
     served_tai_index = mme_find_served_tai(&mme_ue->tai);
25
open5gs_2.4.9.32.def9.202208250002.tar.xz/src/mme/mme-context.h -> open5gs_2.4.9.34.83a20.202208260002.tar.xz/src/mme/mme-context.h Changed
9
 
1
@@ -368,6 +368,7 @@
2
     uint16_t        enb_ostream_id;
3
     ogs_eps_tai_t   tai;
4
     ogs_e_cgi_t     e_cgi;
5
+    ogs_time_t      ue_location_timestamp;
6
     ogs_plmn_id_t   last_visited_plmn_id;
7
 
8
 #define SECURITY_CONTEXT_IS_VALID(__mME) \
9
open5gs_2.4.9.32.def9.202208250002.tar.xz/src/mme/mme-fd-path.c -> open5gs_2.4.9.34.83a20.202208260002.tar.xz/src/mme/mme-fd-path.c Changed
201
 
1
@@ -23,6 +23,9 @@
2
 /* handler for Cancel-Location-Request cb */
3
 static struct disp_hdl *hdl_s6a_clr = NULL;
4
 
5
+/* handler for Insert-Subscriber-Data-Request cb */
6
+static struct disp_hdl *hdl_s6a_idr = NULL;
7
+
8
 static struct session_handler *mme_s6a_reg = NULL;
9
 
10
 struct sess_state {
11
@@ -1368,7 +1371,8 @@
12
         ((ts.tv_nsec - sess_data->ts.tv_nsec) / 1000);
13
     if (ogs_diam_logger_self()->stats.nb_recv) {
14
         /* Ponderate in the avg */
15
-        ogs_diam_logger_self()->stats.avg = (ogs_diam_logger_self()->stats.avg *
16
+        ogs_diam_logger_self()->stats.avg =
17
+            (ogs_diam_logger_self()->stats.avg *
18
             ogs_diam_logger_self()->stats.nb_recv + dur) /
19
             (ogs_diam_logger_self()->stats.nb_recv + 1);
20
         /* Min, max */
21
@@ -1541,6 +1545,237 @@
22
     return 0;
23
 }
24
 
25
+/* Callback for incoming Insert-Subscriber-Data-Request messages
26
+ * 29.272 5.2.2.1.2 */
27
+static int mme_ogs_diam_s6a_idr_cb( struct msg **msg, struct avp *avp,
28
+        struct session *session, void *opaque, enum disp_action *act)
29
+{
30
+    int ret;
31
+    
32
+    mme_ue_t *mme_ue = NULL;
33
+
34
+    struct msg *ans, *qry;
35
+    ogs_diam_s6a_idr_message_t *idr_message = NULL;    
36
+
37
+    struct avp_hdr *hdr;
38
+    union avp_value val;
39
+
40
+    char imsi_bcdOGS_MAX_IMSI_BCD_LEN+1;
41
+
42
+    uint32_t result_code = 0;
43
+
44
+    ogs_assert(msg);
45
+
46
+    ogs_diam_s6a_message_t *s6a_message = NULL;
47
+
48
+    ogs_debug("Insert-Subscriber-Data-Request");
49
+
50
+    s6a_message = ogs_calloc(1, sizeof(ogs_diam_s6a_message_t));
51
+    ogs_assert(s6a_message);
52
+    s6a_message->cmd_code = OGS_DIAM_S6A_CMD_CODE_INSERT_SUBSCRIBER_DATA;
53
+    idr_message = &s6a_message->idr_message;
54
+    ogs_assert(idr_message);
55
+
56
+    /* Create answer header */
57
+    qry = *msg;
58
+    ret = fd_msg_new_answer_from_req(fd_g_config->cnf_dict, msg, 0);
59
+    ogs_assert(ret == 0);
60
+    ans = *msg;
61
+
62
+    ret = fd_msg_search_avp(qry, ogs_diam_user_name, &avp);
63
+    ogs_assert(ret == 0);
64
+    ret = fd_msg_avp_hdr(avp, &hdr);
65
+    ogs_assert(ret == 0);
66
+
67
+    ogs_cpystrn(imsi_bcd, (char*)hdr->avp_value->os.data,
68
+        ogs_min(hdr->avp_value->os.len, OGS_MAX_IMSI_BCD_LEN)+1);
69
+
70
+    mme_ue = mme_ue_find_by_imsi_bcd(imsi_bcd);
71
+
72
+    if (!mme_ue) {
73
+        ogs_error("Insert Subscriber Data for Unknown IMSI%s", imsi_bcd);
74
+        result_code = OGS_DIAM_S6A_ERROR_USER_UNKNOWN;
75
+        goto out;
76
+    }
77
+
78
+    /* AVP: 'Subscription-Data'(1400)
79
+     * The Subscription-Data AVP contains the information related to the user
80
+     * profile relevant for EPS and GERAN/UTRAN.
81
+     * Reference: 3GPP TS 29.272-f70
82
+     */
83
+    ret = fd_msg_search_avp(*msg, ogs_diam_s6a_subscription_data, &avp);
84
+    ogs_assert(ret == 0);
85
+    if (avp) {
86
+        ret = fd_msg_avp_hdr(avp, &hdr);
87
+        ogs_assert(ret == 0);
88
+        if (hdr->avp_value->os.len) {
89
+            ogs_debug("WIP: Process New Subscription Data");
90
+        } else {
91
+            ogs_debug("No Sub Data, ok to check IDR Flags");
92
+        }
93
+    }
94
+
95
+    ret = fd_msg_search_avp(qry, ogs_diam_s6a_idr_flags, &avp);
96
+    ogs_assert(ret == 0);
97
+    if (avp) {
98
+        ret = fd_msg_avp_hdr(avp, &hdr);
99
+        ogs_assert(ret == 0);
100
+        idr_message->idr_flags = hdr->avp_value->i32;
101
+    } else {
102
+        ogs_error("Insert Subscriber Data does not contain any IDR Flags "
103
+                "for IMSI%s", imsi_bcd);
104
+        /* Set the Origin-Host, Origin-Realm, and Result-Code AVPs */
105
+        ret = fd_msg_rescode_set(ans,
106
+                (char*)"DIAMETER_UNABLE_TO_COMPLY", NULL, NULL, 1);
107
+        ogs_assert(ret == 0);
108
+        goto outnoexp;        
109
+    }
110
+
111
+    if (idr_message->idr_flags & OGS_DIAM_S6A_IDR_FLAGS_EPS_LOCATION_INFO) {
112
+        char buf8;
113
+
114
+        uint8_t ida_ecgi7;
115
+        uint8_t ida_tai5;
116
+        ogs_time_t ida_age;
117
+
118
+        ogs_nas_plmn_id_t ida_plmn_buf;
119
+        char ida_cell_id_hex9;
120
+        char ida_tac_hex5;
121
+
122
+        uint32_t ida_cell_id = mme_ue->e_cgi.cell_id;
123
+        uint16_t ida_tac = mme_ue->tai.tac;
124
+        
125
+        struct avp *avp_mme_location_information;
126
+        struct avp *avp_e_utran_cell_global_identity;
127
+        struct avp *avp_tracking_area_identity;
128
+        struct avp *avp_age_of_location_information;
129
+
130
+        ogs_snprintf(ida_cell_id_hex, sizeof(ida_cell_id_hex),
131
+                "%08x", ida_cell_id);
132
+        memcpy(ida_ecgi,
133
+                ogs_nas_from_plmn_id(&ida_plmn_buf, &mme_ue->e_cgi.plmn_id), 3);
134
+        memcpy(ida_ecgi + 3,
135
+                OGS_HEX(ida_cell_id_hex, sizeof(ida_cell_id_hex), buf), 5);
136
+
137
+        ogs_snprintf(ida_tac_hex, sizeof(ida_tac_hex), "%04x", ida_tac);
138
+        memcpy(ida_tai,
139
+                ogs_nas_from_plmn_id(&ida_plmn_buf, &mme_ue->tai.plmn_id), 3);
140
+        memcpy(ida_tai + 3, OGS_HEX(ida_tac_hex, sizeof(ida_tac_hex), buf), 2);
141
+
142
+        ida_age =
143
+            (ogs_time_now() - mme_ue->ue_location_timestamp) / 1000000 / 60;
144
+
145
+        /* Set the EPS-Location-Information AVP */
146
+        ret = fd_msg_avp_new(ogs_diam_s6a_eps_location_information, 0, &avp);
147
+        ogs_assert(ret == 0);
148
+        ret = fd_msg_avp_new(ogs_diam_s6a_mme_location_information,
149
+                0, &avp_mme_location_information);
150
+        ogs_assert(ret == 0);
151
+
152
+        ret = fd_msg_avp_new(ogs_diam_s6a_e_utran_cell_global_identity,
153
+                0, &avp_e_utran_cell_global_identity);
154
+        ogs_assert(ret == 0);
155
+        val.os.data = ida_ecgi;
156
+        val.os.len  = 7;
157
+        ret = fd_msg_avp_setvalue(avp_e_utran_cell_global_identity, &val);
158
+        ogs_assert(ret == 0);
159
+        ret = fd_msg_avp_add(avp_mme_location_information,
160
+                MSG_BRW_LAST_CHILD, avp_e_utran_cell_global_identity);
161
+        ogs_assert(ret == 0);
162
+
163
+        ret = fd_msg_avp_new(ogs_diam_s6a_tracking_area_identity,
164
+                0, &avp_tracking_area_identity);
165
+        ogs_assert(ret == 0);
166
+        val.os.data = ida_tai;
167
+        val.os.len  = 5;
168
+        ret = fd_msg_avp_setvalue(avp_tracking_area_identity, &val);
169
+        ogs_assert(ret == 0);
170
+        ret = fd_msg_avp_add(avp_mme_location_information,
171
+                MSG_BRW_LAST_CHILD, avp_tracking_area_identity);
172
+        ogs_assert(ret == 0);
173
+
174
+        ret = fd_msg_avp_new(ogs_diam_s6a_age_of_location_information,
175
+                0, &avp_age_of_location_information);
176
+        ogs_assert(ret == 0);
177
+        val.i32 = ida_age;
178
+        ret = fd_msg_avp_setvalue(avp_age_of_location_information, &val);
179
+        ogs_assert(ret == 0);
180
+        ret = fd_msg_avp_add(avp_mme_location_information,
181
+                MSG_BRW_LAST_CHILD, avp_age_of_location_information);
182
+        ogs_assert(ret == 0);
183
+
184
+        ret = fd_msg_avp_add(avp,
185
+                MSG_BRW_LAST_CHILD, avp_mme_location_information);
186
+        ogs_assert(ret == 0);
187
+
188
+        ret = fd_msg_avp_add(ans, MSG_BRW_LAST_CHILD, avp);
189
+        ogs_assert(ret == 0);        
190
+    } else {
191
+        ogs_error("Insert Subscriber Data "
192
+                "with unsupported IDR Flags for IMSI%s", imsi_bcd);
193
+        /* Set the Origin-Host, Origin-Realm, and Result-Code AVPs */
194
+        ret = fd_msg_rescode_set(
195
+                ans, (char*)"DIAMETER_UNABLE_TO_COMPLY", NULL, NULL, 1);
196
+        ogs_assert(ret == 0);
197
+        goto outnoexp;        
198
+    }
199
+
200
+    /* Set the Origin-Host, Origin-Realm, andResult-Code AVPs */
201
open5gs_2.4.9.32.def9.202208250002.tar.xz/src/mme/mme-sm.c -> open5gs_2.4.9.34.83a20.202208260002.tar.xz/src/mme/mme-sm.c Changed
10
 
1
@@ -434,6 +434,8 @@
2
         case OGS_DIAM_S6A_CMD_CODE_CANCEL_LOCATION:
3
             mme_s6a_handle_clr(mme_ue, &s6a_message->clr_message);
4
             break;
5
+        case OGS_DIAM_S6A_CMD_CODE_INSERT_SUBSCRIBER_DATA:
6
+            break;            
7
         default:
8
             ogs_error("Invalid Type%d", s6a_message->cmd_code);
9
             break;
10
open5gs_2.4.9.32.def9.202208250002.tar.xz/src/mme/s1ap-handler.c -> open5gs_2.4.9.34.83a20.202208260002.tar.xz/src/mme/s1ap-handler.c Changed
25
 
1
@@ -511,6 +511,7 @@
2
 
3
         memcpy(&mme_ue->tai, &enb_ue->saved.tai, sizeof(ogs_eps_tai_t));
4
         memcpy(&mme_ue->e_cgi, &enb_ue->saved.e_cgi, sizeof(ogs_e_cgi_t));
5
+        mme_ue->ue_location_timestamp = ogs_time_now();
6
     } else {
7
         ogs_fatal("No UE Context in UplinkNASTransport");
8
         ogs_assert_if_reached();
9
@@ -1897,6 +1898,7 @@
10
     mme_ue->enb_ostream_id = enb_ue->enb_ostream_id;
11
     memcpy(&mme_ue->tai, &enb_ue->saved.tai, sizeof(ogs_eps_tai_t));
12
     memcpy(&mme_ue->e_cgi, &enb_ue->saved.e_cgi, sizeof(ogs_e_cgi_t));
13
+    mme_ue->ue_location_timestamp = ogs_time_now();
14
 
15
     ogs_assert(UESecurityCapabilities);
16
     encryptionAlgorithms =
17
@@ -2939,6 +2941,7 @@
18
     mme_ue->enb_ostream_id = target_ue->enb_ostream_id;
19
     memcpy(&mme_ue->tai, &target_ue->saved.tai, sizeof(ogs_eps_tai_t));
20
     memcpy(&mme_ue->e_cgi, &target_ue->saved.e_cgi, sizeof(ogs_e_cgi_t));
21
+    mme_ue->ue_location_timestamp = ogs_time_now();
22
 
23
     ogs_assert(OGS_OK ==
24
         s1ap_send_ue_context_release_command(source_ue,
25