[LUGOS-PROG] select in kernel thread

Simon Mavsar simon.mavsar at hermes.si
Mon Oct 10 13:39:28 CEST 2005


Zivjo,

Ni ravno select, ampak ce rabis asinhrono branje network interface-a si
lahko sam napisis svoj 'select'

Nekako takole (spodnji primer asinhrono bere 'pakete' na npr.: 'loopback
inteface-u') :

#define __KERNEL__
#define MODULE
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/netdevice.h>
#include <linux/netfilter.h>
#include <linux/netfilter_ipv4.h>

static struct nf_hook_ops nfho;

// Ime inteface-a na katerem hoces brati...
static char *drop_if = "lo"; // 'loopback' v nasem primeru 

// Prestrezna funkcija...
unsigned int hook_func(unsigned int hooknum,
                         struct sk_buff **skb,
                         const struct net_device *in,
                         const struct net_device *out,
                         int (*okfn)(struct sk_buff *)) {

    if (strcmp(in->name, drop_if) == 0) {
        printk("Do something with packet on %s...\n", drop_if);

        //
        // TODO: Naredi zeljeno z paketom...
        //

        return NF_DROP; // ce vrnes NF_DROP vrednost ta paket sploh ne bo  
                        // prisel iz netstack-a -> za 'user space' nevidljiv
    } else {
        return NF_ACCEPT; // poslji ga naprej po netstack-u do 'user spacea'
    }
}

int init_module() {

    nfho.hook     = hook_func;         // nastavimo na naso funkcijo
    nfho.hooknum  = NF_IP_PRE_ROUTING;
    nfho.pf       = PF_INET;
    nfho.priority = NF_IP_PRI_FIRST;   // ... na prvo mesto 
  
    nf_register_hook(&nfho);  // registriramo naso funkcijo
    
    return 0;
}
	
/* Cleanup routine */
void cleanup_module()
{
    nf_unregister_hook(&nfho);
}


-----Original Message-----
From: lugos-prog-bounces+simon.mavsar=hermes.si at lugos.si
[mailto:lugos-prog-bounces+simon.mavsar=hermes.si at lugos.si] On Behalf Of
Ciglic Andrej ITWEV6
Sent: 10. oktober 2005 12:03
To: lugos-prog at lugos.si
Subject: [LUGOS-PROG] select in kernel thread

Zdravo,

stric googli mi ne ponudi nič pametnega.

Imam thread v kernelu in več bindanih (socket->ops->bind(... ) socketov. Ali
mogoče kdo ve kako se izvede select v kernel threadu (driver module)? Kje
najdem kakšen primer?

V naprej Tnx.

Andrej
_______________________________________________
lugos-prog mailing list
lugos-prog at lugos.si
http://liste2.lugos.si/cgi-bin/mailman/listinfo/lugos-prog


More information about the lugos-prog mailing list