linux/include/linux/icmpv6.h
<<
>>
Prefs
   1#ifndef _LINUX_ICMPV6_H
   2#define _LINUX_ICMPV6_H
   3
   4#include <linux/types.h>
   5#include <asm/byteorder.h>
   6
   7struct icmp6hdr {
   8
   9        __u8            icmp6_type;
  10        __u8            icmp6_code;
  11        __sum16         icmp6_cksum;
  12
  13
  14        union {
  15                __be32                  un_data32[1];
  16                __be16                  un_data16[2];
  17                __u8                    un_data8[4];
  18
  19                struct icmpv6_echo {
  20                        __be16          identifier;
  21                        __be16          sequence;
  22                } u_echo;
  23
  24                struct icmpv6_nd_advt {
  25#if defined(__LITTLE_ENDIAN_BITFIELD)
  26                        __u32           reserved:5,
  27                                        override:1,
  28                                        solicited:1,
  29                                        router:1,
  30                                        reserved2:24;
  31#elif defined(__BIG_ENDIAN_BITFIELD)
  32                        __u32           router:1,
  33                                        solicited:1,
  34                                        override:1,
  35                                        reserved:29;
  36#else
  37#error  "Please fix <asm/byteorder.h>"
  38#endif                                          
  39                } u_nd_advt;
  40
  41                struct icmpv6_nd_ra {
  42                        __u8            hop_limit;
  43#if defined(__LITTLE_ENDIAN_BITFIELD)
  44                        __u8            reserved:3,
  45                                        router_pref:2,
  46                                        home_agent:1,
  47                                        other:1,
  48                                        managed:1;
  49
  50#elif defined(__BIG_ENDIAN_BITFIELD)
  51                        __u8            managed:1,
  52                                        other:1,
  53                                        home_agent:1,
  54                                        router_pref:2,
  55                                        reserved:3;
  56#else
  57#error  "Please fix <asm/byteorder.h>"
  58#endif
  59                        __be16          rt_lifetime;
  60                } u_nd_ra;
  61
  62        } icmp6_dataun;
  63
  64#define icmp6_identifier        icmp6_dataun.u_echo.identifier
  65#define icmp6_sequence          icmp6_dataun.u_echo.sequence
  66#define icmp6_pointer           icmp6_dataun.un_data32[0]
  67#define icmp6_mtu               icmp6_dataun.un_data32[0]
  68#define icmp6_unused            icmp6_dataun.un_data32[0]
  69#define icmp6_maxdelay          icmp6_dataun.un_data16[0]
  70#define icmp6_router            icmp6_dataun.u_nd_advt.router
  71#define icmp6_solicited         icmp6_dataun.u_nd_advt.solicited
  72#define icmp6_override          icmp6_dataun.u_nd_advt.override
  73#define icmp6_ndiscreserved     icmp6_dataun.u_nd_advt.reserved
  74#define icmp6_hop_limit         icmp6_dataun.u_nd_ra.hop_limit
  75#define icmp6_addrconf_managed  icmp6_dataun.u_nd_ra.managed
  76#define icmp6_addrconf_other    icmp6_dataun.u_nd_ra.other
  77#define icmp6_rt_lifetime       icmp6_dataun.u_nd_ra.rt_lifetime
  78#define icmp6_router_pref       icmp6_dataun.u_nd_ra.router_pref
  79};
  80
  81#ifdef __KERNEL__
  82#include <linux/skbuff.h>
  83
  84static inline struct icmp6hdr *icmp6_hdr(const struct sk_buff *skb)
  85{
  86        return (struct icmp6hdr *)skb_transport_header(skb);
  87}
  88#endif
  89
  90#define ICMPV6_ROUTER_PREF_LOW          0x3
  91#define ICMPV6_ROUTER_PREF_MEDIUM       0x0
  92#define ICMPV6_ROUTER_PREF_HIGH         0x1
  93#define ICMPV6_ROUTER_PREF_INVALID      0x2
  94
  95#define ICMPV6_DEST_UNREACH             1
  96#define ICMPV6_PKT_TOOBIG               2
  97#define ICMPV6_TIME_EXCEED              3
  98#define ICMPV6_PARAMPROB                4
  99
 100#define ICMPV6_INFOMSG_MASK             0x80
 101
 102#define ICMPV6_ECHO_REQUEST             128
 103#define ICMPV6_ECHO_REPLY               129
 104#define ICMPV6_MGM_QUERY                130
 105#define ICMPV6_MGM_REPORT               131
 106#define ICMPV6_MGM_REDUCTION            132
 107
 108#define ICMPV6_NI_QUERY                 139
 109#define ICMPV6_NI_REPLY                 140
 110
 111#define ICMPV6_MLD2_REPORT              143
 112
 113#define ICMPV6_DHAAD_REQUEST            144
 114#define ICMPV6_DHAAD_REPLY              145
 115#define ICMPV6_MOBILE_PREFIX_SOL        146
 116#define ICMPV6_MOBILE_PREFIX_ADV        147
 117
 118/*
 119 *      Codes for Destination Unreachable
 120 */
 121#define ICMPV6_NOROUTE                  0
 122#define ICMPV6_ADM_PROHIBITED           1
 123#define ICMPV6_NOT_NEIGHBOUR            2
 124#define ICMPV6_ADDR_UNREACH             3
 125#define ICMPV6_PORT_UNREACH             4
 126
 127/*
 128 *      Codes for Time Exceeded
 129 */
 130#define ICMPV6_EXC_HOPLIMIT             0
 131#define ICMPV6_EXC_FRAGTIME             1
 132
 133/*
 134 *      Codes for Parameter Problem
 135 */
 136#define ICMPV6_HDR_FIELD                0
 137#define ICMPV6_UNK_NEXTHDR              1
 138#define ICMPV6_UNK_OPTION               2
 139
 140/*
 141 *      constants for (set|get)sockopt
 142 */
 143
 144#define ICMPV6_FILTER                   1
 145
 146/*
 147 *      ICMPV6 filter
 148 */
 149
 150#define ICMPV6_FILTER_BLOCK             1
 151#define ICMPV6_FILTER_PASS              2
 152#define ICMPV6_FILTER_BLOCKOTHERS       3
 153#define ICMPV6_FILTER_PASSONLY          4
 154
 155struct icmp6_filter {
 156        __u32           data[8];
 157};
 158
 159/*
 160 *      Definitions for MLDv2
 161 */
 162#define MLD2_MODE_IS_INCLUDE    1
 163#define MLD2_MODE_IS_EXCLUDE    2
 164#define MLD2_CHANGE_TO_INCLUDE  3
 165#define MLD2_CHANGE_TO_EXCLUDE  4
 166#define MLD2_ALLOW_NEW_SOURCES  5
 167#define MLD2_BLOCK_OLD_SOURCES  6
 168
 169#define MLD2_ALL_MCR_INIT { { { 0xff,0x02,0,0,0,0,0,0,0,0,0,0,0,0,0,0x16 } } }
 170
 171#ifdef __KERNEL__
 172
 173#include <linux/netdevice.h>
 174
 175extern void                             icmpv6_send(struct sk_buff *skb,
 176                                                    u8 type, u8 code,
 177                                                    __u32 info);
 178
 179extern int                              icmpv6_init(void);
 180extern int                              icmpv6_err_convert(u8 type, u8 code,
 181                                                           int *err);
 182extern void                             icmpv6_cleanup(void);
 183extern void                             icmpv6_param_prob(struct sk_buff *skb,
 184                                                          u8 code, int pos);
 185
 186struct flowi6;
 187struct in6_addr;
 188extern void                             icmpv6_flow_init(struct sock *sk,
 189                                                         struct flowi6 *fl6,
 190                                                         u8 type,
 191                                                         const struct in6_addr *saddr,
 192                                                         const struct in6_addr *daddr,
 193                                                         int oif);
 194#endif
 195
 196#endif
 197