Zextra, stavar stoji otprilike tako kako si napisao samo si upotrebio pogresnu kombinaciju adrese i maske (10.0.0.1/24 u stari predstavlja mrezu 10.0.0.0/24 kao i sve ostale adrese iz tvog primera). Recimo da jedna mreza moze ovako da izgleda:
Kôd:
10.0.0.0/16
+-10.0.0.0/24
+-10.0.1.0/24
+-10.0.2.0/24
+-10.0.8.0/23
+-10.0.8.0/24
+-10.0.9.0/24
+-10.0.10.0/24
+-10.0.16.0/21
+-10.0.16.0/22
+-10.0.16.0/23
+-10.0.16.0/24
+-10.0.16.0/25
+-10.0.16.0/26
+-10.0.16.0/27
+-10.0.16.0/28
+-10.0.16.0/29
+-10.0.16.0/30
+-10.0.16.0/32
+-10.0.16.1/32
+-10.0.16.2/32
+-10.0.16.3/32
+-10.0.16.4/30
+-10.0.16.4/32
+-10.0.16.5/32
+-10.0.16.6/32
+-10.0.16.7/32
+-10.0.16.8/29
+-10.0.16.16/28
+-10.0.32.0/27
+-10.0.16.64/26
+-10.0.16.128/25
+-10.0.17.0/24
+-10.0.18.0/23
+-10.0.20.0/22
Ono sto mi je problem, to je da ako sada recimo u podatke dodam mrezu 10.0.17.0/30, onda treba da upadne kao podmreza od 10.0.17.0/24, a ako bih nakon toga dodao i mrezu 10.0.17.0/25, ona bi u hijerarhiji morala da se nadje izmedju 10.0.17.0/24 i 10.0.17.0/30.
Kvaka je naravno u tome sto bih hteo da to ubacim u relacionu bazu, koja nema hijerarhijsku strukuru....
Redosled nije tesko dobiti, posto je svaki IP u stvari 32-bitni broj, dovoljno je da tabelu sortiram po IP i masci.
Problem je utvrditi hijerarhijsku zavisnost jer je ona sakrivena u binarnom AND izmedju IP broja i maske te je:
(10.0.16.0 AND /21) = (10.0.16.185 AND /21)
gde se IP brojevi i maske zamenjuju odgovarajucim 32bitnim celobrojnim vrednostima, a AND je binarna operacija.
U opstem slucaju, ako je izraz (M AND /MM) = (N AND /MM1) tacan, to znaci da cvor N pripada mrezi M/MM gde je N IP adresa cvora, M ip adresa mreze a /MM maska mreze.
SQL, cini mi se, ne zna da radi binarne operacije. Kad bih mogao da uradim binarno AND u SELECT to bi mi resilo problem.