source: rtems-libbsd/freebsd/contrib/tcpdump/print-igrp.c @ 8440506

4.1155-freebsd-126-freebsd-12freebsd-9.3
Last change on this file since 8440506 was 8440506, checked in by Chris Johns <chrisj@…>, on 06/15/15 at 07:42:23

Add tcpdump and libpcap.

  • Update the file builder generator to handle generator specific cflags and includes. The tcpdump and libpcap have localised headers and need specific headers paths to see them. There are also module specific flags and these need to be passed to the lex and yacc generators.
  • Add the tcpdump support.
  • Property mode set to 100644
File size: 3.8 KB
Line 
1#include <machine/rtems-bsd-user-space.h>
2
3/*
4 * Copyright (c) 1996, 1997
5 *      The Regents of the University of California.  All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that: (1) source code distributions
9 * retain the above copyright notice and this paragraph in its entirety, (2)
10 * distributions including binary code include the above copyright notice and
11 * this paragraph in its entirety in the documentation or other materials
12 * provided with the distribution, and (3) all advertising materials mentioning
13 * features or use of this software display the following acknowledgement:
14 * ``This product includes software developed by the University of California,
15 * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
16 * the University nor the names of its contributors may be used to endorse
17 * or promote products derived from this software without specific prior
18 * written permission.
19 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
20 * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
21 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
22 *
23 * Initial contribution from Francis Dupont (francis.dupont@inria.fr)
24 */
25
26#ifndef lint
27static const char rcsid[] _U_ =
28    "@(#) $Header: /tcpdump/master/tcpdump/print-igrp.c,v 1.21 2005-04-20 21:01:56 guy Exp $ (LBL)";
29#endif
30
31#ifdef HAVE_CONFIG_H
32#include "config.h"
33#endif
34
35#include <tcpdump-stdinc.h>
36
37#include <stdio.h>
38
39#include "interface.h"
40#include "addrtoname.h"
41#include "igrp.h"
42#include "ip.h"
43#include "extract.h"                    /* must come after interface.h */
44
45static void
46igrp_entry_print(register struct igrprte *igr, register int is_interior,
47    register int is_exterior)
48{
49        register u_int delay, bandwidth;
50        u_int metric, mtu;
51
52        if (is_interior)
53                printf(" *.%d.%d.%d", igr->igr_net[0],
54                    igr->igr_net[1], igr->igr_net[2]);
55        else if (is_exterior)
56                printf(" X%d.%d.%d.0", igr->igr_net[0],
57                    igr->igr_net[1], igr->igr_net[2]);
58        else
59                printf(" %d.%d.%d.0", igr->igr_net[0],
60                    igr->igr_net[1], igr->igr_net[2]);
61
62        delay = EXTRACT_24BITS(igr->igr_dly);
63        bandwidth = EXTRACT_24BITS(igr->igr_bw);
64        metric = bandwidth + delay;
65        if (metric > 0xffffff)
66                metric = 0xffffff;
67        mtu = EXTRACT_16BITS(igr->igr_mtu);
68
69        printf(" d=%d b=%d r=%d l=%d M=%d mtu=%d in %d hops",
70            10 * delay, bandwidth == 0 ? 0 : 10000000 / bandwidth,
71            igr->igr_rel, igr->igr_ld, metric,
72            mtu, igr->igr_hct);
73}
74
75static struct tok op2str[] = {
76        { IGRP_UPDATE,          "update" },
77        { IGRP_REQUEST,         "request" },
78        { 0,                    NULL }
79};
80
81void
82igrp_print(register const u_char *bp, u_int length, const u_char *bp2 _U_)
83{
84        register struct igrphdr *hdr;
85        register u_char *cp;
86        u_int nint, nsys, next;
87
88        hdr = (struct igrphdr *)bp;
89        cp = (u_char *)(hdr + 1);
90        (void)printf("igrp:");
91
92        /* Header */
93        TCHECK(*hdr);
94        nint = EXTRACT_16BITS(&hdr->ig_ni);
95        nsys = EXTRACT_16BITS(&hdr->ig_ns);
96        next = EXTRACT_16BITS(&hdr->ig_nx);
97
98        (void)printf(" %s V%d edit=%d AS=%d (%d/%d/%d)",
99            tok2str(op2str, "op-#%d", IGRP_OP(hdr->ig_vop)),
100            IGRP_V(hdr->ig_vop),
101            hdr->ig_ed,
102            EXTRACT_16BITS(&hdr->ig_as),
103            nint,
104            nsys,
105            next);
106
107        length -= sizeof(*hdr);
108        while (length >= IGRP_RTE_SIZE) {
109                if (nint > 0) {
110                        TCHECK2(*cp, IGRP_RTE_SIZE);
111                        igrp_entry_print((struct igrprte *)cp, 1, 0);
112                        --nint;
113                } else if (nsys > 0) {
114                        TCHECK2(*cp, IGRP_RTE_SIZE);
115                        igrp_entry_print((struct igrprte *)cp, 0, 0);
116                        --nsys;
117                } else if (next > 0) {
118                        TCHECK2(*cp, IGRP_RTE_SIZE);
119                        igrp_entry_print((struct igrprte *)cp, 0, 1);
120                        --next;
121                } else {
122                        (void)printf(" [extra bytes %d]", length);
123                        break;
124                }
125                cp += IGRP_RTE_SIZE;
126                length -= IGRP_RTE_SIZE;
127        }
128        if (nint == 0 && nsys == 0 && next == 0)
129                return;
130trunc:
131        fputs(" [|igrp]", stdout);
132}
Note: See TracBrowser for help on using the repository browser.