Contributors: 17
| Author |
Tokens |
Token Proportion |
Commits |
Commit Proportion |
| Linus Torvalds (pre-git) |
144 |
35.04% |
11 |
31.43% |
| Jason A. Donenfeld |
67 |
16.30% |
3 |
8.57% |
| Hideaki Yoshifuji / 吉藤英明 |
37 |
9.00% |
1 |
2.86% |
| Matteo Croce |
34 |
8.27% |
1 |
2.86% |
| Menglong Dong |
27 |
6.57% |
1 |
2.86% |
| Eric Dumazet |
24 |
5.84% |
5 |
14.29% |
| Pravin B Shelar |
24 |
5.84% |
1 |
2.86% |
| Arnaldo Carvalho de Melo |
20 |
4.87% |
2 |
5.71% |
| Brian Haley |
16 |
3.89% |
1 |
2.86% |
| David S. Miller |
6 |
1.46% |
2 |
5.71% |
| Fernando Fernandez Mancera |
4 |
0.97% |
1 |
2.86% |
| David Howells |
2 |
0.49% |
1 |
2.86% |
| Jaswinder Singh Rajput |
2 |
0.49% |
1 |
2.86% |
| Greg Kroah-Hartman |
1 |
0.24% |
1 |
2.86% |
| Denis V. Lunev |
1 |
0.24% |
1 |
2.86% |
| Linus Torvalds |
1 |
0.24% |
1 |
2.86% |
| Guillaume Nault |
1 |
0.24% |
1 |
2.86% |
| Total |
411 |
|
35 |
|
/* 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);
#else
static 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