Зачем ты изобретаешь свою структуру, это бред. Sk_buff сделан специально чтоб не производить копирование памяти при добавлении заголовков. Для отправки пакета не нужно выставлять заголовки transport_header; mac_header, нужен только network. И еще, skb пакет при отправке освобождается. Ошибок вагон, от отсутствия проверок выделения памяти до отсутствия понимания как работать с skb. Я прикрипил работающий код, воббщем кури его пока не поймешь собирать просто make, запуск insmod skb_send.ko ip=0x0A0A0AFF где ip это адрес удаленной машины в hex ( сетевой броадкаст указуй ). Проверить отправку можешь запустив wireshark.
Хм терь по пунктам: 1. Ehernet заголовок заполняет отправитель, а не сетевой адаптер. 2. Указатели выставляются так Код (Text): //когда skb->data указывает на iphdr в данных skb skb_set_network_header ( skb, 0); //аналогично для транспортного и канального уровня //когда skb->data указывает на ethernet skb_set_mac_header (skb, 0); //когда skb->data указывает на транспортный skb_set_transport_header(skb,0); Они должны указывать на память в skb->data. 3. Чтоб система не висла намертво нужно всегд обрабатывать ошибки, и мне кажется она у тебя виснет не на dev_queue_xmit а на kfree_skb И еще пользуйся выводом отладочной инфы, выводи сетевые интерфейсы через которые отправляешь, каменть dev_queue_xmit чтоб проверить на ней ли валится и т.п.
ПОвторю вопрос. Как узнать точный размер отсылаемых(или принимаемых данных в буфере сокета) strlen не помогает )