tcpdump mailing list archives
[PATCH 1/4] Fix mixing recursive and flat Path Data
From: Jamal Hadi Salim <hadi () cyberus ca>
Date: Tue, 25 Jan 2011 08:16:15 -0500
+--PD
. +--PD
. |
. |
. +--PD
.
.
+--PD
|
|
+--PD
or
+--PD
. +--PD
. +
. |
. +--PD
. +
. |
. +-- PD
. +
. |
. +-- PD
+--PD
|
|
+--PD
etc
Signed-off-by: Jamal Hadi Salim <hadi () mojatatu com>
---
print-forces.c | 18 +++++++++++++++---
1 files changed, 15 insertions(+), 3 deletions(-)
diff --git a/print-forces.c b/print-forces.c
index 26e83d3..9833892 100644
--- a/print-forces.c
+++ b/print-forces.c
@@ -285,6 +285,7 @@ pdatacnt_print(register const u_char * pptr, register u_int len,
rc = ops->print((const u_char *)pdtlv,
tll + pad + TLV_HDRL, op_msk,
indent + 2);
+ len -= (TLV_HDRL + pad + tll);
} else {
printf("Invalid path data content type 0x%x len %d\n",
type, EXTRACT_16BITS(&pdtlv->length));
@@ -298,7 +299,7 @@ pd_err:
}
}
}
- return 0;
+ return len;
trunc:
fputs("[|forces]", stdout);
@@ -312,6 +313,8 @@ pdata_print(register const u_char * pptr, register u_int len,
const struct pathdata_h *pdh = (struct pathdata_h *)pptr;
char *ib = indent_pr(indent, 0);
u_int minsize = 0;
+ int more_pd = 0;
+ u_int32_t idcnt = 0;
TCHECK(*pdh);
if (len < sizeof(struct pathdata_h))
@@ -326,7 +329,8 @@ pdata_print(register const u_char * pptr, register u_int len,
}
pptr += sizeof(struct pathdata_h);
len -= sizeof(struct pathdata_h);
- minsize = EXTRACT_16BITS(&pdh->pIDcnt) * 4;
+ idcnt = EXTRACT_16BITS(&pdh->pIDcnt);
+ minsize = idcnt * 4;
if (len < minsize) {
printf("\t\t\ttruncated IDs expected %uB got %uB\n", minsize,
len);
@@ -334,7 +338,15 @@ pdata_print(register const u_char * pptr, register u_int len,
printf("]\n");
return -1;
}
- return pdatacnt_print(pptr, len, EXTRACT_16BITS(&pdh->pIDcnt), op_msk, indent);
+ more_pd = pdatacnt_print(pptr, len, idcnt, op_msk, indent);
+ if (more_pd > 0) {
+ int consumed = len - more_pd;
+ pptr += consumed;
+ len = more_pd;
+ /* XXX: Argh, recurse some more */
+ return recpdoptlv_print(pptr, len, op_msk, indent+1);
+ } else
+ return 0;
trunc:
fputs("[|forces]", stdout);
--
1.7.0.4
-
This is the tcpdump-workers list.
Visit https://cod.sandelman.ca/ to unsubscribe.
Current thread:
- [PATCH 0/4] ForCES fixes Jamal Hadi Salim (Jan 25)
- [PATCH 2/4] Fix indent space when we have padded data Jamal Hadi Salim (Jan 25)
- Re: [PATCH 2/4] Fix indent space when we have padded data Michael Richardson (Jan 25)
- Re: [PATCH 2/4] Fix indent space when we have padded data Jamal Hadi Salim (Jan 25)
- Re: [PATCH 2/4] Fix indent space when we have padded data Jamal Hadi Salim (Jan 25)
- Re: [PATCH 2/4] Fix indent space when we have padded data Michael Richardson (Jan 25)
- [PATCH 1/4] Fix mixing recursive and flat Path Data Jamal Hadi Salim (Jan 25)
- [PATCH 3/4] Use proper type (16bit) when extracting path id count Jamal Hadi Salim (Jan 25)
- [PATCH 2/4] Fix indent space when we have padded data Jamal Hadi Salim (Jan 25)
