wireshark/ipproto.h

70 lines
2.8 KiB
C
Raw Normal View History

/* ipproto.h
* Declarations of IP protocol numbers, and of routines for converting
* IP protocol numbers into strings.
*
* $Id: ipproto.h,v 1.4 2001/11/13 23:55:29 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
* Copyright 1998 Gerald Combs
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef __IPPROTO_H__
#define __IPPROTO_H__
/*
* IP protocol numbers.
*/
#define IP_PROTO_IP 0 /* dummy for IP */
#define IP_PROTO_HOPOPTS 0 /* IP6 hop-by-hop options */
#define IP_PROTO_ICMP 1 /* control message protocol */
#define IP_PROTO_IGMP 2 /* group mgmt protocol */
#define IP_PROTO_GGP 3 /* gateway^2 (deprecated) */
#define IP_PROTO_IPIP 4 /* IP inside IP */
#define IP_PROTO_IPV4 4 /* IP header */
#define IP_PROTO_TCP 6 /* tcp */
#define IP_PROTO_EGP 8 /* exterior gateway protocol */
#define IP_PROTO_IGRP 9
#define IP_PROTO_PUP 12 /* pup */
#define IP_PROTO_UDP 17 /* user datagram protocol */
#define IP_PROTO_IDP 22 /* xns idp */
#define IP_PROTO_TP 29 /* tp-4 w/ class negotiation */
#define IP_PROTO_IPV6 41 /* IP6 header */
#define IP_PROTO_ROUTING 43 /* IP6 routing header */
#define IP_PROTO_FRAGMENT 44 /* IP6 fragmentation header */
#define IP_PROTO_RSVP 46 /* Resource ReSerVation protocol */
#define IP_PROTO_GRE 47 /* GRE */
#define IP_PROTO_ESP 50 /* ESP */
#define IP_PROTO_AH 51 /* AH */
#define IP_PROTO_ICMPV6 58 /* ICMP6 */
#define IP_PROTO_NONE 59 /* IP6 no next header */
#define IP_PROTO_DSTOPTS 60 /* IP6 no next header */
#define IP_PROTO_EON 80 /* ISO cnlp */
#define IP_PROTO_VINES 83 /* Vines over raw IP */
#define IP_PROTO_EIGRP 88
#define IP_PROTO_OSPF 89
#define IP_PROTO_ENCAP 98 /* encapsulation header */
#define IP_PROTO_PIM 103 /* Protocol Independent Mcast */
#define IP_PROTO_IPCOMP 108 /* IP payload compression */
#define IP_PROTO_VRRP 112 /* Virtual Router Redundancy Protocol */
There is really no need to have the BGP dissector and the LDP dissector have two independent "value_string" tables mapping RFC 1700 address family numbers to names, nor is there any need to have the BGP dissector and the PIM dissector have two independent sets of #defines for RFC 1700 address family numbers; put a single "value_string" table in "afn.c" and put a declaration of it, and #defines for the address family numbers, into "afn.h", and have the dissectors use that. Move the #define for PGM into "ipproto.h", and add an entry for it in the "value_string" table in "ipproto.c". Have the PGM dissector use the standard Ethereal mechanisms for resolving addresses, and have it use "value_string" tables for mapping option types, the OPX bits, and packet types to strings. Use "bytes_to_str()" to turn byte arrays into strings of hex digits. Pass the packet type string to "dissect_pgmopts()" as an argument, rather than making it a global. Don't use "proto_tree_add_XXX_format" routines if you can possibly just use "proto_tree_add_XXX"; give various fields the correct radix and type, and VALS() strings if necessary, to make that happen (and to make filtering on them more pleasant). Put the type, length, and total length of the options into the protocol tree as separate fields. Don't have separate type, length, and OPX fields for every type of option; one field will suffice. Don't format a string with "sprintf()" and then pass that string to "col_add_fstr()" with a format of "%s" and the string as an argument - "col_add_fstr()" can format strings itself (that's what the "f" stands for). Don't byte-swap and then un-byte-swap IPv4 address fields in the header, just leave them network byte order to start with. Use the correct fields for "proto_tree_add_XXX", rather than using the same field multiple times. Quit early if an address family identifier isn't AFNUM_INET, as that means the structure we use to dissect the header doesn't match the actual header. svn path=/trunk/; revision=3761
2001-07-21 10:27:13 +00:00
#define IP_PROTO_PGM 113 /* Pragmatic General Multicast */
#define IP_PROTO_SCTP 132 /* Stream Control Transmission Protocol */
extern const char *ipprotostr(int proto);
#endif /* ipproto.h */