-
- ND_PRINT((ndo, "%s (%u) v%u, len %u",
- tok2str(eap_frame_type_values, "unknown", eap->type),
- eap->type,
- eap->version,
- EXTRACT_BE_U_2(eap->length)));
-
- tptr += sizeof(struct eap_frame_t);
- tlen -= sizeof(struct eap_frame_t);
-
- switch (eap->type) {
- case EAP_FRAME_TYPE_PACKET:
- ND_TCHECK_1(tptr);
- type = EXTRACT_U_1(tptr);
- ND_TCHECK_2(tptr + 2);
- len = EXTRACT_BE_U_2(tptr + 2);
- ND_PRINT((ndo, ", %s (%u), id %u, len %u",
- tok2str(eap_code_values, "unknown", type),
- type,
- EXTRACT_U_1((tptr + 1)),
- len));
-
- ND_TCHECK_LEN(tptr, len);
-
- if (type <= 2) { /* For EAP_REQUEST and EAP_RESPONSE only */
- ND_TCHECK_1(tptr + 4);
- subtype = EXTRACT_U_1(tptr + 4);
- ND_PRINT((ndo, "\n\t\t Type %s (%u)",
- tok2str(eap_type_values, "unknown", subtype),
- subtype));
-
- switch (subtype) {
+ ND_PRINT("%s (%u), id %u, len %u",
+ tok2str(eap_code_values, "unknown", type),
+ type,
+ GET_U_1((cp + 1)),
+ len);
+
+ ND_TCHECK_LEN(cp, len);
+
+ if (type == EAP_REQUEST || type == EAP_RESPONSE) {
+ /* RFC 3748 Section 4.1 */
+ ND_ICHECK_U(len, <, 5);
+ subtype = GET_U_1(cp + 4);
+ ND_PRINT("\n\t\t Type %s (%u)",
+ tok2str(eap_type_values, "unknown", subtype),
+ subtype);
+
+ switch (subtype) {