.titleBar { margin-bottom: 5px!important; }

[Frage] Freetz/AVM: cpmacconfig und die Benutzung ("cpmacconfig" !== "cpmaccfg")

Dieses Thema im Forum "FRITZ!Box Fon: Modifikationen" wurde erstellt von markusmuster, 3 Apr. 2012.

  1. markusmuster

    markusmuster Neuer User

    Registriert seit:
    9 Dez. 2008
    Beiträge:
    13
    Zustimmungen:
    0
    Punkte für Erfolge:
    1
    Ort:
    ::1
    #1 markusmuster, 3 Apr. 2012
    Zuletzt bearbeitet: 4 Apr. 2012
    Nachdem ich mit meinen Bemühungen mit cpmaccfg in diesem Post kläglich gescheitert bin mag ich aber immer noch nicht so ganz aufgeben.

    Bei einem meiner Ausflüge in den Kernel-Source bin ich unter "~/trunk/source/kernel/ref-ur8-16mb-7270_05.05/linux/drivers/net/avm_cpmac" auf ein AVM-Tool namens cpmacconfig.c gestoßen.

    Nach dem kompilieren und strippen mit

    Code:
    ~/trunk/toolchain/target/bin/mipsel-linux-uclibc-gcc -static -o cpmacconfig cpmacconfig.c
    ~/trunk/toolchain/target/bin/mipsel-linux-uclibc-strip cpmacconfig
    
    kann man es auf der Box auch problemlos ausführen.
    Code:
    root@fritz:/var/usb# ./cpmacconfig cpmac0
    
    cpmacconfig built on Apr  3 2012 at 08:17:40
    
    Usage:
      cpmacconfig <device> mode <cpmac mode> [optional VIDs]
                           modes: normal, ata, split, splitata, allports
      cpmacconfig <device> mode special (<dev name>,<port>[,<port>...] [optional VIDs]
                           ports start at 0
      cpmacconfig <device> addporttowan <port> [<optional VID>]
      cpmacconfig <device> power <on interval> <off interval> <5 * (on|off|save)>
      cpmacconfig <device> setreg <hex register> <hex value>
      cpmacconfig <device> getreg <hex register>
      cpmacconfig <device> setphy <hex phy> <hex register> <hex value>
      cpmacconfig <device> getphy <hex phy> <hex register>
      cpmacconfig <device> regdump
      cpmacconfig <device> support
      cpmacconfig <device> test <value>
      cpmacconfig <device> peek <location> [length [size]]
      cpmacconfig <device> poke <location> <value> [size]
    SIOCDEVPRIVATE (0x89F0) = 0x89f0, AVM_CPMAC_IOCTL_GENERIC (SIOCDEVPRIVATE + 15) = 0x89ff
    root@fritz:/var/usb# ./cpmacconfig cpmac0 regdump
    root@fritz:/var/usb# ./cpmacconfig cpmac0 support
    root@fritz:/var/usb#
    root@fritz:/var/usb# ./cpmacconfig cpmac0 getreg 23
    Register 0x23 = 0x247f
    root@fritz:/var/usb# ./cpmacconfig cpmac0 getreg 23
    Register 0x23 = 0x247f
    root@fritz:/var/usb# ./cpmacconfig cpmac0 getreg 22
    Register 0x22 = 0
    root@fritz:/var/usb# ./cpmacconfig cpmac0 getreg 21
    Register 0x21 = 0
    root@fritz:/var/usb# ./cpmacconfig cpmac0 getreg 24
    Register 0x24 = 0x5
    

    Meine Frage: Auf den ersten Blick hat man damit ja vollen Zugriff auf die Switch-Hardware. Gibt es weiterführende Dokumentation, Hinweise oder Infos? Die globale Suche bietet da nicht so viel Auswahl...
    Weiß jemand mehr?
     
  2. Darkyputz

    Darkyputz Aktives Mitglied

    Registriert seit:
    27 Juli 2005
    Beiträge:
    2,320
    Zustimmungen:
    0
    Punkte für Erfolge:
    36
    Ort:
    Newton, New Jersey
    Hallo...

    Ein entsprechendes Paket haben wir in Freetz ja auch drin...aber das mit der Doku des ganzen hat bisher nicht so geklappt, als das man damit wirklich gut was an den neuen Boxen anfangen konnte...
    Meine letzte Versuche endeten damit das ich einzelne Ports nicht fest auf 10mbit stellen konnte...
    Aber...keep trying...wäre toll da wirklich wieder auf alles zugreifen zu können.
     
  3. markusmuster

    markusmuster Neuer User

    Registriert seit:
    9 Dez. 2008
    Beiträge:
    13
    Zustimmungen:
    0
    Punkte für Erfolge:
    1
    Ort:
    ::1
    ??? Ja? Aber nicht "cpmaccfg", oder? Das funktioniert in der Tat nicht mehr mit neueren Kernel >2.6.19.
    Ich spreche hier von dem AVM-Tool "cpmacconfig" , welches in der Kernel-Sourcen mitgeliefert wird. Bin aber trotzdem für Hinweise dankbar!
     
  4. markusmuster

    markusmuster Neuer User

    Registriert seit:
    9 Dez. 2008
    Beiträge:
    13
    Zustimmungen:
    0
    Punkte für Erfolge:
    1
    Ort:
    ::1
    #4 markusmuster, 12 Apr. 2012
    Zuletzt bearbeitet: 12 Apr. 2012
    So, hatte mal eine paar Minuten Zeit um in den Source zu sehen.

    Eine undokumentierte Option:
    Code:
    cpmacconfig <device> info
    
    ./cpmacconfig cpmac0 info
    Information about cpmac:
      PHY power: 4000ms on, 16480ms off, status = on off save save off
      Switch mode: ata (2)
      WAN port 0
      "wan": 0x21
      "eth0": 0x2e
    
    Das auslesen klappt also schon einmal prima.


    Und lt. Code "sollte" folgender Befehl die externen vier Ports in einen der Modi (on|off|save) schalten können:
    Code:
    cpmacconfig <device> power <on interval> <off interval>  <LAN1> <LAN2> <LAN3> <LAN4>
    
    ./cpmacconfig cpmac0 power 40000 164800 on off off off
    
    Dummerweise bekomme ich das mit einem SegFault quittiert... Aber was soll man auch auf die Schnelle erwarten von einem Code der :shock: "goto" :shock: benutzt.

    Dann eben noch ein wenig debuggen um zu sehen wo genau der SegFault herkommt...

    ---SNIP--- cpmacconfig.c ---SNIP---
    Code:
        } else if(strcasecmp(cmd, "power") == 0) {
            /* Configure power settings */
            if(argc != 9)
                goto usage_error;
            config.type = AVM_CPMAC_IOCTL_CONFIG_SET_PHY_POWER;
            for(i = 3; i <= 4; i++) {
                if(!isdigit(*argv[i])) {
                    fprintf(stderr, "\"%s\" is no number", argv[i]);
                    goto usage_error;
                }
            }
            config.u.phy_power_setup.time_on  = atoi(argv[3]) / 10;
            config.u.phy_power_setup.time_off = atoi(argv[4]) / 10;
            for(i = 0; i < 5; i++) {
                if(strcasecmp(argv[i + 5], "on") == 0) {
                    config.u.phy_power_setup.mode[i] = ADM_PHY_POWER_ON;
                } else if(strcasecmp(argv[i + 5], "off") == 0) {
                    config.u.phy_power_setup.mode[i] = ADM_PHY_POWER_OFF;
                } else if(strcasecmp(argv[i + 5], "save") == 0) {
                    config.u.phy_power_setup.mode[i] = ADM_PHY_POWER_SAVE;
                } else {
                    goto usage_error;
                }
            }
    ---SNAP---