.type = SOCK_DGRAM,
.protocol = IPPROTO_ICMP,
.prot = &ping_prot,
.ops = &inet_dgram_ops,
.flags = INET_PROTOSW_REUSE,
},
struct proto ping_prot = {
.name =
"PING",
.owner =
THIS_MODULE,
.init =
ping_init_sock,
.close =
ping_close,
.connect =
ip4_datagram_connect,
.disconnect =
udp_disconnect,
.setsockopt =
ip_setsockopt,
.getsockopt =
ip_getsockopt,
.sendmsg =
ping_v4_sendmsg,
.recvmsg =
ping_recvmsg,
.bind =
ping_bind,
.backlog_rcv =
ping_queue_rcv_skb,
.release_cb =
ip4_datagram_release_cb,
.hash =
ping_hash,
.unhash =
ping_unhash,
.get_port =
ping_get_port,
.obj_size =
sizeof(struct inet_sock),
};
const struct proto_ops inet_dgram_ops = {
.family
= PF_INET,
.owner
= THIS_MODULE,
.release
= inet_release,
.bind = inet_bind,
.connect
= inet_dgram_connect,
.socketpair
= sock_no_socketpair,
.accept
= sock_no_accept,
.getname
= inet_getname,
.poll = udp_poll,
.ioctl
= inet_ioctl,
.listen
= sock_no_listen,
.shutdown
= inet_shutdown,
.setsockopt
= sock_common_setsockopt,
.getsockopt
= sock_common_getsockopt,
.sendmsg
= inet_sendmsg,
.recvmsg
= inet_recvmsg,
.mmap = sock_no_mmap,
.sendpage
= inet_sendpage,
.set_peek_off
= sk_set_peek_off,
#ifdef CONFIG_COMPAT
.compat_setsockopt = compat_sock_common_setsockopt,
.compat_getsockopt = compat_sock_common_getsockopt,
.compat_ioctl
= inet_compat_ioctl,
#endif
};