[FR_CODE_DISCONNECT_ACK] = FR_CODE_DISCONNECT_REQUEST,
[FR_CODE_DISCONNECT_NAK] = FR_CODE_DISCONNECT_REQUEST,
+
+ [FR_CODE_PROTOCOL_ERROR] = FR_CODE_PROTOCOL_ERROR, /* Any */
};
/** Turn a reply code into a module rcode;
return DECODE_FAIL_UNKNOWN_PACKET_CODE;
}
+ if (!allowed_replies[code]) {
+ REDEBUG("%s packet received invalid reply code %s",
+ fr_packet_codes[u->code], fr_packet_codes[code]);
+ return DECODE_FAIL_UNKNOWN_PACKET_CODE;
+ }
+
/*
* Protocol error is allowed as a response to any
* packet code.
+ *
+ * Status checks accept any response code.
*/
- if (code != FR_CODE_PROTOCOL_ERROR) {
- if (!allowed_replies[code]) {
- REDEBUG("%s packet received invalid reply code %s",
- fr_packet_codes[u->code], fr_packet_codes[code]);
- return DECODE_FAIL_UNKNOWN_PACKET_CODE;
- }
-
+ if (!u->status_check && (code != FR_CODE_PROTOCOL_ERROR)) {
if (allowed_replies[code] != (FR_CODE) u->code) {
REDEBUG("%s packet received invalid reply code %s",
fr_packet_codes[u->code], fr_packet_codes[code]);