.type = SOCK_RAW,
.protocol = IPPROTO_IP, /* wild card */
.prot = &raw_prot,
.ops = &inet_sockraw_ops,
.flags = INET_PROTOSW_REUSE,
}
struct proto raw_prot = {
.name = "RAW",
.owner
= THIS_MODULE,
.close
= raw_close,
.destroy
= raw_destroy,
.connect
= ip4_datagram_connect,
.disconnect
= udp_disconnect,
.ioctl
= raw_ioctl,
.init = raw_init,
.setsockopt
= raw_setsockopt,
.getsockopt
= raw_getsockopt,
.sendmsg
= raw_sendmsg,
.recvmsg
= raw_recvmsg,
.bind = raw_bind,
.backlog_rcv
= raw_rcv_skb,
.release_cb
= ip4_datagram_release_cb,
.hash = raw_hash_sk,
.unhash
= raw_unhash_sk,
.obj_size
= sizeof(struct raw_sock),
.h.raw_hash
= &raw_v4_hashinfo,
#ifdef CONFIG_COMPAT
.compat_setsockopt = compat_raw_setsockopt,
.compat_getsockopt = compat_raw_getsockopt,
.compat_ioctl
= compat_raw_ioctl,
#endif
};
/*
* For SOCK_RAW sockets; should be the same as inet_dgram_ops but without
* udp_poll
*/
static const struct proto_ops inet_sockraw_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 = datagram_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,
#ifdef CONFIG_COMPAT
.compat_setsockopt = compat_sock_common_setsockopt,
.compat_getsockopt = compat_sock_common_getsockopt,
.compat_ioctl
= inet_compat_ioctl,
#endif
};