网络驱动:数据结构与数据包处理
1. 以太网设备的设置与拆卸
1.1 ether_ifattach 函数
ether_ifattach函数用于为以太网设备设置ifnet结构。该函数接收一个ifnet结构ifp和一个链路层地址lla,并对ifp进行一系列设置:
#ifdef VIMAGE ifp->if_reassign = ether_reassign; #endif if (ifp->if_baudrate == 0) ifp->if_baudrate = IF_Mbps(10); ifp->if_broadcastaddr = etherbroadcastaddr; ifa = ifp->if_addr; KASSERT(ifa != NULL, ("%s: no lladdr!\n", __func__)); sdl = (struct sockaddr_dl *)ifa->ifa_addr; sdl->sdl_type = IFT_ETHER; sdl->sdl_alen = ifp->if_addrlen; bcopy(lla, LLADDR(sdl), ifp->if_addrlen); bpfattach(ifp, DLT_EN10MB, ETHER_HDR_LEN);