--- linux-2.6.16/include/linux/netfilter/nfnetlink_queue.h 2006-03-19 23:53:29.000000000 -0600 +++ linux-2.6.16.new/include/linux/netfilter/nfnetlink_queue.h 2006-03-27 14:16:47.000000000 -0600 @@ -41,6 +41,7 @@ NFQA_IFINDEX_PHYSOUTDEV, /* u_int32_t ifindex */ NFQA_HWADDR, /* nfqnl_msg_packet_hw */ NFQA_PAYLOAD, /* opaque data payload */ + NFQA_PRIORITY, /* u_int32_t skb->priority */ __NFQA_MAX }; --- linux-2.6.16/net/netfilter/nfnetlink_queue.c 2006-03-19 23:53:29.000000000 -0600 +++ linux-2.6.16.new/net/netfilter/nfnetlink_queue.c 2006-03-27 15:11:57.000000000 -0600 @@ -362,6 +362,7 @@ + NFA_SPACE(sizeof(u_int32_t)) /* ifindex */ #endif + NFA_SPACE(sizeof(u_int32_t)) /* mark */ + + NFA_SPACE(sizeof(u_int32_t)) /* priority */ + NFA_SPACE(sizeof(struct nfqnl_msg_packet_hw)) + NFA_SPACE(sizeof(struct nfqnl_msg_packet_timestamp)); @@ -484,6 +485,11 @@ NFA_PUT(skb, NFQA_MARK, sizeof(u_int32_t), &tmp_uint); } + if (entskb->priority) { + tmp_uint = htonl(entskb->priority); + NFA_PUT(skb, NFQA_PRIORITY, sizeof(u_int32_t), &tmp_uint); + } + if (indev && entskb->dev && entskb->dev->hard_header_parse) { struct nfqnl_msg_packet_hw phw; @@ -827,7 +833,11 @@ if (nfqa[NFQA_MARK-1]) entry->skb->nfmark = ntohl(*(u_int32_t *) NFA_DATA(nfqa[NFQA_MARK-1])); - + + if (nfqa[NFQA_PRIORITY-1]) + entry->skb->priority = ntohl(*(u_int32_t *) + NFA_DATA(nfqa[NFQA_PRIORITY-1])); + issue_verdict(entry, verdict); instance_put(queue); return 0;