1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/* 28a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com * Copyright (c) 1988, 1989, 1990, 1991, 1993, 1994 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * The Regents of the University of California. All rights reserved. 48a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com * 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Redistribution and use in source and binary forms, with or without 6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * modification, are permitted provided that: (1) source code distributions 78a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com * retain the above copyright notice and this paragraph in its entirety, (2) 88a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com * distributions including binary code include the above copyright notice and 9ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * this paragraph in its entirety in the documentation or other materials 108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com * provided with the distribution, and (3) all advertising materials mentioning 118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com * features or use of this software display the following acknowledgement: 128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com * ``This product includes software developed by the University of California, 138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of 14fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com * the University nor the names of its contributors may be used to endorse 15629ab540667422d3edcb97c51e9628b7051e1ba4robertphillips@google.com * or promote products derived from this software without specific prior 16629ab540667422d3edcb97c51e9628b7051e1ba4robertphillips@google.com * written permission. 17629ab540667422d3edcb97c51e9628b7051e1ba4robertphillips@google.com * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED 18629ab540667422d3edcb97c51e9628b7051e1ba4robertphillips@google.com * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF 198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */ 218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 22fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com#ifndef lint 23fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.comstatic const char rcsid[] _U_ = 24fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com "@(#) $Header: /tcpdump/master/tcpdump/print-frag6.c,v 1.20 2005-04-20 22:33:06 guy Exp $"; 25fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com#endif 26fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com 27fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com#ifdef HAVE_CONFIG_H 28fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com#include "config.h" 29fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com#endif 30fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com 31fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com#ifdef INET6 32fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com 33fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com#include <tcpdump-stdinc.h> 34fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com 35fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com#include <stdio.h> 36fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com 37fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com#include "ip6.h" 38fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com 39fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com#include "interface.h" 40fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com#include "addrtoname.h" 41fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com#include "extract.h" 42fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com 43fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.comint 44fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.comfrag6_print(register const u_char *bp, register const u_char *bp2) 45fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com{ 46fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com register const struct ip6_frag *dp; 47fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com register const struct ip6_hdr *ip6; 48fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com 49fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com dp = (const struct ip6_frag *)bp; 50fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com ip6 = (const struct ip6_hdr *)bp2; 51fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com 52fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com TCHECK(dp->ip6f_offlg); 53fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com 548b06f1a7ff6d5a59387a90433064550de20787eereed@google.com if (vflag) { 558b06f1a7ff6d5a59387a90433064550de20787eereed@google.com printf("frag (0x%08x:%d|%ld)", 568b06f1a7ff6d5a59387a90433064550de20787eereed@google.com EXTRACT_32BITS(&dp->ip6f_ident), 578b06f1a7ff6d5a59387a90433064550de20787eereed@google.com EXTRACT_16BITS(&dp->ip6f_offlg) & IP6F_OFF_MASK, 588b06f1a7ff6d5a59387a90433064550de20787eereed@google.com sizeof(struct ip6_hdr) + EXTRACT_16BITS(&ip6->ip6_plen) - 598b06f1a7ff6d5a59387a90433064550de20787eereed@google.com (long)(bp - bp2) - sizeof(struct ip6_frag)); 608b06f1a7ff6d5a59387a90433064550de20787eereed@google.com } else { 618b06f1a7ff6d5a59387a90433064550de20787eereed@google.com printf("frag (%d|%ld)", 628b06f1a7ff6d5a59387a90433064550de20787eereed@google.com EXTRACT_16BITS(&dp->ip6f_offlg) & IP6F_OFF_MASK, 63fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com sizeof(struct ip6_hdr) + EXTRACT_16BITS(&ip6->ip6_plen) - 64fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com (long)(bp - bp2) - sizeof(struct ip6_frag)); 65fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com } 66fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com 67fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com#if 1 68fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com /* it is meaningless to decode non-first fragment */ 69fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com if ((EXTRACT_16BITS(&dp->ip6f_offlg) & IP6F_OFF_MASK) != 0) 70fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com return -1; 71fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com else 72fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com#endif 73fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com { 74fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com fputs(" ", stdout); 75fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com return sizeof(struct ip6_frag); 76fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com } 77fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.comtrunc: 78fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com fputs("[|frag]", stdout); 79fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com return -1; 80fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com#undef TCHECK 81fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com} 82fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com#endif /* INET6 */ 83fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com