{ 

.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
 };