Sto scrivendo il driver di rete ethernet per linux. Voglio ricevere pacchetti, modificarli e inviarli nuovamente. So come modificare il pacchetto nella funzione packet_interceptor
, ma come posso eliminare i pacchetti in entrata in questa funzione ??Come filtrare e intercettare i pacchetti Linux usando l'API net_dev_add()?
#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);
Hai provato con la mia soluzione? – Atle
Ciao @Atle, ho qualche problema con il mio computer in questi giorni. Grazie per la tua risposta, lo verificherò, non appena posso avviare il mio PC: D. Ma ricordo che non ti ho chiesto, ho provato questa soluzione, ma non ha funzionato. Lo vassoio di nuovo. –