// inet协议族默认支持的协议类型
// 在inet_init中,通过inet_register_protosw注册到inetsw邻接表
1.1 static struct inet_protosw inetsw_array[] =
{
//流类型
{
.type = SOCK_STREAM,
.protocol = IPPROTO_TCP,
.prot = &tcp_prot,
.ops = &inet_stream_ops,
.no_check = 0,
.flags = INET_PROTOSW_PERMANENT |
INET_PROTOSW_ICSK,
},
//数据报类型,UDP, ICMP
{
.type = SOCK_DGRAM,
.protocol = IPPROTO_UDP,
.prot = &udp_prot,
.ops = &inet_dgram_ops,
.no_check = UDP_CSUM_DEFAULT,
.flags = INET_PROTOSW_PERMANENT,
},
{
.type = SOCK_DGRAM,
.protocol = IPPROTO_ICMP,
.prot = &ping_prot,
.ops = &inet_dgram_ops,
.no_check = UDP_CSUM_DEFAULT,
.flags = INET_PROTOSW_REUSE,
},
//raw类型
{
.type = SOCK_RAW,
.protocol = IPPROTO_IP, /* wild card */
.prot = &raw_prot,
.ops = &inet_sockraw_ops,
.no_check = UDP_CSUM_DEFAULT,
.flags = INET_PROTOSW_REUSE,
}
};
// 注:
// struct socket - general BSD socket
// struct sock - network layer representation of sockets
// struct inet_sock - representation of INET sockets
1.2 struct socket, struct sock, struct inet_sock
struct socket {
..
//(file->private_data指向socket)
struct file *file;
struct sock *sk;
..
}
struct inet_sock {
struct sock sk;
...
}