static int packet_create(struct socket *sock, int protocol)
{
.......................
1025 if (proto) {
1026 po->prot_hook.type = proto;
1027 dev_add_pack(&po->prot_hook);
1028 sock_hold(sk);
1029 po->running = 1;
1030 }
..............................
}
上面是 packet_create的code 我看到他在上面有一行 dev_add_pack 不就是把
packet_type 註冊到 ptype_base <- 此為L4 layer 的接收packet function 的list
而我又在 packet_do_bind function 中看到 也有dev_add_pack
static int packet_do_bind(struct sock *sk, struct net_device *dev, __be16 protocol)
{
.......................
890 if (dev) {
891 if (dev->flags&IFF_UP) {
892 dev_add_pack(&po->prot_hook);
893 sock_hold(sk);
894 po->running = 1;
895 } else {
896 sk->sk_err = ENETDOWN;
897 if (!sock_flag(sk, SOCK_DEAD))
898 sk->sk_error_report(sk);
899 }
900 } else {
901 dev_add_pack(&po->prot_hook);
902 sock_hold(sk);
903 po->running = 1;
904 }
..........................
}
現在我所要問的問題是 : 在 packet socket create 中 已經有一次 dev_add_pack()
而為什麼 在我執行 bind socket 時 也要 dev_add_pack()
dev_add_pack() 不是將 L4 rcv function 註冊到 ptype_base 中嗎
還是有其他的用意
感恩~~~