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

markusmuster

Neuer User
Mitglied seit
9 Dez 2008
Beiträge
13
Punkte für Reaktionen
0
Punkte
1
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:
[email protected]:/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
[email protected]:/var/usb# ./cpmacconfig cpmac0 regdump
[email protected]:/var/usb# ./cpmacconfig cpmac0 support
[email protected]:/var/usb#
[email protected]:/var/usb# ./cpmacconfig cpmac0 getreg 23
Register 0x23 = 0x247f
[email protected]:/var/usb# ./cpmacconfig cpmac0 getreg 23
Register 0x23 = 0x247f
[email protected]:/var/usb# ./cpmacconfig cpmac0 getreg 22
Register 0x22 = 0
[email protected]:/var/usb# ./cpmacconfig cpmac0 getreg 21
Register 0x21 = 0
[email protected]:/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?
 
Zuletzt bearbeitet:

Darkyputz

Aktives Mitglied
Mitglied seit
27 Jul 2005
Beiträge
2,324
Punkte für Reaktionen
0
Punkte
36
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.
 

markusmuster

Neuer User
Mitglied seit
9 Dez 2008
Beiträge
13
Punkte für Reaktionen
0
Punkte
1
Ein entsprechendes Paket haben wir in Freetz ja auch drin...
??? 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!
 

markusmuster

Neuer User
Mitglied seit
9 Dez 2008
Beiträge
13
Punkte für Reaktionen
0
Punkte
1
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---
 
Zuletzt bearbeitet: