14edb46e9SPaul Traina /* 24edb46e9SPaul Traina * Copyright (c) 1991, 1993, 1994, 1995, 1996 34edb46e9SPaul Traina * The Regents of the University of California. All rights reserved. 44edb46e9SPaul Traina * 54edb46e9SPaul Traina * Redistribution and use in source and binary forms, with or without 64edb46e9SPaul Traina * modification, are permitted provided that: (1) source code distributions 74edb46e9SPaul Traina * retain the above copyright notice and this paragraph in its entirety, (2) 84edb46e9SPaul Traina * distributions including binary code include the above copyright notice and 94edb46e9SPaul Traina * this paragraph in its entirety in the documentation or other materials 104edb46e9SPaul Traina * provided with the distribution, and (3) all advertising materials mentioning 114edb46e9SPaul Traina * features or use of this software display the following acknowledgement: 124edb46e9SPaul Traina * ``This product includes software developed by the University of California, 134edb46e9SPaul Traina * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of 144edb46e9SPaul Traina * the University nor the names of its contributors may be used to endorse 154edb46e9SPaul Traina * or promote products derived from this software without specific prior 164edb46e9SPaul Traina * written permission. 174edb46e9SPaul Traina * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED 184edb46e9SPaul Traina * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF 194edb46e9SPaul Traina * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 204edb46e9SPaul Traina */ 214edb46e9SPaul Traina 224edb46e9SPaul Traina #ifndef lint 234edb46e9SPaul Traina static char rcsid[] = 244edb46e9SPaul Traina "@(#)$Header: print-null.c,v 1.19 96/07/14 19:39:02 leres Exp $ (LBL)"; 254edb46e9SPaul Traina #endif 264edb46e9SPaul Traina 274edb46e9SPaul Traina #include <sys/param.h> 284edb46e9SPaul Traina #include <sys/time.h> 294edb46e9SPaul Traina #include <sys/socket.h> 304edb46e9SPaul Traina #include <sys/file.h> 314edb46e9SPaul Traina #include <sys/ioctl.h> 324edb46e9SPaul Traina 334edb46e9SPaul Traina #if __STDC__ 344edb46e9SPaul Traina struct mbuf; 354edb46e9SPaul Traina struct rtentry; 364edb46e9SPaul Traina #endif 374edb46e9SPaul Traina #include <net/if.h> 384edb46e9SPaul Traina 394edb46e9SPaul Traina #include <netinet/in.h> 404edb46e9SPaul Traina #include <netinet/in_systm.h> 414edb46e9SPaul Traina #include <netinet/ip.h> 424edb46e9SPaul Traina #include <netinet/if_ether.h> 434edb46e9SPaul Traina #include <netinet/ip_var.h> 444edb46e9SPaul Traina #include <netinet/udp.h> 454edb46e9SPaul Traina #include <netinet/udp_var.h> 464edb46e9SPaul Traina #include <netinet/tcp.h> 474edb46e9SPaul Traina #include <netinet/tcpip.h> 484edb46e9SPaul Traina 494edb46e9SPaul Traina #include <stdio.h> 504edb46e9SPaul Traina #include <string.h> 514edb46e9SPaul Traina 524edb46e9SPaul Traina #include "interface.h" 534edb46e9SPaul Traina #include "addrtoname.h" 544edb46e9SPaul Traina #include "pcap.h" 554edb46e9SPaul Traina 564edb46e9SPaul Traina #define NULL_HDRLEN 4 574edb46e9SPaul Traina 584edb46e9SPaul Traina static void 594edb46e9SPaul Traina null_print(const u_char *p, const struct ip *ip, u_int length) 604edb46e9SPaul Traina { 614edb46e9SPaul Traina u_int family; 624edb46e9SPaul Traina 634edb46e9SPaul Traina memcpy((char *)&family, (char *)p, sizeof(family)); 644edb46e9SPaul Traina 654edb46e9SPaul Traina if (nflag) { 664edb46e9SPaul Traina /* XXX just dump the header */ 674edb46e9SPaul Traina return; 684edb46e9SPaul Traina } 694edb46e9SPaul Traina switch (family) { 704edb46e9SPaul Traina 714edb46e9SPaul Traina case AF_INET: 724edb46e9SPaul Traina printf("ip: "); 734edb46e9SPaul Traina break; 744edb46e9SPaul Traina 754edb46e9SPaul Traina case AF_NS: 764edb46e9SPaul Traina printf("ns: "); 774edb46e9SPaul Traina break; 784edb46e9SPaul Traina 794edb46e9SPaul Traina default: 804edb46e9SPaul Traina printf("AF %d: ", family); 814edb46e9SPaul Traina break; 824edb46e9SPaul Traina } 834edb46e9SPaul Traina } 844edb46e9SPaul Traina 854edb46e9SPaul Traina void 864edb46e9SPaul Traina null_if_print(u_char *user, const struct pcap_pkthdr *h, const u_char *p) 874edb46e9SPaul Traina { 884edb46e9SPaul Traina u_int length = h->len; 894edb46e9SPaul Traina u_int caplen = h->caplen; 904edb46e9SPaul Traina const struct ip *ip; 914edb46e9SPaul Traina 924edb46e9SPaul Traina ts_print(&h->ts); 934edb46e9SPaul Traina 944edb46e9SPaul Traina /* 954edb46e9SPaul Traina * Some printers want to get back at the link level addresses, 964edb46e9SPaul Traina * and/or check that they're not walking off the end of the packet. 974edb46e9SPaul Traina * Rather than pass them all the way down, we set these globals. 984edb46e9SPaul Traina */ 994edb46e9SPaul Traina packetp = p; 1004edb46e9SPaul Traina snapend = p + caplen; 1014edb46e9SPaul Traina 1024edb46e9SPaul Traina length -= NULL_HDRLEN; 1034edb46e9SPaul Traina 1044edb46e9SPaul Traina ip = (struct ip *)(p + NULL_HDRLEN); 1054edb46e9SPaul Traina 1064edb46e9SPaul Traina if (eflag) 1074edb46e9SPaul Traina null_print(p, ip, length); 1084edb46e9SPaul Traina 1094edb46e9SPaul Traina ip_print((const u_char *)ip, length); 1104edb46e9SPaul Traina 1114edb46e9SPaul Traina if (xflag) 1124edb46e9SPaul Traina default_print((const u_char *)ip, caplen - NULL_HDRLEN); 1134edb46e9SPaul Traina putchar('\n'); 1144edb46e9SPaul Traina } 1154edb46e9SPaul Traina 116