Code von einem Modul ändern

Welches Modul/Treiber für welche Hardware, Kernel compilieren...
Antworten
Benutzeravatar
minimike
Beiträge: 5616
Registriert: 26.03.2003 02:21:19
Lizenz eigener Beiträge: neue BSD Lizenz
Wohnort: Köln
Kontaktdaten:

Code von einem Modul ändern

Beitrag von minimike » 06.05.2007 13:43:10

Hi ich kann folgendes Modul vmnet für VMware mit Kernel 2.6.21-git5 nicht kompelieren

Code: Alles auswählen

bitch:/usr/src/vmware-any-any-update109/vmnet-only# make
Unknown VMware Workstation 6.0.0 build 44426 detected. Building for Workstation 5.5.3.
Using 2.6.x kernel build system.
make -C /lib/modules/2.6.21-git5-amd64/build/include/.. SUBDIRS=$PWD SRCROOT=$PWD/. modules
make[1]: Entering directory `/usr/src/linux-headers-2.6.21-git5-amd64'
  CC [M]  /usr/src/vmware-any-any-update109/vmnet-only/driver.o
  CC [M]  /usr/src/vmware-any-any-update109/vmnet-only/hub.o
  CC [M]  /usr/src/vmware-any-any-update109/vmnet-only/userif.o
/usr/src/vmware-any-any-update109/vmnet-only/userif.c: In function 'VNetCopyDatagramToUser':
/usr/src/vmware-any-any-update109/vmnet-only/userif.c:633: error: 'const struct sk_buff' has no member named 'h'
/usr/src/vmware-any-any-update109/vmnet-only/userif.c:633: error: 'const struct sk_buff' has no member named 'nh'
/usr/src/vmware-any-any-update109/vmnet-only/userif.c:639: error: 'const struct sk_buff' has no member named 'h'
make[2]: *** [/usr/src/vmware-any-any-update109/vmnet-only/userif.o] Fehler 1
make[1]: *** [_module_/usr/src/vmware-any-any-update109/vmnet-only] Fehler 2
make[1]: Leaving directory `/usr/src/linux-headers-2.6.21-git5-amd64'
make: *** [vmnet.ko] Fehler 2
bitch:/usr/src/vmware-any-any-update109/vmnet-only#
Ich bin kein Coder aber ich meine das ist der Schnipsel

Code: Alles auswählen

static INLINE_SINGLE_CALLER int
VNetCopyDatagramToUser(const struct sk_buff *skb,       // IN
                       char *buf,                       // OUT
                       size_t count)                    // IN
{
   if (count > skb->len) {
      count = skb->len;
   }
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 4, 4)
   if (copy_to_user(buf, skb->data, count)) {
      return -EFAULT;
   }
#else
   /*
    * If truncation occurs, we do not bother with checksumming - caller cannot
    * verify checksum anyway in such case, and copy without checksum it is
    * faster.
    */
   if (skb->pkt_type == PACKET_OUTGOING &&      /* Packet must be outgoing */
       skb->ip_summed == VM_CHECKSUM_PARTIAL && /* Without checksum */
       skb->h.raw != skb->nh.raw &&             /* We must know where header is */
       skb->len == count) {                     /* No truncation may occur */
      size_t skl;
      int csum;
      u_int16_t csum16;

      skl = skb->h.raw - skb->data;
      if (VNetCopyDatagram(skb, buf, skl)) {
         return -EFAULT;
      }
      csum = VNetCsumCopyDatagram(skb, skl, buf + skl);
      if (csum < 0) {
         return csum;
      }
      csum16 = csum;
      if (copy_to_user(buf + skl + skb->csum, &csum16, sizeof csum16)) {
         return -EFAULT;
      }
   } else {
      if (VNetCopyDatagram(skb, buf, count)) {
         return -EFAULT;
      }
   }
#endif
   return count;
}
Kann mir da jemand helfen?
"Lennart Poettering is one of those typical IT leaders..." "like Linus Torvalds and Theo de Raadt?" "more like Bozo the Clown" After all, now a good employee of Microsoft

Spasswolf
Beiträge: 3472
Registriert: 30.11.2005 10:32:22
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Wald

Beitrag von Spasswolf » 06.05.2007 19:05:19

Es geht um die folgende struct aus ../include/linux/skbuff.h:
struct sk_buff {
.
.
.
union {
struct tcphdr *th;
struct udphdr *uh;
struct icmphdr *icmph;
struct igmphdr *igmph;
struct iphdr *ipiph;
struct ipv6hdr *ipv6h;
unsigned char *raw;
} h;

union {
struct iphdr *iph;
struct ipv6hdr *ipv6h;
struct arphdr *arph;
unsigned char *raw;
} nh;
.
.
.
};
Die beiden unions sind im git-patch aus dem Kernel geflogen. Die unions einfach wieder in den header zu schreiben bringt auch nichts, da die unions nicht meht initialisiert werden.

comes
Beiträge: 2702
Registriert: 11.03.2005 07:33:30
Wohnort: /dev/null
Kontaktdaten:

Beitrag von comes » 06.05.2007 19:30:48

was ich mich die ganze zeit frage, wieso fummelt alle welt noch mit den any-any patches rum? die sind gestorben, brauch man nicht mehr! finito! aus! ende! vorbei!

vmware workstation oder was auch immer laden, entpacken, dann den üblichen 3 satz, fertig, läuft!
grüße, comes

Faschismus ist keine Meinung, sondern ein Verbrechen!
http://sourcewars.de

Benutzeravatar
minimike
Beiträge: 5616
Registriert: 26.03.2003 02:21:19
Lizenz eigener Beiträge: neue BSD Lizenz
Wohnort: Köln
Kontaktdaten:

Beitrag von minimike » 06.05.2007 20:18:21

comes hat geschrieben:was ich mich die ganze zeit frage, wieso fummelt alle welt noch mit den any-any patches rum? die sind gestorben, brauch man nicht mehr! finito! aus! ende! vorbei!

vmware workstation oder was auch immer laden, entpacken, dann den üblichen 3 satz, fertig, läuft!
nein
"Lennart Poettering is one of those typical IT leaders..." "like Linus Torvalds and Theo de Raadt?" "more like Bozo the Clown" After all, now a good employee of Microsoft

Benutzeravatar
minimike
Beiträge: 5616
Registriert: 26.03.2003 02:21:19
Lizenz eigener Beiträge: neue BSD Lizenz
Wohnort: Köln
Kontaktdaten:

Beitrag von minimike » 06.05.2007 20:21:43

Ich habe VMware WS6 für 64 Bit. Das Ergebniss bekomme ich mit dem Code von VMware WS6 sowie auch mit dem vom vmware-any-any-patch. Ich muss mal im VMware Forum nachfragen
"Lennart Poettering is one of those typical IT leaders..." "like Linus Torvalds and Theo de Raadt?" "more like Bozo the Clown" After all, now a good employee of Microsoft

Benutzeravatar
minimike
Beiträge: 5616
Registriert: 26.03.2003 02:21:19
Lizenz eigener Beiträge: neue BSD Lizenz
Wohnort: Köln
Kontaktdaten:

Beitrag von minimike » 06.05.2007 20:35:46

Spasswolf hat geschrieben:Es geht um die folgende struct aus ../include/linux/skbuff.h:

Die beiden unions sind im git-patch aus dem Kernel geflogen. Die unions einfach wieder in den header zu schreiben bringt auch nichts, da die unions nicht meht initialisiert werden.
schon ab git1?
"Lennart Poettering is one of those typical IT leaders..." "like Linus Torvalds and Theo de Raadt?" "more like Bozo the Clown" After all, now a good employee of Microsoft

Spasswolf
Beiträge: 3472
Registriert: 30.11.2005 10:32:22
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Wald

Beitrag von Spasswolf » 06.05.2007 23:43:35

Nach ein bischen wühlen im Code hab ich hoffentlich 'ne Lösung

Code: Alles auswählen

static INLINE_SINGLE_CALLER int
VNetCopyDatagramToUser(const struct sk_buff *skb,       // IN
                       char *buf,                       // OUT
                       size_t count)                    // IN
{
   if (count > skb->len) {
      count = skb->len;
   }
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 4, 4)
   if (copy_to_user(buf, skb->data, count)) {
      return -EFAULT;
   }
#else
   /*
    * If truncation occurs, we do not bother with checksumming - caller cannot
    * verify checksum anyway in such case, and copy without checksum it is
    * faster.
    */
   if (skb->pkt_type == PACKET_OUTGOING &&      /* Packet must be outgoing */
       skb->ip_summed == VM_CHECKSUM_PARTIAL && /* Without checksum */
       skb->transport_header != skb->network_header &&             /* We must know where header is */
       skb->len == count) {                     /* No truncation may occur */
      size_t skl;
      int csum;
      u_int16_t csum16;

      skl = skb_transport_offset(skb);
      if (VNetCopyDatagram(skb, buf, skl)) {
         return -EFAULT;
      }
      csum = VNetCsumCopyDatagram(skb, skl, buf + skl);
      if (csum < 0) {
         return csum;
      }
      csum16 = csum;
      if (copy_to_user(buf + skl + skb->csum, &csum16, sizeof csum16)) {
         return -EFAULT;
      }
   } else {
      if (VNetCopyDatagram(skb, buf, count)) {
         return -EFAULT;
      }
   }
#endif
   return count;
} 
Es könnte aber durchaus sein das noch an anderen Stellen Änderungen nötig sind. Such mal nach entsprechenden Dateien mit

Code: Alles auswählen

grep -Elr 'skb->h\..*|skb->nh\..*'
Edit: Ja, mit git1 begannen die Änderungen im Netwerkteil des Kernels.
Edit2: grep Befehl geändert

Benutzeravatar
minimike
Beiträge: 5616
Registriert: 26.03.2003 02:21:19
Lizenz eigener Beiträge: neue BSD Lizenz
Wohnort: Köln
Kontaktdaten:

Beitrag von minimike » 07.05.2007 23:36:02

Ja habe deine Änderungen mit einem Editor übernommen, Die Datei userif.c kompeliert er nun, jetzt hängt er bei bridge.c

Code: Alles auswählen

make[1]: Entering directory `/usr/src/linux-headers-2.6.21-git5-amd64'
  CC [M]  /usr/src/vmware-any-any-update109/vmnet-only/driver.o
  CC [M]  /usr/src/vmware-any-any-update109/vmnet-only/hub.o
  CC [M]  /usr/src/vmware-any-any-update109/vmnet-only/userif.o
  CC [M]  /usr/src/vmware-any-any-update109/vmnet-only/netif.o
  CC [M]  /usr/src/vmware-any-any-update109/vmnet-only/bridge.o
/usr/src/vmware-any-any-update109/vmnet-only/bridge.c: In function 'VNetBridgeReceiveFromVNet':
/usr/src/vmware-any-any-update109/vmnet-only/bridge.c:557: error: 'struct sk_buff' has no member named 'mac'
/usr/src/vmware-any-any-update109/vmnet-only/bridge.c:557: error: 'struct sk_buff' has no member named 'nh'
/usr/src/vmware-any-any-update109/vmnet-only/bridge.c:557: warning: left-hand operand of comma expression has no effect
/usr/src/vmware-any-any-update109/vmnet-only/bridge.c:557: warning: left-hand operand of comma expression has no effect
/usr/src/vmware-any-any-update109/vmnet-only/bridge.c:557: warning: value computed is not used
/usr/src/vmware-any-any-update109/vmnet-only/bridge.c: In function 'VNetBridgeComputeHeaderPos':
/usr/src/vmware-any-any-update109/vmnet-only/bridge.c:1075: error: 'struct sk_buff' has no member named 'h'
/usr/src/vmware-any-any-update109/vmnet-only/bridge.c:1075: error: 'struct sk_buff' has no member named 'nh'
/usr/src/vmware-any-any-update109/vmnet-only/bridge.c:1080: error: 'struct sk_buff' has no member named 'h'
/usr/src/vmware-any-any-update109/vmnet-only/bridge.c:1080: error: 'struct sk_buff' has no member named 'nh'
/usr/src/vmware-any-any-update109/vmnet-only/bridge.c:1080: error: 'struct sk_buff' has no member named 'nh'
/usr/src/vmware-any-any-update109/vmnet-only/bridge.c: In function 'VNetBridgeReceiveFromDev':
/usr/src/vmware-any-any-update109/vmnet-only/bridge.c:1166: error: 'struct sk_buff' has no member named 'mac'
/usr/src/vmware-any-any-update109/vmnet-only/bridge.c:1190: error: 'struct sk_buff' has no member named 'mac'
make[2]: *** [/usr/src/vmware-any-any-update109/vmnet-only/bridge.o] Fehler 1
make[1]: *** [_module_/usr/src/vmware-any-any-update109/vmnet-only] Fehler 2
make[1]: Leaving directory `/usr/src/linux-headers-2.6.21-git5-amd64'
make: *** [vmnet.ko] Fehler 2
bitch:/usr/src/vmware-any-any-update109/vmnet-only#
Da ich keinen Plan vom Kernel Coden sowie von C habe muss ich wohl wieder deine Hilfe bemühen.
"Lennart Poettering is one of those typical IT leaders..." "like Linus Torvalds and Theo de Raadt?" "more like Bozo the Clown" After all, now a good employee of Microsoft

Spasswolf
Beiträge: 3472
Registriert: 30.11.2005 10:32:22
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Wald

Beitrag von Spasswolf » 08.05.2007 08:48:51

Wenn du die Datei postest, kann ich's versuchen.

Benutzeravatar
minimike
Beiträge: 5616
Registriert: 26.03.2003 02:21:19
Lizenz eigener Beiträge: neue BSD Lizenz
Wohnort: Köln
Kontaktdaten:

Beitrag von minimike » 08.05.2007 13:13:18

"Lennart Poettering is one of those typical IT leaders..." "like Linus Torvalds and Theo de Raadt?" "more like Bozo the Clown" After all, now a good employee of Microsoft

Spasswolf
Beiträge: 3472
Registriert: 30.11.2005 10:32:22
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Wald

Beitrag von Spasswolf » 08.05.2007 15:12:50

Hier ist der Patch:

Code: Alles auswählen

diff -Naur a/bridge.c b/bridge.c
--- a/bridge.c  2007-05-08 15:10:12.000000000 +0200
+++ b/bridge.c  2007-05-08 15:03:16.000000000 +0200
@@ -1071,13 +1071,14 @@
 static INLINE_SINGLE_CALLER void
 VNetBridgeComputeHeaderPos(struct sk_buff *skb) // IN: buffer to examine
 {
+   const unsigned char *nh = skb_network_header(skb);
    /* Maybe some kernel gets it right... */
-   if (skb->h.raw != skb->nh.raw) {
+   if (skb->transport_header != skb->network_header) {
       return;
    }
    switch (be16_to_cpu(skb->protocol)) {
       case ETH_P_IP:
-         skb->h.raw = skb->nh.raw + (skb->nh.raw[0] & 0x0F) * 4;
+         skb->transport_header = skb->network_header + (nh[0] & 0x0F) * 4;
         return;
       default:
          LOG(3, (KERN_DEBUG "Unknown EII protocol %04X: csum at %d\n", 
@@ -1163,7 +1164,7 @@
 #  endif
 
    if (bridge->smac) {
-      if (VNetCallSMACFunc(bridge->smac, &skb, skb->mac.raw, 
+      if (VNetCallSMACFunc(bridge->smac, &skb, skb_mac_header(skb),
                            SMAC_CheckPacketFromHost) != 
           PacketStatusForwardPacket) {
          LOG(4, (KERN_NOTICE "bridge-%s: packet dropped .\n",
@@ -1187,7 +1188,7 @@
 #endif
 #endif
    
-   skb_push(skb, skb->data - skb->mac.raw);
+   skb_push(skb, skb->data - skb_mac_header(skb));
    LOG(3, (KERN_DEBUG "bridge-%s: receive %d\n",
           bridge->name, (int) skb->len));
 


Benutzeravatar
minimike
Beiträge: 5616
Registriert: 26.03.2003 02:21:19
Lizenz eigener Beiträge: neue BSD Lizenz
Wohnort: Köln
Kontaktdaten:

Beitrag von minimike » 08.05.2007 23:06:59

Nein das funktioniert nicht. Nun zum einen artet das in Arbeit für dich aus und ich kann dich nicht wirklich gut Unterstützen um mein Problem zu lösen. Kann ich dir den aktuellsten Code seitens von VMware für die Treiber zukommen lassenund ich revanchiere mich dann in Paderborn oder Siegburg im Spätsommer mit Bier? Die Treiber sind meine ich unter der GPL
Fährst du auch AMD64? Dann schicke ich auch die DEB*s vom Kernel die ich gebaut habe mit. Natürlich auch mit dem neuen Wlanstack mit sammt Treiber für rtl8187 Wlan Chips.
"Lennart Poettering is one of those typical IT leaders..." "like Linus Torvalds and Theo de Raadt?" "more like Bozo the Clown" After all, now a good employee of Microsoft

Spasswolf
Beiträge: 3472
Registriert: 30.11.2005 10:32:22
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Wald

Beitrag von Spasswolf » 08.05.2007 23:32:08

Ja, das wär einfacher wenn du mir den ganzen Code schicken kannst ( Zensiert ). Ein amd64 System hab ich auch. Dein Kernel deb sollte ich aber nicht brauchen, es müsste reichen, dass ich mir einen neuen git oder mm Kernel bauen.
Das Bier ist auch 'ne gute Idee :D, aber ich kann trotzdem für nichts garantieren.

Spasswolf
Beiträge: 3472
Registriert: 30.11.2005 10:32:22
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Wald

Beitrag von Spasswolf » 10.05.2007 14:21:54

Du hast Post.

Benutzeravatar
minimike
Beiträge: 5616
Registriert: 26.03.2003 02:21:19
Lizenz eigener Beiträge: neue BSD Lizenz
Wohnort: Köln
Kontaktdaten:

Beitrag von minimike » 10.05.2007 22:34:01

Danke :) Nur habe ich jetzt ein anderes Problem. Mein Rechner ist kaputt. Gestern abend sah ich noch einige kryptische Symbole beim herunterfahren kurz zuvor verhielt sich die Mühle seltsam. Jetzt habe ich nur noch einen schwarzen Bildschirm. Morgen früh fahre ich mit dem Rad zu Snogard und werde das Mainboard einschicken. Ich überlege mir derzeit ein anderes zu Kaufen weil die retour mindestens 5 Wochen dauert. Ich werde versuchen bis Di das zu Testen.

liebe Grüsse, Darko
"Lennart Poettering is one of those typical IT leaders..." "like Linus Torvalds and Theo de Raadt?" "more like Bozo the Clown" After all, now a good employee of Microsoft

Spasswolf
Beiträge: 3472
Registriert: 30.11.2005 10:32:22
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Wald

Beitrag von Spasswolf » 15.05.2007 14:19:35

Ich konnte es inzwischen auch testen, da der Vmware Player 2.0 den gleichen Code für das vmnet Kernelmodul benutzt. Bis jetzt gab's keine Probleme (mit Kernel 2.6.21-git12 und 2.6.22-rc1).

Benutzeravatar
minimike
Beiträge: 5616
Registriert: 26.03.2003 02:21:19
Lizenz eigener Beiträge: neue BSD Lizenz
Wohnort: Köln
Kontaktdaten:

Beitrag von minimike » 20.05.2007 17:42:48

Ja auch hier ein voller Erfolg

:hail::hail::hail::hail::hail::hail:

Du bist zwar nicht Karel Gott aber dafür ein Kernelgott :mrgreen:

Danke Darko
"Lennart Poettering is one of those typical IT leaders..." "like Linus Torvalds and Theo de Raadt?" "more like Bozo the Clown" After all, now a good employee of Microsoft

Spasswolf
Beiträge: 3472
Registriert: 30.11.2005 10:32:22
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Wald

Beitrag von Spasswolf » 21.05.2007 12:49:35

Freut mich das es bei dir auch funktioniert!

Antworten