12949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/*	$OpenBSD: print-enc.c,v 1.7 2002/02/19 19:39:40 millert Exp $	*/
22949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
32949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/*
42949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Copyright (c) 1990, 1991, 1993, 1994, 1995, 1996
52949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *	The Regents of the University of California.  All rights reserved.
62949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *
72949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Redistribution and use in source and binary forms, with or without
82949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * modification, are permitted provided that: (1) source code distributions
92949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * retain the above copyright notice and this paragraph in its entirety, (2)
102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * distributions including binary code include the above copyright notice and
112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * this paragraph in its entirety in the documentation or other materials
122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * provided with the distribution, and (3) all advertising materials mentioning
132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * features or use of this software display the following acknowledgement:
142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * ``This product includes software developed by the University of California,
152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * the University nor the names of its contributors may be used to endorse
172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * or promote products derived from this software without specific prior
182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * written permission.
192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */
232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifndef lint
252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const char rcsid[] _U_ =
262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    "@(#) $Header: /tcpdump/master/tcpdump/print-enc.c,v 1.4 2005/04/06 21:32:39 mcr Exp $ (LBL)";
272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif
282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef HAVE_CONFIG_H
302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "config.h"
312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif
322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <tcpdump-stdinc.h>
342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <pcap.h>
362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "interface.h"
382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "addrtoname.h"
392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "enc.h"
412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define ENC_PRINT_TYPE(wh, xf, nam) \
432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	if ((wh) & (xf)) { \
442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		printf("%s%s", nam, (wh) == (xf) ? "): " : ","); \
452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		(wh) &= ~(xf); \
462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	}
472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectu_int
492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectenc_if_print(const struct pcap_pkthdr *h, register const u_char *p)
502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{
512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	register u_int length = h->len;
522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	register u_int caplen = h->caplen;
532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	int flags;
542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	const struct enchdr *hdr;
552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	if (caplen < ENC_HDRLEN) {
572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		printf("[|enc]");
582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		goto out;
592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	}
602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	hdr = (struct enchdr *)p;
622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	flags = hdr->flags;
632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	if (flags == 0)
642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		printf("(unprotected): ");
652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	else
662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		printf("(");
672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	ENC_PRINT_TYPE(flags, M_AUTH, "authentic");
682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	ENC_PRINT_TYPE(flags, M_CONF, "confidential");
692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	/* ENC_PRINT_TYPE(flags, M_TUNNEL, "tunnel"); */
702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	printf("SPI 0x%08x: ", (u_int32_t)ntohl(hdr->spi));
712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	length -= ENC_HDRLEN;
732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	/* XXX - use the address family */
742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	ip_print(gndo, p + ENC_HDRLEN, length);
752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectout:
772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	return (ENC_HDRLEN);
782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}
792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/*
822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Local Variables:
832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * c-style: whitesmith
842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * c-basic-offset: 8
852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * End:
862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */
87