• [^] # Re: OK je vais hacker les drivers

    Posté par . En réponse au message Comment limiter le chargement d'un driver réseau à une seule interface ?. Évalué à 0.

    Moi je regarde dans le manuel de modprobe.conf et de modprobe, et je constate qu'il n'y a aucun moyen externe d'empêcher le driver d'initialiser les deux cartes identiques.

    Voici un essai pour le prouver.
    Le système est Debian 6.0.3 / i386 dans VirtualBox avec deux cartes Intel Pro/1000 identiques.

    # modinfo e1000
    filename: /lib/modules/2.6.32-5-686/kernel/drivers/net/e1000/e1000.ko
    version: 7.3.21-k5-NAPI
    license: GPL
    description: Intel(R) PRO/1000 Network Driver
    author: Intel Corporation, <linux.nics@intel.com>
    srcversion: 383459ED2D46B8379FCB399
    alias: pci:v00008086d000010B5sv*sd*bc*sc*i*
    alias: pci:v00008086d00001099sv*sd*bc*sc*i*
    alias: pci:v00008086d0000108Asv*sd*bc*sc*i*
    alias: pci:v00008086d0000107Csv*sd*bc*sc*i*
    alias: pci:v00008086d0000107Bsv*sd*bc*sc*i*
    alias: pci:v00008086d0000107Asv*sd*bc*sc*i*
    alias: pci:v00008086d00001079sv*sd*bc*sc*i*
    alias: pci:v00008086d00001078sv*sd*bc*sc*i*
    alias: pci:v00008086d00001077sv*sd*bc*sc*i*
    alias: pci:v00008086d00001076sv*sd*bc*sc*i*
    alias: pci:v00008086d00001075sv*sd*bc*sc*i*
    alias: pci:v00008086d00001028sv*sd*bc*sc*i*
    alias: pci:v00008086d00001027sv*sd*bc*sc*i*
    alias: pci:v00008086d00001026sv*sd*bc*sc*i*
    alias: pci:v00008086d0000101Esv*sd*bc*sc*i*
    alias: pci:v00008086d0000101Dsv*sd*bc*sc*i*
    alias: pci:v00008086d0000101Asv*sd*bc*sc*i*
    alias: pci:v00008086d00001019sv*sd*bc*sc*i*
    alias: pci:v00008086d00001018sv*sd*bc*sc*i*
    alias: pci:v00008086d00001017sv*sd*bc*sc*i*
    alias: pci:v00008086d00001016sv*sd*bc*sc*i*
    alias: pci:v00008086d00001015sv*sd*bc*sc*i*
    alias: pci:v00008086d00001014sv*sd*bc*sc*i*
    alias: pci:v00008086d00001013sv*sd*bc*sc*i*
    alias: pci:v00008086d00001012sv*sd*bc*sc*i*
    alias: pci:v00008086d00001011sv*sd*bc*sc*i*
    alias: pci:v00008086d00001010sv*sd*bc*sc*i*
    alias: pci:v00008086d0000100Fsv*sd*bc*sc*i*
    alias: pci:v00008086d0000100Esv*sd*bc*sc*i*
    alias: pci:v00008086d0000100Dsv*sd*bc*sc*i*
    alias: pci:v00008086d0000100Csv*sd*bc*sc*i*
    alias: pci:v00008086d00001009sv*sd*bc*sc*i*
    alias: pci:v00008086d00001008sv*sd*bc*sc*i*
    alias: pci:v00008086d00001004sv*sd*bc*sc*i*
    alias: pci:v00008086d00001001sv*sd*bc*sc*i*
    alias: pci:v00008086d00001000sv*sd*bc*sc*i*
    depends: 
    vermagic: 2.6.32-5-686 SMP mod_unload modversions 686 
    parm: TxDescriptors:Number of transmit descriptors (array of int)
    parm: RxDescriptors:Number of receive descriptors (array of int)
    parm: Speed:Speed setting (array of int)
    parm: Duplex:Duplex setting (array of int)
    parm: AutoNeg:Advertised auto-negotiation setting (array of int)
    parm: FlowControl:Flow Control setting (array of int)
    parm: XsumRX:Disable or enable Receive Checksum offload (array of int)
    parm: TxIntDelay:Transmit Interrupt Delay (array of int)
    parm: TxAbsIntDelay:Transmit Absolute Interrupt Delay (array of int)
    parm: RxIntDelay:Receive Interrupt Delay (array of int)
    parm: RxAbsIntDelay:Receive Absolute Interrupt Delay (array of int)
    parm: InterruptThrottleRate:Interrupt Throttling Rate (array of int)
    parm: SmartPowerDownEnable:Enable PHY smart power down (array of int)
    parm: KumeranLockLoss:Enable Kumeran lock loss workaround (array of int)
    parm: copybreak:Maximum size of packet that is copied to a new buffer on receive (uint)
    parm: debug:Debug level (0=none,...,16=all) (int)
    # rmmod e1000
    # dmesg -c > /dev/null
    # modprobe e1000 debug=16
    # dmesg
    [ 295.421795] e1000 .&checktime(0000,00,08,':').0: PCI INT A disabled
    [ 295.768052] e1000 .&checktime(0000,00,03,':').0: PCI INT A disabled
    [ 303.432163] Intel(R) PRO/1000 Network Driver - version 7.3.21-k5-NAPI
    [ 303.432163] Copyright (c) 1999-2006 Intel Corporation.
    [ 303.432163] e1000 .&checktime(0000,00,03,':').0: PCI INT A -> Link[LNKC] -> GSI 10 (level, low) -> IRQ 10
    [ 303.868994] e1000: .&checktime(0000,00,03,':').0: e1000_probe: (PCI:33MHz:32-bit) 08:00:27:3e:c8:8d
    [ 303.936125] e1000: eth0: e1000_probe: Intel(R) PRO/1000 Network Connection
    [ 303.936125] e1000 .&checktime(0000,00,08,':').0: PCI INT A -> Link[LNKD] -> GSI 9 (level, low) -> IRQ 9
    [ 304.368570] e1000: .&checktime(0000,00,08,':').0: e1000_probe: (PCI:33MHz:32-bit) 08:00:27:00:e3:f1
    [ 304.452184] ADDRCONF(NETDEV_UP): eth0: link is not ready
    [ 304.456184] e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX
    [ 304.476065] ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
    [ 304.824878] e1000: eth1: e1000_probe: Intel(R) PRO/1000 Network Connection
    [ 304.976103] ADDRCONF(NETDEV_UP): eth1: link is not ready
    
    

    On voit bien que le driver exécute e1000_probe pour chaque carte et donc c'est probablement cette fonction que je vais modifier pour arriver à mes fins. Je vais ajouter un paramètre au module pour sélectionner la carte que je veux initialiser.