print-rip.c revision 2949f58a438f6fd85f66a8b7ed4708042cde4b37
12949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 22949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Copyright (c) 1989, 1990, 1991, 1993, 1994, 1996 32949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * The Regents of the University of California. All rights reserved. 42949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 52949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Redistribution and use in source and binary forms, with or without 62949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * modification, are permitted provided that: (1) source code distributions 72949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * retain the above copyright notice and this paragraph in its entirety, (2) 82949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * distributions including binary code include the above copyright notice and 92949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * this paragraph in its entirety in the documentation or other materials 102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * provided with the distribution, and (3) all advertising materials mentioning 112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * features or use of this software display the following acknowledgement: 122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * ``This product includes software developed by the University of California, 132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of 142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * the University nor the names of its contributors may be used to endorse 152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * or promote products derived from this software without specific prior 162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * written permission. 172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED 182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF 192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifndef lint 232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const char rcsid[] _U_ = 242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "@(#) $Header: /tcpdump/master/tcpdump/print-rip.c,v 1.57 2003/11/16 09:36:34 guy Exp $ (LBL)"; 252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef HAVE_CONFIG_H 282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "config.h" 292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <tcpdump-stdinc.h> 322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <stdio.h> 342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <string.h> 352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "interface.h" 372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "addrtoname.h" 382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "extract.h" /* must come after interface.h */ 392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct rip { 412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int8_t rip_cmd; /* request/response */ 422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int8_t rip_vers; /* protocol version # */ 432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int8_t unused[2]; /* unused */ 442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define RIPCMD_REQUEST 1 /* want info */ 472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define RIPCMD_RESPONSE 2 /* responding to request */ 482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define RIPCMD_TRACEON 3 /* turn tracing on */ 492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define RIPCMD_TRACEOFF 4 /* turn it off */ 502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define RIPCMD_POLL 5 /* want info from everybody */ 512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define RIPCMD_POLLENTRY 6 /* poll for entry */ 522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const struct tok rip_cmd_values[] = { 542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { RIPCMD_REQUEST, "Request" }, 552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { RIPCMD_RESPONSE, "Response" }, 562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { RIPCMD_TRACEON, "Trace on" }, 572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { RIPCMD_TRACEOFF, "Trace off" }, 582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { RIPCMD_POLL, "Poll" }, 592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { RIPCMD_POLLENTRY, "Poll Entry" }, 602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0, NULL} 612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define RIP_AUTHLEN 16 642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define RIP_ROUTELEN 20 652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * rfc 1723 682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 0 1 2 3 3 702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * | Command (1) | Version (1) | unused | 732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +---------------+---------------+-------------------------------+ 742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * | Address Family Identifier (2) | Route Tag (2) | 752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +-------------------------------+-------------------------------+ 762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * | IP Address (4) | 772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +---------------------------------------------------------------+ 782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * | Subnet Mask (4) | 792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +---------------------------------------------------------------+ 802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * | Next Hop (4) | 812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +---------------------------------------------------------------+ 822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * | Metric (4) | 832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +---------------------------------------------------------------+ 842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct rip_netinfo { 882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int16_t rip_family; 892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int16_t rip_tag; 902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int32_t rip_dest; 912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int32_t rip_dest_mask; 922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int32_t rip_router; 932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int32_t rip_metric; /* cost of route */ 942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void 972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectrip_entry_print_v1(register const struct rip_netinfo *ni) 982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register u_short family; 1002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* RFC 1058 */ 1022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project family = EXTRACT_16BITS(&ni->rip_family); 1032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (family != AF_INET) { 1042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("\n\t AFI: %u:", family); 1052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project print_unknown_data((u_int8_t *)&ni->rip_family,"\n\t ",RIP_ROUTELEN); 1062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 1072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 1082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (EXTRACT_16BITS(&ni->rip_tag) || 1092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project EXTRACT_32BITS(&ni->rip_dest_mask) || 1102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project EXTRACT_32BITS(&ni->rip_router)) { 1112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* MBZ fields not zero */ 1122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project print_unknown_data((u_int8_t *)&ni->rip_family,"\n\t ",RIP_ROUTELEN); 1132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 1142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } /* AF_INET */ 1152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("\n\t %s, metric: %u", 1162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ipaddr_string(&ni->rip_dest), 1172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project EXTRACT_32BITS(&ni->rip_metric)); 1182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 1192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void 1212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectrip_entry_print_v2(register const struct rip_netinfo *ni) 1222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 1232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register u_char *p; 1242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register u_short family; 1252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_char buf[RIP_AUTHLEN]; 1262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project family = EXTRACT_16BITS(&ni->rip_family); 1282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (family == 0xFFFF) { /* 16 bytes authentication ? */ 1292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (EXTRACT_16BITS(&ni->rip_tag) == 2) { /* simple text authentication ? */ 1302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project memcpy(buf, &ni->rip_dest, sizeof(buf)); 1312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project buf[sizeof(buf)-1] = '\0'; 1322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (p = buf; *p; p++) { 1332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (!isprint(*p)) 1342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 1352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 1362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("\n\t Simple Text Authentication data: %s", buf); 1372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } else { 1382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("\n\t Unknown (%u) Authentication data:", 1392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project EXTRACT_16BITS(&ni->rip_tag)); 1402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project print_unknown_data((u_int8_t *)&ni->rip_dest,"\n\t ",RIP_AUTHLEN); 1412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 1422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } else if (family != AF_INET) { 1432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("\n\t AFI: %u", family); 1442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project print_unknown_data((u_int8_t *)&ni->rip_tag,"\n\t ",RIP_ROUTELEN-2); 1452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 1462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } else { /* AF_INET */ 1472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("\n\t AFI: IPv4: %15s/%-2d, tag 0x%04x, metric: %u, next-hop: ", 1482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ipaddr_string(&ni->rip_dest), 1492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project mask2plen(EXTRACT_32BITS(&ni->rip_dest_mask)), 1502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project EXTRACT_16BITS(&ni->rip_tag), 1512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project EXTRACT_32BITS(&ni->rip_metric)); 1522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (EXTRACT_32BITS(&ni->rip_router)) 1532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("%s", ipaddr_string(&ni->rip_router)); 1542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else 1552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("self"); 1562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 1572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 1582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectvoid 1602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectrip_print(const u_char *dat, u_int length) 1612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 1622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register const struct rip *rp; 1632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register const struct rip_netinfo *ni; 1642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register u_int i, j; 1652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register int trunc; 1662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (snapend < dat) { 1682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" [|rip]"); 1692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 1702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 1712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i = snapend - dat; 1722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (i > length) 1732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i = length; 1742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (i < sizeof(*rp)) { 1752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" [|rip]"); 1762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 1772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 1782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i -= sizeof(*rp); 1792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project rp = (struct rip *)dat; 1812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("%sRIPv%u", 1832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (vflag >= 1) ? "\n\t" : "", 1842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project rp->rip_vers); 1852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project switch (rp->rip_vers) { 1872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 0: 1882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 1892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * RFC 1058. 1902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 1912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * XXX - RFC 1058 says 1922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 1932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 0 Datagrams whose version number is zero are to be ignored. 1942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * These are from a previous version of the protocol, whose 1952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * packet format was machine-specific. 1962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 1972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * so perhaps we should just dump the packet, in hex. 1982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 1992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project print_unknown_data((u_int8_t *)&rp->rip_cmd,"\n\t",length); 2002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 2012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project default: 2022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* dump version and lets see if we know the commands name*/ 2032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(", %s, length: %u", 2042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tok2str(rip_cmd_values, 2052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "unknown command (%u)", 2062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project rp->rip_cmd), 2072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project length); 2082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (vflag < 1) 2102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 2112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project switch (rp->rip_cmd) { 2132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case RIPCMD_RESPONSE: 2142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project j = length / sizeof(*ni); 2152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(", routes: %u",j); 2162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project trunc = (i / sizeof(*ni)) != j; 2172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ni = (struct rip_netinfo *)(rp + 1); 2182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (; i >= sizeof(*ni); ++ni) { 2192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (rp->rip_vers == 1) 2202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project rip_entry_print_v1(ni); 2212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else if (rp->rip_vers == 2) 2222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project rip_entry_print_v2(ni); 2232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else 2242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 2252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i -= sizeof(*ni); 2262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 2272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (trunc) 2282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("[|rip]"); 2292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 2302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case RIPCMD_REQUEST: 2322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case RIPCMD_TRACEOFF: 2332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case RIPCMD_POLL: 2342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case RIPCMD_POLLENTRY: 2352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 2362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case RIPCMD_TRACEON: 2382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* fall through */ 2392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project default: 2402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (vflag <= 1) { 2412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if(!print_unknown_data((u_int8_t *)rp,"\n\t",length)) 2422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 2432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 2442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 2452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 2462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* do we want to see an additionally hexdump ? */ 2472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (vflag> 1) { 2482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if(!print_unknown_data((u_int8_t *)rp,"\n\t",length)) 2492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 2502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 2512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 2522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 2532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 255