153f17a9db278d33517d9888dd77848f554522a38JP Abgrall/*
253f17a9db278d33517d9888dd77848f554522a38JP Abgrall * Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
353f17a9db278d33517d9888dd77848f554522a38JP Abgrall *	The Regents of the University of California.  All rights reserved.
453f17a9db278d33517d9888dd77848f554522a38JP Abgrall *
553f17a9db278d33517d9888dd77848f554522a38JP Abgrall * Redistribution and use in source and binary forms, with or without
653f17a9db278d33517d9888dd77848f554522a38JP Abgrall * modification, are permitted provided that: (1) source code distributions
753f17a9db278d33517d9888dd77848f554522a38JP Abgrall * retain the above copyright notice and this paragraph in its entirety, (2)
853f17a9db278d33517d9888dd77848f554522a38JP Abgrall * distributions including binary code include the above copyright notice and
953f17a9db278d33517d9888dd77848f554522a38JP Abgrall * this paragraph in its entirety in the documentation or other materials
1053f17a9db278d33517d9888dd77848f554522a38JP Abgrall * provided with the distribution, and (3) all advertising materials mentioning
1153f17a9db278d33517d9888dd77848f554522a38JP Abgrall * features or use of this software display the following acknowledgement:
1253f17a9db278d33517d9888dd77848f554522a38JP Abgrall * ``This product includes software developed by the University of California,
1353f17a9db278d33517d9888dd77848f554522a38JP Abgrall * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
1453f17a9db278d33517d9888dd77848f554522a38JP Abgrall * the University nor the names of its contributors may be used to endorse
1553f17a9db278d33517d9888dd77848f554522a38JP Abgrall * or promote products derived from this software without specific prior
1653f17a9db278d33517d9888dd77848f554522a38JP Abgrall * written permission.
1753f17a9db278d33517d9888dd77848f554522a38JP Abgrall * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
1853f17a9db278d33517d9888dd77848f554522a38JP Abgrall * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
1953f17a9db278d33517d9888dd77848f554522a38JP Abgrall * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
2053f17a9db278d33517d9888dd77848f554522a38JP Abgrall */
2153f17a9db278d33517d9888dd77848f554522a38JP Abgrall
2253f17a9db278d33517d9888dd77848f554522a38JP Abgrall#ifndef lint
2353f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const char rcsid[] _U_ =
2453f17a9db278d33517d9888dd77848f554522a38JP Abgrall    "@(#) $Header: /tcpdump/master/tcpdump/print-arp.c,v 1.66 2006-03-03 22:53:21 hannes Exp $ (LBL)";
2553f17a9db278d33517d9888dd77848f554522a38JP Abgrall#endif
2653f17a9db278d33517d9888dd77848f554522a38JP Abgrall
2753f17a9db278d33517d9888dd77848f554522a38JP Abgrall#ifdef HAVE_CONFIG_H
2853f17a9db278d33517d9888dd77848f554522a38JP Abgrall#include "config.h"
2953f17a9db278d33517d9888dd77848f554522a38JP Abgrall#endif
3053f17a9db278d33517d9888dd77848f554522a38JP Abgrall
3153f17a9db278d33517d9888dd77848f554522a38JP Abgrall#include <tcpdump-stdinc.h>
3253f17a9db278d33517d9888dd77848f554522a38JP Abgrall
3353f17a9db278d33517d9888dd77848f554522a38JP Abgrall#include <stdio.h>
3453f17a9db278d33517d9888dd77848f554522a38JP Abgrall#include <string.h>
3553f17a9db278d33517d9888dd77848f554522a38JP Abgrall
3653f17a9db278d33517d9888dd77848f554522a38JP Abgrall#include "netdissect.h"
3753f17a9db278d33517d9888dd77848f554522a38JP Abgrall#include "addrtoname.h"
3853f17a9db278d33517d9888dd77848f554522a38JP Abgrall#include "ether.h"
3953f17a9db278d33517d9888dd77848f554522a38JP Abgrall#include "ethertype.h"
4053f17a9db278d33517d9888dd77848f554522a38JP Abgrall#include "extract.h"			/* must come after interface.h */
4153f17a9db278d33517d9888dd77848f554522a38JP Abgrall
4253f17a9db278d33517d9888dd77848f554522a38JP Abgrall/*
4353f17a9db278d33517d9888dd77848f554522a38JP Abgrall * Transparent Inter-Process Communication (TIPC) protocol.
4453f17a9db278d33517d9888dd77848f554522a38JP Abgrall *
4553f17a9db278d33517d9888dd77848f554522a38JP Abgrall *	http://tipc.sourceforge.net/doc/draft-spec-tipc-07.html
4653f17a9db278d33517d9888dd77848f554522a38JP Abgrall *	http://tipc.sourceforge.net/doc/tipc_message_formats.html
4753f17a9db278d33517d9888dd77848f554522a38JP Abgrall */
4853f17a9db278d33517d9888dd77848f554522a38JP Abgrall
4953f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_USER_LOW_IMPORTANCE	0
5053f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_USER_MEDIUM_IMPORTANCE	1
5153f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_USER_HIGH_IMPORTANCE	2
5253f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_USER_CRITICAL_IMPORTANCE	3
5353f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_USER_BCAST_PROTOCOL	5
5453f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_USER_MSG_BUNDLER		6
5553f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_USER_LINK_PROTOCOL		7
5653f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_USER_CONN_MANAGER		8
5753f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_USER_CHANGEOVER_PROTOCOL	10
5853f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_USER_NAME_DISTRIBUTOR	11
5953f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_USER_MSG_FRAGMENTER	12
6053f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_USER_LINK_CONFIG		13
6153f17a9db278d33517d9888dd77848f554522a38JP Abgrall
6253f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_CONN_MSG			0
6353f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_DIRECT_MSG			1
6453f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_NAMED_MSG			2
6553f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_MCAST_MSG			3
6653f17a9db278d33517d9888dd77848f554522a38JP Abgrall
6753f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_ZONE(addr)		(((addr) >> 24) & 0xFF)
6853f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_CLUSTER(addr)	(((addr) >> 12) & 0xFFF)
6953f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_NODE(addr)		(((addr) >> 0) & 0xFFF)
7053f17a9db278d33517d9888dd77848f554522a38JP Abgrall
7153f17a9db278d33517d9888dd77848f554522a38JP Abgrallstruct tipc_pkthdr {
7253f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int32_t w0;
7353f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int32_t w1;
7453f17a9db278d33517d9888dd77848f554522a38JP Abgrall};
7553f17a9db278d33517d9888dd77848f554522a38JP Abgrall
7653f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_VER(w0)		(((w0) >> 29) & 0x07)
7753f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_USER(w0)		(((w0) >> 25) & 0x0F)
7853f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_HSIZE(w0)		(((w0) >> 21) & 0x0F)
7953f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_MSIZE(w0)		(((w0) >> 0) & 0xFFFF)
8053f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_MTYPE(w1)		(((w1) >> 29) & 0x07)
8153f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_BROADCAST_ACK(w1)	(((w1) >> 0) & 0xFFFF)
8253f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_LINK_ACK(w2)	(((w2) >> 16) & 0xFFFF)
8353f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_LINK_SEQ(w2)	(((w2) >> 0) & 0xFFFF)
8453f17a9db278d33517d9888dd77848f554522a38JP Abgrall
8553f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const struct tok tipcuser_values[] = {
8653f17a9db278d33517d9888dd77848f554522a38JP Abgrall    { TIPC_USER_LOW_IMPORTANCE,      "Low Importance Data payload" },
8753f17a9db278d33517d9888dd77848f554522a38JP Abgrall    { TIPC_USER_MEDIUM_IMPORTANCE,   "Medium Importance Data payload" },
8853f17a9db278d33517d9888dd77848f554522a38JP Abgrall    { TIPC_USER_HIGH_IMPORTANCE,     "High Importance Data payload" },
8953f17a9db278d33517d9888dd77848f554522a38JP Abgrall    { TIPC_USER_CRITICAL_IMPORTANCE, "Critical Importance Data payload" },
9053f17a9db278d33517d9888dd77848f554522a38JP Abgrall    { TIPC_USER_BCAST_PROTOCOL,      "Broadcast Link Protocol internal" },
9153f17a9db278d33517d9888dd77848f554522a38JP Abgrall    { TIPC_USER_MSG_BUNDLER,         "Message Bundler Protocol internal" },
9253f17a9db278d33517d9888dd77848f554522a38JP Abgrall    { TIPC_USER_LINK_PROTOCOL,       "Link State Protocol internal" },
9353f17a9db278d33517d9888dd77848f554522a38JP Abgrall    { TIPC_USER_CONN_MANAGER,        "Connection Manager internal" },
9453f17a9db278d33517d9888dd77848f554522a38JP Abgrall    { TIPC_USER_CHANGEOVER_PROTOCOL, "Link Changeover Protocol internal" },
9553f17a9db278d33517d9888dd77848f554522a38JP Abgrall    { TIPC_USER_NAME_DISTRIBUTOR,    "Name Table Update Protocol internal" },
9653f17a9db278d33517d9888dd77848f554522a38JP Abgrall    { TIPC_USER_MSG_FRAGMENTER,      "Message Fragmentation Protocol internal" },
9753f17a9db278d33517d9888dd77848f554522a38JP Abgrall    { TIPC_USER_LINK_CONFIG,         "Neighbor Detection Protocol internal" },
9853f17a9db278d33517d9888dd77848f554522a38JP Abgrall    { 0, NULL }
9953f17a9db278d33517d9888dd77848f554522a38JP Abgrall};
10053f17a9db278d33517d9888dd77848f554522a38JP Abgrall
10153f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const struct tok tipcmtype_values[] = {
10253f17a9db278d33517d9888dd77848f554522a38JP Abgrall    { TIPC_CONN_MSG,   "CONN_MSG" },
10353f17a9db278d33517d9888dd77848f554522a38JP Abgrall    { TIPC_DIRECT_MSG, "MCAST_MSG" },
10453f17a9db278d33517d9888dd77848f554522a38JP Abgrall    { TIPC_NAMED_MSG,  "NAMED_MSG" },
10553f17a9db278d33517d9888dd77848f554522a38JP Abgrall    { TIPC_MCAST_MSG,  "DIRECT_MSG" },
10653f17a9db278d33517d9888dd77848f554522a38JP Abgrall    { 0, NULL }
10753f17a9db278d33517d9888dd77848f554522a38JP Abgrall};
10853f17a9db278d33517d9888dd77848f554522a38JP Abgrall
10953f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const struct tok tipc_linkconf_mtype_values[] = {
11053f17a9db278d33517d9888dd77848f554522a38JP Abgrall    { 0,   "Link request" },
11153f17a9db278d33517d9888dd77848f554522a38JP Abgrall    { 1,   "Link response" },
11253f17a9db278d33517d9888dd77848f554522a38JP Abgrall    { 0, NULL }
11353f17a9db278d33517d9888dd77848f554522a38JP Abgrall};
11453f17a9db278d33517d9888dd77848f554522a38JP Abgrall
11553f17a9db278d33517d9888dd77848f554522a38JP Abgrallstruct payload_tipc_pkthdr {
11653f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int32_t w0;
11753f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int32_t w1;
11853f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int32_t w2;
11953f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int32_t prev_node;
12053f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int32_t orig_port;
12153f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int32_t dest_port;
12253f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int32_t orig_node;
12353f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int32_t dest_node;
12453f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int32_t name_type;
12553f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int32_t w9;
12653f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int32_t wA;
12753f17a9db278d33517d9888dd77848f554522a38JP Abgrall};
12853f17a9db278d33517d9888dd77848f554522a38JP Abgrall
12953f17a9db278d33517d9888dd77848f554522a38JP Abgrallstruct  internal_tipc_pkthdr {
13053f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int32_t w0;
13153f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int32_t w1;
13253f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int32_t w2;
13353f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int32_t prev_node;
13453f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int32_t w4;
13553f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int32_t w5;
13653f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int32_t orig_node;
13753f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int32_t dest_node;
13853f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int32_t trans_seq;
13953f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int32_t w9;
14053f17a9db278d33517d9888dd77848f554522a38JP Abgrall};
14153f17a9db278d33517d9888dd77848f554522a38JP Abgrall
14253f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_SEQ_GAP(w1)	(((w1) >> 16) & 0x1FFF)
14353f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_BC_GAP_AFTER(w2)	(((w2) >> 16) & 0xFFFF)
14453f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_BC_GAP_TO(w2)	(((w2) >> 0) & 0xFFFF)
14553f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_LAST_SENT_FRAG(w4)	(((w4) >> 16) & 0xFFFF)
14653f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_NEXT_SENT_FRAG(w4)	(((w4) >> 0) & 0xFFFF)
14753f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_SESS_NO(w5)	(((w5) >> 16) & 0xFFFF)
14853f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_MSG_CNT(w9)	(((w9) >> 16) & 0xFFFF)
14953f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_LINK_TOL(w9)	(((w9) >> 0) & 0xFFFF)
15053f17a9db278d33517d9888dd77848f554522a38JP Abgrall
15153f17a9db278d33517d9888dd77848f554522a38JP Abgrallstruct link_conf_tipc_pkthdr {
15253f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int32_t w0;
15353f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int32_t w1;
15453f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int32_t dest_domain;
15553f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int32_t prev_node;
15653f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int32_t ntwrk_id;
15753f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int32_t w5;
15853f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int8_t media_address[16];
15953f17a9db278d33517d9888dd77848f554522a38JP Abgrall};
16053f17a9db278d33517d9888dd77848f554522a38JP Abgrall
16153f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_NODE_SIG(w1)	(((w1) >> 0) & 0xFFFF)
16253f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_MEDIA_ID(w5)	(((w5) >> 0) & 0xFF)
16353f17a9db278d33517d9888dd77848f554522a38JP Abgrall
16453f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic void
16553f17a9db278d33517d9888dd77848f554522a38JP Abgrallprint_payload(netdissect_options *ndo, const struct payload_tipc_pkthdr *ap)
16653f17a9db278d33517d9888dd77848f554522a38JP Abgrall{
16753f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int32_t w0, w1, w2;
16853f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int user;
16953f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int hsize;
17053f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int msize;
17153f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int mtype;
17253f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int broadcast_ack;
17353f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int link_ack;
17453f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int link_seq;
17553f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int prev_node;
17653f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int orig_port;
17753f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int dest_port;
17853f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int orig_node;
17953f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int dest_node;
18053f17a9db278d33517d9888dd77848f554522a38JP Abgrall
18153f17a9db278d33517d9888dd77848f554522a38JP Abgrall	ND_TCHECK(ap->dest_port);
18253f17a9db278d33517d9888dd77848f554522a38JP Abgrall	w0 = EXTRACT_32BITS(&ap->w0);
18353f17a9db278d33517d9888dd77848f554522a38JP Abgrall	user = TIPC_USER(w0);
18453f17a9db278d33517d9888dd77848f554522a38JP Abgrall	hsize = TIPC_HSIZE(w0);
18553f17a9db278d33517d9888dd77848f554522a38JP Abgrall	msize = TIPC_MSIZE(w0);
18653f17a9db278d33517d9888dd77848f554522a38JP Abgrall	w1 = EXTRACT_32BITS(&ap->w1);
18753f17a9db278d33517d9888dd77848f554522a38JP Abgrall	mtype = TIPC_MTYPE(w1);
18853f17a9db278d33517d9888dd77848f554522a38JP Abgrall	prev_node = EXTRACT_32BITS(&ap->prev_node);
18953f17a9db278d33517d9888dd77848f554522a38JP Abgrall	orig_port = EXTRACT_32BITS(&ap->orig_port);
19053f17a9db278d33517d9888dd77848f554522a38JP Abgrall	dest_port = EXTRACT_32BITS(&ap->dest_port);
19153f17a9db278d33517d9888dd77848f554522a38JP Abgrall	if (hsize <= 6) {
19253f17a9db278d33517d9888dd77848f554522a38JP Abgrall		ND_PRINT((ndo, "TIPC v%u.0 %u.%u.%u:%u > %u, headerlength %u bytes, MessageSize %u bytes, %s, messageType %s",
19353f17a9db278d33517d9888dd77848f554522a38JP Abgrall		    TIPC_VER(w0),
19453f17a9db278d33517d9888dd77848f554522a38JP Abgrall		    TIPC_ZONE(prev_node), TIPC_CLUSTER(prev_node), TIPC_NODE(prev_node),
19553f17a9db278d33517d9888dd77848f554522a38JP Abgrall		    orig_port, dest_port,
19653f17a9db278d33517d9888dd77848f554522a38JP Abgrall		    hsize*4, msize,
19753f17a9db278d33517d9888dd77848f554522a38JP Abgrall		    tok2str(tipcuser_values, "unknown", user),
19853f17a9db278d33517d9888dd77848f554522a38JP Abgrall		    tok2str(tipcmtype_values, "Unknown", mtype)));
19953f17a9db278d33517d9888dd77848f554522a38JP Abgrall	} else {
20053f17a9db278d33517d9888dd77848f554522a38JP Abgrall		ND_TCHECK(ap->dest_node);
20153f17a9db278d33517d9888dd77848f554522a38JP Abgrall		orig_node = EXTRACT_32BITS(&ap->orig_node);
20253f17a9db278d33517d9888dd77848f554522a38JP Abgrall		dest_node = EXTRACT_32BITS(&ap->dest_node);
20353f17a9db278d33517d9888dd77848f554522a38JP Abgrall		ND_PRINT((ndo, "TIPC v%u.0 %u.%u.%u:%u > %u.%u.%u:%u, headerlength %u bytes, MessageSize %u bytes, %s, messageType %s",
20453f17a9db278d33517d9888dd77848f554522a38JP Abgrall		    TIPC_VER(w0),
20553f17a9db278d33517d9888dd77848f554522a38JP Abgrall		    TIPC_ZONE(orig_node), TIPC_CLUSTER(orig_node), TIPC_NODE(orig_node),
20653f17a9db278d33517d9888dd77848f554522a38JP Abgrall		    orig_port,
20753f17a9db278d33517d9888dd77848f554522a38JP Abgrall		    TIPC_ZONE(dest_node), TIPC_CLUSTER(dest_node), TIPC_NODE(dest_node),
20853f17a9db278d33517d9888dd77848f554522a38JP Abgrall		    dest_port,
20953f17a9db278d33517d9888dd77848f554522a38JP Abgrall		    hsize*4, msize,
21053f17a9db278d33517d9888dd77848f554522a38JP Abgrall		    tok2str(tipcuser_values, "unknown", user),
21153f17a9db278d33517d9888dd77848f554522a38JP Abgrall		    tok2str(tipcmtype_values, "Unknown", mtype)));
21253f17a9db278d33517d9888dd77848f554522a38JP Abgrall
21353f17a9db278d33517d9888dd77848f554522a38JP Abgrall		if (ndo->ndo_vflag) {
21453f17a9db278d33517d9888dd77848f554522a38JP Abgrall			broadcast_ack = TIPC_BROADCAST_ACK(w1);
21553f17a9db278d33517d9888dd77848f554522a38JP Abgrall			w2 = EXTRACT_32BITS(&ap->w2);
21653f17a9db278d33517d9888dd77848f554522a38JP Abgrall			link_ack = TIPC_LINK_ACK(w2);
21753f17a9db278d33517d9888dd77848f554522a38JP Abgrall			link_seq = TIPC_LINK_SEQ(w2);
21853f17a9db278d33517d9888dd77848f554522a38JP Abgrall			ND_PRINT((ndo, "\n\tPrevious Node %u.%u.%u, Broadcast Ack %u, Link Ack %u, Link Sequence %u",
21953f17a9db278d33517d9888dd77848f554522a38JP Abgrall			    TIPC_ZONE(prev_node), TIPC_CLUSTER(prev_node), TIPC_NODE(prev_node),
22053f17a9db278d33517d9888dd77848f554522a38JP Abgrall			    broadcast_ack, link_ack, link_seq));
22153f17a9db278d33517d9888dd77848f554522a38JP Abgrall		}
22253f17a9db278d33517d9888dd77848f554522a38JP Abgrall	}
22353f17a9db278d33517d9888dd77848f554522a38JP Abgrall	return;
22453f17a9db278d33517d9888dd77848f554522a38JP Abgrall
22553f17a9db278d33517d9888dd77848f554522a38JP Abgralltrunc:
22653f17a9db278d33517d9888dd77848f554522a38JP Abgrall	ND_PRINT((ndo, "[|TIPC]"));
22753f17a9db278d33517d9888dd77848f554522a38JP Abgrall}
22853f17a9db278d33517d9888dd77848f554522a38JP Abgrall
22953f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic void
23053f17a9db278d33517d9888dd77848f554522a38JP Abgrallprint_internal(netdissect_options *ndo, const struct internal_tipc_pkthdr *ap)
23153f17a9db278d33517d9888dd77848f554522a38JP Abgrall{
23253f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int32_t w0, w1, w2, w4, w5, w9;
23353f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int user;
23453f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int hsize;
23553f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int msize;
23653f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int mtype;
23753f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int seq_gap;
23853f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int broadcast_ack;
23953f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int bc_gap_after;
24053f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int bc_gap_to;
24153f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int prev_node;
24253f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int last_sent_frag;
24353f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int next_sent_frag;
24453f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int sess_no;
24553f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int orig_node;
24653f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int dest_node;
24753f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int trans_seq;
24853f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int msg_cnt;
24953f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int link_tol;
25053f17a9db278d33517d9888dd77848f554522a38JP Abgrall
25153f17a9db278d33517d9888dd77848f554522a38JP Abgrall	ND_TCHECK(ap->dest_node);
25253f17a9db278d33517d9888dd77848f554522a38JP Abgrall	w0 = EXTRACT_32BITS(&ap->w0);
25353f17a9db278d33517d9888dd77848f554522a38JP Abgrall	user = TIPC_USER(w0);
25453f17a9db278d33517d9888dd77848f554522a38JP Abgrall	hsize = TIPC_HSIZE(w0);
25553f17a9db278d33517d9888dd77848f554522a38JP Abgrall	msize = TIPC_MSIZE(w0);
25653f17a9db278d33517d9888dd77848f554522a38JP Abgrall	w1 = EXTRACT_32BITS(&ap->w1);
25753f17a9db278d33517d9888dd77848f554522a38JP Abgrall	mtype = TIPC_MTYPE(w1);
25853f17a9db278d33517d9888dd77848f554522a38JP Abgrall	orig_node = EXTRACT_32BITS(&ap->orig_node);
25953f17a9db278d33517d9888dd77848f554522a38JP Abgrall	dest_node = EXTRACT_32BITS(&ap->dest_node);
26053f17a9db278d33517d9888dd77848f554522a38JP Abgrall	ND_PRINT((ndo, "TIPC v%u.0 %u.%u.%u > %u.%u.%u, headerlength %u bytes, MessageSize %u bytes, %s, messageType %s (0x%08x)",
26153f17a9db278d33517d9888dd77848f554522a38JP Abgrall	    TIPC_VER(w0),
26253f17a9db278d33517d9888dd77848f554522a38JP Abgrall	    TIPC_ZONE(orig_node), TIPC_CLUSTER(orig_node), TIPC_NODE(orig_node),
26353f17a9db278d33517d9888dd77848f554522a38JP Abgrall	    TIPC_ZONE(dest_node), TIPC_CLUSTER(dest_node), TIPC_NODE(dest_node),
26453f17a9db278d33517d9888dd77848f554522a38JP Abgrall	    hsize*4, msize,
26553f17a9db278d33517d9888dd77848f554522a38JP Abgrall	    tok2str(tipcuser_values, "unknown", user),
26653f17a9db278d33517d9888dd77848f554522a38JP Abgrall	    tok2str(tipcmtype_values, "Unknown", mtype), w1));
26753f17a9db278d33517d9888dd77848f554522a38JP Abgrall
26853f17a9db278d33517d9888dd77848f554522a38JP Abgrall	if (ndo->ndo_vflag) {
26953f17a9db278d33517d9888dd77848f554522a38JP Abgrall		ND_TCHECK(*ap);
27053f17a9db278d33517d9888dd77848f554522a38JP Abgrall		seq_gap = TIPC_SEQ_GAP(w1);
27153f17a9db278d33517d9888dd77848f554522a38JP Abgrall		broadcast_ack = TIPC_BROADCAST_ACK(w1);
27253f17a9db278d33517d9888dd77848f554522a38JP Abgrall		w2 = EXTRACT_32BITS(&ap->w2);
27353f17a9db278d33517d9888dd77848f554522a38JP Abgrall		bc_gap_after = TIPC_BC_GAP_AFTER(w2);
27453f17a9db278d33517d9888dd77848f554522a38JP Abgrall		bc_gap_to = TIPC_BC_GAP_TO(w2);
27553f17a9db278d33517d9888dd77848f554522a38JP Abgrall		prev_node = EXTRACT_32BITS(&ap->prev_node);
27653f17a9db278d33517d9888dd77848f554522a38JP Abgrall		w4 = EXTRACT_32BITS(&ap->w4);
27753f17a9db278d33517d9888dd77848f554522a38JP Abgrall		last_sent_frag = TIPC_LAST_SENT_FRAG(w4);
27853f17a9db278d33517d9888dd77848f554522a38JP Abgrall		next_sent_frag = TIPC_NEXT_SENT_FRAG(w4);
27953f17a9db278d33517d9888dd77848f554522a38JP Abgrall		w5 = EXTRACT_32BITS(&ap->w5);
28053f17a9db278d33517d9888dd77848f554522a38JP Abgrall		sess_no = TIPC_SESS_NO(w5);
28153f17a9db278d33517d9888dd77848f554522a38JP Abgrall		trans_seq = EXTRACT_32BITS(&ap->trans_seq);
28253f17a9db278d33517d9888dd77848f554522a38JP Abgrall		w9 = EXTRACT_32BITS(&ap->w9);
28353f17a9db278d33517d9888dd77848f554522a38JP Abgrall		msg_cnt = TIPC_MSG_CNT(w9);
28453f17a9db278d33517d9888dd77848f554522a38JP Abgrall		link_tol = TIPC_LINK_TOL(w9);
28553f17a9db278d33517d9888dd77848f554522a38JP Abgrall		ND_PRINT((ndo, "\n\tPrevious Node %u.%u.%u, Session No. %u, Broadcast Ack %u, Sequence Gap %u,  Broadcast Gap After %u, Broadcast Gap To %u, Last Sent Packet No. %u, Next sent Packet No. %u, Transport Sequence %u, msg_count %u, Link Tolerance %u",
28653f17a9db278d33517d9888dd77848f554522a38JP Abgrall		    TIPC_ZONE(prev_node), TIPC_CLUSTER(prev_node), TIPC_NODE(prev_node),
28753f17a9db278d33517d9888dd77848f554522a38JP Abgrall		    sess_no, broadcast_ack, seq_gap, bc_gap_after, bc_gap_to,
28853f17a9db278d33517d9888dd77848f554522a38JP Abgrall		    last_sent_frag, next_sent_frag, trans_seq, msg_cnt,
28953f17a9db278d33517d9888dd77848f554522a38JP Abgrall		    link_tol));
29053f17a9db278d33517d9888dd77848f554522a38JP Abgrall	}
29153f17a9db278d33517d9888dd77848f554522a38JP Abgrall	return;
29253f17a9db278d33517d9888dd77848f554522a38JP Abgrall
29353f17a9db278d33517d9888dd77848f554522a38JP Abgralltrunc:
29453f17a9db278d33517d9888dd77848f554522a38JP Abgrall	ND_PRINT((ndo, "[|TIPC]"));
29553f17a9db278d33517d9888dd77848f554522a38JP Abgrall}
29653f17a9db278d33517d9888dd77848f554522a38JP Abgrall
29753f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic void
29853f17a9db278d33517d9888dd77848f554522a38JP Abgrallprint_link_conf(netdissect_options *ndo, const struct link_conf_tipc_pkthdr *ap)
29953f17a9db278d33517d9888dd77848f554522a38JP Abgrall{
30053f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int32_t w0, w1, w5;
30153f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int user;
30253f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int hsize;
30353f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int msize;
30453f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int mtype;
30553f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int node_sig;
30653f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int prev_node;
30753f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int dest_domain;
30853f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int ntwrk_id;
30953f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int media_id;
31053f17a9db278d33517d9888dd77848f554522a38JP Abgrall
31153f17a9db278d33517d9888dd77848f554522a38JP Abgrall	ND_TCHECK(ap->prev_node);
31253f17a9db278d33517d9888dd77848f554522a38JP Abgrall	w0 = EXTRACT_32BITS(&ap->w0);
31353f17a9db278d33517d9888dd77848f554522a38JP Abgrall	user = TIPC_USER(w0);
31453f17a9db278d33517d9888dd77848f554522a38JP Abgrall	hsize = TIPC_HSIZE(w0);
31553f17a9db278d33517d9888dd77848f554522a38JP Abgrall	msize = TIPC_MSIZE(w0);
31653f17a9db278d33517d9888dd77848f554522a38JP Abgrall	w1 = EXTRACT_32BITS(&ap->w1);
31753f17a9db278d33517d9888dd77848f554522a38JP Abgrall	mtype = TIPC_MTYPE(w1);
31853f17a9db278d33517d9888dd77848f554522a38JP Abgrall	prev_node = EXTRACT_32BITS(&ap->prev_node);
31953f17a9db278d33517d9888dd77848f554522a38JP Abgrall	dest_domain = EXTRACT_32BITS(&ap->dest_domain);
32053f17a9db278d33517d9888dd77848f554522a38JP Abgrall	prev_node = EXTRACT_32BITS(&ap->prev_node);
32153f17a9db278d33517d9888dd77848f554522a38JP Abgrall
32253f17a9db278d33517d9888dd77848f554522a38JP Abgrall	ND_PRINT((ndo, "TIPC v%u.0 %u.%u.%u > %u.%u.%u, headerlength %u bytes, MessageSize %u bytes, %s, messageType %s",
32353f17a9db278d33517d9888dd77848f554522a38JP Abgrall	    TIPC_VER(w0),
32453f17a9db278d33517d9888dd77848f554522a38JP Abgrall	    TIPC_ZONE(prev_node), TIPC_CLUSTER(prev_node), TIPC_NODE(prev_node),
32553f17a9db278d33517d9888dd77848f554522a38JP Abgrall	    TIPC_ZONE(dest_domain), TIPC_CLUSTER(dest_domain), TIPC_NODE(dest_domain),
32653f17a9db278d33517d9888dd77848f554522a38JP Abgrall	    hsize*4, msize,
32753f17a9db278d33517d9888dd77848f554522a38JP Abgrall	    tok2str(tipcuser_values, "unknown", user),
32853f17a9db278d33517d9888dd77848f554522a38JP Abgrall	    tok2str(tipc_linkconf_mtype_values, "Unknown", mtype)));
32953f17a9db278d33517d9888dd77848f554522a38JP Abgrall	if (ndo->ndo_vflag) {
33053f17a9db278d33517d9888dd77848f554522a38JP Abgrall		ND_TCHECK(ap->w5);
33153f17a9db278d33517d9888dd77848f554522a38JP Abgrall		node_sig = TIPC_NODE_SIG(w1);
33253f17a9db278d33517d9888dd77848f554522a38JP Abgrall		ntwrk_id = EXTRACT_32BITS(&ap->ntwrk_id);
33353f17a9db278d33517d9888dd77848f554522a38JP Abgrall		w5 = EXTRACT_32BITS(&ap->w5);
33453f17a9db278d33517d9888dd77848f554522a38JP Abgrall		media_id = TIPC_MEDIA_ID(w5);
33553f17a9db278d33517d9888dd77848f554522a38JP Abgrall		ND_PRINT((ndo, "\n\tNodeSignature %u, network_id %u, media_id %u",
33653f17a9db278d33517d9888dd77848f554522a38JP Abgrall		    node_sig, ntwrk_id, media_id));
33753f17a9db278d33517d9888dd77848f554522a38JP Abgrall	}
33853f17a9db278d33517d9888dd77848f554522a38JP Abgrall	return;
33953f17a9db278d33517d9888dd77848f554522a38JP Abgrall
34053f17a9db278d33517d9888dd77848f554522a38JP Abgralltrunc:
34153f17a9db278d33517d9888dd77848f554522a38JP Abgrall	ND_PRINT((ndo, "[|TIPC]"));
34253f17a9db278d33517d9888dd77848f554522a38JP Abgrall}
34353f17a9db278d33517d9888dd77848f554522a38JP Abgrall
34453f17a9db278d33517d9888dd77848f554522a38JP Abgrallvoid
34553f17a9db278d33517d9888dd77848f554522a38JP Abgralltipc_print(netdissect_options *ndo, const u_char *bp, u_int length _U_,
34653f17a9db278d33517d9888dd77848f554522a38JP Abgrall    u_int caplen _U_)
34753f17a9db278d33517d9888dd77848f554522a38JP Abgrall{
34853f17a9db278d33517d9888dd77848f554522a38JP Abgrall	const struct tipc_pkthdr *ap;
34953f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int32_t w0;
35053f17a9db278d33517d9888dd77848f554522a38JP Abgrall	u_int user;
35153f17a9db278d33517d9888dd77848f554522a38JP Abgrall
35253f17a9db278d33517d9888dd77848f554522a38JP Abgrall	ap = (struct tipc_pkthdr *)bp;
35353f17a9db278d33517d9888dd77848f554522a38JP Abgrall	ND_TCHECK(ap->w0);
35453f17a9db278d33517d9888dd77848f554522a38JP Abgrall	w0 = EXTRACT_32BITS(&ap->w0);
35553f17a9db278d33517d9888dd77848f554522a38JP Abgrall	user = TIPC_USER(w0);
35653f17a9db278d33517d9888dd77848f554522a38JP Abgrall
35753f17a9db278d33517d9888dd77848f554522a38JP Abgrall	switch (user)
35853f17a9db278d33517d9888dd77848f554522a38JP Abgrall	{
35953f17a9db278d33517d9888dd77848f554522a38JP Abgrall		case TIPC_USER_LOW_IMPORTANCE:
36053f17a9db278d33517d9888dd77848f554522a38JP Abgrall		case TIPC_USER_MEDIUM_IMPORTANCE:
36153f17a9db278d33517d9888dd77848f554522a38JP Abgrall		case TIPC_USER_HIGH_IMPORTANCE:
36253f17a9db278d33517d9888dd77848f554522a38JP Abgrall		case TIPC_USER_CRITICAL_IMPORTANCE:
36353f17a9db278d33517d9888dd77848f554522a38JP Abgrall		case TIPC_USER_NAME_DISTRIBUTOR:
36453f17a9db278d33517d9888dd77848f554522a38JP Abgrall		case TIPC_USER_CONN_MANAGER:
36553f17a9db278d33517d9888dd77848f554522a38JP Abgrall			print_payload(ndo, (struct payload_tipc_pkthdr *)bp);
36653f17a9db278d33517d9888dd77848f554522a38JP Abgrall			break;
36753f17a9db278d33517d9888dd77848f554522a38JP Abgrall
36853f17a9db278d33517d9888dd77848f554522a38JP Abgrall		case TIPC_USER_LINK_CONFIG:
36953f17a9db278d33517d9888dd77848f554522a38JP Abgrall			print_link_conf(ndo, (struct link_conf_tipc_pkthdr *)bp);
37053f17a9db278d33517d9888dd77848f554522a38JP Abgrall			break;
37153f17a9db278d33517d9888dd77848f554522a38JP Abgrall
37253f17a9db278d33517d9888dd77848f554522a38JP Abgrall		case TIPC_USER_BCAST_PROTOCOL:
37353f17a9db278d33517d9888dd77848f554522a38JP Abgrall		case TIPC_USER_MSG_BUNDLER:
37453f17a9db278d33517d9888dd77848f554522a38JP Abgrall		case TIPC_USER_LINK_PROTOCOL:
37553f17a9db278d33517d9888dd77848f554522a38JP Abgrall		case TIPC_USER_CHANGEOVER_PROTOCOL:
37653f17a9db278d33517d9888dd77848f554522a38JP Abgrall		case TIPC_USER_MSG_FRAGMENTER:
37753f17a9db278d33517d9888dd77848f554522a38JP Abgrall			print_internal(ndo, (struct internal_tipc_pkthdr *)bp);
37853f17a9db278d33517d9888dd77848f554522a38JP Abgrall			break;
37953f17a9db278d33517d9888dd77848f554522a38JP Abgrall
38053f17a9db278d33517d9888dd77848f554522a38JP Abgrall	}
38153f17a9db278d33517d9888dd77848f554522a38JP Abgrall	return;
38253f17a9db278d33517d9888dd77848f554522a38JP Abgrall
38353f17a9db278d33517d9888dd77848f554522a38JP Abgralltrunc:
38453f17a9db278d33517d9888dd77848f554522a38JP Abgrall	ND_PRINT((ndo, "[|TIPC]"));
38553f17a9db278d33517d9888dd77848f554522a38JP Abgrall}
38653f17a9db278d33517d9888dd77848f554522a38JP Abgrall
38753f17a9db278d33517d9888dd77848f554522a38JP Abgrall/*
38853f17a9db278d33517d9888dd77848f554522a38JP Abgrall * Local Variables:
38953f17a9db278d33517d9888dd77848f554522a38JP Abgrall * c-style: bsd
39053f17a9db278d33517d9888dd77848f554522a38JP Abgrall * End:
39153f17a9db278d33517d9888dd77848f554522a38JP Abgrall */
39253f17a9db278d33517d9888dd77848f554522a38JP Abgrall
393