diff options
author | Denis Ovsienko <infrastation@yandex.ru> | 2014-03-04 13:55:24 +0400 |
---|---|---|
committer | Denis Ovsienko <infrastation@yandex.ru> | 2014-03-04 14:18:55 +0400 |
commit | 121340f51409c65277b29b89d3ddbc8f1083d051 (patch) | |
tree | 7354b019a83bb09ea4601a83c613707c11105de2 /print-igrp.c | |
parent | b011ece874d3cb6bf4da8837404fff67fe5217ab (diff) | |
download | tcpdump-121340f51409c65277b29b89d3ddbc8f1083d051.tar.gz |
NDOize HSRP, IGRP and UDLD decoders
Diffstat (limited to 'print-igrp.c')
-rw-r--r-- | print-igrp.c | 51 |
1 files changed, 24 insertions, 27 deletions
diff --git a/print-igrp.c b/print-igrp.c index dfbc4025..8234a88d 100644 --- a/print-igrp.c +++ b/print-igrp.c @@ -27,10 +27,7 @@ #include <tcpdump-stdinc.h> -#include <stdio.h> - -#include "interface.h" -#include "ip.h" +#include "netdissect.h" #include "extract.h" /* must come after interface.h */ /* Cisco IGRP definitions */ @@ -67,21 +64,21 @@ struct igrprte { #define IGRP_RTE_SIZE 14 /* don't believe sizeof ! */ static void -igrp_entry_print(register struct igrprte *igr, register int is_interior, - register int is_exterior) +igrp_entry_print(netdissect_options *ndo, register struct igrprte *igr, + register int is_interior, register int is_exterior) { register u_int delay, bandwidth; u_int metric, mtu; if (is_interior) - printf(" *.%d.%d.%d", igr->igr_net[0], - igr->igr_net[1], igr->igr_net[2]); + ND_PRINT((ndo, " *.%d.%d.%d", igr->igr_net[0], + igr->igr_net[1], igr->igr_net[2])); else if (is_exterior) - printf(" X%d.%d.%d.0", igr->igr_net[0], - igr->igr_net[1], igr->igr_net[2]); + ND_PRINT((ndo, " X%d.%d.%d.0", igr->igr_net[0], + igr->igr_net[1], igr->igr_net[2])); else - printf(" %d.%d.%d.0", igr->igr_net[0], - igr->igr_net[1], igr->igr_net[2]); + ND_PRINT((ndo, " %d.%d.%d.0", igr->igr_net[0], + igr->igr_net[1], igr->igr_net[2])); delay = EXTRACT_24BITS(igr->igr_dly); bandwidth = EXTRACT_24BITS(igr->igr_bw); @@ -90,10 +87,10 @@ igrp_entry_print(register struct igrprte *igr, register int is_interior, metric = 0xffffff; mtu = EXTRACT_16BITS(igr->igr_mtu); - printf(" d=%d b=%d r=%d l=%d M=%d mtu=%d in %d hops", + ND_PRINT((ndo, " d=%d b=%d r=%d l=%d M=%d mtu=%d in %d hops", 10 * delay, bandwidth == 0 ? 0 : 10000000 / bandwidth, igr->igr_rel, igr->igr_ld, metric, - mtu, igr->igr_hct); + mtu, igr->igr_hct)); } static const struct tok op2str[] = { @@ -103,7 +100,7 @@ static const struct tok op2str[] = { }; void -igrp_print(register const u_char *bp, u_int length, const u_char *bp2 _U_) +igrp_print(netdissect_options *ndo, register const u_char *bp, u_int length) { register struct igrphdr *hdr; register u_char *cp; @@ -111,39 +108,39 @@ igrp_print(register const u_char *bp, u_int length, const u_char *bp2 _U_) hdr = (struct igrphdr *)bp; cp = (u_char *)(hdr + 1); - (void)printf("igrp:"); + ND_PRINT((ndo, "igrp:")); /* Header */ - TCHECK(*hdr); + ND_TCHECK(*hdr); nint = EXTRACT_16BITS(&hdr->ig_ni); nsys = EXTRACT_16BITS(&hdr->ig_ns); next = EXTRACT_16BITS(&hdr->ig_nx); - (void)printf(" %s V%d edit=%d AS=%d (%d/%d/%d)", + ND_PRINT((ndo, " %s V%d edit=%d AS=%d (%d/%d/%d)", tok2str(op2str, "op-#%d", IGRP_OP(hdr->ig_vop)), IGRP_V(hdr->ig_vop), hdr->ig_ed, EXTRACT_16BITS(&hdr->ig_as), nint, nsys, - next); + next)); length -= sizeof(*hdr); while (length >= IGRP_RTE_SIZE) { if (nint > 0) { - TCHECK2(*cp, IGRP_RTE_SIZE); - igrp_entry_print((struct igrprte *)cp, 1, 0); + ND_TCHECK2(*cp, IGRP_RTE_SIZE); + igrp_entry_print(ndo, (struct igrprte *)cp, 1, 0); --nint; } else if (nsys > 0) { - TCHECK2(*cp, IGRP_RTE_SIZE); - igrp_entry_print((struct igrprte *)cp, 0, 0); + ND_TCHECK2(*cp, IGRP_RTE_SIZE); + igrp_entry_print(ndo, (struct igrprte *)cp, 0, 0); --nsys; } else if (next > 0) { - TCHECK2(*cp, IGRP_RTE_SIZE); - igrp_entry_print((struct igrprte *)cp, 0, 1); + ND_TCHECK2(*cp, IGRP_RTE_SIZE); + igrp_entry_print(ndo, (struct igrprte *)cp, 0, 1); --next; } else { - (void)printf(" [extra bytes %d]", length); + ND_PRINT((ndo, " [extra bytes %d]", length)); break; } cp += IGRP_RTE_SIZE; @@ -152,5 +149,5 @@ igrp_print(register const u_char *bp, u_int length, const u_char *bp2 _U_) if (nint == 0 && nsys == 0 && next == 0) return; trunc: - fputs(" [|igrp]", stdout); + ND_PRINT((ndo, " [|igrp]")); } |