Closed ghost closed 2 years ago
I have no issue with setting a single pduSessionId
, nor with setting 256 of them:
In [1]: from pycrate_asn1dir.XnAP import *
In [2]: P = XnAP_PDU_Descriptions.XnAP_PDU
In [3]: a=('successfulOutcome', {'procedureCode': 10, 'criticality': 'reject', 'value': ('SNodeModificationConfirm', {'protocolIEs': [{'id': 35, 'criticality': 'ignore', 'value': ('PDUSessionAdmittedModSNModConfirm', [{'pduSessionId': 1}])}]})})
In [4]: P.set_val(a)
In [5]: print(P.to_asn1())
successfulOutcome : {
procedureCode 10,
criticality reject,
value SNodeModificationConfirm: {
protocolIEs {
{
id 35,
criticality ignore,
value PDUSessionAdmittedModSNModConfirm: {
{
pduSessionId 1
}
}
}
}
}
}
In [6]: P.to_aper()
Out[6]: b' \n\x00\n\x00\x00\x01\x00#@\x03\x00\x00\x01'
In [7]: a=('successfulOutcome', {'procedureCode': 10, 'criticality': 'reject', 'value': ('SNodeModificationConfirm', {'protocolIEs': [{'id': 35, 'criticality': 'ignore', 'value': ('PDUSessionAdmittedModSNModConfirm', [{'pduSessionId': 1}]*256)}]})})
In [8]: P.set_val(a)
In [9]: print(P.to_asn1())
successfulOutcome : {
procedureCode 10,
criticality reject,
value SNodeModificationConfirm: {
protocolIEs {
{
id 35,
criticality ignore,
value PDUSessionAdmittedModSNModConfirm: {
{
pduSessionId 1
},
{
pduSessionId 1
},
[...]
{
pduSessionId 1
}
}
}
}
}
}
In [10]: P.to_aper()
Out[10]: b' \n\x00\x82\t\x00\x00\x01\x00#@\x82\x01\xff\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01'
Actually, I fail to understand exactly where you have an issue.
I was using pycrate v0.5.2 upgraded to v0.5.3. With a full uninstall and install of 0.5.3, the issue is no more present.
This issue is present with v0.5.2. And also v0.5.2 installed by "pip install pycrate"+upgrade with v0.5.3 downloaded from github and installed with "python3 setup.py install"
Sorry, but I don't understand what is the exact issue you are talking about, as I can't reproduce it. Please provide all the required info, as introduced here: https://github.com/P1sec/pycrate#filling-an-issue
Can you confirm that you can reproduce the issue with pycrate v0.5.2 and the 4 lines of code defined above ? Is there a difference of installing pycrate with "pip install pycrate" versus git clone+"python3 setup.py install"
What 4 lines of code above ?? Yours ? Mine ? Come on, please, be rigorous on what you ask and want me to test.
Mine 4 lines are working fine, whatever pycrate's version. Yours are:
import pycrate_asn1dir.XnAP
enc=pycrate_asn1dir.XnAP.XnAP_PDU_Descriptions.XnAP_PDU
a="('successfulOutcome', {'procedureCode': 10, 'criticality': 'reject', 'value': ('SNodeModificationConfirm', {'protocolIEs': [{'id': 35, 'criticality': 'ignore', 'value': ('PDUSessionAdmittedModSNModConfirm', [{'pduSessionId': 1}])}]})})"
enc.set_val(a)
And there is an obvious issue as the value you write in a
is just a string and not any structured value.
My environment in a Dockerfile named XnAP_pycrate052_test.dockerfile:
FROM python:3
RUN pip3 install pycrate==0.5.2
RUN echo "#! /usr/bin/env python3\n\
from pycrate_asn1dir.XnAP import *\n\
P = XnAP_PDU_Descriptions.XnAP_PDU\n\
a=('successfulOutcome', {'procedureCode': 10, 'criticality': 'reject', 'value': ('SNodeModificationConfirm', {'protocolIEs': [{'id': 35, 'criticality': 'ignore', 'value': ('PDUSessionAdmittedModSNModConfirm', [{'pduSessionId': 1}])}]})})\n\
P.set_val(a)\n\
print(P.to_asn1())\n"\
> /xnap.py
RUN chmod u+x /xnap.py
ENTRYPOINT ["/xnap.py"]
To execute the container :
$ docker --config . build -t xnap52 -f XnAP_pycrate052_test.dockerfile .
$ docker run -it xnap52
Traceback (most recent call last):
File "/xnap.py", line 5, in <module>
P.set_val(a)
File "/usr/local/lib/python3.10/site-packages/pycrate_asn1rt/asnobj.py", line 1189, in set_val
self._safechk_bnd(self._val)
File "/usr/local/lib/python3.10/site-packages/pycrate_asn1rt/asnobj_construct.py", line 92, in _safechk_bnd
self._cont[val[0]]._safechk_bnd(val[1])
File "/usr/local/lib/python3.10/site-packages/pycrate_asn1rt/asnobj_construct.py", line 774, in _safechk_bnd
Obj._safechk_bnd(Obj._val)
File "/usr/local/lib/python3.10/site-packages/pycrate_asn1rt/asnobj_ext.py", line 184, in _safechk_bnd
self._get_val_obj(val[0])._safechk_bnd(val[1])
File "/usr/local/lib/python3.10/site-packages/pycrate_asn1rt/asnobj_construct.py", line 774, in _safechk_bnd
Obj._safechk_bnd(Obj._val)
File "/usr/local/lib/python3.10/site-packages/pycrate_asn1rt/asnobj_construct.py", line 2645, in _safechk_bnd
self._cont._safechk_bnd(v)
File "/usr/local/lib/python3.10/site-packages/pycrate_asn1rt/asnobj_construct.py", line 774, in _safechk_bnd
Obj._safechk_bnd(Obj._val)
File "/usr/local/lib/python3.10/site-packages/pycrate_asn1rt/asnobj_ext.py", line 184, in _safechk_bnd
self._get_val_obj(val[0])._safechk_bnd(val[1])
File "/usr/local/lib/python3.10/site-packages/pycrate_asn1rt/asnobj_construct.py", line 2642, in _safechk_bnd
raise(ASN1ObjErr('{0}: value out of size constraint, {1!r}'\
pycrate_asn1rt.err.ASN1ObjErr: Value: value out of size constraint, [{'pduSessionId': 1}]
OK, I could reproduce the issue. This corresponds to an issue in the XnAP ASN.1 definition used in pycrate 0.5.2, extracted from TS 38.412 version f60 (released in 2020-01-15): https://github.com/P1sec/pycrate/blob/2e55ac324d318a1e183ac2d2b91028fecd847798/pycrate_asn1dir/3GPP_NR_XnAP_38423/XnAP-PDU-Contents.asn#L1022
The SEQUENCE OF object has a fixed length, instead of a SEQUENCE (SIZE(1..maxnoofPDUSessions)) OF
; this has been fixed in more recent 3GPP specification.
I updated all the RAN ASN.1 definitions back in September: https://github.com/P1sec/pycrate/commit/839291c8e83719bbd607542273d41eb920a2911b, and tagged a 0.5.3 version of pycrate, what solved your issue.
Thanks
I got an Error "out of size constraint" when I create a XnAP PDU, like this :
But, if the value of the payload has exactly 256 times {'pduSessionId': 1}, there is no error.
a=('successfulOutcome', {'procedureCode': 10, 'criticality': 'reject', 'value': ('SNodeModificationConfirm', {'protocolIEs': [{'id': 35, 'criticality': 'ignore', 'value': ('PDUSessionAdmittedModSNModConfirm', [{'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}, {'pduSessionId': 1}])}]})})
The ASN1 description for this payload is : id-PDUSessionAdmittedModSNModConfirm ProtocolIE-ID ::= 35 PDUSessionAdmittedModSNModConfirm ::= SEQUENCE (SIZE(1..maxnoofPDUSessions)) OF PDUSessionAdmittedModSNModConfirm-Item maxnoofPDUSessions INTEGER ::= 256
Normally a sequence between 1 to 256, should be accepted.
Detailed information for debugging :
Traceback (most recent call last): File "", line 1, in
File "/usr/local/lib/python3.8/dist-packages/pycrate_asn1rt/asnobj.py", line 1189, in set_val
self._safechk_bnd(self._val)
File "/usr/local/lib/python3.8/dist-packages/pycrate_asn1rt/asnobj_construct.py", line 92, in _safechk_bnd
self._cont[val[0]]._safechk_bnd(val[1])
File "/usr/local/lib/python3.8/dist-packages/pycrate_asn1rt/asnobj_construct.py", line 774, in _safechk_bnd
Obj._safechk_bnd(Obj._val)
File "/usr/local/lib/python3.8/dist-packages/pycrate_asn1rt/asnobj_ext.py", line 184, in _safechk_bnd
self._get_val_obj(val[0])._safechk_bnd(val[1])
File "/usr/local/lib/python3.8/dist-packages/pycrate_asn1rt/asnobj_construct.py", line 774, in _safechk_bnd
Obj._safechk_bnd(Obj._val)
File "/usr/local/lib/python3.8/dist-packages/pycrate_asn1rt/asnobj_construct.py", line 2645, in _safechk_bnd
self._cont._safechk_bnd(v)
File "/usr/local/lib/python3.8/dist-packages/pycrate_asn1rt/asnobj_construct.py", line 774, in _safechk_bnd
Obj._safechk_bnd(Obj._val)
File "/usr/local/lib/python3.8/dist-packages/pycrate_asn1rt/asnobj_ext.py", line 184, in _safechk_bnd
self._get_val_obj(val[0])._safechk_bnd(val[1])
File "/usr/local/lib/python3.8/dist-packages/pycrate_asn1rt/asnobj_construct.py", line 2642, in _safechk_bnd
raise(ASN1ObjErr('{0}: value out of size constraint, {1!r}'\
pycrate_asn1rt.err.ASN1ObjErr: Value: value out of size constraint, [{'pduSessionId': 1}]
asn1obj.construct.py (ligne 2636 to 2644) def _safechk_bnd(self, val): ASN1Obj._safechk_bnd(self, val) if self._const_sz and \ self._const_sz.ext is None and \ len(val) not in self._const_sz: raise(ASN1ObjErr('{0}: value out of size constraint, {1!r}'\ .format(self.fullname(), val))) for v in val: self._cont._safechk_bnd(v)
(_safechk_bnd)>>> self <Value ([PDUSessionAdmittedModSNModConfirm] SEQUENCE OF)>
(_safechk_bnd)>>> val [{'pduSessionId': 1}]
(_safechk_bnd)>>> self._const_sz ASN1Set(root=[256], ext=None)
(_safechk_bnd)>>> len(val) 1