12949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 22949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Copyright (c) 2003 Bruce M. Simpson <bms@spc.org> 32949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 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 the following conditions 72949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * are met: 82949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 92949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * notice, this list of conditions and the following disclaimer. 102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * documentation and/or other materials provided with the distribution. 132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 3. All advertising materials mentioning features or use of this software 142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * must display the following acknowledgement: 152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * This product includes software developed by Bruce M. Simpson. 162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 4. Neither the name of Bruce M. Simpson nor the names of co- 172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * contributors may be used to endorse or promote products derived 182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * from this software without specific prior written permission. 192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY Bruce M. Simpson AND CONTRIBUTORS 212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Bruce M. Simpson OR CONTRIBUTORS 242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * POSSIBILITY OF SUCH DAMAGE. 312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifndef lint 342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const char rcsid[] _U_ = 3553f17a9db278d33517d9888dd77848f554522a38JP Abgrall "@(#) $Header: /tcpdump/master/tcpdump/print-aodv.c,v 1.11 2004-03-24 00:30:19 guy Exp $ (LBL)"; 362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef HAVE_CONFIG_H 392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "config.h" 402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <tcpdump-stdinc.h> 432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <stddef.h> 452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <stdio.h> 462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <ctype.h> 472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <string.h> 482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "interface.h" 502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "addrtoname.h" 512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "extract.h" /* must come after interface.h */ 522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "aodv.h" 542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void 562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectaodv_extension(const struct aodv_ext *ep, u_int length) 572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int i; 592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const struct aodv_hello *ah; 602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project switch (ep->type) { 622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case AODV_EXT_HELLO: 632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (snapend < (u_char *) ep) { 642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" [|hello]"); 652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i = min(length, (u_int)(snapend - (u_char *)ep)); 682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (i < sizeof(struct aodv_hello)) { 692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" [|hello]"); 702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i -= sizeof(struct aodv_hello); 732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ah = (void *)ep; 742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("\n\text HELLO %ld ms", 752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (unsigned long)EXTRACT_32BITS(&ah->interval)); 762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project default: 792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("\n\text %u %u", ep->type, ep->length); 802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void 852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectaodv_rreq(const union aodv *ap, const u_char *dat, u_int length) 862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int i; 882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (snapend < dat) { 902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" [|aodv]"); 912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i = min(length, (u_int)(snapend - dat)); 942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (i < sizeof(ap->rreq)) { 952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" [|rreq]"); 962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i -= sizeof(ap->rreq); 992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" rreq %u %s%s%s%s%shops %u id 0x%08lx\n" 1002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "\tdst %s seq %lu src %s seq %lu", length, 1012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ap->rreq.rreq_type & RREQ_JOIN ? "[J]" : "", 1022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ap->rreq.rreq_type & RREQ_REPAIR ? "[R]" : "", 1032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ap->rreq.rreq_type & RREQ_GRAT ? "[G]" : "", 1042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ap->rreq.rreq_type & RREQ_DEST ? "[D]" : "", 1052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ap->rreq.rreq_type & RREQ_UNKNOWN ? "[U] " : " ", 1062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ap->rreq.rreq_hops, 1072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (unsigned long)EXTRACT_32BITS(&ap->rreq.rreq_id), 1082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ipaddr_string(&ap->rreq.rreq_da), 1092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (unsigned long)EXTRACT_32BITS(&ap->rreq.rreq_ds), 1102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ipaddr_string(&ap->rreq.rreq_oa), 1112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (unsigned long)EXTRACT_32BITS(&ap->rreq.rreq_os)); 1122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (i >= sizeof(struct aodv_ext)) 1132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project aodv_extension((void *)(&ap->rreq + 1), i); 1142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 1152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void 1172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectaodv_rrep(const union aodv *ap, const u_char *dat, u_int length) 1182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 1192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int i; 1202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (snapend < dat) { 1222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" [|aodv]"); 1232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 1242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 1252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i = min(length, (u_int)(snapend - dat)); 1262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (i < sizeof(ap->rrep)) { 1272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" [|rrep]"); 1282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 1292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 1302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i -= sizeof(ap->rrep); 1312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" rrep %u %s%sprefix %u hops %u\n" 1322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "\tdst %s dseq %lu src %s %lu ms", length, 1332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ap->rrep.rrep_type & RREP_REPAIR ? "[R]" : "", 1342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ap->rrep.rrep_type & RREP_ACK ? "[A] " : " ", 1352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ap->rrep.rrep_ps & RREP_PREFIX_MASK, 1362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ap->rrep.rrep_hops, 1372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ipaddr_string(&ap->rrep.rrep_da), 1382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (unsigned long)EXTRACT_32BITS(&ap->rrep.rrep_ds), 1392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ipaddr_string(&ap->rrep.rrep_oa), 1402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (unsigned long)EXTRACT_32BITS(&ap->rrep.rrep_life)); 1412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (i >= sizeof(struct aodv_ext)) 1422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project aodv_extension((void *)(&ap->rrep + 1), i); 1432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 1442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void 1462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectaodv_rerr(const union aodv *ap, const u_char *dat, u_int length) 1472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 1482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int i; 1492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const struct rerr_unreach *dp = NULL; 1502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int n, trunc; 1512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (snapend < dat) { 1532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" [|aodv]"); 1542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 1552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 1562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i = min(length, (u_int)(snapend - dat)); 1572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (i < offsetof(struct aodv_rerr, r)) { 1582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" [|rerr]"); 1592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 1602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 1612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i -= offsetof(struct aodv_rerr, r); 1622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project dp = &ap->rerr.r.dest[0]; 1632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project n = ap->rerr.rerr_dc * sizeof(ap->rerr.r.dest[0]); 1642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" rerr %s [items %u] [%u]:", 1652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ap->rerr.rerr_flags & RERR_NODELETE ? "[D]" : "", 1662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ap->rerr.rerr_dc, length); 1672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project trunc = n - (i/sizeof(ap->rerr.r.dest[0])); 1682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (; i >= sizeof(ap->rerr.r.dest[0]); 1692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ++dp, i -= sizeof(ap->rerr.r.dest[0])) { 1702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" {%s}(%ld)", ipaddr_string(&dp->u_da), 1712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (unsigned long)EXTRACT_32BITS(&dp->u_ds)); 1722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 1732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (trunc) 1742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("[|rerr]"); 1752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 1762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void 1782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef INET6 1792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectaodv_v6_rreq(const union aodv *ap, const u_char *dat, u_int length) 1802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#else 1812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectaodv_v6_rreq(const union aodv *ap _U_, const u_char *dat _U_, u_int length) 1822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 1832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 1842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef INET6 1852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int i; 1862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (snapend < dat) { 1882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" [|aodv]"); 1892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 1902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 1912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i = min(length, (u_int)(snapend - dat)); 1922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (i < sizeof(ap->rreq6)) { 1932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" [|rreq6]"); 1942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 1952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 1962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i -= sizeof(ap->rreq6); 1972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" v6 rreq %u %s%s%s%s%shops %u id 0x%08lx\n" 1982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "\tdst %s seq %lu src %s seq %lu", length, 1992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ap->rreq6.rreq_type & RREQ_JOIN ? "[J]" : "", 2002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ap->rreq6.rreq_type & RREQ_REPAIR ? "[R]" : "", 2012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ap->rreq6.rreq_type & RREQ_GRAT ? "[G]" : "", 2022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ap->rreq6.rreq_type & RREQ_DEST ? "[D]" : "", 2032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ap->rreq6.rreq_type & RREQ_UNKNOWN ? "[U] " : " ", 2042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ap->rreq6.rreq_hops, 2052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (unsigned long)EXTRACT_32BITS(&ap->rreq6.rreq_id), 2062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ip6addr_string(&ap->rreq6.rreq_da), 2072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (unsigned long)EXTRACT_32BITS(&ap->rreq6.rreq_ds), 2082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ip6addr_string(&ap->rreq6.rreq_oa), 2092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (unsigned long)EXTRACT_32BITS(&ap->rreq6.rreq_os)); 2102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (i >= sizeof(struct aodv_ext)) 2112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project aodv_extension((void *)(&ap->rreq6 + 1), i); 2122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#else 2132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" v6 rreq %u", length); 2142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 2152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 2162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void 2182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef INET6 2192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectaodv_v6_rrep(const union aodv *ap, const u_char *dat, u_int length) 2202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#else 2212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectaodv_v6_rrep(const union aodv *ap _U_, const u_char *dat _U_, u_int length) 2222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 2232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 2242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef INET6 2252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int i; 2262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (snapend < dat) { 2282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" [|aodv]"); 2292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 2302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 2312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i = min(length, (u_int)(snapend - dat)); 2322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (i < sizeof(ap->rrep6)) { 2332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" [|rrep6]"); 2342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 2352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 2362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i -= sizeof(ap->rrep6); 2372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" rrep %u %s%sprefix %u hops %u\n" 2382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "\tdst %s dseq %lu src %s %lu ms", length, 2392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ap->rrep6.rrep_type & RREP_REPAIR ? "[R]" : "", 2402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ap->rrep6.rrep_type & RREP_ACK ? "[A] " : " ", 2412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ap->rrep6.rrep_ps & RREP_PREFIX_MASK, 2422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ap->rrep6.rrep_hops, 2432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ip6addr_string(&ap->rrep6.rrep_da), 2442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (unsigned long)EXTRACT_32BITS(&ap->rrep6.rrep_ds), 2452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ip6addr_string(&ap->rrep6.rrep_oa), 2462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (unsigned long)EXTRACT_32BITS(&ap->rrep6.rrep_life)); 2472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (i >= sizeof(struct aodv_ext)) 2482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project aodv_extension((void *)(&ap->rrep6 + 1), i); 2492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#else 2502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" rrep %u", length); 2512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 2522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 2532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void 2552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef INET6 2562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectaodv_v6_rerr(const union aodv *ap, u_int length) 2572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#else 2582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectaodv_v6_rerr(const union aodv *ap _U_, u_int length) 2592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 2602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 2612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef INET6 2622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const struct rerr_unreach6 *dp6 = NULL; 2632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int i, j, n, trunc; 2642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i = length - offsetof(struct aodv_rerr, r); 2662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project j = sizeof(ap->rerr.r.dest6[0]); 2672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project dp6 = &ap->rerr.r.dest6[0]; 2682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project n = ap->rerr.rerr_dc * j; 2692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" rerr %s [items %u] [%u]:", 2702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ap->rerr.rerr_flags & RERR_NODELETE ? "[D]" : "", 2712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ap->rerr.rerr_dc, length); 2722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project trunc = n - (i/j); 2732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (; i -= j >= 0; ++dp6) { 2742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" {%s}(%ld)", ip6addr_string(&dp6->u_da), 2752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (unsigned long)EXTRACT_32BITS(&dp6->u_ds)); 2762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 2772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (trunc) 2782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("[|rerr]"); 2792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#else 2802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" rerr %u", length); 2812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 2822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 2832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void 2852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef INET6 2862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectaodv_v6_draft_01_rreq(const union aodv *ap, const u_char *dat, u_int length) 2872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#else 2882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectaodv_v6_draft_01_rreq(const union aodv *ap _U_, const u_char *dat _U_, 2892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int length) 2902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 2912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 2922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef INET6 2932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int i; 2942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (snapend < dat) { 2962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" [|aodv]"); 2972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 2982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 2992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i = min(length, (u_int)(snapend - dat)); 3002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (i < sizeof(ap->rreq6_draft_01)) { 3012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" [|rreq6]"); 3022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 3032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 3042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i -= sizeof(ap->rreq6_draft_01); 3052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" rreq %u %s%s%s%s%shops %u id 0x%08lx\n" 3062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "\tdst %s seq %lu src %s seq %lu", length, 3072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ap->rreq6_draft_01.rreq_type & RREQ_JOIN ? "[J]" : "", 3082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ap->rreq6_draft_01.rreq_type & RREQ_REPAIR ? "[R]" : "", 3092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ap->rreq6_draft_01.rreq_type & RREQ_GRAT ? "[G]" : "", 3102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ap->rreq6_draft_01.rreq_type & RREQ_DEST ? "[D]" : "", 3112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ap->rreq6_draft_01.rreq_type & RREQ_UNKNOWN ? "[U] " : " ", 3122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ap->rreq6_draft_01.rreq_hops, 3132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (unsigned long)EXTRACT_32BITS(&ap->rreq6_draft_01.rreq_id), 3142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ip6addr_string(&ap->rreq6_draft_01.rreq_da), 3152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (unsigned long)EXTRACT_32BITS(&ap->rreq6_draft_01.rreq_ds), 3162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ip6addr_string(&ap->rreq6_draft_01.rreq_oa), 3172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (unsigned long)EXTRACT_32BITS(&ap->rreq6_draft_01.rreq_os)); 3182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (i >= sizeof(struct aodv_ext)) 3192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project aodv_extension((void *)(&ap->rreq6_draft_01 + 1), i); 3202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#else 3212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" rreq %u", length); 3222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 3232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 3242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void 3262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef INET6 3272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectaodv_v6_draft_01_rrep(const union aodv *ap, const u_char *dat, u_int length) 3282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#else 3292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectaodv_v6_draft_01_rrep(const union aodv *ap _U_, const u_char *dat _U_, 3302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int length) 3312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 3322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 3332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef INET6 3342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int i; 3352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (snapend < dat) { 3372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" [|aodv]"); 3382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 3392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 3402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i = min(length, (u_int)(snapend - dat)); 3412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (i < sizeof(ap->rrep6_draft_01)) { 3422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" [|rrep6]"); 3432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 3442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 3452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i -= sizeof(ap->rrep6_draft_01); 3462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" rrep %u %s%sprefix %u hops %u\n" 3472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "\tdst %s dseq %lu src %s %lu ms", length, 3482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ap->rrep6_draft_01.rrep_type & RREP_REPAIR ? "[R]" : "", 3492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ap->rrep6_draft_01.rrep_type & RREP_ACK ? "[A] " : " ", 3502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ap->rrep6_draft_01.rrep_ps & RREP_PREFIX_MASK, 3512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ap->rrep6_draft_01.rrep_hops, 3522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ip6addr_string(&ap->rrep6_draft_01.rrep_da), 3532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (unsigned long)EXTRACT_32BITS(&ap->rrep6_draft_01.rrep_ds), 3542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ip6addr_string(&ap->rrep6_draft_01.rrep_oa), 3552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (unsigned long)EXTRACT_32BITS(&ap->rrep6_draft_01.rrep_life)); 3562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (i >= sizeof(struct aodv_ext)) 3572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project aodv_extension((void *)(&ap->rrep6_draft_01 + 1), i); 3582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#else 3592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" rrep %u", length); 3602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 3612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 3622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void 3642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef INET6 3652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectaodv_v6_draft_01_rerr(const union aodv *ap, u_int length) 3662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#else 3672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectaodv_v6_draft_01_rerr(const union aodv *ap _U_, u_int length) 3682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 3692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 3702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef INET6 3712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const struct rerr_unreach6_draft_01 *dp6 = NULL; 3722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int i, j, n, trunc; 3732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i = length - offsetof(struct aodv_rerr, r); 3752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project j = sizeof(ap->rerr.r.dest6_draft_01[0]); 3762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project dp6 = &ap->rerr.r.dest6_draft_01[0]; 3772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project n = ap->rerr.rerr_dc * j; 3782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" rerr %s [items %u] [%u]:", 3792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ap->rerr.rerr_flags & RERR_NODELETE ? "[D]" : "", 3802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ap->rerr.rerr_dc, length); 3812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project trunc = n - (i/j); 3822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (; i -= j >= 0; ++dp6) { 3832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" {%s}(%ld)", ip6addr_string(&dp6->u_da), 3842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (unsigned long)EXTRACT_32BITS(&dp6->u_ds)); 3852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 3862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (trunc) 3872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("[|rerr]"); 3882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#else 3892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" rerr %u", length); 3902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 3912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 3922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectvoid 3942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectaodv_print(const u_char *dat, u_int length, int is_ip6) 3952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 3962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const union aodv *ap; 3972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ap = (union aodv *)dat; 3992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (snapend < dat) { 4002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" [|aodv]"); 4012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 4022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 4032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (min(length, (u_int)(snapend - dat)) < sizeof(ap->rrep_ack)) { 4042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" [|aodv]"); 4052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 4062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 4072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" aodv"); 4082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project switch (ap->rerr.rerr_type) { 4102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case AODV_RREQ: 4122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (is_ip6) 4132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project aodv_v6_rreq(ap, dat, length); 4142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else 4152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project aodv_rreq(ap, dat, length); 4162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 4172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case AODV_RREP: 4192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (is_ip6) 4202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project aodv_v6_rrep(ap, dat, length); 4212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else 4222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project aodv_rrep(ap, dat, length); 4232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 4242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case AODV_RERR: 4262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (is_ip6) 4272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project aodv_v6_rerr(ap, length); 4282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else 4292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project aodv_rerr(ap, dat, length); 4302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 4312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case AODV_RREP_ACK: 4332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" rrep-ack %u", length); 4342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 4352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case AODV_V6_DRAFT_01_RREQ: 4372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project aodv_v6_draft_01_rreq(ap, dat, length); 4382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 4392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case AODV_V6_DRAFT_01_RREP: 4412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project aodv_v6_draft_01_rrep(ap, dat, length); 4422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 4432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case AODV_V6_DRAFT_01_RERR: 4452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project aodv_v6_draft_01_rerr(ap, length); 4462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 4472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case AODV_V6_DRAFT_01_RREP_ACK: 4492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" rrep-ack %u", length); 4502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 4512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project default: 4532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" %u %u", ap->rreq.rreq_type, length); 4542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 4552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 456