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)