Zanimivo sodelovanje z Japonci
Danes sem dobil mail od osebe po imenu Seiichi Kawamura (NEC BIGLOBE, Ltd.), v katerem me prosi, naj sodelujem z njimi (NEC BigGlobe ISP) in NEC Access Technica (NECAT) na enem RFC draft proposalu, v katerem so se lotili problema, na katerega so naleteli, ko so implementirali dual-stack za access network z dvemi miljoni uporabnikov na Japonskem. Nato tudi ugotovim, da jim je sodelovanje z mano predlagal Randy. Svašta.
To omrežje že na polno deluje in je v produkciji, nakar so ugotovili zanimiv pojav, da skripte, programi in tudi manj “skilled” operaterji niso vajeni dinamičnega formata, v katerem lahko zapišemo IPv6 naslov:
2001:db8:0:0:1:0:0:1/128
2001:0db8:0:0:1:0:0:1/128
2001:db8::1:0:0:1/128
2001:db8::0:1:0:0:1/128
2001:0db8::1:0:0:1/128
2001:db8:0:0:1::1/128
2001:db8:0000:0:1::1/128
2001:DB8:0:0:1::1/128
Vse to je praktično isti naslov. Sedaj pa najlepše – napisali so draft, kjer definirajo prezentacijo IPv6 naslova v velikih omrežjih, tako da bodo aplikacije in skripte, ki ne poznajo konverzije formata in jemljejo IPv6 naslov kot text lahko sparsale zadevo pravilno. Po prvih občutkih bo to takšen IETF flame-war, da se bo kar kadilo, tako da zna biti vse skupaj še zelo zabavno. “Japonci diktirajo svetu, kako zapisovati IPv6 naslov”. Love it 🙂
/jan
P.S: Moram res razmislit, a bi se spustil v to…
Vaš IP naslov (ali ste na IPv6 ?):
18.226.222.76
Odsvetujem, škoda tvojih živcev!
Zapis IPv6 naslova v stringu je definiran; OK, ni determinističen, a — “so what”. Sparsat string, ki naj bi bil IPv6 naslov, ni tako hudo.
Zanimivo vprašanje za programerje; a obstaja kakšna funkcija, skozi katero se pošlje vrednost v vnosnem polju (IPv6 naslov) in zna konvertirati med vsemi pojavnimi oblikami? V bistvu v bazo lahko vedno zapišeš v polni obliki in s tem rešiš vse dileme in težave. Me prav zanima, ali bodo japonci privršali nadme s katanami, če jih vprašam, kakšno težavo sploh probajo rešit 😉 Lemme try that…
/jan
Spreminjati standard, ker programerji ne znajo pravilno implementirat obstoječega standarda v svoje aplikacije? Sliši se kot uvod v while(1), prvi loop bo pa trajal dlje kot kot do 2011 😉
Tale je moja iz PHPja, morda kaj fali, ampak za silo je… Bi se dalo verjetno tudi lepše z regexp.
function expand_ipv6($ip) {
// replace :: with right number of :0
if (strpos($ip, ‘::’) !== false) {
$ip = str_replace(‘::’, str_repeat(‘:0’, 8 – substr_count($ip, ‘:’)).’:’, $ip);
}
// add 0s so each string between two : is 4 chars long
$ip_array = explode(‘:’, $ip);
foreach ($ip_array as $value) {
$value = str_repeat(‘0’, 4 – strlen($value)) . $value . “:”;
$expanded_ip .= $value;
}
return substr($expanded_ip, 0, -1);
}
… pred vpisom v bazo magari še konverzija v long integer (odstraniš : in base_convert() iz šestnajstišekga v desetiškega).
Zanimiv pristop, thnx for sharing.
V tem času sem japoncem že preusmeril razmišljanje v smer, da ne poveljujejo celemu svetu, ampak naj izkoristijo community za iskanje takšnih anomalij na OS-ih in drugih napravah ter to sporočajo proizvajalcu, da se zadeve popravijo. Z odprtimi rokami so idejo sprejeli in sedaj delajo rewrite…
/jan
OMG no … pa saj že skor za vsak jezik obstaja kakšen OS lib ki podpira manipulacijo z IPv6 naslovi.
Python ma rečmo en super lib netaddr in kakršnkoli IPv6 (lahko tudi CIDR pa potem samo interiraš čez podomorežje) mu vržeš v objekt ti zadevo sparsa v svašta – vključno z okrajšano obliko
recimo:
>>> from netaddr import *
>>> ip = IP(‘ffff::’)
>>> str(ip)
‘ffff::’
>>> ip.value
340277174624079928635746076935438991360L
>>> ip.bits()
‘1111111111111111:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000’