]>
The Tcpdump Group git mirrors - tcpdump/blob - print-forces.c
2 * Redistribution and use in source and binary forms, with or without
3 * modification, are permitted provided that: (1) source code
4 * distributions retain the above copyright notice and this paragraph
5 * in its entirety, and (2) distributions including binary code include
6 * the above copyright notice and this paragraph in its entirety in
7 * the documentation or other materials provided with the distribution.
8 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
9 * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
10 * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
11 * FOR A PARTICULAR PURPOSE.
13 * Copyright (c) 2009 Mojatatu Networks, Inc
21 #include <tcpdump-stdinc.h>
26 #include "interface.h"
34 prestlv_print(register const u_char
* pptr
, register u_int len
,
35 u_int16_t op_msk _U_
, int indent
)
37 const struct forces_tlv
*tlv
= (struct forces_tlv
*)pptr
;
38 register const u_char
*tdp
= (u_char
*) TLV_DATA(tlv
);
39 struct res_val
*r
= (struct res_val
*)tdp
;
40 u_int dlen
= len
- TLV_HDRL
;
43 printf("illegal RESULT-TLV: %d bytes!\n", dlen
);
48 if (r
->result
>= 0x18 && r
->result
<= 0xFE) {
49 printf("illegal reserved result code: 0x%x!\n", r
->result
);
54 char *ib
= indent_pr(indent
, 0);
55 printf("%s Result: %s (code 0x%x)\n", ib
,
56 tok2str(ForCES_errs
, NULL
, r
->result
), r
->result
);
61 fputs("[|forces]", stdout
);
66 fdatatlv_print(register const u_char
* pptr
, register u_int len
,
67 u_int16_t op_msk _U_
, int indent
)
69 const struct forces_tlv
*tlv
= (struct forces_tlv
*)pptr
;
70 u_int tll
= len
- TLV_HDRL
;
71 register const u_char
*tdp
= (u_char
*) TLV_DATA(tlv
);
75 type
= EXTRACT_16BITS(&tlv
->type
);
76 if (type
!= F_TLV_FULD
) {
77 printf("Error: expecting FULLDATA!\n");
82 char *ib
= indent_pr(indent
+ 2, 1);
83 printf("%s[", &ib
[1]);
84 hex_print_with_offset(ib
, tdp
, tll
, 0);
85 printf("\n%s]\n", &ib
[1]);
90 fputs("[|forces]", stdout
);
95 sdatailv_print(register const u_char
* pptr
, register u_int len
,
96 u_int16_t op_msk _U_
, int indent
)
98 u_int tll
= len
- ILV_HDRL
;
99 const struct forces_ilv
*ilv
= (struct forces_ilv
*)pptr
;
105 invilv
= ilv_valid(ilv
, tll
);
107 printf("Error: BAD ILV!\n");
111 register const u_char
*tdp
= (u_char
*) ILV_DATA(ilv
);
112 char *ib
= indent_pr(indent
, 1);
113 printf("\n%s SPARSEDATA: type %x length %d\n", &ib
[1],
114 EXTRACT_32BITS(&ilv
->type
),
115 EXTRACT_32BITS(&ilv
->length
));
116 printf("%s[", &ib
[1]);
117 hex_print_with_offset(ib
, tdp
, tll
, 0);
118 printf("\n%s]\n", &ib
[1]);
121 ilv
= GO_NXT_ILV(ilv
, tll
);
127 fputs("[|forces]", stdout
);
132 sdatatlv_print(register const u_char
* pptr
, register u_int len
,
133 u_int16_t op_msk
, int indent
)
135 const struct forces_tlv
*tlv
= (struct forces_tlv
*)pptr
;
136 u_int tll
= len
- TLV_HDRL
;
137 register const u_char
*tdp
= (u_char
*) TLV_DATA(tlv
);
141 type
= EXTRACT_16BITS(&tlv
->type
);
142 if (type
!= F_TLV_SPAD
) {
143 printf("Error: expecting SPARSEDATA!\n");
147 return sdatailv_print(tdp
, tll
, op_msk
, indent
);
150 fputs("[|forces]", stdout
);
155 pkeyitlv_print(register const u_char
* pptr
, register u_int len
,
156 u_int16_t op_msk
, int indent
)
158 const struct forces_tlv
*tlv
= (struct forces_tlv
*)pptr
;
159 register const u_char
*tdp
= (u_char
*) TLV_DATA(tlv
);
160 register const u_char
*dp
= tdp
+ 4;
161 const struct forces_tlv
*kdtlv
= (struct forces_tlv
*)dp
;
163 char *ib
= indent_pr(indent
, 0);
168 id
= EXTRACT_32BITS(tdp
);
169 printf("%sKeyinfo: Key 0x%x\n", ib
, id
);
171 type
= EXTRACT_16BITS(&kdtlv
->type
);
172 invtlv
= tlv_valid(kdtlv
, len
);
175 printf("%s TLV type 0x%x len %d\n",
176 tok2str(ForCES_TLV_err
, NULL
, invtlv
), type
,
177 EXTRACT_16BITS(&kdtlv
->length
));
180 tll
= EXTRACT_16BITS(&kdtlv
->length
);
181 dp
= (u_char
*) TLV_DATA(kdtlv
);
182 return fdatatlv_print(dp
, tll
, op_msk
, indent
);
185 fputs("[|forces]", stdout
);
190 pdatacnt_print(register const u_char
* pptr
, register u_int len
,
191 u_int32_t IDcnt
, u_int16_t op_msk
, int indent
)
196 char *ib
= indent_pr(indent
, 0);
198 for (i
= 0; i
< IDcnt
; i
++) {
200 id
= EXTRACT_32BITS(pptr
);
202 printf("%s ID#%02u: %d\n", ib
, i
+ 1, id
);
207 const struct forces_tlv
*pdtlv
= (struct forces_tlv
*)pptr
;
215 type
= EXTRACT_16BITS(&pdtlv
->type
);
216 tll
= EXTRACT_16BITS(&pdtlv
->length
) - TLV_HDRL
;
217 aln
= F_ALN_LEN(EXTRACT_16BITS(&pdtlv
->length
));
218 invtlv
= tlv_valid(pdtlv
, len
);
221 ("%s Outstanding bytes %d for TLV type 0x%x TLV len %d\n",
222 tok2str(ForCES_TLV_err
, NULL
, invtlv
), len
, type
,
223 EXTRACT_16BITS(&pdtlv
->length
));
226 if (aln
> EXTRACT_16BITS(&pdtlv
->length
)) {
229 ("Invalid padded pathdata TLV type 0x%x len %d missing %d pad bytes\n",
230 type
, EXTRACT_16BITS(&pdtlv
->length
), aln
- len
);
232 pad
= aln
- EXTRACT_16BITS(&pdtlv
->length
);
235 if (pd_valid(type
)) {
236 const struct pdata_ops
*ops
= get_forces_pd(type
);
238 if (vflag
>= 3 && ops
->v
!= F_TLV_PDAT
) {
241 ("%s %s (Length %d DataLen %d pad %d Bytes)\n",
242 ib
, ops
->s
, EXTRACT_16BITS(&pdtlv
->length
),
246 ("%s %s (Length %d DataLen %d Bytes)\n",
247 ib
, ops
->s
, EXTRACT_16BITS(&pdtlv
->length
),
251 chk_op_type(type
, op_msk
, ops
->op_msk
);
253 rc
= ops
->print((const u_char
*)pdtlv
,
254 tll
+ pad
+ TLV_HDRL
, op_msk
,
257 printf("Invalid path data content type 0x%x len %d\n",
258 type
, EXTRACT_16BITS(&pdtlv
->length
));
260 if (EXTRACT_16BITS(&pdtlv
->length
)) {
261 hex_print_with_offset("Bad Data val\n\t [",
272 fputs("[|forces]", stdout
);
277 pdata_print(register const u_char
* pptr
, register u_int len
,
278 u_int16_t op_msk
, int indent
)
280 const struct pathdata_h
*pdh
= (struct pathdata_h
*)pptr
;
281 char *ib
= indent_pr(indent
, 0);
286 printf("\n%sPathdata: Flags 0x%x ID count %d\n",
287 ib
, EXTRACT_16BITS(&pdh
->pflags
), EXTRACT_16BITS(&pdh
->pIDcnt
));
290 if (EXTRACT_16BITS(&pdh
->pflags
) & F_SELKEY
) {
293 pptr
+= sizeof(struct pathdata_h
);
294 len
-= sizeof(struct pathdata_h
);
295 minsize
= EXTRACT_16BITS(&pdh
->pIDcnt
) * 4;
297 printf("\t\t\ttruncated IDs expected %uB got %uB\n", minsize
,
299 hex_print_with_offset("\t\t\tID Data[", pptr
, len
, 0);
303 return pdatacnt_print(pptr
, len
, EXTRACT_16BITS(&pdh
->pIDcnt
), op_msk
, indent
);
306 fputs("[|forces]", stdout
);
311 genoptlv_print(register const u_char
* pptr
, register u_int len
,
312 u_int16_t op_msk
, int indent
)
314 const struct forces_tlv
*pdtlv
= (struct forces_tlv
*)pptr
;
318 char *ib
= indent_pr(indent
, 0);
321 type
= EXTRACT_16BITS(&pdtlv
->type
);
322 tll
= EXTRACT_16BITS(&pdtlv
->length
) - TLV_HDRL
;
323 invtlv
= tlv_valid(pdtlv
, len
);
324 printf("genoptlvprint - %s TLV type 0x%x len %d\n",
325 tok2str(ForCES_TLV
, NULL
, type
), type
, EXTRACT_16BITS(&pdtlv
->length
));
327 register const u_char
*dp
= (u_char
*) TLV_DATA(pdtlv
);
328 if (!ttlv_valid(type
)) {
329 printf("%s TLV type 0x%x len %d\n",
330 tok2str(ForCES_TLV_err
, NULL
, invtlv
), type
,
331 EXTRACT_16BITS(&pdtlv
->length
));
335 printf("%s%s, length %d (data length %d Bytes)",
336 ib
, tok2str(ForCES_TLV
, NULL
, type
),
337 EXTRACT_16BITS(&pdtlv
->length
), tll
);
339 return pdata_print(dp
, tll
, op_msk
, indent
+ 1);
341 printf("\t\t\tInvalid ForCES TLV type=%x", type
);
346 fputs("[|forces]", stdout
);
351 recpdoptlv_print(register const u_char
* pptr
, register u_int len
,
352 u_int16_t op_msk
, int indent
)
354 const struct forces_tlv
*pdtlv
= (struct forces_tlv
*)pptr
;
359 register const u_char
*dp
;
364 invtlv
= tlv_valid(pdtlv
, len
);
368 ib
= indent_pr(indent
, 0);
369 type
= EXTRACT_16BITS(&pdtlv
->type
);
370 dp
= (u_char
*) TLV_DATA(pdtlv
);
371 tll
= EXTRACT_16BITS(&pdtlv
->length
) - TLV_HDRL
;
375 ("%s%s, length %d (data encapsulated %d Bytes)",
376 ib
, tok2str(ForCES_TLV
, NULL
, type
),
377 EXTRACT_16BITS(&pdtlv
->length
),
378 EXTRACT_16BITS(&pdtlv
->length
) - TLV_HDRL
);
380 rc
= pdata_print(dp
, tll
, op_msk
, indent
+ 1);
381 pdtlv
= GO_NXT_TLV(pdtlv
, len
);
386 ("\n\t\tMessy PATHDATA TLV header, type (0x%x)\n\t\texcess of %d Bytes ",
387 EXTRACT_16BITS(&pdtlv
->type
), tll
- EXTRACT_16BITS(&pdtlv
->length
));
394 fputs("[|forces]", stdout
);
399 invoptlv_print(register const u_char
* pptr
, register u_int len
,
400 u_int16_t op_msk _U_
, int indent
)
402 char *ib
= indent_pr(indent
, 1);
405 printf("%sData[", &ib
[1]);
406 hex_print_with_offset(ib
, pptr
, len
, 0);
412 int otlv_print(const struct forces_tlv
*otlv
, u_int16_t op_msk _U_
, int indent
)
415 register const u_char
*dp
= (u_char
*) TLV_DATA(otlv
);
418 char *ib
= indent_pr(indent
, 0);
419 const struct optlv_h
*ops
;
422 type
= EXTRACT_16BITS(&otlv
->type
);
423 tll
= EXTRACT_16BITS(&otlv
->length
) - TLV_HDRL
;
424 ops
= get_forces_optlv_h(type
);
426 printf("%sOper TLV %s(0x%x) length %d\n", ib
, ops
->s
, type
,
427 EXTRACT_16BITS(&otlv
->length
));
429 /* empty TLVs like COMMIT and TRCOMMIT are empty, we stop here .. */
430 if (!ops
->flags
& ZERO_TTLV
) {
431 if (tll
!= 0) /* instead of "if (tll)" - for readability .. */
432 printf("%s: Illegal - MUST be empty\n", ops
->s
);
435 /* rest of ops must at least have 12B {pathinfo} */
436 if (tll
< OP_MIN_SIZ
) {
437 printf("\t\tOper TLV %s(0x%x) length %d\n", ops
->s
, type
,
438 EXTRACT_16BITS(&otlv
->length
));
439 printf("\t\tTruncated data size %d minimum required %d\n", tll
,
441 return invoptlv_print(dp
, tll
, ops
->op_msk
, indent
);
445 rc
= ops
->print(dp
, tll
, ops
->op_msk
, indent
+ 1);
449 fputs("[|forces]", stdout
);
456 asttlv_print(register const u_char
* pptr
, register u_int len
,
457 u_int16_t op_msk _U_
, int indent
)
460 u_int dlen
= len
- TLV_HDRL
;
461 char *ib
= indent_pr(indent
, 0);
463 if (dlen
!= ASTDLN
) {
464 printf("illegal ASTresult-TLV: %d bytes!\n", dlen
);
468 rescode
= EXTRACT_32BITS(pptr
);
469 if (rescode
> ASTMCD
) {
470 printf("illegal ASTresult result code: %d!\n", rescode
);
475 printf("Teardown reason:\n%s", ib
);
478 printf("Normal Teardown");
481 printf("Loss of Heartbeats");
484 printf("Out of bandwidth");
487 printf("Out of Memory");
490 printf("Application Crash");
493 printf("Unknown Teardown reason");
496 printf("(%x)\n%s", rescode
, ib
);
501 fputs("[|forces]", stdout
);
508 asrtlv_print(register const u_char
* pptr
, register u_int len
,
509 u_int16_t op_msk _U_
, int indent
)
512 u_int dlen
= len
- TLV_HDRL
;
513 char *ib
= indent_pr(indent
, 0);
515 if (dlen
!= ASRDLN
) { /* id, instance, oper tlv */
516 printf("illegal ASRresult-TLV: %d bytes!\n", dlen
);
520 rescode
= EXTRACT_32BITS(pptr
);
522 if (rescode
> ASRMCD
) {
523 printf("illegal ASRresult result code: %d!\n", rescode
);
534 printf("FE ID invalid ");
537 printf("permission denied ");
543 printf("(%x)\n%s", rescode
, ib
);
548 fputs("[|forces]", stdout
);
553 gentltlv_print(register const u_char
* pptr _U_
, register u_int len
,
554 u_int16_t op_msk _U_
, int indent _U_
)
556 u_int dlen
= len
- TLV_HDRL
;
558 if (dlen
< 4) { /* at least 32 bits must exist */
559 printf("truncated TLV: %d bytes missing! ", 4 - dlen
);
567 print_metailv(register const u_char
* pptr
, register u_int len
,
568 u_int16_t op_msk _U_
, int indent
)
570 u_int dlen
= len
- ILV_HDRL
;
572 char *ib
= indent_pr(indent
, 0);
573 /* XXX: check header length */
574 const struct forces_ilv
*ilv
= (struct forces_ilv
*)pptr
;
577 printf("\n%sMetaID 0x%x length %d\n", ib
, EXTRACT_32BITS(&ilv
->type
),
578 EXTRACT_32BITS(&ilv
->length
));
579 hex_print_with_offset("\n\t\t\t\t[", ILV_DATA(ilv
), tll
, 0);
583 fputs("[|forces]", stdout
);
588 print_metatlv(register const u_char
* pptr
, register u_int len
,
589 u_int16_t op_msk _U_
, int indent
)
591 u_int dlen
= len
- TLV_HDRL
;
592 char *ib
= indent_pr(indent
, 0);
594 const struct forces_ilv
*ilv
= (struct forces_ilv
*)pptr
;
597 printf("\n%s METADATA\n", ib
);
600 invilv
= ilv_valid(ilv
, tll
);
603 print_metailv((u_char
*) ilv
, tll
, 0, indent
+ 1);
605 ilv
= GO_NXT_ILV(ilv
, tll
);
611 fputs("[|forces]", stdout
);
618 print_reddata(register const u_char
* pptr
, register u_int len
,
619 u_int16_t op_msk _U_
, int indent _U_
)
621 u_int dlen
= len
- TLV_HDRL
;
624 const struct forces_tlv
*tlv
= (struct forces_tlv
*)pptr
;
626 printf("\n\t\t Redirect DATA\n");
627 if (dlen
<= RD_MIN
) {
628 printf("\n\t\ttruncated Redirect data: %d bytes missing! ",
634 invtlv
= tlv_valid(tlv
, tll
);
637 printf("Redir data type 0x%x len %d\n", EXTRACT_16BITS(&tlv
->type
),
638 EXTRACT_16BITS(&tlv
->length
));
643 hex_print_with_offset("\n\t\t\t[", TLV_DATA(tlv
), tll
, 0);
647 fputs("[|forces]", stdout
);
652 redirect_print(register const u_char
* pptr
, register u_int len
,
653 u_int16_t op_msk _U_
, int indent
)
655 const struct forces_tlv
*tlv
= (struct forces_tlv
*)pptr
;
656 u_int dlen
= len
- TLV_HDRL
;
660 if (dlen
<= RD_MIN
) {
661 printf("\n\t\ttruncated Redirect TLV: %d bytes missing! ",
669 invtlv
= tlv_valid(tlv
, tll
);
672 if (EXTRACT_16BITS(&tlv
->type
) == F_TLV_METD
) {
673 print_metatlv((u_char
*) TLV_DATA(tlv
), tll
, 0, indent
);
674 } else if ((EXTRACT_16BITS(&tlv
->type
) == F_TLV_REDD
)) {
675 print_reddata((u_char
*) TLV_DATA(tlv
), tll
, 0, indent
);
677 printf("Unknown REDIRECT TLV 0x%x len %d\n",
678 EXTRACT_16BITS(&tlv
->type
), EXTRACT_16BITS(&tlv
->length
));
681 tlv
= GO_NXT_TLV(tlv
, tll
);
686 ("\n\t\tMessy Redirect TLV header, type (0x%x)\n\t\texcess of %d Bytes ",
687 EXTRACT_16BITS(&tlv
->type
), tll
- EXTRACT_16BITS(&tlv
->length
));
694 fputs("[|forces]", stdout
);
702 lfbselect_print(register const u_char
* pptr
, register u_int len
,
703 u_int16_t op_msk
, int indent
)
705 const struct forces_lfbsh
*lfbs
;
706 const struct forces_tlv
*otlv
;
707 char *ib
= indent_pr(indent
, 0);
708 u_int dlen
= len
- TLV_HDRL
;
709 u_int tll
= dlen
- OP_OFF
;
712 if (dlen
<= OP_MIN
) { /* id, instance, oper tlv header .. */
713 printf("\n\t\ttruncated lfb selector: %d bytes missing! ",
718 lfbs
= (const struct forces_lfbsh
*)pptr
;
721 printf("\n%s%s(Classid %x) instance %x\n",
722 ib
, tok2str(ForCES_LFBs
, NULL
, EXTRACT_32BITS(&lfbs
->class)),
723 EXTRACT_32BITS(&lfbs
->class),
724 EXTRACT_32BITS(&lfbs
->instance
));
727 otlv
= (struct forces_tlv
*)(lfbs
+ 1);
732 invtlv
= tlv_valid(otlv
, tll
);
735 if (op_valid(EXTRACT_16BITS(&otlv
->type
), op_msk
)) {
736 otlv_print(otlv
, 0, indent
);
741 ("\t\tINValid oper-TLV type 0x%x length %d for this ForCES message\n",
742 EXTRACT_16BITS(&otlv
->type
), EXTRACT_16BITS(&otlv
->length
));
743 invoptlv_print((u_char
*)otlv
, tll
, 0, indent
);
745 otlv
= GO_NXT_TLV(otlv
, tll
);
750 ("\n\t\tMessy oper TLV header, type (0x%x)\n\t\texcess of %d Bytes ",
751 EXTRACT_16BITS(&otlv
->type
), tll
- EXTRACT_16BITS(&otlv
->length
));
758 fputs("[|forces]", stdout
);
763 forces_type_print(register const u_char
* pptr
, const struct forcesh
*fhdr _U_
,
764 register u_int mlen
, const struct tom_h
*tops
)
766 const struct forces_tlv
*tltlv
;
772 tll
= mlen
- sizeof(struct forcesh
);
775 if (tops
->flags
& ZERO_TTLV
) {
776 printf("<0x%x>Illegal Top level TLV!\n", tops
->flags
);
780 if (tops
->flags
& ZERO_MORE_TTLV
)
782 if (tops
->flags
& ONE_MORE_TTLV
) {
783 printf("\tTop level TLV Data missing!\n");
788 if (tops
->flags
& ZERO_TTLV
) {
792 ttlv
= tops
->flags
>> 4;
793 tltlv
= GET_TOP_TLV(pptr
);
795 /*XXX: 15 top level tlvs will probably be fine
796 You are nuts if you send more ;-> */
799 invtlv
= tlv_valid(tltlv
, tll
);
802 if (!ttlv_valid(EXTRACT_16BITS(&tltlv
->type
))) {
803 printf("\n\tInvalid ForCES Top TLV type=0x%x",
804 EXTRACT_16BITS(&tltlv
->type
));
809 printf("\t%s, length %d (data length %d Bytes)",
810 tok2str(ForCES_TLV
, NULL
, EXTRACT_16BITS(&tltlv
->type
)),
811 EXTRACT_16BITS(&tltlv
->length
), EXTRACT_16BITS(&tltlv
->length
) - 4);
813 rc
= tops
->print((u_char
*) TLV_DATA(tltlv
),
814 EXTRACT_16BITS(&tltlv
->length
), tops
->op_msk
, 9);
818 tltlv
= GO_NXT_TLV(tltlv
, tll
);
824 printf("\tMess TopTLV header: min %lu, total %d advertised %d ",
825 (unsigned long)sizeof(struct forces_tlv
),
826 tll
, EXTRACT_16BITS(&tltlv
->length
));
833 fputs("[|forces]", stdout
);
837 void forces_print(register const u_char
* pptr
, register u_int len
)
839 const struct forcesh
*fhdr
;
842 const struct tom_h
*tops
;
845 fhdr
= (const struct forcesh
*)pptr
;
847 if (!tom_valid(fhdr
->fm_tom
)) {
848 printf("Invalid ForCES message type %d\n", fhdr
->fm_tom
);
852 mlen
= ForCES_BLN(fhdr
);
854 tops
= get_forces_tom(fhdr
->fm_tom
);
855 if (tops
->v
== TOM_RSVD
) {
856 printf("\n\tUnknown ForCES message type=0x%x", fhdr
->fm_tom
);
860 printf("\n\tForCES %s ", tops
->s
);
861 if (!ForCES_HLN_VALID(mlen
, len
)) {
863 ("Illegal ForCES pkt len - min %lu, total recvd %d, advertised %d ",
864 (unsigned long)sizeof(struct forcesh
), len
, ForCES_BLN(fhdr
));
868 TCHECK2(*(pptr
+ 20), 4);
869 flg_raw
= EXTRACT_32BITS(pptr
+ 20);
871 printf("\n\tForCES Version %d len %uB flags 0x%08x ",
872 ForCES_V(fhdr
), mlen
, flg_raw
);
873 printf("\n\tSrcID 0x%x(%s) DstID 0x%x(%s) Correlator 0x%" PRIu64
,
874 ForCES_SID(fhdr
), ForCES_node(ForCES_SID(fhdr
)),
875 ForCES_DID(fhdr
), ForCES_node(ForCES_DID(fhdr
)),
876 EXTRACT_64BITS(fhdr
->fm_cor
));
881 ("\n\tForCES flags:\n\t %s(0x%x), prio=%d, %s(0x%x),\n\t %s(0x%x), %s(0x%x)\n",
882 ForCES_ACKp(ForCES_ACK(fhdr
)), ForCES_ACK(fhdr
),
884 ForCES_EMp(ForCES_EM(fhdr
)), ForCES_EM(fhdr
),
885 ForCES_ATp(ForCES_AT(fhdr
)), ForCES_AT(fhdr
),
886 ForCES_TPp(ForCES_TP(fhdr
)), ForCES_TP(fhdr
));
888 ("\t Extra flags: rsv(b5-7) 0x%x rsv(b13-31) 0x%x\n",
889 ForCES_RS1(fhdr
), ForCES_RS2(fhdr
));
891 rc
= forces_type_print(pptr
, fhdr
, mlen
, tops
);
894 hex_print_with_offset("\n\t[", pptr
, len
, 0);
900 printf("\n\t Raw ForCES message\n\t [");
901 hex_print_with_offset("\n\t ", pptr
, len
, 0);
908 fputs("[|forces]", stdout
);