Chirpstack keeps on sending NewChannelReq, even after NewChannelAns OK

Viewed 40

Chirpstack keeps on sending NewChannelReq, even after NewChannelAns DR + Channel OK. End device has also implemented the new frequencies. LinkADRReq never sent, device keeps sending at DR0/SF12

Chirpstack v4.13.0
Device: OTX-18, custom LoRaWAN stack V0001.D312
LoRaWAN MAC Version: 1.0.3 / Class C

[
    {
        "phy_payload": {
            "mhdr": {
                "f_type": "UnconfirmedDataDown",
                "major": "LoRaWANR1"
            },
            "mic": [
                33,
                23,
                72,
                210
            ],
            "payload": {
                "f_port": null,
                "fhdr": {
                    "devaddr": "0005f11f",
                    "f_cnt": 11,
                    "f_ctrl": {
                        "ack": false,
                        "adr": true,
                        "adr_ack_req": false,
                        "class_b": false,
                        "f_opts_len": 12,
                        "f_pending": false
                    },
                    "f_opts": [
                        {
                            "NewChannelReq": {
                                "ch_index": 6,
                                "freq": 867700000,
                                "max_dr": 5,
                                "min_dr": 0
                            }
                        },
                        {
                            "NewChannelReq": {
                                "ch_index": 7,
                                "freq": 867900000,
                                "max_dr": 5,
                                "min_dr": 0
                            }
                        }
                    ]
                },
                "frm_payload": null
            }
        },
        "tx_info": {
            "context": "mLMRDA==",
            "frequency": 867300000,
            "modulation": {
                "lora": {
                    "bandwidth": 125000,
                    "codeRate": "CR_4_5",
                    "polarizationInversion": true,
                    "spreadingFactor": 12
                }
            },
            "power": 16,
            "timing": {
                "delay": {
                    "delay": "1s"
                }
            }
        }
    },
    {
        "phy_payload": {
            "mhdr": {
                "f_type": "UnconfirmedDataUp",
                "major": "LoRaWANR1"
            },
            "mic": [
                188,
                209,
                123,
                220
            ],
            "payload": {
                "f_port": 1,
                "fhdr": {
                    "devaddr": "0005f11f",
                    "f_cnt": 11,
                    "f_ctrl": {
                        "ack": false,
                        "adr": true,
                        "adr_ack_req": true,
                        "class_b": false,
                        "f_opts_len": 6,
                        "f_pending": false
                    },
                    "f_opts": [
                        {
                            "NewChannelAns": {
                                "channel_freq_ok": true,
                                "dr_range_ok": true
                            }
                        },
                        {
                            "NewChannelAns": {
                                "channel_freq_ok": true,
                                "dr_range_ok": true
                            }
                        },
                        {
                            "NewChannelAns": {
                                "channel_freq_ok": true,
                                "dr_range_ok": true
                            }
                        }
                    ]
                },
                "frm_payload": "cafe01"
            }
        },
        "rx_info": [
            {
                "channel": 4,
                "context": "mLMRDA==",
                "crcStatus": "CRC_OK",
                "gatewayId": "5030354123574750",
                "gwTime": "2025-10-20T11:22:23.926039+00:00",
                "location": {
                    "latitude": 52.34614160575181,
                    "longitude": 6.018362045288087
                },
                "nsTime": "2025-10-20T11:22:23.986917210+00:00",
                "rssi": -63,
                "snr": 6.25,
                "uplinkId": 53505
            }
        ],
        "tx_info": {
            "frequency": 867300000,
            "modulation": {
                "lora": {
                    "bandwidth": 125000,
                    "codeRate": "CR_4_5",
                    "spreadingFactor": 12
                }
            }
        }
    },
    {
        "phy_payload": {
            "mhdr": {
                "f_type": "UnconfirmedDataDown",
                "major": "LoRaWANR1"
            },
            "mic": [
                138,
                110,
                32,
                77
            ],
            "payload": {
                "f_port": 0,
                "fhdr": {
                    "devaddr": "0005f11f",
                    "f_cnt": 10,
                    "f_ctrl": {
                        "ack": false,
                        "adr": true,
                        "adr_ack_req": false,
                        "class_b": false,
                        "f_opts_len": 0,
                        "f_pending": false
                    },
                    "f_opts": []
                },
                "frm_payload": [
                    {
                        "NewChannelReq": {
                            "ch_index": 3,
                            "freq": 867100000,
                            "max_dr": 5,
                            "min_dr": 0
                        }
                    },
                    {
                        "NewChannelReq": {
                            "ch_index": 4,
                            "freq": 867300000,
                            "max_dr": 5,
                            "min_dr": 0
                        }
                    },
                    {
                        "NewChannelReq": {
                            "ch_index": 5,
                            "freq": 867500000,
                            "max_dr": 5,
                            "min_dr": 0
                        }
                    }
                ]
            }
        },
        "tx_info": {
            "context": "ho3lPA==",
            "frequency": 868300000,
            "modulation": {
                "lora": {
                    "bandwidth": 125000,
                    "codeRate": "CR_4_5",
                    "polarizationInversion": true,
                    "spreadingFactor": 12
                }
            },
            "power": 16,
            "timing": {
                "delay": {
                    "delay": "1s"
                }
            }
        }
    },
    {
        "phy_payload": {
            "mhdr": {
                "f_type": "UnconfirmedDataUp",
                "major": "LoRaWANR1"
            },
            "mic": [
                225,
                228,
                152,
                58
            ],
            "payload": {
                "f_port": 1,
                "fhdr": {
                    "devaddr": "0005f11f",
                    "f_cnt": 10,
                    "f_ctrl": {
                        "ack": false,
                        "adr": true,
                        "adr_ack_req": true,
                        "class_b": false,
                        "f_opts_len": 4,
                        "f_pending": false
                    },
                    "f_opts": [
                        {
                            "NewChannelAns": {
                                "channel_freq_ok": true,
                                "dr_range_ok": true
                            }
                        },
                        {
                            "NewChannelAns": {
                                "channel_freq_ok": true,
                                "dr_range_ok": true
                            }
                        }
                    ]
                },
                "frm_payload": "cafe01"
            }
        },
        "rx_info": [
            {
                "channel": 1,
                "context": "ho3lPA==",
                "crcStatus": "CRC_OK",
                "gatewayId": "5030354123574750",
                "gwTime": "2025-10-20T11:17:19.502276+00:00",
                "location": {
                    "latitude": 52.34614160575181,
                    "longitude": 6.018362045288087
                },
                "nsTime": "2025-10-20T11:17:19.564832351+00:00",
                "rfChain": 1,
                "rssi": -71,
                "snr": 7,
                "uplinkId": 62721
            }
        ],
        "tx_info": {
            "frequency": 868300000,
            "modulation": {
                "lora": {
                    "bandwidth": 125000,
                    "codeRate": "CR_4_5",
                    "spreadingFactor": 12
                }
            }
        }
    },
    {
        "phy_payload": {
            "mhdr": {
                "f_type": "UnconfirmedDataDown",
                "major": "LoRaWANR1"
            },
            "mic": [
                52,
                28,
                132,
                74
            ],
            "payload": {
                "f_port": null,
                "fhdr": {
                    "devaddr": "0005f11f",
                    "f_cnt": 9,
                    "f_ctrl": {
                        "ack": false,
                        "adr": true,
                        "adr_ack_req": false,
                        "class_b": false,
                        "f_opts_len": 12,
                        "f_pending": false
                    },
                    "f_opts": [
                        {
                            "NewChannelReq": {
                                "ch_index": 6,
                                "freq": 867700000,
                                "max_dr": 5,
                                "min_dr": 0
                            }
                        },
                        {
                            "NewChannelReq": {
                                "ch_index": 7,
                                "freq": 867900000,
                                "max_dr": 5,
                                "min_dr": 0
                            }
                        }
                    ]
                },
                "frm_payload": null
            }
        },
        "tx_info": {
            "context": "hIiRLA==",
            "frequency": 868500000,
            "modulation": {
                "lora": {
                    "bandwidth": 125000,
                    "codeRate": "CR_4_5",
                    "polarizationInversion": true,
                    "spreadingFactor": 12
                }
            },
            "power": 16,
            "timing": {
                "delay": {
                    "delay": "1s"
                }
            }
        }
    },
    {
        "phy_payload": {
            "mhdr": {
                "f_type": "UnconfirmedDataUp",
                "major": "LoRaWANR1"
            },
            "mic": [
                110,
                78,
                133,
                90
            ],
            "payload": {
                "f_port": 1,
                "fhdr": {
                    "devaddr": "0005f11f",
                    "f_cnt": 9,
                    "f_ctrl": {
                        "ack": false,
                        "adr": true,
                        "adr_ack_req": true,
                        "class_b": false,
                        "f_opts_len": 6,
                        "f_pending": false
                    },
                    "f_opts": [
                        {
                            "NewChannelAns": {
                                "channel_freq_ok": true,
                                "dr_range_ok": true
                            }
                        },
                        {
                            "NewChannelAns": {
                                "channel_freq_ok": true,
                                "dr_range_ok": true
                            }
                        },
                        {
                            "NewChannelAns": {
                                "channel_freq_ok": true,
                                "dr_range_ok": true
                            }
                        }
                    ]
                },
                "frm_payload": "cafe01"
            }
        },
        "rx_info": [
            {
                "channel": 2,
                "context": "hIiRLA==",
                "crcStatus": "CRC_OK",
                "gatewayId": "5030354123574750",
                "gwTime": "2025-10-20T11:16:45.598895+00:00",
                "location": {
                    "latitude": 52.34614160575181,
                    "longitude": 6.018362045288087
                },
                "nsTime": "2025-10-20T11:16:45.655272726+00:00",
                "rfChain": 1,
                "rssi": -66,
                "snr": 5.5,
                "uplinkId": 46593
            }
        ],
        "tx_info": {
            "frequency": 868500000,
            "modulation": {
                "lora": {
                    "bandwidth": 125000,
                    "codeRate": "CR_4_5",
                    "spreadingFactor": 12
                }
            }
        }
    },
    {
        "phy_payload": {
            "mhdr": {
                "f_type": "UnconfirmedDataDown",
                "major": "LoRaWANR1"
            },
            "mic": [
                68,
                24,
                17,
                75
            ],
            "payload": {
                "f_port": 0,
                "fhdr": {
                    "devaddr": "0005f11f",
                    "f_cnt": 8,
                    "f_ctrl": {
                        "ack": false,
                        "adr": true,
                        "adr_ack_req": false,
                        "class_b": false,
                        "f_opts_len": 0,
                        "f_pending": false
                    },
                    "f_opts": []
                },
                "frm_payload": [
                    {
                        "NewChannelReq": {
                            "ch_index": 3,
                            "freq": 867100000,
                            "max_dr": 5,
                            "min_dr": 0
                        }
                    },
                    {
                        "NewChannelReq": {
                            "ch_index": 4,
                            "freq": 867300000,
                            "max_dr": 5,
                            "min_dr": 0
                        }
                    },
                    {
                        "NewChannelReq": {
                            "ch_index": 5,
                            "freq": 867500000,
                            "max_dr": 5,
                            "min_dr": 0
                        }
                    }
                ]
            }
        },
        "tx_info": {
            "context": "gLHc9A==",
            "frequency": 868100000,
            "modulation": {
                "lora": {
                    "bandwidth": 125000,
                    "codeRate": "CR_4_5",
                    "polarizationInversion": true,
                    "spreadingFactor": 12
                }
            },
            "power": 16,
            "timing": {
                "delay": {
                    "delay": "1s"
                }
            }
        }
    },
    {
        "phy_payload": {
            "mhdr": {
                "f_type": "UnconfirmedDataUp",
                "major": "LoRaWANR1"
            },
            "mic": [
                17,
                61,
                108,
                23
            ],
            "payload": {
                "f_port": 1,
                "fhdr": {
                    "devaddr": "0005f11f",
                    "f_cnt": 8,
                    "f_ctrl": {
                        "ack": false,
                        "adr": true,
                        "adr_ack_req": true,
                        "class_b": false,
                        "f_opts_len": 4,
                        "f_pending": false
                    },
                    "f_opts": [
                        {
                            "NewChannelAns": {
                                "channel_freq_ok": true,
                                "dr_range_ok": true
                            }
                        },
                        {
                            "NewChannelAns": {
                                "channel_freq_ok": true,
                                "dr_range_ok": true
                            }
                        }
                    ]
                },
                "frm_payload": "cafe01"
            }
        },
        "rx_info": [
            {
                "context": "gLHc9A==",
                "crcStatus": "CRC_OK",
                "gatewayId": "5030354123574750",
                "gwTime": "2025-10-20T11:15:41.196851+00:00",
                "location": {
                    "latitude": 52.34614160575181,
                    "longitude": 6.018362045288087
                },
                "nsTime": "2025-10-20T11:15:41.253095833+00:00",
                "rfChain": 1,
                "rssi": -69,
                "snr": 6.75,
                "uplinkId": 65025
            }
        ],
        "tx_info": {
            "frequency": 868100000,
            "modulation": {
                "lora": {
                    "bandwidth": 125000,
                    "codeRate": "CR_4_5",
                    "spreadingFactor": 12
                }
            }
        }
    },
    {
        "phy_payload": {
            "mhdr": {
                "f_type": "UnconfirmedDataDown",
                "major": "LoRaWANR1"
            },
            "mic": [
                59,
                110,
                134,
                235
            ],
            "payload": {
                "f_port": null,
                "fhdr": {
                    "devaddr": "0005f11f",
                    "f_cnt": 7,
                    "f_ctrl": {
                        "ack": false,
                        "adr": true,
                        "adr_ack_req": false,
                        "class_b": false,
                        "f_opts_len": 12,
                        "f_pending": false
                    },
                    "f_opts": [
                        {
                            "NewChannelReq": {
                                "ch_index": 6,
                                "freq": 867700000,
                                "max_dr": 5,
                                "min_dr": 0
                            }
                        },
                        {
                            "NewChannelReq": {
                                "ch_index": 7,
                                "freq": 867900000,
                                "max_dr": 5,
                                "min_dr": 0
                            }
                        }
                    ]
                },
                "frm_payload": null
            }
        },
        "tx_info": {
            "context": "dyR1RA==",
            "frequency": 867900000,
            "modulation": {
                "lora": {
                    "bandwidth": 125000,
                    "codeRate": "CR_4_5",
                    "polarizationInversion": true,
                    "spreadingFactor": 12
                }
            },
            "power": 16,
            "timing": {
                "delay": {
                    "delay": "1s"
                }
            }
        }
    },
    {
        "phy_payload": {
            "mhdr": {
                "f_type": "UnconfirmedDataUp",
                "major": "LoRaWANR1"
            },
            "mic": [
                12,
                92,
                59,
                70
            ],
            "payload": {
                "f_port": 1,
                "fhdr": {
                    "devaddr": "0005f11f",
                    "f_cnt": 7,
                    "f_ctrl": {
                        "ack": false,
                        "adr": true,
                        "adr_ack_req": true,
                        "class_b": false,
                        "f_opts_len": 6,
                        "f_pending": false
                    },
                    "f_opts": [
                        {
                            "NewChannelAns": {
                                "channel_freq_ok": true,
                                "dr_range_ok": true
                            }
                        },
                        {
                            "NewChannelAns": {
                                "channel_freq_ok": true,
                                "dr_range_ok": true
                            }
                        },
                        {
                            "NewChannelAns": {
                                "channel_freq_ok": true,
                                "dr_range_ok": true
                            }
                        }
                    ]
                },
                "frm_payload": "cafe01"
            }
        },
        "rx_info": [
            {
                "channel": 7,
                "context": "dyR1RA==",
                "crcStatus": "CRC_OK",
                "gatewayId": "5030354123574750",
                "gwTime": "2025-10-20T11:13:00.928310+00:00",
                "location": {
                    "latitude": 52.34614160575181,
                    "longitude": 6.018362045288087
                },
                "nsTime": "2025-10-20T11:13:00.986491019+00:00",
                "rssi": -66,
                "snr": 7,
                "uplinkId": 44801
            }
        ],
        "tx_info": {
            "frequency": 867900000,
            "modulation": {
                "lora": {
                    "bandwidth": 125000,
                    "codeRate": "CR_4_5",
                    "spreadingFactor": 12
                }
            }
        }
    },
    {
        "phy_payload": {
            "mhdr": {
                "f_type": "UnconfirmedDataDown",
                "major": "LoRaWANR1"
            },
            "mic": [
                187,
                212,
                251,
                221
            ],
            "payload": {
                "f_port": 0,
                "fhdr": {
                    "devaddr": "0005f11f",
                    "f_cnt": 6,
                    "f_ctrl": {
                        "ack": false,
                        "adr": true,
                        "adr_ack_req": false,
                        "class_b": false,
                        "f_opts_len": 0,
                        "f_pending": false
                    },
                    "f_opts": []
                },
                "frm_payload": [
                    {
                        "NewChannelReq": {
                            "ch_index": 3,
                            "freq": 867100000,
                            "max_dr": 5,
                            "min_dr": 0
                        }
                    },
                    {
                        "NewChannelReq": {
                            "ch_index": 4,
                            "freq": 867300000,
                            "max_dr": 5,
                            "min_dr": 0
                        }
                    },
                    {
                        "NewChannelReq": {
                            "ch_index": 5,
                            "freq": 867500000,
                            "max_dr": 5,
                            "min_dr": 0
                        }
                    }
                ]
            }
        },
        "tx_info": {
            "context": "dReKrA==",
            "frequency": 867700000,
            "modulation": {
                "lora": {
                    "bandwidth": 125000,
                    "codeRate": "CR_4_5",
                    "polarizationInversion": true,
                    "spreadingFactor": 12
                }
            },
            "power": 16,
            "timing": {
                "delay": {
                    "delay": "1s"
                }
            }
        }
    },
    {
        "phy_payload": {
            "mhdr": {
                "f_type": "UnconfirmedDataUp",
                "major": "LoRaWANR1"
            },
            "mic": [
                65,
                60,
                221,
                222
            ],
            "payload": {
                "f_port": 1,
                "fhdr": {
                    "devaddr": "0005f11f",
                    "f_cnt": 6,
                    "f_ctrl": {
                        "ack": false,
                        "adr": true,
                        "adr_ack_req": true,
                        "class_b": false,
                        "f_opts_len": 4,
                        "f_pending": false
                    },
                    "f_opts": [
                        {
                            "NewChannelAns": {
                                "channel_freq_ok": true,
                                "dr_range_ok": true
                            }
                        },
                        {
                            "NewChannelAns": {
                                "channel_freq_ok": true,
                                "dr_range_ok": true
                            }
                        }
                    ]
                },
                "frm_payload": "cafe01"
            }
        },
        "rx_info": [
            {
                "channel": 6,
                "context": "dReKrA==",
                "crcStatus": "CRC_OK",
                "gatewayId": "5030354123574750",
                "gwTime": "2025-10-20T11:12:26.528236+00:00",
                "location": {
                    "latitude": 52.34614160575181,
                    "longitude": 6.018362045288087
                },
                "nsTime": "2025-10-20T11:12:26.579525100+00:00",
                "rssi": -69,
                "snr": 5.25,
                "uplinkId": 39169
            }
        ],
        "tx_info": {
            "frequency": 867700000,
            "modulation": {
                "lora": {
                    "bandwidth": 125000,
                    "codeRate": "CR_4_5",
                    "spreadingFactor": 12
                }
            }
        }
    }
]

2 Answers

The issue is the adr_ack_req: true. If that is set to true, ChirpStack will reset back to the default channels and will re-negotiate the custom channels or channel-mask.

If there is a regular downlink, then normally the ADRACKReq bit should not be set, see also:

image.png

Note that ADR_ACK_LIMIT is set to 64. Thus only after 64 uplinks without receiving a downlink, it is expected to be set.

Thanks Orne, good catch!

You’re right: the ADRACKReq flag should only be set when the end-device hasn’t received a downlink from the network server for an extended period. I forgot to reinitialize that flag when porting part of the code, by coincidence it still managed to pass LCTT pre-testing 😅

As a side note, wouldn’t it be less network-intensive if the nws assumes the channel configuration for a device persists until (re-)joining?