Иерархия выглядит следующим образом
struct inet_protosw (интернет-протоколы) содержит указатель на прото-член struct (протокол)
struct sock имеет указатель на прото-член struct (протокол)
struct sock имеет член к элементу struct sk_buff_head
struct sk_buff_head имеет два указателя на элементы структуры для sk_buff (один вызывается следующим, другой вызывается prev)
struct sk_buff содержит указатель на член структуры net_device.
Я не думаю, что вы регистрируете net_device напрямую в inet_protosw.
Сначала inet_init
регистрирует встроенные сетевые протоколы, вызывая proto_register
, затем вызывает inet_register_protosw
для инициализации протоколов, затем инициализирует различные модули inet (ip, tcp, icmp и т. Д.).
Интерфейс, отвечающий за связывание протоколов и устройства, позже имеет register_netdevice
и unregister_netdevice
, которые делают то же, что и звук, а также регистрируют и отменяют регистрацию сетевых устройств в ядре. Чтобы отправить пакет из протокола через устройство, используйте dev_queue_xmit
, а netif_rx
принимает пакетные передачи от уровня устройства к сетевому уровню, затем он вызывает netif_rx_schedule
, чтобы запланировать пакет для дальнейшей обработки.
Ресурсы и документация по организации / рабочему процессу включают в себя: