Great,problem has been solved as following:
Code:
new_skb = skb_copy(old_skb, GFP_ATOMIC);
.
.
modification process on the new_skb
.
.
if(new_skb){
kfree_skb(*skb);
*skb = new_skb
return NF_ACCEPT;
}
Basically, the original *skb points to the new_skb and return NF_ACCEPT. I use another hook in NF_IP_LOACAL_IN to detect the modified packets, so it works.
However I hope there are further discussion on how to generate and insert more than one skb into list for delivery?