File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / mtr / packet / protocols.h
Revision 1.1.1.3 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Wed Sep 27 11:18:58 2023 UTC (9 months ago) by misho
Branches: mtr, MAIN
CVS tags: v0_95, HEAD
Version 0.95

    1: /*
    2:     mtr  --  a network diagnostic tool
    3:     Copyright (C) 2016  Matt Kimball
    4: 
    5:     This program is free software; you can redistribute it and/or modify
    6:     it under the terms of the GNU General Public License version 2 as
    7:     published by the Free Software Foundation.
    8: 
    9:     This program is distributed in the hope that it will be useful,
   10:     but WITHOUT ANY WARRANTY; without even the implied warranty of
   11:     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   12:     GNU General Public License for more details.
   13: 
   14:     You should have received a copy of the GNU General Public License along
   15:     with this program; if not, write to the Free Software Foundation, Inc.,
   16:     51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
   17: */
   18: 
   19: #ifndef PROTOCOLS_H
   20: #define PROTOCOLS_H
   21: 
   22: /*  ICMPv4 type codes  */
   23: #define ICMP_ECHOREPLY 0
   24: #define ICMP_DEST_UNREACH 3
   25: #define ICMP_ECHO 8
   26: #define ICMP_TIME_EXCEEDED 11
   27: 
   28: /*  ICMP_DEST_UNREACH codes */
   29: #define ICMP_PORT_UNREACH 3
   30: 
   31: /*  ICMPv6 type codes  */
   32: #define ICMP6_DEST_UNREACH 1
   33: #define ICMP6_TIME_EXCEEDED 3
   34: #define ICMP6_ECHO 128
   35: #define ICMP6_ECHOREPLY 129
   36: 
   37: /*  ICMP6_DEST_UNREACH codes */
   38: #define ICMP6_PORT_UNREACH 4
   39: 
   40: /*
   41:     The minimum size of the ICMP "original datagram" when
   42:     using ICMP extensions
   43: */
   44: #define ICMP_ORIGINAL_DATAGRAM_MIN_SIZE 128
   45: 
   46: /*  The classnum and type of MPLS labels in an ICMP extension object  */
   47: #define ICMP_EXT_MPLS_CLASSNUM 1
   48: #define ICMP_EXT_MPLS_CTYPE 1
   49: 
   50: #define HTTP_PORT 80
   51: 
   52: /*  We can't rely on header files to provide this information, because
   53:     the fields have different names between, for instance, Linux and
   54:     Solaris  */
   55: struct ICMPHeader {
   56:     uint8_t type;
   57:     uint8_t code;
   58:     uint16_t checksum;
   59:     uint16_t id;
   60:     uint16_t sequence;
   61: };
   62: 
   63: /*  ICMP extension header, which might contain MPLS labels  */
   64: /*  See RFC 4884  */
   65: struct ICMPExtensionHeader {
   66:     uint8_t version;
   67:     uint8_t reserved;
   68:     uint16_t checksum;
   69: };
   70: 
   71: /*  An object in an extended ICMP object  */
   72: struct ICMPExtensionObject {
   73:     uint16_t len;
   74:     uint8_t classnum;
   75:     uint8_t ctype;
   76: };
   77: 
   78: /*  An MPLS label included in an ICMP extension  */
   79: /*  See RFC 4950  */
   80: struct ICMPExtMPLSLabel {
   81:     uint8_t label[3];           // Low 4 bits are Traffic Class Use, Stack
   82:     uint8_t ttl;
   83: };
   84: 
   85: /* Structure of an UDP header.  */
   86: struct UDPHeader {
   87:     uint16_t srcport;
   88:     uint16_t dstport;
   89:     uint16_t length;
   90:     uint16_t checksum;
   91: };
   92: 
   93: /* Structure of an TCP header, as far as we need it.  */
   94: struct TCPHeader {
   95:     uint16_t srcport;
   96:     uint16_t dstport;
   97:     uint32_t seq;
   98: };
   99: 
  100: /* Structure of an SCTP header */
  101: struct SCTPHeader {
  102:     uint16_t srcport;
  103:     uint16_t dstport;
  104:     uint32_t veri_tag;
  105: };
  106: 
  107: /* Structure of an IPv4 UDP pseudoheader.  */
  108: struct UDPPseudoHeader {
  109:     uint32_t saddr;
  110:     uint32_t daddr;
  111:     uint8_t zero;
  112:     uint8_t protocol;
  113:     uint16_t len;
  114: };
  115: 
  116: /*  Structure of an IP header.  */
  117: struct IPHeader {
  118:     uint8_t version;
  119:     uint8_t tos;
  120:     uint16_t len;
  121:     uint16_t id;
  122:     uint16_t frag;
  123:     uint8_t ttl;
  124:     uint8_t protocol;
  125:     uint16_t check;
  126:     uint32_t saddr;
  127:     uint32_t daddr;
  128: };
  129: 
  130: /*  IP version 6 header  */
  131: struct IP6Header {
  132:     uint8_t version;
  133:     uint8_t flow[3];
  134:     uint16_t len;
  135:     uint8_t protocol;
  136:     uint8_t ttl;
  137:     uint8_t saddr[16];
  138:     uint8_t daddr[16];
  139: };
  140: 
  141: /*  The pseudo-header used for checksum computation for ICMPv6 and UDPv6  */
  142: struct IP6PseudoHeader {
  143:     uint8_t saddr[16];
  144:     uint8_t daddr[16];
  145:     uint32_t len;
  146:     uint8_t zero[3];
  147:     uint8_t protocol;
  148: };
  149: 
  150: #endif

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>