1/*
2 * Copyright (c) 2013 The TCPDUMP project
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that: (1) source code
6 * distributions retain the above copyright notice and this paragraph
7 * in its entirety, and (2) distributions including binary code include
8 * the above copyright notice and this paragraph in its entirety in
9 * the documentation or other materials provided with the distribution.
10 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
11 * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
12 * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
13 * FOR A PARTICULAR PURPOSE.
14 *
15 * Original code by Ola Martin Lykkja (ola.lykkja@q-free.com)
16 */
17
18#include <sys/cdefs.h>
19#ifndef lint
20__RCSID("$NetBSD: print-calm-fast.c,v 1.4 2023/08/17 20:19:40 christos Exp $");
21#endif
22
23/* \summary: Communication access for land mobiles (CALM) printer */
24
25#ifdef HAVE_CONFIG_H
26#include <config.h>
27#endif
28
29#include "netdissect-stdinc.h"
30
31#define ND_LONGJMP_FROM_TCHECK
32#include "netdissect.h"
33#include "extract.h"
34#include "addrtoname.h"
35
36/*
37   ISO 29281:2009
38   Intelligent Transport Systems . Communications access for land mobiles (CALM)
39   CALM non-IP networking
40*/
41
42/*
43 * This is the top level routine of the printer.  'bp' points
44 * to the calm header of the packet.
45 */
46void
47calm_fast_print(netdissect_options *ndo, const u_char *bp, u_int length, const struct lladdr_info *src)
48{
49	ndo->ndo_protocol = "calm_fast";
50
51	ND_PRINT("CALM FAST");
52	if (src != NULL)
53		ND_PRINT(" src:%s", (src->addr_string)(ndo, src->addr));
54	ND_PRINT("; ");
55
56	if (length < 2) {
57		ND_PRINT(" (length %u < 2)", length);
58		goto invalid;
59	}
60
61	ND_PRINT("SrcNwref:%u; ", GET_U_1(bp));
62	length -= 1;
63	bp += 1;
64
65	ND_PRINT("DstNwref:%u; ", GET_U_1(bp));
66	length -= 1;
67	bp += 1;
68
69	if (ndo->ndo_vflag)
70		ND_DEFAULTPRINT(bp, length);
71	return;
72
73invalid:
74	nd_print_invalid(ndo);
75	ND_TCHECK_LEN(bp, length);
76}
77