+-------------------------+
| Služby IPX-SPX rozhraní |
+-------------------------+
Zjištění přítomnosti ovladače
IPX se vždycky nalepí na Multiplexní přerušení dosu int 2Fh
Toho využijeme pro zjištění přítomnosti a vstupního bodu ovladače.
Vstup: AX = 7A00h
int 2Fh
Výstup: AL = 0 - Není instalován
AL = 0FFh - Je instalováno
ES:DI - Segmen:offset na ovladač
Když se vrátí v AL hodnota 0FFh, musíme si schovat obsahy
registrů ES a DI, ve kterých je adresa na ovladač. Další služby se
nevolají pomocí přerušení, ale právě jako far procedura na této
adrese. Další funkce se volají pomocí této far procedury. POZOR !
Všechny volání ruší obsahy registrů ! (Podíval sem se do příkladů a
zjistil, že ten ovladač se může volat i přerušením 7Ah. Nevím,
jestli to bude fungovat všude, ale já to používám všude a jede to
dobře) Tuto kapitolu jsem rozdělil na dvě části. V první najdete
nejdůležitější funkce, v té druhé ty pokročilé a nebo jejihž použití
mi uniká. Třeba někdo příjde na to, k čemu vlastně jsou.
Seznam služeb:
0. Otevření soketu
1. Uzavření soketu
2. Zjištění nejvýhodnějšího prostředníka
3. Vyslání IPX paketu
4. Příjem IPX paketu
5. Naplánování události IPX
6. Zrušení události
7. Naplánování speciální události
8. Přečtení hodnoty čítače časových událostí
9. Získání celé mezisíťové adresy
10. Ukončení práce driveru
12. Inicializace síťové adresy
13. Zjištění délky IPX paketu
14. Zrušení soketů
15. Vnitřní vyslání IPX paketu
I. Životně (programátorsky) důležité
----------------------------------------------------
Funkce 0 - Otevření soketu
----------------------------------------------------
Vstup: BX = 0000h
AL = Způsob otevření
00h - soket bude otevřen do uzavření a nebo do ukončení
programu
0FFh - bude otevřen až do uzavření. Konec programu nemá
na soket vliv. (používá se pro rezidenty)
DX = číslo soketu (v obráceném pořadí, vyšší byte je v DL)
DX = 0000h - dynamické přidělení (nejspíš ten, který je
volný, po návratu je číslo soketu v DX)
Výstup: AL = 00h - v pořádku
0FEh - tabulka soketů je plná
0FFh - soket je už otevřen
Po nastavení registrů zavoláte call far na adresu vrácenou
v ES:DI po inicializaci int 2Fh. Soket, který je už otevřený
a používá jej jiná aplikace můžete také používat, ale potom
příjemnou zábavu při třídění paketů :-).
Kromě far call můžete použít ještě int 7ah
------------------------------------------------
Funkce 1 - Zavření soketu
------------------------------------------------
Vstup: BX = 0001h
DX = číslo soketu (v obráceném pořadí, vyšší byte je v DL)
Výstup: nic
Po skončení by jste měli všechny sokety uzavřít, aby je mohly
používat další programy.
------------------------------------------------
Funkce 3 - Vyslání IPX paketu
------------------------------------------------
Vstup: BX = 0003h
ES:DI = Ukazuje na strukturu ECB. Bude popsaná dále.
Je to pole parametrů s informacemi o cíli,
soketu ...
Výstup: nic
Zařadí toto ECB do seznamu odesílaných paketů a co nejřív tento
paket pošle. V době čekání na poslání je nastaven příznak který
znamená, že tento blok je používán driverem.
------------------------------------------------
Funkce 4 - Příjem IPX paketu
------------------------------------------------
Vstup: BX = 0004h
ES:DI = Ukazuje na strukturu ECB.
Výstup: nic
Zařadí tento ECB do seznamu čekající na příjem paketu. Když dorazí
paket, vynuluje se příznak a zavolá procedura ESR.(takové přerušení,
které si můžete sami nastavit a obsluhovat)
------------------------------------------------
Funkce 6 - Zrušení události
------------------------------------------------
Vstup: BX = 0006h
ES:DI = Ukazuje na strukturu ECB.
Výstup: AL = 00h - zrušeno v pořádku
0F9h - událost je právě zpracovávána
0FFh - chyba, na tomto se nepracuje
Touto funkcí se dá zrušit vyslání\příjem IPX\SPX paketu nebo
časovač.
------------------------------------------------
Funkce 9 - Získání celé mezisíťové adresy
------------------------------------------------
Vstup: BX = 0009h
ES:SI -> adresa bufferu o délce 10 byte
Výstup: ES:SI -> mezisíťová adresa
Tato funkce vrátí celou mezisíťovou adresu pracovní stanice.
Tuto adresu můžete použít pro nastavení konkrétních adres
cílovývch stanic.
II. Pokročilé a podivné
------------------------------------------------
Funkce 2 - zjištění nejvýhodnějšího prostředníka
------------------------------------------------
Vstup: BX = 0002h
ES:DI -> cílová mezisíťová adresa stanice
ES:DI -> 6 - byte buffer pro umístění adresy prostředníka
Výstup: AL = 00h úspěšné provedení funkce
0FAh nebyla zjištěna adresa prostředníka
CX - očekávaná doba pro poslání jednoho paketu (576 byte)
do cílového uzlu (v hodinových intervalech)
ES:DI -> lokální adresa prostředníka (nebo přímo uzlu)
Tato funkce mi není uplně jasná, můžete si přečíst její doslovný
přepis:
Tato funkce zjistí cílovou adresu paketu v lokální síti podle celé
mezisíťové adresy. Je-li příjemce paketu fyzicky připojen na stejné
lokální síti, je adresa lokálního cíle paketu stejná s adresou
tohoto uzlu. Jinak adresa lokálního cíle paketu je uzlová adresa
mostu, který paket přenese do cílové adresy.
------------------------------------------------
Funkce 5 - Naplánování událostí IPX
------------------------------------------------
Vstup: BX = 0005h
AX = doba čekání
ES:DI = Ukazuje na strukturu ECB.
Výstup: nic
Touto funkcí si můžete plánovat jakýsi časovač. Po uplynutí
nastaveného času se zavolá procedura ESR definovaná v ECB.
------------------------------------------------
Funkce 7 - Naplánování speciální události IPX
------------------------------------------------
Vstup: BX = 0007h
AX = doba čekání
ES:DI = Ukazuje na strukturu ECB.
Výstup: nic
Podobné jako předchozí služba 05, ale tato je asi něčím speciální.
Zatím ale nevím čím :-).
------------------------------------------------
Funkce 10 - Ukončení práce driveru
------------------------------------------------
Vstup: BX = 000Ah
Výstup: nic
Tato funkce zakáže síťovému driveru vykonávat nějakou činost.
Nikdy jsem to nepoužil, třeba to k něčemu bude.
------------------------------------------------
Funkce 12 - inicializace síťové adresy
------------------------------------------------
Vstup: BX = 000Ch
CX:DX - Globální adresa sítě - ??????
ES:DI - Flag "OSINCRITICALSECTION"
DS:SI - režim otevření soketu
Výstup: nic
Doslovný přepis funkce:
Adresa nemůže být změněna, dokud nebyla provedena její inicializace.
(Ano, opravdu v literatuře o tom víc není ani zmínka. Nemám vůbec
představu o práci této funkce.)
------------------------------------------------
Funkce 13 - Zjištění délky IPX paketu
------------------------------------------------
Vstup: BX = 000Dh
Výstup: AX = maximální délka paketu
CX = časový interval potvrzování - ???
Vrátí maximální délku paketu. Většinou to je 576 byte
včetně hlavičky.
------------------------------------------------
Funkce 14 - Zrušení soketů
------------------------------------------------
Vstup: BX = 000Eh
Výstup: nic
Zruší všechny dočasné sokety otvřené jako dočasné. (Ty, které
se samy uzavírají po skončení programu.) V některých verzích
mohou být uzavřeny všechny sokety.
------------------------------------------------
Funkce 15 - Vnitřní služba vyslání IPX paketu
------------------------------------------------
Vstup: BX = 000Fh
ES:SI - ukazatel na ECB
Výstup: nic
Podobné jako funkce 3, ale neumožňuje posílání víc fragmentů
v jednom paketu.
výheň