1*3c602fabSXin LI /* Copyright (c) 2013, The TCPDUMP project 2*3c602fabSXin LI * All rights reserved. 3*3c602fabSXin LI * 4*3c602fabSXin LI * Redistribution and use in source and binary forms, with or without 5*3c602fabSXin LI * modification, are permitted provided that the following conditions are met: 6*3c602fabSXin LI * 7*3c602fabSXin LI * 1. Redistributions of source code must retain the above copyright notice, this 8*3c602fabSXin LI * list of conditions and the following disclaimer. 9*3c602fabSXin LI * 2. Redistributions in binary form must reproduce the above copyright notice, 10*3c602fabSXin LI * this list of conditions and the following disclaimer in the documentation 11*3c602fabSXin LI * and/or other materials provided with the distribution. 12*3c602fabSXin LI * 13*3c602fabSXin LI * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 14*3c602fabSXin LI * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 15*3c602fabSXin LI * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 16*3c602fabSXin LI * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 17*3c602fabSXin LI * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 18*3c602fabSXin LI * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 19*3c602fabSXin LI * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 20*3c602fabSXin LI * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 21*3c602fabSXin LI * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 22*3c602fabSXin LI * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 23*3c602fabSXin LI */ 24*3c602fabSXin LI 25*3c602fabSXin LI #define NETDISSECT_REWORKED 26*3c602fabSXin LI #ifdef HAVE_CONFIG_H 27*3c602fabSXin LI #include "config.h" 28*3c602fabSXin LI #endif 29*3c602fabSXin LI 30*3c602fabSXin LI #include <tcpdump-stdinc.h> 31*3c602fabSXin LI 32*3c602fabSXin LI #include "interface.h" 33*3c602fabSXin LI #include "extract.h" 34*3c602fabSXin LI 35*3c602fabSXin LI static const char tstr[] = " [|m3ua]"; 36*3c602fabSXin LI static const char cstr[] = " (corrupt)"; 37*3c602fabSXin LI 38*3c602fabSXin LI /* RFC 4666 */ 39*3c602fabSXin LI 40*3c602fabSXin LI #define M3UA_REL_1_0 1 41*3c602fabSXin LI 42*3c602fabSXin LI struct m3ua_common_header { 43*3c602fabSXin LI uint8_t v; 44*3c602fabSXin LI uint8_t reserved; 45*3c602fabSXin LI uint8_t msg_class; 46*3c602fabSXin LI uint8_t msg_type; 47*3c602fabSXin LI uint32_t len; 48*3c602fabSXin LI }; 49*3c602fabSXin LI 50*3c602fabSXin LI struct m3ua_param_header { 51*3c602fabSXin LI uint16_t tag; 52*3c602fabSXin LI uint16_t len; 53*3c602fabSXin LI }; 54*3c602fabSXin LI 55*3c602fabSXin LI /* message classes */ 56*3c602fabSXin LI #define M3UA_MSGC_MGMT 0 57*3c602fabSXin LI #define M3UA_MSGC_TRANSFER 1 58*3c602fabSXin LI #define M3UA_MSGC_SSNM 2 59*3c602fabSXin LI #define M3UA_MSGC_ASPSM 3 60*3c602fabSXin LI #define M3UA_MSGC_ASPTM 4 61*3c602fabSXin LI /* reserved values */ 62*3c602fabSXin LI #define M3UA_MSGC_RKM 9 63*3c602fabSXin LI 64*3c602fabSXin LI static const struct tok MessageClasses[] = { 65*3c602fabSXin LI { M3UA_MSGC_MGMT, "Management" }, 66*3c602fabSXin LI { M3UA_MSGC_TRANSFER, "Transfer" }, 67*3c602fabSXin LI { M3UA_MSGC_SSNM, "SS7" }, 68*3c602fabSXin LI { M3UA_MSGC_ASPSM, "ASP" }, 69*3c602fabSXin LI { M3UA_MSGC_ASPTM, "ASP" }, 70*3c602fabSXin LI { M3UA_MSGC_RKM, "Routing Key Managment" }, 71*3c602fabSXin LI { 0, NULL } 72*3c602fabSXin LI }; 73*3c602fabSXin LI 74*3c602fabSXin LI /* management messages */ 75*3c602fabSXin LI #define M3UA_MGMT_ERROR 0 76*3c602fabSXin LI #define M3UA_MGMT_NOTIFY 1 77*3c602fabSXin LI 78*3c602fabSXin LI static const struct tok MgmtMessages[] = { 79*3c602fabSXin LI { M3UA_MGMT_ERROR, "Error" }, 80*3c602fabSXin LI { M3UA_MGMT_NOTIFY, "Notify" }, 81*3c602fabSXin LI { 0, NULL } 82*3c602fabSXin LI }; 83*3c602fabSXin LI 84*3c602fabSXin LI /* transfer messages */ 85*3c602fabSXin LI #define M3UA_TRANSFER_DATA 1 86*3c602fabSXin LI 87*3c602fabSXin LI static const struct tok TransferMessages[] = { 88*3c602fabSXin LI { M3UA_TRANSFER_DATA, "Data" }, 89*3c602fabSXin LI { 0, NULL } 90*3c602fabSXin LI }; 91*3c602fabSXin LI 92*3c602fabSXin LI /* SS7 Signaling Network Management messages */ 93*3c602fabSXin LI #define M3UA_SSNM_DUNA 1 94*3c602fabSXin LI #define M3UA_SSNM_DAVA 2 95*3c602fabSXin LI #define M3UA_SSNM_DAUD 3 96*3c602fabSXin LI #define M3UA_SSNM_SCON 4 97*3c602fabSXin LI #define M3UA_SSNM_DUPU 5 98*3c602fabSXin LI #define M3UA_SSNM_DRST 6 99*3c602fabSXin LI 100*3c602fabSXin LI static const struct tok SS7Messages[] = { 101*3c602fabSXin LI { M3UA_SSNM_DUNA, "Destination Unavailable" }, 102*3c602fabSXin LI { M3UA_SSNM_DAVA, "Destination Available" }, 103*3c602fabSXin LI { M3UA_SSNM_DAUD, "Destination State Audit" }, 104*3c602fabSXin LI { M3UA_SSNM_SCON, "Signalling Congestion" }, 105*3c602fabSXin LI { M3UA_SSNM_DUPU, "Destination User Part Unavailable" }, 106*3c602fabSXin LI { M3UA_SSNM_DRST, "Destination Restricted" }, 107*3c602fabSXin LI { 0, NULL } 108*3c602fabSXin LI }; 109*3c602fabSXin LI 110*3c602fabSXin LI /* ASP State Maintenance messages */ 111*3c602fabSXin LI #define M3UA_ASP_UP 1 112*3c602fabSXin LI #define M3UA_ASP_DN 2 113*3c602fabSXin LI #define M3UA_ASP_BEAT 3 114*3c602fabSXin LI #define M3UA_ASP_UP_ACK 4 115*3c602fabSXin LI #define M3UA_ASP_DN_ACK 5 116*3c602fabSXin LI #define M3UA_ASP_BEAT_ACK 6 117*3c602fabSXin LI 118*3c602fabSXin LI static const struct tok ASPStateMessages[] = { 119*3c602fabSXin LI { M3UA_ASP_UP, "Up" }, 120*3c602fabSXin LI { M3UA_ASP_DN, "Down" }, 121*3c602fabSXin LI { M3UA_ASP_BEAT, "Heartbeat" }, 122*3c602fabSXin LI { M3UA_ASP_UP_ACK, "Up Acknowledgement" }, 123*3c602fabSXin LI { M3UA_ASP_DN_ACK, "Down Acknowledgement" }, 124*3c602fabSXin LI { M3UA_ASP_BEAT_ACK, "Heartbeat Acknowledgement" }, 125*3c602fabSXin LI { 0, NULL } 126*3c602fabSXin LI }; 127*3c602fabSXin LI 128*3c602fabSXin LI /* ASP Traffic Maintenance messages */ 129*3c602fabSXin LI #define M3UA_ASP_AC 1 130*3c602fabSXin LI #define M3UA_ASP_IA 2 131*3c602fabSXin LI #define M3UA_ASP_AC_ACK 3 132*3c602fabSXin LI #define M3UA_ASP_IA_ACK 4 133*3c602fabSXin LI 134*3c602fabSXin LI static const struct tok ASPTrafficMessages[] = { 135*3c602fabSXin LI { M3UA_ASP_AC, "Active" }, 136*3c602fabSXin LI { M3UA_ASP_IA, "Inactive" }, 137*3c602fabSXin LI { M3UA_ASP_AC_ACK, "Active Acknowledgement" }, 138*3c602fabSXin LI { M3UA_ASP_IA_ACK, "Inactive Acknowledgement" }, 139*3c602fabSXin LI { 0, NULL } 140*3c602fabSXin LI }; 141*3c602fabSXin LI 142*3c602fabSXin LI /* Routing Key Management messages */ 143*3c602fabSXin LI #define M3UA_RKM_REQ 1 144*3c602fabSXin LI #define M3UA_RKM_RSP 2 145*3c602fabSXin LI #define M3UA_RKM_DEREQ 3 146*3c602fabSXin LI #define M3UA_RKM_DERSP 4 147*3c602fabSXin LI 148*3c602fabSXin LI static const struct tok RoutingKeyMgmtMessages[] = { 149*3c602fabSXin LI { M3UA_RKM_REQ, "Registration Request" }, 150*3c602fabSXin LI { M3UA_RKM_RSP, "Registration Response" }, 151*3c602fabSXin LI { M3UA_RKM_DEREQ, "Deregistration Request" }, 152*3c602fabSXin LI { M3UA_RKM_DERSP, "Deregistration Response" }, 153*3c602fabSXin LI { 0, NULL } 154*3c602fabSXin LI }; 155*3c602fabSXin LI 156*3c602fabSXin LI /* M3UA Parameters */ 157*3c602fabSXin LI #define M3UA_PARAM_INFO 0x0004 158*3c602fabSXin LI #define M3UA_PARAM_ROUTING_CTX 0x0006 159*3c602fabSXin LI #define M3UA_PARAM_DIAGNOSTIC 0x0007 160*3c602fabSXin LI #define M3UA_PARAM_HB_DATA 0x0009 161*3c602fabSXin LI #define M3UA_PARAM_TRAFFIC_MODE_TYPE 0x000b 162*3c602fabSXin LI #define M3UA_PARAM_ERROR_CODE 0x000c 163*3c602fabSXin LI #define M3UA_PARAM_STATUS 0x000d 164*3c602fabSXin LI #define M3UA_PARAM_ASP_ID 0x0011 165*3c602fabSXin LI #define M3UA_PARAM_AFFECTED_POINT_CODE 0x0012 166*3c602fabSXin LI #define M3UA_PARAM_CORR_ID 0x0013 167*3c602fabSXin LI 168*3c602fabSXin LI #define M3UA_PARAM_NETWORK_APPEARANCE 0x0200 169*3c602fabSXin LI #define M3UA_PARAM_USER 0x0204 170*3c602fabSXin LI #define M3UA_PARAM_CONGESTION_INDICATION 0x0205 171*3c602fabSXin LI #define M3UA_PARAM_CONCERNED_DST 0x0206 172*3c602fabSXin LI #define M3UA_PARAM_ROUTING_KEY 0x0207 173*3c602fabSXin LI #define M3UA_PARAM_REG_RESULT 0x0208 174*3c602fabSXin LI #define M3UA_PARAM_DEREG_RESULT 0x0209 175*3c602fabSXin LI #define M3UA_PARAM_LOCAL_ROUTING_KEY_ID 0x020a 176*3c602fabSXin LI #define M3UA_PARAM_DST_POINT_CODE 0x020b 177*3c602fabSXin LI #define M3UA_PARAM_SI 0x020c 178*3c602fabSXin LI #define M3UA_PARAM_ORIGIN_POINT_CODE_LIST 0x020e 179*3c602fabSXin LI #define M3UA_PARAM_PROTO_DATA 0x0210 180*3c602fabSXin LI #define M3UA_PARAM_REG_STATUS 0x0212 181*3c602fabSXin LI #define M3UA_PARAM_DEREG_STATUS 0x0213 182*3c602fabSXin LI 183*3c602fabSXin LI static const struct tok ParamName[] = { 184*3c602fabSXin LI { M3UA_PARAM_INFO, "INFO String" }, 185*3c602fabSXin LI { M3UA_PARAM_ROUTING_CTX, "Routing Context" }, 186*3c602fabSXin LI { M3UA_PARAM_DIAGNOSTIC, "Diagnostic Info" }, 187*3c602fabSXin LI { M3UA_PARAM_HB_DATA, "Heartbeat Data" }, 188*3c602fabSXin LI { M3UA_PARAM_TRAFFIC_MODE_TYPE, "Traffic Mode Type" }, 189*3c602fabSXin LI { M3UA_PARAM_ERROR_CODE, "Error Code" }, 190*3c602fabSXin LI { M3UA_PARAM_STATUS, "Status" }, 191*3c602fabSXin LI { M3UA_PARAM_ASP_ID, "ASP Identifier" }, 192*3c602fabSXin LI { M3UA_PARAM_AFFECTED_POINT_CODE, "Affected Point Code" }, 193*3c602fabSXin LI { M3UA_PARAM_CORR_ID, "Correlation ID" }, 194*3c602fabSXin LI { M3UA_PARAM_NETWORK_APPEARANCE, "Network Appearance" }, 195*3c602fabSXin LI { M3UA_PARAM_USER, "User/Cause" }, 196*3c602fabSXin LI { M3UA_PARAM_CONGESTION_INDICATION, "Congestion Indications" }, 197*3c602fabSXin LI { M3UA_PARAM_CONCERNED_DST, "Concerned Destination" }, 198*3c602fabSXin LI { M3UA_PARAM_ROUTING_KEY, "Routing Key" }, 199*3c602fabSXin LI { M3UA_PARAM_REG_RESULT, "Registration Result" }, 200*3c602fabSXin LI { M3UA_PARAM_DEREG_RESULT, "Deregistration Result" }, 201*3c602fabSXin LI { M3UA_PARAM_LOCAL_ROUTING_KEY_ID, "Local Routing Key Identifier" }, 202*3c602fabSXin LI { M3UA_PARAM_DST_POINT_CODE, "Destination Point Code" }, 203*3c602fabSXin LI { M3UA_PARAM_SI, "Service Indicators" }, 204*3c602fabSXin LI { M3UA_PARAM_ORIGIN_POINT_CODE_LIST, "Originating Point Code List" }, 205*3c602fabSXin LI { M3UA_PARAM_PROTO_DATA, "Protocol Data" }, 206*3c602fabSXin LI { M3UA_PARAM_REG_STATUS, "Registration Status" }, 207*3c602fabSXin LI { M3UA_PARAM_DEREG_STATUS, "Deregistration Status" }, 208*3c602fabSXin LI { 0, NULL } 209*3c602fabSXin LI }; 210*3c602fabSXin LI 211*3c602fabSXin LI static void 212*3c602fabSXin LI tag_value_print(netdissect_options *ndo, 213*3c602fabSXin LI const u_char *buf, const uint16_t tag, const uint16_t size) 214*3c602fabSXin LI { 215*3c602fabSXin LI switch (tag) { 216*3c602fabSXin LI case M3UA_PARAM_NETWORK_APPEARANCE: 217*3c602fabSXin LI case M3UA_PARAM_ROUTING_CTX: 218*3c602fabSXin LI case M3UA_PARAM_CORR_ID: 219*3c602fabSXin LI /* buf and size don't include the header */ 220*3c602fabSXin LI if (size < 4) 221*3c602fabSXin LI goto corrupt; 222*3c602fabSXin LI ND_TCHECK2(*buf, size); 223*3c602fabSXin LI ND_PRINT((ndo, "0x%08x", EXTRACT_32BITS(buf))); 224*3c602fabSXin LI break; 225*3c602fabSXin LI /* ... */ 226*3c602fabSXin LI default: 227*3c602fabSXin LI ND_PRINT((ndo, "(length %u)", size + (u_int)sizeof(struct m3ua_param_header))); 228*3c602fabSXin LI ND_TCHECK2(*buf, size); 229*3c602fabSXin LI } 230*3c602fabSXin LI return; 231*3c602fabSXin LI 232*3c602fabSXin LI corrupt: 233*3c602fabSXin LI ND_PRINT((ndo, "%s", cstr)); 234*3c602fabSXin LI ND_TCHECK2(*buf, size); 235*3c602fabSXin LI return; 236*3c602fabSXin LI trunc: 237*3c602fabSXin LI ND_PRINT((ndo, "%s", tstr)); 238*3c602fabSXin LI } 239*3c602fabSXin LI 240*3c602fabSXin LI /* 241*3c602fabSXin LI * 0 1 2 3 242*3c602fabSXin LI * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 243*3c602fabSXin LI * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 244*3c602fabSXin LI * | Parameter Tag | Parameter Length | 245*3c602fabSXin LI * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 246*3c602fabSXin LI * \ \ 247*3c602fabSXin LI * / Parameter Value / 248*3c602fabSXin LI * \ \ 249*3c602fabSXin LI * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 250*3c602fabSXin LI */ 251*3c602fabSXin LI static void 252*3c602fabSXin LI m3ua_tags_print(netdissect_options *ndo, 253*3c602fabSXin LI const u_char *buf, const u_int size) 254*3c602fabSXin LI { 255*3c602fabSXin LI const u_char *p = buf; 256*3c602fabSXin LI int align; 257*3c602fabSXin LI uint16_t hdr_tag; 258*3c602fabSXin LI uint16_t hdr_len; 259*3c602fabSXin LI 260*3c602fabSXin LI while (p < buf + size) { 261*3c602fabSXin LI if (p + sizeof(struct m3ua_param_header) > buf + size) 262*3c602fabSXin LI goto corrupt; 263*3c602fabSXin LI ND_TCHECK2(*p, sizeof(struct m3ua_param_header)); 264*3c602fabSXin LI /* Parameter Tag */ 265*3c602fabSXin LI hdr_tag = EXTRACT_16BITS(p); 266*3c602fabSXin LI ND_PRINT((ndo, "\n\t\t\t%s: ", tok2str(ParamName, "Unknown Parameter (0x%04x)", hdr_tag))); 267*3c602fabSXin LI /* Parameter Length */ 268*3c602fabSXin LI hdr_len = EXTRACT_16BITS(p + 2); 269*3c602fabSXin LI if (hdr_len < sizeof(struct m3ua_param_header)) 270*3c602fabSXin LI goto corrupt; 271*3c602fabSXin LI /* Parameter Value */ 272*3c602fabSXin LI align = (p + hdr_len - buf) % 4; 273*3c602fabSXin LI align = align ? 4 - align : 0; 274*3c602fabSXin LI ND_TCHECK2(*p, hdr_len + align); 275*3c602fabSXin LI tag_value_print(ndo, p, hdr_tag, hdr_len - sizeof(struct m3ua_param_header)); 276*3c602fabSXin LI p += hdr_len + align; 277*3c602fabSXin LI } 278*3c602fabSXin LI return; 279*3c602fabSXin LI 280*3c602fabSXin LI corrupt: 281*3c602fabSXin LI ND_PRINT((ndo, "%s", cstr)); 282*3c602fabSXin LI ND_TCHECK2(*buf, size); 283*3c602fabSXin LI return; 284*3c602fabSXin LI trunc: 285*3c602fabSXin LI ND_PRINT((ndo, "%s", tstr)); 286*3c602fabSXin LI } 287*3c602fabSXin LI 288*3c602fabSXin LI /* 289*3c602fabSXin LI * 0 1 2 3 290*3c602fabSXin LI * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 291*3c602fabSXin LI * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 292*3c602fabSXin LI * | Version | Reserved | Message Class | Message Type | 293*3c602fabSXin LI * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 294*3c602fabSXin LI * | Message Length | 295*3c602fabSXin LI * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 296*3c602fabSXin LI * \ \ 297*3c602fabSXin LI * / / 298*3c602fabSXin LI */ 299*3c602fabSXin LI void 300*3c602fabSXin LI m3ua_print(netdissect_options *ndo, 301*3c602fabSXin LI const u_char *buf, const u_int size) 302*3c602fabSXin LI { 303*3c602fabSXin LI const struct m3ua_common_header *hdr = (const struct m3ua_common_header *) buf; 304*3c602fabSXin LI const struct tok *dict; 305*3c602fabSXin LI 306*3c602fabSXin LI /* size includes the header */ 307*3c602fabSXin LI if (size < sizeof(struct m3ua_common_header)) 308*3c602fabSXin LI goto corrupt; 309*3c602fabSXin LI ND_TCHECK(*hdr); 310*3c602fabSXin LI if (hdr->v != M3UA_REL_1_0) 311*3c602fabSXin LI return; 312*3c602fabSXin LI 313*3c602fabSXin LI dict = 314*3c602fabSXin LI hdr->msg_class == M3UA_MSGC_MGMT ? MgmtMessages : 315*3c602fabSXin LI hdr->msg_class == M3UA_MSGC_TRANSFER ? TransferMessages : 316*3c602fabSXin LI hdr->msg_class == M3UA_MSGC_SSNM ? SS7Messages : 317*3c602fabSXin LI hdr->msg_class == M3UA_MSGC_ASPSM ? ASPStateMessages : 318*3c602fabSXin LI hdr->msg_class == M3UA_MSGC_ASPTM ? ASPTrafficMessages : 319*3c602fabSXin LI hdr->msg_class == M3UA_MSGC_RKM ? RoutingKeyMgmtMessages : 320*3c602fabSXin LI NULL; 321*3c602fabSXin LI 322*3c602fabSXin LI ND_PRINT((ndo, "\n\t\t%s", tok2str(MessageClasses, "Unknown message class %i", hdr->msg_class))); 323*3c602fabSXin LI if (dict != NULL) 324*3c602fabSXin LI ND_PRINT((ndo, " %s Message", tok2str(dict, "Unknown (0x%02x)", hdr->msg_type))); 325*3c602fabSXin LI 326*3c602fabSXin LI if (size != EXTRACT_32BITS(&hdr->len)) 327*3c602fabSXin LI ND_PRINT((ndo, "\n\t\t\t@@@@@@ Corrupted length %u of message @@@@@@", EXTRACT_32BITS(&hdr->len))); 328*3c602fabSXin LI else 329*3c602fabSXin LI m3ua_tags_print(ndo, buf + sizeof(struct m3ua_common_header), EXTRACT_32BITS(&hdr->len) - sizeof(struct m3ua_common_header)); 330*3c602fabSXin LI return; 331*3c602fabSXin LI 332*3c602fabSXin LI corrupt: 333*3c602fabSXin LI ND_PRINT((ndo, "%s", cstr)); 334*3c602fabSXin LI ND_TCHECK2(*buf, size); 335*3c602fabSXin LI return; 336*3c602fabSXin LI trunc: 337*3c602fabSXin LI ND_PRINT((ndo, "%s", tstr)); 338*3c602fabSXin LI } 339*3c602fabSXin LI 340