Linux için ethernet ağ sürücüsünü yazıyorum. Paketleri almak, düzenlemek ve yeniden göndermek istiyorum. Paketin packet_interceptor
işlevinde nasıl düzenleneceğini biliyorum, ancak bu işlevdeki gelen paketleri nasıl bırakabilirim ??Linux paketlerini net_dev_add() API kullanarak nasıl filtreleyebilirsiniz?
#include <linux/netdevice.h>
#include <linux/skbuff.h>
#include <linux/ip.h>
#include <net/sock.h>
struct packet_type my_proto;
int packet_interceptor(struct sk_buff *skb,
struct net_device *dev,
struct packet_type *pt,
struct net_device *orig_dev) {
// I dont want certain packets go to upper in net_devices for further processing.
// How can I drop sk_buff here?!
return 0;
}
static int hello_init(void) {
printk(KERN_INFO "Hello, world!\n");
my_proto.type = htons(ETH_P_ALL);
my_proto.dev = NULL;
my_proto.func = packet_interceptor;
dev_add_pack(&my_proto);
return 0;
}
static void hello_exit(void) {
dev_remove_pack(&my_proto);
printk(KERN_INFO "Bye, world\n");
}
module_init(hello_init);
module_exit(hello_exit);
Çözümümle test ettiniz mi? – Atle
Merhaba @Atle, bugünlerde bilgisayarımda bir sorunum var. Cevabınız için teşekkürler, bilgisayarımı başlattığım anda test edeceğim: D. Ama ben sana soruyorum, bu çözümü denedim, ama işe yaramadı. Onu tekrar toplayacağım. –