Print This Page

Ajout de romereal

Ajout de romereal

Romereal est un substitut d'ethereal proposé dans la liste des sources du driver re865x. Il n'est ni compilé, ni accessible en mode utilisateur dans le firmware du KWGR614. Voici une procécure permettant de
  • valider sa compilation dans le noyau,
  • créer les appels système permettant d'y accéder
  • mapper les appels systèmes dans le niveau utilisateur
  • insérer ces appels systèmes dans le module dni de boa
  • appeler le tout depuis une page html de l'interface.

1-valider la compilation de romereal dans le noyau

Le plus rapide: éditer le fichier linux-2.4.x/.config et y insérer la ligne:
CONFIG_RTL865X_ROMEREAL=y

2-créer les appels système pour accéder à romereal

Il faut d'abord attribuer un identifiant aux appels ioctl correspondant à nos nouvelles fonctions. Cela se fait en ajoutant au fichier linux-2.4.x/include/asm-mips/rtl865x/re865x.h les lignes suivantes à la suite des déclarations du même type:
//begin hvdp
#define RTL8651_IOCTL_ROMEREALINIT              2800
#define RTL8651_IOCTL_ROMEREALFILTER            2801
#define RTL8651_IOCTL_ROMEREALENABLE            2802
//end hvdp

Il faut ensuite ajouter dans la fonction fonction re865x_ioctl  (struct net_device *dev, struct ifreq *rq, int cmd) du fichier linux-2.4.x/drivers/net/re865x/re_core.c le mappage suivant:

// begin hvdp

                case RTL8651_IOCTL_ROMEREALINIT:
                {
                        printk("romereal init\n");
                        pU32=(uint32 *)args[1];
                        ret=rtl8651_romerealInit(&pU32[0],pU32[1],pU32[2] );
                        pRet = (int32 *)args[3];
                        *pRet = ret;
                        break;
                }
                case RTL8651_IOCTL_ROMEREALFILTER:
                {
                        printk("romereal filter\n");
                        pU32=(uint32 *)args[1];
                        ret=rtl8651_romerealFilter( pU32[0]);
                        pRet = (int32 *)args[3];
                        *pRet = ret;
                        break;
                }
                case RTL8651_IOCTL_ROMEREALENABLE:
                {
                        printk("romereal enable\n");
                        pU32=(uint32 *)args[1];
                        ret=rtl8651_romerealEnable( pU32[0]);
                        pRet = (int32 *)args[3]
                        *pRet = ret;
                        break;
                }
// end hvdp

3- mapper les appels système au niveau utilisateur