153f17a9db278d33517d9888dd77848f554522a38JP Abgrall/* @(#) $Header: /tcpdump/master/tcpdump/dccp.h,v 1.5 2006-11-02 09:05:23 hannes Exp $ (LBL) */ 22949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 32949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Copyright (C) Arnaldo Carvalho de Melo 2004 42949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Copyright (C) Ian McDonald 2005 <iam4@cs.waikato.ac.nz> 52949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Copyright (C) Yoshifumi Nishida 2005 62949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 72949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * This software may be distributed either under the terms of the 82949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * BSD-style license that accompanies tcpdump or the GNU GPL version 2 92949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifndef __DCCP_HDR__ 122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define __DCCP_HDR__ 132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/** 152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * struct dccp_hdr - generic part of DCCP packet header 162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * @dccph_sport - Relevant port on the endpoint that sent this packet 182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * @dccph_dport - Relevant port on the other endpoint 192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * @dccph_doff - Data Offset from the start of the DCCP header, in 32-bit words 202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * @dccph_ccval - Used by the HC-Sender CCID 212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * @dccph_cscov - Parts of the packet that are covered by the Checksum field 222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * @dccph_checksum - Internet checksum, depends on dccph_cscov 232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * @dccph_x - 0 = 24 bit sequence number, 1 = 48 242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * @dccph_type - packet type, see DCCP_PKT_ prefixed macros 252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * @dccph_seq - sequence number high or low order 24 bits, depends on dccph_x 262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct dccp_hdr { 282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int16_t dccph_sport, 292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project dccph_dport; 302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int8_t dccph_doff; 312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int8_t dccph_ccval_cscov; 322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int16_t dccph_checksum; 332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project union { 342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int8_t dccph_xtr; 352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int32_t dccph_seq; 362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } dccph_xtrs; 372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3953f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define DCCPH_CCVAL(dh) (((dh)->dccph_ccval_cscov >> 4) & 0xF) 4053f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define DCCPH_CSCOV(dh) (((dh)->dccph_ccval_cscov) & 0xF) 412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define DCCPH_X(dh) ((dh)->dccph_xtrs.dccph_xtr & 1) 432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define DCCPH_TYPE(dh) (((dh)->dccph_xtrs.dccph_xtr >> 1) & 0xF) 442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define DCCPH_SEQ(dh) (((dh)->dccph_xtrs.dccph_seq) >> 8) 452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/** 472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * struct dccp_hdr_ext - the low bits of a 48 bit seq packet 482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * @dccph_seq_low - low 24 bits of a 48 bit seq packet 502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct dccp_hdr_ext { 522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int32_t dccph_seq_low; 532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/** 562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * struct dccp_hdr_request - Conection initiation request header 572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * @dccph_req_service - Service to which the client app wants to connect 592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct dccp_hdr_request { 612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int32_t dccph_req_service; 622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/** 652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * struct dccp_hdr_ack_bits - acknowledgment bits common to most packets 662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * @dccph_resp_ack_nr_high - 48 bit ack number high order bits, contains GSR 682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * @dccph_resp_ack_nr_low - 48 bit ack number low order bits, contains GSR 692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct dccp_hdr_ack_bits { 712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int32_t dccph_ra; 722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int32_t dccph_ack_nr_low; 732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define DCCPH_ACK(dh_ack) ((dh_ack)->dccph_ra >> 8) 762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/** 782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * struct dccp_hdr_response - Conection initiation response header 792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * @dccph_resp_ack_nr_high - 48 bit ack number high order bits, contains GSR 812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * @dccph_resp_ack_nr_low - 48 bit ack number low order bits, contains GSR 822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * @dccph_resp_service - Echoes the Service Code on a received DCCP-Request 832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct dccp_hdr_response { 852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct dccp_hdr_ack_bits dccph_resp_ack; 862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int32_t dccph_resp_service; 872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#if 0 902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic inline struct dccp_hdr_data *dccp_hdr_data(struct dccp_hdr *hdrg) 912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const int ext = DCCPH_X(hdrg) ? sizeof(struct dccp_hdr_ext) : 0; 932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return (struct dccp_hdr_data *)(((u_char *)hdrg) + sizeof(hdrg) + ext); 952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/** 992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * struct dccp_hdr_reset - Unconditionally shut down a connection 1002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 1012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * @dccph_reset_service - Echoes the Service Code on a received DCCP-Request 1022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 1032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct dccp_hdr_reset { 1042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct dccp_hdr_ack_bits dccph_reset_ack; 1052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int8_t dccph_reset_code, 1062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project dccph_reset_data[3]; 1072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 1082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectenum dccp_pkt_type { 1102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DCCP_PKT_REQUEST = 0, 1112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DCCP_PKT_RESPONSE, 1122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DCCP_PKT_DATA, 1132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DCCP_PKT_ACK, 1142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DCCP_PKT_DATAACK, 1152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DCCP_PKT_CLOSEREQ, 1162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DCCP_PKT_CLOSE, 1172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DCCP_PKT_RESET, 1182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DCCP_PKT_SYNC, 1192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DCCP_PKT_SYNCACK, 1202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DCCP_PKT_INVALID 1212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 1222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectenum dccp_reset_codes { 1242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DCCP_RESET_CODE_UNSPECIFIED = 0, 1252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DCCP_RESET_CODE_CLOSED, 1262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DCCP_RESET_CODE_ABORTED, 1272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DCCP_RESET_CODE_NO_CONNECTION, 1282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DCCP_RESET_CODE_PACKET_ERROR, 1292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DCCP_RESET_CODE_OPTION_ERROR, 1302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DCCP_RESET_CODE_MANDATORY_ERROR, 1312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DCCP_RESET_CODE_CONNECTION_REFUSED, 1322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DCCP_RESET_CODE_BAD_SERVICE_CODE, 1332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DCCP_RESET_CODE_TOO_BUSY, 1342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DCCP_RESET_CODE_BAD_INIT_COOKIE, 1352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DCCP_RESET_CODE_AGGRESSION_PENALTY, 1362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project __DCCP_RESET_CODE_LAST 1372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 1382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif /* __DCCP_HDR__ */ 140