Forum Linux.noyau Problème avec le Module tun

Posté par  .
Étiquettes : aucune
0
1
avr.
2005
Bonjour j'ai un noyau 2.6.8.1 patché avec la mobilité ipv6 et j'ai besoin du module tun que je n'arrive évidement pas a faire marcher.
La compilation se passe très bien. Mais au moment de lancer le module avec un "modprobe", j'ai le droit a cette erreur :

tun: disagrees about version of symbol skb_dequeue
tun: Unknown symbol skb_dequeue
tun: disagrees about version of symbol dev_alloc_name
tun: Unknown symbol dev_alloc_name
tun: disagrees about version of symbol skb_copy_datagram_iovec
tun: Unknown symbol skb_copy_datagram_iovec
tun: disagrees about version of symbol __dev_get_by_name
....
(bon j'en passe un peu )
....
tun: Unknown symbol unregister_netdevice
tun: disagrees about version of symbol __kfree_skb
tun: Unknown symbol __kfree_skb
tun: disagrees about version of symbol register_netdevice
tun: Unknown symbol register_netdevice

J'ai également essayé de la compilation en dur sans plus de succès.
Je remercie déjà tout le monde pour votre aide. Car la je sèche vraiment...
  • # un petit pas ...

    Posté par  . Évalué à 2.

    j'suis pas tres bien reveiller mais voila ce que je pense de ton soucis.
    Les modules (.ko) sont des programmes qui sont compilé dans un format specifique et ne sont linké qu'au moment du chargement du module par un insmod ou modprobe.
    En l'occurence comme tu le dis la compilation est OK, et au chargement tu as des erreurs donc le linkage echoue.
    En general c'est du au changement de prototype de fonction entre le moment ou le module a ete ecris et le kernel sur le quel tu essaye de l'integrer.

    tun: disagrees about version of symbol skb_dequeue
    tun: Unknown symbol skb_dequeue

    viens de
    #include <linux/skbuff.h>

    je pense que l'ipV6 demande que le module tun soit patché a moins que ce soit le kernel.
    • [^] # Re: un petit pas ...

      Posté par  . Évalué à 0.

      Ce que je ne comprend pas c que le module tun ainsi que l'ipv6 est intégrée dans le noyau d'origine. Et j'ai regardé dans le patch que j'ai installé (mipv6) il fait bien des includes de skbuff.h mais ne le modifie nul part. Je ne vois pas trop pourquoi il aurait une influence sur le bon fonctionnement du module tun.
      Enfin il faut bien avouer que je suis très loin d'être un pro du domaine dite moi si je me trompe.
      • [^] # Re: un petit pas ...

        Posté par  . Évalué à 2.

        la serie 2.6 du kernel est encore en developpement, la derniere version stable est la 2.6.11.6 (www.kernel.org), il est possible que dans la 2.6.8.1 l'ipv6 ne soit pas encore implementé dans tous les modules.
        Si tu le peut la demarche a suivre est :
        -passer en derniere version de kernel
        -refaire l'essai
        -si le probleme persiste dans le fichiers tun.c tu as le mail du mainteneur du module, lui ecrire en lui detaillant les messages d'erreurs.
        • [^] # Re: un petit pas ...

          Posté par  . Évalué à 0.

          Ben j'avais penser à changer le noyau mais le patch pour la mobilité IPv6 n'existe que pour le noyau 2.6.8.1 et de toute manière il y a une convention dans le projet européen ,pour lequel je travail, qui veut que j'utilise ce noyau et pas un autre.
          Bref faut que je trouve une solution quitte a devoir recoder ou faire mon propre patch (ce qui me tente pas trop je suis pas sur d'avoir le niveau pour faire un truc correct).
  • # Compilation des modules ?

    Posté par  . Évalué à 2.

    Tu as bien fait un "make modules ; make modules_install" après avoir patché et
    recompilé le noyau ?

    Tu indiques que ça ne marche pas si tu compiles le module "tun" en dur dans
    le noyau, qu'entend-tu par "sans plus de succès" ?
    • [^] # Re: Compilation des modules ?

      Posté par  . Évalué à 1.

      Tu as bien fait un "make modules ; make modules_install" après avoir patché et
      recompilé le noyau ?


      oui je l'ai fait bien sur.

      Tu indiques que ça ne marche pas si tu compiles le module "tun" en dur dans
      le noyau, qu'entend-tu par "sans plus de succès" ?


      Et bien si je lance mon application qui utilise le module (une implémentation d'UDLR )
      j'ai le même problème il ne trouve pas les fonction qu'il a besoin. Tu me pose juste un petit doute mais si je me souvient bien je pouvais lire la même chose dans dmesg.
      • [^] # Re: Compilation des modules ?

        Posté par  . Évalué à 2.

        Tu peux essayer le programme suivant ? (ps: je suis désolé pour la longueur du post, j'espère que ça ne gênera personne).

        Normalement il doit t'allouer un device "tun". Je l'ai fait à l'arrache mais ça devrait marcher.



        #include <unistd.h>
        #include <fcntl.h>
        #include <stdlib.h>
        #include <stdio.h>
        #include <string.h>
        #include <syslog.h>
        #include <sys/ioctl.h>
        #include <errno.h>

        #include <sys/socket.h>
        #include <linux/if.h>
        #include <linux/if_tun.h>

        int tun_open(char *dev)
        {
        struct ifreq ifr;
        int fd, err;

        printf("Requesting new TUN device...\n");

        if ((fd = open("/dev/net/tun", O_RDWR)) < 0) {
        perror("open");
        return(-1);
        }

        memset(&ifr, 0, sizeof(ifr));
        ifr.ifr_flags = IFF_TUN | IFF_NO_PI;

        if ((err = ioctl(fd, TUNSETIFF, (void *)&ifr)) < 0) {
        close(fd);
        return(err);
        }

        strcpy(dev, ifr.ifr_name);
        return fd;
        }

        int main(void)
        {
        char dev[256];
        int fd;

        *dev = 0;

        if ((fd = tun_open(dev)) == -1) {
        fprintf(stderr,"Unable to obtain tunnel interface.\n");
        return(-1);
        }

        printf("Tunnel device : %s\n",dev);
        sleep(15);

        close(fd);
        return(0);
        }

        • [^] # Re: Compilation des modules ?

          Posté par  . Évalué à 1.

          Et bien il me répond : No such device...
          C pas faute de lui avoir fait un "mknod /dev/tun c 10 200" au passage.
          Sinon pour créé les interface TUN/TAP j'essayais avec "tunctl" du paquet debian "uml-utilises" ça doit revenir à peu près au même que ton programme.

          A noter que j'ai réussit à le mettre en place sur une deuxième machine (bien sur il me le faut sur les deux sinon j'aurais pu arrêter la ). J'ai comparé les configurations des deux noyaux j'ai pas vu de différence fondamentale qui expliquerai la différence de fonctionnement.
          • [^] # Re: Compilation des modules ?

            Posté par  . Évalué à 2.


            "mknod /dev/tun c 10 200"


            Désolé si j'ai l'air de te prendre pour un idiot avec cette réponse, c'est pas voulu
            c'est juste que je préfère lever un doute: tu as créé /dev/tun ou /dev/net/tun avec
            mknod ? C'est /dev/net/tun normalement.

            Pour tunctl, tu as raison, ça fait l'équivalent (en plus propre que mon programme bien sûr ;)
            • [^] # Re: Compilation des modules ?

              Posté par  . Évalué à 0.

              Excuse j'ai tapé trop vite j'ai bien fait "/dev/net/tun".


              Désolé si j'ai l'air de te prendre pour un idiot

              Ne le soit pas, mieux vaut poser la question que de chercher une erreur pendant une heure alors qu'il n'y a pas de problème.
              A mon sens aucune question n'est vraiment inutile (du moment qu'il s'agit d'une vrai interrogation pas de rhétorique) au pire elle montre que la première explication du problème pouvais prêter à confusion.
              • [^] # Re: Compilation des modules ?

                Posté par  . Évalué à 2.

                C'est un truc de fou ça... Dans ta config noyau tu as donc "CONFIG_TUN=y" ?

                Voilà ce que j'ai pour un 2.6.8.1 au niveau réseau, avec TUN/TAP fonctionnel.
                (oublie la partie MPLS, c'est un patch que j'ai appliqué, il n'est pas dans le
                noyau vanilla). J'ai viré tout ce qui concerne Netfilter.

                #
                # Networking options
                #
                CONFIG_PACKET=y
                CONFIG_MPLS=y
                CONFIG_MPLS_TUNNEL=y
                CONFIG_PACKET_MMAP=y
                # CONFIG_NETLINK_DEV is not set
                CONFIG_UNIX=y
                CONFIG_NET_KEY=y
                CONFIG_INET=y
                CONFIG_IP_MULTICAST=y
                # CONFIG_IP_ADVANCED_ROUTER is not set
                # CONFIG_IP_PNP is not set
                CONFIG_IP_MPLS=y
                CONFIG_NET_IPIP=y
                CONFIG_NET_IPGRE=y
                CONFIG_NET_IPGRE_BROADCAST=y
                # CONFIG_IP_MROUTE is not set
                # CONFIG_ARPD is not set
                CONFIG_SYN_COOKIES=y
                # CONFIG_INET_AH is not set
                # CONFIG_INET_ESP is not set
                # CONFIG_INET_IPCOMP is not set

                #
                # IP: Virtual Server Configuration
                #
                # CONFIG_IP_VS is not set
                CONFIG_IPV6=y
                CONFIG_INET6_MPLS=y
                CONFIG_IPV6_PRIVACY=y
                # CONFIG_INET6_AH is not set
                # CONFIG_INET6_ESP is not set
                # CONFIG_INET6_IPCOMP is not set
                # CONFIG_IPV6_TUNNEL is not set
                CONFIG_NETFILTER=y
                # CONFIG_NETFILTER_DEBUG is not set
                CONFIG_BRIDGE_NETFILTER=y

                [...]

                #
                # Network testing
                #
                # CONFIG_NET_PKTGEN is not set
                # CONFIG_NETPOLL is not set
                # CONFIG_NET_POLL_CONTROLLER is not set
                # CONFIG_HAMRADIO is not set
                # CONFIG_IRDA is not set
                # CONFIG_BT is not set
                CONFIG_NETDEVICES=y
                # CONFIG_DUMMY is not set
                # CONFIG_BONDING is not set
                # CONFIG_EQUALIZER is not set
                CONFIG_TUN=y

                Tu as quoi toi ?
                • [^] # Re: Compilation des modules ?

                  Posté par  . Évalué à 0.

                  Et bien j'ai un peu prés la même chose. j'ai essayé pas mal de noyau différent mais voila la dernière :


                  #
                  # Networking options
                  #
                  CONFIG_PACKET=y
                  CONFIG_PACKET_MMAP=y
                  CONFIG_NETLINK_DEV=y
                  CONFIG_UNIX=y
                  CONFIG_NET_KEY=y
                  CONFIG_INET=y
                  CONFIG_IP_MULTICAST=y
                  CONFIG_IP_ADVANCED_ROUTER=y
                  CONFIG_IP_MULTIPLE_TABLES=y
                  CONFIG_IP_ROUTE_FWMARK=y
                  CONFIG_IP_ROUTE_NAT=y
                  CONFIG_IP_ROUTE_MULTIPATH=y
                  CONFIG_IP_ROUTE_TOS=y
                  CONFIG_IP_ROUTE_VERBOSE=y
                  CONFIG_IP_PNP=y
                  CONFIG_IP_PNP_DHCP=y
                  CONFIG_IP_PNP_BOOTP=y
                  CONFIG_IP_PNP_RARP=y
                  CONFIG_NET_IPIP=y
                  CONFIG_NET_IPGRE=y
                  CONFIG_NET_IPGRE_BROADCAST=y
                  CONFIG_IP_MROUTE=y
                  CONFIG_IP_PIMSM_V1=y
                  CONFIG_IP_PIMSM_V2=y
                  CONFIG_ARPD=y
                  CONFIG_SYN_COOKIES=y
                  CONFIG_INET_AH=y
                  CONFIG_INET_ESP=y
                  CONFIG_INET_IPCOMP=y

                  #
                  # IP: Virtual Server Configuration
                  #
                  # CONFIG_IP_VS is not set
                  CONFIG_IPV6=y
                  CONFIG_IPV6_PRIVACY=y
                  CONFIG_INET6_AH=y
                  CONFIG_INET6_ESP=y
                  CONFIG_INET6_IPCOMP=y
                  CONFIG_IPV6_TUNNEL=y
                  CONFIG_IPV6_ADVANCED_ROUTER=y
                  CONFIG_IPV6_SUBTREES=y
                  CONFIG_IPV6_MULTIPLE_TABLES=y
                  CONFIG_IPV6_MIP6=y
                  CONFIG_IPV6_MIP6_DEBUG=y
                  CONFIG_NETFILTER=y
                  CONFIG_NETFILTER_DEBUG=y
                  CONFIG_BRIDGE_NETFILTER=y



                  #
                  # SCTP Configuration (EXPERIMENTAL)
                  #
                  CONFIG_IP_SCTP=m
                  CONFIG_SCTP_DBG_MSG=y
                  CONFIG_SCTP_DBG_OBJCNT=y
                  # CONFIG_SCTP_HMAC_NONE is not set
                  # CONFIG_SCTP_HMAC_SHA1 is not set
                  CONFIG_SCTP_HMAC_MD5=y
                  # CONFIG_ATM is not set
                  CONFIG_BRIDGE=y
                  # CONFIG_VLAN_8021Q is not set
                  # CONFIG_DECNET is not set
                  # CONFIG_LLC2 is not set
                  # CONFIG_IPX is not set
                  # CONFIG_ATALK is not set
                  # CONFIG_X25 is not set
                  # CONFIG_LAPB is not set
                  # CONFIG_NET_DIVERT is not set
                  # CONFIG_ECONET is not set
                  # CONFIG_WAN_ROUTER is not set
                  # CONFIG_NET_HW_FLOWCONTROL is not set

                  #
                  # QoS and/or fair queueing
                  #
                  # CONFIG_NET_SCHED is not set
                  # CONFIG_NET_CLS_ROUTE is not set

                  #
                  # Network testing
                  #
                  CONFIG_NET_PKTGEN=y
                  # CONFIG_NETPOLL is not set
                  # CONFIG_NET_POLL_CONTROLLER is not set
                  # CONFIG_HAMRADIO is not set
                  # CONFIG_IRDA is not set
                  # CONFIG_BT is not set
                  CONFIG_NETDEVICES=y
                  # CONFIG_DUMMY is not set
                  # CONFIG_BONDING is not set
                  # CONFIG_EQUALIZER is not set
                  CONFIG_TUN=m
                  # CONFIG_ETHERTAP is not set
                  # CONFIG_NET_SB1000 is not set
                  • [^] # Re: Compilation des modules ?

                    Posté par  . Évalué à 2.

                    Et en activant CONFIG_ETHERTAP ça change quelquechose ?
                    • [^] # Re: Compilation des modules ?

                      Posté par  . Évalué à 0.

                      Hélas cela ne change rien...
                      Je suis vraiment en manque d'imagination sur ce coup la.
                      • [^] # Problème résolue - Merci tout le monde

                        Posté par  . Évalué à 0.

                        Bon j'ai fini par l'avoir. J'ai rajouté "PPP over Ethernet" et il me manquait une option dans Netfilter que j'ai rajouté. Je ne sais plus laquelle.
                        Y a probablement qu'un de ces ajouts qui est utile (je vote pour le PPP ) mais j'ai la flegme de vérifier. Je sais pas combien de fois j'ai du compiler mais la j'en peu plus.
                        Encore merci pour votre aide.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.