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 22892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#define NETDISSECT_REWORKED 2353f17a9db278d33517d9888dd77848f554522a38JP Abgrall#ifdef HAVE_CONFIG_H 2453f17a9db278d33517d9888dd77848f554522a38JP Abgrall#include "config.h" 2553f17a9db278d33517d9888dd77848f554522a38JP Abgrall#endif 2653f17a9db278d33517d9888dd77848f554522a38JP Abgrall 2753f17a9db278d33517d9888dd77848f554522a38JP Abgrall#include <tcpdump-stdinc.h> 2853f17a9db278d33517d9888dd77848f554522a38JP Abgrall 29892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#include "interface.h" 3053f17a9db278d33517d9888dd77848f554522a38JP Abgrall#include "ether.h" 3153f17a9db278d33517d9888dd77848f554522a38JP Abgrall#include "ethertype.h" 3253f17a9db278d33517d9888dd77848f554522a38JP Abgrall#include "extract.h" /* must come after interface.h */ 3353f17a9db278d33517d9888dd77848f554522a38JP Abgrall 34892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughesstatic const char tstr[] = "[|TIPC]"; 35892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes 3653f17a9db278d33517d9888dd77848f554522a38JP Abgrall/* 3753f17a9db278d33517d9888dd77848f554522a38JP Abgrall * Transparent Inter-Process Communication (TIPC) protocol. 3853f17a9db278d33517d9888dd77848f554522a38JP Abgrall * 3953f17a9db278d33517d9888dd77848f554522a38JP Abgrall * http://tipc.sourceforge.net/doc/draft-spec-tipc-07.html 4053f17a9db278d33517d9888dd77848f554522a38JP Abgrall * http://tipc.sourceforge.net/doc/tipc_message_formats.html 4153f17a9db278d33517d9888dd77848f554522a38JP Abgrall */ 4253f17a9db278d33517d9888dd77848f554522a38JP Abgrall 4353f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_USER_LOW_IMPORTANCE 0 4453f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_USER_MEDIUM_IMPORTANCE 1 4553f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_USER_HIGH_IMPORTANCE 2 4653f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_USER_CRITICAL_IMPORTANCE 3 4753f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_USER_BCAST_PROTOCOL 5 4853f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_USER_MSG_BUNDLER 6 4953f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_USER_LINK_PROTOCOL 7 5053f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_USER_CONN_MANAGER 8 5153f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_USER_CHANGEOVER_PROTOCOL 10 5253f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_USER_NAME_DISTRIBUTOR 11 5353f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_USER_MSG_FRAGMENTER 12 5453f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_USER_LINK_CONFIG 13 5553f17a9db278d33517d9888dd77848f554522a38JP Abgrall 5653f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_CONN_MSG 0 5753f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_DIRECT_MSG 1 5853f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_NAMED_MSG 2 5953f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_MCAST_MSG 3 6053f17a9db278d33517d9888dd77848f554522a38JP Abgrall 6153f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_ZONE(addr) (((addr) >> 24) & 0xFF) 6253f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_CLUSTER(addr) (((addr) >> 12) & 0xFFF) 6353f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_NODE(addr) (((addr) >> 0) & 0xFFF) 6453f17a9db278d33517d9888dd77848f554522a38JP Abgrall 6553f17a9db278d33517d9888dd77848f554522a38JP Abgrallstruct tipc_pkthdr { 66892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes uint32_t w0; 67892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes uint32_t w1; 6853f17a9db278d33517d9888dd77848f554522a38JP Abgrall}; 6953f17a9db278d33517d9888dd77848f554522a38JP Abgrall 7053f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_VER(w0) (((w0) >> 29) & 0x07) 7153f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_USER(w0) (((w0) >> 25) & 0x0F) 7253f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_HSIZE(w0) (((w0) >> 21) & 0x0F) 7353f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_MSIZE(w0) (((w0) >> 0) & 0xFFFF) 7453f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_MTYPE(w1) (((w1) >> 29) & 0x07) 7553f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_BROADCAST_ACK(w1) (((w1) >> 0) & 0xFFFF) 7653f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_LINK_ACK(w2) (((w2) >> 16) & 0xFFFF) 7753f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_LINK_SEQ(w2) (((w2) >> 0) & 0xFFFF) 7853f17a9db278d33517d9888dd77848f554522a38JP Abgrall 7953f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const struct tok tipcuser_values[] = { 8053f17a9db278d33517d9888dd77848f554522a38JP Abgrall { TIPC_USER_LOW_IMPORTANCE, "Low Importance Data payload" }, 8153f17a9db278d33517d9888dd77848f554522a38JP Abgrall { TIPC_USER_MEDIUM_IMPORTANCE, "Medium Importance Data payload" }, 8253f17a9db278d33517d9888dd77848f554522a38JP Abgrall { TIPC_USER_HIGH_IMPORTANCE, "High Importance Data payload" }, 8353f17a9db278d33517d9888dd77848f554522a38JP Abgrall { TIPC_USER_CRITICAL_IMPORTANCE, "Critical Importance Data payload" }, 8453f17a9db278d33517d9888dd77848f554522a38JP Abgrall { TIPC_USER_BCAST_PROTOCOL, "Broadcast Link Protocol internal" }, 8553f17a9db278d33517d9888dd77848f554522a38JP Abgrall { TIPC_USER_MSG_BUNDLER, "Message Bundler Protocol internal" }, 8653f17a9db278d33517d9888dd77848f554522a38JP Abgrall { TIPC_USER_LINK_PROTOCOL, "Link State Protocol internal" }, 8753f17a9db278d33517d9888dd77848f554522a38JP Abgrall { TIPC_USER_CONN_MANAGER, "Connection Manager internal" }, 8853f17a9db278d33517d9888dd77848f554522a38JP Abgrall { TIPC_USER_CHANGEOVER_PROTOCOL, "Link Changeover Protocol internal" }, 8953f17a9db278d33517d9888dd77848f554522a38JP Abgrall { TIPC_USER_NAME_DISTRIBUTOR, "Name Table Update Protocol internal" }, 9053f17a9db278d33517d9888dd77848f554522a38JP Abgrall { TIPC_USER_MSG_FRAGMENTER, "Message Fragmentation Protocol internal" }, 9153f17a9db278d33517d9888dd77848f554522a38JP Abgrall { TIPC_USER_LINK_CONFIG, "Neighbor Detection Protocol internal" }, 9253f17a9db278d33517d9888dd77848f554522a38JP Abgrall { 0, NULL } 9353f17a9db278d33517d9888dd77848f554522a38JP Abgrall}; 9453f17a9db278d33517d9888dd77848f554522a38JP Abgrall 9553f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const struct tok tipcmtype_values[] = { 9653f17a9db278d33517d9888dd77848f554522a38JP Abgrall { TIPC_CONN_MSG, "CONN_MSG" }, 9753f17a9db278d33517d9888dd77848f554522a38JP Abgrall { TIPC_DIRECT_MSG, "MCAST_MSG" }, 9853f17a9db278d33517d9888dd77848f554522a38JP Abgrall { TIPC_NAMED_MSG, "NAMED_MSG" }, 9953f17a9db278d33517d9888dd77848f554522a38JP Abgrall { TIPC_MCAST_MSG, "DIRECT_MSG" }, 10053f17a9db278d33517d9888dd77848f554522a38JP Abgrall { 0, NULL } 10153f17a9db278d33517d9888dd77848f554522a38JP Abgrall}; 10253f17a9db278d33517d9888dd77848f554522a38JP Abgrall 10353f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const struct tok tipc_linkconf_mtype_values[] = { 10453f17a9db278d33517d9888dd77848f554522a38JP Abgrall { 0, "Link request" }, 10553f17a9db278d33517d9888dd77848f554522a38JP Abgrall { 1, "Link response" }, 10653f17a9db278d33517d9888dd77848f554522a38JP Abgrall { 0, NULL } 10753f17a9db278d33517d9888dd77848f554522a38JP Abgrall}; 10853f17a9db278d33517d9888dd77848f554522a38JP Abgrall 10953f17a9db278d33517d9888dd77848f554522a38JP Abgrallstruct payload_tipc_pkthdr { 110892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes uint32_t w0; 111892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes uint32_t w1; 112892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes uint32_t w2; 113892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes uint32_t prev_node; 114892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes uint32_t orig_port; 115892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes uint32_t dest_port; 116892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes uint32_t orig_node; 117892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes uint32_t dest_node; 118892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes uint32_t name_type; 119892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes uint32_t w9; 120892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes uint32_t wA; 12153f17a9db278d33517d9888dd77848f554522a38JP Abgrall}; 12253f17a9db278d33517d9888dd77848f554522a38JP Abgrall 12353f17a9db278d33517d9888dd77848f554522a38JP Abgrallstruct internal_tipc_pkthdr { 124892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes uint32_t w0; 125892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes uint32_t w1; 126892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes uint32_t w2; 127892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes uint32_t prev_node; 128892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes uint32_t w4; 129892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes uint32_t w5; 130892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes uint32_t orig_node; 131892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes uint32_t dest_node; 132892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes uint32_t trans_seq; 133892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes uint32_t w9; 13453f17a9db278d33517d9888dd77848f554522a38JP Abgrall}; 13553f17a9db278d33517d9888dd77848f554522a38JP Abgrall 13653f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_SEQ_GAP(w1) (((w1) >> 16) & 0x1FFF) 13753f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_BC_GAP_AFTER(w2) (((w2) >> 16) & 0xFFFF) 13853f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_BC_GAP_TO(w2) (((w2) >> 0) & 0xFFFF) 13953f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_LAST_SENT_FRAG(w4) (((w4) >> 16) & 0xFFFF) 14053f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_NEXT_SENT_FRAG(w4) (((w4) >> 0) & 0xFFFF) 14153f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_SESS_NO(w5) (((w5) >> 16) & 0xFFFF) 14253f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_MSG_CNT(w9) (((w9) >> 16) & 0xFFFF) 14353f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_LINK_TOL(w9) (((w9) >> 0) & 0xFFFF) 14453f17a9db278d33517d9888dd77848f554522a38JP Abgrall 14553f17a9db278d33517d9888dd77848f554522a38JP Abgrallstruct link_conf_tipc_pkthdr { 146892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes uint32_t w0; 147892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes uint32_t w1; 148892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes uint32_t dest_domain; 149892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes uint32_t prev_node; 150892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes uint32_t ntwrk_id; 151892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes uint32_t w5; 152892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes uint8_t media_address[16]; 15353f17a9db278d33517d9888dd77848f554522a38JP Abgrall}; 15453f17a9db278d33517d9888dd77848f554522a38JP Abgrall 15553f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_NODE_SIG(w1) (((w1) >> 0) & 0xFFFF) 15653f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define TIPC_MEDIA_ID(w5) (((w5) >> 0) & 0xFF) 15753f17a9db278d33517d9888dd77848f554522a38JP Abgrall 15853f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic void 15953f17a9db278d33517d9888dd77848f554522a38JP Abgrallprint_payload(netdissect_options *ndo, const struct payload_tipc_pkthdr *ap) 16053f17a9db278d33517d9888dd77848f554522a38JP Abgrall{ 161892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes uint32_t w0, w1, w2; 16253f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int user; 16353f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int hsize; 16453f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int msize; 16553f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int mtype; 16653f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int broadcast_ack; 16753f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int link_ack; 16853f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int link_seq; 16953f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int prev_node; 17053f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int orig_port; 17153f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int dest_port; 17253f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int orig_node; 17353f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int dest_node; 17453f17a9db278d33517d9888dd77848f554522a38JP Abgrall 17553f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_TCHECK(ap->dest_port); 17653f17a9db278d33517d9888dd77848f554522a38JP Abgrall w0 = EXTRACT_32BITS(&ap->w0); 17753f17a9db278d33517d9888dd77848f554522a38JP Abgrall user = TIPC_USER(w0); 17853f17a9db278d33517d9888dd77848f554522a38JP Abgrall hsize = TIPC_HSIZE(w0); 17953f17a9db278d33517d9888dd77848f554522a38JP Abgrall msize = TIPC_MSIZE(w0); 18053f17a9db278d33517d9888dd77848f554522a38JP Abgrall w1 = EXTRACT_32BITS(&ap->w1); 18153f17a9db278d33517d9888dd77848f554522a38JP Abgrall mtype = TIPC_MTYPE(w1); 18253f17a9db278d33517d9888dd77848f554522a38JP Abgrall prev_node = EXTRACT_32BITS(&ap->prev_node); 18353f17a9db278d33517d9888dd77848f554522a38JP Abgrall orig_port = EXTRACT_32BITS(&ap->orig_port); 18453f17a9db278d33517d9888dd77848f554522a38JP Abgrall dest_port = EXTRACT_32BITS(&ap->dest_port); 18553f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (hsize <= 6) { 18653f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo, "TIPC v%u.0 %u.%u.%u:%u > %u, headerlength %u bytes, MessageSize %u bytes, %s, messageType %s", 18753f17a9db278d33517d9888dd77848f554522a38JP Abgrall TIPC_VER(w0), 18853f17a9db278d33517d9888dd77848f554522a38JP Abgrall TIPC_ZONE(prev_node), TIPC_CLUSTER(prev_node), TIPC_NODE(prev_node), 18953f17a9db278d33517d9888dd77848f554522a38JP Abgrall orig_port, dest_port, 19053f17a9db278d33517d9888dd77848f554522a38JP Abgrall hsize*4, msize, 19153f17a9db278d33517d9888dd77848f554522a38JP Abgrall tok2str(tipcuser_values, "unknown", user), 19253f17a9db278d33517d9888dd77848f554522a38JP Abgrall tok2str(tipcmtype_values, "Unknown", mtype))); 19353f17a9db278d33517d9888dd77848f554522a38JP Abgrall } else { 19453f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_TCHECK(ap->dest_node); 19553f17a9db278d33517d9888dd77848f554522a38JP Abgrall orig_node = EXTRACT_32BITS(&ap->orig_node); 19653f17a9db278d33517d9888dd77848f554522a38JP Abgrall dest_node = EXTRACT_32BITS(&ap->dest_node); 19753f17a9db278d33517d9888dd77848f554522a38JP 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", 19853f17a9db278d33517d9888dd77848f554522a38JP Abgrall TIPC_VER(w0), 19953f17a9db278d33517d9888dd77848f554522a38JP Abgrall TIPC_ZONE(orig_node), TIPC_CLUSTER(orig_node), TIPC_NODE(orig_node), 20053f17a9db278d33517d9888dd77848f554522a38JP Abgrall orig_port, 20153f17a9db278d33517d9888dd77848f554522a38JP Abgrall TIPC_ZONE(dest_node), TIPC_CLUSTER(dest_node), TIPC_NODE(dest_node), 20253f17a9db278d33517d9888dd77848f554522a38JP Abgrall dest_port, 20353f17a9db278d33517d9888dd77848f554522a38JP Abgrall hsize*4, msize, 20453f17a9db278d33517d9888dd77848f554522a38JP Abgrall tok2str(tipcuser_values, "unknown", user), 20553f17a9db278d33517d9888dd77848f554522a38JP Abgrall tok2str(tipcmtype_values, "Unknown", mtype))); 20653f17a9db278d33517d9888dd77848f554522a38JP Abgrall 20753f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (ndo->ndo_vflag) { 20853f17a9db278d33517d9888dd77848f554522a38JP Abgrall broadcast_ack = TIPC_BROADCAST_ACK(w1); 20953f17a9db278d33517d9888dd77848f554522a38JP Abgrall w2 = EXTRACT_32BITS(&ap->w2); 21053f17a9db278d33517d9888dd77848f554522a38JP Abgrall link_ack = TIPC_LINK_ACK(w2); 21153f17a9db278d33517d9888dd77848f554522a38JP Abgrall link_seq = TIPC_LINK_SEQ(w2); 21253f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo, "\n\tPrevious Node %u.%u.%u, Broadcast Ack %u, Link Ack %u, Link Sequence %u", 21353f17a9db278d33517d9888dd77848f554522a38JP Abgrall TIPC_ZONE(prev_node), TIPC_CLUSTER(prev_node), TIPC_NODE(prev_node), 21453f17a9db278d33517d9888dd77848f554522a38JP Abgrall broadcast_ack, link_ack, link_seq)); 21553f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 21653f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 21753f17a9db278d33517d9888dd77848f554522a38JP Abgrall return; 21853f17a9db278d33517d9888dd77848f554522a38JP Abgrall 21953f17a9db278d33517d9888dd77848f554522a38JP Abgralltrunc: 220892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes ND_PRINT((ndo, "%s", tstr)); 22153f17a9db278d33517d9888dd77848f554522a38JP Abgrall} 222892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes 22353f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic void 22453f17a9db278d33517d9888dd77848f554522a38JP Abgrallprint_internal(netdissect_options *ndo, const struct internal_tipc_pkthdr *ap) 22553f17a9db278d33517d9888dd77848f554522a38JP Abgrall{ 226892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes uint32_t w0, w1, w2, w4, w5, w9; 22753f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int user; 22853f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int hsize; 22953f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int msize; 23053f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int mtype; 23153f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int seq_gap; 23253f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int broadcast_ack; 23353f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int bc_gap_after; 23453f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int bc_gap_to; 23553f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int prev_node; 23653f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int last_sent_frag; 23753f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int next_sent_frag; 23853f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int sess_no; 23953f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int orig_node; 24053f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int dest_node; 24153f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int trans_seq; 24253f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int msg_cnt; 24353f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int link_tol; 24453f17a9db278d33517d9888dd77848f554522a38JP Abgrall 24553f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_TCHECK(ap->dest_node); 24653f17a9db278d33517d9888dd77848f554522a38JP Abgrall w0 = EXTRACT_32BITS(&ap->w0); 24753f17a9db278d33517d9888dd77848f554522a38JP Abgrall user = TIPC_USER(w0); 24853f17a9db278d33517d9888dd77848f554522a38JP Abgrall hsize = TIPC_HSIZE(w0); 24953f17a9db278d33517d9888dd77848f554522a38JP Abgrall msize = TIPC_MSIZE(w0); 25053f17a9db278d33517d9888dd77848f554522a38JP Abgrall w1 = EXTRACT_32BITS(&ap->w1); 25153f17a9db278d33517d9888dd77848f554522a38JP Abgrall mtype = TIPC_MTYPE(w1); 25253f17a9db278d33517d9888dd77848f554522a38JP Abgrall orig_node = EXTRACT_32BITS(&ap->orig_node); 25353f17a9db278d33517d9888dd77848f554522a38JP Abgrall dest_node = EXTRACT_32BITS(&ap->dest_node); 25453f17a9db278d33517d9888dd77848f554522a38JP 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)", 25553f17a9db278d33517d9888dd77848f554522a38JP Abgrall TIPC_VER(w0), 25653f17a9db278d33517d9888dd77848f554522a38JP Abgrall TIPC_ZONE(orig_node), TIPC_CLUSTER(orig_node), TIPC_NODE(orig_node), 25753f17a9db278d33517d9888dd77848f554522a38JP Abgrall TIPC_ZONE(dest_node), TIPC_CLUSTER(dest_node), TIPC_NODE(dest_node), 25853f17a9db278d33517d9888dd77848f554522a38JP Abgrall hsize*4, msize, 25953f17a9db278d33517d9888dd77848f554522a38JP Abgrall tok2str(tipcuser_values, "unknown", user), 26053f17a9db278d33517d9888dd77848f554522a38JP Abgrall tok2str(tipcmtype_values, "Unknown", mtype), w1)); 26153f17a9db278d33517d9888dd77848f554522a38JP Abgrall 26253f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (ndo->ndo_vflag) { 26353f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_TCHECK(*ap); 26453f17a9db278d33517d9888dd77848f554522a38JP Abgrall seq_gap = TIPC_SEQ_GAP(w1); 26553f17a9db278d33517d9888dd77848f554522a38JP Abgrall broadcast_ack = TIPC_BROADCAST_ACK(w1); 26653f17a9db278d33517d9888dd77848f554522a38JP Abgrall w2 = EXTRACT_32BITS(&ap->w2); 26753f17a9db278d33517d9888dd77848f554522a38JP Abgrall bc_gap_after = TIPC_BC_GAP_AFTER(w2); 26853f17a9db278d33517d9888dd77848f554522a38JP Abgrall bc_gap_to = TIPC_BC_GAP_TO(w2); 26953f17a9db278d33517d9888dd77848f554522a38JP Abgrall prev_node = EXTRACT_32BITS(&ap->prev_node); 27053f17a9db278d33517d9888dd77848f554522a38JP Abgrall w4 = EXTRACT_32BITS(&ap->w4); 27153f17a9db278d33517d9888dd77848f554522a38JP Abgrall last_sent_frag = TIPC_LAST_SENT_FRAG(w4); 27253f17a9db278d33517d9888dd77848f554522a38JP Abgrall next_sent_frag = TIPC_NEXT_SENT_FRAG(w4); 27353f17a9db278d33517d9888dd77848f554522a38JP Abgrall w5 = EXTRACT_32BITS(&ap->w5); 27453f17a9db278d33517d9888dd77848f554522a38JP Abgrall sess_no = TIPC_SESS_NO(w5); 27553f17a9db278d33517d9888dd77848f554522a38JP Abgrall trans_seq = EXTRACT_32BITS(&ap->trans_seq); 27653f17a9db278d33517d9888dd77848f554522a38JP Abgrall w9 = EXTRACT_32BITS(&ap->w9); 27753f17a9db278d33517d9888dd77848f554522a38JP Abgrall msg_cnt = TIPC_MSG_CNT(w9); 27853f17a9db278d33517d9888dd77848f554522a38JP Abgrall link_tol = TIPC_LINK_TOL(w9); 27953f17a9db278d33517d9888dd77848f554522a38JP 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", 28053f17a9db278d33517d9888dd77848f554522a38JP Abgrall TIPC_ZONE(prev_node), TIPC_CLUSTER(prev_node), TIPC_NODE(prev_node), 28153f17a9db278d33517d9888dd77848f554522a38JP Abgrall sess_no, broadcast_ack, seq_gap, bc_gap_after, bc_gap_to, 28253f17a9db278d33517d9888dd77848f554522a38JP Abgrall last_sent_frag, next_sent_frag, trans_seq, msg_cnt, 28353f17a9db278d33517d9888dd77848f554522a38JP Abgrall link_tol)); 28453f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 28553f17a9db278d33517d9888dd77848f554522a38JP Abgrall return; 28653f17a9db278d33517d9888dd77848f554522a38JP Abgrall 28753f17a9db278d33517d9888dd77848f554522a38JP Abgralltrunc: 288892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes ND_PRINT((ndo, "%s", tstr)); 28953f17a9db278d33517d9888dd77848f554522a38JP Abgrall} 29053f17a9db278d33517d9888dd77848f554522a38JP Abgrall 29153f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic void 29253f17a9db278d33517d9888dd77848f554522a38JP Abgrallprint_link_conf(netdissect_options *ndo, const struct link_conf_tipc_pkthdr *ap) 29353f17a9db278d33517d9888dd77848f554522a38JP Abgrall{ 294892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes uint32_t w0, w1, w5; 29553f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int user; 29653f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int hsize; 29753f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int msize; 29853f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int mtype; 29953f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int node_sig; 30053f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int prev_node; 30153f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int dest_domain; 30253f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int ntwrk_id; 30353f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int media_id; 30453f17a9db278d33517d9888dd77848f554522a38JP Abgrall 30553f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_TCHECK(ap->prev_node); 30653f17a9db278d33517d9888dd77848f554522a38JP Abgrall w0 = EXTRACT_32BITS(&ap->w0); 30753f17a9db278d33517d9888dd77848f554522a38JP Abgrall user = TIPC_USER(w0); 30853f17a9db278d33517d9888dd77848f554522a38JP Abgrall hsize = TIPC_HSIZE(w0); 30953f17a9db278d33517d9888dd77848f554522a38JP Abgrall msize = TIPC_MSIZE(w0); 31053f17a9db278d33517d9888dd77848f554522a38JP Abgrall w1 = EXTRACT_32BITS(&ap->w1); 31153f17a9db278d33517d9888dd77848f554522a38JP Abgrall mtype = TIPC_MTYPE(w1); 31253f17a9db278d33517d9888dd77848f554522a38JP Abgrall dest_domain = EXTRACT_32BITS(&ap->dest_domain); 31353f17a9db278d33517d9888dd77848f554522a38JP Abgrall prev_node = EXTRACT_32BITS(&ap->prev_node); 31453f17a9db278d33517d9888dd77848f554522a38JP Abgrall 31553f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo, "TIPC v%u.0 %u.%u.%u > %u.%u.%u, headerlength %u bytes, MessageSize %u bytes, %s, messageType %s", 31653f17a9db278d33517d9888dd77848f554522a38JP Abgrall TIPC_VER(w0), 31753f17a9db278d33517d9888dd77848f554522a38JP Abgrall TIPC_ZONE(prev_node), TIPC_CLUSTER(prev_node), TIPC_NODE(prev_node), 31853f17a9db278d33517d9888dd77848f554522a38JP Abgrall TIPC_ZONE(dest_domain), TIPC_CLUSTER(dest_domain), TIPC_NODE(dest_domain), 31953f17a9db278d33517d9888dd77848f554522a38JP Abgrall hsize*4, msize, 32053f17a9db278d33517d9888dd77848f554522a38JP Abgrall tok2str(tipcuser_values, "unknown", user), 32153f17a9db278d33517d9888dd77848f554522a38JP Abgrall tok2str(tipc_linkconf_mtype_values, "Unknown", mtype))); 32253f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (ndo->ndo_vflag) { 32353f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_TCHECK(ap->w5); 32453f17a9db278d33517d9888dd77848f554522a38JP Abgrall node_sig = TIPC_NODE_SIG(w1); 32553f17a9db278d33517d9888dd77848f554522a38JP Abgrall ntwrk_id = EXTRACT_32BITS(&ap->ntwrk_id); 32653f17a9db278d33517d9888dd77848f554522a38JP Abgrall w5 = EXTRACT_32BITS(&ap->w5); 32753f17a9db278d33517d9888dd77848f554522a38JP Abgrall media_id = TIPC_MEDIA_ID(w5); 32853f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_PRINT((ndo, "\n\tNodeSignature %u, network_id %u, media_id %u", 32953f17a9db278d33517d9888dd77848f554522a38JP Abgrall node_sig, ntwrk_id, media_id)); 33053f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 33153f17a9db278d33517d9888dd77848f554522a38JP Abgrall return; 33253f17a9db278d33517d9888dd77848f554522a38JP Abgrall 33353f17a9db278d33517d9888dd77848f554522a38JP Abgralltrunc: 334892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes ND_PRINT((ndo, "%s", tstr)); 33553f17a9db278d33517d9888dd77848f554522a38JP Abgrall} 33653f17a9db278d33517d9888dd77848f554522a38JP Abgrall 33753f17a9db278d33517d9888dd77848f554522a38JP Abgrallvoid 33853f17a9db278d33517d9888dd77848f554522a38JP Abgralltipc_print(netdissect_options *ndo, const u_char *bp, u_int length _U_, 33953f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int caplen _U_) 34053f17a9db278d33517d9888dd77848f554522a38JP Abgrall{ 34153f17a9db278d33517d9888dd77848f554522a38JP Abgrall const struct tipc_pkthdr *ap; 342892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes uint32_t w0; 34353f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int user; 34453f17a9db278d33517d9888dd77848f554522a38JP Abgrall 34553f17a9db278d33517d9888dd77848f554522a38JP Abgrall ap = (struct tipc_pkthdr *)bp; 34653f17a9db278d33517d9888dd77848f554522a38JP Abgrall ND_TCHECK(ap->w0); 34753f17a9db278d33517d9888dd77848f554522a38JP Abgrall w0 = EXTRACT_32BITS(&ap->w0); 34853f17a9db278d33517d9888dd77848f554522a38JP Abgrall user = TIPC_USER(w0); 34953f17a9db278d33517d9888dd77848f554522a38JP Abgrall 35053f17a9db278d33517d9888dd77848f554522a38JP Abgrall switch (user) 35153f17a9db278d33517d9888dd77848f554522a38JP Abgrall { 35253f17a9db278d33517d9888dd77848f554522a38JP Abgrall case TIPC_USER_LOW_IMPORTANCE: 35353f17a9db278d33517d9888dd77848f554522a38JP Abgrall case TIPC_USER_MEDIUM_IMPORTANCE: 35453f17a9db278d33517d9888dd77848f554522a38JP Abgrall case TIPC_USER_HIGH_IMPORTANCE: 35553f17a9db278d33517d9888dd77848f554522a38JP Abgrall case TIPC_USER_CRITICAL_IMPORTANCE: 35653f17a9db278d33517d9888dd77848f554522a38JP Abgrall case TIPC_USER_NAME_DISTRIBUTOR: 35753f17a9db278d33517d9888dd77848f554522a38JP Abgrall case TIPC_USER_CONN_MANAGER: 35853f17a9db278d33517d9888dd77848f554522a38JP Abgrall print_payload(ndo, (struct payload_tipc_pkthdr *)bp); 359892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes break; 36053f17a9db278d33517d9888dd77848f554522a38JP Abgrall 36153f17a9db278d33517d9888dd77848f554522a38JP Abgrall case TIPC_USER_LINK_CONFIG: 36253f17a9db278d33517d9888dd77848f554522a38JP Abgrall print_link_conf(ndo, (struct link_conf_tipc_pkthdr *)bp); 36353f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 36453f17a9db278d33517d9888dd77848f554522a38JP Abgrall 36553f17a9db278d33517d9888dd77848f554522a38JP Abgrall case TIPC_USER_BCAST_PROTOCOL: 36653f17a9db278d33517d9888dd77848f554522a38JP Abgrall case TIPC_USER_MSG_BUNDLER: 36753f17a9db278d33517d9888dd77848f554522a38JP Abgrall case TIPC_USER_LINK_PROTOCOL: 36853f17a9db278d33517d9888dd77848f554522a38JP Abgrall case TIPC_USER_CHANGEOVER_PROTOCOL: 36953f17a9db278d33517d9888dd77848f554522a38JP Abgrall case TIPC_USER_MSG_FRAGMENTER: 37053f17a9db278d33517d9888dd77848f554522a38JP Abgrall print_internal(ndo, (struct internal_tipc_pkthdr *)bp); 37153f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 37253f17a9db278d33517d9888dd77848f554522a38JP Abgrall 37353f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 37453f17a9db278d33517d9888dd77848f554522a38JP Abgrall return; 37553f17a9db278d33517d9888dd77848f554522a38JP Abgrall 37653f17a9db278d33517d9888dd77848f554522a38JP Abgralltrunc: 377892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes ND_PRINT((ndo, "%s", tstr)); 37853f17a9db278d33517d9888dd77848f554522a38JP Abgrall} 37953f17a9db278d33517d9888dd77848f554522a38JP Abgrall 38053f17a9db278d33517d9888dd77848f554522a38JP Abgrall/* 38153f17a9db278d33517d9888dd77848f554522a38JP Abgrall * Local Variables: 38253f17a9db278d33517d9888dd77848f554522a38JP Abgrall * c-style: bsd 38353f17a9db278d33517d9888dd77848f554522a38JP Abgrall * End: 38453f17a9db278d33517d9888dd77848f554522a38JP Abgrall */ 38553f17a9db278d33517d9888dd77848f554522a38JP Abgrall 386