11da177e4SLinus Torvalds #ifndef _LINUX_ICMPV6_H 21da177e4SLinus Torvalds #define _LINUX_ICMPV6_H 31da177e4SLinus Torvalds 4cc70ab26SArnaldo Carvalho de Melo #include <linux/skbuff.h> 5607ca46eSDavid Howells #include <uapi/linux/icmpv6.h> 6cc70ab26SArnaldo Carvalho de Melo 7cc70ab26SArnaldo Carvalho de Melo static inline struct icmp6hdr *icmp6_hdr(const struct sk_buff *skb) 8cc70ab26SArnaldo Carvalho de Melo { 99c70220bSArnaldo Carvalho de Melo return (struct icmp6hdr *)skb_transport_header(skb); 10cc70ab26SArnaldo Carvalho de Melo } 111da177e4SLinus Torvalds 121da177e4SLinus Torvalds #include <linux/netdevice.h> 131da177e4SLinus Torvalds 145f5624cfSPravin B Shelar #if IS_ENABLED(CONFIG_IPV6) 155f5624cfSPravin B Shelar extern void icmpv6_send(struct sk_buff *skb, u8 type, u8 code, __u32 info); 165f5624cfSPravin B Shelar 17b1cadc1aSEric Dumazet typedef void ip6_icmp_send_t(struct sk_buff *skb, u8 type, u8 code, __u32 info, 18b1cadc1aSEric Dumazet const struct in6_addr *force_saddr); 195f5624cfSPravin B Shelar extern int inet6_register_icmp_sender(ip6_icmp_send_t *fn); 205f5624cfSPravin B Shelar extern int inet6_unregister_icmp_sender(ip6_icmp_send_t *fn); 21*20e1954fSEric Dumazet int ip6_err_gen_icmpv6_unreach(struct sk_buff *skb, int nhs, int type, 22*20e1954fSEric Dumazet unsigned int data_len); 235f5624cfSPravin B Shelar 245f5624cfSPravin B Shelar #else 255f5624cfSPravin B Shelar 265f5624cfSPravin B Shelar static inline void icmpv6_send(struct sk_buff *skb, 275f5624cfSPravin B Shelar u8 type, u8 code, __u32 info) 285f5624cfSPravin B Shelar { 295f5624cfSPravin B Shelar 305f5624cfSPravin B Shelar } 315f5624cfSPravin B Shelar #endif 321da177e4SLinus Torvalds 339b0f976fSDenis V. Lunev extern int icmpv6_init(void); 34d5fdd6baSBrian Haley extern int icmpv6_err_convert(u8 type, u8 code, 351da177e4SLinus Torvalds int *err); 361da177e4SLinus Torvalds extern void icmpv6_cleanup(void); 371da177e4SLinus Torvalds extern void icmpv6_param_prob(struct sk_buff *skb, 38d5fdd6baSBrian Haley u8 code, int pos); 3995e41e93SYOSHIFUJI Hideaki 404c9483b2SDavid S. Miller struct flowi6; 41f59d4389SDavid S. Miller struct in6_addr; 4295e41e93SYOSHIFUJI Hideaki extern void icmpv6_flow_init(struct sock *sk, 434c9483b2SDavid S. Miller struct flowi6 *fl6, 4495e41e93SYOSHIFUJI Hideaki u8 type, 4595e41e93SYOSHIFUJI Hideaki const struct in6_addr *saddr, 4695e41e93SYOSHIFUJI Hideaki const struct in6_addr *daddr, 4795e41e93SYOSHIFUJI Hideaki int oif); 481da177e4SLinus Torvalds #endif 49