mirror of
https://gitlab.eurecom.fr/oai/openairinterface5g.git
synced 2026-07-17 14:40:31 +00:00
Compare commits
901 Commits
feature-lo
...
stats2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
71fb81e13a | ||
|
|
06971bd8e6 | ||
|
|
cb3108f4e5 | ||
|
|
e2faa154e7 | ||
|
|
a3543668f3 | ||
|
|
a085522128 | ||
|
|
256483a25d | ||
|
|
abd5b2cf79 | ||
|
|
845eeae92b | ||
|
|
e026e20186 | ||
|
|
4e434ecf45 | ||
|
|
313a63f52a | ||
|
|
f3781c4353 | ||
|
|
015a4d945b | ||
|
|
d39a772436 | ||
|
|
432817d1d5 | ||
|
|
a58b3989d1 | ||
|
|
4dc26bf575 | ||
|
|
23cf8059aa | ||
|
|
c1b448cd1a | ||
|
|
3a0a14cf7d | ||
|
|
e28fccc7fb | ||
|
|
c6fda387e0 | ||
|
|
0475b78ff4 | ||
|
|
df0f756c87 | ||
|
|
d04918eb9b | ||
|
|
f9f175a6f1 | ||
|
|
ad8381a66b | ||
|
|
2ea9618a8d | ||
|
|
8aaede906d | ||
|
|
909b511ed0 | ||
|
|
4674cddb71 | ||
|
|
5ebe28565e | ||
|
|
84f7634874 | ||
|
|
a0d8009170 | ||
|
|
f3cdc11269 | ||
|
|
db31ddc341 | ||
|
|
71d0e95f1f | ||
|
|
70627a9953 | ||
|
|
e0a802df16 | ||
|
|
6c31639522 | ||
|
|
b712e77527 | ||
|
|
238c8a62b4 | ||
|
|
6bf0f98e7f | ||
|
|
1638bbba8a | ||
|
|
d6d4d87e0b | ||
|
|
8b159d6ddc | ||
|
|
a08d78d79d | ||
|
|
c139204ce0 | ||
|
|
ab5a67463a | ||
|
|
983c956b77 | ||
|
|
0618812554 | ||
|
|
5cadafc154 | ||
|
|
6f40b6190c | ||
|
|
d08ef0490d | ||
|
|
1df60139e2 | ||
|
|
19d83ad21e | ||
|
|
51a7b7bd6e | ||
|
|
2465f1fb51 | ||
|
|
9957056f38 | ||
|
|
61ead59d13 | ||
|
|
fffb2d14de | ||
|
|
649e059f90 | ||
|
|
7e82f2f4e8 | ||
|
|
69cf59f32d | ||
|
|
e28bd9ff2a | ||
|
|
0ae3d3027d | ||
|
|
004d6d3bab | ||
|
|
1512e39e4e | ||
|
|
9ec3deb5bd | ||
|
|
fafed7d181 | ||
|
|
31dcdf2152 | ||
|
|
dfd9a91b50 | ||
|
|
d73e1a4133 | ||
|
|
178e2773ed | ||
|
|
e63cc03c9d | ||
|
|
078d6fa15b | ||
|
|
fc298b77b5 | ||
|
|
76f399cdd6 | ||
|
|
604d52a431 | ||
|
|
c4a657cc33 | ||
|
|
31d5bb6ffd | ||
|
|
df1f4381a2 | ||
|
|
166aae35ab | ||
|
|
70bb1a3858 | ||
|
|
65b399fcd7 | ||
|
|
d46a7e40a8 | ||
|
|
793c8de2ae | ||
|
|
71c13d85fc | ||
|
|
7f8031f69a | ||
|
|
c7f79e71e7 | ||
|
|
df05475b6b | ||
|
|
0289bb5791 | ||
|
|
8403b2c6d5 | ||
|
|
61312ca6e2 | ||
|
|
6a0605b000 | ||
|
|
9c94f86451 | ||
|
|
ef526692b5 | ||
|
|
63a9cbcc66 | ||
|
|
eba7dc5c76 | ||
|
|
17aef213a1 | ||
|
|
44f363c63c | ||
|
|
c607e5c3d6 | ||
|
|
f065de0811 | ||
|
|
c0244ee68e | ||
|
|
888c4ead0f | ||
|
|
5d39d8125c | ||
|
|
0cb014f463 | ||
|
|
f1c5378e3b | ||
|
|
c21f86421e | ||
|
|
ee7aca5d05 | ||
|
|
dc531588e9 | ||
|
|
5cfa5ad6f6 | ||
|
|
5382227866 | ||
|
|
b749ac12f7 | ||
|
|
49d60500c0 | ||
|
|
7e87265a74 | ||
|
|
032879c0c1 | ||
|
|
9622a56bf1 | ||
|
|
18a68387c4 | ||
|
|
a126cd1220 | ||
|
|
52dbc6fe75 | ||
|
|
0c9006ec66 | ||
|
|
f52809a8fb | ||
|
|
f75cdbcad7 | ||
|
|
4154e9e9d5 | ||
|
|
4f2e97d91c | ||
|
|
087a97f606 | ||
|
|
d793de5700 | ||
|
|
ebc55ea206 | ||
|
|
ddc6df0bf4 | ||
|
|
b0c7a3efe9 | ||
|
|
0c29e5ea5b | ||
|
|
cb4e60eed3 | ||
|
|
0352f98467 | ||
|
|
9333f53dc8 | ||
|
|
6e2a83856b | ||
|
|
d908779c38 | ||
|
|
8c81c70de9 | ||
|
|
b64baf144d | ||
|
|
5fc23d5864 | ||
|
|
cbff9df713 | ||
|
|
3155ec6df8 | ||
|
|
3d93d0dfc0 | ||
|
|
7f910a2e36 | ||
|
|
a21c31a6a5 | ||
|
|
f29fe05031 | ||
|
|
d2a784280d | ||
|
|
48b045b0b0 | ||
|
|
fc6122759b | ||
|
|
eb46f216b1 | ||
|
|
3e7864eb53 | ||
|
|
7a6f9659bc | ||
|
|
fdd79391e9 | ||
|
|
840cf403db | ||
|
|
4ad4edb871 | ||
|
|
989c22a46c | ||
|
|
9e5a77e6e3 | ||
|
|
48019c33f4 | ||
|
|
47d604b41f | ||
|
|
7f38019f7e | ||
|
|
be0fc1a982 | ||
|
|
6f67792993 | ||
|
|
069bebfa48 | ||
|
|
b7b6e8a60f | ||
|
|
e8c637cd32 | ||
|
|
d5a086d396 | ||
|
|
1a77e9ba37 | ||
|
|
add469e7ca | ||
|
|
08e30bf4ab | ||
|
|
57c545d4b3 | ||
|
|
970bfc92f0 | ||
|
|
8cd8799981 | ||
|
|
c663688fb2 | ||
|
|
b4331bf7f4 | ||
|
|
878491334f | ||
|
|
8b26160d4d | ||
|
|
3ca83257cc | ||
|
|
c59912d7ee | ||
|
|
a20a6ba431 | ||
|
|
1f818b4178 | ||
|
|
e1798745ef | ||
|
|
5427ec25b6 | ||
|
|
56e73266cb | ||
|
|
228bd5f16d | ||
|
|
3c2375eada | ||
|
|
667b8e5eed | ||
|
|
2e4e9f6423 | ||
|
|
2f3f858648 | ||
|
|
6ba60eb181 | ||
|
|
72bf1b1d3c | ||
|
|
b1a3cbb068 | ||
|
|
ab36474811 | ||
|
|
017fd225bc | ||
|
|
db7f39ba19 | ||
|
|
6b757c5320 | ||
|
|
b07a167370 | ||
|
|
24b651b465 | ||
|
|
bc3600a3f9 | ||
|
|
fcb07ef5fd | ||
|
|
82c62ecd5a | ||
|
|
05e859b1ef | ||
|
|
6dac7d674c | ||
|
|
65c9af7d48 | ||
|
|
04251d5b06 | ||
|
|
16c758ae09 | ||
|
|
43298fd02c | ||
|
|
ae05420c84 | ||
|
|
0700d5d078 | ||
|
|
52168e5201 | ||
|
|
63daf5793b | ||
|
|
0c4aa33939 | ||
|
|
b308cbe101 | ||
|
|
4b50e4b1f6 | ||
|
|
87d1a53ca3 | ||
|
|
5928d571e7 | ||
|
|
f1e3f7fb1f | ||
|
|
b0bcff0da2 | ||
|
|
a574c47e9e | ||
|
|
03bea3150a | ||
|
|
70d7a6687b | ||
|
|
3025627c06 | ||
|
|
36a9139a66 | ||
|
|
e39be3917b | ||
|
|
acd4e39566 | ||
|
|
43c980d36b | ||
|
|
edcb1b2bf5 | ||
|
|
79586c03f4 | ||
|
|
e0e37d8215 | ||
|
|
0c2b3a1eeb | ||
|
|
24745eafca | ||
|
|
93f941ecfc | ||
|
|
d68f7d6270 | ||
|
|
dadadb7291 | ||
|
|
e8327ffe74 | ||
|
|
805b35643f | ||
|
|
9a3326b63c | ||
|
|
39b5d98c1e | ||
|
|
06fa8c6a52 | ||
|
|
52f6d38a34 | ||
|
|
53f0773624 | ||
|
|
253e037fb2 | ||
|
|
85802b828f | ||
|
|
5091682551 | ||
|
|
2b36f2d8f2 | ||
|
|
d864cf9457 | ||
|
|
48906bf385 | ||
|
|
5b97df2971 | ||
|
|
1c0ff9b68d | ||
|
|
c2fee0520c | ||
|
|
2cced7bdb5 | ||
|
|
b7e026fda5 | ||
|
|
4662ccc46a | ||
|
|
ae54a1bd05 | ||
|
|
94ca30e82b | ||
|
|
df1cffbc7f | ||
|
|
38dc925e75 | ||
|
|
605f837eb6 | ||
|
|
f76ec13b89 | ||
|
|
ff5ec94d33 | ||
|
|
d6e58c9436 | ||
|
|
5894bcac22 | ||
|
|
ef469b9b51 | ||
|
|
980bb2420b | ||
|
|
bf219fc24f | ||
|
|
0196dd6dc2 | ||
|
|
c1c6e6142d | ||
|
|
e27356500e | ||
|
|
86755bc495 | ||
|
|
2141d6b5af | ||
|
|
0b91791f67 | ||
|
|
6d030ea2fa | ||
|
|
a9faf533b4 | ||
|
|
c5b8fa5418 | ||
|
|
6d7d884881 | ||
|
|
07a3634e45 | ||
|
|
1565667908 | ||
|
|
0e04fba03d | ||
|
|
1a4686b021 | ||
|
|
5cebe354c5 | ||
|
|
b37050ac6e | ||
|
|
304c92c639 | ||
|
|
4505e780c5 | ||
|
|
05dde0a30d | ||
|
|
a1806c92a2 | ||
|
|
b9a207a6b4 | ||
|
|
32ec53baa5 | ||
|
|
420ce60800 | ||
|
|
644422ebec | ||
|
|
586aa46c2c | ||
|
|
6f481e09f6 | ||
|
|
f6fe86c653 | ||
|
|
fe7228daee | ||
|
|
2c226b08f4 | ||
|
|
2802418c34 | ||
|
|
2659dce8b8 | ||
|
|
a24be04929 | ||
|
|
9c02189e64 | ||
|
|
83a9414258 | ||
|
|
d0fa56b1de | ||
|
|
0fe98c25a2 | ||
|
|
a4e2c2b799 | ||
|
|
4e69a10cbc | ||
|
|
2124e43d3a | ||
|
|
d71658d373 | ||
|
|
fb6fa64bc7 | ||
|
|
5cd674483b | ||
|
|
2bed0352fd | ||
|
|
4f44a1026b | ||
|
|
dab905519b | ||
|
|
2b38c78588 | ||
|
|
ad5a3e8d94 | ||
|
|
f4bd7c7529 | ||
|
|
8fee72e81f | ||
|
|
504ce6d793 | ||
|
|
63e30e29cc | ||
|
|
12a23fb1ef | ||
|
|
ee71b0dd9b | ||
|
|
633370ffc3 | ||
|
|
78267db68b | ||
|
|
3cd49db442 | ||
|
|
66e2810940 | ||
|
|
0c0d88b201 | ||
|
|
7194a720c9 | ||
|
|
9ff4630071 | ||
|
|
9e27394ecc | ||
|
|
2399da33cb | ||
|
|
348ff98762 | ||
|
|
032d477481 | ||
|
|
a73e500ded | ||
|
|
7b75305e3c | ||
|
|
61e42ce9c6 | ||
|
|
5761164a09 | ||
|
|
f6cbde5343 | ||
|
|
4053c0c3b2 | ||
|
|
40049db9c9 | ||
|
|
cc33856ba8 | ||
|
|
14d3a9c0e5 | ||
|
|
e62119bea5 | ||
|
|
7f21567f83 | ||
|
|
2521e46593 | ||
|
|
527003492d | ||
|
|
d835f3387d | ||
|
|
630f8ac2b1 | ||
|
|
1be8caaf69 | ||
|
|
079ad360e0 | ||
|
|
bb15360a55 | ||
|
|
0a74c23c8a | ||
|
|
ed74875025 | ||
|
|
7cee46777f | ||
|
|
33b69bdf30 | ||
|
|
1ad8f254c2 | ||
|
|
8c08e2d3ee | ||
|
|
7b770042ad | ||
|
|
e32d55dff9 | ||
|
|
fbdc6f0fd0 | ||
|
|
607561af6c | ||
|
|
045de837ab | ||
|
|
a119e84f92 | ||
|
|
983760e9a4 | ||
|
|
131db89dfc | ||
|
|
5944b212b2 | ||
|
|
7387721ecf | ||
|
|
f6bb869c0b | ||
|
|
169f42a365 | ||
|
|
6900f2bc88 | ||
|
|
e850a8ece7 | ||
|
|
e592045d8f | ||
|
|
aabd9c6c4e | ||
|
|
c1c5c68e70 | ||
|
|
b69fa39577 | ||
|
|
b193ccf6ee | ||
|
|
0122749406 | ||
|
|
ae23942020 | ||
|
|
5fa3be8091 | ||
|
|
dc4f610245 | ||
|
|
3793edf686 | ||
|
|
4b0d4e38c4 | ||
|
|
28ad0eaacb | ||
|
|
9127577bf3 | ||
|
|
2e6fea604d | ||
|
|
f95c636a6b | ||
|
|
f7ab71763d | ||
|
|
dde6d61dd4 | ||
|
|
7b68c48618 | ||
|
|
250043655a | ||
|
|
97b3d1a5cd | ||
|
|
8adcf8368a | ||
|
|
f5e9c4ec36 | ||
|
|
6c201d6239 | ||
|
|
e7a491415c | ||
|
|
0aec0d91c6 | ||
|
|
894c45eae5 | ||
|
|
e3747ea06b | ||
|
|
aed83c91de | ||
|
|
87d69126af | ||
|
|
8c577ff253 | ||
|
|
55e943c347 | ||
|
|
d11705260f | ||
|
|
12c0f52fea | ||
|
|
0d9e548f39 | ||
|
|
80ad5df367 | ||
|
|
933ad3dcf4 | ||
|
|
8a8bacead9 | ||
|
|
e8d91d642e | ||
|
|
0cea80c8fa | ||
|
|
1afdc298e9 | ||
|
|
7c47420da7 | ||
|
|
b2b84caeb5 | ||
|
|
93e6bd26da | ||
|
|
0960aa3d00 | ||
|
|
ab899c3a08 | ||
|
|
da8d3037df | ||
|
|
8f79ae0ea7 | ||
|
|
689ecf5ae1 | ||
|
|
e36a2b483a | ||
|
|
1d99c8e695 | ||
|
|
b29f92c1d6 | ||
|
|
36190b1c7d | ||
|
|
ac58460b6e | ||
|
|
382b2c41e3 | ||
|
|
2d3f4f7310 | ||
|
|
9eccd6c11d | ||
|
|
85b48193d4 | ||
|
|
f71766c3ee | ||
|
|
e24edde2fd | ||
|
|
bc1227f9a0 | ||
|
|
539e5e89f3 | ||
|
|
9f4153b55b | ||
|
|
4ffef42472 | ||
|
|
6c69393eda | ||
|
|
bb17287089 | ||
|
|
d7dae8fa91 | ||
|
|
b1d07fb3e0 | ||
|
|
4d4f7dd616 | ||
|
|
7546b8ca1b | ||
|
|
0b55910c48 | ||
|
|
308cae752a | ||
|
|
b5583d47de | ||
|
|
45522ae86c | ||
|
|
5f37ab35b4 | ||
|
|
4e34462488 | ||
|
|
7b3191d1a6 | ||
|
|
1215444cae | ||
|
|
6e7160ac03 | ||
|
|
bea2ec5c3b | ||
|
|
f8f20827e9 | ||
|
|
59e10dc8da | ||
|
|
f2bc364b50 | ||
|
|
cc2c3b9123 | ||
|
|
43701ddbd6 | ||
|
|
dd801325d4 | ||
|
|
db2c03d31d | ||
|
|
d5165ae2bd | ||
|
|
9b317eacef | ||
|
|
cd4bc84bd8 | ||
|
|
b8f68c81fb | ||
|
|
616927c04d | ||
|
|
b96df49e15 | ||
|
|
1bb0ce90cc | ||
|
|
91189bd4f8 | ||
|
|
98f5478f7d | ||
|
|
a531342054 | ||
|
|
2c3eb996a4 | ||
|
|
9a43678ed0 | ||
|
|
13ed1200b4 | ||
|
|
5ea828e149 | ||
|
|
426bc2f088 | ||
|
|
6f7889d162 | ||
|
|
83d40a9b7c | ||
|
|
df8f632ae3 | ||
|
|
23c8336a37 | ||
|
|
ac9e47ba68 | ||
|
|
43033e20b6 | ||
|
|
16e8154d71 | ||
|
|
9ba33d4dec | ||
|
|
a51c1f93b5 | ||
|
|
b6adb32989 | ||
|
|
236f7d56e5 | ||
|
|
e6446392b2 | ||
|
|
264eebfb3f | ||
|
|
628a11cde5 | ||
|
|
2f3079b808 | ||
|
|
6bca31c7e3 | ||
|
|
92ba8cb9d0 | ||
|
|
daad3da6eb | ||
|
|
21a820b061 | ||
|
|
72d0a4ff05 | ||
|
|
9228f12d92 | ||
|
|
e1198b3d96 | ||
|
|
17a3a796b8 | ||
|
|
8d02c2c0fc | ||
|
|
af95f834f1 | ||
|
|
09ecb8a33c | ||
|
|
40f2f54339 | ||
|
|
36a02913de | ||
|
|
360d4b3a81 | ||
|
|
103e21a05c | ||
|
|
6e5b77baf3 | ||
|
|
cf7c2fd373 | ||
|
|
ab1df8bbc4 | ||
|
|
1450e2fb9f | ||
|
|
38f7d772e6 | ||
|
|
58102d24d8 | ||
|
|
3c753aec71 | ||
|
|
3b28264374 | ||
|
|
ba73075ccd | ||
|
|
3a0bccde30 | ||
|
|
fac44b15e8 | ||
|
|
25086576e5 | ||
|
|
c6498ccf58 | ||
|
|
d3f90a90fe | ||
|
|
276b2d5e0c | ||
|
|
e1b090cfaa | ||
|
|
9f6b7dc6b9 | ||
|
|
9354d4305b | ||
|
|
d8dbd2159c | ||
|
|
00d021c66b | ||
|
|
5092eca8cb | ||
|
|
2ba71e748d | ||
|
|
0eeb174253 | ||
|
|
9e2086c77c | ||
|
|
01c6129ee1 | ||
|
|
8bc5f273bd | ||
|
|
23dab34e7c | ||
|
|
c67d3659f1 | ||
|
|
4eac17e1c8 | ||
|
|
a724c1febc | ||
|
|
fcfc7a90e8 | ||
|
|
7bf5f018a1 | ||
|
|
a5d0615048 | ||
|
|
b46077c22d | ||
|
|
b57a8622c0 | ||
|
|
9150dc8c50 | ||
|
|
7018b7c841 | ||
|
|
9887982e00 | ||
|
|
3d5cfb6642 | ||
|
|
d56f2c8e12 | ||
|
|
6d736db22d | ||
|
|
436eb2d5a9 | ||
|
|
3ca4cb708c | ||
|
|
34b821433b | ||
|
|
17cbc4dbf4 | ||
|
|
26c2c0add8 | ||
|
|
61d434339e | ||
|
|
1fbf968676 | ||
|
|
2d96262d7c | ||
|
|
0c5d6a59e7 | ||
|
|
e5c4e0f3d3 | ||
|
|
f94a479829 | ||
|
|
03e869ee36 | ||
|
|
1e4f509805 | ||
|
|
e639e79220 | ||
|
|
085014f601 | ||
|
|
3934f2020e | ||
|
|
6f8b13c2ad | ||
|
|
c97d5d04ed | ||
|
|
1f49b73eac | ||
|
|
8ac68929bc | ||
|
|
e6e6fdedf9 | ||
|
|
2ef5edd17c | ||
|
|
86874047ac | ||
|
|
7a26d75634 | ||
|
|
44a98a85c5 | ||
|
|
075e8c6d8f | ||
|
|
a67791d18e | ||
|
|
997d52b71d | ||
|
|
ef20a5c3b2 | ||
|
|
2f81e507d7 | ||
|
|
bdc4a664ac | ||
|
|
9277afe327 | ||
|
|
a254545b7c | ||
|
|
52bc76d904 | ||
|
|
f6bc787d1e | ||
|
|
c4c93cc498 | ||
|
|
32de221553 | ||
|
|
ccb1e64a38 | ||
|
|
0ddd8c2586 | ||
|
|
5c754f2300 | ||
|
|
1c9ef67384 | ||
|
|
ba5bda5c6e | ||
|
|
08975e451f | ||
|
|
68be6f83e6 | ||
|
|
5ed67b85a7 | ||
|
|
c7e8002d8d | ||
|
|
61a2f398db | ||
|
|
3b16547374 | ||
|
|
99b262d764 | ||
|
|
bdff42cf77 | ||
|
|
d914817806 | ||
|
|
a037987b47 | ||
|
|
ab6d7afd09 | ||
|
|
dcf4fd1db2 | ||
|
|
59ced82104 | ||
|
|
05fffa4916 | ||
|
|
fc5632eeb9 | ||
|
|
87e79e5eb8 | ||
|
|
2bbfe501c2 | ||
|
|
1750f45708 | ||
|
|
acc6fb8508 | ||
|
|
dce83a0508 | ||
|
|
b106913dc0 | ||
|
|
edea5c5f65 | ||
|
|
40fcfdea8b | ||
|
|
2fb8d96f11 | ||
|
|
4045874d74 | ||
|
|
70cfd057ec | ||
|
|
39ea2c936f | ||
|
|
952a216b92 | ||
|
|
999f5d67e3 | ||
|
|
bf5389936d | ||
|
|
3ecfead572 | ||
|
|
63b28d3610 | ||
|
|
73a1e92249 | ||
|
|
8506307ef0 | ||
|
|
2f753873bc | ||
|
|
751335765f | ||
|
|
4b3aa7233e | ||
|
|
7815293443 | ||
|
|
b6016cfc49 | ||
|
|
7733ac1857 | ||
|
|
f902e27c43 | ||
|
|
795c057d8c | ||
|
|
eb12cb8f10 | ||
|
|
10b8e1b34c | ||
|
|
a4a5c6ae22 | ||
|
|
6b873e0f41 | ||
|
|
28f3997ea6 | ||
|
|
c791b45adc | ||
|
|
b62e7be276 | ||
|
|
6989d4ecba | ||
|
|
a71552d55d | ||
|
|
3a0cb80469 | ||
|
|
9b2a163ebb | ||
|
|
3feb0f472f | ||
|
|
b216c58526 | ||
|
|
e721f6af04 | ||
|
|
ad3253fef6 | ||
|
|
9def6e815d | ||
|
|
27bac2f2c4 | ||
|
|
f9e5c987a6 | ||
|
|
0c05e283e2 | ||
|
|
cd6ee6a01e | ||
|
|
9b1db62f38 | ||
|
|
a81640a6df | ||
|
|
cfda6c7b1d | ||
|
|
40279dddf3 | ||
|
|
04b234c878 | ||
|
|
1745ffa10f | ||
|
|
1d86347587 | ||
|
|
d6072cb5d2 | ||
|
|
d5421a9c87 | ||
|
|
e6913e5d33 | ||
|
|
11ced194cd | ||
|
|
94e5aaff88 | ||
|
|
47c9ded007 | ||
|
|
bfc7c1b361 | ||
|
|
3969079fcd | ||
|
|
8c056ceefc | ||
|
|
8ffecf4bdf | ||
|
|
d6a155a803 | ||
|
|
7286552aa5 | ||
|
|
5962824038 | ||
|
|
4035bdb71d | ||
|
|
298740b06c | ||
|
|
c7055b2cf9 | ||
|
|
23bdf1e32c | ||
|
|
dd374c7e03 | ||
|
|
7f074bcc22 | ||
|
|
fe7ee4d2fe | ||
|
|
e297ccfa26 | ||
|
|
bf56e881b2 | ||
|
|
6e4bbe8f49 | ||
|
|
66b3fffbf0 | ||
|
|
8e58e83be6 | ||
|
|
4ee6005a50 | ||
|
|
4f29c73bb6 | ||
|
|
693d687d3f | ||
|
|
0eb2acb00b | ||
|
|
886b580fac | ||
|
|
4254d59a96 | ||
|
|
f12c6ea65b | ||
|
|
03f7bd3468 | ||
|
|
c37e0af9b0 | ||
|
|
ef63aa45e6 | ||
|
|
a772400ffa | ||
|
|
2d434033e0 | ||
|
|
4c17c9c62a | ||
|
|
e628c8c2c4 | ||
|
|
2deec7fa09 | ||
|
|
e1e8c167de | ||
|
|
25614263ba | ||
|
|
c83df1b677 | ||
|
|
729cf143e0 | ||
|
|
bc2ea375c8 | ||
|
|
6e6f9a53a1 | ||
|
|
da1e542a31 | ||
|
|
fba2df7557 | ||
|
|
4c0427ea6c | ||
|
|
cb32c7505e | ||
|
|
38d0dca0bf | ||
|
|
ef4d8ab0c7 | ||
|
|
c7a54269de | ||
|
|
a77c1d3202 | ||
|
|
038e70b0c6 | ||
|
|
90c64f4cf8 | ||
|
|
1d1aaa30e7 | ||
|
|
139a33d644 | ||
|
|
e322bdb289 | ||
|
|
181e576698 | ||
|
|
0abcf3d9c4 | ||
|
|
c6b4f97d19 | ||
|
|
88c0028757 | ||
|
|
3e664b5eb7 | ||
|
|
e834acfaf2 | ||
|
|
17504695f8 | ||
|
|
184e151fde | ||
|
|
a47861628b | ||
|
|
199680d24d | ||
|
|
7ecd593f6b | ||
|
|
f439095c6e | ||
|
|
190eaa1e42 | ||
|
|
8704f81025 | ||
|
|
4e73ef0c3b | ||
|
|
aba5098e30 | ||
|
|
b59b84e904 | ||
|
|
ea22da6e7a | ||
|
|
2f2bc2a5e8 | ||
|
|
3f88cc1fb1 | ||
|
|
2f9d8e759d | ||
|
|
f40b579a78 | ||
|
|
f1eb2e15d4 | ||
|
|
8b0409d349 | ||
|
|
e07f32f131 | ||
|
|
ce1613ad7c | ||
|
|
9ef3fdbc49 | ||
|
|
8edcd41a8d | ||
|
|
6569ea1a20 | ||
|
|
1616ed7727 | ||
|
|
8f632a7c69 | ||
|
|
15e82e4811 | ||
|
|
31cd31826d | ||
|
|
d104ef73b7 | ||
|
|
9e90b8f22c | ||
|
|
4fd78ce1e0 | ||
|
|
cbf57d7b3c | ||
|
|
47148e3f7d | ||
|
|
4a90091095 | ||
|
|
baa2e92562 | ||
|
|
e56f284347 | ||
|
|
12eed23f63 | ||
|
|
03617b9165 | ||
|
|
7e17f8bd6a | ||
|
|
a82d897478 | ||
|
|
1e5c3c5707 | ||
|
|
a88a8dae8e | ||
|
|
63ebfff4d3 | ||
|
|
670f979f97 | ||
|
|
0126bd849b | ||
|
|
6abb1e362d | ||
|
|
14ec3e505d | ||
|
|
19d8ea2742 | ||
|
|
51a72b8479 | ||
|
|
db0ce84aa5 | ||
|
|
bbe806a870 | ||
|
|
a77769d45b | ||
|
|
a634f14f74 | ||
|
|
bb89ae3aca | ||
|
|
de8aa24de5 | ||
|
|
2776ec78b0 | ||
|
|
d4b566ceb8 | ||
|
|
35324cfa12 | ||
|
|
6c27a40f09 | ||
|
|
c272bb2f7c | ||
|
|
7fdd7547be | ||
|
|
e5c6ee599c | ||
|
|
55d59e5f2a | ||
|
|
3eaebbca93 | ||
|
|
853776ef2f | ||
|
|
05a9c0e264 | ||
|
|
fdce62f799 | ||
|
|
5bae6dd6f3 | ||
|
|
3ae8f393f4 | ||
|
|
4d17364142 | ||
|
|
0e0526e367 | ||
|
|
ed6aa9f505 | ||
|
|
0ced14a56d | ||
|
|
bb82697819 | ||
|
|
cf284d76f0 | ||
|
|
6f19524e95 | ||
|
|
628726caae | ||
|
|
4f58d66972 | ||
|
|
2b108cdded | ||
|
|
580f56c869 | ||
|
|
777074ff79 | ||
|
|
d820051397 | ||
|
|
c02650826d | ||
|
|
9790eb1adc | ||
|
|
fb153cc792 | ||
|
|
d3d9325081 | ||
|
|
dccbd9279a | ||
|
|
8d7df8d164 | ||
|
|
2e0823a7ae | ||
|
|
d29b17a211 | ||
|
|
9408c3c0b0 | ||
|
|
a19f2e3254 | ||
|
|
975f7e868a | ||
|
|
dd6dac1392 | ||
|
|
299ba03b84 | ||
|
|
0d86181a58 | ||
|
|
a3aae0dd9e | ||
|
|
6afebc0e41 | ||
|
|
1f9900ba61 | ||
|
|
8d164fe2aa | ||
|
|
4caafc7292 | ||
|
|
e5899e2f74 | ||
|
|
7090db60bc | ||
|
|
08100357f7 | ||
|
|
f44d1ccfeb | ||
|
|
7d9b3464a8 | ||
|
|
74ce2cf4be | ||
|
|
40a9792fef | ||
|
|
13b8abc310 | ||
|
|
cd2b80e6c2 | ||
|
|
2d4453648f | ||
|
|
5521e34360 | ||
|
|
12792eece7 | ||
|
|
e8d92cbddd | ||
|
|
e51cd863fe | ||
|
|
40263348f9 | ||
|
|
188a99ca51 | ||
|
|
cd16d7ce03 | ||
|
|
f1455f15a3 | ||
|
|
6a1ac14447 | ||
|
|
e2b4f80ac2 | ||
|
|
b103ada542 | ||
|
|
e7f8b56b65 | ||
|
|
96efe9c03b | ||
|
|
11cdf1610e | ||
|
|
85faedfcbe | ||
|
|
40b131be13 | ||
|
|
b37195ad1f | ||
|
|
1a40b36193 | ||
|
|
39aaf63a4e | ||
|
|
e2c88f91af | ||
|
|
d3899a21a6 | ||
|
|
a1b2d222dd | ||
|
|
f068fb4ef3 | ||
|
|
b3c0095f07 | ||
|
|
36b8bb1b5b | ||
|
|
a84ecd1468 | ||
|
|
55476b175f | ||
|
|
5e506bfab0 | ||
|
|
c64362f8ec | ||
|
|
3bc433a5f8 | ||
|
|
845a226410 | ||
|
|
c8a787d22c | ||
|
|
559e8fdcd2 | ||
|
|
0f704894f4 | ||
|
|
5e5bc1a9e3 | ||
|
|
c912762144 | ||
|
|
394f0deb1b | ||
|
|
55e32f6e8c | ||
|
|
0d65f76d46 | ||
|
|
119be5d45b | ||
|
|
cb8760a44d | ||
|
|
9b11d0b593 | ||
|
|
301317eca6 | ||
|
|
a6af0d99ce | ||
|
|
956d9aa1d8 | ||
|
|
8663ee697e | ||
|
|
c67550e531 | ||
|
|
265b5c4d1b | ||
|
|
4542322bb4 | ||
|
|
558fccbba7 | ||
|
|
b85b5fe47a | ||
|
|
6d9ceaa712 | ||
|
|
5e5e487e4c | ||
|
|
3e27bed4f7 | ||
|
|
bdd12a3396 | ||
|
|
bfad636369 | ||
|
|
00a8df6f8f | ||
|
|
a1b81d9475 | ||
|
|
140fa111c4 | ||
|
|
ad32b6108e | ||
|
|
d3af4c4b8b | ||
|
|
22fe32645b | ||
|
|
71a8d19b7d | ||
|
|
3ed622afbd | ||
|
|
a7e6137408 | ||
|
|
581a9731d8 | ||
|
|
732b98d1ae | ||
|
|
fe27b81703 | ||
|
|
66c30b9e1d | ||
|
|
9db8db256a | ||
|
|
e785891fb1 | ||
|
|
f8fbd26b57 | ||
|
|
fa3a637b72 | ||
|
|
550ab5009b | ||
|
|
cabbb72c0f | ||
|
|
0ee70df312 |
@@ -238,6 +238,26 @@ pipeline {
|
||||
}
|
||||
}
|
||||
}
|
||||
stage ("4G L2 Simulators") {
|
||||
when { expression {doMandatoryTests} }
|
||||
steps {
|
||||
script {
|
||||
triggerSlaveJob ('RAN-L2-Sim-Test-4G', 'Test-L2-Sim-Container-4G')
|
||||
}
|
||||
}
|
||||
post {
|
||||
always {
|
||||
script {
|
||||
finalizeSlaveJob('RAN-L2-Sim-Test-4G')
|
||||
}
|
||||
}
|
||||
failure {
|
||||
script {
|
||||
currentBuild.result = 'FAILURE'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stage ("5G L2 Simulators") {
|
||||
when { expression {doMandatoryTests} }
|
||||
steps {
|
||||
@@ -278,6 +298,26 @@ pipeline {
|
||||
}
|
||||
}
|
||||
}
|
||||
stage ("SA B200 Sanity Check") {
|
||||
when { expression {doMandatoryTests} }
|
||||
steps {
|
||||
script {
|
||||
triggerSlaveJob ('RAN-SA-B200-Module-SABOX-Container', 'Test-SA-B200')
|
||||
}
|
||||
}
|
||||
post {
|
||||
always {
|
||||
script {
|
||||
finalizeSlaveJob('RAN-SA-B200-Module-SABOX-Container')
|
||||
}
|
||||
}
|
||||
failure {
|
||||
script {
|
||||
currentBuild.result = 'FAILURE'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stage ("Test OAI NR UE - OAI gNB - TDD - Band 78 - N300") {
|
||||
when { expression {doMandatoryTests} }
|
||||
steps {
|
||||
|
||||
@@ -416,29 +416,6 @@ pipeline {
|
||||
}
|
||||
}
|
||||
}
|
||||
stage ("Test F1 - FDD - Band 7 - B210") {
|
||||
when {
|
||||
expression {doFullTestsuite}
|
||||
}
|
||||
steps {
|
||||
script {
|
||||
sh "sleep 60"
|
||||
triggerSlaveJob ('eNB-CI-F1-FDD-Band7-B210', 'Test-F1-FDD-Band7')
|
||||
}
|
||||
}
|
||||
post {
|
||||
always {
|
||||
script {
|
||||
finalizeSlaveJob('eNB-CI-F1-FDD-Band7-B210')
|
||||
}
|
||||
}
|
||||
failure {
|
||||
script {
|
||||
currentBuild.result = 'FAILURE'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stage ("Test IF4p5 - TDD - Band 40 - B210") {
|
||||
when {
|
||||
expression {doFullTestsuite}
|
||||
|
||||
@@ -66,7 +66,7 @@ pipeline {
|
||||
withCredentials([
|
||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.DH_Credentials}", usernameVariable: 'DH_Username', passwordVariable: 'DH_Password']
|
||||
]) {
|
||||
def listOfImages = ["oai-enb", "oai-gnb", "oai-lte-ue", "oai-nr-ue"]
|
||||
def listOfImages = ["oai-enb", "oai-gnb", "oai-lte-ue", "oai-nr-ue", "proxy"]
|
||||
sh "docker login -u ${DH_Username} -p ${DH_Password} > /dev/null 2>&1"
|
||||
listOfImages.eachWithIndex { item, iindex ->
|
||||
sh "docker image tag ${item}:develop ${DH_Account}/${item}:develop"
|
||||
|
||||
@@ -36,6 +36,9 @@ def testStageName = params.pipelineTestStageName
|
||||
// Name of the phone resource
|
||||
def ciSmartPhoneResource = params.smartphonesResource
|
||||
|
||||
// Name of the phone resource
|
||||
def ciEpcResource = params.epcResource
|
||||
|
||||
// Global Parameters. Normally they should be populated when the master job
|
||||
// triggers the slave job with parameters
|
||||
def eNB_Repository
|
||||
@@ -51,7 +54,7 @@ pipeline {
|
||||
options {
|
||||
disableConcurrentBuilds()
|
||||
ansiColor('xterm')
|
||||
lock (ciSmartPhoneResource)
|
||||
lock(extra: [[resource: ciEpcResource]], resource: ciSmartPhoneResource)
|
||||
}
|
||||
stages {
|
||||
stage ("Verify Parameters") {
|
||||
@@ -216,6 +219,76 @@ pipeline {
|
||||
}
|
||||
}
|
||||
}
|
||||
stage ("Terminate") {
|
||||
parallel {
|
||||
stage('Terminate UE') {
|
||||
// Bypassing this stage if there are no abd server defined
|
||||
when {
|
||||
expression { params.ADB_IPAddress != "none" }
|
||||
}
|
||||
steps {
|
||||
echo '\u2705 \u001B[32mTerminate UE\u001B[0m'
|
||||
withCredentials([
|
||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.ADB_Credentials}", usernameVariable: 'ADB_Username', passwordVariable: 'ADB_Password']
|
||||
]) {
|
||||
sh "python3 ci-scripts/main.py --mode=TerminateUE --ADBIPAddress=${params.ADB_IPAddress} --ADBUserName=${ADB_Username} --ADBPassword=${ADB_Password}"
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('Terminate eNB') {
|
||||
steps {
|
||||
echo '\u2705 \u001B[32mTerminate eNB\u001B[0m'
|
||||
withCredentials([
|
||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB_Credentials}", usernameVariable: 'eNB_Username', passwordVariable: 'eNB_Password']
|
||||
]) {
|
||||
sh "python3 ci-scripts/main.py --mode=TerminateeNB --eNBIPAddress=${params.eNB_IPAddress} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password}"
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('Terminate SPGW') {
|
||||
// Bypassing this stage if EPC server is not defined
|
||||
when {
|
||||
expression { params.EPC_IPAddress != "none" }
|
||||
}
|
||||
steps {
|
||||
echo '\u2705 \u001B[32mTerminate SPGW\u001B[0m'
|
||||
withCredentials([
|
||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password']
|
||||
]) {
|
||||
sh "python3 ci-scripts/main.py --mode=TerminateSPGW --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCType=${params.EPC_Type} --EPCSourceCodePath=${params.EPC_SourceCodePath}"
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('Terminate MME') {
|
||||
// Bypassing this stage if EPC server is not defined
|
||||
when {
|
||||
expression { params.EPC_IPAddress != "none" }
|
||||
}
|
||||
steps {
|
||||
echo '\u2705 \u001B[32mTerminate MME\u001B[0m'
|
||||
withCredentials([
|
||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password']
|
||||
]) {
|
||||
sh "python3 ci-scripts/main.py --mode=TerminateMME --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCType=${params.EPC_Type} --EPCSourceCodePath=${params.EPC_SourceCodePath}"
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('Terminate HSS') {
|
||||
// Bypassing this stage if EPC server is not defined
|
||||
when {
|
||||
expression { params.EPC_IPAddress != "none" }
|
||||
}
|
||||
steps {
|
||||
echo '\u2705 \u001B[32mTerminate HSS\u001B[0m'
|
||||
withCredentials([
|
||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password']
|
||||
]) {
|
||||
sh "python3 ci-scripts/main.py --mode=TerminateHSS --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCType=${params.EPC_Type} --EPCSourceCodePath=${params.EPC_SourceCodePath}"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('Log Collection') {
|
||||
parallel {
|
||||
stage('Log Collection (eNB - Build)') {
|
||||
@@ -242,7 +315,7 @@ pipeline {
|
||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB_Credentials}", usernameVariable: 'eNB_Username', passwordVariable: 'eNB_Password']
|
||||
]) {
|
||||
echo '\u2705 \u001B[32mLog Collection (eNB - Run)\u001B[0m'
|
||||
sh "python3 ci-scripts/main.py --mode=LogCollecteNB --eNBIPAddress=${params.eNB_IPAddress} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password} --eNBSourceCodePath=${params.eNB_SourceCodePath}"
|
||||
sh "python3 ci-scripts/main.py --mode=LogCollecteNB --eNBIPAddress=${params.eNB_IPAddress} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password} --eNBSourceCodePath=${params.eNB_SourceCodePath} --BuildId=${env.BUILD_ID}"
|
||||
|
||||
echo '\u2705 \u001B[32mLog Transfer (eNB - Run)\u001B[0m'
|
||||
sh "sshpass -p \'${eNB_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${eNB_Username}@${params.eNB_IPAddress}:${eNB_SourceCodePath}/cmake_targets/enb.log.zip ./enb.log.${env.BUILD_ID}.zip || true"
|
||||
@@ -259,6 +332,116 @@ pipeline {
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('Log Collection (SPGW)') {
|
||||
// Bypassing this stage if EPC server is not defined
|
||||
when {
|
||||
expression { params.EPC_IPAddress != "none" }
|
||||
}
|
||||
steps {
|
||||
withCredentials([
|
||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password']
|
||||
]) {
|
||||
echo '\u2705 \u001B[32mLog Collection (SPGW)\u001B[0m'
|
||||
sh "python3 ci-scripts/main.py --mode=LogCollectSPGW --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --EPCType=${params.EPC_Type}"
|
||||
|
||||
echo '\u2705 \u001B[32mLog Transfer (SPGW)\u001B[0m'
|
||||
sh "sshpass -p \'${EPC_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${EPC_Username}@${params.EPC_IPAddress}:${EPC_SourceCodePath}/scripts/spgw.log.zip ./spgw.log.${env.BUILD_ID}.zip || true"
|
||||
}
|
||||
script {
|
||||
if(fileExists("spgw.log.${env.BUILD_ID}.zip")) {
|
||||
archiveArtifacts "spgw.log.${env.BUILD_ID}.zip"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('Log Collection (MME)') {
|
||||
// Bypassing this stage if EPC server is not defined
|
||||
when {
|
||||
expression { params.EPC_IPAddress != "none" }
|
||||
}
|
||||
steps {
|
||||
withCredentials([
|
||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password']
|
||||
]) {
|
||||
echo '\u2705 \u001B[32mLog Collection (MME)\u001B[0m'
|
||||
sh "python3 ci-scripts/main.py --mode=LogCollectMME --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --EPCType=${params.EPC_Type}"
|
||||
|
||||
echo '\u2705 \u001B[32mLog Transfer (MME)\u001B[0m'
|
||||
sh "sshpass -p \'${EPC_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${EPC_Username}@${params.EPC_IPAddress}:${EPC_SourceCodePath}/scripts/mme.log.zip ./mme.log.${env.BUILD_ID}.zip || true"
|
||||
}
|
||||
script {
|
||||
if(fileExists("mme.log.${env.BUILD_ID}.zip")) {
|
||||
archiveArtifacts "mme.log.${env.BUILD_ID}.zip"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('Log Collection (HSS)') {
|
||||
// Bypassing this stage if EPC server is not defined
|
||||
when {
|
||||
expression { params.EPC_IPAddress != "none" }
|
||||
}
|
||||
steps {
|
||||
withCredentials([
|
||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password']
|
||||
]) {
|
||||
echo '\u2705 \u001B[32mLog Collection (HSS)\u001B[0m'
|
||||
sh "python3 ci-scripts/main.py --mode=LogCollectHSS --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --EPCType=${params.EPC_Type}"
|
||||
|
||||
echo '\u2705 \u001B[32mLog Transfer (HSS)\u001B[0m'
|
||||
sh "sshpass -p \'${EPC_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${EPC_Username}@${params.EPC_IPAddress}:${EPC_SourceCodePath}/scripts/hss.log.zip ./hss.log.${env.BUILD_ID}.zip || true"
|
||||
}
|
||||
script {
|
||||
if(fileExists("hss.log.${env.BUILD_ID}.zip")) {
|
||||
archiveArtifacts "hss.log.${env.BUILD_ID}.zip"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('Log Collection (Ping)') {
|
||||
// Bypassing this stage if EPC server is not defined
|
||||
when {
|
||||
expression { params.EPC_IPAddress != "none" }
|
||||
}
|
||||
steps {
|
||||
withCredentials([
|
||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password']
|
||||
]) {
|
||||
echo '\u2705 \u001B[32mLog Collection (Ping)\u001B[0m'
|
||||
sh "python3 ci-scripts/main.py --mode=LogCollectPing --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --EPCType=${params.EPC_Type}"
|
||||
|
||||
echo '\u2705 \u001B[32mLog Transfer (Ping)\u001B[0m'
|
||||
sh "sshpass -p \'${EPC_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${EPC_Username}@${params.EPC_IPAddress}:${EPC_SourceCodePath}/scripts/ping.log.zip ./ping.log.${env.BUILD_ID}.zip || true"
|
||||
}
|
||||
script {
|
||||
if(fileExists("ping.log.${env.BUILD_ID}.zip")) {
|
||||
archiveArtifacts "ping.log.${env.BUILD_ID}.zip"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('Log Collection (Iperf)') {
|
||||
// Bypassing this stage if EPC server is not defined
|
||||
when {
|
||||
expression { params.EPC_IPAddress != "none" }
|
||||
}
|
||||
steps {
|
||||
withCredentials([
|
||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password']
|
||||
]) {
|
||||
echo '\u2705 \u001B[32mLog Collection (Iperf)\u001B[0m'
|
||||
sh "python3 ci-scripts/main.py --mode=LogCollectIperf --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --EPCType=${params.EPC_Type}"
|
||||
|
||||
echo '\u2705 \u001B[32mLog Transfer (Iperf)\u001B[0m'
|
||||
sh "sshpass -p \'${EPC_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${EPC_Username}@${params.EPC_IPAddress}:${EPC_SourceCodePath}/scripts/iperf.log.zip ./iperf.log.${env.BUILD_ID}.zip || true"
|
||||
}
|
||||
script {
|
||||
if(fileExists("iperf.log.${env.BUILD_ID}.zip")) {
|
||||
archiveArtifacts "iperf.log.${env.BUILD_ID}.zip"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,6 +20,9 @@
|
||||
* contact@openairinterface.org
|
||||
*/
|
||||
|
||||
// necessary for reading JSON
|
||||
import groovy.json.JsonSlurper
|
||||
|
||||
// Template Jenkins Declarative Pipeline script to run Test w/ RF HW
|
||||
|
||||
// Location of the python executor node shall be in the same subnet as the others servers
|
||||
@@ -37,12 +40,12 @@ pipeline {
|
||||
stages {
|
||||
stage ("Launcher") {
|
||||
steps {
|
||||
script {
|
||||
//retrieve MR that are opened nd with tag NSA
|
||||
MR_LIST= sh returnStdout: true, script: 'curl --silent "https://gitlab.eurecom.fr/api/v4/projects/oai%2Fopenairinterface5g/merge_requests?state=opened&per_page=100&labels=NSA" | jq ".[].iid" || true '
|
||||
echo "List of selected MR:\n${MR_LIST}"
|
||||
def MR_ARRAY = MR_LIST.split('\n')
|
||||
//for every selected MR, retrieve the branch name and the latest commit
|
||||
script {
|
||||
// retrieve MR that are opened nd with tag NSA
|
||||
MR_LIST = sh returnStdout: true, script: 'curl --silent "https://gitlab.eurecom.fr/api/v4/projects/oai%2Fopenairinterface5g/merge_requests?state=opened&per_page=100&labels=NSA" | jq -cj "[.[].iid]"'
|
||||
echo "List of selected MRs: ${MR_LIST.trim()}"
|
||||
def MR_ARRAY = new JsonSlurper().parseText(MR_LIST.trim())
|
||||
// for every selected MR, retrieve the branch name and the latest commit
|
||||
for (MR in MR_ARRAY) {
|
||||
SRC_BRANCH=sh returnStdout: true, script: """curl --silent "https://gitlab.eurecom.fr/api/v4/projects/oai%2Fopenairinterface5g/merge_requests/${MR}" | jq ".source_branch" || true """
|
||||
SRC_BRANCH=SRC_BRANCH.trim()
|
||||
|
||||
@@ -50,7 +50,7 @@ amarisoft_ue_1:
|
||||
WakeupScript : none
|
||||
DetachScript : none
|
||||
#end
|
||||
Cmd : /root/NV17-12-21/ue/lteue
|
||||
Cmd : /root/NV18-06-2022/ue/lteue
|
||||
Config : /root/NV17-12-21/ue/config/oaicicd-ue-Ping-SATest.cfg
|
||||
Duration : 60
|
||||
Ping : /tmp/test_ue1.log
|
||||
@@ -71,7 +71,7 @@ amarisoft_ue_2:
|
||||
WakeupScript : none
|
||||
DetachScript : none
|
||||
#end
|
||||
Cmd : /root/NV17-12-21/ue/lteue
|
||||
Cmd : /root/NV18-06-2022/ue/lteue
|
||||
Config : /root/NV17-12-21/ue/config/xxxxxxx.cfg #to be updated for an other scenario
|
||||
Duration : 60
|
||||
Ping :
|
||||
|
||||
@@ -74,6 +74,7 @@ class Containerize():
|
||||
self.eNB2SourceCodePath = ''
|
||||
self.forcedWorkspaceCleanup = False
|
||||
self.imageKind = ''
|
||||
self.proxyCommit = None
|
||||
self.eNB_instance = 0
|
||||
self.eNB_serverId = ['', '', '']
|
||||
self.yamlPath = ['', '', '']
|
||||
@@ -421,6 +422,143 @@ class Containerize():
|
||||
HTML.CreateHtmlTabFooter(False)
|
||||
sys.exit(1)
|
||||
|
||||
def BuildProxy(self, HTML):
|
||||
if self.ranRepository == '' or self.ranBranch == '' or self.ranCommitID == '':
|
||||
HELP.GenericHelp(CONST.Version)
|
||||
sys.exit('Insufficient Parameter')
|
||||
if self.eNB_serverId[self.eNB_instance] == '0':
|
||||
lIpAddr = self.eNBIPAddress
|
||||
lUserName = self.eNBUserName
|
||||
lPassWord = self.eNBPassword
|
||||
lSourcePath = self.eNBSourceCodePath
|
||||
elif self.eNB_serverId[self.eNB_instance] == '1':
|
||||
lIpAddr = self.eNB1IPAddress
|
||||
lUserName = self.eNB1UserName
|
||||
lPassWord = self.eNB1Password
|
||||
lSourcePath = self.eNB1SourceCodePath
|
||||
elif self.eNB_serverId[self.eNB_instance] == '2':
|
||||
lIpAddr = self.eNB2IPAddress
|
||||
lUserName = self.eNB2UserName
|
||||
lPassWord = self.eNB2Password
|
||||
lSourcePath = self.eNB2SourceCodePath
|
||||
if lIpAddr == '' or lUserName == '' or lPassWord == '' or lSourcePath == '':
|
||||
HELP.GenericHelp(CONST.Version)
|
||||
sys.exit('Insufficient Parameter')
|
||||
if self.proxyCommit is None:
|
||||
HELP.GenericHelp(CONST.Version)
|
||||
sys.exit('Insufficient Parameter (need proxyCommit for proxy build)')
|
||||
logging.debug('Building on server: ' + lIpAddr)
|
||||
mySSH = SSH.SSHConnection()
|
||||
mySSH.open(lIpAddr, lUserName, lPassWord)
|
||||
|
||||
# Check that we are on Ubuntu
|
||||
mySSH.command('hostnamectl', '\$', 5)
|
||||
result = re.search('Ubuntu', mySSH.getBefore())
|
||||
self.host = result.group(0)
|
||||
if self.host != 'Ubuntu':
|
||||
logging.error('\u001B[1m Can build proxy only on Ubuntu server\u001B[0m')
|
||||
mySSH.close()
|
||||
sys.exit(1)
|
||||
|
||||
self.cli = 'docker'
|
||||
self.cliBuildOptions = '--no-cache'
|
||||
|
||||
# Workaround for some servers, we need to erase completely the workspace
|
||||
if self.forcedWorkspaceCleanup:
|
||||
mySSH.command('echo ' + lPassWord + ' | sudo -S rm -Rf ' + lSourcePath, '\$', 15)
|
||||
|
||||
oldRanCommidID = self.ranCommitID
|
||||
oldRanRepository = self.ranRepository
|
||||
oldRanAllowMerge = self.ranAllowMerge
|
||||
self.ranCommitID = self.proxyCommit
|
||||
self.ranRepository = 'https://github.com/EpiSci/oai-lte-5g-multi-ue-proxy.git'
|
||||
self.ranAllowMerge = False
|
||||
self._createWorkspace(mySSH, lPassWord, lSourcePath)
|
||||
# to prevent accidentally overwriting data that might be used later
|
||||
self.ranCommitID = oldRanCommidID
|
||||
self.ranRepository = oldRanRepository
|
||||
self.ranAllowMerge = oldRanAllowMerge
|
||||
|
||||
# Let's remove any previous run artifacts if still there
|
||||
mySSH.command(self.cli + ' image prune --force', '\$', 30)
|
||||
# Remove any previous proxy image
|
||||
mySSH.command(self.cli + ' image rm oai-lte-multi-ue-proxy:latest || true', '\$', 30)
|
||||
|
||||
tag = self.proxyCommit
|
||||
logging.debug('building L2sim proxy image for tag ' + tag)
|
||||
# check if the corresponding proxy image with tag exists. If not, build it
|
||||
mySSH.command(self.cli + ' image inspect --format=\'Size = {{.Size}} bytes\' proxy:' + tag, '\$', 5)
|
||||
buildProxy = mySSH.getBefore().count('o such image') != 0
|
||||
if buildProxy:
|
||||
mySSH.command(self.cli + ' build ' + self.cliBuildOptions + ' --target oai-lte-multi-ue-proxy --tag proxy:' + tag + ' --file docker/Dockerfile.ubuntu18.04 . > cmake_targets/log/proxy-build.log 2>&1', '\$', 180)
|
||||
# Note: at this point, OAI images are flattened, but we cannot do this
|
||||
# here, as the flatten script is not in the proxy repo
|
||||
mySSH.command(self.cli + ' image inspect --format=\'Size = {{.Size}} bytes\' proxy:' + tag, '\$', 5)
|
||||
if mySSH.getBefore().count('o such image') != 0:
|
||||
logging.error('\u001B[1m Build of L2sim proxy failed\u001B[0m')
|
||||
mySSH.close()
|
||||
HTML.CreateHtmlTestRow('commit ' + tag, 'KO', CONST.ALL_PROCESSES_OK)
|
||||
HTML.CreateHtmlTabFooter(False)
|
||||
sys.exit(1)
|
||||
else:
|
||||
logging.debug('L2sim proxy image for tag ' + tag + ' already exists, skipping build')
|
||||
|
||||
# retag the build images to that we pick it up later
|
||||
mySSH.command('docker image tag proxy:' + tag + ' oai-lte-multi-ue-proxy:latest', '\$', 5)
|
||||
|
||||
# no merge: is a push to develop, tag the image so we can push it to the registry
|
||||
if not self.ranAllowMerge:
|
||||
mySSH.command('docker image tag proxy:' + tag + ' proxy:develop', '\$', 5)
|
||||
|
||||
# we assume that the host on which this is built will also run the proxy. The proxy
|
||||
# currently requires the following command, and the docker-compose up mechanism of
|
||||
# the CI does not allow to run arbitrary commands. Note that the following actually
|
||||
# belongs to the deployment, not the build of the proxy...
|
||||
logging.warning('the following command belongs to deployment, but no mechanism exists to exec it there!')
|
||||
mySSH.command('sudo ifconfig lo: 127.0.0.2 netmask 255.0.0.0 up', '\$', 5)
|
||||
|
||||
# Analyzing the logs
|
||||
if buildProxy:
|
||||
self.testCase_id = HTML.testCase_id
|
||||
mySSH.command('cd ' + lSourcePath + '/cmake_targets', '\$', 5)
|
||||
mySSH.command('mkdir -p proxy_build_log_' + self.testCase_id, '\$', 5)
|
||||
mySSH.command('mv log/* ' + 'proxy_build_log_' + self.testCase_id, '\$', 5)
|
||||
if (os.path.isfile('./proxy_build_log_' + self.testCase_id + '.zip')):
|
||||
os.remove('./proxy_build_log_' + self.testCase_id + '.zip')
|
||||
if (os.path.isdir('./proxy_build_log_' + self.testCase_id)):
|
||||
shutil.rmtree('./proxy_build_log_' + self.testCase_id)
|
||||
mySSH.command('zip -r -qq proxy_build_log_' + self.testCase_id + '.zip proxy_build_log_' + self.testCase_id, '\$', 5)
|
||||
mySSH.copyin(lIpAddr, lUserName, lPassWord, lSourcePath + '/cmake_targets/build_log_' + self.testCase_id + '.zip', '.')
|
||||
# don't delete such that we might recover the zips
|
||||
#mySSH.command('rm -f build_log_' + self.testCase_id + '.zip','\$', 5)
|
||||
|
||||
# we do not analyze the logs (we assume the proxy builds fine at this stage),
|
||||
# but need to have the following information to correctly display the HTML
|
||||
files = {}
|
||||
errorandwarnings = {}
|
||||
errorandwarnings['errors'] = 0
|
||||
errorandwarnings['warnings'] = 0
|
||||
errorandwarnings['status'] = True
|
||||
files['Target Image Creation'] = errorandwarnings
|
||||
self.collectInfo['proxy'] = files
|
||||
mySSH.command('docker image inspect --format=\'Size = {{.Size}} bytes\' proxy:' + tag, '\$', 5)
|
||||
result = re.search('Size *= *(?P<size>[0-9\-]+) *bytes', mySSH.getBefore())
|
||||
if result is not None:
|
||||
imageSize = float(result.group('size')) / 1000000
|
||||
logging.debug('\u001B[1m proxy size is ' + ('%.0f' % imageSize) + ' Mbytes\u001B[0m')
|
||||
self.allImagesSize['proxy'] = str(round(imageSize,1)) + ' Mbytes'
|
||||
else:
|
||||
logging.debug('proxy size is unknown')
|
||||
self.allImagesSize['proxy'] = 'unknown'
|
||||
|
||||
# Cleaning any created tmp volume
|
||||
mySSH.command(self.cli + ' volume prune --force || true','\$', 15)
|
||||
mySSH.close()
|
||||
|
||||
logging.info('\u001B[1m Building L2sim Proxy Image Pass\u001B[0m')
|
||||
HTML.CreateHtmlTestRow('commit ' + tag, 'OK', CONST.ALL_PROCESSES_OK)
|
||||
HTML.CreateHtmlNextTabHeaderTestRow(self.collectInfo, self.allImagesSize)
|
||||
|
||||
def Copy_Image_to_Test_Server(self, HTML):
|
||||
imageTag = 'develop'
|
||||
if (self.ranAllowMerge):
|
||||
@@ -441,9 +579,17 @@ class Containerize():
|
||||
lUserName = self.eNB2UserName
|
||||
lPassWord = self.eNB2Password
|
||||
lSsh.open(lIpAddr, lUserName, lPassWord)
|
||||
lSsh.command('docker save ' + self.imageToCopy + ':' + imageTag + ' | gzip > ' + self.imageToCopy + '-' + imageTag + '.tar.gz', '\$', 60)
|
||||
lSsh.copyin(lIpAddr, lUserName, lPassWord, '~/' + self.imageToCopy + '-' + imageTag + '.tar.gz', '.')
|
||||
lSsh.command('docker save ' + self.imageToCopy + ':' + imageTag + ' | gzip --fast > ' + self.imageToCopy + '-' + imageTag + '.tar.gz', '\$', 60)
|
||||
ret = lSsh.copyin(lIpAddr, lUserName, lPassWord, '~/' + self.imageToCopy + '-' + imageTag + '.tar.gz', '.')
|
||||
if ret != 0:
|
||||
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.ALL_PROCESSES_OK)
|
||||
self.exitStatus = 1
|
||||
return False
|
||||
lSsh.command('rm ' + self.imageToCopy + '-' + imageTag + '.tar.gz', '\$', 60)
|
||||
if lSsh.getBefore().count('cannot remove'):
|
||||
HTML.CreateHtmlTestRow('file not created by docker save', 'KO', CONST.ALL_PROCESSES_OK)
|
||||
self.exitStatus = 1
|
||||
return False
|
||||
lSsh.close()
|
||||
|
||||
# Going to the Test Server
|
||||
@@ -461,15 +607,26 @@ class Containerize():
|
||||
lPassWord = self.eNB2Password
|
||||
lSsh.open(lIpAddr, lUserName, lPassWord)
|
||||
lSsh.copyout(lIpAddr, lUserName, lPassWord, './' + self.imageToCopy + '-' + imageTag + '.tar.gz', '~')
|
||||
# copyout has no return code and will quit if something fails
|
||||
lSsh.command('docker rmi ' + self.imageToCopy + ':' + imageTag, '\$', 10)
|
||||
lSsh.command('docker load < ' + self.imageToCopy + '-' + imageTag + '.tar.gz', '\$', 60)
|
||||
if lSsh.getBefore().count('o such file') or lSsh.getBefore().count('invalid tar header'):
|
||||
logging.debug(lSsh.getBefore())
|
||||
HTML.CreateHtmlTestRow('problem during docker load', 'KO', CONST.ALL_PROCESSES_OK)
|
||||
self.exitStatus = 1
|
||||
return False
|
||||
lSsh.command('rm ' + self.imageToCopy + '-' + imageTag + '.tar.gz', '\$', 60)
|
||||
if lSsh.getBefore().count('cannot remove'):
|
||||
HTML.CreateHtmlTestRow('file not copied during scp?', 'KO', CONST.ALL_PROCESSES_OK)
|
||||
self.exitStatus = 1
|
||||
return False
|
||||
lSsh.close()
|
||||
|
||||
if os.path.isfile('./' + self.imageToCopy + '-' + imageTag + '.tar.gz'):
|
||||
os.remove('./' + self.imageToCopy + '-' + imageTag + '.tar.gz')
|
||||
|
||||
HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
|
||||
return True
|
||||
|
||||
def DeployObject(self, HTML, EPC):
|
||||
if self.eNB_serverId[self.eNB_instance] == '0':
|
||||
@@ -545,6 +702,9 @@ class Containerize():
|
||||
logging.debug(' -- ' + str(unhealthyNb) + ' unhealthy container(s)')
|
||||
logging.debug(' -- ' + str(startingNb) + ' still starting container(s)')
|
||||
|
||||
self.testCase_id = HTML.testCase_id
|
||||
self.eNB_logFile[self.eNB_instance] = 'enb_' + self.testCase_id + '.log'
|
||||
|
||||
status = False
|
||||
if healthyNb == 1:
|
||||
cnt = 0
|
||||
@@ -559,16 +719,19 @@ class Containerize():
|
||||
status = True
|
||||
logging.info('\u001B[1m Deploying OAI object Pass\u001B[0m')
|
||||
time.sleep(10)
|
||||
else:
|
||||
# containers are unhealthy, so we won't start. However, logs are stored at the end
|
||||
# in UndeployObject so we here store the logs of the unhealthy container to report it
|
||||
mySSH.command('docker logs ' + containerName + ' > ' + lSourcePath + '/cmake_targets/' + self.eNB_logFile[self.eNB_instance], '\$', 30)
|
||||
mySSH.close()
|
||||
|
||||
self.testCase_id = HTML.testCase_id
|
||||
self.eNB_logFile[self.eNB_instance] = 'enb_' + self.testCase_id + '.log'
|
||||
|
||||
if status:
|
||||
HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
|
||||
else:
|
||||
self.exitStatus = 1
|
||||
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.ALL_PROCESSES_OK)
|
||||
|
||||
|
||||
def UndeployObject(self, HTML, RAN):
|
||||
if self.eNB_serverId[self.eNB_instance] == '0':
|
||||
lIpAddr = self.eNBIPAddress
|
||||
@@ -588,7 +751,7 @@ class Containerize():
|
||||
if lIpAddr == '' or lUserName == '' or lPassWord == '' or lSourcePath == '':
|
||||
HELP.GenericHelp(CONST.Version)
|
||||
sys.exit('Insufficient Parameter')
|
||||
logging.debug('\u001B[1m Deploying OAI Object on server: ' + lIpAddr + '\u001B[0m')
|
||||
logging.debug('\u001B[1m Undeploying OAI Object from server: ' + lIpAddr + '\u001B[0m')
|
||||
mySSH = SSH.SSHConnection()
|
||||
mySSH.open(lIpAddr, lUserName, lPassWord)
|
||||
mySSH.command('cd ' + lSourcePath + '/' + self.yamlPath[self.eNB_instance], '\$', 5)
|
||||
@@ -793,12 +956,26 @@ class Containerize():
|
||||
logging.debug(cmd)
|
||||
subprocess.run(cmd, shell=True)
|
||||
|
||||
# if the containers are running, recover the logs!
|
||||
# check which containers are running for log recovery later
|
||||
cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose -f docker-compose-ci.yml ps --all'
|
||||
logging.debug(cmd)
|
||||
deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30)
|
||||
deployStatusLogs = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30)
|
||||
|
||||
# Stop the containers to shut down objects
|
||||
logging.debug('\u001B[1m Stopping containers \u001B[0m')
|
||||
cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose -f docker-compose-ci.yml stop'
|
||||
logging.debug(cmd)
|
||||
try:
|
||||
deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=100)
|
||||
except Exception as e:
|
||||
self.exitStatus = 1
|
||||
logging.error('Could not stop containers')
|
||||
HTML.CreateHtmlTestRow('Could not stop', 'KO', CONST.ALL_PROCESSES_OK)
|
||||
logging.error('\u001B[1m Undeploying OAI Object(s) FAILED\u001B[0m')
|
||||
return
|
||||
|
||||
anyLogs = False
|
||||
for state in deployStatus.split('\n'):
|
||||
for state in deployStatusLogs.split('\n'):
|
||||
res = re.search('Name|----------', state)
|
||||
if res is not None:
|
||||
continue
|
||||
|
||||
@@ -1329,7 +1329,7 @@ class OaiCiTest():
|
||||
SSH.open(self.ADBIPAddress, self.ADBUserName, self.ADBPassword)
|
||||
if self.ADBCentralized:
|
||||
SSH.command('adb devices', '\$', 15)
|
||||
self.UEDevices = re.findall("\\\\r\\\\n([A-Za-z0-9]+)\\\\tdevice",SSH.getBefore())
|
||||
self.UEDevices = re.findall('\r\n([A-Za-z0-9]+)\tdevice',SSH.getBefore())
|
||||
#report number and id of devices found
|
||||
msg = "UEDevices found by GetAllUEDevices : " + " ".join(self.UEDevices)
|
||||
logging.debug(msg)
|
||||
@@ -1379,8 +1379,7 @@ class OaiCiTest():
|
||||
SSH.open(self.ADBIPAddress, self.ADBUserName, self.ADBPassword)
|
||||
if self.ADBCentralized:
|
||||
SSH.command('lsusb | egrep --colour=never "Future Technology Devices International, Ltd FT2232C" | sed -e "s#:.*##" -e "s# #_#g"', '\$', 15)
|
||||
#self.CatMDevices = re.findall("\\\\r\\\\n([A-Za-z0-9_]+)",SSH.getBefore())
|
||||
self.CatMDevices = re.findall("\\\\r\\\\n([A-Za-z0-9_]+)",SSH.getBefore())
|
||||
self.CatMDevices = re.findall('\r\n([A-Za-z0-9_]+)',SSH.getBefore())
|
||||
else:
|
||||
if (os.path.isfile('./modules_list.txt')):
|
||||
os.remove('./modules_list.txt')
|
||||
@@ -2046,7 +2045,7 @@ class OaiCiTest():
|
||||
req_bandwidth = '%.1f Gbits/sec' % req_bw
|
||||
req_bw = req_bw * 1000000000
|
||||
|
||||
result = re.search('Server Report:\\\\r\\\\n(?:|\[ *\d+\].*) (?P<bitrate>[0-9\.]+ [KMG]bits\/sec) +(?P<jitter>[0-9\.]+ ms) +(\d+\/..\d+) +(\((?P<packetloss>[0-9\.]+)%\))', SSH.getBefore())
|
||||
result = re.search('Server Report:\r\n(?:|\[ *\d+\].*) (?P<bitrate>[0-9\.]+ [KMG]bits\/sec) +(?P<jitter>[0-9\.]+ ms) +(\d+\/..\d+) +(\((?P<packetloss>[0-9\.]+)%\))', SSH.getBefore())
|
||||
if result is not None:
|
||||
bitrate = result.group('bitrate')
|
||||
packetloss = result.group('packetloss')
|
||||
@@ -2262,7 +2261,7 @@ class OaiCiTest():
|
||||
|
||||
def Iperf_analyzeV3Output(self, lock, UE_IPAddress, device_id, statusQueue,SSH):
|
||||
|
||||
result = re.search('(?P<bitrate>[0-9\.]+ [KMG]bits\/sec) +(?:|[0-9\.]+ ms +\d+\/\d+ \((?P<packetloss>[0-9\.]+)%\)) +(?:|receiver)\\\\r\\\\n(?:|\[ *\d+\] Sent \d+ datagrams)\\\\r\\\\niperf Done\.', SSH.getBefore())
|
||||
result = re.search('(?P<bitrate>[0-9\.]+ [KMG]bits\/sec) +(?:|[0-9\.]+ ms +\d+\/\d+ \((?P<packetloss>[0-9\.]+)%\)) +(?:|receiver)\r\n(?:|\[ *\d+\] Sent \d+ datagrams)\r\niperf Done\.', SSH.getBefore())
|
||||
if result is None:
|
||||
result = re.search('(?P<error>iperf: error - [a-zA-Z0-9 :]+)', SSH.getBefore())
|
||||
lock.acquire()
|
||||
@@ -3865,7 +3864,7 @@ class OaiCiTest():
|
||||
SSH = sshconnection.SSHConnection()
|
||||
SSH.open(IPAddress, UserName, Password)
|
||||
SSH.command('lsb_release -a', '\$', 5)
|
||||
result = re.search('Description:\\\\t(?P<os_type>[a-zA-Z0-9\-\_\.\ ]+)', SSH.getBefore())
|
||||
result = re.search('Description:\t(?P<os_type>[a-zA-Z0-9\-\_\.\ ]+)', SSH.getBefore())
|
||||
if result is not None:
|
||||
OsVersion = result.group('os_type')
|
||||
logging.debug('OS is: ' + OsVersion)
|
||||
@@ -3883,13 +3882,13 @@ class OaiCiTest():
|
||||
logging.debug('OS is: ' + OsVersion)
|
||||
HTML.OsVersion[idx]=OsVersion
|
||||
SSH.command('uname -r', '\$', 5)
|
||||
result = re.search('uname -r\\\\r\\\\n(?P<kernel_version>[a-zA-Z0-9\-\_\.]+)', SSH.getBefore())
|
||||
result = re.search('uname -r\r\n(?P<kernel_version>[a-zA-Z0-9\-\_\.]+)', SSH.getBefore())
|
||||
if result is not None:
|
||||
KernelVersion = result.group('kernel_version')
|
||||
logging.debug('Kernel Version is: ' + KernelVersion)
|
||||
HTML.KernelVersion[idx]=KernelVersion
|
||||
SSH.command('dpkg --list | egrep --color=never libuhd003', '\$', 5)
|
||||
result = re.search('libuhd003:amd64 *(?P<uhd_version>[0-9\.]+)', SSH.getBefore())
|
||||
SSH.command('dpkg --list | egrep --color=never libuhd', '\$', 5)
|
||||
result = re.search('libuhd.*:amd64 *(?P<uhd_version>[0-9\.]+)', SSH.getBefore())
|
||||
if result is not None:
|
||||
UhdVersion = result.group('uhd_version')
|
||||
logging.debug('UHD Version is: ' + UhdVersion)
|
||||
@@ -3902,7 +3901,7 @@ class OaiCiTest():
|
||||
logging.debug('UHD Version is: ' + UhdVersion)
|
||||
HTML.UhdVersion[idx]=UhdVersion
|
||||
SSH.command('echo ' + Password + ' | sudo -S uhd_find_devices', '\$', 180)
|
||||
usrp_boards = re.findall('product: ([0-9A-Za-z]+)\\\\r\\\\n', SSH.getBefore())
|
||||
usrp_boards = re.findall('product: ([0-9A-Za-z]+)', SSH.getBefore())
|
||||
count = 0
|
||||
for board in usrp_boards:
|
||||
if count == 0:
|
||||
@@ -3914,14 +3913,18 @@ class OaiCiTest():
|
||||
logging.debug('USRP Board(s) : ' + UsrpBoard)
|
||||
HTML.UsrpBoard[idx]=UsrpBoard
|
||||
SSH.command('lscpu', '\$', 5)
|
||||
result = re.search('CPU\(s\): *(?P<nb_cpus>[0-9]+).*Model name: *(?P<model>[a-zA-Z0-9\-\_\.\ \(\)]+).*CPU MHz: *(?P<cpu_mhz>[0-9\.]+)', SSH.getBefore())
|
||||
result = re.search('CPU\(s\): *(?P<nb_cpus>[0-9]+)', SSH.getBefore())
|
||||
if result is not None:
|
||||
CpuNb = result.group('nb_cpus')
|
||||
logging.debug('nb_cpus: ' + CpuNb)
|
||||
HTML.CpuNb[idx]=CpuNb
|
||||
result = re.search('Model name: *(?P<model>[a-zA-Z0-9\-\_\.\ \(\)]+)', SSH.getBefore())
|
||||
if result is not None:
|
||||
CpuModel = result.group('model')
|
||||
logging.debug('model: ' + CpuModel)
|
||||
HTML.CpuModel[idx]=CpuModel
|
||||
result = re.search('CPU MHz: *(?P<cpu_mhz>[0-9\.]+)', SSH.getBefore())
|
||||
if result is not None:
|
||||
CpuMHz = result.group('cpu_mhz') + ' MHz'
|
||||
logging.debug('cpu_mhz: ' + CpuMHz)
|
||||
HTML.CpuMHz[idx]=CpuMHz
|
||||
|
||||
@@ -141,7 +141,7 @@ class PhySim:
|
||||
logging.debug('oai-physim size is unknown')
|
||||
|
||||
# logging to OC Cluster and then switch to corresponding project
|
||||
mySSH.command(f'oc login -u {ocUserName} -p {ocPassword}', '\$', 30)
|
||||
mySSH.command(f'oc login -u {ocUserName} -p {ocPassword} --server https://api.oai.cs.eurecom.fr:6443', '\$', 30)
|
||||
if mySSH.getBefore().count('Login successful.') == 0:
|
||||
logging.error('\u001B[1m OC Cluster Login Failed\u001B[0m')
|
||||
mySSH.close()
|
||||
|
||||
@@ -21,8 +21,6 @@ gNBs =
|
||||
|
||||
////////// Physical parameters:
|
||||
|
||||
ssb_SubcarrierOffset = 31; //0;
|
||||
|
||||
servingCellConfigCommon = (
|
||||
{
|
||||
#spCellConfigCommon
|
||||
|
||||
@@ -32,7 +32,6 @@ gNBs =
|
||||
|
||||
////////// Physical parameters:
|
||||
|
||||
ssb_SubcarrierOffset = 0;
|
||||
min_rxtxtime = 6;
|
||||
pdcch_ConfigSIB1 = (
|
||||
{
|
||||
@@ -215,52 +214,6 @@ MACRLCs = (
|
||||
}
|
||||
);
|
||||
|
||||
L1s = (
|
||||
{
|
||||
num_cc = 1;
|
||||
tr_n_preference = "local_mac";
|
||||
thread_pool_size = 8;
|
||||
prach_dtx_threshold = 120;
|
||||
pucch0_dtx_threshold = 150;
|
||||
}
|
||||
);
|
||||
|
||||
RUs = (
|
||||
{
|
||||
local_rf = "yes"
|
||||
nb_tx = 1
|
||||
nb_rx = 1
|
||||
att_tx = 0
|
||||
att_rx = 0;
|
||||
bands = [78];
|
||||
max_pdschReferenceSignalPower = -27;
|
||||
max_rxgain = 75;
|
||||
eNB_instances = [0];
|
||||
#beamforming 1x4 matrix:
|
||||
bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000];
|
||||
#clock_src = "external";
|
||||
sdr_addrs = "mgmt_addr=172.21.19.14,addr=192.168.10.2,second_addr=192.168.20.2,clock_source=internal,time_source=internal"
|
||||
}
|
||||
);
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_SINGLE_THREAD";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
);
|
||||
|
||||
rfsimulator :
|
||||
{
|
||||
serveraddr = "server";
|
||||
serverport = "4043";
|
||||
options = (); #("saviq"); or/and "chanmod"
|
||||
modelname = "AWGN";
|
||||
IQfile = "/tmp/rfsimulator.iqs";
|
||||
};
|
||||
|
||||
security = {
|
||||
# preferred ciphering algorithms
|
||||
# the first one of the list that an UE supports in chosen
|
||||
|
||||
@@ -21,7 +21,6 @@ gNBs =
|
||||
|
||||
////////// Physical parameters:
|
||||
|
||||
ssb_SubcarrierOffset = 31; //0;
|
||||
min_rxtxtime = 6;
|
||||
|
||||
pdcch_ConfigSIB1 = (
|
||||
@@ -219,16 +218,6 @@ MACRLCs = (
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
);
|
||||
|
||||
log_config =
|
||||
{
|
||||
global_log_level ="info";
|
||||
|
||||
@@ -32,7 +32,6 @@ gNBs =
|
||||
|
||||
////////// Physical parameters:
|
||||
|
||||
ssb_SubcarrierOffset = 0;
|
||||
min_rxtxtime = 6;
|
||||
|
||||
pdcch_ConfigSIB1 = (
|
||||
@@ -216,52 +215,6 @@ MACRLCs = (
|
||||
}
|
||||
);
|
||||
|
||||
L1s = (
|
||||
{
|
||||
num_cc = 1;
|
||||
tr_n_preference = "local_mac";
|
||||
thread_pool_size = 8;
|
||||
prach_dtx_threshold = 120;
|
||||
pucch0_dtx_threshold = 150;
|
||||
}
|
||||
);
|
||||
|
||||
RUs = (
|
||||
{
|
||||
local_rf = "yes"
|
||||
nb_tx = 1
|
||||
nb_rx = 1
|
||||
att_tx = 0
|
||||
att_rx = 0;
|
||||
bands = [78];
|
||||
max_pdschReferenceSignalPower = -27;
|
||||
max_rxgain = 75;
|
||||
eNB_instances = [0];
|
||||
#beamforming 1x4 matrix:
|
||||
bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000];
|
||||
#clock_src = "external";
|
||||
sdr_addrs = "mgmt_addr=172.21.19.14,addr=192.168.10.2,second_addr=192.168.20.2,clock_source=internal,time_source=internal"
|
||||
}
|
||||
);
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_SINGLE_THREAD";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
);
|
||||
|
||||
rfsimulator :
|
||||
{
|
||||
serveraddr = "server";
|
||||
serverport = "4043";
|
||||
options = (); #("saviq"); or/and "chanmod"
|
||||
modelname = "AWGN";
|
||||
IQfile = "/tmp/rfsimulator.iqs";
|
||||
};
|
||||
|
||||
security = {
|
||||
# preferred ciphering algorithms
|
||||
# the first one of the list that an UE supports in chosen
|
||||
|
||||
@@ -21,7 +21,6 @@ gNBs =
|
||||
|
||||
////////// Physical parameters:
|
||||
|
||||
ssb_SubcarrierOffset = 0;
|
||||
min_rxtxtime = 6;
|
||||
|
||||
servingCellConfigCommon = (
|
||||
@@ -236,16 +235,6 @@ MACRLCs = (
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
THREAD_STRUCT = (
|
||||
{
|
||||
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||
parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
|
||||
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||
worker_config = "WORKER_ENABLE";
|
||||
}
|
||||
);
|
||||
|
||||
log_config =
|
||||
{
|
||||
global_log_level ="info";
|
||||
|
||||
@@ -44,7 +44,6 @@ gNBs =
|
||||
local_s_portd = 2152;
|
||||
remote_s_portc = 500;
|
||||
remote_s_portd = 2152;
|
||||
ssb_SubcarrierOffset = 0;
|
||||
min_rxtxtime = 6;
|
||||
|
||||
pdcch_ConfigSIB1 = (
|
||||
|
||||
@@ -36,7 +36,6 @@ gNBs =
|
||||
|
||||
////////// Physical parameters:
|
||||
|
||||
ssb_SubcarrierOffset = 0;
|
||||
min_rxtxtime = 6;
|
||||
|
||||
pdcch_ConfigSIB1 = (
|
||||
|
||||
@@ -37,7 +37,6 @@ gNBs =
|
||||
|
||||
////////// Physical parameters:
|
||||
|
||||
ssb_SubcarrierOffset = 0;
|
||||
pdsch_AntennaPorts_XP = 2;
|
||||
pusch_AntennaPorts = 2;
|
||||
|
||||
|
||||
@@ -38,7 +38,6 @@ gNBs =
|
||||
|
||||
////////// Physical parameters:
|
||||
|
||||
ssb_SubcarrierOffset = 0;
|
||||
pdsch_AntennaPorts_XP = 2;
|
||||
pusch_AntennaPorts = 2;
|
||||
|
||||
|
||||
@@ -21,7 +21,6 @@ gNBs =
|
||||
|
||||
////////// Physical parameters:
|
||||
|
||||
ssb_SubcarrierOffset = 0;
|
||||
min_rxtxtime = 6;
|
||||
|
||||
servingCellConfigCommon = (
|
||||
|
||||
@@ -21,7 +21,6 @@ gNBs =
|
||||
|
||||
////////// Physical parameters:
|
||||
|
||||
ssb_SubcarrierOffset = 0;
|
||||
min_rxtxtime = 6;
|
||||
|
||||
servingCellConfigCommon = (
|
||||
|
||||
@@ -19,7 +19,6 @@ gNBs =
|
||||
|
||||
////////// Physical parameters:
|
||||
|
||||
ssb_SubcarrierOffset = 31; //0;
|
||||
pdsch_AntennaPorts_XP = 2;
|
||||
pusch_AntennaPorts = 2;
|
||||
ul_prbblacklist = "51,52,53,54"
|
||||
|
||||
@@ -41,7 +41,6 @@ gNBs =
|
||||
|
||||
////////// Physical parameters:
|
||||
|
||||
ssb_SubcarrierOffset = 0;
|
||||
pusch_AntennaPorts = 2;
|
||||
ul_prbblacklist = "51,52,53,54"
|
||||
do_SRS = 1;
|
||||
|
||||
@@ -37,7 +37,6 @@ gNBs =
|
||||
|
||||
////////// Physical parameters:
|
||||
|
||||
ssb_SubcarrierOffset = 0;
|
||||
pdsch_AntennaPorts_XP = 2;
|
||||
pusch_AntennaPorts = 2;
|
||||
ul_prbblacklist = "51,52,53,54"
|
||||
|
||||
@@ -37,7 +37,6 @@ gNBs =
|
||||
|
||||
////////// Physical parameters:
|
||||
|
||||
ssb_SubcarrierOffset = 0;
|
||||
pusch_AntennaPorts = 2;
|
||||
ul_prbblacklist = "51,52,53,54"
|
||||
do_SRS = 1;
|
||||
|
||||
@@ -37,7 +37,6 @@ gNBs =
|
||||
|
||||
////////// Physical parameters:
|
||||
|
||||
ssb_SubcarrierOffset = 0;
|
||||
#pusch_TargetSNRx10 = 200;
|
||||
#pucch_TargetSNRx10 = 200;
|
||||
ul_prbblacklist = "51,52,53,54"
|
||||
|
||||
@@ -37,7 +37,6 @@ gNBs =
|
||||
|
||||
////////// Physical parameters:
|
||||
|
||||
ssb_SubcarrierOffset = 0;
|
||||
pdsch_AntennaPorts_XP = 2;
|
||||
pusch_AntennaPorts = 2;
|
||||
#pusch_TargetSNRx10 = 200;
|
||||
|
||||
@@ -21,7 +21,6 @@ gNBs =
|
||||
|
||||
////////// Physical parameters:
|
||||
|
||||
ssb_SubcarrierOffset = 0;
|
||||
min_rxtxtime = 6;
|
||||
|
||||
servingCellConfigCommon = (
|
||||
@@ -219,7 +218,7 @@ RUs = (
|
||||
## beamforming 4x4 matrix:
|
||||
#bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff];
|
||||
|
||||
sdr_addrs = "addr=192.168.10.2,second_addr=192.168.20.2,mgmt_addr=192.168.18.85";
|
||||
sdr_addrs = "addr=192.168.10.2,second_addr=192.168.20.2";
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
@@ -19,7 +19,6 @@ gNBs =
|
||||
|
||||
////////// Physical parameters:
|
||||
|
||||
ssb_SubcarrierOffset = 31; //0;
|
||||
|
||||
servingCellConfigCommon = (
|
||||
{
|
||||
|
||||
@@ -20,7 +20,6 @@ gNBs =
|
||||
|
||||
////////// Physical parameters:
|
||||
|
||||
ssb_SubcarrierOffset = 31; //0;
|
||||
min_rxtxtime = 6;
|
||||
|
||||
servingCellConfigCommon = (
|
||||
|
||||
@@ -32,8 +32,8 @@ gNBs =
|
||||
|
||||
////////// Physical parameters:
|
||||
|
||||
ssb_SubcarrierOffset = 0;
|
||||
min_rxtxtime = 6;
|
||||
enable_sdap = 1;
|
||||
|
||||
pdcch_ConfigSIB1 = (
|
||||
{
|
||||
|
||||
@@ -12,33 +12,32 @@ gNBs =
|
||||
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||
tracking_area_code = 1;
|
||||
plmn_list = ({
|
||||
mcc = 208;
|
||||
mnc = 99;
|
||||
mcc = 222;
|
||||
mnc = 01;
|
||||
mnc_length = 2;
|
||||
snssaiList = (
|
||||
{
|
||||
sst = 1;
|
||||
sd = 0x1; // 0 false, else true
|
||||
#sd = 0x1; // 0 false, else true
|
||||
}
|
||||
);
|
||||
|
||||
});
|
||||
|
||||
nr_cellid = 12345678L;
|
||||
|
||||
////////// Physical parameters:
|
||||
|
||||
ssb_SubcarrierOffset = 0;
|
||||
pdsch_AntennaPorts_XP = 1;
|
||||
pusch_AntennaPorts = 2;
|
||||
do_CSIRS = 0;
|
||||
ul_prbblacklist = "135,136,137,138"
|
||||
min_rxtxtime = 2;
|
||||
do_CSIRS = 1;
|
||||
do_SRS = 1;
|
||||
|
||||
pdcch_ConfigSIB1 = (
|
||||
pdcch_ConfigSIB1 = (
|
||||
{
|
||||
controlResourceSetZero = 12;
|
||||
searchSpaceZero = 10;
|
||||
searchSpaceZero = 0;
|
||||
}
|
||||
);
|
||||
);
|
||||
|
||||
servingCellConfigCommon = (
|
||||
{
|
||||
@@ -48,28 +47,27 @@ gNBs =
|
||||
|
||||
# downlinkConfigCommon
|
||||
#frequencyInfoDL
|
||||
# this is 3300.24 + 134*12*30e3 = 3348.48 MHz (5G NR GSCN: 7741)
|
||||
absoluteFrequencySSB = 623232;
|
||||
dl_frequencyBand = 78;
|
||||
# this is 3300.24 MHz
|
||||
dl_absoluteFrequencyPointA = 620016;
|
||||
# this is 3600 MHz + 43 PRBs@30kHz SCS (same as initial BWP)
|
||||
absoluteFrequencySSB = 641280;
|
||||
dl_frequencyBand = 78;
|
||||
# this is 3600 MHz
|
||||
dl_absoluteFrequencyPointA = 640008;
|
||||
#scs-SpecificCarrierList
|
||||
dl_offstToCarrier = 0;
|
||||
dl_offstToCarrier = 0;
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
dl_subcarrierSpacing = 1;
|
||||
dl_carrierBandwidth = 273;
|
||||
dl_subcarrierSpacing = 1;
|
||||
dl_carrierBandwidth = 106;
|
||||
#initialDownlinkBWP
|
||||
#genericParameters
|
||||
# this is RBstart=0,L=162 (275*(275-L+1))+(274-RBstart))
|
||||
initialDLBWPlocationAndBandwidth = 31624;
|
||||
#
|
||||
# this is RBstart=27,L=48 (275*(L-1))+RBstart
|
||||
initialDLBWPlocationAndBandwidth = 28875; # 6366 12925 12956 28875 12952
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
initialDLBWPsubcarrierSpacing = 1;
|
||||
initialDLBWPsubcarrierSpacing = 1;
|
||||
#pdcch-ConfigCommon
|
||||
initialDLBWPcontrolResourceSetZero = 12;
|
||||
initialDLBWPsearchSpaceZero = 10;
|
||||
initialDLBWPcontrolResourceSetZero = 12;
|
||||
initialDLBWPsearchSpaceZero = 0;
|
||||
|
||||
#uplinkConfigCommon
|
||||
#frequencyInfoUL
|
||||
@@ -79,11 +77,11 @@ gNBs =
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
ul_subcarrierSpacing = 1;
|
||||
ul_carrierBandwidth = 273;
|
||||
ul_carrierBandwidth = 106;
|
||||
pMax = 20;
|
||||
#initialUplinkBWP
|
||||
#genericParameters
|
||||
initialULBWPlocationAndBandwidth = 31624;
|
||||
initialULBWPlocationAndBandwidth = 28875;
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
initialULBWPsubcarrierSpacing = 1;
|
||||
@@ -94,8 +92,8 @@ gNBs =
|
||||
#0 = one, 1=two, 2=four, 3=eight
|
||||
prach_msg1_FDM = 0;
|
||||
prach_msg1_FrequencyStart = 0;
|
||||
zeroCorrelationZoneConfig = 12;
|
||||
preambleReceivedTargetPower = -90;
|
||||
zeroCorrelationZoneConfig = 13;
|
||||
preambleReceivedTargetPower = -96;
|
||||
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
|
||||
preambleTransMax = 6;
|
||||
#powerRampingStep
|
||||
@@ -106,9 +104,9 @@ gNBs =
|
||||
ra_ResponseWindow = 4;
|
||||
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
|
||||
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
|
||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 3;
|
||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4;
|
||||
#oneHalf (0..15) 4,8,12,16,...60,64
|
||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
|
||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 14;
|
||||
#ra_ContentionResolutionTimer
|
||||
#(0..7) 8,16,24,32,40,48,56,64
|
||||
ra_ContentionResolutionTimer = 7;
|
||||
@@ -132,7 +130,7 @@ gNBs =
|
||||
# 0 = neither, 1= group hopping, 2=sequence hopping
|
||||
pucchGroupHopping = 0;
|
||||
hoppingId = 40;
|
||||
p0_nominal = -70;
|
||||
p0_nominal = -90;
|
||||
# ssb_PositionsInBurs_BitmapPR
|
||||
# 1=short, 2=medium, 3=long
|
||||
ssb_PositionsInBurst_PR = 2;
|
||||
@@ -164,22 +162,35 @@ gNBs =
|
||||
nrofUplinkSlots = 2;
|
||||
nrofUplinkSymbols = 4;
|
||||
|
||||
ssPBCH_BlockPower = -25;
|
||||
ssPBCH_BlockPower = -25;
|
||||
}
|
||||
|
||||
);
|
||||
|
||||
|
||||
# Dedicated Serving Cell Configuration
|
||||
servingCellConfigDedicated = ({
|
||||
# BWP-Downlink
|
||||
# BWP 1 Configuration
|
||||
dl_bwp-Id_1 = 1;
|
||||
dl_bwp1_locationAndBandwidth = 1099; // RBstart=0, L=273 (100 MHz BW)
|
||||
dl_bwp1_locationAndBandwidth = 28875; // RBstart=0, L=106 (40 MHz BW)
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
dl_bwp1_subcarrierSpacing = 1;
|
||||
|
||||
# BWP 2 Configuration
|
||||
dl_bwp-Id_2 = 2;
|
||||
dl_bwp2_locationAndBandwidth = 13750; // RBstart=0, L=51 (20 MHz BW)
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
dl_bwp2_subcarrierSpacing = 1;
|
||||
|
||||
# BWP 3 Configuration
|
||||
dl_bwp-Id_3 = 3;
|
||||
dl_bwp3_locationAndBandwidth = 6325; // RBstart=0, L=24 (10 MHz BW)
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
dl_bwp3_subcarrierSpacing = 1;
|
||||
|
||||
firstActiveDownlinkBWP-Id = 1; #BWP-Id
|
||||
defaultDownlinkBWP-Id = 1; #BWP-Id
|
||||
|
||||
@@ -192,17 +203,29 @@ servingCellConfigDedicated = ({
|
||||
# BWP-Uplink
|
||||
# BWP 1 Configuration
|
||||
ul_bwp-Id_1 = 1;
|
||||
ul_bwp1_locationAndBandwidth = 1099; // RBstart=0, L=273 (100 MHz BW)
|
||||
ul_bwp1_locationAndBandwidth = 28875; // RBstart=0, L=106 (40 MHz BW)
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
ul_bwp1_subcarrierSpacing = 1;
|
||||
|
||||
# BWP 2 Configuration
|
||||
ul_bwp-Id_2 = 2;
|
||||
ul_bwp2_locationAndBandwidth = 13750; // RBstart=0, L=51 (20 MHz BW)
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
ul_bwp2_subcarrierSpacing = 1;
|
||||
|
||||
# BWP 3 Configuration
|
||||
ul_bwp-Id_3 = 3;
|
||||
ul_bwp3_locationAndBandwidth = 6325; // RBstart=0, L=24 (10 MHz BW)
|
||||
# subcarrierSpacing
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
ul_bwp3_subcarrierSpacing = 1;
|
||||
|
||||
firstActiveUplinkBWP-Id = 1; #BWP-Id
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
|
||||
# ------- SCTP definitions
|
||||
SCTP :
|
||||
{
|
||||
@@ -213,7 +236,7 @@ servingCellConfigDedicated = ({
|
||||
|
||||
|
||||
////////// AMF parameters:
|
||||
amf_ip_address = ( { ipv4 = "192.168.70.132";
|
||||
amf_ip_address = ( { ipv4 = "172.21.16.136";
|
||||
ipv6 = "192:168:30::17";
|
||||
active = "yes";
|
||||
preference = "ipv4";
|
||||
@@ -224,9 +247,9 @@ servingCellConfigDedicated = ({
|
||||
NETWORK_INTERFACES :
|
||||
{
|
||||
GNB_INTERFACE_NAME_FOR_NG_AMF = "demo-oai";
|
||||
GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.70.129/24";
|
||||
GNB_IPV4_ADDRESS_FOR_NG_AMF = "172.21.16.137/24";
|
||||
GNB_INTERFACE_NAME_FOR_NGU = "demo-oai";
|
||||
GNB_IPV4_ADDRESS_FOR_NGU = "192.168.70.129/24";
|
||||
GNB_IPV4_ADDRESS_FOR_NGU = "172.21.16.137/24";
|
||||
GNB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||
};
|
||||
|
||||
@@ -238,9 +261,8 @@ MACRLCs = (
|
||||
num_cc = 1;
|
||||
tr_s_preference = "local_L1";
|
||||
tr_n_preference = "local_RRC";
|
||||
pusch_TargetSNRx10 = 150;
|
||||
pusch_TargetSNRx10 = 200;
|
||||
pucch_TargetSNRx10 = 200;
|
||||
pusch_FailureThres = 1000;
|
||||
ulsch_max_frame_inactivity = 0;
|
||||
}
|
||||
);
|
||||
@@ -248,27 +270,27 @@ MACRLCs = (
|
||||
L1s = (
|
||||
{
|
||||
num_cc = 1;
|
||||
tr_n_preference = "local_mac";
|
||||
prach_dtx_threshold = 120;
|
||||
pucch0_dtx_threshold = 80;
|
||||
tr_n_preference = "local_mac";
|
||||
prach_dtx_threshold = 120;
|
||||
pucch0_dtx_threshold = 100;
|
||||
ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
|
||||
}
|
||||
);
|
||||
|
||||
RUs = (
|
||||
{
|
||||
local_rf = "yes"
|
||||
nb_tx = 2;
|
||||
nb_rx = 2;
|
||||
att_tx = 0;
|
||||
att_rx = 0;
|
||||
nb_tx = 1
|
||||
nb_rx = 1
|
||||
att_tx = 10;
|
||||
att_rx = 10;
|
||||
bands = [78];
|
||||
max_pdschReferenceSignalPower = -27;
|
||||
max_rxgain = 75;
|
||||
max_rxgain = 114;
|
||||
eNB_instances = [0];
|
||||
##beamforming 1x2 matrix: 1 layer x 2 antennas
|
||||
bf_weights = [0x00007fff, 0x0000];
|
||||
#clock_src = "internal";
|
||||
sdr_addrs = "mgmt_addr=192.168.10.2,addr=192.168.10.2,clock_source=internal,time_source=internal"
|
||||
#beamforming 1x4 matrix:
|
||||
bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000];
|
||||
clock_src = "internal";
|
||||
}
|
||||
);
|
||||
|
||||
@@ -318,4 +340,5 @@ log_config :
|
||||
rrc_log_level ="info";
|
||||
ngap_log_level ="debug";
|
||||
f1ap_log_level ="debug";
|
||||
};
|
||||
};
|
||||
|
||||
@@ -32,9 +32,6 @@ gNBs =
|
||||
|
||||
////////// Physical parameters:
|
||||
|
||||
ssb_SubcarrierOffset = 0;
|
||||
pdsch_AntennaPorts = 1;
|
||||
pusch_AntennaPorts = 1;
|
||||
sib1_tda = 15;
|
||||
min_rxtxtime = 6;
|
||||
|
||||
|
||||
@@ -46,6 +46,7 @@ ENB_PROCESS_NOLOGFILE_TO_ANALYZE = -14
|
||||
ENB_PROCESS_SLAVE_RRU_NOT_SYNCED = -15
|
||||
ENB_REAL_TIME_PROCESSING_ISSUE = -16
|
||||
ENB_RETX_ISSUE = -17
|
||||
ENB_SHUTDOWN_NO_BYE = -18
|
||||
HSS_PROCESS_FAILED = -2
|
||||
HSS_PROCESS_OK = +2
|
||||
MME_PROCESS_FAILED = -3
|
||||
|
||||
@@ -16,7 +16,7 @@ Ref :
|
||||
L1 Rx processing : 175.0
|
||||
PUSCH inner-receiver : 100.0
|
||||
PUSCH decoding : 180.0
|
||||
DL & UL scheduling timing stats : 37.0
|
||||
DL & UL scheduling timing : 37.0
|
||||
UL Indication : 38.0
|
||||
Threshold :
|
||||
feprx : 1.25
|
||||
@@ -28,5 +28,5 @@ Threshold :
|
||||
L1 Rx processing : 1.25
|
||||
PUSCH inner-receiver : 1.25
|
||||
PUSCH decoding : 1.25
|
||||
DL & UL scheduling timing stats : 1.25
|
||||
DL & UL scheduling timing : 1.25
|
||||
UL Indication : 1.25
|
||||
|
||||
@@ -17,7 +17,7 @@ Ref :
|
||||
PUSCH inner-receiver : 100.0
|
||||
#PUSCH decoding : 180.0
|
||||
PUSCH decoding : 240.0
|
||||
DL & UL scheduling timing stats : 37.0
|
||||
DL & UL scheduling timing : 37.0
|
||||
UL Indication : 38.0
|
||||
Threshold :
|
||||
feprx : 1.25
|
||||
@@ -29,5 +29,5 @@ Threshold :
|
||||
L1 Rx processing : 1.25
|
||||
PUSCH inner-receiver : 1.25
|
||||
PUSCH decoding : 1.25
|
||||
DL & UL scheduling timing stats : 1.25
|
||||
DL & UL scheduling timing : 1.25
|
||||
UL Indication : 1.25
|
||||
|
||||
@@ -253,7 +253,7 @@ class EPCManagement():
|
||||
logging.debug('Starting OAI CN5G')
|
||||
mySSH.command('if [ -d ' + self.SourceCodePath + '/scripts ]; then echo ' + self.Password + ' | sudo -S rm -Rf ' + self.SourceCodePath + '/scripts ; fi', '\$', 5)
|
||||
mySSH.command('mkdir -p ' + self.SourceCodePath + '/scripts', '\$', 5)
|
||||
mySSH.command('cd /opt/oai-cn5g-fed-v1.3/docker-compose', '\$', 5)
|
||||
mySSH.command('cd /opt/oai-cn5g-fed-v1.4/docker-compose', '\$', 5)
|
||||
mySSH.command('python3 ./core-network.py '+self.cfgDeploy, '\$', 60)
|
||||
if re.search('start-mini-as-ue', self.cfgDeploy):
|
||||
dFile = 'docker-compose-mini-nrf-asue.yaml'
|
||||
@@ -311,6 +311,8 @@ class EPCManagement():
|
||||
tmp = str(response[0],'utf-8')
|
||||
self.MmeIPAddress = tmp.rstrip()
|
||||
logging.debug('AMF IP Address ' + self.MmeIPAddress)
|
||||
else:
|
||||
logging.error('no container with name oai-amf found, could not retrieve AMF IP address')
|
||||
mySSH.close()
|
||||
|
||||
def CheckHSSProcess(self, status_queue):
|
||||
@@ -535,7 +537,7 @@ class EPCManagement():
|
||||
mySSH.command('docker logs ' + c + ' > ' + self.SourceCodePath + '/logs/' + c + '.log', '\$', 5)
|
||||
|
||||
logging.debug('Terminating OAI CN5G')
|
||||
mySSH.command('cd /opt/oai-cn5g-fed-v1.3/docker-compose', '\$', 5)
|
||||
mySSH.command('cd /opt/oai-cn5g-fed-v1.4/docker-compose', '\$', 5)
|
||||
mySSH.command('python3 ./core-network.py '+self.cfgUnDeploy, '\$', 60)
|
||||
mySSH.command('docker volume prune --force || true', '\$', 60)
|
||||
time.sleep(2)
|
||||
|
||||
@@ -102,7 +102,7 @@ def AssignParams(params_dict):
|
||||
|
||||
|
||||
def GetParametersFromXML(action):
|
||||
if action == 'Build_eNB' or action == 'Build_Image':
|
||||
if action == 'Build_eNB' or action == 'Build_Image' or action == 'Build_Proxy':
|
||||
RAN.Build_eNB_args=test.findtext('Build_eNB_args')
|
||||
CONTAINERS.imageKind=test.findtext('kind')
|
||||
forced_workspace_cleanup = test.findtext('forced_workspace_cleanup')
|
||||
@@ -138,6 +138,9 @@ def GetParametersFromXML(action):
|
||||
RAN.backgroundBuild=True
|
||||
else:
|
||||
RAN.backgroundBuild=False
|
||||
proxy_commit = test.findtext('proxy_commit')
|
||||
if proxy_commit is not None:
|
||||
CONTAINERS.proxyCommit = proxy_commit
|
||||
|
||||
elif action == 'WaitEndBuild_eNB':
|
||||
RAN.Build_eNB_args=test.findtext('Build_eNB_args')
|
||||
@@ -915,10 +918,16 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re
|
||||
HTML=ldpc.Run_PhySim(HTML,CONST,id)
|
||||
elif action == 'Build_Image':
|
||||
CONTAINERS.BuildImage(HTML)
|
||||
elif action == 'Build_Proxy':
|
||||
CONTAINERS.BuildProxy(HTML)
|
||||
elif action == 'Copy_Image_to_Test':
|
||||
CONTAINERS.Copy_Image_to_Test_Server(HTML)
|
||||
success = CONTAINERS.Copy_Image_to_Test_Server(HTML)
|
||||
if not success:
|
||||
RAN.prematureExit = True
|
||||
elif action == 'Deploy_Object':
|
||||
CONTAINERS.DeployObject(HTML, EPC)
|
||||
if CONTAINERS.exitStatus==1:
|
||||
RAN.prematureExit = True
|
||||
elif action == 'Undeploy_Object':
|
||||
CONTAINERS.UndeployObject(HTML, RAN)
|
||||
elif action == 'Cppcheck_Analysis':
|
||||
|
||||
@@ -374,7 +374,7 @@ class RANManagement():
|
||||
mySSH.open(lIpAddr, lUserName, lPassWord)
|
||||
eth_interface = 'any'
|
||||
fltr = 'sctp'
|
||||
logging.debug('\u001B[1m Launching tshark on interface ' + eth_interface + ' with filter "' + fltr + '"\u001B[0m')
|
||||
logging.debug('\u001B[1m Launching tshark on xNB on interface ' + eth_interface + ' with filter "' + fltr + '"\u001B[0m')
|
||||
pcapfile = pcapfile_prefix + self.testCase_id + '_log.pcap'
|
||||
mySSH.command('echo ' + lPassWord + ' | sudo -S rm -f /tmp/' + pcapfile , '\$', 5)
|
||||
mySSH.command('echo $USER; nohup sudo -E tshark -i ' + eth_interface + ' -f "' + fltr + '" -w /tmp/' + pcapfile + ' > /dev/null 2>&1 &','\$', 5)
|
||||
@@ -390,7 +390,7 @@ class RANManagement():
|
||||
mySSH.open(localEpcIpAddr, localEpcUserName, localEpcPassword)
|
||||
eth_interface = 'any'
|
||||
fltr = 'sctp'
|
||||
logging.debug('\u001B[1m Launching tshark on interface ' + eth_interface + ' with filter "' + fltr + '"\u001B[0m')
|
||||
logging.debug('\u001B[1m Launching tshark on EPC on interface ' + eth_interface + ' with filter "' + fltr + '"\u001B[0m')
|
||||
self.epcPcapFile = 'enb_' + self.testCase_id + '_s1log.pcap'
|
||||
mySSH.command('echo ' + localEpcPassword + ' | sudo -S rm -f /tmp/' + self.epcPcapFile , '\$', 5)
|
||||
mySSH.command('echo $USER; nohup sudo tshark -f "host ' + lIpAddr +'" -i ' + eth_interface + ' -f "' + fltr + '" -w /tmp/' + self.epcPcapFile + ' > /tmp/tshark.log 2>&1 &', localEpcUserName, 5)
|
||||
@@ -517,7 +517,7 @@ class RANManagement():
|
||||
localEpcUserName = EPC.UserName
|
||||
localEpcPassword = EPC.Password
|
||||
mySSH.open(localEpcIpAddr, localEpcUserName, localEpcPassword)
|
||||
logging.debug('\u001B[1m Stopping tshark \u001B[0m')
|
||||
logging.debug('\u001B[1m Stopping tshark on EPC \u001B[0m')
|
||||
mySSH.command('echo ' + localEpcPassword + ' | sudo -S killall --signal SIGKILL tshark', '\$', 5)
|
||||
if self.epcPcapFile != '':
|
||||
mySSH.command('echo ' + localEpcPassword + ' | sudo -S chmod 666 /tmp/' + self.epcPcapFile, '\$', 5)
|
||||
@@ -644,18 +644,16 @@ class RANManagement():
|
||||
time.sleep(5)
|
||||
mySSH.command('rm -f my-lte-softmodem-run' + str(self.eNB_instance) + '.sh', '\$', 5)
|
||||
#stopping tshark (valid if eNB and enabled in xml, will not harm otherwise)
|
||||
logging.debug('\u001B[1m Stopping tshark \u001B[0m')
|
||||
logging.debug('\u001B[1m Stopping tshark on xNB \u001B[0m')
|
||||
mySSH.command('echo ' + lPassWord + ' | sudo -S killall --signal SIGKILL tshark', '\$', 5)
|
||||
time.sleep(1)
|
||||
mySSH.close()
|
||||
# If tracer options is on, stopping tshark on EPC side
|
||||
result = re.search('T_stdout', str(self.Initialize_eNB_args))
|
||||
if (result is not None):
|
||||
if EPC.IPAddress != "none" and EPC.IPAddress != '':
|
||||
localEpcIpAddr = EPC.IPAddress
|
||||
localEpcUserName = EPC.UserName
|
||||
localEpcPassword = EPC.Password
|
||||
logging.debug('\u001B[1m Stopping tshark on EPC (' + localEpcIpAddr + ') \u001B[0m')
|
||||
mySSH.open(localEpcIpAddr, localEpcUserName, localEpcPassword)
|
||||
logging.debug('\u001B[1m Stopping tshark \u001B[0m')
|
||||
mySSH.command('echo ' + localEpcPassword + ' | sudo -S killall --signal SIGKILL tshark', '\$', 5)
|
||||
time.sleep(1)
|
||||
if self.epcPcapFile != '':
|
||||
@@ -814,6 +812,7 @@ class RANManagement():
|
||||
ULRetxIssue = False
|
||||
nrRrcRcfgComplete = 0
|
||||
harqFeedbackPast = 0
|
||||
showedByeMsg = False # last line is Bye. -> stopped properly
|
||||
|
||||
line_cnt=0 #log file line counter
|
||||
for line in enb_log_file.readlines():
|
||||
@@ -1026,6 +1025,12 @@ class RANManagement():
|
||||
if result is not None:
|
||||
gnb_markers[k].append(line_cnt)
|
||||
|
||||
# check whether e/gNB log finishes with "Bye." message
|
||||
# Note that it is "=" not "|=" so not only is the regex
|
||||
# asking for EOF (\Z) but we also only retain the last
|
||||
# line's result
|
||||
showedByeMsg = re.search(r'^Bye.\n\Z', str(line), re.MULTILINE) is not None
|
||||
|
||||
enb_log_file.close()
|
||||
|
||||
|
||||
@@ -1210,6 +1215,13 @@ class RANManagement():
|
||||
logging.debug('No real time stats found in the log file')
|
||||
htmleNBFailureMsg += statMsg
|
||||
|
||||
if not showedByeMsg:
|
||||
logging.debug('\u001B[1;37;41m ' + nodeB_prefix + 'NB did not show "Bye." message at end, it likely did not stop properly! \u001B[0m')
|
||||
htmleNBFailureMsg += 'No Bye. message found, did not stop properly\n'
|
||||
global_status = CONST.ENB_SHUTDOWN_NO_BYE
|
||||
else:
|
||||
logging.debug('"Bye." message found at end.')
|
||||
|
||||
else:
|
||||
#Removing UE log
|
||||
statMsg = '[MAC] Removing UE msg count = '+str(removing_ue)
|
||||
|
||||
@@ -529,14 +529,14 @@ class Dashboard:
|
||||
mr_notes = editable_mr.notes.list(all=True)
|
||||
|
||||
body = '[Consolidated Test Results](https://oaitestdashboard.s3.eu-west-1.amazonaws.com/MR'+mr+'/index.html)\\\n'
|
||||
body += 'Tested CommitID: ' + commit + '\\\n'
|
||||
body += 'Tested CommitID: ' + commit
|
||||
|
||||
for i in range(0,n_tests):
|
||||
jobname = args[4*i]
|
||||
buildurl = args[4*i+1]
|
||||
buildid = args[4*i+2]
|
||||
status = args[4*i+3]
|
||||
body += jobname+': **'+status+'** ([' + buildid + '](' + buildurl + '))\\\n'
|
||||
body += '\\\n' + jobname + ': **'+status+'** ([' + buildid + '](' + buildurl + '))'
|
||||
|
||||
#create new note
|
||||
mr_note = editable_mr.notes.create({
|
||||
|
||||
@@ -60,7 +60,7 @@ class SSHConnection():
|
||||
count = 0
|
||||
connect_status = False
|
||||
while count < 4:
|
||||
self.ssh = pexpect.spawn('ssh -o PubkeyAuthentication=no {}@{}'.format(username,ipaddress))
|
||||
self.ssh = pexpect.spawn('ssh -o PubkeyAuthentication=yes {}@{}'.format(username,ipaddress))
|
||||
# Longer timeout at connection due to asterix slowness
|
||||
self.ssh.timeout = 25
|
||||
self.sshresponse = self.ssh.expect(['Are you sure you want to continue connecting (yes/no)?', 'password:', 'Last login', pexpect.EOF, pexpect.TIMEOUT])
|
||||
@@ -84,14 +84,11 @@ class SSHConnection():
|
||||
else:
|
||||
logging.debug('self.sshresponse = ' + str(self.sshresponse))
|
||||
elif self.sshresponse == 2:
|
||||
# Checking if we are really on the remote client defined by its IP address
|
||||
self.command('stdbuf -o0 ifconfig | egrep --color=never "inet addr:|inet "', prompt, 5)
|
||||
result = re.search(str(ipaddress), str(self.ssh.before))
|
||||
if result is None:
|
||||
self.close()
|
||||
else:
|
||||
count = 10
|
||||
connect_status = True
|
||||
# We directly ended up on the remote server because of pubkey auth
|
||||
count = 10
|
||||
connect_status = True
|
||||
# this expect() seems to be necessary to advance the read buffer until the prompt, or getBefore() will not return the last command
|
||||
self.sshresponse = self.ssh.expect([prompt])
|
||||
else:
|
||||
# debug output
|
||||
logging.debug(str(self.ssh.before))
|
||||
@@ -272,4 +269,4 @@ class SSHConnection():
|
||||
sys.exit('SCP failed')
|
||||
|
||||
def getBefore(self):
|
||||
return str(self.ssh.before)
|
||||
return self.ssh.before.decode('utf-8')
|
||||
|
||||
@@ -25,7 +25,7 @@ gnb :
|
||||
L1 Rx processing:
|
||||
PUSCH inner-receiver:
|
||||
PUSCH decoding:
|
||||
DL & UL scheduling timing stats:
|
||||
DL & UL scheduling timing:
|
||||
UL Indication:
|
||||
graph :
|
||||
page1:
|
||||
@@ -45,5 +45,5 @@ gnb :
|
||||
page4:
|
||||
rt.PUSCH inner-receiver:
|
||||
rt.PUSCH decoding:
|
||||
rt.DL & UL scheduling timing stats:
|
||||
rt.DL & UL scheduling timing:
|
||||
rt.UL Indication:
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
- Build_Proxy
|
||||
- Build_PhySim
|
||||
- Run_PhySim
|
||||
- Build_eNB
|
||||
|
||||
42
ci-scripts/xml_files/container_4g_l2sim_proxy.xml
Normal file
42
ci-scripts/xml_files/container_4g_l2sim_proxy.xml
Normal file
@@ -0,0 +1,42 @@
|
||||
<!--
|
||||
|
||||
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
|
||||
|
||||
-->
|
||||
<testCaseList>
|
||||
<htmlTabRef>l2sim-4glte-proxy-build</htmlTabRef>
|
||||
<htmlTabName>Build L2sim proxy image</htmlTabName>
|
||||
<htmlTabIcon>wrench</htmlTabIcon>
|
||||
<repeatCount>1</repeatCount>
|
||||
<TestCaseRequestedList>
|
||||
000001
|
||||
</TestCaseRequestedList>
|
||||
<TestCaseExclusionList></TestCaseExclusionList>
|
||||
|
||||
<testCase id="000001">
|
||||
<class>Build_Proxy</class>
|
||||
<desc>Build L2sim Proxy Image</desc>
|
||||
<eNB_instance>1</eNB_instance>
|
||||
<eNB_serverId>1</eNB_serverId>
|
||||
<forced_workspace_cleanup>True</forced_workspace_cleanup>
|
||||
<proxy_commit>56cfdc0</proxy_commit>
|
||||
</testCase>
|
||||
|
||||
</testCaseList>
|
||||
135
ci-scripts/xml_files/container_4g_l2sim_tdd.xml
Normal file
135
ci-scripts/xml_files/container_4g_l2sim_tdd.xml
Normal file
@@ -0,0 +1,135 @@
|
||||
<!--
|
||||
|
||||
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
|
||||
|
||||
-->
|
||||
<testCaseList>
|
||||
<htmlTabRef>l2sim-4glte-tdd</htmlTabRef>
|
||||
<htmlTabName>Testing 4G LTE L2 sim - FDD eNB</htmlTabName>
|
||||
<htmlTabIcon>wrench</htmlTabIcon>
|
||||
<repeatCount>2</repeatCount>
|
||||
<TestCaseRequestedList>
|
||||
100001
|
||||
000000
|
||||
000001
|
||||
000002
|
||||
000003
|
||||
000011
|
||||
200000
|
||||
020001
|
||||
020002
|
||||
030011
|
||||
030012
|
||||
200001
|
||||
100001
|
||||
</TestCaseRequestedList>
|
||||
<TestCaseExclusionList></TestCaseExclusionList>
|
||||
|
||||
<testCase id="000000">
|
||||
<class>DeployGenObject</class>
|
||||
<desc>Deploy Cassandra Database</desc>
|
||||
<yaml_path>yaml_files/4g_l2sim_fdd</yaml_path>
|
||||
<services>cassandra db_init</services>
|
||||
<nb_healthy>1</nb_healthy>
|
||||
</testCase>
|
||||
|
||||
<testCase id="000001">
|
||||
<class>DeployGenObject</class>
|
||||
<desc>Deploy OAI 4G CoreNetwork</desc>
|
||||
<yaml_path>yaml_files/4g_l2sim_fdd</yaml_path>
|
||||
<services>oai_hss redis magma_mme oai_spgwc oai_spgwu trf_gen</services>
|
||||
<nb_healthy>7</nb_healthy>
|
||||
</testCase>
|
||||
|
||||
<testCase id="000002">
|
||||
<class>DeployGenObject</class>
|
||||
<desc>Deploy OAI 4G eNB L2 sim</desc>
|
||||
<yaml_path>yaml_files/4g_l2sim_fdd</yaml_path>
|
||||
<services>oai_enb</services>
|
||||
<nb_healthy>8</nb_healthy>
|
||||
</testCase>
|
||||
|
||||
<testCase id="000003">
|
||||
<class>DeployGenObject</class>
|
||||
<desc>Deploy OAI L2 sim 4G LTE-UE 1 and Proxy</desc>
|
||||
<yaml_path>yaml_files/4g_l2sim_fdd</yaml_path>
|
||||
<services>proxy oai_ue1</services>
|
||||
<nb_healthy>10</nb_healthy>
|
||||
</testCase>
|
||||
|
||||
<testCase id="000011">
|
||||
<class>IdleSleep</class>
|
||||
<desc>Sleep</desc>
|
||||
<idle_sleep_time_in_sec>10</idle_sleep_time_in_sec>
|
||||
</testCase>
|
||||
|
||||
<testCase id="020001">
|
||||
<class>PingFromContainer</class>
|
||||
<desc>Ping trf-gen from LTE-UE 1</desc>
|
||||
<container_name>l2sim4g-oai-lte-ue1</container_name>
|
||||
<options>-I oaitun_ue1 -c 20 192.168.61.11</options>
|
||||
<loss_threshold>0</loss_threshold>
|
||||
</testCase>
|
||||
|
||||
<testCase id="020002">
|
||||
<class>PingFromContainer</class>
|
||||
<desc>Ping LTE-UE 1 from trf-gen</desc>
|
||||
<container_name>l2sim4g-trf-gen</container_name>
|
||||
<options>-c 20 12.0.0.2</options>
|
||||
<loss_threshold>0</loss_threshold>
|
||||
</testCase>
|
||||
|
||||
<testCase id="030011">
|
||||
<class>IperfFromContainer</class>
|
||||
<desc>Iperf UDP Downlink</desc>
|
||||
<server_container_name>l2sim4g-oai-lte-ue1</server_container_name>
|
||||
<client_container_name>l2sim4g-trf-gen</client_container_name>
|
||||
<server_options>-B 12.0.0.2 -u -i 1 -s</server_options>
|
||||
<client_options>-c 12.0.0.2 -u -i 1 -t 30 -b 1M</client_options>
|
||||
</testCase>
|
||||
|
||||
<testCase id="030012">
|
||||
<class>IperfFromContainer</class>
|
||||
<desc>Iperf UDP Uplink</desc>
|
||||
<server_container_name>l2sim4g-trf-gen</server_container_name>
|
||||
<client_container_name>l2sim4g-oai-lte-ue1</client_container_name>
|
||||
<server_options>-u -i 1 -s</server_options>
|
||||
<client_options>-B 12.0.0.2 -c 192.168.61.11 -u -i 1 -t 30 -b 3M</client_options>
|
||||
</testCase>
|
||||
|
||||
<testCase id="100001">
|
||||
<class>UndeployGenObject</class>
|
||||
<desc>Undeploy all OAI 4G stack</desc>
|
||||
<yaml_path>yaml_files/4g_l2sim_fdd</yaml_path>
|
||||
</testCase>
|
||||
|
||||
<testCase id="200000">
|
||||
<class>StatsFromGenObject</class>
|
||||
<desc>Statistics before Traffic Test</desc>
|
||||
<yaml_path>yaml_files/4g_l2sim_fdd</yaml_path>
|
||||
</testCase>
|
||||
|
||||
<testCase id="200001">
|
||||
<class>StatsFromGenObject</class>
|
||||
<desc>Statistics after Traffic Test</desc>
|
||||
<yaml_path>yaml_files/4g_l2sim_fdd</yaml_path>
|
||||
</testCase>
|
||||
|
||||
</testCaseList>
|
||||
38
ci-scripts/xml_files/container_4g_l2sim_tdd_down.xml
Normal file
38
ci-scripts/xml_files/container_4g_l2sim_tdd_down.xml
Normal file
@@ -0,0 +1,38 @@
|
||||
<!--
|
||||
|
||||
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
|
||||
|
||||
-->
|
||||
<testCaseList>
|
||||
<htmlTabRef>l2sim-4glte-down</htmlTabRef>
|
||||
<htmlTabName>CleanUp 4G L2 sim - FDD eNB</htmlTabName>
|
||||
<htmlTabIcon>trash</htmlTabIcon>
|
||||
<TestCaseRequestedList>
|
||||
100002
|
||||
</TestCaseRequestedList>
|
||||
<TestCaseExclusionList></TestCaseExclusionList>
|
||||
|
||||
<testCase id="100002">
|
||||
<class>UndeployGenObject</class>
|
||||
<desc>Undeploy all OAI 4G stack</desc>
|
||||
<yaml_path>yaml_files/4g_l2sim_fdd</yaml_path>
|
||||
</testCase>
|
||||
|
||||
</testCaseList>
|
||||
@@ -22,7 +22,7 @@
|
||||
-->
|
||||
<testCaseList>
|
||||
<htmlTabRef>rfsim-5gnr-f1</htmlTabRef>
|
||||
<htmlTabName>Testing 5G NR RF sim in containers - CU-DU F1 split</htmlTabName>
|
||||
<htmlTabName>CU-DU F1 split</htmlTabName>
|
||||
<htmlTabIcon>wrench</htmlTabIcon>
|
||||
<TestCaseRequestedList>
|
||||
100021
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
-->
|
||||
<testCaseList>
|
||||
<htmlTabRef>rfsim-5gnr-down-f1</htmlTabRef>
|
||||
<htmlTabName>CleanUp 5G RF - CU-DU F1 split</htmlTabName>
|
||||
<htmlTabName>CleanUp CU-DU F1 split</htmlTabName>
|
||||
<htmlTabIcon>trash</htmlTabIcon>
|
||||
<TestCaseRequestedList>
|
||||
100022
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
-->
|
||||
<testCaseList>
|
||||
<htmlTabRef>rfsim-5gnr-fdd</htmlTabRef>
|
||||
<htmlTabName>Testing 5G NR RF sim - Monolithic FDD gNB</htmlTabName>
|
||||
<htmlTabName>Monolithic FDD gNB with SDAP</htmlTabName>
|
||||
<htmlTabIcon>wrench</htmlTabIcon>
|
||||
<repeatCount>4</repeatCount>
|
||||
<TestCaseRequestedList>
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
-->
|
||||
<testCaseList>
|
||||
<htmlTabRef>rfsim-5gnr-fdd-down</htmlTabRef>
|
||||
<htmlTabName>CleanUp 5G RF - Monolithic FDD gNB</htmlTabName>
|
||||
<htmlTabName>CleanUp Monolithic FDD gNB with SDAP</htmlTabName>
|
||||
<htmlTabIcon>trash</htmlTabIcon>
|
||||
<TestCaseRequestedList>
|
||||
100012
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
-->
|
||||
<testCaseList>
|
||||
<htmlTabRef>rfsim-5gnr-tdd</htmlTabRef>
|
||||
<htmlTabName>Testing 5G NR RF sim - Monolithic TDD gNB</htmlTabName>
|
||||
<htmlTabName>Monolithic TDD gNB</htmlTabName>
|
||||
<htmlTabIcon>wrench</htmlTabIcon>
|
||||
<repeatCount>4</repeatCount>
|
||||
<TestCaseRequestedList>
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
-->
|
||||
<testCaseList>
|
||||
<htmlTabRef>rfsim-5gnr-down</htmlTabRef>
|
||||
<htmlTabName>CleanUp 5G RF - Monolithic TDD gNB</htmlTabName>
|
||||
<htmlTabName>CleanUp Monolithic TDD gNB</htmlTabName>
|
||||
<htmlTabIcon>trash</htmlTabIcon>
|
||||
<TestCaseRequestedList>
|
||||
100002
|
||||
|
||||
42
ci-scripts/xml_files/container_l2sim_proxy.xml
Normal file
42
ci-scripts/xml_files/container_l2sim_proxy.xml
Normal file
@@ -0,0 +1,42 @@
|
||||
<!--
|
||||
|
||||
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
|
||||
|
||||
-->
|
||||
<testCaseList>
|
||||
<htmlTabRef>l2sim-4glte-5gnr-proxy-build</htmlTabRef>
|
||||
<htmlTabName>Build L2sim proxy image</htmlTabName>
|
||||
<htmlTabIcon>wrench</htmlTabIcon>
|
||||
<repeatCount>1</repeatCount>
|
||||
<TestCaseRequestedList>
|
||||
000001
|
||||
</TestCaseRequestedList>
|
||||
<TestCaseExclusionList></TestCaseExclusionList>
|
||||
|
||||
<testCase id="000001">
|
||||
<class>Build_Proxy</class>
|
||||
<desc>Build L2sim Proxy Image</desc>
|
||||
<eNB_instance>1</eNB_instance>
|
||||
<eNB_serverId>1</eNB_serverId>
|
||||
<forced_workspace_cleanup>True</forced_workspace_cleanup>
|
||||
<proxy_commit>56cfdc0</proxy_commit>
|
||||
</testCase>
|
||||
|
||||
</testCaseList>
|
||||
@@ -53,7 +53,6 @@
|
||||
<class>Initialize_UE</class>
|
||||
<desc>Initialize Quectel</desc>
|
||||
<id>idefix</id>
|
||||
<UE_Trace>yes</UE_Trace>
|
||||
</testCase>
|
||||
|
||||
|
||||
|
||||
168
ci-scripts/xml_files/container_sa_b200_quectel.xml
Normal file
168
ci-scripts/xml_files/container_sa_b200_quectel.xml
Normal file
@@ -0,0 +1,168 @@
|
||||
<!--
|
||||
|
||||
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
|
||||
|
||||
-->
|
||||
<testCaseList>
|
||||
<htmlTabRef>TEST-SA-FR1-B200</htmlTabRef>
|
||||
<htmlTabName>SA SanityCheck with QUECTEL</htmlTabName>
|
||||
<htmlTabIcon>tasks</htmlTabIcon>
|
||||
<repeatCount>1</repeatCount>
|
||||
<TestCaseRequestedList>
|
||||
010002
|
||||
030000
|
||||
030101
|
||||
000001
|
||||
010000
|
||||
000001
|
||||
050000
|
||||
050001
|
||||
010002
|
||||
000001
|
||||
030201
|
||||
</TestCaseRequestedList>
|
||||
<!--
|
||||
070001
|
||||
070000
|
||||
070002
|
||||
050002
|
||||
050003
|
||||
-->
|
||||
<TestCaseExclusionList></TestCaseExclusionList>
|
||||
|
||||
<testCase id="010000">
|
||||
<class>Initialize_UE</class>
|
||||
<desc>Initialize Quectel</desc>
|
||||
<id>idefix</id>
|
||||
</testCase>
|
||||
|
||||
|
||||
<testCase id="010002">
|
||||
<class>Terminate_UE</class>
|
||||
<desc>Terminate Quectel</desc>
|
||||
<id>idefix</id>
|
||||
</testCase>
|
||||
|
||||
<testCase id="030000">
|
||||
<class>Copy_Image_to_Test</class>
|
||||
<desc>Copy gNB image to test server</desc>
|
||||
<image_name>oai-gnb</image_name>
|
||||
<registry_svr_id>1</registry_svr_id>
|
||||
<test_svr_id>0</test_svr_id>
|
||||
</testCase>
|
||||
|
||||
<testCase id="030101">
|
||||
<class>Deploy_Object</class>
|
||||
<desc>Deploy gNB (TDD/Band78/40MHz/B200) in a container</desc>
|
||||
<yaml_path>ci-scripts/yaml_files/sa_b200_gnb</yaml_path>
|
||||
<eNB_instance>0</eNB_instance>
|
||||
<eNB_serverId>0</eNB_serverId>
|
||||
</testCase>
|
||||
|
||||
<testCase id="000001">
|
||||
<class>IdleSleep</class>
|
||||
<desc>Sleep</desc>
|
||||
<idle_sleep_time_in_sec>5</idle_sleep_time_in_sec>
|
||||
</testCase>
|
||||
|
||||
<testCase id="000002">
|
||||
<class>IdleSleep</class>
|
||||
<desc>Sleep</desc>
|
||||
<idle_sleep_time_in_sec>20</idle_sleep_time_in_sec>
|
||||
</testCase>
|
||||
|
||||
|
||||
<testCase id="050000">
|
||||
<class>Ping</class>
|
||||
<desc>Ping: 20pings in 20sec</desc>
|
||||
<id>idefix</id>
|
||||
<ping_args>-c 20</ping_args>
|
||||
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
||||
<ping_rttavg_threshold>15</ping_rttavg_threshold>
|
||||
</testCase>
|
||||
|
||||
<testCase id="050001">
|
||||
<class>Ping</class>
|
||||
<desc>Ping: 100pings in 20sec</desc>
|
||||
<id>idefix</id>
|
||||
<ping_args>-c 100 -i 0.2</ping_args>
|
||||
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
||||
<ping_rttavg_threshold>15</ping_rttavg_threshold>
|
||||
</testCase>
|
||||
|
||||
<testCase id="050002">
|
||||
<class>Ping</class>
|
||||
<desc>Ping: 20pings in 20sec</desc>
|
||||
<id>idefix</id>
|
||||
<ping_args>-c 20</ping_args>
|
||||
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
||||
<ping_rttavg_threshold>15</ping_rttavg_threshold>
|
||||
</testCase>
|
||||
|
||||
<testCase id="050003">
|
||||
<class>Ping</class>
|
||||
<desc>Ping: 100pings in 20sec</desc>
|
||||
<id>idefix</id>
|
||||
<ping_args>-c 100 -i 0.2</ping_args>
|
||||
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
||||
<ping_rttavg_threshold>15</ping_rttavg_threshold>
|
||||
</testCase>
|
||||
|
||||
<testCase id="070000">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (DL/125Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
||||
<iperf_args>-u -b 125M -t 60 -i 1 -fm</iperf_args>
|
||||
<direction>DL</direction>
|
||||
<id>idefix</id>
|
||||
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
|
||||
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
||||
<iperf_profile>single-ue</iperf_profile>
|
||||
</testCase>
|
||||
|
||||
<testCase id="070001">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (UL/8Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
||||
<iperf_args>-u -b 8M -t 60 -i 1 -fm</iperf_args>
|
||||
<direction>UL</direction>
|
||||
<id>idefix</id>
|
||||
<iperf_packetloss_threshold>1</iperf_packetloss_threshold>
|
||||
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
||||
<iperf_profile>single-ue</iperf_profile>
|
||||
</testCase>
|
||||
|
||||
<testCase id="070002">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (BIDIR TCP)(10 sec)(single-ue profile)</desc>
|
||||
<iperf_args>-t 10 --bidir</iperf_args>
|
||||
<direction>BIDIR</direction>
|
||||
<id>idefix</id>
|
||||
<iperf_profile>single-ue</iperf_profile>
|
||||
</testCase>
|
||||
|
||||
<testCase id="030201">
|
||||
<class>Undeploy_Object</class>
|
||||
<desc>Undeploy gNB</desc>
|
||||
<yaml_path>ci-scripts/yaml_files/sa_b200_gnb</yaml_path>
|
||||
<eNB_instance>0</eNB_instance>
|
||||
<eNB_serverId>0</eNB_serverId>
|
||||
</testCase>
|
||||
|
||||
</testCaseList>
|
||||
|
||||
42
ci-scripts/xml_files/container_sa_b200_terminate.xml
Normal file
42
ci-scripts/xml_files/container_sa_b200_terminate.xml
Normal file
@@ -0,0 +1,42 @@
|
||||
<!--
|
||||
|
||||
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
|
||||
|
||||
-->
|
||||
<testCaseList>
|
||||
<htmlTabRef>TEST-SA-FR1-B200-terminate</htmlTabRef>
|
||||
<htmlTabName>SA tear-down in case of problem</htmlTabName>
|
||||
<htmlTabIcon>tasks</htmlTabIcon>
|
||||
<repeatCount>1</repeatCount>
|
||||
<TestCaseRequestedList>
|
||||
030201
|
||||
</TestCaseRequestedList>
|
||||
<TestCaseExclusionList></TestCaseExclusionList>
|
||||
|
||||
<testCase id="030201">
|
||||
<class>Undeploy_Object</class>
|
||||
<desc>Undeploy gNB</desc>
|
||||
<yaml_path>ci-scripts/yaml_files/sa_b200_gnb</yaml_path>
|
||||
<eNB_instance>1</eNB_instance>
|
||||
<eNB_serverId>1</eNB_serverId>
|
||||
<image_tag>sa-test</image_tag>
|
||||
</testCase>
|
||||
|
||||
</testCaseList>
|
||||
@@ -1,111 +0,0 @@
|
||||
<!--
|
||||
|
||||
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
|
||||
|
||||
-->
|
||||
<testCaseList>
|
||||
<htmlTabRef>test-f1-05</htmlTabRef>
|
||||
<htmlTabName>Test-F1-CU-DU-05MHz</htmlTabName>
|
||||
<htmlTabIcon>tasks</htmlTabIcon>
|
||||
<repeatCount>2</repeatCount>
|
||||
<TestCaseRequestedList>
|
||||
030201
|
||||
040101
|
||||
030142 030141 000002 040301 000002 040541 040601 040641 040401 040201 030201 030202
|
||||
</TestCaseRequestedList>
|
||||
<TestCaseExclusionList>
|
||||
</TestCaseExclusionList>
|
||||
|
||||
<testCase id="000002">
|
||||
<class>IdleSleep</class>
|
||||
<desc>Sleep</desc>
|
||||
<idle_sleep_time_in_sec>5</idle_sleep_time_in_sec>
|
||||
</testCase>
|
||||
|
||||
<testCase id="030141">
|
||||
<class>Initialize_eNB</class>
|
||||
<desc>Initialize DU (FDD/Band7/5MHz)</desc>
|
||||
<Initialize_eNB_args>-O ci-scripts/conf_files/du.band7.tm1.25PRB.usrpb210.conf --log_config.global_log_options level,nocolor,time</Initialize_eNB_args>
|
||||
<eNB_instance>1</eNB_instance>
|
||||
</testCase>
|
||||
|
||||
<testCase id="030142">
|
||||
<class>Initialize_eNB</class>
|
||||
<desc>Initialize CU (FDD/Band7/5MHz)</desc>
|
||||
<Initialize_eNB_args>-O ci-scripts/conf_files/cu.band7.tm1.25PRB.conf --log_config.global_log_options level,nocolor,time</Initialize_eNB_args>
|
||||
<eNB_instance>0</eNB_instance>
|
||||
</testCase>
|
||||
|
||||
<testCase id="030201">
|
||||
<class>Terminate_eNB</class>
|
||||
<desc>Terminate CU</desc>
|
||||
<eNB_instance>0</eNB_instance>
|
||||
</testCase>
|
||||
|
||||
<testCase id="030202">
|
||||
<class>Terminate_eNB</class>
|
||||
<desc>Terminate DU</desc>
|
||||
<eNB_instance>1</eNB_instance>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040101">
|
||||
<class>Initialize_UE</class>
|
||||
<desc>Initialize UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040201">
|
||||
<class>Terminate_UE</class>
|
||||
<desc>Terminate UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040301">
|
||||
<class>Attach_UE</class>
|
||||
<desc>Attach UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040401">
|
||||
<class>Detach_UE</class>
|
||||
<desc>Detach UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040541">
|
||||
<class>Ping</class>
|
||||
<desc>ping (5MHz - 20 sec)</desc>
|
||||
<ping_args>-c 20</ping_args>
|
||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040601">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (5MHz - DL/15Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
||||
<iperf_args>-u -b 15M -t 30 -i 1</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
<iperf_profile>single-ue</iperf_profile>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040641">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (5MHz - UL/9Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
||||
<iperf_args>-u -b 9M -t 30 -i 1 -R</iperf_args>
|
||||
<iperf_packetloss_threshold>60</iperf_packetloss_threshold>
|
||||
<iperf_profile>single-ue</iperf_profile>
|
||||
</testCase>
|
||||
|
||||
</testCaseList>
|
||||
@@ -1,111 +0,0 @@
|
||||
<!--
|
||||
|
||||
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
|
||||
|
||||
-->
|
||||
<testCaseList>
|
||||
<htmlTabRef>test-f1-10</htmlTabRef>
|
||||
<htmlTabName>Test-F1-CU-DU-10MHz</htmlTabName>
|
||||
<htmlTabIcon>tasks</htmlTabIcon>
|
||||
<repeatCount>4</repeatCount>
|
||||
<TestCaseRequestedList>
|
||||
030201
|
||||
040101
|
||||
030152 030151 000002 040301 000002 040551 040611 040651 040401 040201 030201 030202
|
||||
</TestCaseRequestedList>
|
||||
<TestCaseExclusionList>
|
||||
</TestCaseExclusionList>
|
||||
|
||||
<testCase id="000002">
|
||||
<class>IdleSleep</class>
|
||||
<desc>Sleep</desc>
|
||||
<idle_sleep_time_in_sec>5</idle_sleep_time_in_sec>
|
||||
</testCase>
|
||||
|
||||
<testCase id="030151">
|
||||
<class>Initialize_eNB</class>
|
||||
<desc>Initialize DU (FDD/Band7/10MHz)</desc>
|
||||
<Initialize_eNB_args>-O ci-scripts/conf_files/du.band7.tm1.50PRB.usrpb210.conf --log_config.global_log_options level,nocolor,time</Initialize_eNB_args>
|
||||
<eNB_instance>1</eNB_instance>
|
||||
</testCase>
|
||||
|
||||
<testCase id="030152">
|
||||
<class>Initialize_eNB</class>
|
||||
<desc>Initialize CU (FDD/Band7/10MHz)</desc>
|
||||
<Initialize_eNB_args>-O ci-scripts/conf_files/cu.band7.tm1.50PRB.conf --log_config.global_log_options level,nocolor,time</Initialize_eNB_args>
|
||||
<eNB_instance>0</eNB_instance>
|
||||
</testCase>
|
||||
|
||||
<testCase id="030201">
|
||||
<class>Terminate_eNB</class>
|
||||
<desc>Terminate CU</desc>
|
||||
<eNB_instance>0</eNB_instance>
|
||||
</testCase>
|
||||
|
||||
<testCase id="030202">
|
||||
<class>Terminate_eNB</class>
|
||||
<desc>Terminate DU</desc>
|
||||
<eNB_instance>1</eNB_instance>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040101">
|
||||
<class>Initialize_UE</class>
|
||||
<desc>Initialize UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040201">
|
||||
<class>Terminate_UE</class>
|
||||
<desc>Terminate UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040301">
|
||||
<class>Attach_UE</class>
|
||||
<desc>Attach UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040401">
|
||||
<class>Detach_UE</class>
|
||||
<desc>Detach UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040551">
|
||||
<class>Ping</class>
|
||||
<desc>ping (10MHz - 20 sec)</desc>
|
||||
<ping_args>-c 20</ping_args>
|
||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040611">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (10MHz - DL/32Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
||||
<iperf_args>-u -b 32M -t 30 -i 1</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
<iperf_profile>single-ue</iperf_profile>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040651">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (10MHz - UL/15Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
||||
<iperf_args>-u -b 15M -t 30 -i 1 -R</iperf_args>
|
||||
<iperf_packetloss_threshold>60</iperf_packetloss_threshold>
|
||||
<iperf_profile>single-ue</iperf_profile>
|
||||
</testCase>
|
||||
|
||||
</testCaseList>
|
||||
@@ -1,111 +0,0 @@
|
||||
<!--
|
||||
|
||||
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
|
||||
|
||||
-->
|
||||
<testCaseList>
|
||||
<htmlTabRef>test-f1-20</htmlTabRef>
|
||||
<htmlTabName>Test-F1-CU-DU-20MHz</htmlTabName>
|
||||
<htmlTabIcon>tasks</htmlTabIcon>
|
||||
<repeatCount>4</repeatCount>
|
||||
<TestCaseRequestedList>
|
||||
030201
|
||||
040101
|
||||
030162 030161 000002 040301 000002 040561 040621 040661 040401 040201 030201 030202
|
||||
</TestCaseRequestedList>
|
||||
<TestCaseExclusionList>
|
||||
</TestCaseExclusionList>
|
||||
|
||||
<testCase id="000002">
|
||||
<class>IdleSleep</class>
|
||||
<desc>Sleep</desc>
|
||||
<idle_sleep_time_in_sec>5</idle_sleep_time_in_sec>
|
||||
</testCase>
|
||||
|
||||
<testCase id="030161">
|
||||
<class>Initialize_eNB</class>
|
||||
<desc>Initialize DU (FDD/Band7/20MHz)</desc>
|
||||
<Initialize_eNB_args>-O ci-scripts/conf_files/du.band7.tm1.100PRB.usrpb210.conf --log_config.global_log_options level,nocolor,time</Initialize_eNB_args>
|
||||
<eNB_instance>1</eNB_instance>
|
||||
</testCase>
|
||||
|
||||
<testCase id="030162">
|
||||
<class>Initialize_eNB</class>
|
||||
<desc>Initialize CU (FDD/Band7/20MHz)</desc>
|
||||
<Initialize_eNB_args>-O ci-scripts/conf_files/cu.band7.tm1.100PRB.conf --log_config.global_log_options level,nocolor,time</Initialize_eNB_args>
|
||||
<eNB_instance>0</eNB_instance>
|
||||
</testCase>
|
||||
|
||||
<testCase id="030201">
|
||||
<class>Terminate_eNB</class>
|
||||
<desc>Terminate CU</desc>
|
||||
<eNB_instance>0</eNB_instance>
|
||||
</testCase>
|
||||
|
||||
<testCase id="030202">
|
||||
<class>Terminate_eNB</class>
|
||||
<desc>Terminate DU</desc>
|
||||
<eNB_instance>1</eNB_instance>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040101">
|
||||
<class>Initialize_UE</class>
|
||||
<desc>Initialize UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040201">
|
||||
<class>Terminate_UE</class>
|
||||
<desc>Terminate UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040301">
|
||||
<class>Attach_UE</class>
|
||||
<desc>Attach UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040401">
|
||||
<class>Detach_UE</class>
|
||||
<desc>Detach UE</desc>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040561">
|
||||
<class>Ping</class>
|
||||
<desc>ping (20MHz - 20 sec)</desc>
|
||||
<ping_args>-c 20</ping_args>
|
||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040621">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (20MHz - DL/70Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
||||
<iperf_args>-u -b 70M -t 30 -i 1</iperf_args>
|
||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||
<iperf_profile>single-ue</iperf_profile>
|
||||
</testCase>
|
||||
|
||||
<testCase id="040661">
|
||||
<class>Iperf</class>
|
||||
<desc>iperf (20MHz - UL/15Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
||||
<iperf_args>-u -b 15M -t 30 -i 1 -R</iperf_args>
|
||||
<iperf_packetloss_threshold>60</iperf_packetloss_threshold>
|
||||
<iperf_profile>single-ue</iperf_profile>
|
||||
</testCase>
|
||||
|
||||
</testCaseList>
|
||||
37
ci-scripts/xml_files/fr1_5gc_closure.xml
Normal file
37
ci-scripts/xml_files/fr1_5gc_closure.xml
Normal file
@@ -0,0 +1,37 @@
|
||||
<!--
|
||||
|
||||
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
|
||||
|
||||
-->
|
||||
<testCaseList>
|
||||
<htmlTabRef>5gc-closure</htmlTabRef>
|
||||
<htmlTabName>5GC-Closure</htmlTabName>
|
||||
<htmlTabIcon>log-out</htmlTabIcon>
|
||||
<TestCaseRequestedList>
|
||||
060000
|
||||
</TestCaseRequestedList>
|
||||
<TestCaseExclusionList></TestCaseExclusionList>
|
||||
|
||||
<testCase id="060000">
|
||||
<class>Terminate_5GCN</class>
|
||||
<desc>Terminate 5GC</desc>
|
||||
</testCase>
|
||||
|
||||
</testCaseList>
|
||||
38
ci-scripts/xml_files/fr1_5gc_start.xml
Normal file
38
ci-scripts/xml_files/fr1_5gc_start.xml
Normal file
@@ -0,0 +1,38 @@
|
||||
<!--
|
||||
|
||||
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
|
||||
|
||||
-->
|
||||
<testCaseList>
|
||||
<htmlTabRef>5gc-start-tab</htmlTabRef>
|
||||
<htmlTabName>5GC-Start</htmlTabName>
|
||||
<htmlTabIcon>log-in</htmlTabIcon>
|
||||
<TestCaseRequestedList>
|
||||
000100
|
||||
</TestCaseRequestedList>
|
||||
<TestCaseExclusionList>
|
||||
</TestCaseExclusionList>
|
||||
|
||||
<testCase id="000100">
|
||||
<class>Initialize_5GCN</class>
|
||||
<desc>Initialize 5GC</desc>
|
||||
</testCase>
|
||||
|
||||
</testCaseList>
|
||||
@@ -32,7 +32,7 @@
|
||||
<testCase id="000001">
|
||||
<class>Build_eNB</class>
|
||||
<desc>Build gNB</desc>
|
||||
<Build_eNB_args>-w USRP -c --gNB --ninja</Build_eNB_args>
|
||||
<Build_eNB_args>-w USRP -c --gNB --ninja --noavx512</Build_eNB_args>
|
||||
<eNB_instance>0</eNB_instance>
|
||||
<eNB_serverId>0</eNB_serverId>
|
||||
<forced_workspace_cleanup>True</forced_workspace_cleanup>
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
<testCase id="000002">
|
||||
<class>Build_eNB</class>
|
||||
<desc>Build gNB</desc>
|
||||
<Build_eNB_args>-w USRP -c --gNB --ninja</Build_eNB_args>
|
||||
<Build_eNB_args>-w USRP -c --gNB --ninja --noavx512</Build_eNB_args>
|
||||
<eNB_instance>1</eNB_instance>
|
||||
<eNB_serverId>1</eNB_serverId>
|
||||
<backgroundBuild>True</backgroundBuild>
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
<htmlTabIcon>tasks</htmlTabIcon>
|
||||
<repeatCount>1</repeatCount>
|
||||
<TestCaseRequestedList>
|
||||
010002
|
||||
030000
|
||||
040000
|
||||
000002
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
<htmlTabIcon>tasks</htmlTabIcon>
|
||||
<repeatCount>1</repeatCount>
|
||||
<TestCaseRequestedList>
|
||||
010002
|
||||
031000
|
||||
041000
|
||||
000002
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
<htmlTabIcon>tasks</htmlTabIcon>
|
||||
<repeatCount>1</repeatCount>
|
||||
<TestCaseRequestedList>
|
||||
010002
|
||||
030000
|
||||
040000
|
||||
000002
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
<htmlTabIcon>tasks</htmlTabIcon>
|
||||
<repeatCount>1</repeatCount>
|
||||
<TestCaseRequestedList>
|
||||
010002
|
||||
040000
|
||||
000002
|
||||
010000
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
<htmlTabIcon>tasks</htmlTabIcon>
|
||||
<repeatCount>1</repeatCount>
|
||||
<TestCaseRequestedList>
|
||||
010002
|
||||
042000
|
||||
000002
|
||||
010000
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
<htmlTabIcon>tasks</htmlTabIcon>
|
||||
<repeatCount>1</repeatCount>
|
||||
<TestCaseRequestedList>
|
||||
011002
|
||||
041000
|
||||
000002
|
||||
011000
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
<mode>TesteNB</mode>
|
||||
<class>Build_eNB</class>
|
||||
<desc>Build gNB (USRP)</desc>
|
||||
<Build_eNB_args>--gNB -w USRP --ninja --cmake-opt -DBoost_INCLUDE_DIR=/usr/include/boost169</Build_eNB_args>
|
||||
<Build_eNB_args>--gNB -w USRP --ninja --cmake-opt -DBoost_INCLUDE_DIR=/usr/include/boost169 --noavx512</Build_eNB_args>
|
||||
<forced_workspace_cleanup>True</forced_workspace_cleanup>
|
||||
</testCase>
|
||||
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
<testCase id="000001">
|
||||
<class>Build_PhySim</class>
|
||||
<desc>Build for physical simulator</desc>
|
||||
<physim_build_args>--phy_simulators --ninja</physim_build_args>
|
||||
<physim_build_args>--phy_simulators --ninja --noavx512</physim_build_args>
|
||||
<forced_workspace_cleanup>FALSE</forced_workspace_cleanup>
|
||||
</testCase>
|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
<htmlTabIcon>tasks</htmlTabIcon>
|
||||
<repeatCount>1</repeatCount>
|
||||
<TestCaseRequestedList>
|
||||
010002
|
||||
030000
|
||||
000002
|
||||
010000
|
||||
@@ -88,7 +89,7 @@
|
||||
<id>nrmodule2_quectel</id>
|
||||
<ping_args>-c 20</ping_args>
|
||||
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
||||
<ping_rttavg_threshold>40</ping_rttavg_threshold>
|
||||
<ping_rttavg_threshold>60</ping_rttavg_threshold>
|
||||
</testCase>
|
||||
<testCase id="050001">
|
||||
<class>Ping</class>
|
||||
@@ -96,7 +97,7 @@
|
||||
<id>nrmodule2_quectel</id>
|
||||
<ping_args>-c 100 -s 1024 -i 0,2</ping_args>
|
||||
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
||||
<ping_rttavg_threshold>40</ping_rttavg_threshold>
|
||||
<ping_rttavg_threshold>60</ping_rttavg_threshold>
|
||||
</testCase>
|
||||
|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
<htmlTabIcon>tasks</htmlTabIcon>
|
||||
<repeatCount>1</repeatCount>
|
||||
<TestCaseRequestedList>
|
||||
010002
|
||||
030001
|
||||
000002
|
||||
010000
|
||||
@@ -88,7 +89,7 @@
|
||||
<id>nrmodule2_quectel</id>
|
||||
<ping_args>-c 20</ping_args>
|
||||
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
||||
<ping_rttavg_threshold>40</ping_rttavg_threshold>
|
||||
<ping_rttavg_threshold>60</ping_rttavg_threshold>
|
||||
</testCase>
|
||||
<testCase id="050003">
|
||||
<class>Ping</class>
|
||||
@@ -96,7 +97,7 @@
|
||||
<id>nrmodule2_quectel</id>
|
||||
<ping_args>-c 100 -s 1024 -i 0,2</ping_args>
|
||||
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
||||
<ping_rttavg_threshold>40</ping_rttavg_threshold>
|
||||
<ping_rttavg_threshold>60</ping_rttavg_threshold>
|
||||
</testCase>
|
||||
|
||||
|
||||
|
||||
305
ci-scripts/yaml_files/4g_l2sim_fdd/docker-compose.yml
Normal file
305
ci-scripts/yaml_files/4g_l2sim_fdd/docker-compose.yml
Normal file
@@ -0,0 +1,305 @@
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
cassandra:
|
||||
image: cassandra:2.1
|
||||
container_name: l2sim4g-cassandra
|
||||
networks:
|
||||
private_net:
|
||||
ipv4_address: 192.168.68.2
|
||||
environment:
|
||||
CASSANDRA_CLUSTER_NAME: "OAI HSS Cluster"
|
||||
CASSANDRA_ENDPOINT_SNITCH: GossipingPropertyFileSnitch
|
||||
healthcheck:
|
||||
test: /bin/bash -c "nodetool status"
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
db_init:
|
||||
image: cassandra:2.1
|
||||
container_name: l2sim4g-db-init
|
||||
depends_on: [cassandra]
|
||||
deploy:
|
||||
restart_policy:
|
||||
condition: on-failure
|
||||
max_attempts: 10
|
||||
networks:
|
||||
private_net:
|
||||
ipv4_address: 192.168.68.4
|
||||
volumes:
|
||||
- ../4g_rfsimulator_fdd_05MHz/oai_db.cql:/home/oai_db.cql
|
||||
entrypoint: /bin/bash -c "cqlsh --file /home/oai_db.cql 192.168.68.2 && echo 'OK'"
|
||||
|
||||
oai_hss:
|
||||
image: oai-hss:latest
|
||||
container_name: l2sim4g-oai-hss
|
||||
privileged: true
|
||||
depends_on: [cassandra]
|
||||
networks:
|
||||
private_net:
|
||||
ipv4_address: 192.168.68.3
|
||||
public_net:
|
||||
ipv4_address: 192.168.61.2
|
||||
environment:
|
||||
REALM: openairinterface.org
|
||||
HSS_FQDN: hss.openairinterface.org
|
||||
PREFIX: /openair-hss/etc
|
||||
cassandra_Server_IP: 192.168.68.2
|
||||
OP_KEY: 1006020f0a478bf6b699f15c062e42b3
|
||||
LTE_K: fec86ba6eb707ed08905757b1bb44b8f
|
||||
APN1: oai.ipv4
|
||||
APN2: internet
|
||||
FIRST_IMSI: 208960100000001
|
||||
NB_USERS: 10
|
||||
healthcheck:
|
||||
test: /bin/bash -c "pgrep oai_hss"
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
redis:
|
||||
image: redis:6.0.5
|
||||
container_name: l2sim4g-redis
|
||||
privileged: true
|
||||
networks:
|
||||
public_net:
|
||||
ipv4_address: 192.168.61.6
|
||||
volumes:
|
||||
- ../4g_rfsimulator_fdd_05MHz/redis_extern.conf:/usr/local/etc/redis/redis.conf
|
||||
entrypoint: /bin/bash -c "redis-server /usr/local/etc/redis/redis.conf"
|
||||
healthcheck:
|
||||
test: /bin/bash -c "redis-cli -h 192.168.61.6 -p 6380 ping"
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
magma_mme:
|
||||
image: magma-mme:latest
|
||||
container_name: l2sim4g-magma-mme
|
||||
hostname: mme
|
||||
privileged: true
|
||||
depends_on: [oai_hss, redis]
|
||||
networks:
|
||||
public_net:
|
||||
ipv4_address: 192.168.61.3
|
||||
environment:
|
||||
TZ: Europe/Paris
|
||||
REALM: openairinterface.org
|
||||
PREFIX: /openair-mme/etc
|
||||
HSS_HOSTNAME: hss
|
||||
HSS_FQDN: hss.openairinterface.org
|
||||
HSS_REALM: openairinterface.org
|
||||
MME_FQDN: mme.openairinterface.org
|
||||
FEATURES: mme_oai
|
||||
volumes:
|
||||
- ../4g_rfsimulator_fdd_05MHz/mme_fd.sprint.conf:/magma-mme/etc/mme_fd.conf.tmplt
|
||||
- ../4g_rfsimulator_fdd_05MHz/mme.conf:/magma-mme/etc/mme.conf
|
||||
- ../4g_rfsimulator_fdd_05MHz/entrypoint.sh:/magma-mme/bin/entrypoint.sh
|
||||
entrypoint: /bin/bash -c "/magma-mme/bin/entrypoint.sh"
|
||||
healthcheck:
|
||||
test: /bin/bash -c "pgrep oai_mme"
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
oai_spgwc:
|
||||
image: oai-spgwc:latest
|
||||
privileged: true
|
||||
depends_on: [magma_mme]
|
||||
container_name: l2sim4g-oai-spgwc
|
||||
networks:
|
||||
public_net:
|
||||
ipv4_address: 192.168.61.4
|
||||
environment:
|
||||
TZ: Europe/Paris
|
||||
SGW_INTERFACE_NAME_FOR_S11: eth0
|
||||
PGW_INTERFACE_NAME_FOR_SX: eth0
|
||||
DEFAULT_DNS_IPV4_ADDRESS: 172.21.3.100
|
||||
DEFAULT_DNS_SEC_IPV4_ADDRESS: 8.8.4.4
|
||||
PUSH_PROTOCOL_OPTION: 'true'
|
||||
APN_NI_1: oai.ipv4
|
||||
APN_NI_2: oai.ipv4_2
|
||||
DEFAULT_APN_NI_1: oai.ipv4
|
||||
UE_IP_ADDRESS_POOL_1: '12.0.0.2 - 12.0.0.254'
|
||||
UE_IP_ADDRESS_POOL_2: '12.1.1.2 - 12.1.1.254'
|
||||
MCC: '208'
|
||||
MNC: '96'
|
||||
MNC03: '096'
|
||||
TAC: 1
|
||||
GW_ID: 1
|
||||
REALM: openairinterface.org
|
||||
healthcheck:
|
||||
test: /bin/bash -c "pgrep oai_spgwc"
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
oai_spgwu:
|
||||
image: oai-spgwu-tiny:latest
|
||||
privileged: true
|
||||
container_name: l2sim4g-oai-spgwu-tiny
|
||||
depends_on: [oai_spgwc]
|
||||
networks:
|
||||
public_net:
|
||||
ipv4_address: 192.168.61.5
|
||||
environment:
|
||||
TZ: Europe/Paris
|
||||
PID_DIRECTORY: /var/run
|
||||
INSTANCE: 1
|
||||
SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP: eth0
|
||||
PGW_INTERFACE_NAME_FOR_SGI: eth0
|
||||
SGW_INTERFACE_NAME_FOR_SX: eth0
|
||||
SPGWC0_IP_ADDRESS: 192.168.61.4
|
||||
NETWORK_UE_IP: '12.0.0.0/24'
|
||||
NETWORK_UE_NAT_OPTION: 'yes'
|
||||
MCC: '208'
|
||||
MNC: '96'
|
||||
MNC03: '096'
|
||||
TAC: 1
|
||||
GW_ID: 1
|
||||
REALM: openairinterface.org
|
||||
healthcheck:
|
||||
test: /bin/bash -c "pgrep oai_spgwu"
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
trf_gen:
|
||||
image: trf-gen:production
|
||||
privileged: true
|
||||
container_name: l2sim4g-trf-gen
|
||||
networks:
|
||||
public_net:
|
||||
ipv4_address: 192.168.61.11
|
||||
entrypoint: /bin/bash -c "ip route add 12.0.0.0/24 via 192.168.61.5 dev eth0; sleep infinity"
|
||||
healthcheck:
|
||||
test: /bin/bash -c "ping -c 2 192.168.61.5"
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
oai_enb:
|
||||
image: oai-enb:develop
|
||||
privileged: true
|
||||
container_name: l2sim4g-oai-enb
|
||||
network_mode: "host"
|
||||
environment:
|
||||
TZ: Europe/Paris
|
||||
USE_NFAPI_VNF: 'yes'
|
||||
ENB_NAME: enb-l2sim-vnf
|
||||
MCC: '208'
|
||||
MNC: '96'
|
||||
MNC_LENGTH: 2
|
||||
TAC: 1
|
||||
UTRA_BAND_ID: 7
|
||||
DL_FREQUENCY_IN_MHZ: 2680
|
||||
UL_FREQUENCY_OFFSET_IN_MHZ: 120
|
||||
NID_CELL: 10
|
||||
NB_PRB: 25
|
||||
MME_S1C_IP_ADDRESS: 192.168.61.3
|
||||
ENB_INTERFACE_NAME_FOR_S1_MME: eth0
|
||||
ENB_IPV4_ADDRESS_FOR_S1_MME: 192.168.61.1
|
||||
ENB_INTERFACE_NAME_FOR_S1U: eth0
|
||||
ENB_IPV4_ADDRESS_FOR_S1U: 192.168.61.1
|
||||
ENB_IPV4_ADDRESS_FOR_X2C: 192.168.61.1
|
||||
FLEXRAN_ENABLED: 'no'
|
||||
FLEXRAN_INTERFACE_NAME: eth0
|
||||
FLEXRAN_IPV4_ADDRESS: 192.168.61.1
|
||||
LOCAL_S_IF_NAME: 'lo:'
|
||||
REMOTE_S_ADDRESS: 127.0.0.1
|
||||
LOCAL_S_ADDRESS: 127.0.0.2
|
||||
USE_ADDITIONAL_OPTIONS: --MACRLCs.[0].scheduler_mode "default" --log_config.global_log_options level,nocolor,time
|
||||
healthcheck:
|
||||
test: /bin/bash -c "pgrep lte-softmodem"
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
proxy:
|
||||
image: oai-lte-multi-ue-proxy:latest
|
||||
privileged: true
|
||||
container_name: "l2sim4g-proxy"
|
||||
network_mode: "host"
|
||||
environment:
|
||||
TZ: Europe/Paris
|
||||
command: "/oai-lte-multi-ue-proxy/bin/proxy 1"
|
||||
depends_on:
|
||||
- oai_enb
|
||||
healthcheck:
|
||||
test: /bin/bash -c "pgrep proxy"
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
oai_ue1:
|
||||
image: oai-lte-ue:develop
|
||||
privileged: true
|
||||
container_name: l2sim4g-oai-lte-ue1
|
||||
network_mode: "host"
|
||||
environment:
|
||||
TZ: Europe/Paris
|
||||
USE_NFAPI: 'yes'
|
||||
OPENAIR_DIR: /opt/oai-nr-ue
|
||||
MCC: '208'
|
||||
MNC: '96'
|
||||
SHORT_IMSI: '0100000001'
|
||||
LTE_KEY: 'fec86ba6eb707ed08905757b1bb44b8f'
|
||||
OPC: 'c42449363bbad02b66d16bc975d77cc1'
|
||||
MSISDN: '001011234561010'
|
||||
HPLMN: 20896
|
||||
UE_NFAPI_IF_NAME: eno1
|
||||
ENB_IP_ADDRESS: 127.0.0.1
|
||||
LTE_UE_IP_ADDRESS: 127.0.0.1
|
||||
USE_ADDITIONAL_OPTIONS: --L2-emul 5 --nokrnmod 1 --num-ues 1 --node-number 2 --log_config.global_log_options level,nocolor,time
|
||||
volumes:
|
||||
- ../../../openair1/SIMULATION/LTE_PHY/BLER_SIMULATIONS/AWGN/AWGN_results:/opt/oai-nr-ue/openair1/SIMULATION/LTE_PHY/BLER_SIMULATIONS/AWGN/AWGN_results
|
||||
healthcheck:
|
||||
test: /bin/bash -c "pgrep lte-uesoftmodem"
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
oai_ue2:
|
||||
image: oai-lte-ue:develop
|
||||
privileged: true
|
||||
container_name: l2sim4g-oai-lte-ue2
|
||||
network_mode: "host"
|
||||
environment:
|
||||
TZ: Europe/Paris
|
||||
USE_NFAPI: 'yes'
|
||||
OPENAIR_DIR: /opt/oai-nr-ue
|
||||
MCC: '208'
|
||||
MNC: '96'
|
||||
SHORT_IMSI: '0100000002'
|
||||
LTE_KEY: 'fec86ba6eb707ed08905757b1bb44b8f'
|
||||
OPC: 'c42449363bbad02b66d16bc975d77cc1'
|
||||
MSISDN: '001011234561010'
|
||||
HPLMN: 20896
|
||||
UE_NFAPI_IF_NAME: eno1
|
||||
ENB_IP_ADDRESS: 127.0.0.1
|
||||
LTE_UE_IP_ADDRESS: 127.0.0.1
|
||||
USE_ADDITIONAL_OPTIONS: --L2-emul 5 --nokrnmod 1 --num-ues 1 --node-number 3 --log_config.global_log_options level,nocolor,time
|
||||
volumes:
|
||||
- ../../../openair1/SIMULATION/LTE_PHY/BLER_SIMULATIONS/AWGN/AWGN_results:/opt/oai-nr-ue/openair1/SIMULATION/LTE_PHY/BLER_SIMULATIONS/AWGN/AWGN_results
|
||||
healthcheck:
|
||||
test: /bin/bash -c "pgrep lte-uesoftmodem"
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
networks:
|
||||
private_net:
|
||||
name: l2sim4g-oai-private-net
|
||||
ipam:
|
||||
config:
|
||||
- subnet: 192.168.68.0/26
|
||||
driver_opts:
|
||||
com.docker.network.bridge.name: "l2sim4g-private"
|
||||
public_net:
|
||||
name: l2sim4g-oai-public-net
|
||||
ipam:
|
||||
config:
|
||||
- subnet: 192.168.61.0/26
|
||||
driver_opts:
|
||||
com.docker.network.bridge.name: "l2sim4g-public"
|
||||
@@ -2,7 +2,7 @@ version: '3.8'
|
||||
services:
|
||||
oai-nrf:
|
||||
container_name: "l2sim-oai-nrf"
|
||||
image: oai-nrf:latest
|
||||
image: oai-nrf:august-dev
|
||||
environment:
|
||||
- NRF_INTERFACE_NAME_FOR_SBI=eth0
|
||||
- NRF_INTERFACE_PORT_FOR_SBI=80
|
||||
@@ -42,7 +42,7 @@ services:
|
||||
ipv4_address: 192.168.71.131
|
||||
oai-amf:
|
||||
container_name: "l2sim-oai-amf"
|
||||
image: oai-amf:latest
|
||||
image: oai-amf:august-dev
|
||||
environment:
|
||||
- TZ=Europe/paris
|
||||
- INSTANCE=0
|
||||
@@ -110,7 +110,7 @@ services:
|
||||
ipv4_address: 192.168.71.132
|
||||
oai-smf:
|
||||
container_name: "l2sim-oai-smf"
|
||||
image: oai-smf:latest
|
||||
image: oai-smf:august-dev
|
||||
environment:
|
||||
- TZ=Europe/Paris
|
||||
- INSTANCE=0
|
||||
@@ -156,7 +156,7 @@ services:
|
||||
ipv4_address: 192.168.71.133
|
||||
oai-spgwu:
|
||||
container_name: "l2sim-oai-spgwu"
|
||||
image: oai-spgwu-tiny:latest
|
||||
image: oai-spgwu-tiny:august-dev
|
||||
environment:
|
||||
- TZ=Europe/Paris
|
||||
- PID_DIRECTORY=/var/run
|
||||
|
||||
@@ -2,7 +2,7 @@ version: '3.8'
|
||||
services:
|
||||
oai-nrf:
|
||||
container_name: "rfsim5g-oai-nrf"
|
||||
image: oai-nrf:latest
|
||||
image: oai-nrf:august-dev
|
||||
environment:
|
||||
- NRF_INTERFACE_NAME_FOR_SBI=eth0
|
||||
- NRF_INTERFACE_PORT_FOR_SBI=80
|
||||
@@ -42,7 +42,7 @@ services:
|
||||
ipv4_address: 192.168.71.131
|
||||
oai-amf:
|
||||
container_name: "rfsim5g-oai-amf"
|
||||
image: oai-amf:latest
|
||||
image: oai-amf:august-dev
|
||||
environment:
|
||||
- TZ=Europe/paris
|
||||
- INSTANCE=0
|
||||
@@ -110,7 +110,7 @@ services:
|
||||
ipv4_address: 192.168.71.132
|
||||
oai-smf:
|
||||
container_name: "rfsim5g-oai-smf"
|
||||
image: oai-smf:latest
|
||||
image: oai-smf:august-dev
|
||||
environment:
|
||||
- TZ=Europe/Paris
|
||||
- INSTANCE=0
|
||||
@@ -156,7 +156,7 @@ services:
|
||||
ipv4_address: 192.168.71.133
|
||||
oai-spgwu:
|
||||
container_name: "rfsim5g-oai-spgwu"
|
||||
image: oai-spgwu-tiny:latest
|
||||
image: oai-spgwu-tiny:august-dev
|
||||
environment:
|
||||
- TZ=Europe/Paris
|
||||
- PID_DIRECTORY=/var/run
|
||||
|
||||
44
ci-scripts/yaml_files/sa_b200_gnb/docker-compose.yml
Normal file
44
ci-scripts/yaml_files/sa_b200_gnb/docker-compose.yml
Normal file
@@ -0,0 +1,44 @@
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
gnb_mono_tdd:
|
||||
image: oai-gnb:latest
|
||||
privileged: true
|
||||
container_name: sa-b200-gnb
|
||||
environment:
|
||||
USE_SA_TDD_MONO_B2XX: 'yes'
|
||||
USE_B2XX: 'yes'
|
||||
GNB_NAME: gNB-in-docker
|
||||
MCC: '222'
|
||||
MNC: '01'
|
||||
MNC_LENGTH: 2
|
||||
TAC: 1
|
||||
NSSAI_SST: 1
|
||||
NSSAI_SD0: 1
|
||||
AMF_IP_ADDRESS: 172.21.16.136
|
||||
GNB_NGA_IF_NAME: eth0
|
||||
GNB_NGA_IP_ADDRESS: 192.168.68.194
|
||||
GNB_NGU_IF_NAME: eth0
|
||||
GNB_NGU_IP_ADDRESS: 192.168.68.194
|
||||
USE_ADDITIONAL_OPTIONS: --sa -E -q --RUs.[0].sdr_addrs serial=30C51D4 --continuous-tx --log_config.global_log_options level,nocolor,time,line_num,function
|
||||
volumes:
|
||||
- /dev:/dev
|
||||
networks:
|
||||
public_net:
|
||||
ipv4_address: 192.168.68.194
|
||||
#entrypoint: /bin/bash -c "sleep infinity"
|
||||
healthcheck:
|
||||
# pgrep does NOT work
|
||||
test: /bin/bash -c "ps aux | grep -v grep | grep -c softmodem"
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
networks:
|
||||
public_net:
|
||||
name: sa-b200-gnb-net
|
||||
ipam:
|
||||
config:
|
||||
- subnet: 192.168.68.192/26
|
||||
driver_opts:
|
||||
com.docker.network.bridge.name: "sa-gnb-net"
|
||||
@@ -203,17 +203,23 @@ if (CMAKE_SYSTEM_PROCESSOR STREQUAL "armv7l")
|
||||
else (CMAKE_SYSTEM_PROCESSOR STREQUAL "armv7l")
|
||||
if(EXISTS "/proc/cpuinfo")
|
||||
file(STRINGS "/proc/cpuinfo" CPUINFO REGEX flags LIMIT_COUNT 1)
|
||||
if (CPUINFO MATCHES "avx2")
|
||||
set(C_FLAGS_PROCESSOR "${C_FLAGS_PROCESSOR} -mavx2")
|
||||
message("NOAVX512 is ${NOAVX512}")
|
||||
if (CPUINFO MATCHES "avx512bw" AND "${NOAVX512}" STREQUAL "False")
|
||||
set(C_FLAGS_PROCESSOR "${C_FLAGS_PROCESSOR} -mavx512bw -march=skylake-avx512 -mtune=skylake-avx512 " )
|
||||
set(COMPILATION_AVX2 "True")
|
||||
else()
|
||||
set(COMPILATION_AVX2 "False")
|
||||
endif()
|
||||
if (CPUINFO MATCHES "sse4_1")
|
||||
set(C_FLAGS_PROCESSOR "${C_FLAGS_PROCESSOR} -msse4.1 -mpclmul")
|
||||
endif()
|
||||
if (CPUINFO MATCHES "ssse3")
|
||||
set(C_FLAGS_PROCESSOR "${C_FLAGS_PROCESSOR} -mssse3")
|
||||
if (CPUINFO MATCHES "avx2")
|
||||
set(C_FLAGS_PROCESSOR "${C_FLAGS_PROCESSOR} -mavx2")
|
||||
set(COMPILATION_AVX2 "True")
|
||||
else()
|
||||
set(COMPILATION_AVX2 "False")
|
||||
endif()
|
||||
if (CPUINFO MATCHES "sse4_1")
|
||||
set(C_FLAGS_PROCESSOR "${C_FLAGS_PROCESSOR} -msse4.1 -mpclmul")
|
||||
endif()
|
||||
if (CPUINFO MATCHES "ssse3")
|
||||
set(C_FLAGS_PROCESSOR "${C_FLAGS_PROCESSOR} -mssse3")
|
||||
endif()
|
||||
endif()
|
||||
else()
|
||||
Message("/proc/cpuinfo does not exit. We will use manual CPU flags")
|
||||
@@ -224,11 +230,11 @@ set(C_FLAGS_PROCESSOR " ${C_FLAGS_PROCESSOR} ${CFLAGS_PROCESSOR_USER}")
|
||||
|
||||
Message("C_FLAGS_PROCESSOR is ${C_FLAGS_PROCESSOR}")
|
||||
|
||||
if (CMAKE_SYSTEM_PROCESSOR MATCHES "x86")
|
||||
if ( (NOT( C_FLAGS_PROCESSOR MATCHES "ssse3")) OR (NOT( C_FLAGS_PROCESSOR MATCHES "msse4.1")) )
|
||||
Message(FATAL_ERROR "For x86 Architecture, you must have following flags: -mssse3 -msse4.1. The current detected flags are: ${C_FLAGS_PROCESSOR}. You can pass the flags manually in build script, for example: ./build_oai --cflags_processor \"-mssse3 -msse4.1 -mavx2\" ")
|
||||
endif()
|
||||
endif()
|
||||
#if (CMAKE_SYSTEM_PROCESSOR MATCHES "x86")
|
||||
# if ( (NOT( C_FLAGS_PROCESSOR MATCHES "ssse3")) OR (NOT( C_FLAGS_PROCESSOR MATCHES "msse4.1")) )
|
||||
# Message(FATAL_ERROR "For x86 Architecture, you must have following flags: -mssse3 -msse4.1. The current detected flags are: ${C_FLAGS_PROCESSOR}. You can pass the flags manually in build script, for example: ./build_oai --cflags_processor \"-mssse3 -msse4.1 -mavx2\" ")
|
||||
# endif()
|
||||
#endif()
|
||||
|
||||
#
|
||||
# add autotools definitions that were maybe used!
|
||||
@@ -247,6 +253,28 @@ add_boolean_option(SANITIZE_ADDRESS False "enable the address sanitizer (ASan)")
|
||||
if (SANITIZE_ADDRESS)
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fno-omit-frame-pointer -fno-common")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer -fno-common")
|
||||
# There seems to be some incompatibility with pthread_create and the RT scheduler, which
|
||||
# results in pthread_create hanging.
|
||||
#
|
||||
# When we switch from Ubuntu 16.04 to 18.04, we found that running with the address sanitizer,
|
||||
# the pthread_create function calls were not working. The inital thought was that we were
|
||||
# trying to create a thread that was not-blocking and would eventually crash the machine during
|
||||
# the run. After more debugging, we found that we would never even start the thread. We narrowed
|
||||
# down the first two instances of pthread_create in the gNB and NR UE to be sctp_eNB_task and
|
||||
# one_thread, respectively. We found that adding sleeps, and various other pauses to the threads
|
||||
# had not effect. From there, we found that if we add an abort(); prior to the thread loop, we
|
||||
# do not execute that. This indicated to us that the problem is not likely to be a non-blocking
|
||||
# thread, but perhaps and issue with pthread_create itself. From there we begain to research the
|
||||
# issue on the web. See: https://github.com/google/sanitizers/issues/1125
|
||||
#
|
||||
# Google searching indicates this appears to be a problem since at least 2018. This could be something
|
||||
# wrong in the pthread library, or something subtly wrong in this CMakeLists.txt. Use Ubuntu 20.04 instead.
|
||||
endif ()
|
||||
|
||||
add_boolean_option(SANITIZE_UNDEFINED False "enable the undefined behavior sanitizer (UBSan)")
|
||||
if (SANITIZE_UNDEFINED)
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=undefined -fno-sanitize-recover=all")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined -fno-sanitize-recover=all")
|
||||
endif ()
|
||||
|
||||
add_definitions("-DASN_DISABLE_OER_SUPPORT")
|
||||
@@ -258,7 +286,7 @@ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -ggdb2 -Wl,-rpath -Wl,${C
|
||||
# these changes are related to hardcoded path to include .h files
|
||||
set(debugOpt "-ggdb2 -DMALLOC_CHECK_=3 -fno-delete-null-pointer-checks")
|
||||
set(CMAKE_C_FLAGS_DEBUG "${debugOpt} -O0")
|
||||
set(CMAKE_C_FLAGS_RELWITHDEBINFO "${debugOpt} -O2 ")
|
||||
set(CMAKE_C_FLAGS_RELWITHDEBINFO "${debugOpt} -O2")
|
||||
set(CMAKE_C_FLAGS_RELEASE "-O3")
|
||||
|
||||
# Enable assert() for RelWithDebInfo builds
|
||||
@@ -306,13 +334,9 @@ add_definitions("-DPACKAGE_BUGREPORT=\"openair4g-devel@lists.eurecom.fr\"")
|
||||
|
||||
# Debug related options
|
||||
#########################################
|
||||
add_boolean_option(ASN_EMIT_DEBUG False "ASN1 coder/decoder Debug")
|
||||
add_boolean_option(ASN_THREAD_SAFE True "ASN1 coder/decoder Debug")
|
||||
add_boolean_option(MSG_PRINT True "print debug messages")
|
||||
add_boolean_option(DEBUG_ASN1C False "ASN1 coder/decoder Debug traces, see common/utils/config.h, the logs are regular OAI logs, in the log group 'ASN'")
|
||||
add_boolean_option(DISABLE_XER_PRINT False "print XER Format")
|
||||
add_boolean_option(XER_PRINT False "print XER Format")
|
||||
add_boolean_option(RRC_MSG_PRINT False "print RRC messages")
|
||||
add_boolean_option(PDCP_MSG_PRINT False "print PDCP messages to /tmp/pdcp.log")
|
||||
add_boolean_option(DEBUG_PDCP_PAYLOAD False "print PDCP PDU to stdout") # if true, make sure that global and PDCP log levels are trace
|
||||
add_boolean_option(DEBUG_MAC_INTERFACE False "print MAC-RLC PDU exchange to stdout") # if true, make sure that global and PDCP log levels are trace
|
||||
add_boolean_option(TRACE_RLC_PAYLOAD False "print RLC PDU to stdout") # if true, make sure that global and PDCP log levels are trace
|
||||
@@ -322,7 +346,6 @@ add_boolean_option(UE_AUTOTEST_TRACE False "Activate UE autotest specific logs
|
||||
add_boolean_option(UE_DEBUG_TRACE False "Activate UE debug trace")
|
||||
add_boolean_option(UE_TIMING_TRACE False "Activate UE timing trace")
|
||||
add_boolean_option(DEBUG_CONSOLE False "disables stdout/stderr buffering")
|
||||
set(JSONLOGS $ENV{JSONLOGS})
|
||||
|
||||
set (OCP_ITTI ${OPENAIR_DIR}/common/utils/ocp_itti)
|
||||
add_library(ITTI
|
||||
@@ -331,6 +354,12 @@ add_library(ITTI
|
||||
)
|
||||
add_dependencies(ITTI rrc_flag)
|
||||
|
||||
# asn1c skeletons have hardcoded this flag to make customized debug logs
|
||||
# OAI uses this feature to re-use OAI LOG_I(ASN, ...)
|
||||
if (DEBUG_ASN1C)
|
||||
add_definitions(-DHAVE_CONFIG_H)
|
||||
endif()
|
||||
|
||||
##################################################
|
||||
# ASN.1 grammar C code generation & dependencies #
|
||||
##################################################
|
||||
@@ -818,7 +847,6 @@ add_boolean_option(UE_EXPANSION False "enable UE_EXPANSION w
|
||||
add_boolean_option(PHY_TX_THREAD False "enable UE_EXPANSION with max 256 UE")
|
||||
add_boolean_option(PRE_SCD_THREAD False "enable UE_EXPANSION with max 256 UE")
|
||||
add_boolean_option(UESIM_EXPANSION False "enable UESIM_EXPANSION with max 256 UE")
|
||||
add_boolean_option(ITTI_SIM False "enable itti simulator")
|
||||
|
||||
########################
|
||||
# Include order
|
||||
@@ -1184,15 +1212,12 @@ add_library(UTIL
|
||||
${OPENAIR2_DIR}/UTIL/MATH/oml.c
|
||||
${OPENAIR2_DIR}/UTIL/OPT/probe.c
|
||||
${OPENAIR_DIR}/common/utils/threadPool/thread-pool.c
|
||||
${OPENAIR_DIR}/common/utils/cpustats.c
|
||||
${OPENAIR_DIR}/common/utils/utils.c
|
||||
${OPENAIR_DIR}/common/utils/system.c
|
||||
${OPENAIR_DIR}/common/utils/backtrace.c
|
||||
${OPENAIR_DIR}/common/utils/time_meas.c
|
||||
)
|
||||
if (${JSONLOGS})
|
||||
target_compile_definitions(UTIL PUBLIC -DOAI_LOG_JSON)
|
||||
endif()
|
||||
|
||||
|
||||
set(SECU_OSA_SRC
|
||||
${OPENAIR2_DIR}/UTIL/OSA/osa_key_deriver.c
|
||||
@@ -1389,8 +1414,11 @@ set(PHY_NR_CODINGIF
|
||||
)
|
||||
|
||||
add_library(ldpc_orig MODULE ${PHY_LDPC_ORIG_SRC} )
|
||||
target_link_libraries(ldpc_orig PRIVATE ldpc_gen_HEADERS)
|
||||
add_library(ldpc_optim MODULE ${PHY_LDPC_OPTIM_SRC} )
|
||||
target_link_libraries(ldpc_optim PRIVATE ldpc_gen_HEADERS)
|
||||
add_library(ldpc_optim8seg MODULE ${PHY_LDPC_OPTIM8SEG_SRC} )
|
||||
target_link_libraries(ldpc_optim8seg PRIVATE ldpc_gen_HEADERS)
|
||||
add_library(ldpc_cl MODULE ${PHY_LDPC_CL_SRC} )
|
||||
target_link_libraries(ldpc_cl OpenCL)
|
||||
add_dependencies(ldpc_cl nrLDPC_decoder_kernels_CL)
|
||||
@@ -1402,6 +1430,7 @@ if (CUDA_FOUND)
|
||||
endif (CUDA_FOUND)
|
||||
|
||||
add_library(ldpc MODULE ${PHY_LDPC_OPTIM8SEGMULTI_SRC} )
|
||||
target_link_libraries(ldpc PRIVATE ldpc_gen_HEADERS)
|
||||
|
||||
|
||||
add_library(coding MODULE ${PHY_TURBOSRC} )
|
||||
@@ -1547,9 +1576,10 @@ set(PHY_SRC_UE
|
||||
|
||||
set(PHY_NR_SRC_COMMON
|
||||
${OPENAIR1_DIR}/PHY/NR_TRANSPORT/nr_prach_common.c
|
||||
${OPENAIR1_DIR}/PHY/NR_UE_TRANSPORT/srs_modulation_nr.c
|
||||
${OPENAIR1_DIR}/PHY/NR_TRANSPORT/nr_csi_rs.c
|
||||
${OPENAIR1_DIR}/PHY/NR_TRANSPORT/nr_scrambling.c
|
||||
${OPENAIR1_DIR}/PHY/NR_REFSIG/scrambling_luts.c
|
||||
${OPENAIR1_DIR}/PHY/NR_UE_TRANSPORT/srs_modulation_nr.c
|
||||
)
|
||||
|
||||
set(PHY_NR_SRC
|
||||
@@ -1573,7 +1603,6 @@ set(PHY_SRC_UE
|
||||
${OPENAIR1_DIR}/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c
|
||||
${OPENAIR1_DIR}/PHY/NR_REFSIG/ul_ref_seq_nr.c
|
||||
${OPENAIR1_DIR}/PHY/NR_REFSIG/nr_dmrs_rx.c
|
||||
${OPENAIR1_DIR}/PHY/NR_TRANSPORT/nr_csi_rs.c
|
||||
${OPENAIR1_DIR}/PHY/NR_REFSIG/nr_gold.c
|
||||
${OPENAIR1_DIR}/PHY/NR_REFSIG/nr_gen_mod_table.c
|
||||
${OPENAIR1_DIR}/PHY/NR_REFSIG/dmrs_nr.c
|
||||
@@ -1621,6 +1650,7 @@ set(PHY_SRC_UE
|
||||
${OPENAIR1_DIR}/PHY/NR_UE_TRANSPORT/dci_nr.c
|
||||
${OPENAIR1_DIR}/PHY/NR_UE_TRANSPORT/dci_tools_nr.c
|
||||
${OPENAIR1_DIR}/PHY/NR_UE_TRANSPORT/pucch_nr.c
|
||||
${OPENAIR1_DIR}/PHY/NR_UE_TRANSPORT/csi_rx.c
|
||||
${OPENAIR1_DIR}/PHY/NR_TRANSPORT/nr_uci_tools_common.c
|
||||
${OPENAIR1_DIR}/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c
|
||||
${OPENAIR1_DIR}/PHY/NR_REFSIG/ul_ref_seq_nr.c
|
||||
@@ -1782,7 +1812,15 @@ set(NR_PDCP_SRC
|
||||
${OPENAIR2_DIR}/LAYER2/nr_pdcp/nr_pdcp_timer_thread.c
|
||||
${OPENAIR2_DIR}/LAYER2/nr_pdcp/nr_pdcp_security_nea2.c
|
||||
${OPENAIR2_DIR}/LAYER2/nr_pdcp/nr_pdcp_integrity_nia2.c
|
||||
${OPENAIR2_DIR}/LAYER2/nr_pdcp/nr_pdcp_integrity_nia1.c
|
||||
${OPENAIR2_DIR}/LAYER2/nr_pdcp/asn1_utils.c
|
||||
#hack: include these files to compile the nr phy simulators
|
||||
#these files should not be here, will be removed at some point when the
|
||||
#computation is done directly inside nr_pdcp_integrity_nia1.c instead
|
||||
#of reusing code of osa_stream_eia.c
|
||||
${OPENAIR2_DIR}/UTIL/OSA/osa_stream_eia.c
|
||||
${OPENAIR2_DIR}/UTIL/OSA/osa_snow3g.c
|
||||
${OPENAIR2_DIR}/UTIL/OSA/osa_rijndael.c
|
||||
)
|
||||
|
||||
set(NR_SDAP_SRC
|
||||
@@ -1836,6 +1874,8 @@ set(L2_NR_SRC
|
||||
${NR_RRC_DIR}/rrc_gNB.c
|
||||
${NR_RRC_DIR}/nr_rrc_common.c
|
||||
${NR_RRC_DIR}/L2_nr_interface.c
|
||||
${NR_RRC_DIR}/mac_rrc_dl_direct.c
|
||||
${NR_RRC_DIR}/mac_rrc_dl_f1ap.c
|
||||
${NR_RRC_DIR}/nr_rrc_config.c
|
||||
${NR_RRC_DIR}/rrc_gNB_nsa.c
|
||||
${NR_RRC_DIR}/rrc_gNB_internode.c
|
||||
@@ -1914,6 +1954,9 @@ set (MAC_NR_SRC
|
||||
${NR_GNB_MAC_DIR}/gNB_scheduler_uci.c
|
||||
${NR_GNB_MAC_DIR}/gNB_scheduler_srs.c
|
||||
${NR_GNB_MAC_DIR}/gNB_scheduler_RA.c
|
||||
${NR_GNB_MAC_DIR}/mac_rrc_dl_handler.c
|
||||
${NR_GNB_MAC_DIR}/mac_rrc_ul_direct.c
|
||||
${NR_GNB_MAC_DIR}/mac_rrc_ul_f1ap.c
|
||||
)
|
||||
|
||||
|
||||
@@ -1930,6 +1973,7 @@ set (MAC_SRC_UE
|
||||
|
||||
set (MAC_NR_SRC_UE
|
||||
${NR_UE_PHY_INTERFACE_DIR}/NR_IF_Module.c
|
||||
${NR_UE_PHY_INTERFACE_DIR}/NR_Packet_Drop.c
|
||||
${NR_UE_MAC_DIR}/config_ue.c
|
||||
${NR_UE_MAC_DIR}/mac_vars.c
|
||||
${NR_UE_MAC_DIR}/main_ue_nr.c
|
||||
@@ -2546,15 +2590,7 @@ add_executable(test5Gnas
|
||||
)
|
||||
target_link_libraries (test5Gnas LIB_5GNAS_GNB CONFIG_LIB minimal_lib )
|
||||
|
||||
add_executable(tstlog
|
||||
${OPENAIR_DIR}/common/utils/LOG/tst-log.cpp
|
||||
${OPENAIR_DIR}/common/utils/minimal_stub.c
|
||||
${T_SOURCE}
|
||||
)
|
||||
target_link_libraries (tstlog pthread rt dl ${T_LIB} CONFIG_LIB UTIL)
|
||||
if (${JSONLOGS})
|
||||
target_link_libraries (tstlog uuid)
|
||||
endif()
|
||||
|
||||
# lte-softmodem is both eNB and UE implementation
|
||||
###################################################
|
||||
|
||||
@@ -2597,9 +2633,6 @@ target_link_libraries (lte-softmodem ${LIBXML2_LIBRARIES})
|
||||
target_link_libraries (lte-softmodem pthread m CONFIG_LIB rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} sctp ${PROTOBUF_LIB} ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES})
|
||||
target_link_libraries (lte-softmodem ${LIB_LMS_LIBRARIES})
|
||||
target_link_libraries (lte-softmodem ${T_LIB})
|
||||
if (${JSONLOGS})
|
||||
target_link_libraries (lte-softmodem uuid})
|
||||
endif()
|
||||
|
||||
|
||||
add_executable(ocp-enb
|
||||
@@ -2636,9 +2669,6 @@ target_link_libraries (ocp-enb
|
||||
${RAL_LIB} ${NAS_UE_LIB} ITTI ${FLPT_MSG_LIB} ${FLEXRAN_AGENT_LIB} ${FSPT_MSG_LIB}
|
||||
-Wl,--end-group z dl)
|
||||
target_link_libraries (ocp-enb ${LIBXML2_LIBRARIES} pthread m CONFIG_LIB rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} sctp ${PROTOBUF_LIB} ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES} ${LIB_LMS_LIBRARIES} ${T_LIB})
|
||||
if (${JSONLOGS})
|
||||
target_link_libraries (ocp-enb uuid)
|
||||
endif()
|
||||
|
||||
add_executable(oairu
|
||||
${OPENAIR_TARGETS}/RT/USER/lte-ru.c
|
||||
@@ -2659,9 +2689,6 @@ target_link_libraries (oairu
|
||||
-Wl,--end-group z dl)
|
||||
|
||||
target_link_libraries (oairu pthread m CONFIG_LIB rt ${CMAKE_DL_LIBS} ${T_LIB})
|
||||
if (${JSONLOGS})
|
||||
target_link_libraries (oairu uuid)
|
||||
endif()
|
||||
|
||||
|
||||
# lte-uesoftmodem is UE implementation
|
||||
@@ -2704,9 +2731,6 @@ target_link_libraries (lte-uesoftmodem ${LIBXML2_LIBRARIES})
|
||||
target_link_libraries (lte-uesoftmodem pthread m CONFIG_LIB rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} sctp ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES} ${ATLAS_LIBRARIES})
|
||||
target_link_libraries (lte-uesoftmodem ${LIB_LMS_LIBRARIES})
|
||||
target_link_libraries (lte-uesoftmodem ${T_LIB})
|
||||
if (${JSONLOGS})
|
||||
target_link_libraries (lte-uesoftmodem uuid)
|
||||
endif()
|
||||
|
||||
# nr-softmodem
|
||||
###################################################
|
||||
@@ -2748,9 +2772,6 @@ target_link_libraries (nr-softmodem ${LIBXML2_LIBRARIES})
|
||||
target_link_libraries (nr-softmodem pthread m CONFIG_LIB rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} sctp ${XFORMS_LIBRARIES} ${PROTOBUF_LIB} ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES} ${ATLAS_LIBRARIES})
|
||||
target_link_libraries (nr-softmodem ${LIB_LMS_LIBRARIES})
|
||||
target_link_libraries (nr-softmodem ${T_LIB})
|
||||
if (${JSONLOGS})
|
||||
target_link_libraries (nr-softmodem uuid)
|
||||
endif()
|
||||
|
||||
add_dependencies( nr-softmodem ldpc_orig ldpc_optim ldpc_optim8seg ldpc )
|
||||
|
||||
@@ -2792,9 +2813,6 @@ target_link_libraries (nr-uesoftmodem ${LIBXML2_LIBRARIES})
|
||||
target_link_libraries (nr-uesoftmodem pthread m CONFIG_LIB rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} sctp ${XFORMS_LIBRARIES} ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES} ${ATLAS_LIBRARIES})
|
||||
target_link_libraries (nr-uesoftmodem ${LIB_LMS_LIBRARIES})
|
||||
target_link_libraries (nr-uesoftmodem ${T_LIB})
|
||||
if (${JSONLOGS})
|
||||
target_link_libraries (nr-uesoftmodem uuid)
|
||||
endif()
|
||||
|
||||
add_dependencies( nr-uesoftmodem ldpc_orig ldpc_optim ldpc_optim8seg ldpc )
|
||||
if (CUDA_FOUND)
|
||||
@@ -2819,9 +2837,6 @@ target_link_libraries (dlsim_tm4
|
||||
-Wl,--start-group SIMU_COMMON SIMU UTIL SCHED_LIB SCHED_RU_LIB PHY ITTI -Wl,--end-group
|
||||
pthread m rt CONFIG_LIB ${ATLAS_LIBRARIES} ${T_LIB}
|
||||
)
|
||||
if (${JSONLOGS})
|
||||
target_link_libraries (dlsim_tm4 uuid)
|
||||
endif()
|
||||
|
||||
add_executable(rftest
|
||||
${OPENAIR_DIR}/openair1/PHY/TOOLS/calibration_test.c
|
||||
@@ -2830,10 +2845,7 @@ add_executable(rftest
|
||||
${OPENAIR_DIR}/executables/softmodem-common.c
|
||||
${SHLIB_LOADER_SOURCES}
|
||||
)
|
||||
target_link_libraries(rftest minimal_lib CONFIG_LIB PHY_NR_COMMON UTIL pthread dl m forms ${T_LIB})
|
||||
if (${JSONLOGS})
|
||||
target_link_libraries (rftest uuid)
|
||||
endif()
|
||||
target_link_libraries(rftest minimal_lib CONFIG_LIB PHY_NR_COMMON UTIL pthread dl m forms ${T_LIB} )
|
||||
|
||||
add_executable(polartest
|
||||
${OPENAIR1_DIR}/PHY/CODING/TESTBENCH/polartest.c
|
||||
@@ -2845,9 +2857,6 @@ target_link_libraries(polartest
|
||||
-Wl,--start-group UTIL SIMU_COMMON SIMU PHY_COMMON PHY_NR PHY_NR_COMMON PHY_NR_UE CONFIG_LIB -Wl,--end-group
|
||||
m pthread ${ATLAS_LIBRARIES} dl
|
||||
)
|
||||
if (${JSONLOGS})
|
||||
target_link_libraries (polartest uuid)
|
||||
endif()
|
||||
|
||||
add_executable(smallblocktest
|
||||
${OPENAIR1_DIR}/PHY/CODING/TESTBENCH/smallblocktest.c
|
||||
@@ -2861,9 +2870,6 @@ target_link_libraries(smallblocktest
|
||||
-Wl,--start-group UTIL SIMU_COMMON SIMU PHY_NR PHY_COMMON PHY_NR_COMMON CONFIG_LIB -Wl,--end-group
|
||||
m pthread ${ATLAS_LIBRARIES} dl
|
||||
)
|
||||
if (${JSONLOGS})
|
||||
target_link_libraries (smallblocktest uuid)
|
||||
endif()
|
||||
|
||||
|
||||
add_executable(ldpctest
|
||||
@@ -2881,9 +2887,6 @@ target_link_libraries(ldpctest
|
||||
-Wl,--start-group UTIL SIMU_COMMON SIMU PHY_NR PHY_COMMON PHY_NR_COMMON CONFIG_LIB -Wl,--end-group
|
||||
m pthread ${ATLAS_LIBRARIES} dl
|
||||
)
|
||||
if (${JSONLOGS})
|
||||
target_link_libraries (ldpctest uuid)
|
||||
endif()
|
||||
|
||||
add_executable(nr_dlschsim
|
||||
${OPENAIR1_DIR}/SIMULATION/NR_PHY/dlschsim.c
|
||||
@@ -2896,9 +2899,6 @@ target_link_libraries(nr_dlschsim
|
||||
-Wl,--start-group UTIL SIMU_COMMON SIMU PHY_COMMON PHY_NR_COMMON PHY_NR PHY_NR_UE SCHED_NR_LIB CONFIG_LIB MAC_NR_COMMON -Wl,--end-group
|
||||
m pthread ${ATLAS_LIBRARIES} ${T_LIB} ITTI dl
|
||||
)
|
||||
if (${JSONLOGS})
|
||||
target_link_libraries (nr_dlschsim uuid)
|
||||
endif()
|
||||
|
||||
add_executable(nr_pbchsim
|
||||
${OPENAIR1_DIR}/SIMULATION/NR_PHY/pbchsim.c
|
||||
@@ -2910,9 +2910,6 @@ target_link_libraries(nr_pbchsim
|
||||
-Wl,--start-group UTIL SIMU_COMMON SIMU PHY_COMMON PHY_NR_COMMON PHY_NR PHY_NR_UE SCHED_NR_LIB CONFIG_LIB MAC_NR_COMMON -Wl,--end-group
|
||||
m pthread ${ATLAS_LIBRARIES} ${T_LIB} ITTI dl
|
||||
)
|
||||
if (${JSONLOGS})
|
||||
target_link_libraries (nr_pbchsim uuid)
|
||||
endif()
|
||||
|
||||
#PUCCH ---> Prashanth
|
||||
add_executable(nr_pucchsim
|
||||
@@ -2926,9 +2923,6 @@ target_link_libraries(nr_pucchsim
|
||||
-Wl,--start-group UTIL SIMU_COMMON SIMU PHY_COMMON PHY_NR_COMMON PHY_NR PHY_NR_UE SCHED_NR_LIB CONFIG_LIB MAC_NR_COMMON -Wl,--end-group
|
||||
m pthread ${ATLAS_LIBRARIES} ${T_LIB} ITTI dl
|
||||
)
|
||||
if (${JSONLOGS})
|
||||
target_link_libraries (nr_pucchsim uuid)
|
||||
endif()
|
||||
|
||||
add_executable(nr_dlsim
|
||||
${OPENAIR1_DIR}/SIMULATION/NR_PHY/dlsim.c
|
||||
@@ -2946,9 +2940,6 @@ target_link_libraries(nr_dlsim
|
||||
-Wl,--start-group UTIL SIMU_COMMON SIMU PHY_COMMON PHY_NR_COMMON PHY_NR PHY_NR_UE SCHED_NR_LIB SCHED_NR_UE_LIB MAC_NR MAC_UE_NR MAC_NR_COMMON RRC_LIB NR_RRC_LIB CONFIG_LIB L2_LTE_NR L2_NR HASHTABLE X2AP_ENB X2AP_LIB SECU_CN NGAP_GNB NFAPI_COMMON_LIB NFAPI_LIB NFAPI_PNF_LIB NFAPI_USER_LIB -lz -Wl,--end-group
|
||||
m pthread ${ATLAS_LIBRARIES} ${T_LIB} ITTI ${OPENSSL_LIBRARIES} dl
|
||||
)
|
||||
if (${JSONLOGS})
|
||||
target_link_libraries (nr_dlsim uuid)
|
||||
endif()
|
||||
target_compile_definitions(nr_dlsim PUBLIC -DPHYSICAL_SIMULATOR)
|
||||
|
||||
add_executable(nr_prachsim
|
||||
@@ -2965,9 +2956,6 @@ add_executable(nr_prachsim
|
||||
target_link_libraries(nr_prachsim
|
||||
-Wl,--start-group UTIL SIMU_COMMON SIMU PHY_COMMON PHY_NR_COMMON PHY_NR PHY_RU PHY_NR_UE MAC_NR_COMMON SCHED_NR_LIB SCHED_NR_UE_LIB MAC_NR MAC_UE_NR MAC_NR_COMMON RRC_LIB NR_RRC_LIB CONFIG_LIB L2_LTE_NR L2_NR HASHTABLE X2AP_ENB X2AP_LIB SECU_CN NGAP_GNB NFAPI_COMMON_LIB NFAPI_LIB NFAPI_PNF_LIB NFAPI_USER_LIB -lz -Wl,--end-group
|
||||
m pthread ${ATLAS_LIBRARIES} ${T_LIB} ITTI ${OPENSSL_LIBRARIES} dl)
|
||||
if (${JSONLOGS})
|
||||
target_link_libraries (nr_prachsim uuid)
|
||||
endif()
|
||||
|
||||
add_executable(nr_ulschsim
|
||||
${OPENAIR1_DIR}/SIMULATION/NR_PHY/ulschsim.c
|
||||
@@ -2981,9 +2969,6 @@ target_link_libraries(nr_ulschsim
|
||||
-Wl,--start-group UTIL SIMU_COMMON SIMU PHY_COMMON PHY_NR_COMMON PHY_NR PHY_NR_UE SCHED_NR_LIB CONFIG_LIB MAC_NR_COMMON -Wl,--end-group
|
||||
m pthread ${ATLAS_LIBRARIES} ${T_LIB} ITTI dl
|
||||
)
|
||||
if (${JSONLOGS})
|
||||
target_link_libraries (nr_ulschsim uuid)
|
||||
endif()
|
||||
|
||||
add_executable(nr_ulsim
|
||||
${OPENAIR1_DIR}/SIMULATION/NR_PHY/ulsim.c
|
||||
@@ -3001,9 +2986,6 @@ target_link_libraries(nr_ulsim
|
||||
-Wl,--start-group UTIL SIMU_COMMON SIMU PHY_COMMON PHY_NR_COMMON PHY_NR PHY_NR_UE SCHED_NR_LIB SCHED_NR_UE_LIB MAC_NR MAC_UE_NR MAC_NR_COMMON RRC_LIB NR_RRC_LIB CONFIG_LIB L2_LTE_NR L2_NR HASHTABLE X2AP_ENB X2AP_LIB SECU_CN NGAP_GNB NFAPI_COMMON_LIB NFAPI_LIB NFAPI_PNF_LIB NFAPI_USER_LIB -lz -Wl,--end-group
|
||||
m pthread ${ATLAS_LIBRARIES} ${T_LIB} ITTI ${OPENSSL_LIBRARIES} dl
|
||||
)
|
||||
if (${JSONLOGS})
|
||||
target_link_libraries (nr_ulsim uuid)
|
||||
endif()
|
||||
target_compile_definitions(nr_ulsim PUBLIC -DPHYSICAL_SIMULATOR)
|
||||
|
||||
foreach(myExe dlsim dlsim_tm7 ulsim pbchsim scansim mbmssim pdcchsim pucchsim prachsim syncsim)
|
||||
@@ -3022,9 +3004,6 @@ foreach(myExe dlsim dlsim_tm7 ulsim pbchsim scansim mbmssim pdcchsim pucchsim pr
|
||||
-Wl,--start-group SIMU_COMMON SIMU UTIL SCHED_LIB SCHED_RU_LIB SCHED_UE_LIB PHY_COMMON PHY_NR_COMMON PHY PHY_UE PHY_RU ITTI -Wl,--end-group
|
||||
pthread m rt CONFIG_LIB ${ATLAS_LIBRARIES} ${XFORMS_LIBRARIES} ${T_LIB} dl
|
||||
)
|
||||
if (${JSONLOGS})
|
||||
target_link_libraries (${myExe} uuid)
|
||||
endif()
|
||||
|
||||
endforeach(myExe)
|
||||
|
||||
@@ -3046,9 +3025,6 @@ foreach(myExe s1ap
|
||||
target_link_libraries (test_${myExe}
|
||||
-Wl,--start-group SECU_CN UTIL -Wl,--end-group m rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} CONFIG_LIB
|
||||
)
|
||||
if (${JSONLOGS})
|
||||
target_link_libraries (test_${myExe} uuid)
|
||||
endif()
|
||||
endforeach(myExe)
|
||||
|
||||
# to be added
|
||||
@@ -3060,7 +3036,7 @@ if (${T_TRACER})
|
||||
foreach(i
|
||||
#all "add_executable" definitions (except tests, rb_tool, updatefw)
|
||||
lte-softmodem lte-uesoftmodem nr-softmodem
|
||||
nr-uesoftmodem dlsim dlsim_tm4 dlsim_tm7 nr-ittisim
|
||||
nr-uesoftmodem dlsim dlsim_tm4 dlsim_tm7
|
||||
ulsim pbchsim scansim mbmssim pdcchsim pucchsim prachsim
|
||||
syncsim nr_ulsim nr_dlsim nr_dlschsim nr_pbchsim nr_pucchsim
|
||||
nr_ulschsim ldpctest polartest smallblocktest cu_test du_test
|
||||
@@ -3146,53 +3122,6 @@ add_executable(rb_tool
|
||||
)
|
||||
target_include_directories(rb_tool PRIVATE ${OPENAIR2_DIR}/NETWORK_DRIVER/MESH/)
|
||||
|
||||
# nr-ittisim
|
||||
###################################################
|
||||
|
||||
add_executable(nr-ittisim
|
||||
${rrc_h}
|
||||
${nr_rrc_h}
|
||||
${OPENAIR2_DIR}/GNB_APP/gnb_app.c
|
||||
${OPENAIR2_DIR}/GNB_APP/gnb_config.c
|
||||
${OPENAIR_DIR}/executables/nr-gnb.c
|
||||
${OPENAIR_DIR}/executables/nr-ru.c
|
||||
${OPENAIR2_DIR}/SIMULATION/NR_RRC/itti_sim.c
|
||||
${OPENAIR_DIR}/executables/softmodem-common.c
|
||||
${OPENAIR1_DIR}/SIMULATION/TOOLS/taus.c
|
||||
${OPENAIR_TARGETS}/ARCH/COMMON/common_lib.c
|
||||
${OPENAIR_TARGETS}/ARCH/COMMON/record_player.c
|
||||
${OPENAIR2_DIR}/RRC/NAS/nas_config.c
|
||||
${OPENAIR2_DIR}/RRC/NAS/rb_config.c
|
||||
${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/netlink_init.c
|
||||
${OPENAIR3_DIR}/NAS/UE/nas_ue_task.c
|
||||
${OPENAIR_DIR}/common/utils/nr/nr_common.c
|
||||
${OPENAIR_DIR}/common/utils/lte/ue_power.c
|
||||
${OPENAIR_DIR}/common/utils/lte/prach_utils.c
|
||||
${OPENAIR2_DIR}/ENB_APP/flexran_agent_ran_api_to_fix.c
|
||||
${XFORMSINTERFACE_SOURCE}
|
||||
${T_SOURCE}
|
||||
${SHLIB_LOADER_SOURCES}
|
||||
)
|
||||
|
||||
target_link_libraries (nr-ittisim
|
||||
-Wl,--start-group
|
||||
UTIL HASHTABLE SCTP_CLIENT SCHED_LIB SCHED_RU_LIB SCHED_NR_LIB PHY_NR PHY PHY_COMMON PHY_NR_COMMON PHY_RU GTPV1U SECU_CN SECU_OSA
|
||||
ITTI ${FLPT_MSG_LIB} ${FLEXRAN_AGENT_LIB} ${RAL_LIB} ${NAS_SIM_LIB} RRC_LIB NR_RRC_LIB
|
||||
NGAP_LIB NGAP_GNB S1AP_LIB S1AP_ENB L2_LTE_NR L2_NR MAC_NR_COMMON NFAPI_COMMON_LIB NFAPI_LIB NFAPI_VNF_LIB NFAPI_PNF_LIB NFAPI_USER_LIB
|
||||
X2AP_LIB X2AP_ENB F1AP_LIB F1AP M2AP_LIB M2AP_ENB M3AP_LIB M3AP_ENB ${FSPT_MSG_LIB}
|
||||
PHY_NR_UE SCHED_NR_UE_LIB NR_L2_UE
|
||||
-Wl,--end-group z dl)
|
||||
|
||||
target_link_libraries (nr-ittisim ${LIBXML2_LIBRARIES})
|
||||
target_link_libraries (nr-ittisim pthread m CONFIG_LIB rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} sctp ${XFORMS_LIBRARIES} ${PROTOBUF_LIB} ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES} ${ATLAS_LIBRARIES})
|
||||
target_link_libraries (nr-ittisim ${LIB_LMS_LIBRARIES})
|
||||
target_link_libraries (nr-ittisim ${T_LIB})
|
||||
if (${JSONLOGS})
|
||||
target_link_libraries (nr-ittisim uuid)
|
||||
endif()
|
||||
|
||||
add_dependencies( nr-ittisim ldpc_orig ldpc_optim ldpc_optim8seg ldpc )
|
||||
|
||||
# ???
|
||||
####################
|
||||
list(APPEND oai_nw_drv_src device.c common.c ioctl.c classifier.c tool.c)
|
||||
@@ -3229,3 +3158,4 @@ ADD_CUSTOM_TARGET(oarf
|
||||
)
|
||||
|
||||
include (${OPENAIR_DIR}/common/utils/telnetsrv/telnetsrv_CMakeLists.txt)
|
||||
include(${OPENAIR1_DIR}/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/CMakeLists.txt)
|
||||
|
||||
@@ -1062,7 +1062,8 @@
|
||||
(Test3: PBCH-only, 217 PRB),
|
||||
(Test4: PBCH and synchronization, 217 RPB),
|
||||
(Test5: PBCH-only, 273 PRB),
|
||||
(Test6: PBCH and synchronization, 273 PRB)</desc>
|
||||
(Test6: PBCH and synchronization, 273 PRB),
|
||||
(Test7: PBCH and synchronization, 106PBR, SSB SC OFFSET 6)</desc>
|
||||
<pre_compile_prog></pre_compile_prog>
|
||||
<compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</compile_prog>
|
||||
<compile_prog_args> --phy_simulators -c </compile_prog_args>
|
||||
@@ -1074,8 +1075,9 @@
|
||||
-s-11 -S-8 -n10 -R217
|
||||
-s-11 -S-8 -n10 -o8000 -I -R217
|
||||
-s-11 -S-8 -n10 -R273
|
||||
-s-11 -S-8 -n10 -o8000 -I -R273</main_exec_args>
|
||||
<tags>nr_pbchsim.test1 nr_pbchsim.test2 nr_pbchsim.test3 nr_pbchsim.test4 nr_pbchsim.test5 nr_pbchsim.test6</tags>
|
||||
-s-11 -S-8 -n10 -o8000 -I -R273
|
||||
-s-11 -S-8 -n10 -R106 -O6</main_exec_args>
|
||||
<tags>nr_pbchsim.test1 nr_pbchsim.test2 nr_pbchsim.test3 nr_pbchsim.test4 nr_pbchsim.test5 nr_pbchsim.test6 nr_pbchsim.test7</tags>
|
||||
<search_expr_true>PBCH test OK</search_expr_true>
|
||||
<search_expr_false>segmentation fault|assertion|exiting|fatal</search_expr_false>
|
||||
<nruns>3</nruns>
|
||||
@@ -1104,7 +1106,9 @@
|
||||
(Test19: Mapping type A, 3 DMRS Symbols),
|
||||
(Test20: Mapping type B, 4 DMRS Symbols),
|
||||
(Test21: 4x4 MIMO, 1 Layer),
|
||||
(Test22: 4x4 MIMO, 2 Layers)</desc>
|
||||
(Test22: 4x4 MIMO, 2 Layers),
|
||||
(Test23: 25 PRBs, 15 kHz SCS)
|
||||
(Test24: MCS 0, low SNR performance)</desc>
|
||||
<pre_compile_prog></pre_compile_prog>
|
||||
<compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</compile_prog>
|
||||
<compile_prog_args> --phy_simulators -c </compile_prog_args>
|
||||
@@ -1132,8 +1136,10 @@
|
||||
-n100 -s2 -U 2 0 2
|
||||
-n100 -s2 -U 2 1 3
|
||||
-n10 -s20 -U 3 0 0 2 -gR -x1 -y4 -z4
|
||||
-n10 -s20 -U 3 0 0 2 -gR -x2 -y4 -z4</main_exec_args>
|
||||
<tags>nr_dlsim.test1 nr_dlsim.test2 nr_dlsim.test3 nr_dlsim.test4 nr_dlsim.test5 nr_dlsim.test6 nr_dlsim.test7 nr_dlsim.test8 nr_dlsim.test9 nr_dlsim.test10 nr_dlsim.test11 nr_dlsim.test12 nr_dlsim.test13 nr_dlsim.test14 nr_dlsim.test15 nr_dlsim.test16 nr_dlsim.test17 nr_dlsim.test18 nr_dlsim.test19 nr_dlsim.test20 nr_dlsim.test21 nr_dlsim.test22</tags>
|
||||
-n10 -s20 -U 3 0 0 2 -gR -x2 -y4 -z4
|
||||
-n100 -m0 -e0 -R25 -b25 -i 2 1 0
|
||||
-n100 -e0 -t95 -S-1.0 -i 2 1 0</main_exec_args>
|
||||
<tags>nr_dlsim.test1 nr_dlsim.test2 nr_dlsim.test3 nr_dlsim.test4 nr_dlsim.test5 nr_dlsim.test6 nr_dlsim.test7 nr_dlsim.test8 nr_dlsim.test9 nr_dlsim.test10 nr_dlsim.test11 nr_dlsim.test12 nr_dlsim.test13 nr_dlsim.test14 nr_dlsim.test15 nr_dlsim.test16 nr_dlsim.test17 nr_dlsim.test18 nr_dlsim.test19 nr_dlsim.test20 nr_dlsim.test21 nr_dlsim.test22 nr_dlsim.test23 nr_dlsim.test24</tags>
|
||||
<search_expr_true>PDSCH test OK</search_expr_true>
|
||||
<search_expr_false>segmentation fault|assertion|exiting|fatal</search_expr_false>
|
||||
<nruns>3</nruns>
|
||||
@@ -1306,9 +1312,14 @@
|
||||
(Test12: SC-FDMA, 216 PRBs),
|
||||
(Test13: SC-FDMA, 273 PRBs),
|
||||
(Test14: SC-FDMA, 3 DMRS),
|
||||
(Test15: MCS 19 50 PRBs 2 RX_Antenna)
|
||||
(Test16: MCS 9 106 PRBs MIMO 2 layers)
|
||||
(Test17: MCS 9 106 PRBs MIMO 4 layers)</desc>
|
||||
(Test15: MCS 19 50 PRBs 2 RX_Antenna),
|
||||
(Test16: MCS 9 106 PRBs MIMO 2 layers),
|
||||
(Test17: MCS 9 106 PRBs MIMO 4 layers),
|
||||
(Test18: 25 PRBs, 15 kHz SCS),
|
||||
(Test19: 3GPP G-FR1-A4-13 2 RX Antennas Requirements Test),
|
||||
(Test20: 3GPP G-FR1-A4-13 4 RX Antennas Requirements Test),
|
||||
(Test21: 3GPP G-FR1-A4-13 8 RX Antennas Requirements Test),
|
||||
(Test22: MCS 0, low SNR performance)</desc>
|
||||
<pre_compile_prog></pre_compile_prog>
|
||||
<compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</compile_prog>
|
||||
<compile_prog_args> --phy_simulators -c </compile_prog_args>
|
||||
@@ -1320,20 +1331,24 @@
|
||||
-n100 -m28 -s20
|
||||
-n100 -m9 -R217 -r217 -s5
|
||||
-n100 -m9 -R273 -r273 -s5
|
||||
-n100 -s5 -U 2 0 1
|
||||
-n100 -s5 -T 2 1 2 -U 2 0 2
|
||||
-n100 -s5 -T 2 2 2 -U 2 1 2
|
||||
-n100 -s5 -a4 -b8 -T 2 1 2 -U 2 1 3
|
||||
-n100 -Z -s5
|
||||
-n100 -s5 -U 4 0 1 1 1
|
||||
-n100 -s5 -T 2 1 2 -U 4 0 2 1 1
|
||||
-n100 -s5 -T 2 2 2 -U 4 1 2 1 1
|
||||
-n100 -s5 -a4 -b8 -T 2 1 2 -U 4 1 3 1 1
|
||||
-n100 -s5 -Z
|
||||
-n100 -s5 -Z -r75
|
||||
-n50 -s5 -Z -r216 -R217
|
||||
-n50 -s5 -Z -r270 -R273
|
||||
-n100 -s5 -Z -U 2 0 2
|
||||
-n100 -s5 -Z -U 4 0 2 1 2
|
||||
-n100 -m19 -s10 -S15 -z2
|
||||
-n100 -m9 -r106 -s10 -W2 -y2 -z2
|
||||
-n100 -m9 -r106 -s20 -W4 -y4 -z4</main_exec_args>
|
||||
|
||||
<tags>nr_ulsim.test1 nr_ulsim.test2 nr_ulsim.test3 nr_ulsim.test4 nr_ulsim.test5 nr_ulsim.test6 nr_ulsim.test7 nr_ulsim.test8 nr_ulsim.test9 nr_ulsim.test10 nr_ulsim.test11 nr_ulsim.test12 nr_ulsim.test13 nr_ulsim.test14 nr_ulsim.test15 nr_ulsim.test16 nr_ulsim.test17</tags>
|
||||
-n100 -m9 -r106 -s20 -W4 -y4 -z4
|
||||
-n100 -u0 -m0 -R25 -r25 -i 2 1 0
|
||||
-m16 -r106 -s8.8 -S9.4 -z2 -n200 -U 4 1 1 1 2 -gI -b14 -t70 -I15 -i 2 1 0
|
||||
-m16 -r106 -s5.4 -S6 -z4 -n200 -U 4 1 1 1 2 -gI -b14 -t70 -I15 -i 2 1 0
|
||||
-m16 -r106 -s3.4 -S3.8 -z8 -n200 -U 4 1 1 1 2 -gI -b14 -t70 -I15 -i 2 1 0
|
||||
-n100 -m0 -S -0.6 -i 2 1 0</main_exec_args>
|
||||
<tags>nr_ulsim.test1 nr_ulsim.test2 nr_ulsim.test3 nr_ulsim.test4 nr_ulsim.test5 nr_ulsim.test6 nr_ulsim.test7 nr_ulsim.test8 nr_ulsim.test9 nr_ulsim.test10 nr_ulsim.test11 nr_ulsim.test12 nr_ulsim.test13 nr_ulsim.test14 nr_ulsim.test15 nr_ulsim.test16 nr_ulsim.test17 nr_ulsim.test18 nr_ulsim.test19 nr_ulsim.test20 nr_ulsim.test21 nr_ulsim.test22</tags>
|
||||
<search_expr_true>PUSCH test OK</search_expr_true>
|
||||
<search_expr_false>segmentation fault|assertion|exiting|fatal</search_expr_false>
|
||||
<nruns>3</nruns>
|
||||
@@ -1344,10 +1359,11 @@
|
||||
<desc>nr_prachsim Test cases. (Test1: 30kHz SCS, 106 PRBs, Prach format A2),
|
||||
(Test2: 30kHz SCS, 217 PRBs, Prach format A2),
|
||||
(Test3: 30kHz SCS, 273 PRBs, Prach format A2),
|
||||
(Test4: 30kHz SCS, 106 PRBs, Prach format 0),
|
||||
(Test4: 30kHz SCS, 106 PRBs, Prach format 0),
|
||||
(Test5: 120kHz SCS, 32 PRBs, Prach format A2),
|
||||
(Test6: 120kHz SCS, 66 PRBs, Prach format A2),
|
||||
(Test7: 120kHz SCS, 66 PRBs, High Speed Enabled)</desc>
|
||||
(Test7: 120kHz SCS, 66 PRBs, High Speed Enabled),
|
||||
(Test8: 15kHz SCS, 25 PRBs)</desc>
|
||||
<pre_compile_prog></pre_compile_prog>
|
||||
<compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</compile_prog>
|
||||
<compile_prog_args> --phy_simulators -c </compile_prog_args>
|
||||
@@ -1357,11 +1373,12 @@
|
||||
<main_exec_args>-a -s -30 -n 100 -p 63 -R 106
|
||||
-a -s -30 -n 100 -p 63 -R 217
|
||||
-a -s -30 -n 100 -p 63 -R 273
|
||||
-a -s -30 -n 100 -p 63 -R 106 -c 4
|
||||
-a -s -30 -n 100 -p 32 -R 32 -m 3 -c52
|
||||
-a -s -30 -n 100 -p 32 -R 66 -m 3 -c52
|
||||
-a -s -30 -n 100 -R 66 -m 3 -c52 -H</main_exec_args>
|
||||
<tags>nr_prachsim.test1 nr_prachsim.test2 nr_prachsim.test3 nr_prachsim.test4 nr_prachsim.test5 nr_prachsim.test6 nr_prachsim.test7</tags>
|
||||
-a -s -30 -n 100 -p 63 -R 106 -c 4
|
||||
-a -s -30 -n 100 -p 32 -R 32 -m 3 -c52
|
||||
-a -s -30 -n 100 -p 32 -R 66 -m 3 -c52
|
||||
-a -s -30 -n 100 -R 66 -m 3 -c52 -H
|
||||
-a -s -30 -n 100 -p 99 -R 25 -m 0</main_exec_args>
|
||||
<tags>nr_prachsim.test1 nr_prachsim.test2 nr_prachsim.test3 nr_prachsim.test4 nr_prachsim.test5 nr_prachsim.test6 nr_prachsim.test7 nr_prachsim.test8</tags>
|
||||
<search_expr_true>PRACH test OK</search_expr_true>
|
||||
<search_expr_false>segmentation fault|assertion|exiting|fatal</search_expr_false>
|
||||
<nruns>3</nruns>
|
||||
|
||||
@@ -55,11 +55,11 @@ BUILD_COVERITY_SCAN=0
|
||||
DISABLE_HARDWARE_DEPENDENCY="False"
|
||||
CMAKE_BUILD_TYPE="RelWithDebInfo"
|
||||
CMAKE_CMD="$CMAKE"
|
||||
NOAVX512="False"
|
||||
BUILD_ECLIPSE=0
|
||||
NR="False"
|
||||
OPTIONAL_LIBRARIES="telnetsrv enbscope uescope nrscope"
|
||||
RU=0
|
||||
JSONLOGS=0
|
||||
CMAKE_C_FLAGS=()
|
||||
CMAKE_CXX_FLAGS=()
|
||||
|
||||
@@ -77,7 +77,7 @@ Options:
|
||||
--clean-kernel
|
||||
Erase previously installed features in kernel: iptables, drivers, ...
|
||||
--cmake-opt
|
||||
Pass the supplied option verbatim to cmake. If -DOAI_LOG_JSON is specified, it activates JSON formatting for logs.
|
||||
Pass the supplied option verbatim to cmake.
|
||||
-d | --build-dir
|
||||
Sets build directory (will be <oai-root>/cmake_targets/<build-dir>/build)
|
||||
-I | --install-external-packages
|
||||
@@ -165,16 +165,18 @@ Options:
|
||||
Build optional shared library, <libraries> can be one or several of $OPTIONAL_LIBRARIES or \"all\"
|
||||
--usrp-recplay
|
||||
Build for I/Q record-playback modes
|
||||
--noavx512
|
||||
Build without AVX512 if it is present on CPU
|
||||
-k | --skip-shared-libraries
|
||||
Skip build for shared libraries to reduce compilation time when building frequently for debugging purposes
|
||||
--ninja
|
||||
Tell cmake to use the Ninja build system. Without, will generate make files
|
||||
--sanitize
|
||||
Shortcut for usage of --sanitize-address --sanitize-undefined
|
||||
--sanitize-address | -fsanitize=address
|
||||
Enable the address sanitizer on all targets
|
||||
--ittiSIM
|
||||
Makes the itti simulator
|
||||
--target NAME
|
||||
add NAME to the list of targets to be built. To specify more targets, you can call multiple times this option. I.e. '--target tstlog --target gNB'
|
||||
Enable the address sanitizer on all targets
|
||||
--sanitize-undefined | -fsanitize=undefined
|
||||
Enable the undefined behavior sanitizer on all targets
|
||||
-h | --help
|
||||
Print this help
|
||||
|
||||
@@ -187,7 +189,7 @@ Usage (regular):
|
||||
|
||||
|
||||
function main() {
|
||||
execlist=""
|
||||
|
||||
until [ -z "$1" ]
|
||||
do
|
||||
case "$1" in
|
||||
@@ -205,15 +207,8 @@ function main() {
|
||||
clean_kernel
|
||||
echo_info "Erased iptables config and removed modules from kernel"
|
||||
shift;;
|
||||
--cmake-opt)
|
||||
if [ "$2" == "-DOAI_LOG_JSON" ]; then
|
||||
JSONLOGS=1
|
||||
export JSONLOGS=1
|
||||
echo_info "Activated JSON formatting for logs"
|
||||
else
|
||||
CMAKE_CMD="$CMAKE_CMD $2"
|
||||
fi
|
||||
|
||||
--cmake-opt)
|
||||
CMAKE_CMD="$CMAKE_CMD $2"
|
||||
shift 2;;
|
||||
-d | --build-dir)
|
||||
BUILD_DIR=$2
|
||||
@@ -446,6 +441,10 @@ function main() {
|
||||
fi
|
||||
fi
|
||||
shift 2;;
|
||||
--noavx512)
|
||||
NOAVX512="True"
|
||||
echo_info "Disabling AVX512"
|
||||
shift 1;;
|
||||
-k | --skip-shared-libraries)
|
||||
SKIP_SHARED_LIB_FLAG="True"
|
||||
echo_info "Skipping build of shared libraries, rfsimulator and transport protocol libraries"
|
||||
@@ -454,23 +453,21 @@ function main() {
|
||||
CMAKE_CMD="$CMAKE_CMD -GNinja"
|
||||
MAKE_CMD=ninja
|
||||
shift;;
|
||||
--sanitize)
|
||||
CMAKE_CMD="$CMAKE_CMD -DSANITIZE_ADDRESS=True -DSANITIZE_UNDEFINED=True"
|
||||
shift;;
|
||||
--sanitize-address | -fsanitize=address)
|
||||
grep -sq "Ubuntu 18.04" /etc/os-release && echo_error "Bug in OS with this option, see CMakeLists.txt"
|
||||
CMAKE_CMD="$CMAKE_CMD -DSANITIZE_ADDRESS=True"
|
||||
shift;;
|
||||
--ittiSIM)
|
||||
ittiSIM=1
|
||||
CMAKE_CMD="$CMAKE_CMD -DITTI_SIM=True"
|
||||
echo_info "Will compile itti simulator"
|
||||
--sanitize-undefined | -fundefined=address)
|
||||
CMAKE_CMD="$CMAKE_CMD -DSANITIZE_UNDEFINED=True"
|
||||
shift;;
|
||||
--target)
|
||||
execlist="$execlist $2"
|
||||
echo_info "Added '$2' to the list of targets"
|
||||
shift 2;;
|
||||
-h | --help)
|
||||
print_help
|
||||
exit 1;;
|
||||
*)
|
||||
print_help
|
||||
*)
|
||||
print_help
|
||||
echo_fatal "Unknown option $1"
|
||||
break;;
|
||||
esac
|
||||
@@ -599,7 +596,8 @@ function main() {
|
||||
echo_info "Installing optional packages"
|
||||
check_install_additional_tools
|
||||
fi
|
||||
|
||||
|
||||
execlist=""
|
||||
if [ "$eNB" = "1" ] ; then
|
||||
execlist="$execlist lte-softmodem"
|
||||
fi
|
||||
@@ -618,9 +616,6 @@ function main() {
|
||||
if [ "$nrUE" = 1 ] ; then
|
||||
execlist="$execlist nr-uesoftmodem"
|
||||
fi
|
||||
if [ "$ittiSIM" = "1" ] ; then
|
||||
execlist="$execlist nr-ittisim"
|
||||
fi
|
||||
|
||||
if [[ "$execlist" == "" && "$SIMUS_PHY" != "1" ]]; then
|
||||
echo_success "installing dependencies successful"
|
||||
@@ -637,6 +632,7 @@ function main() {
|
||||
cd $DIR/$BUILD_DIR/build
|
||||
if [[ ${#CMAKE_C_FLAGS[@]} > 0 ]]; then CMAKE_CMD="$CMAKE_CMD -DCMAKE_C_FLAGS=\"${CMAKE_C_FLAGS[*]}\""; fi
|
||||
if [[ ${#CMAKE_CXX_FLAGS[@]} > 0 ]]; then CMAKE_CMD="$CMAKE_CMD -DCMAKE_CXX_FLAGS=\"${CMAKE_CXX_FLAGS[*]}\""; fi
|
||||
CMAKE_CMD="$CMAKE_CMD -DNOAVX512=\"${NOAVX512[*]}\""
|
||||
echo_info "running $CMAKE_CMD"
|
||||
eval $CMAKE_CMD ../..
|
||||
|
||||
@@ -726,11 +722,11 @@ function main() {
|
||||
# simlist="ldpctest"
|
||||
for f in $simlist ; do
|
||||
compilations \
|
||||
ran_build $f \
|
||||
$BUILD_DIR $f \
|
||||
$f $dbin/$f.$REL
|
||||
done
|
||||
compilations \
|
||||
ran_build coding \
|
||||
$BUILD_DIR coding \
|
||||
libcoding.so $dbin/libcoding.so
|
||||
fi
|
||||
|
||||
@@ -742,7 +738,7 @@ function main() {
|
||||
simlist="secu_knas_encrypt_eia1 secu_kenb aes128_ctr_encrypt aes128_ctr_decrypt secu_knas_encrypt_eea2 secu_knas secu_knas_encrypt_eea1 kdf aes128_cmac_encrypt secu_knas_encrypt_eia2"
|
||||
for f in $simlist ; do
|
||||
compilations \
|
||||
ran_build test_$f \
|
||||
$BUILD_DIR test_$f \
|
||||
test_$f $dbin/test_$f.$REL
|
||||
done
|
||||
fi
|
||||
|
||||
@@ -109,6 +109,7 @@ check_supported_distribution() {
|
||||
"ubuntu18.04") return 0 ;;
|
||||
"ubuntu16.04") return 0 ;;
|
||||
"fedora35") return 0 ;;
|
||||
"fedora36") return 0 ;;
|
||||
"rhel7") return 0 ;;
|
||||
"rhel7.6") return 0 ;;
|
||||
"rhel7.7") return 0 ;;
|
||||
@@ -196,8 +197,8 @@ check_warnings() {
|
||||
#argument:
|
||||
# $1: log file
|
||||
check_errors() {
|
||||
#we look for 'warning:' in the compilation log file
|
||||
error_count=`grep "error:" "$1" | wc -l`
|
||||
#we look for 'error:' in the compilation log file
|
||||
error_count=`grep -c "error:" "$1"`
|
||||
if [ $error_count -gt 0 ]; then
|
||||
echo_error "ERROR: $error_count error. See $1"
|
||||
fi
|
||||
@@ -236,8 +237,9 @@ compilations() {
|
||||
echo_error "$2 compilation failed"
|
||||
exit 1
|
||||
fi
|
||||
if [ -s $3 ] ; then
|
||||
cp $3 $4
|
||||
if [ -s "$3" ] ; then
|
||||
rm -f "$4"
|
||||
ln -s "$PWD/$3" "$4"
|
||||
echo_success "$2 compiled"
|
||||
check_warnings "$dlog/$2.$REL.txt"
|
||||
else
|
||||
@@ -623,10 +625,8 @@ check_install_additional_tools (){
|
||||
android-tools-adb \
|
||||
wvdial \
|
||||
sshpass \
|
||||
nscd \
|
||||
bc \
|
||||
ntp"
|
||||
if [ $JSONLOGS -eq 1 ]; then PACKAGE_LIST="$PACKAGE_LIST uuid-dev"; fi
|
||||
elif [[ "$OS_DISTRO" == "rhel" ]] || [[ "$OS_DISTRO" == "centos" ]]; then
|
||||
PACKAGE_LIST="\
|
||||
check \
|
||||
@@ -649,13 +649,11 @@ check_install_additional_tools (){
|
||||
wvdial \
|
||||
numpy \
|
||||
sshpass \
|
||||
nscd \
|
||||
python2-paramiko \
|
||||
python-pyroute2 \
|
||||
python-netifaces \
|
||||
scipy \
|
||||
python-matplotlib"
|
||||
if [ $JSONLOGS -eq 1 ]; then PACKAGE_LIST="$PACKAGE_LIST libuuid-devel"; fi
|
||||
elif [[ "$OS_DISTRO" == "fedora" ]]; then
|
||||
PACKAGE_LIST=" \
|
||||
check \
|
||||
@@ -678,13 +676,11 @@ check_install_additional_tools (){
|
||||
wvdial \
|
||||
python-numpy \
|
||||
sshpass \
|
||||
nscd \
|
||||
python-paramiko \
|
||||
python-pyroute2 \
|
||||
python-netifaces \
|
||||
python-scipy \
|
||||
python-matplotlib"
|
||||
if [ $JSONLOGS -eq 1 ]; then PACKAGE_LIST="$PACKAGE_LIST libuuid-devel"; fi
|
||||
fi
|
||||
$SUDO $INSTALLER install -y $PACKAGE_LIST $optional_packages
|
||||
|
||||
|
||||
@@ -11,10 +11,11 @@ configmodule_interface_t *load_configmodule(int argc, char **argv, uint32_t init
|
||||
* if the bit CONFIG_ENABLECMDLINEONLY is set in `initflags` then the module allows parameters to be set only via the command line. This is used for the oai UE.
|
||||
|
||||
```c
|
||||
void End_configmodule(void)
|
||||
void end_configmodule(void)
|
||||
```
|
||||
* Free memory which has been allocated by the configuration module since its initialization.
|
||||
* Free memory which has been allocated by the configuration module for storing parameters values, when `PARAMFLAG_NOFREE` flag is not specified in the parameter definition.
|
||||
* Possibly calls the `config_<config source>_end` function
|
||||
This call should be used when all configurations have been read. The program will still be able to use parameter values allocated by the config module WHEN THE `PARAMFLAG_NOFREE` flag has been specified in the parameter definition. The config module can be reloaded later in the program (not fully tested as not used today)
|
||||
|
||||
## Retrieving parameter's values
|
||||
|
||||
|
||||
@@ -53,13 +53,17 @@ int parse_stringlist(paramdef_t *cfgoptions, char *val) {
|
||||
}
|
||||
|
||||
free(tmpval);
|
||||
config_check_valptr(cfgoptions,(char **)&(cfgoptions->strlistptr), sizeof(char *) * numelt);
|
||||
|
||||
AssertFatal(MAX_LIST_SIZE > numelt,
|
||||
"This piece of code use fixed size arry of constant #define MAX_LIST_SIZE %d\n",
|
||||
MAX_LIST_SIZE );
|
||||
config_check_valptr(cfgoptions, sizeof(char*), numelt);
|
||||
|
||||
cfgoptions->numelt=numelt;
|
||||
atoken=strtok_r(val, ",",&tokctx);
|
||||
|
||||
for( int i=0; i<cfgoptions->numelt && atoken != NULL ; i++) {
|
||||
config_check_valptr(cfgoptions,&(cfgoptions->strlistptr[i]),strlen(atoken)+1);
|
||||
sprintf(cfgoptions->strlistptr[i],"%s",atoken);
|
||||
snprintf(cfgoptions->strlistptr[i],DEFAULT_EXTRA_SZ,"%s",atoken);
|
||||
printf_params("[LIBCONFIG] %s[%i]: %s\n", cfgoptions->optname,i,cfgoptions->strlistptr[i]);
|
||||
atoken=strtok_r(NULL, ",",&tokctx);
|
||||
}
|
||||
@@ -84,13 +88,14 @@ int processoption(paramdef_t *cfgoptions, char *value) {
|
||||
char *charptr;
|
||||
|
||||
case TYPE_STRING:
|
||||
if (cfgoptions->numelt == 0 ) {
|
||||
config_check_valptr(cfgoptions, cfgoptions->strptr, strlen(tmpval)+1);
|
||||
sprintf(*(cfgoptions->strptr), "%s",tmpval);
|
||||
} else {
|
||||
sprintf( (char *)(cfgoptions->strptr), "%s",tmpval);
|
||||
if (cfgoptions->numelt == 0 )
|
||||
config_check_valptr(cfgoptions, 1,
|
||||
strlen(tmpval)+1);
|
||||
if (cfgoptions->numelt < (strlen(tmpval)+1)) {
|
||||
CONFIG_PRINTF_ERROR("[CONFIG] command line option %s value too long\n",
|
||||
cfgoptions->optname);
|
||||
}
|
||||
|
||||
snprintf(*cfgoptions->strptr, cfgoptions->numelt ,"%s",tmpval);
|
||||
printf_cmdl("[CONFIG] %s set to %s from command line\n", cfgoptions->optname, tmpval);
|
||||
optisset=1;
|
||||
break;
|
||||
@@ -105,7 +110,7 @@ int processoption(paramdef_t *cfgoptions, char *value) {
|
||||
case TYPE_INT16:
|
||||
case TYPE_UINT8:
|
||||
case TYPE_INT8:
|
||||
config_check_valptr(cfgoptions, (char **)&(cfgoptions->iptr),sizeof(int32_t));
|
||||
config_check_valptr(cfgoptions, sizeof(*cfgoptions->iptr), 1);
|
||||
config_assign_int(cfgoptions,cfgoptions->optname,(int32_t)strtol(tmpval,&charptr,0));
|
||||
|
||||
if( *charptr != 0) {
|
||||
@@ -117,14 +122,14 @@ int processoption(paramdef_t *cfgoptions, char *value) {
|
||||
|
||||
case TYPE_UINT64:
|
||||
case TYPE_INT64:
|
||||
config_check_valptr(cfgoptions, (char **)&(cfgoptions->i64ptr),sizeof(uint64_t));
|
||||
config_check_valptr(cfgoptions, sizeof(*cfgoptions->i64ptr), 1);
|
||||
*(cfgoptions->i64ptr)=strtoll(tmpval,&charptr,0);
|
||||
|
||||
if( *charptr != 0) {
|
||||
CONFIG_PRINTF_ERROR("[CONFIG] command line, option %s requires an integer argument\n",cfgoptions->optname);
|
||||
}
|
||||
|
||||
printf_cmdl("[CONFIG] %s set to %lli from command line\n", cfgoptions->optname, (long long)*(cfgoptions->i64ptr));
|
||||
printf_cmdl("[CONFIG] %s set to %lli from command line\n", cfgoptions->optname, (long long)*cfgoptions->i64ptr);
|
||||
optisset=1;
|
||||
break;
|
||||
|
||||
@@ -133,8 +138,8 @@ int processoption(paramdef_t *cfgoptions, char *value) {
|
||||
break;
|
||||
|
||||
case TYPE_DOUBLE:
|
||||
config_check_valptr(cfgoptions, (char **)&(cfgoptions->dblptr),sizeof(double));
|
||||
*(cfgoptions->dblptr) = strtof(tmpval,&charptr);
|
||||
config_check_valptr(cfgoptions, sizeof(*cfgoptions->dblptr), 1);
|
||||
*cfgoptions->dblptr = strtof(tmpval,&charptr);
|
||||
|
||||
if( *charptr != 0) {
|
||||
CONFIG_PRINTF_ERROR("[CONFIG] command line, option %s requires a double argument\n",cfgoptions->optname);
|
||||
|
||||
@@ -250,46 +250,46 @@ configmodule_interface_t *load_configmodule(int argc,
|
||||
modeparams=cfgmode;
|
||||
cfgmode=strdup(CONFIG_LIBCONFIGFILE);
|
||||
}
|
||||
|
||||
cfgptr = calloc(sizeof(configmodule_interface_t),1);
|
||||
if (cfgptr == NULL) {
|
||||
cfgptr = calloc(sizeof(configmodule_interface_t),1);
|
||||
/* argv_info is used to memorize command line options which have been recognized */
|
||||
/* and to detect unrecognized command line options which might have been specified */
|
||||
cfgptr->argv_info = calloc(sizeof(int32_t), argc+10);
|
||||
cfgptr->argv_info = calloc(sizeof(int32_t), argc+10);
|
||||
/* argv[0] is the exec name, always Ok */
|
||||
cfgptr->argv_info[0] |= CONFIG_CMDLINEOPT_PROCESSED;
|
||||
cfgptr->argv_info[0] |= CONFIG_CMDLINEOPT_PROCESSED;
|
||||
|
||||
/* when OoptIdx is >0, -O option has been detected at position OoptIdx
|
||||
* we must memorize arv[OoptIdx is Ok */
|
||||
if (OoptIdx >= 0) {
|
||||
cfgptr->argv_info[OoptIdx] |= CONFIG_CMDLINEOPT_PROCESSED;
|
||||
cfgptr->argv_info[OoptIdx+1] |= CONFIG_CMDLINEOPT_PROCESSED;
|
||||
}
|
||||
|
||||
cfgptr->rtflags = cfgptr->rtflags | tmpflags;
|
||||
cfgptr->argc = argc;
|
||||
cfgptr->argv = argv;
|
||||
cfgptr->cfgmode=strdup(cfgmode);
|
||||
cfgptr->num_cfgP=0;
|
||||
atoken=strtok_r(modeparams,":",&strtokctx);
|
||||
|
||||
while ( cfgptr->num_cfgP< CONFIG_MAX_OOPT_PARAMS && atoken != NULL) {
|
||||
/* look for debug level in the config parameters, it is common to all config mode
|
||||
and will be removed from the parameter array passed to the shared module */
|
||||
char *aptr;
|
||||
aptr=strcasestr(atoken,"dbgl");
|
||||
|
||||
if (aptr != NULL) {
|
||||
cfgptr->rtflags = cfgptr->rtflags | strtol(aptr+4,NULL,0);
|
||||
} else {
|
||||
cfgptr->cfgP[cfgptr->num_cfgP] = strdup(atoken);
|
||||
cfgptr->num_cfgP++;
|
||||
if (OoptIdx >= 0) {
|
||||
cfgptr->argv_info[OoptIdx] |= CONFIG_CMDLINEOPT_PROCESSED;
|
||||
cfgptr->argv_info[OoptIdx+1] |= CONFIG_CMDLINEOPT_PROCESSED;
|
||||
}
|
||||
|
||||
atoken = strtok_r(NULL,":",&strtokctx);
|
||||
cfgptr->rtflags = cfgptr->rtflags | tmpflags;
|
||||
cfgptr->argc = argc;
|
||||
cfgptr->argv = argv;
|
||||
cfgptr->cfgmode=strdup(cfgmode);
|
||||
cfgptr->num_cfgP=0;
|
||||
atoken=strtok_r(modeparams,":",&strtokctx);
|
||||
|
||||
while ( cfgptr->num_cfgP< CONFIG_MAX_OOPT_PARAMS && atoken != NULL) {
|
||||
/* look for debug level in the config parameters, it is common to all config mode
|
||||
and will be removed from the parameter array passed to the shared module */
|
||||
char *aptr;
|
||||
aptr=strcasestr(atoken,"dbgl");
|
||||
|
||||
if (aptr != NULL) {
|
||||
cfgptr->rtflags = cfgptr->rtflags | strtol(aptr+4,NULL,0);
|
||||
} else {
|
||||
cfgptr->cfgP[cfgptr->num_cfgP] = strdup(atoken);
|
||||
cfgptr->num_cfgP++;
|
||||
}
|
||||
|
||||
atoken = strtok_r(NULL,":",&strtokctx);
|
||||
}
|
||||
|
||||
printf("[CONFIG] get parameters from %s ",cfgmode);
|
||||
}
|
||||
|
||||
printf("[CONFIG] get parameters from %s ",cfgmode);
|
||||
|
||||
for (i=0; i<cfgptr->num_cfgP; i++) {
|
||||
printf("%s ",cfgptr->cfgP[i]);
|
||||
}
|
||||
@@ -336,33 +336,23 @@ void end_configmodule(void) {
|
||||
cfgptr->end();
|
||||
}
|
||||
|
||||
pthread_mutex_lock(&cfgptr->memBlocks_mutex);
|
||||
printf ("[CONFIG] free %u config value pointers\n",cfgptr->numptrs);
|
||||
|
||||
for(int i=0; i<cfgptr->numptrs ; i++) {
|
||||
if (cfgptr->ptrs[i] != NULL && cfgptr->ptrsAllocated[i] == true) {
|
||||
free(cfgptr->ptrs[i]);
|
||||
cfgptr->ptrs[i]=NULL;
|
||||
cfgptr->ptrsAllocated[i] = false;
|
||||
if (cfgptr->oneBlock[i].ptrs != NULL && cfgptr->oneBlock[i].ptrsAllocated== true && cfgptr->oneBlock[i].toFree) {
|
||||
free(cfgptr->oneBlock[i].ptrs);
|
||||
memset(&cfgptr->oneBlock[i], 0, sizeof(cfgptr->oneBlock[i]));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
cfgptr->numptrs=0;
|
||||
}
|
||||
}
|
||||
pthread_mutex_unlock(&cfgptr->memBlocks_mutex);
|
||||
if ( cfgptr->cfgmode )
|
||||
free(cfgptr->cfgmode);
|
||||
|
||||
/* free all memory used by config module */
|
||||
/* should be called only at program exit */
|
||||
void free_configmodule(void) {
|
||||
if (cfgptr != NULL) {
|
||||
end_configmodule();
|
||||
|
||||
if( cfgptr->cfgmode != NULL) free(cfgptr->cfgmode);
|
||||
|
||||
printf ("[CONFIG] free %i config parameter pointers\n",cfgptr->num_cfgP);
|
||||
|
||||
for (int i=0; i<cfgptr->num_cfgP; i++) {
|
||||
if ( cfgptr->cfgP[i] != NULL) free(cfgptr->cfgP[i]);
|
||||
}
|
||||
if ( cfgptr->argv_info )
|
||||
free( cfgptr->argv_info );
|
||||
|
||||
free(cfgptr);
|
||||
cfgptr=NULL;
|
||||
@@ -372,3 +362,4 @@ void free_configmodule(void) {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
#include "common/config/config_paramdesc.h"
|
||||
#include "common/utils/T/T.h"
|
||||
#define CONFIG_MAX_OOPT_PARAMS 10 // maximum number of parameters in the -O option (-O <cfgmode>:P1:P2...
|
||||
#define CONFIG_MAX_ALLOCATEDPTRS 1024 // maximum number of parameters that can be dynamicaly allocated in the config module
|
||||
#define CONFIG_MAX_ALLOCATEDPTRS 2048 // maximum number of parameters that can be dynamicaly allocated in the config module
|
||||
|
||||
/* default values for configuration module parameters */
|
||||
#define CONFIG_LIBCONFIGFILE "libconfig" // use libconfig file
|
||||
@@ -58,14 +58,18 @@
|
||||
#define CONFIG_HELP (1<<20) // print help message
|
||||
#define CONFIG_ABORT (1<<21) // config failed,abort execution
|
||||
#define CONFIG_NOOOPT (1<<22) // no -O option found when parsing command line
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
typedef int(*configmodule_initfunc_t)(char *cfgP[],int numP);
|
||||
typedef int(*configmodule_getfunc_t)(paramdef_t *,int numparams, char *prefix);
|
||||
typedef int(*configmodule_getlistfunc_t)(paramlist_def_t *, paramdef_t *,int numparams, char *prefix);
|
||||
typedef void(*configmodule_endfunc_t)(void);
|
||||
|
||||
typedef struct oneBlock_s{
|
||||
void *ptrs;
|
||||
int sz;
|
||||
bool toFree;
|
||||
bool ptrsAllocated;
|
||||
} oneBlock_t;
|
||||
|
||||
typedef struct configmodule_interface {
|
||||
int argc;
|
||||
char **argv;
|
||||
@@ -77,10 +81,10 @@ typedef struct configmodule_interface {
|
||||
configmodule_getfunc_t get;
|
||||
configmodule_getlistfunc_t getlist;
|
||||
configmodule_endfunc_t end;
|
||||
pthread_mutex_t memBlocks_mutex;
|
||||
uint32_t numptrs;
|
||||
uint32_t rtflags;
|
||||
char *ptrs[CONFIG_MAX_ALLOCATEDPTRS];
|
||||
bool ptrsAllocated[CONFIG_MAX_ALLOCATEDPTRS];
|
||||
oneBlock_t oneBlock[CONFIG_MAX_ALLOCATEDPTRS];
|
||||
} configmodule_interface_t;
|
||||
|
||||
#ifdef CONFIG_LOADCONFIG_MAIN
|
||||
@@ -116,10 +120,16 @@ extern configmodule_interface_t *cfgptr;
|
||||
|
||||
#define CONFIG_ENABLECMDLINEONLY (1<<1)
|
||||
extern configmodule_interface_t *load_configmodule(int argc, char **argv, uint32_t initflags);
|
||||
/* free ressources used to read parameters, keep memory
|
||||
* allocated for parameters values which has been defined with the PARAMFLAG_NOFREE flag
|
||||
* should be used as soon as there is no need to read parameters but doesn't prevent
|
||||
* a new config module init
|
||||
*/
|
||||
extern void end_configmodule(void);
|
||||
/* free all config module memory, to be used at end of program as
|
||||
* it will free parameters values even those specified with the PARAMFLAG_NOFREE flag */
|
||||
extern void free_configmodule(void);
|
||||
#define CONFIG_PRINTF_ERROR(f, x... ) if (isLogInitDone ()) { LOG_E(ENB_APP,f,x);} else {printf(f,x);}; if ( !CONFIG_ISFLAGSET(CONFIG_NOABORTONCHKF) ) exit_fun("exit because configuration failed\n");
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#endif /* INCLUDE_CONFIG_LOADCONFIGMODULE_H */
|
||||
|
||||
@@ -96,11 +96,13 @@ typedef union checkedparam {
|
||||
|
||||
/* paramdef is used to describe a parameter, array of paramdef_t strustures is used as the main parameter in */
|
||||
/* config apis used to retrieve parameters values */
|
||||
#define MAX_LIST_SIZE 32
|
||||
#define DEFAULT_EXTRA_SZ 256
|
||||
typedef struct paramdef {
|
||||
char optname[MAX_OPTNAME_SIZE]; /* parameter name, can be used as long command line option */
|
||||
char *helpstr; /* help string */
|
||||
unsigned int paramflags; /* value is a "ored" combination of above PARAMFLAG_XXXX values */
|
||||
union { /* pointer to the parameter value, completed by the config module */
|
||||
union { /* pointer to the parameter value, completed by the config module */
|
||||
char **strptr;
|
||||
char **strlistptr;
|
||||
uint8_t *u8ptr;
|
||||
|
||||
@@ -52,59 +52,97 @@ configmodule_interface_t *config_get_if(void) {
|
||||
return cfgptr;
|
||||
}
|
||||
|
||||
char *config_check_valptr(paramdef_t *cfgoptions, char **ptr, int length) {
|
||||
if (ptr == NULL ) {
|
||||
ptr = malloc(sizeof(char *));
|
||||
static int managed_ptr_sz(void* ptr) {
|
||||
configmodule_interface_t * cfg=config_get_if();
|
||||
AssertFatal(cfg->numptrs < CONFIG_MAX_ALLOCATEDPTRS,
|
||||
"This code use fixed size array as #define CONFIG_MAX_ALLOCATEDPTRS %d\n",
|
||||
CONFIG_MAX_ALLOCATEDPTRS);
|
||||
int i;
|
||||
pthread_mutex_lock(&cfg->memBlocks_mutex);
|
||||
int numptrs=cfg->numptrs;
|
||||
for (i=0; i<numptrs; i++ )
|
||||
if (cfg->oneBlock[i].ptrs == ptr)
|
||||
break;
|
||||
pthread_mutex_unlock(&cfg->memBlocks_mutex);
|
||||
if ( i == numptrs )
|
||||
return -1;
|
||||
else
|
||||
return cfg->oneBlock[i].sz;
|
||||
}
|
||||
|
||||
if (ptr != NULL) {
|
||||
*ptr=NULL;
|
||||
cfgoptions->strptr=ptr;
|
||||
void *config_allocate_new(int sz, bool autoFree) {
|
||||
void *ptr = calloc(sz,1);
|
||||
AssertFatal(ptr, "calloc fails\n");
|
||||
configmodule_interface_t * cfg=config_get_if();
|
||||
// add the memory piece in the managed memory pieces list
|
||||
pthread_mutex_lock(&cfg->memBlocks_mutex);
|
||||
int newBlockIdx=cfg->numptrs++;
|
||||
oneBlock_t* tmp=&cfg->oneBlock[newBlockIdx];
|
||||
tmp->ptrs = (char *)ptr;
|
||||
tmp->ptrsAllocated = true;
|
||||
tmp->sz=sz;
|
||||
tmp->toFree=autoFree;
|
||||
pthread_mutex_unlock(&cfg->memBlocks_mutex);
|
||||
return ptr;
|
||||
}
|
||||
|
||||
if ( (cfgoptions->paramflags & PARAMFLAG_NOFREE) == 0) {
|
||||
config_get_if()->ptrs[config_get_if()->numptrs] = (char *)ptr;
|
||||
config_get_if()->ptrsAllocated[config_get_if()->numptrs] = true;
|
||||
config_get_if()->numptrs++;
|
||||
}
|
||||
} else {
|
||||
CONFIG_PRINTF_ERROR("[CONFIG] %s %d option %s, cannot allocate pointer: %s \n",
|
||||
__FILE__, __LINE__, cfgoptions->optname, strerror(errno));
|
||||
void config_check_valptr(paramdef_t *cfgoptions, int elt_sz, int nb_elt) {
|
||||
|
||||
const bool toFree=!(cfgoptions->paramflags & PARAMFLAG_NOFREE);
|
||||
|
||||
// let's see if the value has been read
|
||||
// the datamodel is more difficult than it should be
|
||||
// and it is not thread safe
|
||||
if (cfgoptions->voidptr) {
|
||||
int sz;
|
||||
if ( cfgoptions-> type == TYPE_STRING)
|
||||
sz=managed_ptr_sz(*cfgoptions->strptr);
|
||||
else
|
||||
sz=managed_ptr_sz(cfgoptions->voidptr);
|
||||
if ( sz != -1 ) // the same variable pointer has been used!
|
||||
cfgoptions->numelt=sz;
|
||||
}
|
||||
|
||||
if (cfgoptions->voidptr != NULL
|
||||
&& (cfgoptions->type == TYPE_INTARRAY
|
||||
|| cfgoptions->type == TYPE_UINTARRAY
|
||||
|| cfgoptions->type == TYPE_STRINGLIST )) {
|
||||
int sz;
|
||||
if ( cfgoptions->type == TYPE_STRING ||
|
||||
cfgoptions->type == TYPE_STRINGLIST )
|
||||
sz=managed_ptr_sz(*cfgoptions->strptr);
|
||||
else
|
||||
sz=managed_ptr_sz(cfgoptions->voidptr);
|
||||
if ( sz != -1) {
|
||||
CONFIG_PRINTF_ERROR("[CONFIG] %s NOT SUPPORTED not NULL pointer with array types", cfgoptions->optname);
|
||||
return ;
|
||||
}
|
||||
}
|
||||
|
||||
printf_ptrs("[CONFIG] %s ptr: 0x%08lx requested size: %i\n",cfgoptions->optname,(uintptr_t)(ptr),length);
|
||||
|
||||
if(cfgoptions->numelt > 0 && PARAM_ISSCALAR(cfgoptions) ) { /* already allocated */
|
||||
if (*ptr != NULL) {
|
||||
return *ptr;
|
||||
if (cfgoptions->voidptr == NULL ) {
|
||||
if (cfgoptions->type == TYPE_STRING) {
|
||||
// difficult datamodel
|
||||
cfgoptions->strptr = config_allocate_new(sizeof(*cfgoptions->strptr), toFree);
|
||||
} else if ( cfgoptions->type == TYPE_STRINGLIST) {
|
||||
AssertFatal(nb_elt<MAX_LIST_SIZE,
|
||||
"This piece of code use fixed size arry of constant #define MAX_LIST_SIZE %d\n",
|
||||
MAX_LIST_SIZE );
|
||||
cfgoptions->strlistptr= config_allocate_new(sizeof(char*)*MAX_LIST_SIZE, toFree);
|
||||
for (int i=0; i<MAX_LIST_SIZE; i++)
|
||||
cfgoptions->strlistptr[i]= config_allocate_new(DEFAULT_EXTRA_SZ, toFree);
|
||||
} else {
|
||||
CONFIG_PRINTF_ERROR("[CONFIG] %s %d option %s, definition error: value pointer is NULL, declared as %i bytes allocated\n",
|
||||
__FILE__, __LINE__,cfgoptions->optname, cfgoptions->numelt);
|
||||
if ( cfgoptions->type == TYPE_INTARRAY || cfgoptions->type == TYPE_UINTARRAY )
|
||||
nb_elt=max(nb_elt, MAX_LIST_SIZE); // make room if the list is larger than the default one
|
||||
cfgoptions->voidptr = config_allocate_new(elt_sz*nb_elt, toFree);
|
||||
}
|
||||
}
|
||||
|
||||
if (*ptr == NULL) {
|
||||
// LTS: dummy fix, waiting Francois full fix in 4G branch
|
||||
// the issue is we don't know at this point the size we will get
|
||||
// for parmeters on the command line,
|
||||
// The length sould probably managed, in a later version
|
||||
// 100 is a very large value for a string parameter of today OAI
|
||||
if (length<100)
|
||||
length=100;
|
||||
*ptr = malloc(length);
|
||||
|
||||
if ( *ptr != NULL) {
|
||||
memset(*ptr,0,length);
|
||||
|
||||
if ( (cfgoptions->paramflags & PARAMFLAG_NOFREE) == 0) {
|
||||
config_get_if()->ptrs[config_get_if()->numptrs] = *ptr;
|
||||
config_get_if()->numptrs++;
|
||||
}
|
||||
} else {
|
||||
CONFIG_PRINTF_ERROR("[CONFIG] %s %d malloc error\n",__FILE__, __LINE__);
|
||||
}
|
||||
if (cfgoptions->type == TYPE_STRING && *cfgoptions->strptr == NULL) {
|
||||
*cfgoptions->strptr = config_allocate_new(nb_elt+DEFAULT_EXTRA_SZ, toFree);
|
||||
cfgoptions->numelt=nb_elt+DEFAULT_EXTRA_SZ;
|
||||
}
|
||||
|
||||
return *ptr;
|
||||
printf_ptrs("[CONFIG] %s ptr: %p requested size: elt_sz: %d, nb_elt: %d\n",cfgoptions->optname, cfgoptions->voidptr, elt_sz, nb_elt);
|
||||
}
|
||||
|
||||
void config_assign_int(paramdef_t *cfgoptions, char *fullname, int val) {
|
||||
@@ -156,7 +194,7 @@ void config_assign_int(paramdef_t *cfgoptions, char *fullname, int val) {
|
||||
}
|
||||
}
|
||||
void config_assign_processedint(paramdef_t *cfgoption, int val) {
|
||||
cfgoption->processedvalue = malloc(sizeof(int));
|
||||
cfgoption->processedvalue = config_allocate_new(sizeof(int),!(cfgoption->paramflags & PARAMFLAG_NOFREE));
|
||||
|
||||
if ( cfgoption->processedvalue != NULL) {
|
||||
*(cfgoption->processedvalue) = val;
|
||||
@@ -172,7 +210,7 @@ int config_get_processedint(paramdef_t *cfgoption) {
|
||||
ret=*(cfgoption->processedvalue);
|
||||
free( cfgoption->processedvalue);
|
||||
cfgoption->processedvalue=NULL;
|
||||
printf_params("[CONFIG] %s: set from %s to %i\n",cfgoption->optname, *(cfgoption->strptr), ret);
|
||||
printf_params("[CONFIG] %s: set from %s to %i\n",cfgoption->optname, *cfgoption->strptr, ret);
|
||||
} else {
|
||||
fprintf (stderr,"[CONFIG] %s %d %s has no processed integer availablle\n",__FILE__, __LINE__, cfgoption->optname);
|
||||
ret=0;
|
||||
@@ -344,7 +382,7 @@ int config_check_intrange(paramdef_t *param) {
|
||||
|
||||
void print_strvalueerror(paramdef_t *param, char *fname, char **okval, int numokval) {
|
||||
fprintf(stderr,"[CONFIG] %s: %s: %s invalid value, authorized values:\n ",
|
||||
fname,param->optname, *(param->strptr));
|
||||
fname,param->optname, *param->strptr);
|
||||
|
||||
for ( int i=0; i<numokval ; i++) {
|
||||
fprintf(stderr, " %s",okval[i]);
|
||||
@@ -360,7 +398,7 @@ int config_check_strval(paramdef_t *param) {
|
||||
}
|
||||
|
||||
for ( int i=0; i<param->chkPptr->s3.num_okstrval ; i++) {
|
||||
if( strcasecmp(*(param->strptr),param->chkPptr->s3.okstrval[i] ) == 0) {
|
||||
if( strcasecmp(*param->strptr,param->chkPptr->s3.okstrval[i] ) == 0) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@@ -371,7 +409,7 @@ int config_check_strval(paramdef_t *param) {
|
||||
|
||||
int config_checkstr_assign_integer(paramdef_t *param) {
|
||||
for (int i=0; i < param->chkPptr->s3a.num_okstrval ; i++) {
|
||||
if (strcasecmp(*(param->strptr),param->chkPptr->s3a.okstrval[i] ) == 0) {
|
||||
if (strcasecmp(*param->strptr,param->chkPptr->s3a.okstrval[i] ) == 0) {
|
||||
config_assign_processedint(param, param->chkPptr->s3a.setintval[i]);
|
||||
return 0;
|
||||
}
|
||||
@@ -393,14 +431,14 @@ int config_setdefault_string(paramdef_t *cfgoptions, char *prefix) {
|
||||
if( cfgoptions->defstrval != NULL) {
|
||||
status=1;
|
||||
|
||||
if (cfgoptions->numelt == 0 ) {
|
||||
config_check_valptr(cfgoptions, cfgoptions->strptr, strlen(cfgoptions->defstrval)+1);
|
||||
sprintf(*(cfgoptions->strptr), "%s",cfgoptions->defstrval);
|
||||
printf_params("[CONFIG] %s.%s set to default value \"%s\"\n", ((prefix == NULL) ? "" : prefix), cfgoptions->optname, *(cfgoptions->strptr));
|
||||
} else {
|
||||
sprintf((char *)(cfgoptions->strptr), "%s",cfgoptions->defstrval);
|
||||
printf_params("[CONFIG] %s.%s set to default value \"%s\"\n", ((prefix == NULL) ? "" : prefix), cfgoptions->optname, (char *)(cfgoptions->strptr));
|
||||
if (cfgoptions->numelt == 0 )
|
||||
config_check_valptr(cfgoptions, 1, strlen(cfgoptions->defstrval)+1);
|
||||
if ( cfgoptions->numelt < strlen(cfgoptions->defstrval)+1 ) {
|
||||
CONFIG_PRINTF_ERROR("[CONFIG] %s size too small\n", cfgoptions->optname);
|
||||
}
|
||||
snprintf(*cfgoptions->strptr, cfgoptions->numelt, "%s",cfgoptions->defstrval);
|
||||
printf_params("[CONFIG] %s.%s set to default value \"%s\"\n", ((prefix == NULL) ? "" : prefix), cfgoptions->optname, *cfgoptions->strptr);
|
||||
|
||||
}
|
||||
|
||||
return status;
|
||||
@@ -422,7 +460,7 @@ int config_setdefault_stringlist(paramdef_t *cfgoptions, char *prefix) {
|
||||
|
||||
int config_setdefault_int(paramdef_t *cfgoptions, char *prefix) {
|
||||
int status = 0;
|
||||
config_check_valptr(cfgoptions, (char **)(&(cfgoptions->iptr)),sizeof(int32_t));
|
||||
config_check_valptr(cfgoptions, sizeof(*cfgoptions->iptr), 1);
|
||||
|
||||
if( ((cfgoptions->paramflags & PARAMFLAG_MANDATORY) == 0)) {
|
||||
config_assign_int(cfgoptions,cfgoptions->optname,cfgoptions->defintval);
|
||||
@@ -435,7 +473,7 @@ int config_setdefault_int(paramdef_t *cfgoptions, char *prefix) {
|
||||
|
||||
int config_setdefault_int64(paramdef_t *cfgoptions, char *prefix) {
|
||||
int status = 0;
|
||||
config_check_valptr(cfgoptions, (char **)&(cfgoptions->i64ptr),sizeof(long long));
|
||||
config_check_valptr(cfgoptions, sizeof(*cfgoptions->i64ptr), 1);
|
||||
|
||||
if( ((cfgoptions->paramflags & PARAMFLAG_MANDATORY) == 0)) {
|
||||
*(cfgoptions->u64ptr)=cfgoptions->defuintval;
|
||||
@@ -450,7 +488,7 @@ int config_setdefault_intlist(paramdef_t *cfgoptions, char *prefix) {
|
||||
int status = 0;
|
||||
|
||||
if( cfgoptions->defintarrayval != NULL) {
|
||||
config_check_valptr(cfgoptions,(char **)&(cfgoptions->iptr), sizeof(int32_t *));
|
||||
config_check_valptr(cfgoptions, sizeof(cfgoptions->iptr), cfgoptions->numelt);
|
||||
cfgoptions->iptr=cfgoptions->defintarrayval;
|
||||
status=1;
|
||||
|
||||
@@ -464,7 +502,7 @@ int config_setdefault_intlist(paramdef_t *cfgoptions, char *prefix) {
|
||||
|
||||
int config_setdefault_double(paramdef_t *cfgoptions, char *prefix) {
|
||||
int status = 0;
|
||||
config_check_valptr(cfgoptions, (char **)&(cfgoptions->dblptr),sizeof(double));
|
||||
config_check_valptr(cfgoptions, sizeof(*cfgoptions->dblptr), 1);
|
||||
|
||||
if( ((cfgoptions->paramflags & PARAMFLAG_MANDATORY) == 0)) {
|
||||
*(cfgoptions->dblptr)=cfgoptions->defdblval;
|
||||
@@ -476,7 +514,7 @@ int config_setdefault_double(paramdef_t *cfgoptions, char *prefix) {
|
||||
}
|
||||
|
||||
int config_assign_ipv4addr(paramdef_t *cfgoptions, char *ipv4addr) {
|
||||
config_check_valptr(cfgoptions,(char **)&(cfgoptions->uptr), sizeof(int));
|
||||
config_check_valptr(cfgoptions, sizeof(*cfgoptions->uptr), 1);
|
||||
int rst=inet_pton(AF_INET, ipv4addr,cfgoptions->uptr );
|
||||
|
||||
if (rst == 1 && *(cfgoptions->uptr) > 0) {
|
||||
|
||||
@@ -51,7 +51,7 @@ extern int config_paramidx_fromname(paramdef_t *params,int numparams, char *name
|
||||
|
||||
/* utility functions, to be used by configuration module and/or configuration libraries */
|
||||
extern configmodule_interface_t *config_get_if(void);
|
||||
extern char *config_check_valptr(paramdef_t *cfgoptions, char **ptr, int length) ;
|
||||
void config_check_valptr(paramdef_t *cfgoptions, int elt_sz, int nb_elt);
|
||||
extern void config_printhelp(paramdef_t *,int numparams, char *prefix);
|
||||
extern int config_process_cmdline(paramdef_t *params,int numparams, char *prefix);
|
||||
extern void config_assign_processedint(paramdef_t *cfgoption, int val);
|
||||
@@ -86,7 +86,7 @@ extern int config_setdefault_int64(paramdef_t *cfgoptions, char *prefix);
|
||||
extern int config_setdefault_intlist(paramdef_t *cfgoptions, char *prefix);
|
||||
extern int config_setdefault_double(paramdef_t *cfgoptions, char *prefix);
|
||||
extern int config_setdefault_ipv4addr(paramdef_t *cfgoptions, char *prefix);
|
||||
|
||||
void *config_allocate_new(int sz, bool autoFree);
|
||||
#define CONFIG_GETCONFFILE (config_get_if()->cfgP[0])
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
* \warning
|
||||
*/
|
||||
#define _GNU_SOURCE
|
||||
#include <pthread.h>
|
||||
#include <libconfig.h>
|
||||
|
||||
#include <string.h>
|
||||
@@ -41,6 +42,7 @@
|
||||
#include "config_libconfig_private.h"
|
||||
#include "../config_userapi.h"
|
||||
#include "errno.h"
|
||||
#include "assertions.h"
|
||||
|
||||
#if ( LIBCONFIG_VER_MAJOR == 1 && LIBCONFIG_VER_MINOR < 5)
|
||||
#define config_setting_lookup config_lookup_from
|
||||
@@ -53,17 +55,18 @@ int read_strlist(paramdef_t *cfgoptions,config_setting_t *setting, char *cfgpath
|
||||
int st;
|
||||
int numelt;
|
||||
numelt=config_setting_length(setting);
|
||||
config_check_valptr(cfgoptions,(char **)&(cfgoptions->strlistptr), sizeof(char *) * numelt);
|
||||
config_check_valptr(cfgoptions, sizeof(char *), numelt);
|
||||
st=0;
|
||||
|
||||
AssertFatal(MAX_LIST_SIZE > numelt,
|
||||
"This piece of code use fixed size arry of constant #define MAX_LIST_SIZE %d\n",
|
||||
MAX_LIST_SIZE );
|
||||
for (int i=0; i< numelt ; i++) {
|
||||
str=config_setting_get_string_elem(setting,i);
|
||||
|
||||
if (str==NULL) {
|
||||
printf("[LIBCONFIG] %s%i not found in config file\n", cfgoptions->optname,i);
|
||||
} else {
|
||||
config_check_valptr(cfgoptions,&(cfgoptions->strlistptr[i]),strlen(str)+1);
|
||||
sprintf(cfgoptions->strlistptr[i],"%s",str);
|
||||
snprintf(cfgoptions->strlistptr[i], DEFAULT_EXTRA_SZ, "%s",str);
|
||||
st++;
|
||||
printf_params("[LIBCONFIG] %s%i: %s\n", cfgpath,i,cfgoptions->strlistptr[i]);
|
||||
}
|
||||
@@ -77,7 +80,8 @@ int read_intarray(paramdef_t *cfgoptions,config_setting_t *setting, char *cfgpat
|
||||
cfgoptions->numelt=config_setting_length(setting);
|
||||
|
||||
if (cfgoptions->numelt > 0) {
|
||||
cfgoptions->iptr=malloc(sizeof(int) * (cfgoptions->numelt));
|
||||
cfgoptions->iptr=config_allocate_new(cfgoptions->numelt*sizeof(*cfgoptions->iptr),
|
||||
!(cfgoptions->paramflags & PARAMFLAG_NOFREE) );
|
||||
|
||||
for (int i=0; i< cfgoptions->numelt && cfgoptions->iptr != NULL; i++) {
|
||||
cfgoptions->iptr[i]=config_setting_get_int_elem(setting,i);
|
||||
@@ -123,23 +127,14 @@ int config_libconfig_get(paramdef_t *cfgoptions,int numoptions, char *prefix ) {
|
||||
switch(cfgoptions[i].type) {
|
||||
case TYPE_STRING:
|
||||
if ( config_lookup_string(&(libconfig_privdata.cfg), cfgpath, (const char**)&str)) {
|
||||
if ( cfgoptions[i].numelt > 0 && str != NULL && strlen(str) >= cfgoptions[i].numelt ) {
|
||||
config_check_valptr(&(cfgoptions[i]), 1, strlen(str)+1);
|
||||
if ( strlen(str)+1 > cfgoptions[i].numelt )
|
||||
fprintf(stderr,"[LIBCONFIG] %s: %s exceeds maximum length of %i bytes, value truncated\n",
|
||||
cfgpath,str,cfgoptions[i].numelt);
|
||||
str[strlen(str)-1] = 0;
|
||||
}
|
||||
|
||||
if (cfgoptions[i].numelt == 0 ) {
|
||||
// config_check_valptr(&(cfgoptions[i]), (char **)(&(cfgoptions[i].strptr)), sizeof(char *));
|
||||
config_check_valptr(&(cfgoptions[i]), cfgoptions[i].strptr, strlen(str)+1);
|
||||
sprintf( *(cfgoptions[i].strptr) , "%s", str);
|
||||
printf_params("[LIBCONFIG] %s: \"%s\"\n", cfgpath,*(cfgoptions[i].strptr) );
|
||||
} else {
|
||||
sprintf( (char *)(cfgoptions[i].strptr) , "%s", str);
|
||||
printf_params("[LIBCONFIG] %s: \"%s\"\n", cfgpath,(char *)cfgoptions[i].strptr );
|
||||
}
|
||||
snprintf( *cfgoptions[i].strptr , cfgoptions[i].numelt, "%s", str);
|
||||
printf_params("[LIBCONFIG] %s: \"%s\"\n", cfgpath, *cfgoptions[i].strptr);
|
||||
} else {
|
||||
defval=config_setdefault_string(&(cfgoptions[i]),prefix);
|
||||
defval=config_setdefault_string(&cfgoptions[i],prefix);
|
||||
}
|
||||
|
||||
break;
|
||||
@@ -163,7 +158,7 @@ int config_libconfig_get(paramdef_t *cfgoptions,int numoptions, char *prefix ) {
|
||||
case TYPE_INT32:
|
||||
case TYPE_MASK:
|
||||
if ( config_lookup_int(&(libconfig_privdata.cfg),cfgpath, &u)) {
|
||||
config_check_valptr(&(cfgoptions[i]), (char **)(&(cfgoptions[i].iptr)),sizeof(int32_t));
|
||||
config_check_valptr(&(cfgoptions[i]), sizeof(*cfgoptions[i].iptr), 1);
|
||||
config_assign_int(&(cfgoptions[i]),cfgpath,u);
|
||||
} else {
|
||||
defval=config_setdefault_int(&(cfgoptions[i]),prefix);
|
||||
@@ -174,14 +169,14 @@ int config_libconfig_get(paramdef_t *cfgoptions,int numoptions, char *prefix ) {
|
||||
case TYPE_UINT64:
|
||||
case TYPE_INT64:
|
||||
if ( config_lookup_int64(&(libconfig_privdata.cfg),cfgpath, &llu)) {
|
||||
config_check_valptr(&(cfgoptions[i]), (char **)&(cfgoptions[i].i64ptr),sizeof(long long));
|
||||
config_check_valptr(&cfgoptions[i], sizeof(*cfgoptions[i].i64ptr), 1);
|
||||
|
||||
if(cfgoptions[i].type==TYPE_UINT64) {
|
||||
*(cfgoptions[i].u64ptr) = (uint64_t)llu;
|
||||
printf_params("[LIBCONFIG] %s: %llu\n", cfgpath,(long long unsigned)(*(cfgoptions[i].u64ptr)) );
|
||||
printf_params("[LIBCONFIG] %s: %lu\n", cfgpath,*cfgoptions[i].u64ptr);
|
||||
} else {
|
||||
*(cfgoptions[i].i64ptr) = llu;
|
||||
printf_params("[LIBCONFIG] %s: %lld\n", cfgpath,(long long)(*(cfgoptions[i].i64ptr)) );
|
||||
printf_params("[LIBCONFIG] %s: %ld\n", cfgpath,*cfgoptions[i].i64ptr);
|
||||
}
|
||||
} else {
|
||||
defval=config_setdefault_int64(&(cfgoptions[i]),prefix);
|
||||
@@ -203,8 +198,8 @@ int config_libconfig_get(paramdef_t *cfgoptions,int numoptions, char *prefix ) {
|
||||
|
||||
case TYPE_DOUBLE:
|
||||
if ( config_lookup_float(&(libconfig_privdata.cfg),cfgpath, &dbl)) {
|
||||
config_check_valptr(&(cfgoptions[i]), (char **)&(cfgoptions[i].dblptr),sizeof(double));
|
||||
*(cfgoptions[i].dblptr) = dbl;
|
||||
config_check_valptr(&cfgoptions[i],sizeof(*cfgoptions[i].dblptr), 1);
|
||||
*cfgoptions[i].dblptr = dbl;
|
||||
printf_params("[LIBCONFIG] %s: %lf\n", cfgpath,*(cfgoptions[i].dblptr) );
|
||||
} else {
|
||||
defval=config_setdefault_double(&(cfgoptions[i]),prefix);
|
||||
@@ -304,27 +299,10 @@ int config_libconfig_getlist(paramlist_def_t *ParamList,
|
||||
}
|
||||
|
||||
if (ParamList->numelt > 0 && params != NULL) {
|
||||
ParamList->paramarray = malloc(ParamList->numelt * sizeof(paramdef_t *));
|
||||
|
||||
if ( ParamList->paramarray != NULL) {
|
||||
config_get_if()->ptrs[config_get_if()->numptrs] = (char *)(ParamList->paramarray);
|
||||
config_get_if()->numptrs++;
|
||||
} else {
|
||||
fprintf (stderr,"[LIBCONFIG] %s %d malloc error\n",__FILE__, __LINE__);
|
||||
exit(-1);
|
||||
}
|
||||
ParamList->paramarray = config_allocate_new(ParamList->numelt * sizeof(paramdef_t *), true);
|
||||
|
||||
for (i=0 ; i < ParamList->numelt ; i++) {
|
||||
ParamList->paramarray[i] = malloc(numparams * sizeof(paramdef_t));
|
||||
|
||||
if ( ParamList->paramarray[i] != NULL) {
|
||||
config_get_if()->ptrs[config_get_if()->numptrs] = (char *)(ParamList->paramarray[i]);
|
||||
config_get_if()->numptrs++;
|
||||
} else {
|
||||
fprintf (stderr,"[LIBCONFIG] %s %d malloc error\n",__FILE__, __LINE__);
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
ParamList->paramarray[i] = config_allocate_new(numparams * sizeof(paramdef_t), true);
|
||||
memcpy(ParamList->paramarray[i], params, sizeof(paramdef_t)*numparams);
|
||||
|
||||
for (j=0; j<numparams; j++) {
|
||||
@@ -346,8 +324,8 @@ int config_libconfig_init(char *cfgP[], int numP) {
|
||||
config_init(&(libconfig_privdata.cfg));
|
||||
libconfig_privdata.configfile = strdup((char *)cfgP[0]);
|
||||
config_get_if()->numptrs=0;
|
||||
memset(config_get_if()->ptrs,0,sizeof(void *) * CONFIG_MAX_ALLOCATEDPTRS);
|
||||
memset(config_get_if()->ptrsAllocated, 0, sizeof(config_get_if()->ptrsAllocated));
|
||||
pthread_mutex_init(&config_get_if()->memBlocks_mutex, NULL);
|
||||
memset(config_get_if()->oneBlock,0,sizeof(config_get_if()->oneBlock));
|
||||
/* search for include path parameter and set config file include path accordingly */
|
||||
for (int i=0; i<numP; i++) {
|
||||
if (strncmp(cfgP[i],"incp",4) == 0) {
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -56,7 +56,7 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
#include <assert.h>
|
||||
#ifdef NDEBUG
|
||||
#warning assert is disabled
|
||||
#warning assert is disabled
|
||||
#endif
|
||||
#define NUM_ELEMENTS(ARRAY) (sizeof(ARRAY) / sizeof(ARRAY[0]))
|
||||
#define CHECK_INDEX(ARRAY, INDEX) assert((INDEX) < NUM_ELEMENTS(ARRAY))
|
||||
@@ -129,7 +129,6 @@ extern "C" {
|
||||
#define FLAG_FILE_LINE 0x0040
|
||||
#define FLAG_TIME 0x0100
|
||||
#define FLAG_THREAD_ID 0x0200
|
||||
#define FLAG_CORR_ID 0x0400 /*!< \brief: activate correlation ID in json formatted logs*/
|
||||
#define FLAG_INITIALIZED 0x8000
|
||||
|
||||
#define SET_LOG_OPTION(O) g_log->flag = (g_log->flag | O)
|
||||
@@ -268,7 +267,7 @@ typedef struct {
|
||||
int level;
|
||||
int savedlevel;
|
||||
int flag;
|
||||
int filelog; // flag set to 1 when using a sink of type file, stdout if set to 0
|
||||
int filelog;
|
||||
char *filelog_name;
|
||||
FILE *stream;
|
||||
log_vprint_func_t vprint;
|
||||
@@ -285,11 +284,6 @@ typedef struct {
|
||||
char *filelog_name;
|
||||
uint64_t debug_mask;
|
||||
uint64_t dump_mask;
|
||||
unsigned char global_logfile;
|
||||
FILE *global_logfilep;
|
||||
off_t rotation_size;// in bytes, 0 means disabled
|
||||
unsigned int rotation_time;// in seconds. 0 means disabled
|
||||
time_t rotation_start_time; // timestamp in seconds since Unix-Epoch
|
||||
} log_t;
|
||||
|
||||
|
||||
@@ -307,64 +301,36 @@ extern "C" {
|
||||
#endif
|
||||
/*--- INCLUDES ---------------------------------------------------------------*/
|
||||
# include "log_if.h"
|
||||
|
||||
|
||||
/**
|
||||
* Initialize the logging framework allocating internal memory for API global structure 'g_log', setting defaults and
|
||||
* reading parameters from the configuration file (if exists) and command line. There is no environment variable handling.
|
||||
* In order of priority, logs are disabled thanks to loglevel OAILOG_DISABLE and sink to file per component. Internally it
|
||||
* leverages log API function log_getconfig().
|
||||
*
|
||||
* @return: 0 (successful), !=0 (error), exit(1) if memory failure
|
||||
*/
|
||||
/*----------------------------------------------------------------------------*/
|
||||
int logInit (void);
|
||||
void logTerm (void);
|
||||
int isLogInitDone (void);
|
||||
int register_log_component(char *name, char *fext,int compidx);
|
||||
void logRecord_mt(const char *file, const char *func, int line,int comp, int level, const char *format, ...) __attribute__ ((format (printf, 6, 7)));
|
||||
void vlogRecord_mt(const char *file, const char *func, int line, int comp, int level, const char *format, va_list args );
|
||||
void log_dump(int component, void *buffer, int buffsize,int datatype, const char *format, ... );
|
||||
|
||||
/**
|
||||
* set log level for log component and check also if the stream associated is open. If it is not, give priority to file sink
|
||||
* type of log stream
|
||||
* @return: 0(success), !=-0(failure)
|
||||
*/
|
||||
int set_log(int component, int level);
|
||||
/*
|
||||
* @return: 0(success), !=-0(failure)
|
||||
*/
|
||||
int set_glog(int level);
|
||||
void set_glog_onlinelog(int enable);
|
||||
void set_glog(int level);
|
||||
|
||||
/**
|
||||
* Set sink logging type globally. Sinks are of 2 types: stdout or file. You choose among them using ENABLE parameter
|
||||
*
|
||||
* @param enable if param is != 0, all the logs will be redirected to a global file, else logs will be redirected to stdout
|
||||
* @return: 0(success), !=-0(failure)
|
||||
*/
|
||||
int set_glog_filelog(int enable);
|
||||
/*
|
||||
* @return: 0(success), !=-0(failure)
|
||||
*/
|
||||
int set_component_filelog(int comp);
|
||||
void set_glog_onlinelog(int enable);
|
||||
void set_glog_filelog(int enable);
|
||||
void set_component_filelog(int comp);
|
||||
void close_component_filelog(int comp);
|
||||
void set_component_consolelog(int comp);
|
||||
|
||||
void logTerm (void);
|
||||
void logClean (void);
|
||||
|
||||
int map_str_to_int(mapping *map, const char *str);
|
||||
char *map_int_to_str(mapping *map, int val);
|
||||
void logClean (void);
|
||||
int is_newline( char *str, int size);
|
||||
|
||||
int register_log_component(char *name, char *fext, int compidx);
|
||||
|
||||
#define LOG_MEM_SIZE 100*1024*1024
|
||||
#define LOG_MEM_FILE "./logmem.log"
|
||||
void flush_mem_to_file(void);
|
||||
int logInit_log_mem(void);
|
||||
void close_log_mem(void);
|
||||
|
||||
|
||||
typedef struct {
|
||||
char *buf_p;
|
||||
char* buf_p;
|
||||
int buf_index;
|
||||
int enable_flag;
|
||||
} log_mem_cnt_t;
|
||||
@@ -398,7 +364,7 @@ typedef struct {
|
||||
#define MATLAB_CSHORT_BRACKET1 13
|
||||
#define MATLAB_CSHORT_BRACKET2 14
|
||||
#define MATLAB_CSHORT_BRACKET3 15
|
||||
|
||||
|
||||
int32_t write_file_matlab(const char *fname, const char *vname, void *data, int length, int dec, unsigned int format, int multiVec);
|
||||
|
||||
/*----------------macro definitions for reading log configuration from the config module */
|
||||
@@ -406,11 +372,8 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int
|
||||
|
||||
#define LOG_CONFIG_STRING_GLOBAL_LOG_LEVEL "global_log_level"
|
||||
#define LOG_CONFIG_STRING_GLOBAL_LOG_ONLINE "global_log_online"
|
||||
// LOG_CONFIG_STRING_GLOBAL_LOG_INFILE: it is unused inside this log library.
|
||||
#define LOG_CONFIG_STRING_GLOBAL_LOG_INFILE "global_log_infile"
|
||||
#define LOG_CONFIG_STRING_GLOBAL_LOG_OPTIONS "global_log_options"
|
||||
#define LOG_CONFIG_STRING_GLOBAL_LOG_ROT_SIZE "global_log_rotation_size"
|
||||
#define LOG_CONFIG_STRING_GLOBAL_LOG_ROT_TIME "global_log_rotation_time"
|
||||
|
||||
#define LOG_CONFIG_LEVEL_FORMAT "%s_log_level"
|
||||
#define LOG_CONFIG_LOGFILE_FORMAT "%s_log_infile"
|
||||
@@ -430,15 +393,14 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int
|
||||
/* optname help paramflags XXXptr defXXXval type numelt */
|
||||
/*-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||
#define LOG_GLOBALPARAMS_DESC { \
|
||||
{LOG_CONFIG_STRING_GLOBAL_LOG_LEVEL, "Default log level for all components\n", 0, strptr:(char **)&gloglevel, defstrval:log_level_names[6].name, TYPE_STRING, 0}, \
|
||||
{LOG_CONFIG_STRING_GLOBAL_LOG_ONLINE, "Default console output option, for all components\n", 0, iptr:&(consolelog), defintval:0, TYPE_INT, 0}, \
|
||||
{LOG_CONFIG_STRING_GLOBAL_LOG_OPTIONS, LOG_CONFIG_HELP_OPTIONS, 0, strlistptr:NULL, defstrlistval:NULL, TYPE_STRINGLIST, 0}, \
|
||||
{LOG_CONFIG_STRING_GLOBAL_LOG_ROT_SIZE, "Log Rotation: maximum log size in MB for file rotation (0 to disable/default)\n", 0, uptr:&(rotationsize), defuintval:0, TYPE_UINT, 0},\
|
||||
{LOG_CONFIG_STRING_GLOBAL_LOG_ROT_TIME, "Log Rotation: maximum elapsed time in seconds for file rotation (0 to disable/default)\n", 0, uptr:&(rotationtime), defuintval:0, TYPE_UINT, 0} \
|
||||
{LOG_CONFIG_STRING_GLOBAL_LOG_LEVEL, "Default log level for all componemts\n", 0, strptr:&gloglevel, defstrval:log_level_names[3].name, TYPE_STRING, 0}, \
|
||||
{LOG_CONFIG_STRING_GLOBAL_LOG_ONLINE, "Default console output option, for all components\n", 0, iptr:&(consolelog), defintval:1, TYPE_INT, 0}, \
|
||||
{LOG_CONFIG_STRING_GLOBAL_LOG_OPTIONS, LOG_CONFIG_HELP_OPTIONS, 0, strlistptr:NULL, defstrlistval:NULL, TYPE_STRINGLIST, 0} \
|
||||
}
|
||||
|
||||
#define LOG_OPTIONS_IDX 2
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------------------*/
|
||||
/** @defgroup _debugging debugging macros
|
||||
* @ingroup _macro
|
||||
@@ -485,7 +447,7 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int
|
||||
|
||||
# define LOG_M(file, vector, data, len, dec, format) do { write_file_matlab(file, vector, data, len, dec, format, 0);} while(0)
|
||||
# define LOG_VAR(A,B) A B
|
||||
# define T_ACTIVE(a) (0)
|
||||
# define T_ACTIVE(a) (0)
|
||||
# endif /* T_TRACER */
|
||||
|
||||
/* avoid warnings for variables only used in LOG macro's but set outside debug section */
|
||||
|
||||
@@ -1,43 +0,0 @@
|
||||
/* vim settings :setf config
|
||||
* Configuration file for log system integration tests
|
||||
*
|
||||
* This file adheres to the libconfig grammar format that you can find in https://hyperrealm.github.io/libconfig/libconfig_manual.html
|
||||
* Parameters below are specific to log system and are defined in log.h
|
||||
* Caveats:
|
||||
* Support for new json unified format has to be explicitly enabled on compilation flag(-DOAI_LOG_JSON) of log library
|
||||
*
|
||||
* If you do not put this section log_config, the program will not log anything.
|
||||
*/
|
||||
log_config :
|
||||
{
|
||||
|
||||
# Set the log level for all the components. It will also force log redirection to a file sink if global_log_online
|
||||
# is not set or set to 0
|
||||
global_log_level = "debug";
|
||||
|
||||
# set log level per component. If the corresponding '*_log_infile' is not present, it will check the 'global_log_level'
|
||||
# to decide where to log
|
||||
hw_log_level = "info";
|
||||
|
||||
# Activation of log redirection to file sink per component. By default it is deactivated.
|
||||
# Syntax: <component>_log_infile = boolean_val(0|1)
|
||||
# Example: hw_log_infile = 1
|
||||
|
||||
# Activation of stdout logs globally for all the components. By default it is deactivated.
|
||||
# If some components has log to file activated it will honour that component setting
|
||||
# Syntax: global_log_online = boolean_val(0|1)
|
||||
|
||||
# Log formatting options for printing, globally or per component. By default, the formatting includes the
|
||||
# component name and colors.
|
||||
# Syntax: global_log_options: list of attributes
|
||||
# where attributes can be: nocolor, level, thread, line_num, function, time, thread_id, correlation_id.
|
||||
global_log_options = ("level","nocolor","time");
|
||||
|
||||
# Set the maximum log size in MB for triggering logfile rotation. By default it is disabled.
|
||||
# Syntax: global_log_rotation_size: uint_val, 0 means disabled
|
||||
global_log_rotation_size = 1;
|
||||
|
||||
# Set the maximum elapsed time in seconds for triggering file rotation. By default it is disabled.
|
||||
# Syntax: global_log_rotation_time: uint_val, 0 means disabled
|
||||
global_log_rotation_time = 1;
|
||||
};
|
||||
@@ -1,243 +0,0 @@
|
||||
/*
|
||||
* unit tests to evaluate integration of Log library.
|
||||
*
|
||||
* Example of running commandline: ./tstlog [--run_test=testname] [BOOST Test options]
|
||||
* I.e.: ./tstlog --run_test=test_log_rotation_1 --report_level=detailed
|
||||
*/
|
||||
|
||||
#define BOOST_TEST_MODULE tstlog
|
||||
#include <boost/test/included/unit_test.hpp>
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
|
||||
#undef T_TRACER
|
||||
#include "log.h"
|
||||
#include "common/config/config_load_configmodule.h"
|
||||
using namespace boost::unit_test;
|
||||
|
||||
volatile int oai_exit;//the definition of this variable is needed by log.c:flush_mem_to_file() and it is declared in log.c
|
||||
const char *global_oai_logfile="/tmp/openair.log";
|
||||
const char *hw_logfile="/tmp/HW.";
|
||||
const char *phy_logfile="/tmp/PHY.log";
|
||||
std::list<int> known_bugged_comp = {19, 24, 40};
|
||||
std::string conf1="\
|
||||
log_config :\n\
|
||||
{\n\
|
||||
global_log_level = \"debug\";\n\
|
||||
hw_log_level = \"info\";\n\
|
||||
global_log_options = (\"level\",\"nocolor\",\"time\");\n\
|
||||
global_log_rotation_size = 1;\n\
|
||||
global_log_rotation_time = 1;\n\
|
||||
};\n";
|
||||
|
||||
std::string conf2="\
|
||||
log_config :\n\
|
||||
{\n\
|
||||
global_log_options = (\"level\",\"nocolor\",\"time\");\n\
|
||||
global_log_rotation_size = 1;\n\
|
||||
global_log_rotation_time = 1;\n\
|
||||
};\n";
|
||||
|
||||
std::string conf3="\
|
||||
log_config :\n\
|
||||
{\n\
|
||||
global_log_options = (\"level\",\"nocolor\",\"time\", \"correlation_id\");\n\
|
||||
global_log_rotation_size = 0;\n\
|
||||
global_log_rotation_time = 0;\n\
|
||||
};\n";
|
||||
|
||||
std::string conf4="\
|
||||
log_config :\n\
|
||||
{\n\
|
||||
global_log_level =\"info\";\n\
|
||||
global_log_infile = 1; # warn: this parameter is silently discarded from configuration parser \n\
|
||||
global_log_online = 0;\n\
|
||||
};\n";
|
||||
#define TMPLOCALCONF "tstlog.conf.tmp"
|
||||
const char *argv[4] = {"tstlog", "-O", TMPLOCALCONF, NULL};
|
||||
int argc=3;
|
||||
|
||||
void log_comp_tostr(unsigned int i) {
|
||||
std::cout << "Component [" << i << "- " << g_log->log_component[i].name << "]: stream "<< g_log->log_component[i].stream
|
||||
<< ", level:" << g_log->log_component[i].level << ", filelog: " << g_log->log_component[i].filelog << std::endl;
|
||||
}
|
||||
bool search_in_file(std::string fname, std::string match) {
|
||||
std::ifstream f(fname);
|
||||
|
||||
if (!f)
|
||||
return false;
|
||||
|
||||
std::string t;
|
||||
|
||||
while (getline(f, t))
|
||||
if (t.find(match, 0) != t.npos)
|
||||
return true;
|
||||
|
||||
f.close();
|
||||
return false;
|
||||
}
|
||||
|
||||
void create_test_conf_file(std::string confcontent) {
|
||||
std::remove(TMPLOCALCONF);
|
||||
std::ofstream file(TMPLOCALCONF);
|
||||
file << confcontent;
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(test_log_rotation_1) {
|
||||
// This test will be using global log file (/tmp/openair.log), simulating time expiring for log rotation.
|
||||
// It is a test for single thread logging
|
||||
create_test_conf_file(conf1);
|
||||
std::remove(global_oai_logfile);
|
||||
std::remove(hw_logfile);
|
||||
BOOST_TEST_REQUIRE ((load_configmodule(argc, const_cast<char **>(argv), 0) != NULL), "Configuration module init failed");
|
||||
BOOST_TEST ((logInit() == 0), true);
|
||||
/*
|
||||
* Sanity check for some field of global structure of log API.
|
||||
* Expected: all components log to DEBUG level on global file, except for component 28 (HW) that will have its file and log at info level
|
||||
*/
|
||||
BOOST_TEST (((g_log->global_logfile == 0) && (g_log->global_logfilep == NULL)), true);
|
||||
|
||||
for (int i=MIN_LOG_COMPONENTS; i < MAX_LOG_PREDEF_COMPONENTS; i++) {
|
||||
auto itr = std::find(known_bugged_comp.begin(), known_bugged_comp.end(), i);
|
||||
|
||||
if (itr != known_bugged_comp.end())
|
||||
continue;
|
||||
|
||||
bool sts = ((g_log->log_component[i].filelog == 1) &&
|
||||
(g_log->log_component[i].name != NULL) &&
|
||||
(g_log->log_component[i].stream != g_log->global_logfilep));
|
||||
sts = (i == 28) ? sts && (g_log->log_component[i].level == OAILOG_INFO) : sts && (g_log->log_component[i].level == OAILOG_DEBUG);
|
||||
|
||||
if (sts == false) {
|
||||
std::cout << "Failure at this component:";
|
||||
log_comp_tostr(i);
|
||||
}
|
||||
|
||||
BOOST_TEST (sts, true);
|
||||
}
|
||||
|
||||
BOOST_TEST((set_glog(OAILOG_DEBUG) == 0), true);
|
||||
BOOST_TEST((set_glog_filelog(true) == 0), true); // force dump to default logfile /tmp/openair.log.
|
||||
BOOST_TEST (((g_log->global_logfile == 1) && (g_log->global_logfilep != NULL)), true);
|
||||
LOG_I(HW, "First test for a string");
|
||||
BOOST_TEST(set_glog(OAILOG_ERR) == 0, true);
|
||||
LOG_I(HW, "You should not see this line");
|
||||
BOOST_TEST((set_glog(OAILOG_DEBUG) == 0), true);
|
||||
char string_truncation[1600];
|
||||
memset(string_truncation, 's', 1599);
|
||||
memset(&string_truncation[1599], '\0', 1);
|
||||
LOG_I(HW, "%s", string_truncation);
|
||||
sleep(5);// let's have log rotation
|
||||
LOG_I(HW, "Spurious line terminator should not appear\n");
|
||||
bool sts = search_in_file(hw_logfile, "\n");
|
||||
|
||||
if (sts == true) {
|
||||
std::cout << "Offending line:";
|
||||
std::ifstream f(hw_logfile);
|
||||
|
||||
if (f.is_open())
|
||||
std::cout << f.rdbuf();
|
||||
}
|
||||
|
||||
BOOST_TEST(sts == false);
|
||||
logClean();
|
||||
logTerm();
|
||||
end_configmodule();
|
||||
std::remove(TMPLOCALCONF);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(test_log_rotation_2) {
|
||||
// test using component log file (tmp/PHY.log), simulating time expiring for log rotation
|
||||
// It is a test for single thread logging
|
||||
create_test_conf_file(conf1);
|
||||
std::remove(phy_logfile);
|
||||
BOOST_TEST_REQUIRE ((load_configmodule(argc, const_cast<char **>(argv), 0) != NULL), "Configuration module init failed");
|
||||
BOOST_TEST (logInit() == 0, true);
|
||||
BOOST_TEST(set_glog(OAILOG_DEBUG) == 0, true);
|
||||
BOOST_TEST(set_component_filelog(0) == 0, true);
|
||||
LOG_I(PHY, "Second test for a string that should be moved to backup file");
|
||||
sleep(5);
|
||||
LOG_I(PHY, "this should go to a brand new file");
|
||||
BOOST_TEST( search_in_file(phy_logfile, "this should go to a brand new file") == true);
|
||||
BOOST_TEST( search_in_file(phy_logfile, "Second test for a string that should be moved to backup file") == false);
|
||||
logClean();
|
||||
logTerm();
|
||||
end_configmodule();
|
||||
std::remove(TMPLOCALCONF);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(test_log_defaults) {
|
||||
// testing log default values. You should not see anylog, not on console, not on file. It is a test for single thread logging
|
||||
create_test_conf_file(conf2);
|
||||
std::remove(phy_logfile);
|
||||
BOOST_TEST_REQUIRE ((load_configmodule(argc, const_cast<char **>(argv), 0) != NULL), "Configuration module init failed");
|
||||
BOOST_TEST (logInit() == 0, true);
|
||||
LOG_I(PHY, "you should not see any log");
|
||||
BOOST_TEST( search_in_file(phy_logfile, "you should not see any log") == false);
|
||||
logClean();
|
||||
logTerm();
|
||||
end_configmodule();
|
||||
std::remove(TMPLOCALCONF);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(test_log_defaults_2) {
|
||||
/* Test log default values. You should not see anylog, not on console, not on file. It is a test for single thread logging */
|
||||
create_test_conf_file(conf3);
|
||||
std::remove(phy_logfile);
|
||||
BOOST_TEST_REQUIRE ((load_configmodule(argc, const_cast<char **>(argv), 0) != NULL), "Configuration module init failed");
|
||||
BOOST_TEST (logInit() == 0, true);
|
||||
BOOST_TEST(set_log(0, OAILOG_INFO) == 0, true);
|
||||
LOG_I(PHY, "you should see this log to file");
|
||||
BOOST_TEST( search_in_file(phy_logfile, "you should see this log to file") == true);
|
||||
LOG_I(HW, "you should not see this log at all");
|
||||
//XXX: TODO: intercept console output and general log file and validate this finding with BOOST_TEST() macro.
|
||||
logClean();
|
||||
logTerm();
|
||||
end_configmodule();
|
||||
std::remove(TMPLOCALCONF);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(test_log_discarded_options) {
|
||||
/* Test global log activation to file. You are expected to see only logs in their component file.
|
||||
* To have logs to just one global file you need to call set_glog_filelog().
|
||||
*/
|
||||
create_test_conf_file(conf4);
|
||||
std::remove(phy_logfile);
|
||||
std::remove(global_oai_logfile);
|
||||
BOOST_TEST_REQUIRE ((load_configmodule(argc, const_cast<char **>(argv), 0) != NULL), "Configuration module init failed");
|
||||
BOOST_TEST(logInit() == 0, true);
|
||||
/*
|
||||
* Sanity check for some field of global structure of log API.
|
||||
* Expected: all components log to DEBUG level and have their own file sink
|
||||
*/
|
||||
BOOST_TEST (((g_log->global_logfile == 0) && (g_log->global_logfilep == NULL)), true);
|
||||
|
||||
for (int i=MIN_LOG_COMPONENTS; i < MAX_LOG_PREDEF_COMPONENTS; i++) {
|
||||
auto itr = std::find(known_bugged_comp.begin(), known_bugged_comp.end(), i);
|
||||
|
||||
if (itr != known_bugged_comp.end())
|
||||
continue;
|
||||
|
||||
bool sts = ((g_log->log_component[i].filelog == 1) &&
|
||||
(g_log->log_component[i].name != NULL) &&
|
||||
(g_log->log_component[i].stream != g_log->global_logfilep) &&
|
||||
(g_log->log_component[i].stream != NULL) &&
|
||||
(g_log->log_component[i].stream != stdout) &&
|
||||
(g_log->log_component[i].level == OAILOG_INFO));
|
||||
|
||||
if (sts == false) {
|
||||
std::cout << "Failure at this component:";
|
||||
log_comp_tostr(i);
|
||||
}
|
||||
|
||||
BOOST_TEST (sts, true);
|
||||
}
|
||||
|
||||
LOG_I(PHY, "test_log_discarded_options");
|
||||
BOOST_TEST(search_in_file(phy_logfile, "test_log_discarded_options") == true);
|
||||
BOOST_TEST(search_in_file(global_oai_logfile, "test_log_discarded_options") == false);
|
||||
logClean();
|
||||
logTerm();
|
||||
end_configmodule();
|
||||
std::remove(TMPLOCALCONF);
|
||||
}
|
||||
@@ -8,22 +8,19 @@
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/types.h>
|
||||
#include <signal.h>
|
||||
|
||||
#include "common/config/config_userapi.h"
|
||||
|
||||
#define QUIT(x) do { \
|
||||
printf("T tracer: QUIT: %s\n", x); \
|
||||
exit(1); \
|
||||
} while (0)
|
||||
|
||||
/* array used to activate/disactivate a log */
|
||||
static int T_IDs[T_NUMBER_OF_IDS];
|
||||
int *T_active = T_IDs;
|
||||
|
||||
int T_stdout = 1;
|
||||
|
||||
|
||||
static int T_socket;
|
||||
static int local_tracer_pid;
|
||||
|
||||
/* T_cache
|
||||
* - the T macro picks up the head of freelist and marks it busy
|
||||
@@ -33,63 +30,78 @@ volatile int _T_freelist_head;
|
||||
volatile int *T_freelist_head = &_T_freelist_head;
|
||||
T_cache_t *T_cache;
|
||||
|
||||
static void get_message(int s) {
|
||||
#define GET_MESSAGE_FAIL do { \
|
||||
printf("T tracer: get_message failed\n"); \
|
||||
return -1; \
|
||||
} while (0)
|
||||
|
||||
/* return -1 if error, 0 if no error */
|
||||
static int get_message(int s)
|
||||
{
|
||||
char t;
|
||||
int l;
|
||||
int id;
|
||||
int is_on;
|
||||
|
||||
if (read(s, &t, 1) != 1) QUIT("get_message fails");
|
||||
if (read(s, &t, 1) != 1) GET_MESSAGE_FAIL;
|
||||
|
||||
printf("T tracer: got mess %d\n", t);
|
||||
|
||||
switch (t) {
|
||||
case 0:
|
||||
|
||||
/* toggle all those IDs */
|
||||
/* optimze? (too much syscalls) */
|
||||
if (read(s, &l, sizeof(int)) != sizeof(int)) QUIT("get_message fails");
|
||||
if (read(s, &l, sizeof(int)) != sizeof(int)) GET_MESSAGE_FAIL;
|
||||
|
||||
while (l) {
|
||||
if (read(s, &id, sizeof(int)) != sizeof(int)) QUIT("get_message fails");
|
||||
if (read(s, &id, sizeof(int)) != sizeof(int)) GET_MESSAGE_FAIL;
|
||||
|
||||
T_IDs[id] = 1 - T_IDs[id];
|
||||
l--;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 1:
|
||||
|
||||
/* set IDs as given */
|
||||
/* optimize? */
|
||||
if (read(s, &l, sizeof(int)) != sizeof(int)) QUIT("get_message fails");
|
||||
if (read(s, &l, sizeof(int)) != sizeof(int)) GET_MESSAGE_FAIL;
|
||||
|
||||
id = 0;
|
||||
|
||||
while (l) {
|
||||
if (read(s, &is_on, sizeof(int)) != sizeof(int))
|
||||
QUIT("get_message fails");
|
||||
GET_MESSAGE_FAIL;
|
||||
|
||||
T_IDs[id] = is_on;
|
||||
id++;
|
||||
l--;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 2:
|
||||
break; /* do nothing, this message is to wait for local tracer */
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void *T_receive_thread(void *_) {
|
||||
while (1) get_message(T_socket);
|
||||
static void *T_receive_thread(void *_)
|
||||
{
|
||||
int err = 0;
|
||||
while (!err) err = get_message(T_socket);
|
||||
|
||||
printf("T tracer: fatal: T tracer disabled\n");
|
||||
|
||||
shutdown(T_socket, SHUT_RDWR);
|
||||
close(T_socket);
|
||||
kill(local_tracer_pid, SIGKILL);
|
||||
|
||||
/* disable all traces */
|
||||
memset(T_IDs, 0, sizeof(T_IDs));
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void new_thread(void *(*f)(void *), void *data) {
|
||||
static void new_thread(void *(*f)(void *), void *data)
|
||||
{
|
||||
pthread_t t;
|
||||
pthread_attr_t att;
|
||||
|
||||
@@ -118,27 +130,11 @@ static void new_thread(void *(*f)(void *), void *data) {
|
||||
void T_local_tracer_main(int remote_port, int wait_for_tracer,
|
||||
int local_socket, void *shm_array);
|
||||
|
||||
/* We monitor the tracee and the local tracer processes.
|
||||
* When one dies we forcefully kill the other.
|
||||
*/
|
||||
#include <sys/types.h>
|
||||
#include <sys/wait.h>
|
||||
static void monitor_and_kill(int child1, int child2) {
|
||||
int child;
|
||||
int status;
|
||||
child = wait(&status);
|
||||
|
||||
if (child == -1) perror("wait");
|
||||
|
||||
kill(child1, SIGKILL);
|
||||
kill(child2, SIGKILL);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
void T_init(int remote_port, int wait_for_tracer, int dont_fork) {
|
||||
void T_init(int remote_port, int wait_for_tracer)
|
||||
{
|
||||
int socket_pair[2];
|
||||
int s;
|
||||
int child1, child2;
|
||||
int child;
|
||||
int i;
|
||||
|
||||
if (socketpair(AF_UNIX, SOCK_STREAM, 0, socket_pair)) {
|
||||
@@ -162,47 +158,40 @@ void T_init(int remote_port, int wait_for_tracer, int dont_fork) {
|
||||
|
||||
for (i = 0; i < T_CACHE_SIZE; i++) T_cache[i].busy = 0;
|
||||
|
||||
/* child1 runs the local tracer and child2 (or main) runs the tracee */
|
||||
child1 = fork();
|
||||
/* child runs the local tracer and main runs the tracee */
|
||||
child = fork();
|
||||
|
||||
if (child1 == -1) abort();
|
||||
if (child == -1) abort();
|
||||
|
||||
if (child1 == 0) {
|
||||
if (child == 0) {
|
||||
close(socket_pair[1]);
|
||||
T_local_tracer_main(remote_port, wait_for_tracer, socket_pair[0],
|
||||
T_cache);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
local_tracer_pid = child;
|
||||
|
||||
close(socket_pair[0]);
|
||||
|
||||
if (dont_fork == 0) {
|
||||
child2 = fork();
|
||||
s = socket_pair[1];
|
||||
T_socket = s;
|
||||
|
||||
if (child2 == -1) abort();
|
||||
|
||||
if (child2 != 0) {
|
||||
close(socket_pair[1]);
|
||||
munmap(T_cache, T_CACHE_SIZE * sizeof(T_cache_t));
|
||||
monitor_and_kill(child1, child2);
|
||||
}
|
||||
/* wait for first message - initial list of active T events */
|
||||
if (get_message(s) == -1) {
|
||||
kill(local_tracer_pid, SIGKILL);
|
||||
return;
|
||||
}
|
||||
|
||||
s = socket_pair[1];
|
||||
/* wait for first message - initial list of active T events */
|
||||
get_message(s);
|
||||
T_socket = s;
|
||||
new_thread(T_receive_thread, NULL);
|
||||
}
|
||||
|
||||
void T_Config_Init(void) {
|
||||
int T_port=TTRACER_DEFAULT_PORTNUM; /* by default we wait for the tracer */
|
||||
int T_nowait=0; /* default port to listen to to wait for the tracer */
|
||||
int T_dont_fork=0; /* default is to fork, see 'T_init' to understand */
|
||||
void T_Config_Init(void)
|
||||
{
|
||||
int T_port = TTRACER_DEFAULT_PORTNUM;
|
||||
int T_nowait = 0;
|
||||
paramdef_t ttraceparams[] = CMDLINE_TTRACEPARAMS_DESC;
|
||||
/* for a cleaner config file, TTracer params should be defined in a
|
||||
* specific section...
|
||||
*/
|
||||
|
||||
config_get(ttraceparams,
|
||||
sizeof(ttraceparams) / sizeof(paramdef_t),
|
||||
TTRACER_CONFIG_PREFIX);
|
||||
@@ -217,5 +206,5 @@ void T_Config_Init(void) {
|
||||
}
|
||||
|
||||
if (T_stdout == 0 || T_stdout == 2)
|
||||
T_init(T_port, 1-T_nowait, T_dont_fork);
|
||||
T_init(T_port, 1-T_nowait);
|
||||
}
|
||||
|
||||
@@ -15,8 +15,8 @@
|
||||
#include "T_IDs.h"
|
||||
|
||||
#define T_ACTIVE_STDOUT 2
|
||||
/* known type - this is where you add new types */
|
||||
|
||||
/* known type - this is where you add new types */
|
||||
#define T_INT(x) int, (x)
|
||||
#define T_FLOAT(x) float, (x)
|
||||
#define T_BUFFER(x, len) buffer, ((T_buffer){addr:(x), length:(len)})
|
||||
@@ -111,6 +111,7 @@ typedef struct {
|
||||
extern volatile int *T_freelist_head;
|
||||
extern T_cache_t *T_cache;
|
||||
extern int *T_active;
|
||||
|
||||
#define T_GET_SLOT \
|
||||
T_LOCAL_busy = __sync_fetch_and_or(&T_cache[T_LOCAL_slot].busy, 0x01);
|
||||
|
||||
@@ -559,14 +560,12 @@ extern int *T_active;
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
|
||||
#define CONFIG_HLP_TPORT "tracer port\n"
|
||||
#define CONFIG_HLP_NOTWAIT "don't wait for tracer, start immediately\n"
|
||||
#define CONFIG_HLP_TNOFORK "to ease debugging with gdb\n"
|
||||
#define CONFIG_HLP_STDOUT "print log messges on console\n"
|
||||
|
||||
|
||||
#define TTRACER_CONFIG_PREFIX "TTracer"
|
||||
|
||||
/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||
/* configuration parameters for TTRACE utility */
|
||||
/* optname helpstr paramflags XXXptr defXXXval type numelt */
|
||||
@@ -575,15 +574,12 @@ extern int *T_active;
|
||||
#define CMDLINE_TTRACEPARAMS_DESC { \
|
||||
{"T_port", CONFIG_HLP_TPORT, 0, iptr:&T_port, defintval:TTRACER_DEFAULT_PORTNUM, TYPE_INT, 0},\
|
||||
{"T_nowait", CONFIG_HLP_NOTWAIT, PARAMFLAG_BOOL, iptr:&T_nowait, defintval:0, TYPE_INT, 0},\
|
||||
{"T_dont_fork", CONFIG_HLP_TNOFORK, PARAMFLAG_BOOL, iptr:&T_dont_fork, defintval:0, TYPE_INT, 0},\
|
||||
{"T_stdout", CONFIG_HLP_STDOUT, 0, iptr:&T_stdout, defintval:1, TYPE_INT, 0},\
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* log on stdout */
|
||||
void T_init(int remote_port, int wait_for_tracer, int dont_fork);
|
||||
void T_init(int remote_port, int wait_for_tracer);
|
||||
void T_Config_Init(void);
|
||||
|
||||
#else /* T_TRACER */
|
||||
|
||||
/* if T_TRACER is not defined or is 0, the T is deactivated */
|
||||
|
||||
71
common/utils/collection/linear_alloc.h
Normal file
71
common/utils/collection/linear_alloc.h
Normal file
@@ -0,0 +1,71 @@
|
||||
/*
|
||||
* 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 LINEAR_ALLOC_H
|
||||
#define LINEAR_ALLOC_H
|
||||
|
||||
#include <limits.h>
|
||||
|
||||
typedef unsigned int uid_t;
|
||||
#define UID_LINEAR_ALLOCATOR_SIZE 1024
|
||||
#define UID_LINEAR_ALLOCATOR_BITMAP_SIZE (((UID_LINEAR_ALLOCATOR_SIZE/8)/sizeof(unsigned int)) + 1)
|
||||
typedef struct uid_linear_allocator_s {
|
||||
unsigned int bitmap[UID_LINEAR_ALLOCATOR_BITMAP_SIZE];
|
||||
} uid_allocator_t;
|
||||
|
||||
static inline void uid_linear_allocator_init(uid_allocator_t *uia) {
|
||||
memset(uia, 0, sizeof(uid_allocator_t));
|
||||
}
|
||||
|
||||
static inline uid_t uid_linear_allocator_new(uid_allocator_t *uia) {
|
||||
unsigned int bit_index = 1;
|
||||
uid_t uid = 0;
|
||||
|
||||
for (unsigned int i = 0; i < UID_LINEAR_ALLOCATOR_BITMAP_SIZE; i++) {
|
||||
if (uia->bitmap[i] != UINT_MAX) {
|
||||
bit_index = 1;
|
||||
uid = 0;
|
||||
|
||||
while ((uia->bitmap[i] & bit_index) == bit_index) {
|
||||
bit_index = bit_index << 1;
|
||||
uid += 1;
|
||||
}
|
||||
|
||||
uia->bitmap[i] |= bit_index;
|
||||
return uid + (i*sizeof(unsigned int)*8);
|
||||
}
|
||||
}
|
||||
|
||||
return UINT_MAX;
|
||||
}
|
||||
|
||||
|
||||
static inline void uid_linear_allocator_free(uid_allocator_t *uia, uid_t uid) {
|
||||
const unsigned int i = uid/sizeof(unsigned int)/8;
|
||||
const unsigned int bit = uid % (sizeof(unsigned int) * 8);
|
||||
const unsigned int value = ~(1 << bit);
|
||||
|
||||
if (i < UID_LINEAR_ALLOCATOR_BITMAP_SIZE) {
|
||||
uia->bitmap[i] &= value;
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* LINEAR_ALLOC_H */
|
||||
56
common/utils/config.h
Normal file
56
common/utils/config.h
Normal file
@@ -0,0 +1,56 @@
|
||||
/*
|
||||
* 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 UTILS_CONFIG_H_ASN1
|
||||
#define UTILS_CONFIG_H_ASN1
|
||||
|
||||
// This is hard coded file name "config.h" and HAVE_CONFIG_H_ in asn1c skeletons
|
||||
|
||||
/*
|
||||
* This file "config.h" will be used by asn1c if HAVE_CONFIG_H_ is defined and
|
||||
* included. This logs asn1c encoder and decoder traces at execution time using
|
||||
* the regular OAI logging system, i.e., LOG_I(ASN...);
|
||||
*
|
||||
* As it is very verbose, note that you can change the log level per module in
|
||||
* source or in gdb, e.g., to only activate it for a short time.
|
||||
*
|
||||
* In code:
|
||||
* ```
|
||||
* set_log(ASN, OAI_INFO); // enable logging
|
||||
* // do your encoding here
|
||||
* set_log(ASN, OAI_ERR); // disable logging
|
||||
* ```
|
||||
*
|
||||
* in gdb:
|
||||
* ```
|
||||
* gdb> p set_log(ASN, 1) // disable log, 1 == OAI_ERR
|
||||
* gdb> p set_log(ASN, 5) // enable log, 5 == OAI_INFO
|
||||
* ```
|
||||
*/
|
||||
|
||||
#include "common/utils/LOG/log.h"
|
||||
#if DEBUG_ASN1C
|
||||
#define ASN_DEBUG(x...) do{ LOG_I(ASN,x);LOG_I(ASN,"\n"); } while(false)
|
||||
#else
|
||||
#define ASN_DEBUG(x...)
|
||||
#endif
|
||||
|
||||
#endif /* UTILS_CONFIG_H_ASN1 */
|
||||
319
common/utils/cpustats.c
Normal file
319
common/utils/cpustats.c
Normal file
@@ -0,0 +1,319 @@
|
||||
/*
|
||||
* 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
|
||||
*/
|
||||
/*
|
||||
* This file implements the cpu statistics for Level 1 in gnb and in UE.
|
||||
* Caveats: Note that we did not merge this development into file telnetsrv_gnb_measurements.c and telnetsrv_5Gue_measurements.c
|
||||
* belonging to telnetsrv shared library because we needed to provide an API for main programs exectuable without inserting a new
|
||||
* dependency on the telnetsrv shared library.
|
||||
*/
|
||||
#define _GNU_SOURCE
|
||||
#include <pthread.h>
|
||||
#include <stdbool.h>
|
||||
#include <errno.h>
|
||||
#include <linux/sched.h>
|
||||
|
||||
#include "common/utils/LOG/log.h"
|
||||
#include "common/utils/threadPool/thread-pool.h"
|
||||
#include "cpustats.h"
|
||||
#include "common/utils/time_meas.h"
|
||||
|
||||
#define UEL1_THREADNAME "L1_UE_stats_act"
|
||||
#define GNBL1_THREADNAME "L1_stats_act"
|
||||
|
||||
/* ==== Global variables ==== */
|
||||
|
||||
// IPC communication between main thread and the statistics one
|
||||
static notifiedFIFO_t GNBL1cpustats_fifo, UEL1cpustats_fifo;
|
||||
|
||||
static pthread_t UEL1cpustats_threadid = 0;
|
||||
static pthread_t gNBL1cpustats_threadid = 0;
|
||||
|
||||
// data structure for communication between main thread and the statistics one
|
||||
typedef struct {
|
||||
unsigned int msgid;
|
||||
telnet_printfunc_t prnt;
|
||||
} proto_stats_msg_t;
|
||||
|
||||
// PHY_vars_UE_g: declared in openair1/PHY/phy_vars_nr_ue.h and defined in nr-uesoftmodem.c
|
||||
extern PHY_VARS_NR_UE *** PHY_vars_UE_g;
|
||||
|
||||
/* ==== Static functions ==== */
|
||||
|
||||
/* return pointer to the global structure that contains the UE data including statistics*/
|
||||
static PHY_VARS_NR_UE * getglobal_uephy(void) { return PHY_vars_UE_g[0][0]; }
|
||||
|
||||
// RC.nb_nr_macrlc_inst in openair2/LAYER2/NR_MAC_gNB/main.c defines the RAN_CONTEXT RC variable that defines how many instances you will have
|
||||
// ru stands for 'radio unit' data structure
|
||||
static RU_t *getglobal_ru(void) { return RC.ru[0];}
|
||||
static void UEL1cpustats_display(telnet_printfunc_t prnt);
|
||||
static void UEL1cpustats_thread_main(void);
|
||||
static void gNBL1cpustats_display(telnet_printfunc_t prnt, PHY_VARS_gNB *param);
|
||||
static void gNBL1cpustats_thread_main (void * param);
|
||||
|
||||
/* xxx: these are the same statistics but with different formatting and list of content of those displayed by
|
||||
* telnetsrv_measurements.c:measurcmd_display_cpumeasures(). you could think about unifying the 2 functions.
|
||||
* XXX: this implementation should be fixed using a dynamically allocated buffer instead of a plain one
|
||||
* it is prone to sigSEGV
|
||||
*/
|
||||
static void
|
||||
UEL1cpustats_display(telnet_printfunc_t prnt)
|
||||
{
|
||||
/* PHY_vars_UE_g:
|
||||
* this global variable is allocated by nr-uesoftmodem.c and shared among threads makes the trick of passing statistics data to statistic thread
|
||||
* that will consume it. There is just one instance of UE created in nr-ue.c
|
||||
*/
|
||||
PHY_VARS_NR_UE *ue = getglobal_uephy();
|
||||
|
||||
prnt("Display CPU statistics for UE Level 1\n");
|
||||
|
||||
char output[TELNET_MAX_MSGLENGTH];
|
||||
int stroff = 0;
|
||||
stroff += print_meas_log(&ue->phy_proc_tx , "L1 TX processing" , NULL, NULL, output , TELNET_MAX_MSGLENGTH - stroff);
|
||||
stroff += print_meas_log(&ue->ulsch_encoding_stats , "ULSCH encoding" , NULL, NULL, output + stroff, TELNET_MAX_MSGLENGTH - stroff );
|
||||
stroff += print_meas_log(&ue->phy_proc_rx[0] , "L1 RX processing t0" , NULL, NULL, output + stroff, TELNET_MAX_MSGLENGTH - stroff);
|
||||
stroff += print_meas_log(&ue->phy_proc_rx[1] , "L1 RX processing t1" , NULL, NULL, output + stroff, TELNET_MAX_MSGLENGTH - stroff);
|
||||
stroff += print_meas_log(&ue->ue_ul_indication_stats , "UL Indication" , NULL, NULL, output + stroff, TELNET_MAX_MSGLENGTH - stroff);
|
||||
stroff += print_meas_log(&ue->rx_pdsch_stats , "PDSCH receiver" , NULL, NULL, output + stroff, TELNET_MAX_MSGLENGTH - stroff);
|
||||
stroff += print_meas_log(&ue->dlsch_decoding_stats[0] , "PDSCH decoding t0" , NULL, NULL, output + stroff, TELNET_MAX_MSGLENGTH - stroff);
|
||||
stroff += print_meas_log(&ue->dlsch_decoding_stats[1] , "PDSCH decoding t1" , NULL, NULL, output + stroff, TELNET_MAX_MSGLENGTH - stroff);
|
||||
stroff += print_meas_log(&ue->dlsch_deinterleaving_stats , " -> Deinterleive" , NULL, NULL, output + stroff, TELNET_MAX_MSGLENGTH - stroff);
|
||||
stroff += print_meas_log(&ue->dlsch_rate_unmatching_stats , " -> Rate Unmatch" , NULL, NULL, output + stroff, TELNET_MAX_MSGLENGTH - stroff);
|
||||
stroff += print_meas_log(&ue->dlsch_ldpc_decoding_stats , " -> LDPC Decode" , NULL, NULL, output + stroff, TELNET_MAX_MSGLENGTH - stroff);
|
||||
stroff += print_meas_log(&ue->dlsch_unscrambling_stats , "PDSCH unscrambling" , NULL, NULL, output + stroff, TELNET_MAX_MSGLENGTH - stroff);
|
||||
stroff += print_meas_log(&ue->dlsch_rx_pdcch_stats , "PDCCH handling" , NULL, NULL, output + stroff, TELNET_MAX_MSGLENGTH - stroff);
|
||||
|
||||
prnt("%s\n", output);
|
||||
}
|
||||
|
||||
static void
|
||||
UEL1cpustats_thread_main(void)
|
||||
{
|
||||
if (pthread_setname_np(pthread_self(), UEL1_THREADNAME))
|
||||
LOG_E(UTIL, "Error setting name on thread %s: %s\n", UEL1_THREADNAME, strerror(errno));
|
||||
|
||||
struct sched_param schedp;
|
||||
schedp.sched_priority = SCHED_NORMAL;
|
||||
if (pthread_setschedparam(pthread_self(), SCHED_IDLE, &schedp))
|
||||
LOG_E(UTIL, "Error setting priority in thread %s: %s\n", UEL1_THREADNAME, strerror(errno));
|
||||
|
||||
initNotifiedFIFO(&UEL1cpustats_fifo);
|
||||
|
||||
cpumeas(CPUMEAS_ENABLE);
|
||||
|
||||
while (1){
|
||||
/*
|
||||
* Infinite loop that waits for a message on the FIFO.
|
||||
* Behind the scenes it uses blocking pthread.h:pthread_cond_wait()
|
||||
*/
|
||||
notifiedFIFO_elt_t *msg = pullNotifiedFIFO(&UEL1cpustats_fifo);
|
||||
|
||||
proto_stats_msg_t *tsm = (proto_stats_msg_t *)NotifiedFifoData(msg);
|
||||
switch (tsm->msgid)
|
||||
{
|
||||
case TIMESTAT_MSGID_DISPLAY:
|
||||
|
||||
if (cpumeas(CPUMEAS_GETSTATE))
|
||||
UEL1cpustats_display(tsm->prnt);
|
||||
else
|
||||
tsm->prnt("ERR: before displaying meaningful stats, you need to activate their generation\n");
|
||||
break;
|
||||
case TIMESTAT_MSGID_DISABLE:
|
||||
cpumeas(CPUMEAS_DISABLE);
|
||||
UEL1cpustats_threadid = 0;
|
||||
pthread_exit(NULL);
|
||||
break;
|
||||
}
|
||||
delNotifiedFIFO_elt(msg);
|
||||
}
|
||||
LOG_I(UTIL, "Exiting thread %s\n", UEL1_THREADNAME);
|
||||
}
|
||||
|
||||
bool
|
||||
UEL1cpustats_enable(void)
|
||||
{
|
||||
if (UEL1cpustats_threadid){
|
||||
LOG_E(UTIL, "Thread '%s' is already running. Aborting your request to create a new one\n", UEL1_THREADNAME);
|
||||
return false;
|
||||
}
|
||||
|
||||
int rt = pthread_create(&UEL1cpustats_threadid, NULL, (void *(*)(void *))UEL1cpustats_thread_main, NULL);
|
||||
if (rt != 0)
|
||||
LOG_E(UTIL, "Error creating thread %s: %s\n",UEL1_THREADNAME, strerror(errno));
|
||||
|
||||
return (rt != 0) ? false : true;
|
||||
}
|
||||
|
||||
void
|
||||
UEL1cpustats_disable(void)
|
||||
{
|
||||
if (!UEL1cpustats_threadid) {
|
||||
LOG_W(UTIL, "Thread '%s' is not running. Discarding your request to disable stats\n", UEL1_THREADNAME);
|
||||
return;
|
||||
}
|
||||
|
||||
notifiedFIFO_elt_t *nfe = newNotifiedFIFO_elt(sizeof(time_stats_msg_t), 0, NULL, NULL);
|
||||
proto_stats_msg_t *msg = (proto_stats_msg_t *)NotifiedFifoData(nfe);
|
||||
msg->msgid = TIMESTAT_MSGID_DISABLE;
|
||||
pushNotifiedFIFO(&UEL1cpustats_fifo, nfe);
|
||||
}
|
||||
|
||||
void
|
||||
UEL1cpustats_measurcmd_display (telnet_printfunc_t prnt)
|
||||
{
|
||||
if (!UEL1cpustats_threadid) {
|
||||
prnt("Thread '%s' is not running. Aborting your request to display stats, you need first to enable statistics\n", UEL1_THREADNAME);
|
||||
return;
|
||||
}
|
||||
|
||||
notifiedFIFO_elt_t *nfe = newNotifiedFIFO_elt(sizeof(time_stats_msg_t), 0, NULL, NULL);
|
||||
proto_stats_msg_t *msg = (proto_stats_msg_t *)NotifiedFifoData(nfe);
|
||||
msg->prnt = prnt;
|
||||
msg->msgid = TIMESTAT_MSGID_DISPLAY;
|
||||
pushNotifiedFIFO(&UEL1cpustats_fifo, nfe);
|
||||
}
|
||||
|
||||
/* Display info from specific instance of gNB and from radio unit */
|
||||
static void
|
||||
gNBL1cpustats_display(telnet_printfunc_t prnt, PHY_VARS_gNB *gNB)
|
||||
{
|
||||
RU_t *ru = getglobal_ru();
|
||||
|
||||
char output[TELNET_MAX_MSGLENGTH];
|
||||
int stroff = 0;
|
||||
prnt("%s\n");
|
||||
// XXX: header will be printed automatically by print_meas_log() just the first time it is called in the program. It means that if you
|
||||
// use a mechanism like 'loop measur show gnb_L1', you will lose the header after the first iteration.
|
||||
// You should fix the logic of 'print_meas_log() to avoid it printing any header.
|
||||
stroff += print_meas_log(&gNB->phy_proc_tx , "L1 Tx processing" , NULL, NULL, output , TELNET_MAX_MSGLENGTH - stroff);
|
||||
stroff += print_meas_log(&gNB->dlsch_encoding_stats , "DLSCH encoding" , NULL, NULL, output+stroff, TELNET_MAX_MSGLENGTH - stroff);
|
||||
stroff += print_meas_log(&gNB->phy_proc_rx , "L1 Rx processing" , NULL, NULL, output+stroff, TELNET_MAX_MSGLENGTH - stroff);
|
||||
stroff += print_meas_log(&gNB->ul_indication_stats , "UL Indication" , NULL, NULL, output+stroff, TELNET_MAX_MSGLENGTH - stroff);
|
||||
stroff += print_meas_log(&gNB->rx_pusch_stats , "PUSCH inner-receiver", NULL, NULL, output+stroff, TELNET_MAX_MSGLENGTH - stroff);
|
||||
stroff += print_meas_log(&gNB->ulsch_decoding_stats , "PUSCH decoding" , NULL, NULL, output+stroff, TELNET_MAX_MSGLENGTH - stroff);
|
||||
stroff += print_meas_log(&gNB->schedule_response_stats, "Schedule Response" , NULL, NULL, output+stroff, TELNET_MAX_MSGLENGTH - stroff);
|
||||
if (ru->feprx)
|
||||
stroff += print_meas_log(&ru->ofdm_demod_stats , "feprx" , NULL, NULL, output+stroff, TELNET_MAX_MSGLENGTH - stroff);
|
||||
|
||||
if (ru->feptx_ofdm) {
|
||||
stroff += print_meas_log(&ru->precoding_stats , "feptx_prec" , NULL, NULL, output+stroff, TELNET_MAX_MSGLENGTH - stroff);
|
||||
stroff += print_meas_log(&ru->txdataF_copy_stats , "txdataF_copy" , NULL, NULL, output+stroff, TELNET_MAX_MSGLENGTH - stroff);
|
||||
stroff += print_meas_log(&ru->ofdm_mod_stats , "feptx_ofdm" , NULL, NULL, output+stroff, TELNET_MAX_MSGLENGTH - stroff);
|
||||
stroff += print_meas_log(&ru->ofdm_total_stats , "feptx_total" , NULL, NULL, output+stroff, TELNET_MAX_MSGLENGTH - stroff);
|
||||
}
|
||||
|
||||
if (ru->fh_north_asynch_in)
|
||||
stroff += print_meas_log(&ru->rx_fhaul , "rx_fhaul" , NULL, NULL, output+stroff, TELNET_MAX_MSGLENGTH - stroff);
|
||||
|
||||
stroff += print_meas_log(&ru->tx_fhaul , "tx_fhaul" , NULL, NULL, output+stroff, TELNET_MAX_MSGLENGTH - stroff);
|
||||
|
||||
if (ru->fh_north_out) {
|
||||
stroff += print_meas_log(&ru->compression , "compression" , NULL, NULL, output+stroff, TELNET_MAX_MSGLENGTH - stroff);
|
||||
stroff += print_meas_log(&ru->transport , "transport" , NULL, NULL, output+stroff, TELNET_MAX_MSGLENGTH - stroff);
|
||||
}
|
||||
|
||||
prnt("%s\n", output);
|
||||
}
|
||||
|
||||
static void
|
||||
gNBL1cpustats_thread_main(void * param)
|
||||
{
|
||||
if (pthread_setname_np(pthread_self(), GNBL1_THREADNAME))
|
||||
LOG_E(UTIL, "Error setting name on thread %s: %s\n", GNBL1_THREADNAME, strerror(errno));
|
||||
|
||||
struct sched_param schedp;
|
||||
schedp.sched_priority = SCHED_NORMAL;
|
||||
if (pthread_setschedparam(pthread_self(), SCHED_IDLE, &schedp))
|
||||
LOG_E(UTIL, "Error setting priority in thread %s: %s\n", GNBL1_THREADNAME, strerror(errno));
|
||||
|
||||
initNotifiedFIFO(&GNBL1cpustats_fifo);
|
||||
|
||||
cpumeas(CPUMEAS_ENABLE);
|
||||
|
||||
while (1){
|
||||
/*
|
||||
* Infinite loop that waits for a message on the FIFO.
|
||||
* Behind the scenes it uses blocking pthread.h:pthread_cond_wait()
|
||||
*/
|
||||
notifiedFIFO_elt_t *msg = pullNotifiedFIFO(&GNBL1cpustats_fifo);
|
||||
|
||||
proto_stats_msg_t *tsm = (proto_stats_msg_t *)NotifiedFifoData(msg);
|
||||
switch (tsm->msgid)
|
||||
{
|
||||
case TIMESTAT_MSGID_DISPLAY:
|
||||
if (cpumeas(CPUMEAS_GETSTATE))
|
||||
gNBL1cpustats_display(tsm->prnt, (PHY_VARS_gNB *)param);
|
||||
else
|
||||
tsm->prnt("ERR: before displaying meaningful stats, you need to activate their generation\n");
|
||||
break;
|
||||
case TIMESTAT_MSGID_DISABLE:
|
||||
cpumeas(CPUMEAS_DISABLE);
|
||||
gNBL1cpustats_threadid = 0;
|
||||
pthread_exit(NULL);
|
||||
break;
|
||||
}
|
||||
delNotifiedFIFO_elt(msg);
|
||||
}
|
||||
LOG_I(UTIL, "Exiting thread '%s'\n", GNBL1_THREADNAME);
|
||||
}
|
||||
|
||||
void
|
||||
gNBL1cpustats_measurcmd_display (telnet_printfunc_t prnt)
|
||||
{
|
||||
if (!gNBL1cpustats_threadid) {
|
||||
prnt("gNB thread %s is not running. Aborting your request to display stats as you need first to enable statistics\n", GNBL1_THREADNAME);
|
||||
return;
|
||||
}
|
||||
|
||||
notifiedFIFO_elt_t *nfe = newNotifiedFIFO_elt(sizeof(time_stats_msg_t), 0, NULL, NULL);
|
||||
proto_stats_msg_t *msg = (proto_stats_msg_t *)NotifiedFifoData(nfe);
|
||||
msg->prnt = prnt;
|
||||
msg->msgid = TIMESTAT_MSGID_DISPLAY;
|
||||
pushNotifiedFIFO(&GNBL1cpustats_fifo, nfe);
|
||||
}
|
||||
|
||||
bool
|
||||
gNBL1cpustats_enable(PHY_VARS_gNB *gNB)
|
||||
{
|
||||
if (gNBL1cpustats_threadid) {
|
||||
LOG_E(UTIL, "Thread '%s' already running, aborting your request to create a new one\n", GNBL1_THREADNAME);
|
||||
return false;
|
||||
}
|
||||
|
||||
int rt = pthread_create(&gNBL1cpustats_threadid, NULL, (void *(*)(void *))gNBL1cpustats_thread_main, gNB);
|
||||
if (rt != 0)
|
||||
LOG_E(UTIL, "Error creating thread '%s': %s\n", GNBL1_THREADNAME, strerror(errno));
|
||||
|
||||
return (rt != 0) ? false : true;
|
||||
}
|
||||
|
||||
void
|
||||
gNBL1cpustats_disable(void)
|
||||
{
|
||||
if (!gNBL1cpustats_threadid) {
|
||||
LOG_W(UTIL, "Thread '%s' is not running. Discarding your request to disable stats\n", GNBL1_THREADNAME);
|
||||
return;
|
||||
}
|
||||
|
||||
notifiedFIFO_elt_t *nfe = newNotifiedFIFO_elt(sizeof(time_stats_msg_t), 0, NULL, NULL);
|
||||
proto_stats_msg_t *msg = (proto_stats_msg_t *)NotifiedFifoData(nfe);
|
||||
msg->msgid = TIMESTAT_MSGID_DISABLE;
|
||||
pushNotifiedFIFO(&GNBL1cpustats_fifo, nfe);
|
||||
}
|
||||
20
common/utils/cpustats.h
Normal file
20
common/utils/cpustats.h
Normal file
@@ -0,0 +1,20 @@
|
||||
#ifndef _CPUSTATS_H
|
||||
#define _CPUSTATS_H
|
||||
/*
|
||||
* Activation, deactivation and printing functionalities of cpu statistics for UE and gNB Level 1/PHY indicators
|
||||
*/
|
||||
#include "common/utils/telnetsrv/telnetsrv.h"
|
||||
#include "openair1/PHY/defs_nr_UE.h"
|
||||
#include "openair1/PHY/defs_gNB.h"
|
||||
|
||||
#define UE_STATS_L1 "phycpunew"
|
||||
void UEL1cpustats_measurcmd_display(telnet_printfunc_t prnt);
|
||||
bool UEL1cpustats_enable(void);
|
||||
void UEL1cpustats_disable(void);
|
||||
|
||||
#define GNB_STATS_L1 "gnb_L1"
|
||||
bool gNBL1cpustats_enable(PHY_VARS_gNB *gNB);
|
||||
void gNBL1cpustats_disable(void);
|
||||
void gNBL1cpustats_measurcmd_display (telnet_printfunc_t prnt);
|
||||
|
||||
#endif
|
||||
@@ -281,5 +281,9 @@ void loader_reset()
|
||||
shlib->numfunc = 0;
|
||||
shlib->len_funcarray = 0;
|
||||
}
|
||||
if(loader_data.shlibpath){
|
||||
free(loader_data.shlibpath);
|
||||
loader_data.shlibpath=NULL;
|
||||
}
|
||||
free(loader_data.shlibs);
|
||||
}
|
||||
|
||||
@@ -51,11 +51,11 @@ typedef struct {
|
||||
}loader_shlibdesc_t;
|
||||
|
||||
typedef struct {
|
||||
char *mainexec_buildversion;
|
||||
char *shlibpath;
|
||||
uint32_t maxshlibs;
|
||||
uint32_t numshlibs;
|
||||
loader_shlibdesc_t *shlibs;
|
||||
char *mainexec_buildversion;
|
||||
char *shlibpath;
|
||||
uint32_t maxshlibs;
|
||||
uint32_t numshlibs;
|
||||
loader_shlibdesc_t *shlibs;
|
||||
}loader_data_t;
|
||||
|
||||
/* function type of functions which may be implemented by a module */
|
||||
@@ -79,8 +79,8 @@ loader_data_t loader_data;
|
||||
/* optname helpstr paramflags XXXptr defXXXval type numelt check func*/
|
||||
/*----------------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||
#define LOADER_PARAMS_DESC { \
|
||||
{"shlibpath", NULL, PARAMFLAG_NOFREE, strptr:(char **)&(loader_data.shlibpath), defstrval:DEFAULT_PATH, TYPE_STRING, 0, NULL},\
|
||||
{"maxshlibs", NULL, 0, uptr:&(loader_data.maxshlibs), defintval:DEFAULT_MAXSHLIBS, TYPE_UINT32, 0, NULL}\
|
||||
{"shlibpath", NULL, PARAMFLAG_NOFREE, strptr:&loader_data.shlibpath, defstrval:DEFAULT_PATH, TYPE_STRING, 0, NULL},\
|
||||
{"maxshlibs", NULL, 0, uptr:&(loader_data.maxshlibs),defintval:DEFAULT_MAXSHLIBS, TYPE_UINT32, 0, NULL}\
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user