@arjanvanb I don’t know how TTN does it but in the KPN LoRa network, there are usually several parts piggybacked in one downlink message. For instance if you send a LinkCheckReq in your payload uplink, then you could receive the following MAC commands piggybacked:
0x02 > reply to your LinkCheckReq
0x03 > LinkADRReq, the ADR parameters
0x05 > RXParamSetupReq
0x07 > NewChannelReq
And if there is downstream payload data, it will also be combined in this message.
As a side question: the ADR ‘advice’ from the network should be acknowledged, but I don’t actually know what happens if you don’t (I don’t in any case in my implementations ). Do you know why this acknowledgement is there, other than just ‘for information’ for the network operator?