Something went wrong. Try again.
Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
Something went wrong. Try again.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788/* SPDX-License-Identifier: GPL-2.0 */#ifndef _LINUX_ICMPV6_H#define _LINUX_ICMPV6_H
#include <linux/skbuff.h>#include <linux/ipv6.h>#include <uapi/linux/icmpv6.h>
static inline struct icmp6hdr *icmp6_hdr(const struct sk_buff *skb){ return (struct icmp6hdr *)skb_transport_header(skb);}
#include <linux/netdevice.h>
#if IS_ENABLED(CONFIG_IPV6)
void icmp6_send(struct sk_buff *skb, u8 type, u8 code, __u32 info, const struct in6_addr *force_saddr, const struct inet6_skb_parm *parm);
static inline void icmpv6_send(struct sk_buff *skb, u8 type, u8 code, __u32 info){ icmp6_send(skb, type, code, info, NULL, IP6CB(skb));}
int ip6_err_gen_icmpv6_unreach(struct sk_buff *skb, int nhs, int type, unsigned int data_len);
#if IS_ENABLED(CONFIG_NF_NAT)void icmpv6_ndo_send(struct sk_buff *skb_in, u8 type, u8 code, __u32 info);#elsestatic inline void icmpv6_ndo_send(struct sk_buff *skb_in, u8 type, u8 code, __u32 info){ struct inet6_skb_parm parm = { 0 }; icmp6_send(skb_in, type, code, info, NULL, &parm);}#endif
#else
static inline void icmpv6_send(struct sk_buff *skb, u8 type, u8 code, __u32 info){}
static inline void icmpv6_ndo_send(struct sk_buff *skb, u8 type, u8 code, __u32 info){}#endif
extern int icmpv6_init(void);extern int icmpv6_err_convert(u8 type, u8 code, int *err);extern void icmpv6_cleanup(void);extern void icmpv6_param_prob_reason(struct sk_buff *skb, u8 code, int pos, enum skb_drop_reason reason);
struct flowi6;struct in6_addr;
void icmpv6_flow_init(const struct sock *sk, struct flowi6 *fl6, u8 type, const struct in6_addr *saddr, const struct in6_addr *daddr, int oif);
static inline void icmpv6_param_prob(struct sk_buff *skb, u8 code, int pos){ icmpv6_param_prob_reason(skb, code, pos, SKB_DROP_REASON_NOT_SPECIFIED);}
static inline bool icmpv6_is_err(int type){ switch (type) { case ICMPV6_DEST_UNREACH: case ICMPV6_PKT_TOOBIG: case ICMPV6_TIME_EXCEED: case ICMPV6_PARAMPROB: return true; }
return false;}
#endif