NRF_SO_RAI_NO_DATA does not cause RRC release in SLM/nrf9160 without send

NRF_SO_RAI_NO_DATA  AT#XSOCKETOPT=1,50 does not cause RRC release as expected, instead hipower LTE continues another ~20s.
https://github.com/nrfconnect/sdk-nrfxlib/blob/main/nrf_modem/include/nrf_socket.h#L211
Have a look into no RAI release AT dialogue and modem trace.

In case there is UDP packet send just after AT#XSOCKETOPT=1,50, RRC release ocurs immediatelly.
Have a look into RAI release trace and AT dialogue with send.

no RAI release trace and AT dialogue:

no RAI release trace-2022-08-24T20-42-33.342Z.bin

[PPK2] DUT Powered, Measurement started
0.14 <RESET> Wed Aug 24 22:42:31 2022
1.02 [PPK2] 100k/s AVG 4.27 mA Max 32.8 mA
2.02 [PPK2] 100k/s AVG 2.15 mA Max 32.8 mA
3.03 [PPK2] 100k/s AVG 0.002mA Max 0.007mA
4.03 [PPK2] 100k/s AVG 0.002mA Max 0.009mA
5.02 [PPK2] 100k/s AVG 0.002mA Max 0.008mA
5.06 <WAKEUP>
6.04 [PPK2] 100k/s AVG 1.30 mA Max 29.5 mA
6.43 [RX] Ready
6.43 [TX] AT
6.44 [RX] OK
6.44 [TX] AT%XMODEMTRACE=1,2
6.45 [RX] OK
6.45 [TX] AT%MDMEV=1
6.46 [RX] OK
6.46 [TX] AT%HWVERSION
6.47 [RX] %HWVERSION: nRF9160 SICA BQA
6.47 [RX] OK
6.47 [TX] AT%SHORTSWVER
6.48 [RX] %SHORTSWVER: nrf9160_1.3.1
6.48 [RX] OK
6.48 [TX] AT#XSLMVER
6.49 [RX] #XSLMVER: "2.0.2"
6.49 [RX] OK
6.49 [TX] AT%XPOFWARN=1,30
6.52 [RX] OK
6.52 [TX] AT%XSYSTEMMODE=0,1,0,0
6.53 [RX] OK
6.53 [TX] AT%REL14FEAT=1,1,1,1,0
6.55 [RX] OK
6.55 [TX] AT+CNEC=24
6.56 [RX] OK
6.56 [TX] AT+CMEE=1
6.57 [RX] OK
6.58 [TX] AT+CEPPI=1
6.58 [RX] OK
6.58 [TX] AT%RAI=1
6.59 [RX] OK
6.59 [TX] AT%XDATAPRFL=0
6.61 [RX] OK
6.61 [TX] AT%XNETTIME=1
6.62 [RX] OK
6.62 [TX] AT%XSIM=1
6.63 [RX] OK
6.63 [TX] AT+CEREG=5
6.64 [RX] OK
6.64 [TX] AT+CGEREP=1
6.65 [RX] OK
6.65 [TX] AT+CSCON=1
6.66 [RX] OK
6.66 [TX] AT%XTIME=1
6.67 [RX] OK
6.67 [TX] AT%XMODEMSLEEP=1,0,10240
6.68 [RX] OK
6.68 [TX] AT+CPSMS=1,,,"00111000","00000000"
6.69 [RX] %XMODEMSLEEP: 4
6.70 [RX] OK
6.70 [TX] AT#XSLEEP=2
6.71 [RX] OK
7.02 [PPK2] 100k/s AVG 4.06 mA Max 31.1 mA
8.02 [PPK2] 100k/s AVG 0.025mA Max 4.70 mA
9.02 [PPK2] 100k/s AVG 0.022mA Max 0.028mA
10.02 [PPK2] 100k/s AVG 0.022mA Max 0.029mA
10.86 [PPK2] ====== SUM: INIT 0.003uA/h ======
11.63 <WAKEUP>
11.64 [RX] Ready
11.74 [TX] AT%XMODEMTRACE=1,2
11.76 [RX] OK
11.76 [TX] AT%XBANDLOCK=1,"0000000000000000000000000000000000000000000000000000000000001000000010000000100010011010"
11.79 [RX] OK
11.80 [TX] AT+COPS=1,2,"23003"
11.81 [RX] OK
11.81 [TX] AT+CGDCONT=1,"IP","hardwario.com"
11.83 [RX] OK
11.83 [TX] AT+CFUN=1
11.91 [RX] OK
11.91 [RX] %XMODEMSLEEP: 4,0
12.02 [PPK2] 100k/s AVG 4.52 mA Max 49.6 mA
12.81 [RX] %XSIM: 1
12.81 [TX] AT+CGSN
12.82 [RX] 352656106109476
12.82 [RX] OK
12.82 [TX] AT+CIMI
12.83 [RX] 901288000012723
12.83 [RX] OK
13.03 [PPK2] 100k/s AVG 33.4 mA Max 48.7 mA
14.01 [PPK2] 100k/s AVG 33.6 mA Max 162mA
15.03 [PPK2] 100k/s AVG 27.1 mA Max 761mA
16.02 [PPK2] 100k/s AVG 24.7 mA Max 340mA
17.04 [PPK2] 100k/s AVG 1.08 mA Max 2.12 mA
17.33 [RX] +CEREG: 2,"AE38","000AC51F",9
18.02 [PPK2] 100k/s AVG 10.7 mA Max 275mA
18.02 [RX] +CSCON: 1
19.01 [PPK2] 100k/s AVG 46.1 mA Max 342mA
20.02 [PPK2] 100k/s AVG 37.8 mA Max 243mA
20.40 [RX] +CGEV: ME PDN ACT 0,0
20.40 [RX] +CNEC_ESM: 50,0
20.41 [RX] %MDMEV: SEARCH STATUS 2
20.41 [RX] +CEREG: 5,"AE38","000AC51F",9,,,"00000000","00111000"
20.41 [TX] AT+COPS?
20.42 [RX] +COPS: 1,2,"23003",9
20.42 [RX] OK
20.42 [TX] AT%XCBAND
20.42 [RX] %XCBAND: 20
20.43 [RX] OK
20.43 [TX] AT+CEINFO?
20.44 [RX] +CEINFO: 0,1,C,8,1,-100,12
20.44 [RX] OK
20.44 [TX] AT+CGDCONT?
20.45 [RX] +CGDCONT: 0,"IP","hardwario.com","10.0.0.157",0,0
20.45 [RX] +CGDCONT: 1,"IP","hardwario.com","",0,0
20.45 [RX] OK
20.45 [TX] AT#XDATACTRL=40
20.46 [RX] OK
20.46 [TX] AT#XSOCKET=1,2,0
20.47 [RX] #XSOCKET: 0,2,17
20.47 [RX] OK
20.62 [RX] %XTIME: ,"22804202240580","01"
20.63 [TX] AT#XSOCKETOPT=1,50
20.63 [RX] OK
21.02 [PPK2] 100k/s AVG 39.0 mA Max 269mA
22.02 [PPK2] 100k/s AVG 36.9 mA Max 51.2 mA
23.02 [PPK2] 100k/s AVG 36.1 mA Max 50.9 mA
24.03 [PPK2] 100k/s AVG 36.6 mA Max 51.2 mA
25.03 [PPK2] 100k/s AVG 36.9 mA Max 51.4 mA
26.04 [PPK2] 100k/s AVG 36.9 mA Max 50.7 mA
27.01 [PPK2] 100k/s AVG 36.9 mA Max 51.5 mA
28.01 [PPK2] 100k/s AVG 36.3 mA Max 51.2 mA
29.01 [PPK2] 100k/s AVG 36.4 mA Max 50.8 mA
30.01 [PPK2] 100k/s AVG 36.9 mA Max 51.2 mA
31.01 [PPK2] 100k/s AVG 36.9 mA Max 51.5 mA
32.06 [PPK2] 100k/s AVG 36.9 mA Max 51.3 mA
33.01 [PPK2] 100k/s AVG 36.4 mA Max 51.0 mA
34.04 [PPK2] 100k/s AVG 36.3 mA Max 51.3 mA
35.03 [PPK2] 100k/s AVG 36.9 mA Max 51.4 mA
36.03 [PPK2] 100k/s AVG 36.9 mA Max 50.8 mA
37.04 [PPK2] 100k/s AVG 36.9 mA Max 51.3 mA
38.03 [PPK2] 100k/s AVG 36.6 mA Max 51.3 mA
39.02 [PPK2] 100k/s AVG 36.1 mA Max 50.7 mA
40.02 [PPK2] 100k/s AVG 36.9 mA Max 50.9 mA
41.01 [PPK2] 100k/s AVG 36.9 mA Max 50.9 mA
41.09 [RX] +CSCON: 0
41.09 [RX] %XMODEMSLEEP: 1,86399999
42.03 [PPK2] 100k/s AVG 3.83 mA Max 258mA
43.02 [PPK2] 100k/s AVG 1.01 mA Max 2.07 mA
44.02 [PPK2] 100k/s AVG 1.01 mA Max 2.10 mA

RAI release trace and AT dialogue with send:

RAI release with send trace-2022-08-24T21-19-22.853Z.bin

[PPK2] DUT Powered, Measurement started
0.17 <RESET> Wed Aug 24 23:19:22 2022
1.03 [PPK2] 100k/s AVG 4.22 mA Max 37.1 mA
2.01 [PPK2] 100k/s AVG 2.05 mA Max 32.0 mA
3.03 [PPK2] 100k/s AVG 0.002mA Max 0.007mA
4.02 [PPK2] 100k/s AVG 0.002mA Max 0.007mA
5.04 [PPK2] 100k/s AVG 0.002mA Max 0.007mA
5.11 <WAKEUP>
6.02 [PPK2] 100k/s AVG 1.34 mA Max 24.9 mA
6.48 [RX] Ready
6.48 [TX] AT
6.48 [RX] OK
6.48 [TX] AT%XMODEMTRACE=1,2
6.50 [RX] OK
6.50 [TX] AT%MDMEV=1
6.51 [RX] OK
6.51 [TX] AT%HWVERSION
6.53 [RX] %HWVERSION: nRF9160 SICA BQA
6.53 [RX] OK
6.53 [TX] AT%SHORTSWVER
6.54 [RX] %SHORTSWVER: nrf9160_1.3.1
6.55 [RX] OK
6.55 [TX] AT#XSLMVER
6.55 [RX] #XSLMVER: "2.0.2"
6.55 [RX] OK
6.55 [TX] AT%XPOFWARN=1,30
6.57 [RX] OK
6.57 [TX] AT%XSYSTEMMODE=0,1,0,0
6.58 [RX] OK
6.58 [TX] AT%REL14FEAT=1,1,1,1,0
6.60 [RX] OK
6.60 [TX] AT+CNEC=24
6.61 [RX] OK
6.61 [TX] AT+CMEE=1
6.62 [RX] OK
6.62 [TX] AT+CEPPI=1
6.63 [RX] OK
6.63 [TX] AT%RAI=1
6.64 [RX] OK
6.64 [TX] AT%XDATAPRFL=0
6.65 [RX] OK
6.65 [TX] AT%XNETTIME=1
6.66 [RX] OK
6.67 [TX] AT%XSIM=1
6.67 [RX] OK
6.67 [TX] AT+CEREG=5
6.69 [RX] OK
6.69 [TX] AT+CGEREP=1
6.70 [RX] OK
6.70 [TX] AT+CSCON=1
6.70 [RX] OK
6.71 [TX] AT%XTIME=1
6.72 [RX] OK
6.72 [TX] AT%XMODEMSLEEP=1,0,10240
6.74 [RX] OK
6.74 [TX] AT+CPSMS=1,,,"00111000","00000000"
6.74 [RX] %XMODEMSLEEP: 4
6.75 [RX] OK
6.75 [TX] AT#XSLEEP=2
6.76 [RX] OK
7.01 [PPK2] 100k/s AVG 4.14 mA Max 31.0 mA
8.04 [PPK2] 100k/s AVG 0.021mA Max 0.029mA
9.04 [PPK2] 100k/s AVG 0.022mA Max 0.029mA
10.04 [PPK2] 100k/s AVG 0.022mA Max 0.030mA
10.91 [PPK2] ====== SUM: INIT 0.003uA/h ======
11.68 <WAKEUP>
11.69 [RX] Ready
11.80 [TX] AT%XMODEMTRACE=1,2
11.82 [RX] OK
11.82 [TX] AT%XBANDLOCK=1,"0000000000000000000000000000000000000000000000000000000000001000000010000000100010011010"
11.84 [RX] OK
11.85 [TX] AT+COPS=1,2,"23003"
11.86 [RX] OK
11.86 [TX] AT+CGDCONT=1,"IP","hardwario.com"
11.87 [RX] OK
11.88 [TX] AT+CFUN=1
11.96 [RX] OK
11.96 [RX] %XMODEMSLEEP: 4,0
12.02 [PPK2] 100k/s AVG 3.61 mA Max 49.7 mA
12.86 [RX] %XSIM: 1
12.86 [TX] AT+CGSN
12.87 [RX] 352656106109476
12.87 [RX] OK
12.87 [TX] AT+CIMI
12.88 [RX] 901288000012723
12.88 [RX] OK
13.03 [PPK2] 100k/s AVG 33.4 mA Max 41.0 mA
14.00 [PPK2] 100k/s AVG 30.5 mA Max 409mA
15.01 [PPK2] 100k/s AVG 36.5 mA Max 1006mA
16.01 [PPK2] 100k/s AVG 1.50 mA Max 44.0 mA
17.03 [PPK2] 100k/s AVG 1.08 mA Max 2.10 mA
18.02 [PPK2] 100k/s AVG 1.08 mA Max 1.80 mA
18.59 [RX] +CEREG: 2,"AE38","000AC51F",9
19.02 [PPK2] 100k/s AVG 5.33 mA Max 59.1 mA
19.28 [RX] +CSCON: 1
20.03 [PPK2] 100k/s AVG 38.9 mA Max 333mA
20.40 [RX] +CGEV: ME PDN ACT 0,0
20.40 [RX] +CNEC_ESM: 50,0
20.40 [RX] %MDMEV: SEARCH STATUS 2
20.41 [RX] +CEREG: 5,"AE38","000AC51F",9,,,"00000000","00111000"
20.41 [TX] AT+COPS?
20.41 [RX] +COPS: 1,2,"23003",9
20.41 [RX] OK
20.41 [TX] AT%XCBAND
20.42 [RX] %XCBAND: 20
20.42 [RX] OK
20.42 [TX] AT+CEINFO?
20.43 [RX] +CEINFO: 0,1,C,8,1,-96,14
20.43 [RX] OK
20.43 [TX] AT+CGDCONT?
20.44 [RX] +CGDCONT: 0,"IP","hardwario.com","10.0.0.157",0,0
20.45 [RX] +CGDCONT: 1,"IP","hardwario.com","",0,0
20.45 [RX] OK
20.45 [TX] AT#XDATACTRL=40
20.46 [RX] OK
20.46 [TX] AT#XSOCKET=1,2,0
20.46 [RX] #XSOCKET: 0,2,17
20.46 [RX] OK
20.81 [RX] %XTIME: ,"22804212911480","01"
20.82 [TX] AT#XSOCKETOPT=1,50
20.82 [RX] OK
20.82 [TX] AT#XSENDTO="192.168.168.1",20000
20.85 [TX] DATA(1B): HEX 30 ...
20.91 [TX] +++ (Exit datamode by sending +++)
20.96 [RX] OK
21.03 [PPK2] 100k/s AVG 38.2 mA Max 271mA
21.48 [RX] +CSCON: 0
21.48 [RX] %XMODEMSLEEP: 1,86399999
22.03 [PPK2] 100k/s AVG 18.9 mA Max 276mA
23.02 [PPK2] 100k/s AVG 1.01 mA Max 2.11 mA
24.02 [PPK2] 100k/s AVG 1.02 mA Max 2.07 mA
25.05 [PPK2] 100k/s AVG 1.01 mA Max 2.03 mA

Parents
  • Hi,

    Which NCS version do you use?

    In nrf_socket.h, NRF_SO_RAI_NO_DATA is intended to be used if you do not want to send any more data. However, in SLM application where Zephyr socket options are used, proper file to look at would be zephyr\include\zephyr\net\socket_ncs.h where SO_RAI_NO_DATA has the value 51 instead of 50 in NCS v2.0.0. Therefore, it seems that you are actually using SO_RAI_LAST instead of SO_RAI_NO_DATA. Aligning of RAI socket options have been done in this commit, but it is not yet a part of the release. You could try changing the value of SO_RAI_NO_DATA from 50 to 51 and see if this change fixes the issue.

    Logs that you provided did not show whether your network supports RAI or not. It might be that RAI is not supported by the network.

    Best regards,
    Dejan

  • NCS v2.1.0, nRF9160 SICA B1A, mfw_nrf9160_1.3.2

    I currently also struggle with SO_RAI_NO_DATA (50).

    Using SO_RAI_LAST (51) and SO_RAI_ONE_RESP (52) are working, but using

    if (setsockopt(fd, SOL_SOCKET, SO_RAI_NO_DATA, NULL, 0)) {
    LOG_WRN("RAI error %d", errno);
    }
    results in
    RAI error 121
    (EDESTADDRREQ 121 /* Destination address required */)
    > zephyr\include\zephyr\net\socket_ncs.h where SO_RAI_NO_DATA has the value 51 
    In the current version in github the value for SO_RAI_NO_DATA is 50.
    Not sure, what is mixed up, but I guess something is mixed up.
  • Hi,

    Regarding RAI_NO_DATA and "Destination address required" error (EDESTADDRREQ 121), the solution is to connect UDP socket. This would provide default destination address for the datagram.

    Best regards,
    Dejan

  • I never "connect" a UDP socket, I use it to communicate with different peers.

    Had you verified, that it works with a UDP socket in "connect" mode, or is more a hint and I should test and verify it on my side?

    If you have verified it, does it work also for TCP? So set RAI_NO_DATA and the close the client socket? (That was my intention to test it in order to try to use RAI with TCP.)

  • Using "connect" "setsockopt" now returns without error.

    On my side unfortunately also without effect, means the device stays RRC connected and doesn't move to idle ASAP..

    So:

    SO_RAI_LAST (51) and SO_RAI_ONE_RESP (52) are working,

    but SO_RAI_NO_DATA (50) has no effect, even if connected.

    It would be great, if someone can check, what needs to be done to use it successful. I would appreciate to get a solution, or, if it doesn't work, then that will also be OK.

    I also tried to use it with TCP (HTTP). The idea was, that after I read the response and finished with the communication, I use SO_RAI_NO_DATA (50). Unfortunately, the socket is already closed after reading the response, so I get 128 ENOTCONN. So, not sure, how it could be used with TCP, if the other peer may already have closed the connection.

Reply
  • Using "connect" "setsockopt" now returns without error.

    On my side unfortunately also without effect, means the device stays RRC connected and doesn't move to idle ASAP..

    So:

    SO_RAI_LAST (51) and SO_RAI_ONE_RESP (52) are working,

    but SO_RAI_NO_DATA (50) has no effect, even if connected.

    It would be great, if someone can check, what needs to be done to use it successful. I would appreciate to get a solution, or, if it doesn't work, then that will also be OK.

    I also tried to use it with TCP (HTTP). The idea was, that after I read the response and finished with the communication, I use SO_RAI_NO_DATA (50). Unfortunately, the socket is already closed after reading the response, so I get 128 ENOTCONN. So, not sure, how it could be used with TCP, if the other peer may already have closed the connection.

Children
Related