jdk/src/java.base/windows/native/libnet/icmp.h
changeset 41815 b3da085a9846
parent 41748 17a1e89a3f34
parent 41814 a0333150713e
child 41816 07e906f1a20b
equal deleted inserted replaced
41748:17a1e89a3f34 41815:b3da085a9846
     1 /*
       
     2  * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
       
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
       
     4  *
       
     5  * This code is free software; you can redistribute it and/or modify it
       
     6  * under the terms of the GNU General Public License version 2 only, as
       
     7  * published by the Free Software Foundation.  Oracle designates this
       
     8  * particular file as subject to the "Classpath" exception as provided
       
     9  * by Oracle in the LICENSE file that accompanied this code.
       
    10  *
       
    11  * This code is distributed in the hope that it will be useful, but WITHOUT
       
    12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
       
    13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
       
    14  * version 2 for more details (a copy is included in the LICENSE file that
       
    15  * accompanied this code).
       
    16  *
       
    17  * You should have received a copy of the GNU General Public License version
       
    18  * 2 along with this work; if not, write to the Free Software Foundation,
       
    19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
       
    20  *
       
    21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
       
    22  * or visit www.oracle.com if you need additional information or have any
       
    23  * questions.
       
    24  */
       
    25 
       
    26 #ifndef ICMP_H
       
    27 #define ICMP_H
       
    28 
       
    29 /*
       
    30  * Structure of an internet header, naked of options.
       
    31  *
       
    32  * We declare ip_len and ip_off to be short, rather than ushort_t
       
    33  * pragmatically since otherwise unsigned comparisons can result
       
    34  * against negative integers quite easily, and fail in subtle ways.
       
    35  */
       
    36 struct ip {
       
    37         unsigned char   ip_hl:4,        /* header length */
       
    38                         ip_v:4;         /* version */
       
    39         unsigned char   ip_tos;                 /* type of service */
       
    40         short   ip_len;                 /* total length */
       
    41         unsigned short ip_id;                   /* identification */
       
    42         short   ip_off;                 /* fragment offset field */
       
    43 #define IP_DF 0x4000                    /* don't fragment flag */
       
    44 #define IP_MF 0x2000                    /* more fragments flag */
       
    45         unsigned char   ip_ttl;                 /* time to live */
       
    46         unsigned char   ip_p;                   /* protocol */
       
    47         unsigned short ip_sum;          /* checksum */
       
    48         struct  in_addr ip_src, ip_dst; /* source and dest address */
       
    49 };
       
    50 
       
    51 /*
       
    52  * Structure of an icmp header.
       
    53  */
       
    54 struct icmp {
       
    55         unsigned char   icmp_type;              /* type of message, see below */
       
    56         unsigned char   icmp_code;              /* type sub code */
       
    57         unsigned short icmp_cksum;              /* ones complement cksum of struct */
       
    58         union {
       
    59                 unsigned char ih_pptr;          /* ICMP_PARAMPROB */
       
    60                 struct in_addr ih_gwaddr;       /* ICMP_REDIRECT */
       
    61                 struct ih_idseq {
       
    62                         unsigned short icd_id;
       
    63                         unsigned short icd_seq;
       
    64                 } ih_idseq;
       
    65                 int ih_void;
       
    66 
       
    67                 /* ICMP_UNREACH_NEEDFRAG -- Path MTU Discovery (RFC1191) */
       
    68                 struct ih_pmtu {
       
    69                         unsigned short ipm_void;
       
    70                         unsigned short ipm_nextmtu;
       
    71                 } ih_pmtu;
       
    72 
       
    73                 struct ih_rtradv {
       
    74                         unsigned char irt_num_addrs;
       
    75                         unsigned char irt_wpa;
       
    76                         unsigned short irt_lifetime;
       
    77                 } ih_rtradv;
       
    78         } icmp_hun;
       
    79 #define icmp_pptr       icmp_hun.ih_pptr
       
    80 #define icmp_gwaddr     icmp_hun.ih_gwaddr
       
    81 #define icmp_id         icmp_hun.ih_idseq.icd_id
       
    82 #define icmp_seq        icmp_hun.ih_idseq.icd_seq
       
    83 #define icmp_void       icmp_hun.ih_void
       
    84 #define icmp_pmvoid     icmp_hun.ih_pmtu.ipm_void
       
    85 #define icmp_nextmtu    icmp_hun.ih_pmtu.ipm_nextmtu
       
    86         union {
       
    87                 struct id_ts {
       
    88                         unsigned int its_otime;
       
    89                         unsigned int its_rtime;
       
    90                         unsigned int its_ttime;
       
    91                 } id_ts;
       
    92                 struct id_ip  {
       
    93                         struct ip idi_ip;
       
    94                         /* options and then 64 bits of data */
       
    95                 } id_ip;
       
    96                 unsigned int id_mask;
       
    97                 char    id_data[1];
       
    98         } icmp_dun;
       
    99 #define icmp_otime      icmp_dun.id_ts.its_otime
       
   100 #define icmp_rtime      icmp_dun.id_ts.its_rtime
       
   101 #define icmp_ttime      icmp_dun.id_ts.its_ttime
       
   102 #define icmp_ip         icmp_dun.id_ip.idi_ip
       
   103 #define icmp_mask       icmp_dun.id_mask
       
   104 #define icmp_data       icmp_dun.id_data
       
   105 };
       
   106 
       
   107 #define ICMP_ECHOREPLY          0               /* echo reply */
       
   108 #define ICMP_ECHO               8               /* echo service */
       
   109 
       
   110 /*
       
   111  * ICMPv6 structures & constants
       
   112  */
       
   113 
       
   114 typedef struct icmp6_hdr {
       
   115         u_char   icmp6_type;    /* type field */
       
   116         u_char   icmp6_code;    /* code field */
       
   117         u_short  icmp6_cksum;   /* checksum field */
       
   118         union {
       
   119                 u_int icmp6_un_data32[1];       /* type-specific field */
       
   120                 u_short icmp6_un_data16[2];     /* type-specific field */
       
   121                 u_char  icmp6_un_data8[4];      /* type-specific field */
       
   122         } icmp6_dataun;
       
   123 } icmp6_t;
       
   124 
       
   125 #define icmp6_data32    icmp6_dataun.icmp6_un_data32
       
   126 #define icmp6_data16    icmp6_dataun.icmp6_un_data16
       
   127 #define icmp6_data8     icmp6_dataun.icmp6_un_data8
       
   128 #define icmp6_pptr      icmp6_data32[0] /* parameter prob */
       
   129 #define icmp6_mtu       icmp6_data32[0] /* packet too big */
       
   130 #define icmp6_id        icmp6_data16[0] /* echo request/reply */
       
   131 #define icmp6_seq       icmp6_data16[1] /* echo request/reply */
       
   132 #define icmp6_maxdelay  icmp6_data16[0] /* mcast group membership */
       
   133 
       
   134 struct ip6_pseudo_hdr  /* for calculate the ICMPv6 checksum */
       
   135 {
       
   136   struct in6_addr ip6_src;
       
   137   struct in6_addr ip6_dst;
       
   138   u_int       ip6_plen;
       
   139   u_int       ip6_nxt;
       
   140 };
       
   141 
       
   142 #define ICMP6_ECHO_REQUEST      128
       
   143 #define ICMP6_ECHO_REPLY        129
       
   144 #define IPPROTO_ICMPV6          58
       
   145 #define IPV6_UNICAST_HOPS       4  /* Set/get IP unicast hop limit */
       
   146 
       
   147 
       
   148 #endif