Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: Wake on LAN v IPv6 [vyřešeno]  (Přečteno 2841 krát)

Dogmeat

  • Návštěvník
  • Příspěvků: 26
Wake on LAN v IPv6 [vyřešeno]
« kdy: 11 Července 2010, 12:02:46 »
Zdravím,

mám vytvořenou aplikaci v c++, která mi dělá WOL v IPv4 a chtěl bych, aby fungovala i v IPv6 sítích, ale nemůžu o tom najít v podstatě žádné informace, natož nějaký příklad.

Neví někdo, kde bych se o tom daly zjistit nějaké informace nebo jak to provést?

Díky
« Poslední změna: 15 Července 2010, 17:53:17 od kiklhorn »

Martin Kiklhorn

  • Člen občanského sdružení Ubuntu ČR a placené komunitní podpory
  • Administrátor fóra
  • Závislák
  • ******
  • Příspěvků: 4807
  • グーグル!ご存知ですか?
    • HEJ
Re: Wake on LAN v IPv6
« Odpověď #1 kdy: 12 Července 2010, 22:04:20 »
Co to má společného s IP protokolem? WOL přeci jede na L2 a ne L3.
Jsou ve vašem dotazu OPRAVDU VŠECHNY vám dostupné informace o problému?
Linux user since 2007-10-11, Registered #456007
Virtual
| Distribuce
~/slozka znamená /home/"vase jmeno"/slozka
6521 69DE 0F34 FCBC FB1D  DE76 360E 52B2 F71A B8E8

Dogmeat

  • Návštěvník
  • Příspěvků: 26
Re: Wake on LAN v IPv6
« Odpověď #2 kdy: 13 Července 2010, 11:54:46 »
Abych upřesnil můj problém:

Mám aplikaci, která bere jako vstup MAC adresu a masku podsítě (nebo broadcast).

Pro odeslání magického packetu je potřeba vytvořit socket, aby bylo možné odeslat tento packet pomocí sendto() a k tomu je potřeba jej nastavit buď na AF_INET pro IPv4 nebo pro AF_INET6 pro IPv6 - to není problém.

Ten nastává u nastavení socketu setsockopt(), ve kterém se u IPv4 socketu nastavuje SO_BROADCAST (nenašel jsem jakýkoli jiný příklad nastavení a nemám prozatím možnost ověřit, zda takto lze opravdu poslat Wake on LAN na multicast či unicast).

V IPv6 ovšem nelze použít SO_BROADCAST, protokol toto nastavení neobsahuje a nepodařilo se mi najít, co použít místo něj. Nějaké tipy? Materiálů kolem této problematiky je jako šafránu.

Dále bych potřeboval nějak rozlišit, zda byla vložena maska IPv6 či IPv4 sítě, abych mohl vytvořit ten správný socket - jak na to v c++?

Možná mi něco uniká :-)
Díky za tipy

Martin Kiklhorn

  • Člen občanského sdružení Ubuntu ČR a placené komunitní podpory
  • Administrátor fóra
  • Závislák
  • ******
  • Příspěvků: 4807
  • グーグル!ご存知ですか?
    • HEJ
Re: Wake on LAN v IPv6
« Odpověď #3 kdy: 13 Července 2010, 23:03:43 »
Potřebujete nějak dopravit packet k síťovce, to je věc adresování, tedy hlavně toho jak udělat aby jej router poslal správným směrem a objevil se na switchi na drátu připojeném k síťovce kterou chceme probudit.

tohle předpokládám znáte: http://support.amd.com/us/Embedded_TechDocs/20213.pdf
tohle je z pohledu síťovky ve vztahu k oběma druhům, tedy wake-up frame / magic packet: http://www.micrel.com/_PDF/Ethernet/app-notes/an-142.pdf
a mohlo by se hodit info kolem strany 68 zde: http://knihy.nic.cz/files/nic/edice/pavel_satrapa_ipv6_2008.pdf

No a pokud si uvědomím že IPv6 nepoužívá ARP a hodíme do googlu správná slova, tedy neighbor discovery wol tak vypadnou stránky třeba jako
http://support.microsoft.com/kb/941145/

Doufám že to alespoň trochu pomůže.
Jsou ve vašem dotazu OPRAVDU VŠECHNY vám dostupné informace o problému?
Linux user since 2007-10-11, Registered #456007
Virtual
| Distribuce
~/slozka znamená /home/"vase jmeno"/slozka
6521 69DE 0F34 FCBC FB1D  DE76 360E 52B2 F71A B8E8

Dogmeat

  • Návštěvník
  • Příspěvků: 26
Re: Wake on LAN v IPv6
« Odpověď #4 kdy: 14 Července 2010, 13:37:23 »
Nakonec jsem se posunul o něco vpřed, ale stále mi dělá problém správně nastavit socket na parametry, co potřebuji.

Rozlišení IP jsem udělal za pomoci getaddrinfo() a funguje bez problémů.

Podařilo se mi i úspěšně vyzkoušet multicast na IPv4 a taktéž vypadá, že funguje.

U IPv6 už vím, že musím použít multicast k odeslání do spárvného subnetu, ovšem nevím, jak ho mám nastavit. Konfigurace setsockopt(..., SO_MULTICAST, ..) se sice na internetu objevuje, ovšem u mě není podle kompilátoru deklarována a nepodařilo se mi najít, kde se nachází (která hlavičková knihovna ji obsahuje). Na žádnou jinou chybu jsem zatím nenarazil.
Momenálně mám IPv6 ve stavu, kdy neobsahuje vůbec setsockopt(), pouze konstrukce:

sap6.sin6_family = AF_INET6;
inet_pton( AF_INET6, multicast, (void *)&sap6.sin6_addr.s6_addr);
sap6.sin6_port = htons(port);

a následně hned sendto()

Jak doplním ono nastavení multicastu, aby vše správně fungovalo?

Díky

Dogmeat

  • Návštěvník
  • Příspěvků: 26
Re: Wake on LAN v IPv6
« Odpověď #5 kdy: 15 Července 2010, 11:04:36 »
Vyřešeno,

multicast je dán adresou a není třeba použít setsockopt(), čili hotovo.

 

Provoz zaštiťuje spolek OpenAlt.