mirror of
https://git.rtems.org/rtems-libbsd/
synced 2025-10-14 22:15:19 +08:00
Update to FreeBSD head 2018-02-01
Git mirror commit d079ae0442af8fa3cfd6d7ede190d04e64a2c0d4. Update #3472.
This commit is contained in:
@@ -82,30 +82,41 @@ static const struct tok z_types[] = {
|
||||
{ Z_PACKET_SERVACK, "serv-ack" },
|
||||
{ Z_PACKET_SERVNAK, "serv-nak" },
|
||||
{ Z_PACKET_CLIENTACK, "client-ack" },
|
||||
{ Z_PACKET_STAT, "stat" }
|
||||
{ Z_PACKET_STAT, "stat" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
|
||||
static char z_buf[256];
|
||||
|
||||
static const char *
|
||||
parse_field(netdissect_options *ndo, const char **pptr, int *len)
|
||||
parse_field(netdissect_options *ndo, const char **pptr, int *len, int *truncated)
|
||||
{
|
||||
const char *s;
|
||||
|
||||
if (*len <= 0 || !pptr || !*pptr)
|
||||
return NULL;
|
||||
if (*pptr > (const char *) ndo->ndo_snapend)
|
||||
return NULL;
|
||||
|
||||
/* Start of string */
|
||||
s = *pptr;
|
||||
while (*pptr <= (const char *) ndo->ndo_snapend && *len >= 0 && **pptr) {
|
||||
/* Scan for the NUL terminator */
|
||||
for (;;) {
|
||||
if (*len == 0) {
|
||||
/* Ran out of packet data without finding it */
|
||||
return NULL;
|
||||
}
|
||||
if (!ND_TTEST(**pptr)) {
|
||||
/* Ran out of captured data without finding it */
|
||||
*truncated = 1;
|
||||
return NULL;
|
||||
}
|
||||
if (**pptr == '\0') {
|
||||
/* Found it */
|
||||
break;
|
||||
}
|
||||
/* Keep scanning */
|
||||
(*pptr)++;
|
||||
(*len)--;
|
||||
}
|
||||
/* Skip the NUL terminator */
|
||||
(*pptr)++;
|
||||
(*len)--;
|
||||
if (*len < 0 || *pptr > (const char *) ndo->ndo_snapend)
|
||||
return NULL;
|
||||
return s;
|
||||
}
|
||||
|
||||
@@ -144,6 +155,7 @@ zephyr_print(netdissect_options *ndo, const u_char *cp, int length)
|
||||
int parselen = length;
|
||||
const char *s;
|
||||
int lose = 0;
|
||||
int truncated = 0;
|
||||
|
||||
/* squelch compiler warnings */
|
||||
|
||||
@@ -154,8 +166,9 @@ zephyr_print(netdissect_options *ndo, const u_char *cp, int length)
|
||||
z.sender = 0;
|
||||
z.recipient = 0;
|
||||
|
||||
#define PARSE_STRING \
|
||||
s = parse_field(ndo, &parse, &parselen); \
|
||||
#define PARSE_STRING \
|
||||
s = parse_field(ndo, &parse, &parselen, &truncated); \
|
||||
if (truncated) goto trunc; \
|
||||
if (!s) lose = 1;
|
||||
|
||||
#define PARSE_FIELD_INT(field) \
|
||||
@@ -188,10 +201,8 @@ zephyr_print(netdissect_options *ndo, const u_char *cp, int length)
|
||||
PARSE_FIELD_INT(z.multi);
|
||||
PARSE_FIELD_STR(z.multi_uid);
|
||||
|
||||
if (lose) {
|
||||
ND_PRINT((ndo, " [|zephyr] (%d)", length));
|
||||
return;
|
||||
}
|
||||
if (lose)
|
||||
goto trunc;
|
||||
|
||||
ND_PRINT((ndo, " zephyr"));
|
||||
if (strncmp(z.version+4, "0.2", 3)) {
|
||||
@@ -323,6 +334,11 @@ zephyr_print(netdissect_options *ndo, const u_char *cp, int length)
|
||||
ND_PRINT((ndo, " to %s", z_triple(z.class, z.inst, z.recipient)));
|
||||
if (*z.opcode)
|
||||
ND_PRINT((ndo, " op %s", z.opcode));
|
||||
return;
|
||||
|
||||
trunc:
|
||||
ND_PRINT((ndo, " [|zephyr] (%d)", length));
|
||||
return;
|
||||
}
|
||||
#ifdef __rtems__
|
||||
#include "rtems-bsd-tcpdump-print-zephyr-data.h"
|
||||
|
Reference in New Issue
Block a user