Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-RAN
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wangjie
OpenXG-RAN
Commits
c4dc6892
Commit
c4dc6892
authored
Oct 15, 2020
by
matzakos
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Initial work on nr-pdcp SRB supporting functions and configuration
parent
c948fefe
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
215 additions
and
2 deletions
+215
-2
cmake_targets/CMakeLists.txt
cmake_targets/CMakeLists.txt
+1
-0
openair2/LAYER2/nr_pdcp/nr_pdcp_entity.c
openair2/LAYER2/nr_pdcp/nr_pdcp_entity.c
+27
-1
openair2/LAYER2/nr_pdcp/nr_pdcp_entity_srb.c
openair2/LAYER2/nr_pdcp/nr_pdcp_entity_srb.c
+75
-0
openair2/LAYER2/nr_pdcp/nr_pdcp_entity_srb.h
openair2/LAYER2/nr_pdcp/nr_pdcp_entity_srb.h
+38
-0
openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
+74
-1
No files found.
cmake_targets/CMakeLists.txt
View file @
c4dc6892
...
...
@@ -1841,6 +1841,7 @@ set(NR_PDCP_SRC
${
OPENAIR2_DIR
}
/LAYER2/nr_pdcp/nr_pdcp_ue_manager.c
${
OPENAIR2_DIR
}
/LAYER2/nr_pdcp/nr_pdcp_entity.c
${
OPENAIR2_DIR
}
/LAYER2/nr_pdcp/nr_pdcp_entity_drb_am.c
${
OPENAIR2_DIR
}
/LAYER2/nr_pdcp/nr_pdcp_entity_srb.c
)
set
(
L2_SRC
...
...
openair2/LAYER2/nr_pdcp/nr_pdcp_entity.c
View file @
c4dc6892
...
...
@@ -22,6 +22,7 @@
#include "nr_pdcp_entity.h"
#include "nr_pdcp_entity_drb_am.h"
#include "nr_pdcp_entity_srb.h"
#include "LOG/log.h"
...
...
@@ -34,7 +35,32 @@ nr_pdcp_entity_t *new_nr_pdcp_entity_srb(
char
*
buf
,
int
size
,
int
sdu_id
),
void
*
deliver_pdu_data
)
{
abort
();
nr_pdcp_entity_srb_t
*
ret
;
ret
=
calloc
(
1
,
sizeof
(
nr_pdcp_entity_srb_t
));
if
(
ret
==
NULL
)
{
LOG_E
(
PDCP
,
"%s:%d:%s: out of memory
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
);
exit
(
1
);
}
ret
->
common
.
recv_pdu
=
nr_pdcp_entity_srb_recv_pdu
;
ret
->
common
.
recv_sdu
=
nr_pdcp_entity_srb_recv_sdu
;
ret
->
common
.
set_integrity_key
=
nr_pdcp_entity_srb_set_integrity_key
;
ret
->
common
.
delete
=
nr_pdcp_entity_srb_delete
;
ret
->
common
.
deliver_sdu
=
deliver_sdu
;
ret
->
common
.
deliver_sdu_data
=
deliver_sdu_data
;
ret
->
common
.
deliver_pdu
=
deliver_pdu
;
ret
->
common
.
deliver_pdu_data
=
deliver_pdu_data
;
ret
->
srb_id
=
rb_id
;
ret
->
common
.
maximum_nr_pdcp_sn
=
4095
;
return
(
nr_pdcp_entity_t
*
)
ret
;
}
nr_pdcp_entity_t
*
new_nr_pdcp_entity_drb_am
(
...
...
openair2/LAYER2/nr_pdcp/nr_pdcp_entity_srb.c
0 → 100644
View file @
c4dc6892
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#include "nr_pdcp_entity_srb.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void
nr_pdcp_entity_srb_recv_pdu
(
nr_pdcp_entity_t
*
_entity
,
char
*
buffer
,
int
size
)
{
nr_pdcp_entity_srb_t
*
entity
=
(
nr_pdcp_entity_srb_t
*
)
_entity
;
if
(
size
<
2
)
abort
();
entity
->
common
.
deliver_sdu
(
entity
->
common
.
deliver_sdu_data
,
(
nr_pdcp_entity_t
*
)
entity
,
buffer
+
2
,
size
-
2
);
}
void
nr_pdcp_entity_srb_recv_sdu
(
nr_pdcp_entity_t
*
_entity
,
char
*
buffer
,
int
size
,
int
sdu_id
)
{
nr_pdcp_entity_srb_t
*
entity
=
(
nr_pdcp_entity_srb_t
*
)
_entity
;
int
sn
;
char
buf
[
size
+
6
];
sn
=
entity
->
common
.
next_nr_pdcp_tx_sn
;
entity
->
common
.
next_nr_pdcp_tx_sn
++
;
if
(
entity
->
common
.
next_nr_pdcp_tx_sn
>
entity
->
common
.
maximum_nr_pdcp_sn
)
{
entity
->
common
.
next_nr_pdcp_tx_sn
=
0
;
entity
->
common
.
tx_hfn
++
;
}
buf
[
0
]
=
(
sn
>>
8
)
&
0x0f
;
buf
[
1
]
=
sn
&
0xff
;
memcpy
(
buf
+
2
,
buffer
,
size
);
/* For now use padding for the MAC-I bytes (normally carrying message authentication code)
* which come after the data payload bytes (38.323, section 6.2.2.1) */
for
(
int
i
=
size
;
i
<
size
+
4
;
i
++
)
buf
[
i
]
=
0
;
entity
->
common
.
deliver_pdu
(
entity
->
common
.
deliver_pdu_data
,
(
nr_pdcp_entity_t
*
)
entity
,
buf
,
size
+
6
,
sdu_id
);
}
void
nr_pdcp_entity_srb_set_integrity_key
(
nr_pdcp_entity_t
*
_entity
,
char
*
key
)
{
/* nothing to do */
}
void
nr_pdcp_entity_srb_delete
(
nr_pdcp_entity_t
*
_entity
)
{
nr_pdcp_entity_srb_t
*
entity
=
(
nr_pdcp_entity_srb_t
*
)
_entity
;
free
(
entity
);
}
openair2/LAYER2/nr_pdcp/nr_pdcp_entity_srb.h
0 → 100644
View file @
c4dc6892
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#ifndef _NR_PDCP_ENTITY_SRB_H_
#define _NR_PDCP_ENTITY_SRB_H_
#include "nr_pdcp_entity.h"
typedef
struct
{
nr_pdcp_entity_t
common
;
int
srb_id
;
}
nr_pdcp_entity_srb_t
;
void
nr_pdcp_entity_srb_recv_pdu
(
nr_pdcp_entity_t
*
_entity
,
char
*
buffer
,
int
size
);
void
nr_pdcp_entity_srb_recv_sdu
(
nr_pdcp_entity_t
*
_entity
,
char
*
buffer
,
int
size
,
int
sdu_id
);
void
nr_pdcp_entity_srb_set_integrity_key
(
nr_pdcp_entity_t
*
_entity
,
char
*
key
);
void
nr_pdcp_entity_srb_delete
(
nr_pdcp_entity_t
*
_entity
);
#endif
/* _NR_PDCP_ENTITY_SRB_H_ */
openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
View file @
c4dc6892
...
...
@@ -480,6 +480,54 @@ printf("\n");
enqueue_rlc_data_req
(
&
ctxt
,
0
,
MBMS_FLAG_NO
,
rb_id
,
sdu_id
,
0
,
size
,
memblock
,
NULL
,
NULL
);
}
static
void
deliver_sdu_srb
(
void
*
_ue
,
nr_pdcp_entity_t
*
entity
,
char
*
buf
,
int
size
)
{
/* Implementation to be added */
return
;
}
static
void
deliver_pdu_srb
(
void
*
_ue
,
nr_pdcp_entity_t
*
entity
,
char
*
buf
,
int
size
,
int
sdu_id
)
{
nr_pdcp_ue_t
*
ue
=
_ue
;
int
srb_id
;
protocol_ctxt_t
ctxt
;
int
i
;
mem_block_t
*
memblock
;
for
(
i
=
0
;
i
<
2
;
i
++
)
{
if
(
entity
==
ue
->
srb
[
i
])
{
srb_id
=
i
+
1
;
goto
rb_found
;
}
}
LOG_E
(
PDCP
,
"%s:%d:%s: fatal, no RB found for ue %d
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
,
ue
->
rnti
);
exit
(
1
);
rb_found:
ctxt
.
module_id
=
0
;
ctxt
.
enb_flag
=
1
;
ctxt
.
instance
=
0
;
ctxt
.
frame
=
0
;
ctxt
.
subframe
=
0
;
ctxt
.
eNB_index
=
0
;
ctxt
.
configured
=
1
;
ctxt
.
brOption
=
0
;
ctxt
.
rnti
=
ue
->
rnti
;
memblock
=
get_free_mem_block
(
size
,
__FUNCTION__
);
memcpy
(
memblock
->
data
,
buf
,
size
);
printf
(
"!!!!!!! deliver_pdu_srb (srb %d) calling rlc_data_req size %d: "
,
srb_id
,
size
);
//for (i = 0; i < size; i++) printf(" %2.2x", (unsigned char)memblock->data[i]);
printf
(
"
\n
"
);
enqueue_rlc_data_req
(
&
ctxt
,
1
,
MBMS_FLAG_NO
,
srb_id
,
sdu_id
,
0
,
size
,
memblock
,
NULL
,
NULL
);
}
boolean_t
pdcp_data_ind
(
const
protocol_ctxt_t
*
const
ctxt_pP
,
const
srb_flag_t
srb_flagP
,
...
...
@@ -580,7 +628,32 @@ void pdcp_run(const protocol_ctxt_t *const ctxt_pP)
static
void
add_srb
(
int
rnti
,
struct
NR_SRB_ToAddMod
*
s
)
{
TODO
;
nr_pdcp_entity_t
*
pdcp_srb
;
nr_pdcp_ue_t
*
ue
;
int
srb_id
=
s
->
srb_Identity
;
printf
(
"
\n\n
################# rnti %d add drb %d
\n\n\n
"
,
rnti
,
srb_id
);
if
(
srb_id
!=
1
)
{
LOG_E
(
PDCP
,
"%s:%d:%s: fatal, bad drb id %d
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
,
srb_id
);
exit
(
1
);
}
nr_pdcp_manager_lock
(
nr_pdcp_ue_manager
);
ue
=
nr_pdcp_manager_get_ue
(
nr_pdcp_ue_manager
,
rnti
);
if
(
ue
->
srb
[
srb_id
-
1
]
!=
NULL
)
{
LOG_D
(
PDCP
,
"%s:%d:%s: warning DRB %d already exist for ue %d, do nothing
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
,
srb_id
,
rnti
);
}
else
{
pdcp_srb
=
new_nr_pdcp_entity_srb
(
srb_id
,
deliver_sdu_srb
,
ue
,
deliver_pdu_srb
,
ue
);
nr_pdcp_ue_add_srb_pdcp_entity
(
ue
,
srb_id
,
pdcp_srb
);
LOG_D
(
PDCP
,
"%s:%d:%s: added drb %d to ue %d
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
,
srb_id
,
rnti
);
}
nr_pdcp_manager_unlock
(
nr_pdcp_ue_manager
);
}
static
void
add_drb_am
(
int
rnti
,
struct
NR_DRB_ToAddMod
*
s
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment