/* \summary: Extensible Authentication Protocol (EAP) printer */
#ifdef HAVE_CONFIG_H
-#include "config.h"
+#include <config.h>
#endif
-#include <netdissect-stdinc.h>
+#include "netdissect-stdinc.h"
#include "netdissect.h"
#include "extract.h"
u_int eap_type, tlen, type, subtype;
int count=0, len;
+ ndo->ndo_protocol = "eap";
tptr = cp;
tlen = length;
eap = (const struct eap_frame_t *)cp;
ND_TCHECK_SIZE(eap);
- eap_type = EXTRACT_U_1(eap->type);
-
- /* in non-verbose mode just lets print the basic info */
- if (ndo->ndo_vflag < 1) {
- ND_PRINT("%s (%u) v%u, len %u",
- tok2str(eap_frame_type_values, "unknown", eap_type),
- eap_type,
- EXTRACT_U_1(eap->version),
- EXTRACT_BE_U_2(eap->length));
- return;
- }
+ eap_type = GET_U_1(eap->type);
ND_PRINT("%s (%u) v%u, len %u",
tok2str(eap_frame_type_values, "unknown", eap_type),
eap_type,
- EXTRACT_U_1(eap->version),
- EXTRACT_BE_U_2(eap->length));
+ GET_U_1(eap->version),
+ GET_BE_U_2(eap->length));
+
+ if (ndo->ndo_vflag < 1)
+ return;
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);
+ type = GET_U_1(tptr);
ND_TCHECK_2(tptr + 2);
- len = EXTRACT_BE_U_2(tptr + 2);
+ len = GET_BE_U_2(tptr + 2);
ND_PRINT(", %s (%u), id %u, len %u",
tok2str(eap_code_values, "unknown", type),
type,
- EXTRACT_U_1((tptr + 1)),
+ GET_U_1((tptr + 1)),
len);
ND_TCHECK_LEN(tptr, len);
- if (type <= 2) { /* For EAP_REQUEST and EAP_RESPONSE only */
+ if (type == EAP_REQUEST || type == EAP_RESPONSE) {
+ /* RFC 3748 Section 4.1 */
ND_TCHECK_1(tptr + 4);
- subtype = EXTRACT_U_1(tptr + 4);
+ subtype = GET_U_1(tptr + 4);
ND_PRINT("\n\t\t Type %s (%u)",
tok2str(eap_type_values, "unknown", subtype),
subtype);
case EAP_TYPE_IDENTITY:
if (len - 5 > 0) {
ND_PRINT(", Identity: ");
- safeputs(ndo, tptr + 5, len - 5);
+ (void)nd_printzp(ndo, tptr + 5, len - 5, NULL);
}
break;
case EAP_TYPE_NOTIFICATION:
if (len - 5 > 0) {
ND_PRINT(", Notification: ");
- safeputs(ndo, tptr + 5, len - 5);
+ (void)nd_printzp(ndo, tptr + 5, len - 5, NULL);
}
break;
while (count < len) {
ND_TCHECK_1(tptr + count);
ND_PRINT(" %s (%u),",
- tok2str(eap_type_values, "unknown", EXTRACT_U_1((tptr + count))),
- EXTRACT_U_1(tptr + count));
+ tok2str(eap_type_values, "unknown", GET_U_1((tptr + count))),
+ GET_U_1(tptr + count));
count++;
}
break;
ND_TCHECK_1(tptr + 5);
if (subtype == EAP_TYPE_TTLS)
ND_PRINT(" TTLSv%u",
- EAP_TTLS_VERSION(EXTRACT_U_1((tptr + 5))));
+ EAP_TTLS_VERSION(GET_U_1((tptr + 5))));
ND_PRINT(" flags [%s] 0x%02x,",
- bittok2str(eap_tls_flags_values, "none", EXTRACT_U_1((tptr + 5))),
- EXTRACT_U_1(tptr + 5));
+ bittok2str(eap_tls_flags_values, "none", GET_U_1((tptr + 5))),
+ GET_U_1(tptr + 5));
- if (EAP_TLS_EXTRACT_BIT_L(EXTRACT_U_1(tptr + 5))) {
+ if (EAP_TLS_EXTRACT_BIT_L(GET_U_1(tptr + 5))) {
ND_TCHECK_4(tptr + 6);
- ND_PRINT(" len %u", EXTRACT_BE_U_4(tptr + 6));
+ ND_PRINT(" len %u", GET_BE_U_4(tptr + 6));
}
break;
case EAP_TYPE_FAST:
ND_TCHECK_1(tptr + 5);
ND_PRINT(" FASTv%u",
- EAP_TTLS_VERSION(EXTRACT_U_1((tptr + 5))));
+ EAP_TTLS_VERSION(GET_U_1((tptr + 5))));
ND_PRINT(" flags [%s] 0x%02x,",
- bittok2str(eap_tls_flags_values, "none", EXTRACT_U_1((tptr + 5))),
- EXTRACT_U_1(tptr + 5));
+ bittok2str(eap_tls_flags_values, "none", GET_U_1((tptr + 5))),
+ GET_U_1(tptr + 5));
- if (EAP_TLS_EXTRACT_BIT_L(EXTRACT_U_1(tptr + 5))) {
+ if (EAP_TLS_EXTRACT_BIT_L(GET_U_1(tptr + 5))) {
ND_TCHECK_4(tptr + 6);
- ND_PRINT(" len %u", EXTRACT_BE_U_4(tptr + 6));
+ ND_PRINT(" len %u", GET_BE_U_4(tptr + 6));
}
/* FIXME - TLV attributes follow */
case EAP_TYPE_SIM:
ND_TCHECK_1(tptr + 5);
ND_PRINT(" subtype [%s] 0x%02x,",
- tok2str(eap_aka_subtype_values, "unknown", EXTRACT_U_1((tptr + 5))),
- EXTRACT_U_1(tptr + 5));
+ tok2str(eap_aka_subtype_values, "unknown", GET_U_1((tptr + 5))),
+ GET_U_1(tptr + 5));
/* FIXME - TLV attributes follow */
break;
return;
trunc:
- ND_PRINT("\n\t[|EAP]");
+ nd_print_trunc(ndo);
}
-
-/*
- * Local Variables:
- * c-basic-offset: 4
- * End:
- */