141c99275SPeter Avalos /*
241c99275SPeter Avalos * Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996
341c99275SPeter Avalos * The Regents of the University of California. All rights reserved.
441c99275SPeter Avalos *
541c99275SPeter Avalos * Redistribution and use in source and binary forms are permitted
641c99275SPeter Avalos * provided that the above copyright notice and this paragraph are
741c99275SPeter Avalos * duplicated in all such forms and that any documentation,
841c99275SPeter Avalos * advertising materials, and other materials related to such
941c99275SPeter Avalos * distribution and use acknowledge that the software was developed
1041c99275SPeter Avalos * by the University of California, Lawrence Berkeley Laboratory,
1141c99275SPeter Avalos * Berkeley, CA. The name of the University may not be used to
1241c99275SPeter Avalos * endorse or promote products derived from this software without
1341c99275SPeter Avalos * specific prior written permission.
1441c99275SPeter Avalos * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
1541c99275SPeter Avalos * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
1641c99275SPeter Avalos * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
1741c99275SPeter Avalos *
1841c99275SPeter Avalos * Initial contribution from Jeff Honig (jch@MITCHELL.CIT.CORNELL.EDU).
1941c99275SPeter Avalos */
2041c99275SPeter Avalos
21411677aeSAaron LI /* \summary: Exterior Gateway Protocol (EGP) printer */
2241c99275SPeter Avalos
23*ed775ee7SAntonio Huete Jimenez /* specification: RFC 827 */
24*ed775ee7SAntonio Huete Jimenez
2541c99275SPeter Avalos #ifdef HAVE_CONFIG_H
26*ed775ee7SAntonio Huete Jimenez #include <config.h>
2741c99275SPeter Avalos #endif
2841c99275SPeter Avalos
29*ed775ee7SAntonio Huete Jimenez #include "netdissect-stdinc.h"
3041c99275SPeter Avalos
31411677aeSAaron LI #include "netdissect.h"
3241c99275SPeter Avalos #include "addrtoname.h"
3341c99275SPeter Avalos #include "extract.h"
3441c99275SPeter Avalos
3541c99275SPeter Avalos struct egp_packet {
36*ed775ee7SAntonio Huete Jimenez nd_uint8_t egp_version;
3741c99275SPeter Avalos #define EGP_VERSION 2
38*ed775ee7SAntonio Huete Jimenez nd_uint8_t egp_type;
3941c99275SPeter Avalos #define EGPT_ACQUIRE 3
4041c99275SPeter Avalos #define EGPT_REACH 5
4141c99275SPeter Avalos #define EGPT_POLL 2
4241c99275SPeter Avalos #define EGPT_UPDATE 1
4341c99275SPeter Avalos #define EGPT_ERROR 8
44*ed775ee7SAntonio Huete Jimenez nd_uint8_t egp_code;
4541c99275SPeter Avalos #define EGPC_REQUEST 0
4641c99275SPeter Avalos #define EGPC_CONFIRM 1
4741c99275SPeter Avalos #define EGPC_REFUSE 2
4841c99275SPeter Avalos #define EGPC_CEASE 3
4941c99275SPeter Avalos #define EGPC_CEASEACK 4
5041c99275SPeter Avalos #define EGPC_HELLO 0
5141c99275SPeter Avalos #define EGPC_HEARDU 1
52*ed775ee7SAntonio Huete Jimenez nd_uint8_t egp_status;
5341c99275SPeter Avalos #define EGPS_UNSPEC 0
5441c99275SPeter Avalos #define EGPS_ACTIVE 1
5541c99275SPeter Avalos #define EGPS_PASSIVE 2
5641c99275SPeter Avalos #define EGPS_NORES 3
5741c99275SPeter Avalos #define EGPS_ADMIN 4
5841c99275SPeter Avalos #define EGPS_GODOWN 5
5941c99275SPeter Avalos #define EGPS_PARAM 6
6041c99275SPeter Avalos #define EGPS_PROTO 7
6141c99275SPeter Avalos #define EGPS_INDET 0
6241c99275SPeter Avalos #define EGPS_UP 1
6341c99275SPeter Avalos #define EGPS_DOWN 2
6441c99275SPeter Avalos #define EGPS_UNSOL 0x80
65*ed775ee7SAntonio Huete Jimenez nd_uint16_t egp_checksum;
66*ed775ee7SAntonio Huete Jimenez nd_uint16_t egp_as;
67*ed775ee7SAntonio Huete Jimenez nd_uint16_t egp_sequence;
6841c99275SPeter Avalos union {
69*ed775ee7SAntonio Huete Jimenez nd_uint16_t egpu_hello;
70*ed775ee7SAntonio Huete Jimenez nd_uint8_t egpu_gws[2];
71*ed775ee7SAntonio Huete Jimenez nd_uint16_t egpu_reason;
7241c99275SPeter Avalos #define EGPR_UNSPEC 0
7341c99275SPeter Avalos #define EGPR_BADHEAD 1
7441c99275SPeter Avalos #define EGPR_BADDATA 2
7541c99275SPeter Avalos #define EGPR_NOREACH 3
7641c99275SPeter Avalos #define EGPR_XSPOLL 4
7741c99275SPeter Avalos #define EGPR_NORESP 5
7841c99275SPeter Avalos #define EGPR_UVERSION 6
7941c99275SPeter Avalos } egp_handg;
8041c99275SPeter Avalos #define egp_hello egp_handg.egpu_hello
8141c99275SPeter Avalos #define egp_intgw egp_handg.egpu_gws[0]
8241c99275SPeter Avalos #define egp_extgw egp_handg.egpu_gws[1]
8341c99275SPeter Avalos #define egp_reason egp_handg.egpu_reason
8441c99275SPeter Avalos union {
85*ed775ee7SAntonio Huete Jimenez nd_uint16_t egpu_poll;
86*ed775ee7SAntonio Huete Jimenez nd_ipv4 egpu_sourcenet;
8741c99275SPeter Avalos } egp_pands;
8841c99275SPeter Avalos #define egp_poll egp_pands.egpu_poll
8941c99275SPeter Avalos #define egp_sourcenet egp_pands.egpu_sourcenet
9041c99275SPeter Avalos };
9141c99275SPeter Avalos
92411677aeSAaron LI static const char *egp_acquire_codes[] = {
9341c99275SPeter Avalos "request",
9441c99275SPeter Avalos "confirm",
9541c99275SPeter Avalos "refuse",
9641c99275SPeter Avalos "cease",
9741c99275SPeter Avalos "cease_ack"
9841c99275SPeter Avalos };
9941c99275SPeter Avalos
100411677aeSAaron LI static const char *egp_acquire_status[] = {
10141c99275SPeter Avalos "unspecified",
10241c99275SPeter Avalos "active_mode",
10341c99275SPeter Avalos "passive_mode",
10441c99275SPeter Avalos "insufficient_resources",
10541c99275SPeter Avalos "administratively_prohibited",
10641c99275SPeter Avalos "going_down",
10741c99275SPeter Avalos "parameter_violation",
10841c99275SPeter Avalos "protocol_violation"
10941c99275SPeter Avalos };
11041c99275SPeter Avalos
111411677aeSAaron LI static const char *egp_reach_codes[] = {
11241c99275SPeter Avalos "hello",
11341c99275SPeter Avalos "i-h-u"
11441c99275SPeter Avalos };
11541c99275SPeter Avalos
116411677aeSAaron LI static const char *egp_status_updown[] = {
11741c99275SPeter Avalos "indeterminate",
11841c99275SPeter Avalos "up",
11941c99275SPeter Avalos "down"
12041c99275SPeter Avalos };
12141c99275SPeter Avalos
122411677aeSAaron LI static const char *egp_reasons[] = {
12341c99275SPeter Avalos "unspecified",
12441c99275SPeter Avalos "bad_EGP_header_format",
12541c99275SPeter Avalos "bad_EGP_data_field_format",
12641c99275SPeter Avalos "reachability_info_unavailable",
12741c99275SPeter Avalos "excessive_polling_rate",
12841c99275SPeter Avalos "no_response",
12941c99275SPeter Avalos "unsupported_version"
13041c99275SPeter Avalos };
13141c99275SPeter Avalos
13241c99275SPeter Avalos static void
egpnr_print(netdissect_options * ndo,const struct egp_packet * egp,u_int length)133*ed775ee7SAntonio Huete Jimenez egpnr_print(netdissect_options *ndo,
134*ed775ee7SAntonio Huete Jimenez const struct egp_packet *egp, u_int length)
13541c99275SPeter Avalos {
136*ed775ee7SAntonio Huete Jimenez const uint8_t *cp;
137411677aeSAaron LI uint32_t addr;
138*ed775ee7SAntonio Huete Jimenez uint32_t net;
139*ed775ee7SAntonio Huete Jimenez u_int netlen;
140*ed775ee7SAntonio Huete Jimenez u_int gateways, distances, networks;
141*ed775ee7SAntonio Huete Jimenez u_int intgw, extgw, t_gateways;
14241c99275SPeter Avalos const char *comma;
14341c99275SPeter Avalos
144*ed775ee7SAntonio Huete Jimenez addr = GET_IPV4_TO_NETWORK_ORDER(egp->egp_sourcenet);
14541c99275SPeter Avalos if (IN_CLASSA(addr)) {
14641c99275SPeter Avalos net = addr & IN_CLASSA_NET;
14741c99275SPeter Avalos netlen = 1;
14841c99275SPeter Avalos } else if (IN_CLASSB(addr)) {
14941c99275SPeter Avalos net = addr & IN_CLASSB_NET;
15041c99275SPeter Avalos netlen = 2;
15141c99275SPeter Avalos } else if (IN_CLASSC(addr)) {
15241c99275SPeter Avalos net = addr & IN_CLASSC_NET;
15341c99275SPeter Avalos netlen = 3;
15441c99275SPeter Avalos } else {
15541c99275SPeter Avalos net = 0;
15641c99275SPeter Avalos netlen = 0;
15741c99275SPeter Avalos }
158411677aeSAaron LI cp = (const uint8_t *)(egp + 1);
159411677aeSAaron LI length -= sizeof(*egp);
16041c99275SPeter Avalos
161*ed775ee7SAntonio Huete Jimenez intgw = GET_U_1(egp->egp_intgw);
162*ed775ee7SAntonio Huete Jimenez extgw = GET_U_1(egp->egp_extgw);
163*ed775ee7SAntonio Huete Jimenez t_gateways = intgw + extgw;
16441c99275SPeter Avalos for (gateways = 0; gateways < t_gateways; ++gateways) {
16541c99275SPeter Avalos /* Pickup host part of gateway address */
16641c99275SPeter Avalos addr = 0;
167411677aeSAaron LI if (length < 4 - netlen)
168411677aeSAaron LI goto trunc;
169*ed775ee7SAntonio Huete Jimenez ND_TCHECK_LEN(cp, 4 - netlen);
17041c99275SPeter Avalos switch (netlen) {
17141c99275SPeter Avalos
17241c99275SPeter Avalos case 1:
173*ed775ee7SAntonio Huete Jimenez addr = GET_U_1(cp);
174*ed775ee7SAntonio Huete Jimenez cp++;
17541c99275SPeter Avalos /* fall through */
17641c99275SPeter Avalos case 2:
177*ed775ee7SAntonio Huete Jimenez addr = (addr << 8) | GET_U_1(cp);
178*ed775ee7SAntonio Huete Jimenez cp++;
17941c99275SPeter Avalos /* fall through */
18041c99275SPeter Avalos case 3:
181*ed775ee7SAntonio Huete Jimenez addr = (addr << 8) | GET_U_1(cp);
182*ed775ee7SAntonio Huete Jimenez cp++;
183*ed775ee7SAntonio Huete Jimenez break;
18441c99275SPeter Avalos }
18541c99275SPeter Avalos addr |= net;
186411677aeSAaron LI length -= 4 - netlen;
187411677aeSAaron LI if (length < 1)
188411677aeSAaron LI goto trunc;
189*ed775ee7SAntonio Huete Jimenez distances = GET_U_1(cp);
190*ed775ee7SAntonio Huete Jimenez cp++;
191411677aeSAaron LI length--;
192*ed775ee7SAntonio Huete Jimenez ND_PRINT(" %s %s ",
193*ed775ee7SAntonio Huete Jimenez gateways < intgw ? "int" : "ext",
194*ed775ee7SAntonio Huete Jimenez ipaddr_string(ndo, (const u_char *)&addr));
19541c99275SPeter Avalos
19641c99275SPeter Avalos comma = "";
197*ed775ee7SAntonio Huete Jimenez ND_PRINT("(");
198*ed775ee7SAntonio Huete Jimenez while (distances != 0) {
199411677aeSAaron LI if (length < 2)
200411677aeSAaron LI goto trunc;
201*ed775ee7SAntonio Huete Jimenez ND_PRINT("%sd%u:", comma, GET_U_1(cp));
202*ed775ee7SAntonio Huete Jimenez cp++;
20341c99275SPeter Avalos comma = ", ";
204*ed775ee7SAntonio Huete Jimenez networks = GET_U_1(cp);
205*ed775ee7SAntonio Huete Jimenez cp++;
206411677aeSAaron LI length -= 2;
207*ed775ee7SAntonio Huete Jimenez while (networks != 0) {
20841c99275SPeter Avalos /* Pickup network number */
209411677aeSAaron LI if (length < 1)
210411677aeSAaron LI goto trunc;
211*ed775ee7SAntonio Huete Jimenez addr = ((uint32_t) GET_U_1(cp)) << 24;
212*ed775ee7SAntonio Huete Jimenez cp++;
213411677aeSAaron LI length--;
21441c99275SPeter Avalos if (IN_CLASSB(addr)) {
215411677aeSAaron LI if (length < 1)
216411677aeSAaron LI goto trunc;
217*ed775ee7SAntonio Huete Jimenez addr |= ((uint32_t) GET_U_1(cp)) << 16;
218*ed775ee7SAntonio Huete Jimenez cp++;
219411677aeSAaron LI length--;
22041c99275SPeter Avalos } else if (!IN_CLASSA(addr)) {
221411677aeSAaron LI if (length < 2)
222411677aeSAaron LI goto trunc;
223*ed775ee7SAntonio Huete Jimenez addr |= ((uint32_t) GET_U_1(cp)) << 16;
224*ed775ee7SAntonio Huete Jimenez cp++;
225*ed775ee7SAntonio Huete Jimenez addr |= ((uint32_t) GET_U_1(cp)) << 8;
226*ed775ee7SAntonio Huete Jimenez cp++;
227411677aeSAaron LI length -= 2;
22841c99275SPeter Avalos }
229*ed775ee7SAntonio Huete Jimenez ND_PRINT(" %s", ipaddr_string(ndo, (const u_char *)&addr));
230*ed775ee7SAntonio Huete Jimenez networks--;
23141c99275SPeter Avalos }
232*ed775ee7SAntonio Huete Jimenez distances--;
23341c99275SPeter Avalos }
234*ed775ee7SAntonio Huete Jimenez ND_PRINT(")");
23541c99275SPeter Avalos }
23641c99275SPeter Avalos return;
23741c99275SPeter Avalos trunc:
238*ed775ee7SAntonio Huete Jimenez nd_print_trunc(ndo);
23941c99275SPeter Avalos }
24041c99275SPeter Avalos
24141c99275SPeter Avalos void
egp_print(netdissect_options * ndo,const uint8_t * bp,u_int length)242411677aeSAaron LI egp_print(netdissect_options *ndo,
243*ed775ee7SAntonio Huete Jimenez const uint8_t *bp, u_int length)
24441c99275SPeter Avalos {
245*ed775ee7SAntonio Huete Jimenez const struct egp_packet *egp;
246*ed775ee7SAntonio Huete Jimenez u_int version;
247*ed775ee7SAntonio Huete Jimenez u_int type;
248*ed775ee7SAntonio Huete Jimenez u_int code;
249*ed775ee7SAntonio Huete Jimenez u_int status;
25041c99275SPeter Avalos
251*ed775ee7SAntonio Huete Jimenez ndo->ndo_protocol = "egp";
252411677aeSAaron LI egp = (const struct egp_packet *)bp;
253*ed775ee7SAntonio Huete Jimenez if (length < sizeof(*egp) || !ND_TTEST_SIZE(egp)) {
254*ed775ee7SAntonio Huete Jimenez nd_print_trunc(ndo);
25541c99275SPeter Avalos return;
25641c99275SPeter Avalos }
257ea7b4bf5SPeter Avalos
258*ed775ee7SAntonio Huete Jimenez version = GET_U_1(egp->egp_version);
259411677aeSAaron LI if (!ndo->ndo_vflag) {
260*ed775ee7SAntonio Huete Jimenez ND_PRINT("EGPv%u, AS %u, seq %u, length %u",
261*ed775ee7SAntonio Huete Jimenez version,
262*ed775ee7SAntonio Huete Jimenez GET_BE_U_2(egp->egp_as),
263*ed775ee7SAntonio Huete Jimenez GET_BE_U_2(egp->egp_sequence),
264*ed775ee7SAntonio Huete Jimenez length);
265ea7b4bf5SPeter Avalos return;
266ea7b4bf5SPeter Avalos } else
267*ed775ee7SAntonio Huete Jimenez ND_PRINT("EGPv%u, length %u",
268*ed775ee7SAntonio Huete Jimenez version,
269*ed775ee7SAntonio Huete Jimenez length);
27041c99275SPeter Avalos
271*ed775ee7SAntonio Huete Jimenez if (version != EGP_VERSION) {
272*ed775ee7SAntonio Huete Jimenez ND_PRINT("[version %u]", version);
27341c99275SPeter Avalos return;
27441c99275SPeter Avalos }
27541c99275SPeter Avalos
276*ed775ee7SAntonio Huete Jimenez type = GET_U_1(egp->egp_type);
277*ed775ee7SAntonio Huete Jimenez code = GET_U_1(egp->egp_code);
278*ed775ee7SAntonio Huete Jimenez status = GET_U_1(egp->egp_status);
27941c99275SPeter Avalos
28041c99275SPeter Avalos switch (type) {
28141c99275SPeter Avalos case EGPT_ACQUIRE:
282*ed775ee7SAntonio Huete Jimenez ND_PRINT(" acquire");
28341c99275SPeter Avalos switch (code) {
28441c99275SPeter Avalos case EGPC_REQUEST:
28541c99275SPeter Avalos case EGPC_CONFIRM:
286*ed775ee7SAntonio Huete Jimenez ND_PRINT(" %s", egp_acquire_codes[code]);
28741c99275SPeter Avalos switch (status) {
28841c99275SPeter Avalos case EGPS_UNSPEC:
28941c99275SPeter Avalos case EGPS_ACTIVE:
29041c99275SPeter Avalos case EGPS_PASSIVE:
291*ed775ee7SAntonio Huete Jimenez ND_PRINT(" %s", egp_acquire_status[status]);
29241c99275SPeter Avalos break;
29341c99275SPeter Avalos
29441c99275SPeter Avalos default:
295*ed775ee7SAntonio Huete Jimenez ND_PRINT(" [status %u]", status);
29641c99275SPeter Avalos break;
29741c99275SPeter Avalos }
298*ed775ee7SAntonio Huete Jimenez ND_PRINT(" hello:%u poll:%u",
299*ed775ee7SAntonio Huete Jimenez GET_BE_U_2(egp->egp_hello),
300*ed775ee7SAntonio Huete Jimenez GET_BE_U_2(egp->egp_poll));
30141c99275SPeter Avalos break;
30241c99275SPeter Avalos
30341c99275SPeter Avalos case EGPC_REFUSE:
30441c99275SPeter Avalos case EGPC_CEASE:
30541c99275SPeter Avalos case EGPC_CEASEACK:
306*ed775ee7SAntonio Huete Jimenez ND_PRINT(" %s", egp_acquire_codes[code]);
30741c99275SPeter Avalos switch (status ) {
30841c99275SPeter Avalos case EGPS_UNSPEC:
30941c99275SPeter Avalos case EGPS_NORES:
31041c99275SPeter Avalos case EGPS_ADMIN:
31141c99275SPeter Avalos case EGPS_GODOWN:
31241c99275SPeter Avalos case EGPS_PARAM:
31341c99275SPeter Avalos case EGPS_PROTO:
314*ed775ee7SAntonio Huete Jimenez ND_PRINT(" %s", egp_acquire_status[status]);
31541c99275SPeter Avalos break;
31641c99275SPeter Avalos
31741c99275SPeter Avalos default:
318*ed775ee7SAntonio Huete Jimenez ND_PRINT("[status %u]", status);
31941c99275SPeter Avalos break;
32041c99275SPeter Avalos }
32141c99275SPeter Avalos break;
32241c99275SPeter Avalos
32341c99275SPeter Avalos default:
324*ed775ee7SAntonio Huete Jimenez ND_PRINT("[code %u]", code);
32541c99275SPeter Avalos break;
32641c99275SPeter Avalos }
32741c99275SPeter Avalos break;
32841c99275SPeter Avalos
32941c99275SPeter Avalos case EGPT_REACH:
33041c99275SPeter Avalos switch (code) {
33141c99275SPeter Avalos
33241c99275SPeter Avalos case EGPC_HELLO:
33341c99275SPeter Avalos case EGPC_HEARDU:
334*ed775ee7SAntonio Huete Jimenez ND_PRINT(" %s", egp_reach_codes[code]);
33541c99275SPeter Avalos if (status <= EGPS_DOWN)
336*ed775ee7SAntonio Huete Jimenez ND_PRINT(" state:%s", egp_status_updown[status]);
33741c99275SPeter Avalos else
338*ed775ee7SAntonio Huete Jimenez ND_PRINT(" [status %u]", status);
33941c99275SPeter Avalos break;
34041c99275SPeter Avalos
34141c99275SPeter Avalos default:
342*ed775ee7SAntonio Huete Jimenez ND_PRINT("[reach code %u]", code);
34341c99275SPeter Avalos break;
34441c99275SPeter Avalos }
34541c99275SPeter Avalos break;
34641c99275SPeter Avalos
34741c99275SPeter Avalos case EGPT_POLL:
348*ed775ee7SAntonio Huete Jimenez ND_PRINT(" poll");
349*ed775ee7SAntonio Huete Jimenez if (status <= EGPS_DOWN)
350*ed775ee7SAntonio Huete Jimenez ND_PRINT(" state:%s", egp_status_updown[status]);
35141c99275SPeter Avalos else
352*ed775ee7SAntonio Huete Jimenez ND_PRINT(" [status %u]", status);
353*ed775ee7SAntonio Huete Jimenez ND_PRINT(" net:%s", GET_IPADDR_STRING(egp->egp_sourcenet));
35441c99275SPeter Avalos break;
35541c99275SPeter Avalos
35641c99275SPeter Avalos case EGPT_UPDATE:
357*ed775ee7SAntonio Huete Jimenez ND_PRINT(" update");
35841c99275SPeter Avalos if (status & EGPS_UNSOL) {
35941c99275SPeter Avalos status &= ~EGPS_UNSOL;
360*ed775ee7SAntonio Huete Jimenez ND_PRINT(" unsolicited");
36141c99275SPeter Avalos }
36241c99275SPeter Avalos if (status <= EGPS_DOWN)
363*ed775ee7SAntonio Huete Jimenez ND_PRINT(" state:%s", egp_status_updown[status]);
36441c99275SPeter Avalos else
365*ed775ee7SAntonio Huete Jimenez ND_PRINT(" [status %u]", status);
366*ed775ee7SAntonio Huete Jimenez ND_PRINT(" %s int %u ext %u",
367*ed775ee7SAntonio Huete Jimenez GET_IPADDR_STRING(egp->egp_sourcenet),
368*ed775ee7SAntonio Huete Jimenez GET_U_1(egp->egp_intgw),
369*ed775ee7SAntonio Huete Jimenez GET_U_1(egp->egp_extgw));
370411677aeSAaron LI if (ndo->ndo_vflag)
371*ed775ee7SAntonio Huete Jimenez egpnr_print(ndo, egp, length);
37241c99275SPeter Avalos break;
37341c99275SPeter Avalos
37441c99275SPeter Avalos case EGPT_ERROR:
375*ed775ee7SAntonio Huete Jimenez ND_PRINT(" error");
37641c99275SPeter Avalos if (status <= EGPS_DOWN)
377*ed775ee7SAntonio Huete Jimenez ND_PRINT(" state:%s", egp_status_updown[status]);
37841c99275SPeter Avalos else
379*ed775ee7SAntonio Huete Jimenez ND_PRINT(" [status %u]", status);
38041c99275SPeter Avalos
381*ed775ee7SAntonio Huete Jimenez if (GET_BE_U_2(egp->egp_reason) <= EGPR_UVERSION)
382*ed775ee7SAntonio Huete Jimenez ND_PRINT(" %s",
383*ed775ee7SAntonio Huete Jimenez egp_reasons[GET_BE_U_2(egp->egp_reason)]);
38441c99275SPeter Avalos else
385*ed775ee7SAntonio Huete Jimenez ND_PRINT(" [reason %u]", GET_BE_U_2(egp->egp_reason));
38641c99275SPeter Avalos break;
38741c99275SPeter Avalos
38841c99275SPeter Avalos default:
389*ed775ee7SAntonio Huete Jimenez ND_PRINT("[type %u]", type);
39041c99275SPeter Avalos break;
39141c99275SPeter Avalos }
39241c99275SPeter Avalos }
393