Changes of Revision 583

open5gs_2.7.0.66.dcdfc.202401242026.dsc -> open5gs_2.7.0.70.3886.202401252026.dsc Changed
x
 
1
@@ -2,7 +2,7 @@
2
 Source: open5gs
3
 Binary: open5gs-common, open5gs-mme, open5gs-sgwc, open5gs-smf, open5gs-amf, open5gs-sgwu, open5gs-upf, open5gs-hss, open5gs-pcrf, open5gs-nrf, open5gs-scp, open5gs-sepp, open5gs-ausf, open5gs-udm, open5gs-pcf, open5gs-nssf, open5gs-bsf, open5gs-udr, open5gs, open5gs-dbg
4
 Architecture: any
5
-Version: 2.7.0.66.dcdfc.202401242026
6
+Version: 2.7.0.70.3886.202401252026
7
 Maintainer: Harald Welte <laforge@gnumonks.org>
8
 Uploaders: Sukchan Lee <acetcom@gmail.com>
9
 Homepage: https://open5gs.org
10
@@ -32,8 +32,8 @@
11
  open5gs-udr deb net optional arch=any
12
  open5gs-upf deb net optional arch=any
13
 Checksums-Sha1:
14
- a70ac2edd1aeddc5da7f989e8e8c411acc543a65 14471100 open5gs_2.7.0.66.dcdfc.202401242026.tar.xz
15
+ ce67d1e43c28a014e219e95e57e36ccd44f6d84d 14470816 open5gs_2.7.0.70.3886.202401252026.tar.xz
16
 Checksums-Sha256:
17
- 0be063d1a73e3fd45b373a2a816db5317604452956435fef1b238d1fb94746b7 14471100 open5gs_2.7.0.66.dcdfc.202401242026.tar.xz
18
+ 6cbffa27324151b8ef59753503d8a6c5c926b150c38acb420283417dde7ca403 14470816 open5gs_2.7.0.70.3886.202401252026.tar.xz
19
 Files:
20
- 3e1c2fd0bbfa2cccc9f3b7fa969f956a 14471100 open5gs_2.7.0.66.dcdfc.202401242026.tar.xz
21
+ a4e341af9195cb3686ccbeec0d533892 14470816 open5gs_2.7.0.70.3886.202401252026.tar.xz
22
open5gs_2.7.0.66.dcdfc.202401242026.tar.xz/.tarball-version -> open5gs_2.7.0.70.3886.202401252026.tar.xz/.tarball-version Changed
4
 
1
@@ -1 +1 @@
2
-2.7.0.66-dcdfc.202401242026
3
+2.7.0.70-3886.202401252026
4
open5gs_2.7.0.66.dcdfc.202401242026.tar.xz/debian/changelog -> open5gs_2.7.0.70.3886.202401252026.tar.xz/debian/changelog Changed
12
 
1
@@ -1,8 +1,8 @@
2
-open5gs (2.7.0.66.dcdfc.202401242026) unstable; urgency=medium
3
+open5gs (2.7.0.70.3886.202401252026) unstable; urgency=medium
4
 
5
   * Automatically generated changelog entry for building the Osmocom nightly feed
6
 
7
- -- Osmocom OBS scripts <info@osmocom.org>  Wed, 24 Jan 2024 20:27:40 +0000
8
+ -- Osmocom OBS scripts <info@osmocom.org>  Thu, 25 Jan 2024 20:27:32 +0000
9
 
10
 open5gs (2.7.0) unstable; urgency=medium
11
 
12
open5gs_2.7.0.66.dcdfc.202401242026.tar.xz/lib/core/ogs-timer.c -> open5gs_2.7.0.70.3886.202401252026.tar.xz/lib/core/ogs-timer.c Changed
9
 
1
@@ -146,7 +146,6 @@
2
     manager = timer->manager;
3
     ogs_assert(manager);
4
     timer = ogs_timer_cycle(manager, timer);
5
-    ogs_assert(timer);
6
     if (!timer) {
7
         ogs_fatal("ogs_timer_stop() failed in %s", file_line);
8
         ogs_assert_if_reached();
9
open5gs_2.7.0.66.dcdfc.202401242026.tar.xz/lib/diameter/gx/message.c -> open5gs_2.7.0.70.3886.202401252026.tar.xz/lib/diameter/gx/message.c Changed
7
 
1
@@ -1,4 +1,4 @@
2
-/*
3
+/* Gx Interface, 3GPP TS 29.212 section 4
4
  * Copyright (C) 2019 by Sukchan Lee <acetcom@gmail.com>
5
  *
6
  * This file is part of Open5GS.
7
open5gs_2.7.0.66.dcdfc.202401242026.tar.xz/lib/diameter/gx/message.h -> open5gs_2.7.0.70.3886.202401252026.tar.xz/lib/diameter/gx/message.h Changed
7
 
1
@@ -1,4 +1,4 @@
2
-/*
3
+/* Gx Interface, 3GPP TS 29.212 section 4
4
  * Copyright (C) 2019 by Sukchan Lee <acetcom@gmail.com>
5
  *
6
  * This file is part of Open5GS.
7
open5gs_2.7.0.66.dcdfc.202401242026.tar.xz/lib/diameter/gx/ogs-diameter-gx.h -> open5gs_2.7.0.70.3886.202401252026.tar.xz/lib/diameter/gx/ogs-diameter-gx.h Changed
7
 
1
@@ -1,4 +1,4 @@
2
-/*
3
+/* Gx Interface, 3GPP TS 29.212 section 4
4
  * Copyright (C) 2019 by Sukchan Lee <acetcom@gmail.com>
5
  *
6
  * This file is part of Open5GS.
7
open5gs_2.7.0.66.dcdfc.202401242026.tar.xz/lib/diameter/gy/message.c -> open5gs_2.7.0.70.3886.202401252026.tar.xz/lib/diameter/gy/message.c Changed
7
 
1
@@ -1,4 +1,4 @@
2
-/*
3
+/* Gy Interface, 3GPP TS 32.299
4
  * Copyright (C) 2019 by Sukchan Lee <acetcom@gmail.com>
5
  * Copyright (C) 2022 by sysmocom - s.f.m.c. GmbH <info@sysmocom.de>
6
  *
7
open5gs_2.7.0.66.dcdfc.202401242026.tar.xz/lib/diameter/gy/message.h -> open5gs_2.7.0.70.3886.202401252026.tar.xz/lib/diameter/gy/message.h Changed
7
 
1
@@ -1,4 +1,4 @@
2
-/*
3
+/* Gy Interface, 3GPP TS 32.299
4
  * Copyright (C) 2019 by Sukchan Lee <acetcom@gmail.com>
5
  * Copyright (C) 2022 by sysmocom - s.f.m.c. GmbH <info@sysmocom.de>
6
  *
7
open5gs_2.7.0.66.dcdfc.202401242026.tar.xz/lib/diameter/gy/ogs-diameter-gy.h -> open5gs_2.7.0.70.3886.202401252026.tar.xz/lib/diameter/gy/ogs-diameter-gy.h Changed
7
 
1
@@ -1,4 +1,4 @@
2
-/*
3
+/* Gy Interface, 3GPP TS 32.299
4
  * Copyright (C) 2019 by Sukchan Lee <acetcom@gmail.com>
5
  * Copyright (C) 2022 by sysmocom - s.f.m.c. GmbH <info@sysmocom.de>
6
  *
7
open5gs_2.7.0.66.dcdfc.202401242026.tar.xz/src/mme/mme-sm.c -> open5gs_2.7.0.70.3886.202401252026.tar.xz/src/mme/mme-sm.c Changed
66
 
1
@@ -407,8 +407,53 @@
2
         break;
3
 
4
     case MME_EVENT_S6A_MESSAGE:
5
-        mme_ue = e->mme_ue;
6
-        ogs_assert(mme_ue);
7
+        /*
8
+         * A race condition can occur in the following situations.
9
+         * In conclusion, we can use this situation to determine
10
+         * whether or not the UE Context has been removed and avoiding a crash.
11
+         *
12
+         * For example, suppose a UE Context is removed in the followings.
13
+         *
14
+         * 1. Attach Request
15
+         * 2. Authentication-Information-Request
16
+         * 3. Authentication-Information-Answer
17
+         * 4. Authentication Request
18
+         * 5. Authentication Response(MAC Failed)
19
+         * 6. Authentication Reject
20
+         * 7. UEContextReleaseCommand
21
+         * 8. UEContextReleaseComplete
22
+         *
23
+         * The MME then sends a Purge-UE-request to the HSS and deletes
24
+         * the UE context as soon as it receives a Purge-UE-Answer.
25
+         *
26
+         * Suppose an Attach Request is received from the same UE
27
+         * between Purge-UE-Request/Answer, then the MME and HSS start
28
+         * the Authentication-Information-Request/Answer process.
29
+         *
30
+         * This can lead to the following situations.
31
+         *
32
+         * 1. Purge-UE-Request
33
+         * 2. Attach Request
34
+         * 3. Authentication-Information-Request
35
+         * 4. Purge-UE-Answer
36
+         * 5. UE Context Removed
37
+         * 6. Authentication-Information-Answer
38
+         *
39
+         * Since the UE Context has already been deleted
40
+         * when the Authentication-Information-Answer is received,
41
+         * it cannot be processed properly.
42
+         *
43
+         * Therefore, mme_ue_cycle() is used to check
44
+         * whether the UE Context has been deleted and
45
+         * decide whether to process or
46
+         * ignore the Authentication-Information-Answer as shown below.
47
+         */
48
+        mme_ue = mme_ue_cycle(e->mme_ue);
49
+        if (!mme_ue) {
50
+            ogs_error("UE(mme-ue) context has already been removed");
51
+            goto cleanup;
52
+        }
53
+
54
         s6a_message = e->s6a_message;
55
         ogs_assert(s6a_message);
56
 
57
@@ -473,6 +518,8 @@
58
             ogs_error("Invalid Type%d", s6a_message->cmd_code);
59
             break;
60
         }
61
+
62
+cleanup:
63
         ogs_subscription_data_free(&s6a_message->idr_message.subscription_data);
64
         ogs_subscription_data_free(&s6a_message->ula_message.subscription_data);
65
         ogs_free(s6a_message);
66
open5gs_2.7.0.66.dcdfc.202401242026.tar.xz/src/mme/s1ap-build.c -> open5gs_2.7.0.70.3886.202401252026.tar.xz/src/mme/s1ap-build.c Changed
31
 
1
@@ -574,7 +574,28 @@
2
         emmbuf = NULL;
3
     }
4
 
5
-    ogs_assert(E_RABToBeSetupListCtxtSUReq->list.count);
6
+    if (!E_RABToBeSetupListCtxtSUReq->list.count) {
7
+        ogs_error("    IMSI%s NAS-EPS Type%d "
8
+                "ENB_UE_S1AP_ID%d MME_UE_S1AP_ID%d",
9
+                mme_ue->imsi_bcd, mme_ue->nas_eps.type,
10
+                enb_ue->enb_ue_s1ap_id, enb_ue->mme_ue_s1ap_id);
11
+        ogs_list_for_each(&mme_ue->sess_list, sess) {
12
+            ogs_error("    APN%s",
13
+                    sess->session ? sess->session->name : "Unknown");
14
+            ogs_list_for_each(&sess->bearer_list, bearer) {
15
+                if (OGS_FSM_CHECK(&bearer->sm, esm_state_inactive))
16
+                    ogs_error("    IN-ACTIVE");
17
+                else if (OGS_FSM_CHECK(&bearer->sm, esm_state_active))
18
+                    ogs_error("    ACTIVE");
19
+                else
20
+                    ogs_error("    OTHER STATE");
21
+
22
+                ogs_error("    EBI%d QCI%d SGW-S1U-TEID%d",
23
+                        bearer->ebi, bearer->qos.index, bearer->sgw_s1u_teid);
24
+            }
25
+        }
26
+        return NULL;
27
+    }
28
 
29
     ie = CALLOC(1, sizeof(S1AP_InitialContextSetupRequestIEs_t));
30
     ASN_SEQUENCE_ADD(&InitialContextSetupRequest->protocolIEs, ie);
31
open5gs_2.7.0.66.dcdfc.202401242026.tar.xz/src/pcrf/pcrf-gx-path.c -> open5gs_2.7.0.70.3886.202401252026.tar.xz/src/pcrf/pcrf-gx-path.c Changed
201
 
1
@@ -1,4 +1,4 @@
2
-/*
3
+/* Gx Interface, 3GPP TS 29.212 section 4
4
  * Copyright (C) 2019 by Sukchan Lee <acetcom@gmail.com>
5
  *
6
  * This file is part of Open5GS.
7
@@ -55,8 +55,8 @@
8
 static ogs_thread_mutex_t sess_state_mutex;
9
 
10
 static struct session_handler *pcrf_gx_reg = NULL;
11
-static struct disp_hdl *hdl_gx_fb = NULL; 
12
-static struct disp_hdl *hdl_gx_ccr = NULL; 
13
+static struct disp_hdl *hdl_gx_fb = NULL;
14
+static struct disp_hdl *hdl_gx_ccr = NULL;
15
 
16
 static void pcrf_gx_raa_cb(void *data, struct msg **msg);
17
 
18
@@ -169,7 +169,7 @@
19
 
20
     ogs_assert(gx);
21
     ogs_assert(sid);
22
-    
23
+
24
     ogs_list_for_each(&gx->rx_list, rx_sess_data) {
25
         if (!strcmp((char *)rx_sess_data->sid, (char *)sid))
26
             return rx_sess_data;
27
@@ -199,13 +199,13 @@
28
         ogs_free(sess_data->sid);
29
 
30
     remove_rx_state_all(sess_data);
31
-    
32
+
33
     ogs_thread_mutex_lock(&sess_state_mutex);
34
     ogs_pool_free(&sess_state_pool, sess_data);
35
     ogs_thread_mutex_unlock(&sess_state_mutex);
36
 }
37
 
38
-static int pcrf_gx_fb_cb(struct msg **msg, struct avp *avp, 
39
+static int pcrf_gx_fb_cb(struct msg **msg, struct avp *avp,
40
         struct session *sess, void *opaque, enum disp_action *act)
41
 {
42
     /* This CB should never be called */
43
@@ -214,7 +214,7 @@
44
     return ENOTSUP;
45
 }
46
 
47
-static int pcrf_gx_ccr_cb( struct msg **msg, struct avp *avp, 
48
+static int pcrf_gx_ccr_cb( struct msg **msg, struct avp *avp,
49
         struct session *sess, void *opaque, enum disp_action *act)
50
 {
51
     int rv;
52
@@ -486,7 +486,7 @@
53
                 ret = fd_msg_avp_add (avp, MSG_BRW_LAST_CHILD, avpch1);
54
                 ogs_assert(ret == 0);
55
             }
56
-            
57
+
58
             if (gx_message.session_data.session.ambr.downlink) {
59
                 ret = fd_msg_avp_new(
60
                         ogs_diam_gx_apn_aggregate_max_bitrate_dl, 0, &avpch1);
61
@@ -779,7 +779,7 @@
62
                 rx_message->result_code = OGS_DIAM_INVALID_AVP_VALUE;
63
                 goto out;
64
             }
65
-            
66
+
67
             for (j = 0; j < gx_message.session_data.num_of_pcc_rule; j++) {
68
                 if (gx_message.session_data.pcc_rulej.qos.index ==
69
                         qos_index) {
70
@@ -814,7 +814,7 @@
71
                 ogs_error("CHECK WEBUI : No PCC Rule in DB QoS Index:%d",
72
                         qos_index);
73
                 ogs_error("Please add PCC Rule using WEBUI");
74
-                rx_message->result_code = 
75
+                rx_message->result_code =
76
                     OGS_DIAM_RX_DIAMETER_REQUESTED_SERVICE_NOT_AUTHORIZED;
77
                 goto out;
78
             }
79
@@ -827,7 +827,7 @@
80
             }
81
 
82
             if (!pcc_rule) {
83
-                pcc_rule = 
84
+                pcc_rule =
85
                     &rx_sess_data->pcc_rulerx_sess_data->num_of_pcc_rule;
86
 
87
                 /* Device PCC Rule Info from DB Profile */
88
@@ -871,7 +871,7 @@
89
                     rv = ogs_pcc_rule_install_flow_from_media(
90
                             pcc_rule, media_component);
91
                     if (rv != OGS_OK) {
92
-                        rx_message->result_code = 
93
+                        rx_message->result_code =
94
                             OGS_DIAM_RX_DIAMETER_FILTER_RESTRICTIONS;
95
                         ogs_error("install_flow() failed");
96
                         goto out;
97
@@ -995,16 +995,16 @@
98
 
99
     ret = clock_gettime(CLOCK_REALTIME, &sess_data->ts);
100
     ogs_assert(ret == 0);
101
-    
102
-    /* Keep a pointer to the session data for debug purpose, 
103
+
104
+    /* Keep a pointer to the session data for debug purpose,
105
      * in real life we would not need it */
106
     svg = sess_data;
107
-    
108
+
109
     /* Store this value in the session */
110
     ret = fd_sess_state_store(pcrf_gx_reg, session, &sess_data);
111
     ogs_assert(ret == 0);
112
     ogs_assert(sess_data == NULL);
113
-    
114
+
115
     /* Send the request */
116
     ret = fd_msg_send(&req, pcrf_gx_raa_cb, svg);
117
     ogs_assert(ret == 0);
118
@@ -1043,7 +1043,7 @@
119
     unsigned long dur;
120
     int error = 0;
121
     int new;
122
-    
123
+
124
     uint32_t result_code;
125
 
126
     ogs_debug("PCRF Re-Auth-Answer");
127
@@ -1055,7 +1055,7 @@
128
     ret = fd_msg_sess_get(fd_g_config->cnf_dict, *msg, &session, &new);
129
     ogs_assert(ret == 0);
130
     ogs_assert(new == 0);
131
-    
132
+
133
     ret = fd_sess_state_retrieve(pcrf_gx_reg, session, &sess_data);
134
     ogs_assert(ret == 0);
135
     ogs_assert(sess_data);
136
@@ -1116,11 +1116,11 @@
137
 
138
     /* Free the message */
139
     ogs_assert(pthread_mutex_lock(&ogs_diam_logger_self()->stats_lock) == 0);
140
-    dur = ((ts.tv_sec - sess_data->ts.tv_sec) * 1000000) + 
141
+    dur = ((ts.tv_sec - sess_data->ts.tv_sec) * 1000000) +
142
         ((ts.tv_nsec - sess_data->ts.tv_nsec) / 1000);
143
     if (ogs_diam_logger_self()->stats.nb_recv) {
144
         /* Ponderate in the avg */
145
-        ogs_diam_logger_self()->stats.avg = (ogs_diam_logger_self()->stats.avg * 
146
+        ogs_diam_logger_self()->stats.avg = (ogs_diam_logger_self()->stats.avg *
147
             ogs_diam_logger_self()->stats.nb_recv + dur) /
148
             (ogs_diam_logger_self()->stats.nb_recv + 1);
149
         /* Min, max */
150
@@ -1135,18 +1135,18 @@
151
     }
152
     if (error)
153
         ogs_diam_logger_self()->stats.nb_errs++;
154
-    else 
155
+    else
156
         ogs_diam_logger_self()->stats.nb_recv++;
157
 
158
     ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
159
-    
160
+
161
     /* Display how long it took */
162
     if (ts.tv_nsec > sess_data->ts.tv_nsec)
163
-        ogs_trace("in %d.%06ld sec", 
164
+        ogs_trace("in %d.%06ld sec",
165
                 (int)(ts.tv_sec - sess_data->ts.tv_sec),
166
                 (long)(ts.tv_nsec - sess_data->ts.tv_nsec) / 1000);
167
     else
168
-        ogs_trace("in %d.%06ld sec", 
169
+        ogs_trace("in %d.%06ld sec",
170
                 (int)(ts.tv_sec + 1 - sess_data->ts.tv_sec),
171
                 (long)(1000000000 + ts.tv_nsec - sess_data->ts.tv_nsec) / 1000);
172
 
173
@@ -1157,7 +1157,7 @@
174
     ret = fd_msg_free(*msg);
175
     ogs_assert(ret == 0);
176
     *msg = NULL;
177
-    
178
+
179
     return;
180
 }
181
 
182
@@ -1202,7 +1202,7 @@
183
     int ret;
184
 
185
     ret = fd_sess_handler_destroy(&pcrf_gx_reg, NULL);
186
-    ogs_assert(ret == 0); 
187
+    ogs_assert(ret == 0);
188
 
189
     if (hdl_gx_fb)
190
         (void) fd_disp_unregister(&hdl_gx_fb, NULL);
191
@@ -1242,7 +1242,7 @@
192
             ret = fd_msg_avp_new(ogs_diam_gx_flow_information, 0, &avpch2);
193
             ogs_assert(ret == 0);
194
 
195
-            ret = fd_msg_avp_new(ogs_diam_gx_flow_direction, 0, &avpch3); 
196
+            ret = fd_msg_avp_new(ogs_diam_gx_flow_direction, 0, &avpch3);
197
             ogs_assert(ret == 0);
198
             val.i32 = flow->direction;
199
             ret = fd_msg_avp_setvalue(avpch3, &val);
200
@@ -1250,7 +1250,7 @@
201
open5gs_2.7.0.66.dcdfc.202401242026.tar.xz/src/smf/gx-handler.c -> open5gs_2.7.0.70.3886.202401252026.tar.xz/src/smf/gx-handler.c Changed
7
 
1
@@ -1,4 +1,4 @@
2
-/*
3
+/* Gx Interface, 3GPP TS 29.212 section 4
4
  * Copyright (C) 2019 by Sukchan Lee <acetcom@gmail.com>
5
  * Copyright (C) 2022 by sysmocom - s.f.m.c. GmbH <info@sysmocom.de>
6
  *
7
open5gs_2.7.0.66.dcdfc.202401242026.tar.xz/src/smf/gx-handler.h -> open5gs_2.7.0.70.3886.202401252026.tar.xz/src/smf/gx-handler.h Changed
7
 
1
@@ -1,4 +1,4 @@
2
-/*
3
+/* Gx Interface, 3GPP TS 29.212 section 4
4
  * Copyright (C) 2019 by Sukchan Lee <acetcom@gmail.com>
5
  *
6
  * This file is part of Open5GS.
7
open5gs_2.7.0.66.dcdfc.202401242026.tar.xz/src/smf/gx-path.c -> open5gs_2.7.0.70.3886.202401252026.tar.xz/src/smf/gx-path.c Changed
23
 
1
@@ -1,4 +1,4 @@
2
-/*
3
+/* Gx Interface, 3GPP TS 29.212 section 4
4
  * Copyright (C) 2019 by Sukchan Lee <acetcom@gmail.com>
5
  *
6
  * This file is part of Open5GS.
7
@@ -87,6 +87,7 @@
8
     ogs_thread_mutex_unlock(&sess_state_mutex);
9
 }
10
 
11
+/* 3GPP TS 29.212 5.6.2 Credit-Control-Request */
12
 void smf_gx_send_ccr(smf_sess_t *sess, ogs_gtp_xact_t *xact,
13
         uint32_t cc_request_type)
14
 {
15
@@ -701,6 +702,7 @@
16
     ogs_assert(pthread_mutex_unlock(&ogs_diam_logger_self()->stats_lock) == 0);
17
 }
18
 
19
+/* 3GPP TS 29.212 5b.6.5 Credit-Control-Answer */
20
 static void smf_gx_cca_cb(void *data, struct msg **msg)
21
 {
22
     int rv;
23
open5gs_2.7.0.66.dcdfc.202401242026.tar.xz/src/smf/gy-handler.c -> open5gs_2.7.0.70.3886.202401252026.tar.xz/src/smf/gy-handler.c Changed
7
 
1
@@ -1,4 +1,4 @@
2
-/*
3
+/* Gy Interface, 3GPP TS 32.299
4
  * Copyright (C) 2019 by Sukchan Lee <acetcom@gmail.com>
5
  * Copyright (C) 2022 by sysmocom - s.f.m.c. GmbH <info@sysmocom.de>
6
  *
7
open5gs_2.7.0.66.dcdfc.202401242026.tar.xz/src/smf/gy-handler.h -> open5gs_2.7.0.70.3886.202401252026.tar.xz/src/smf/gy-handler.h Changed
7
 
1
@@ -1,4 +1,4 @@
2
-/*
3
+/* Gy Interface, 3GPP TS 32.299
4
  * Copyright (C) 2019 by Sukchan Lee <acetcom@gmail.com>
5
  * Copyright (C) 2022 by sysmocom - s.f.m.c. GmbH <info@sysmocom.de>
6
  *
7
open5gs_2.7.0.66.dcdfc.202401242026.tar.xz/src/smf/gy-path.c -> open5gs_2.7.0.70.3886.202401252026.tar.xz/src/smf/gy-path.c Changed
7
 
1
@@ -1,4 +1,4 @@
2
-/*
3
+/* Gy Interface, 3GPP TS 32.299
4
  * Copyright (C) 2019 by Sukchan Lee <acetcom@gmail.com>
5
  * Copyright (C) 2022 by sysmocom - s.f.m.c. GmbH <info@sysmocom.de>
6
  *
7