|
@@ -26,35 +26,6 @@
|
|
|
#include <net/transp_v6.h>
|
|
|
#include <net/ping.h>
|
|
|
|
|
|
-struct proto pingv6_prot = {
|
|
|
- .name = "PINGv6",
|
|
|
- .owner = THIS_MODULE,
|
|
|
- .init = ping_init_sock,
|
|
|
- .close = ping_close,
|
|
|
- .connect = ip6_datagram_connect_v6_only,
|
|
|
- .disconnect = udp_disconnect,
|
|
|
- .setsockopt = ipv6_setsockopt,
|
|
|
- .getsockopt = ipv6_getsockopt,
|
|
|
- .sendmsg = ping_v6_sendmsg,
|
|
|
- .recvmsg = ping_recvmsg,
|
|
|
- .bind = ping_bind,
|
|
|
- .backlog_rcv = ping_queue_rcv_skb,
|
|
|
- .hash = ping_hash,
|
|
|
- .unhash = ping_unhash,
|
|
|
- .get_port = ping_get_port,
|
|
|
- .obj_size = sizeof(struct raw6_sock),
|
|
|
-};
|
|
|
-EXPORT_SYMBOL_GPL(pingv6_prot);
|
|
|
-
|
|
|
-static struct inet_protosw pingv6_protosw = {
|
|
|
- .type = SOCK_DGRAM,
|
|
|
- .protocol = IPPROTO_ICMPV6,
|
|
|
- .prot = &pingv6_prot,
|
|
|
- .ops = &inet6_dgram_ops,
|
|
|
- .flags = INET_PROTOSW_REUSE,
|
|
|
-};
|
|
|
-
|
|
|
-
|
|
|
/* Compatibility glue so we can support IPv6 when it's compiled as a module */
|
|
|
static int dummy_ipv6_recv_error(struct sock *sk, struct msghdr *msg, int len,
|
|
|
int *addr_len)
|
|
@@ -77,7 +48,7 @@ static int dummy_ipv6_chk_addr(struct net *net, const struct in6_addr *addr,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-int ping_v6_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
|
|
|
+static int ping_v6_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
|
|
|
{
|
|
|
struct inet_sock *inet = inet_sk(sk);
|
|
|
struct ipv6_pinfo *np = inet6_sk(sk);
|
|
@@ -192,6 +163,34 @@ int ping_v6_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
|
|
|
return len;
|
|
|
}
|
|
|
|
|
|
+struct proto pingv6_prot = {
|
|
|
+ .name = "PINGv6",
|
|
|
+ .owner = THIS_MODULE,
|
|
|
+ .init = ping_init_sock,
|
|
|
+ .close = ping_close,
|
|
|
+ .connect = ip6_datagram_connect_v6_only,
|
|
|
+ .disconnect = udp_disconnect,
|
|
|
+ .setsockopt = ipv6_setsockopt,
|
|
|
+ .getsockopt = ipv6_getsockopt,
|
|
|
+ .sendmsg = ping_v6_sendmsg,
|
|
|
+ .recvmsg = ping_recvmsg,
|
|
|
+ .bind = ping_bind,
|
|
|
+ .backlog_rcv = ping_queue_rcv_skb,
|
|
|
+ .hash = ping_hash,
|
|
|
+ .unhash = ping_unhash,
|
|
|
+ .get_port = ping_get_port,
|
|
|
+ .obj_size = sizeof(struct raw6_sock),
|
|
|
+};
|
|
|
+EXPORT_SYMBOL_GPL(pingv6_prot);
|
|
|
+
|
|
|
+static struct inet_protosw pingv6_protosw = {
|
|
|
+ .type = SOCK_DGRAM,
|
|
|
+ .protocol = IPPROTO_ICMPV6,
|
|
|
+ .prot = &pingv6_prot,
|
|
|
+ .ops = &inet6_dgram_ops,
|
|
|
+ .flags = INET_PROTOSW_REUSE,
|
|
|
+};
|
|
|
+
|
|
|
#ifdef CONFIG_PROC_FS
|
|
|
static void *ping_v6_seq_start(struct seq_file *seq, loff_t *pos)
|
|
|
{
|