linux-old/include/linux/icmpv6.h
<<
>>
Prefs
   1#ifndef _LINUX_ICMPV6_H
   2#define _LINUX_ICMPV6_H
   3
   4#include <asm/byteorder.h>
   5
   6struct icmp6hdr {
   7
   8        __u8            icmp6_type;
   9        __u8            icmp6_code;
  10        __u16           icmp6_cksum;
  11
  12
  13        union {
  14                __u32                   un_data32[1];
  15                __u16                   un_data16[2];
  16                __u8                    un_data8[4];
  17
  18                struct icmpv6_echo {
  19                        __u16           identifier;
  20                        __u16           sequence;
  21                } u_echo;
  22
  23                struct icmpv6_nd_advt {
  24#if defined(__LITTLE_ENDIAN_BITFIELD)
  25                        __u32           reserved:5,
  26                                        override:1,
  27                                        solicited:1,
  28                                        router:1,
  29                                        reserved2:24;
  30#elif defined(__BIG_ENDIAN_BITFIELD)
  31                        __u32           router:1,
  32                                        solicited:1,
  33                                        override:1,
  34                                        reserved:29;
  35#else
  36#error  "Please fix <asm/byteorder.h>"
  37#endif                                          
  38                } u_nd_advt;
  39
  40                struct icmpv6_nd_ra {
  41                        __u8            hop_limit;
  42#if defined(__LITTLE_ENDIAN_BITFIELD)
  43                        __u8            reserved:6,
  44                                        other:1,
  45                                        managed:1;
  46
  47#elif defined(__BIG_ENDIAN_BITFIELD)
  48                        __u8            managed:1,
  49                                        other:1,
  50                                        reserved:6;
  51#else
  52#error  "Please fix <asm/byteorder.h>"
  53#endif
  54                        __u16           rt_lifetime;
  55                } u_nd_ra;
  56
  57        } icmp6_dataun;
  58
  59#define icmp6_identifier        icmp6_dataun.u_echo.identifier
  60#define icmp6_sequence          icmp6_dataun.u_echo.sequence
  61#define icmp6_pointer           icmp6_dataun.un_data32[0]
  62#define icmp6_mtu               icmp6_dataun.un_data32[0]
  63#define icmp6_unused            icmp6_dataun.un_data32[0]
  64#define icmp6_maxdelay          icmp6_dataun.un_data16[0]
  65#define icmp6_router            icmp6_dataun.u_nd_advt.router
  66#define icmp6_solicited         icmp6_dataun.u_nd_advt.solicited
  67#define icmp6_override          icmp6_dataun.u_nd_advt.override
  68#define icmp6_ndiscreserved     icmp6_dataun.u_nd_advt.reserved
  69#define icmp6_hop_limit         icmp6_dataun.u_nd_ra.hop_limit
  70#define icmp6_addrconf_managed  icmp6_dataun.u_nd_ra.managed
  71#define icmp6_addrconf_other    icmp6_dataun.u_nd_ra.other
  72#define icmp6_rt_lifetime       icmp6_dataun.u_nd_ra.rt_lifetime
  73};
  74
  75
  76#define ICMPV6_DEST_UNREACH             1
  77#define ICMPV6_PKT_TOOBIG               2
  78#define ICMPV6_TIME_EXCEED              3
  79#define ICMPV6_PARAMPROB                4
  80
  81#define ICMPV6_INFOMSG_MASK             0x80
  82
  83#define ICMPV6_ECHO_REQUEST             128
  84#define ICMPV6_ECHO_REPLY               129
  85#define ICMPV6_MGM_QUERY                130
  86#define ICMPV6_MGM_REPORT               131
  87#define ICMPV6_MGM_REDUCTION            132
  88
  89/* definitions for MLDv2 */
  90
  91#define MLD2_MODE_IS_INCLUDE    1
  92#define MLD2_MODE_IS_EXCLUDE    2
  93#define MLD2_CHANGE_TO_INCLUDE  3
  94#define MLD2_CHANGE_TO_EXCLUDE  4
  95#define MLD2_ALLOW_NEW_SOURCES  5
  96#define MLD2_BLOCK_OLD_SOURCES  6
  97
  98#define ICMPV6_MLD2_REPORT              143
  99#define MLD2_ALL_MCR_INIT { { { 0xff,0x02,0,0,0,0,0,0,0,0,0,0,0,0,0,0x16 } } }
 100
 101/*
 102 *      Codes for Destination Unreachable
 103 */
 104#define ICMPV6_NOROUTE                  0
 105#define ICMPV6_ADM_PROHIBITED           1
 106#define ICMPV6_NOT_NEIGHBOUR            2
 107#define ICMPV6_ADDR_UNREACH             3
 108#define ICMPV6_PORT_UNREACH             4
 109
 110/*
 111 *      Codes for Time Exceeded
 112 */
 113#define ICMPV6_EXC_HOPLIMIT             0
 114#define ICMPV6_EXC_FRAGTIME             1
 115
 116/*
 117 *      Codes for Parameter Problem
 118 */
 119#define ICMPV6_HDR_FIELD                0
 120#define ICMPV6_UNK_NEXTHDR              1
 121#define ICMPV6_UNK_OPTION               2
 122
 123/*
 124 *      constants for (set|get)sockopt
 125 */
 126
 127#define ICMPV6_FILTER                   1
 128
 129/*
 130 *      ICMPV6 filter
 131 */
 132
 133#define ICMPV6_FILTER_BLOCK             1
 134#define ICMPV6_FILTER_PASS              2
 135#define ICMPV6_FILTER_BLOCKOTHERS       3
 136#define ICMPV6_FILTER_PASSONLY          4
 137
 138struct icmp6_filter {
 139        __u32           data[8];
 140};
 141
 142#ifdef __KERNEL__
 143
 144#include <linux/netdevice.h>
 145#include <linux/skbuff.h>
 146
 147
 148extern void                             icmpv6_send(struct sk_buff *skb,
 149                                                    int type, int code,
 150                                                    __u32 info, 
 151                                                    struct net_device *dev);
 152
 153extern int                              icmpv6_init(struct net_proto_family *ops);
 154extern int                              icmpv6_err_convert(int type, int code,
 155                                                           int *err);
 156extern void                             icmpv6_cleanup(void);
 157extern void                             icmpv6_param_prob(struct sk_buff *skb,
 158                                                          int code, int pos);
 159#endif
 160
 161#endif
 162
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.