#include <config.h>
#endif
-#include <string.h>
-
#include "netdissect-stdinc.h"
#include "netdissect.h"
};
static void
-egpnrprint(netdissect_options *ndo,
+egpnr_print(netdissect_options *ndo,
const struct egp_packet *egp, u_int length)
{
const uint8_t *cp;
u_int intgw, extgw, t_gateways;
const char *comma;
- addr = EXTRACT_IPV4_TO_NETWORK_ORDER(egp->egp_sourcenet);
+ addr = GET_IPV4_TO_NETWORK_ORDER(egp->egp_sourcenet);
if (IN_CLASSA(addr)) {
net = addr & IN_CLASSA_NET;
netlen = 1;
cp = (const uint8_t *)(egp + 1);
length -= sizeof(*egp);
- intgw = EXTRACT_U_1(egp->egp_intgw);
- extgw = EXTRACT_U_1(egp->egp_extgw);
+ intgw = GET_U_1(egp->egp_intgw);
+ extgw = GET_U_1(egp->egp_extgw);
t_gateways = intgw + extgw;
for (gateways = 0; gateways < t_gateways; ++gateways) {
/* Pickup host part of gateway address */
switch (netlen) {
case 1:
- addr = EXTRACT_U_1(cp);
+ addr = GET_U_1(cp);
cp++;
/* fall through */
case 2:
- addr = (addr << 8) | EXTRACT_U_1(cp);
+ addr = (addr << 8) | GET_U_1(cp);
cp++;
/* fall through */
case 3:
- addr = (addr << 8) | EXTRACT_U_1(cp);
+ addr = (addr << 8) | GET_U_1(cp);
cp++;
break;
}
length -= 4 - netlen;
if (length < 1)
goto trunc;
- ND_TCHECK_1(cp);
- distances = EXTRACT_U_1(cp);
+ distances = GET_U_1(cp);
cp++;
length--;
ND_PRINT(" %s %s ",
gateways < intgw ? "int" : "ext",
- ipaddr_string(ndo, (const u_char *)&addr));
+ ipaddr_string(ndo, (const u_char *)&addr)); /* local buffer, not packet data; don't use GET_IPADDR_STRING() */
comma = "";
ND_PRINT("(");
while (distances != 0) {
if (length < 2)
goto trunc;
- ND_TCHECK_2(cp);
- ND_PRINT("%sd%u:", comma, EXTRACT_U_1(cp));
+ ND_PRINT("%sd%u:", comma, GET_U_1(cp));
cp++;
comma = ", ";
- networks = EXTRACT_U_1(cp);
+ networks = GET_U_1(cp);
cp++;
length -= 2;
while (networks != 0) {
/* Pickup network number */
if (length < 1)
goto trunc;
- ND_TCHECK_1(cp);
- addr = ((uint32_t) EXTRACT_U_1(cp)) << 24;
+ addr = ((uint32_t) GET_U_1(cp)) << 24;
cp++;
length--;
if (IN_CLASSB(addr)) {
if (length < 1)
goto trunc;
- ND_TCHECK_1(cp);
- addr |= ((uint32_t) EXTRACT_U_1(cp)) << 16;
+ addr |= ((uint32_t) GET_U_1(cp)) << 16;
cp++;
length--;
} else if (!IN_CLASSA(addr)) {
if (length < 2)
goto trunc;
- ND_TCHECK_2(cp);
- addr |= ((uint32_t) EXTRACT_U_1(cp)) << 16;
+ addr |= ((uint32_t) GET_U_1(cp)) << 16;
cp++;
- addr |= ((uint32_t) EXTRACT_U_1(cp)) << 8;
+ addr |= ((uint32_t) GET_U_1(cp)) << 8;
cp++;
length -= 2;
}
- ND_PRINT(" %s", ipaddr_string(ndo, (const u_char *)&addr));
+ ND_PRINT(" %s", ipaddr_string(ndo, (const u_char *)&addr)); /* local buffer, not packet data; don't use GET_IPADDR_STRING() */
networks--;
}
distances--;
}
return;
trunc:
- ND_PRINT("[|]");
+ nd_print_trunc(ndo);
}
void
u_int code;
u_int status;
+ ndo->ndo_protocol = "egp";
egp = (const struct egp_packet *)bp;
if (length < sizeof(*egp) || !ND_TTEST_SIZE(egp)) {
- ND_PRINT("[|egp]");
+ nd_print_trunc(ndo);
return;
}
- version = EXTRACT_U_1(egp->egp_version);
+ version = GET_U_1(egp->egp_version);
if (!ndo->ndo_vflag) {
ND_PRINT("EGPv%u, AS %u, seq %u, length %u",
version,
- EXTRACT_BE_U_2(egp->egp_as),
- EXTRACT_BE_U_2(egp->egp_sequence),
+ GET_BE_U_2(egp->egp_as),
+ GET_BE_U_2(egp->egp_sequence),
length);
return;
} else
return;
}
- type = EXTRACT_U_1(egp->egp_type);
- code = EXTRACT_U_1(egp->egp_code);
- status = EXTRACT_U_1(egp->egp_status);
+ type = GET_U_1(egp->egp_type);
+ code = GET_U_1(egp->egp_code);
+ status = GET_U_1(egp->egp_status);
switch (type) {
case EGPT_ACQUIRE:
break;
}
ND_PRINT(" hello:%u poll:%u",
- EXTRACT_BE_U_2(egp->egp_hello),
- EXTRACT_BE_U_2(egp->egp_poll));
+ GET_BE_U_2(egp->egp_hello),
+ GET_BE_U_2(egp->egp_poll));
break;
case EGPC_REFUSE:
ND_PRINT(" state:%s", egp_status_updown[status]);
else
ND_PRINT(" [status %u]", status);
- ND_PRINT(" net:%s", ipaddr_string(ndo, egp->egp_sourcenet));
+ ND_PRINT(" net:%s", GET_IPADDR_STRING(egp->egp_sourcenet));
break;
case EGPT_UPDATE:
else
ND_PRINT(" [status %u]", status);
ND_PRINT(" %s int %u ext %u",
- ipaddr_string(ndo, egp->egp_sourcenet),
- EXTRACT_U_1(egp->egp_intgw),
- EXTRACT_U_1(egp->egp_extgw));
+ GET_IPADDR_STRING(egp->egp_sourcenet),
+ GET_U_1(egp->egp_intgw),
+ GET_U_1(egp->egp_extgw));
if (ndo->ndo_vflag)
- egpnrprint(ndo, egp, length);
+ egpnr_print(ndo, egp, length);
break;
case EGPT_ERROR:
else
ND_PRINT(" [status %u]", status);
- if (EXTRACT_BE_U_2(egp->egp_reason) <= EGPR_UVERSION)
- ND_PRINT(" %s", egp_reasons[EXTRACT_BE_U_2(egp->egp_reason)]);
+ if (GET_BE_U_2(egp->egp_reason) <= EGPR_UVERSION)
+ ND_PRINT(" %s",
+ egp_reasons[GET_BE_U_2(egp->egp_reason)]);
else
- ND_PRINT(" [reason %u]", EXTRACT_BE_U_2(egp->egp_reason));
+ ND_PRINT(" [reason %u]", GET_BE_U_2(egp->egp_reason));
break;
default: