Я пишу какой-то модуль ядра с хуком netfilter. Функция крючка:
uint main_hook(uint hooknum,
struct sk_buff *skb,
const struct net_device *in,
const struct net_device *out,
int (*okfn)(struct sk_buff *) )
{
struct iphdr *ip;
struct udphdr *udp;
if (skb->protocol == htons(ETH_P_IP)){
ip = (struct iphdr *)skb->data;//skb_network_header(skb);
if (ip->version == 4 && ip->protocol == IPPROTO_UDP){
udp = (struct udphdr *)(skb->data + sizeof(struct iphdr));
printk("[udp-catch] packet from %d to %d\n", ntohs(udp->source), ntohs(udp->dest));
return NF_QUEUE;
}
}
return NF_ACCEPT;
}
Можно ли указать номер очереди? И если нет, то как я могу найти этот номер?
struct nfq_q_handle * nfq_create_queue (struct nfq_handle * h, u_int16_t num, nfq_callback * cb, void * data)
Цитата из netfilter.org: Создает новый дескриптор очереди и возвращает его. Новая очередь идентифицируется числом, а обратный вызов, указанный cb, будет вызываться для каждого поставленного в очередь пакета. Аргумент данных будет передан обратному вызову без изменений. Если запись в очереди с идентификатором num уже существует, эта функция вернет ошибку, а существующая запись не изменится. - person someuser   schedule 13.03.2013