IPv4 címkiosztó program Hardverközeli programozás 1 Beadandó feladat



Hasonló dokumentumok
Programozás I gyakorlat

5.1.4 Laborgyakorlat: A Windows számológép használata hálózati címeknél

HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek

C programozási nyelv Pointerek, tömbök, pointer aritmetika

Feladat. Bemenő adatok. Bemenő adatfájlok elvárt formája. Berezvai Dániel 1. beadandó/4. feladat április 13. Például (bemenet/pelda.

A számítástudomány alapjai. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem

Írjon olyan programot a standard könyvtár alkalmazásával, amely konzolról megadott valós adatokból meghatározza és kiírja a minimális értékűt!

Operációs rendszerek. 9. gyakorlat. Reguláris kifejezések - alapok, BASH UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Windows rendszeradminisztráció és Microsoft szerveralkalmazások támogatása. Kocsis Gergely, Supák Zoltán

Algoritmizálás és adatmodellezés tanítása beadandó feladat: Algtan1 tanári beadandó /99 1

ELSŐ LÉPÉSEK A SZÁMÍTÓGÉPEK RODALMÁBA AMIT A SZÁMÍTÓGÉPEKRŐL TUDNI ÉRDEMES

Programozási alapismeretek beadandó feladat: ProgAlap beadandó feladatok téma 99. feladat 1

Programozás alapjai. 5. előadás

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek

1. Egyszerű (primitív) típusok. 2. Referencia típusok

Programozás I gyakorlat. 10. Stringek, mutatók

Programozás I. zárthelyi dolgozat

Programozás Minta programterv a 1. házi feladathoz 1.

Adatszerkezetek I. 8. előadás. (Horváth Gyula anyagai felhasználásával)

Szövegek C++ -ban, a string osztály

Gyakorló feladatok az 1. nagy zárthelyire

Alhálózatok létrehozása

Szimulációs technikák

Programozás I gyakorlat

Vezérlési szerkezetek

Rekurzió. Dr. Iványi Péter

Webprogramozás szakkör

Tartalom Keresés és rendezés. Vektoralgoritmusok. 1. fejezet. Keresés adatvektorban. A programozás alapjai I.

Csomagok dróton, üvegen, éterben. Szent István Gimnázium, Budapest Tudományos nap Papp Jenő 2014 április 4

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós augusztus 29. Széchenyi István Egyetem, Gy r

Számítógép-hálózatok. Gyakorló feladatok a 2. ZH témakörének egyes részeihez

Táblázatkezelés 5. - Függvények

Hálózati architektúrák és Protokollok GI 6. Kocsis Gergely

Keresés és rendezés. A programozás alapjai I. Hálózati Rendszerek és Szolgáltatások Tanszék Farkas Balázs, Fiala Péter, Vitéz András, Zsóka Zoltán

2. Milyen értéket határoz meg az alábbi algoritmus, ha A egy vektor?. (2 pont)

Dr. Wührl Tibor Ph.D. MsC 04 Ea. IP P címzés

2011 TAVASZI FÉLÉV 3. LABORGYAKORLAT PRÉM DÁNIEL ÓBUDAI EGYETEM. IP címzés. Számítógép hálózatok gyakorlata

HomeManager - leírás. advix software solutions.

Operációs rendszerek. 9. gyakorlat. BASH recap, reguláris kifejezések UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Programozási technikák Pál László. Sapientia EMTE, Csíkszereda, 2009/2010

AXEL Számlázó és készletnyilvántartó program

Információs Technológia

Programtervezés. Dr. Iványi Péter

A függvény kód szekvenciáját kapcsos zárójelek közt definiáljuk, a { } -ek közti részt a Bash héj kód blokknak (code block) nevezi.

1. Feladat: beolvas két számot úgy, hogy a-ba kerüljön a nagyobb

C programozás. { Márton Gyöngyvér, 2009 } { Sapientia, Erdélyi Magyar Tudományegyetem }

Felvételi tematika INFORMATIKA

Függvények II. Indítsuk el az Excel programot! A minta alapján vigyük be a Munka1 munkalapra a táblázat adatait! 1. ábra Minta az adatbevitelhez

Gráfok 2. Legrövidebb utak, feszítőfák. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor

Programozás C++ -ban 2007/7

Programozás I gyakorlat

Gyakorló feladatok a 2. ZH témakörének egyes részeihez. Számítógép-hálózatok. Dr. Lencse Gábor

8. gyakorlat Pointerek, dinamikus memóriakezelés

Alkalmazott modul: Programozás. Programozási tételek, rendezések. Programozási tételek Algoritmusok és programozási tételek

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós szeptember 27. Széchenyi István Egyetem, Gy r

2014 UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

A 2013/2014 tanévi Országos Középiskolai Tanulmányi Verseny első forduló javítási-értékelési útmutató. INFORMATIKA II. (programozás) kategória

Hálózati architektúrák laborgyakorlat

FELHASZNÁLÓI ÚTMUTATÓ

Objektumorientált Programozás VI.

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

INFORMATIKAI ALAPISMERETEK

Algoritmusok és adatszerkezetek gyakorlat 07

Rendezések. Összehasonlító rendezések

Dropbox - online fájltárolás és megosztás

C programozás. 6 óra Függvények, függvényszerű makrók, globális és

file:///d:/okt/ad/jegyzet/ad1/b+fa.html

C memóriakezelés. Mutató típusú változót egy típus és a változó neve elé írt csillag karakterrel hozhatjuk létre.

IPv6 Elmélet és gyakorlat

Órarendkészítő szoftver

Táblázatok. Táblázatok beszúrása. Cellák kijelölése

Mappák megosztása a GroupWise-ban

Programozás alapjai gyakorlat. 2. gyakorlat C alapok

II. Mérés SZÉCHENYI ISTVÁN EGYETEM GYŐR TÁVKÖZLÉSI TANSZÉK

Programozás I gyakorlat

Információs Technológia

van neve lehetnek bemeneti paraméterei (argumentumai) lehet visszatérési értéke a függvényt úgy használjuk, hogy meghívjuk

Bevezetés, a C++ osztályok. Pere László

Ugrólisták. RSL Insert Example. insert(22) with 3 flips. Runtime?

MATEMATIKAI FÜGGVÉNYEK

CONTORG EVOLUT ÉS DOS PROGRAMOK ADATBEVITELI KÉPERNYŐINEK ÖSSZEHASONLÍTÁSA

A C programozási nyelv VI. Parancssori argumentumok File kezelés

Tájékoztató. Használható segédeszköz: -

Készítette: Nagy Tibor István

Alhálózatok. Bevezetés. IP protokoll. IP címek. IP címre egy gyakorlati példa. Rétegek kommunikáció a hálózatban

Thermo1 Graph. Felhasználói segédlet

Mintavételes szabályozás mikrovezérlő segítségével

Bevezetés a programozásba I.

Kedves Diákok! A feladatok legtöbbször egy pontot érnek. Ahol ettől eltérés van, azt külön jelöljük.

Novell és Windows7 bejelentkezési jelszavak módosítása

2018, Funkcionális programozás

Programozási segédlet

Assembly programozás: 2. gyakorlat

end function Az A vektorban elõforduló legnagyobb és legkisebb értékek indexeinek különbségét.. (1.5 pont) Ha üres a vektor, akkor 0-t..

Keresési algoritmusok, optimalizáció

Algoritmuselmélet. 2-3 fák. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem. 8.

C++ programozási nyelv

C++ programozási nyelv

Bevezetés a számítástechnikába

Átírás:

IPv4 címkiosztó program Hardverközeli programozás 1 Beadandó feladat Fejlesztői dokumentáció Készítette: Kovács Aurél Email cím: kovacsaurel@gmail.com Weboldal: http://aurel192.net46.net/hardprog/ Neptun-kód: PZR28M Debreceni Egyetem - Informatikai Kar - Mérnök Informatikus (B.Sc.) szak

Tartalomjegyzék 1. IPv4 Címkiosztó program..3.oldal 1.1 Kompatibilitás 3.oldal 1.2 A program leírása... 3.oldal 2. Függvények bemutatása... 3.oldal 2. oldal

1. IPv4 Címkiosztó program 1.1 A program leírása A IPv4 Címkiosztó egy szimulációs program mely arra használható hogy egy címtartomány definiálása után, kisebb alhálózatokra bonthatjuk azt. A kérések alapján hálózat címeket oszt ki a program és minden hálózati adatot kiszámol. Az alhálózatokat törölhetjük, bináris keresőfát építhetünk a netmask prefixük alapján. 1.2 Kompatibilitás A program kezeléséhez használható az egér és a billentyűzet is. Billentyűzetről való menü vezérlés esetén a már megszokott ALT, kurzormozgató billentyűk, Enter, Esc használhatóak. A felhasználói felület Windows XP-n műkődik a leggyorsabban. A tesztelés során Linux Ubuntu-n Wine-al emulálva gyorsabban futott mint Windows 7 alatt. 2.1 Az Allocate1 nevű függvény leírása Függvény teljes neve: void allocate1(char *alias, int claimsize) A függvény a hardprog-128.c nevű állomány elején található Ez a függvény végzi a hálózat helyének kiszámítását és elhelyezését. A paraméterlistában a két legfontosabb dolgot adom csak meg a függvénynek, a hálózat nevét, és a kívánt méretét. A függvény azzal kezdődik hogy kiszámolom melyik az a szám ami kettőnek az a legkisebb hatványa amelyik éppen több, vagy egyenlő az igény méretével. Például 200-as igény esetén ahol 254 host fér el maximuma hálózaton, ott a 256 ez a szám, vagyis 2^8-on. A kiosztandó hálózat netmask prefixje pedig 32 mínusz az előzőleg kiszámolt szám. nm = 32-i; Következő lépésben a netmask prefix alapján kiszámolom hogy mik lesznek a netmask pontozott decimális oktetjei, és azt hogy minnyivel nőhetnek az oktetek az adott hálózatban. Például egy /24-es netmask prefixű hálózatnál az első két oktet bármennyivel nőhet a teljes tartományéhoz képest, a harmadik oktet az biztos hogy egyesével fog nőni, és a negyedik oktet pedig mindig nulla lesz. A legelső kérés érkezésekor biztos hogy a hálózatnak a címe a teljes tartomány elejével fog megegyezni, ezért ott csak annyit kell leellenőrizni, hogy belefér-e a teljes tartományba a hálózat, ha igen, akkor le lehet tárolni, ha nem akkor a függvény végére ér egyből és hibaüzenetet ír ki a program. A másik eset pedig az hogy nem a legelső kérés érkezett, ilyenkor már kicsit bonyolultabb, mert meg kell keresni azt a tartományt ahova befér egyben az igénynek megfelelő hálózat. 3. oldal

Kezdőértékként a trynet nevű struktúra értékekként kapja a teljes tartomány elejének a címét, és ebből egy előjel nélküli hosszú egész számot is kiszámolok, úgy hogy helyi értéket adok az okteteknek. A fejlesztés során ebben a részben könnyebbnek találtam a hosszú egészekkel való számolást, mert a négy oktet összehasonlítása sokkal bonyolultabb. A broadcast címet is tárolom hosszú egészként, ezt úgy számolom hogy az előzőleg kiszámított hálózat címhez hozzáadom azt a számot ahány host maximum elfér a hálózaton plusz kettőt. A stop és az afit nevű egész típusú segédváltozókat lenullázom Két egymásba ágyazott ciklussal leellenőrzöm hogy az a hálózatcím és broadcast cím amivel éppen próbálkozok az nincs-e benne valamelyik már meglévő hálózat tartományábán. Ha benne van, tehát nem helyezhető el oda akkor a ciklusok leállnak, és a stop változó értékét növelem. Ezután ha a stop értéke nem nulla akkor az azt jelenti hogy az adott helyen nem helyezhető el a hálózat, ezért növelni kell a trynet struktúra hosszú egészként tárolt hálózatcímét annyival mint amekkora a kívánt hálózat mérete, és visszaugrani a programban oda ahol a broadcast címet számítom az előbb említett hálózat cím alapján. Ha a stop értéke nulla akkor arra a helyre amivel próbálkoztam le lehet tárolni a hálózatot, de egy dolgot még le kell előtte ellenőrizni, azt hogy nem nyúlik-e túl a teljes tartomány értékein. Ha az utóbbi feltétel is sikeresen teljesül, akkor tárolhatóak le a hálózat adatai. A függvény végén pedig ha sikerült elhelyezni a hálózatot, akkor kiíratom az összes letárolt adatot, ha pedig nem helyezhető el a hálózat, akkor hibaüzenetet ír ki a program. 2.2 A newclaim nevű függvény bemutatása Függvény teljes neve: void newclaim() A függvény futásának két lehetséges módja lehet, az egyik eset ha a claimdelay nulla, a másik pedig ha a claimdelay egy. Ha a claimdelay nulla akkor a kéréseknek megfelelően nem osztom ki egyből a hálózatokat, hanem letárolom egy külön erre a célra fentartott tömbstruktúrában. Ha a claimdelay értéke egy akkor a kéréseket azonnal kiosztom, vagyis a az allocate1 nevű függvénynek átadom a kérés méretét és a hálózat nevét. 4. oldal

2.3 Az allocate nevű függvény bemutatása Függvény teljes neve: void allocate() Ez a függvény akkor indul el ha az Allocate menüpontra kattintok az Edit menüben. Paraméterlistája nincsen, mert globális változókkal dolgozik. Mindössze annyit csinál a függvény hogy méret szerint csökkenő sorrendbe állítja az összegyűlt kérési igényeket, majd a csökkenő sorba rendezett igényeket egyesével megpróbálja kiosztja az allocate1 függvény meghívásával. 2.4 A deletefirstclaim és deletelastclaim nevű függvények bemutatása Függvények teljes neve: int deletelastclaim(), int deletefirstclaim() A függvények a hardprog-128.c nevű állományban található. A láncolt listában használok minden egyes hálózathoz egy egész értéket is, ami azt tárolja hogy hanyadikként kiosztott hálózat az. Ezek a függvények úgy keresik meg azt az elemet amelyiket törölni kell, hogy elindul egy ciklus vagy nulláról felfelé, vagy pedig a hálózatok számáról lefelé nulláig, függően attól hogy honnan akarunk törölni. Ha a ciklus futása közben talál olyan értékű elemet amit törölni szeretnék, akkor letörlöm, majd kilépek a ciklusból. 2.5 A deleteclaim nevű függvény bemutatása Függvény teljes neve: int deleteclaim() Hálózatot törölni kétféle képen lehet, a nevének a kezdőbetűje alapján, vagy a hálózat címének és netmaskjának a megadásával. Ha a beolvasott string mérete kisebb mint öt karakter akkor biztos hogy nem a hálózatcím alapján akarok törölni hanem a neve alapján. Ebben az esetben a DeleteByName függvényt használom, aminek paraméterként az előbb beolvasott stringet adom át, ami a hálózat nevét tartalmazza. Ha a beolvasott string mérete nagyobb mint négy karakter, akkor biztos hogy hálózati cím alapján szeretnék törölni. Ilyenkor a DeleteByValue függvényt használom. 5. oldal

2.6 A fragmentation nevű függvény bemutatása Függvény teljes neve: int fragmentation() A feladat specifikációi szerint nem volt szükség ilyen funkcióra, de a fejlesztés során így jobban átláttam a kiosztott hálózatokat, és megkönnyítette a tesztelést. A hálózat töredezettségét rajzolja ki vizuálisan. 76 karakter szélességben tudom kiíratni a teljes hálózati tartományt. 2.7 A fragmentation nevű függvény bemutatása Függvény teljes neve: int fragmentation() A feladat specifikációi szerint nem volt szükség ilyen funkcióra, de 2.8 A defnet nevű függvény bemutatása Függvény teljes neve: void network() A függvény a defnet.c nevű állományban található. A Felhasználói felület megírása után a network() függvény megírásába kezdtem bele, de ezen a függvényen még lehetne változtatni, mert itt mindent karaktertömbökben tároltam, szerencsére hamar rájöttem hogy ez nem célravezető, így a későbbiekben inkább bitoperátorokat alkalmaztam. A függvény globális változókat módosít, kiszámolja hogy mi lesz a hálózat kezdőcíme, és a legutolsó kiosztható címe. Majd ki is írja a teljes tartományra vonatkozó adatokat. 2.9 A iptoulongint nevű függvény bemutatása Függvény teljes neve: unsigned long int iptoulongint(int o1,int o2,int o3,int o4) A függvény a defnet.c nevű állományban található. Ezt a függvényt arra használom hogy az ip címek négy oktetje alapján egy előjel nélküli hosszú egész számot számoljak ki. A működése egyszerűen annyi hogy helyi értékeket társítok az egyes oktetekhez, az első oktet 256 a harmadikon, a második oktet 256 a másodikon, a harmadok oktet 256, az utolsó pedig egy. 6. oldal

2.10 A ulonginttoip nevű függvény bemutatása Függvény teljes neve: int ulonginttoip(unsigned long int ulongintip) A függvény a defnet.c nevű állományban található. Ez az előző függvény párja, csak visszafelé konvertálja az adatokat. A paraméterlistájában megkap egy előjel nélküli hosszú egész számot, és ez alapján négy darab globális segédváltozót módosít, amikbe beleírja a négy oktetet. 2.11 Az Insert nevű függvény bemutatása Függvény teljes neve: void Insert(int pos, char *alias, int snaokt1, int snaokt2, int snaokt3, int snaokt4, int data, int cntr, Node **start) Ez a függvény a láncolt listába való új elem beszúrását oldja meg. A függvény megállapítja hogy hova kell letárolni az új elemet, megkeresi a végleges helyét, és meghívja a Node *MakeNode függvényt, melynek paraméterül a letárolandó hálózat adatait adja át. 2.12 A Node *MakeNode nevű függvény bemutatása Függvény teljes neve: Node *MakeNode(int data, char *alias, int snaokt1, int snaokt2, int snaokt3, int snaokt4, int cntr) Az új elem számára memóriát foglal le a program, majd elhelyezi azt a láncolt listában. 2.13 A DeleteByName nevű függvény bemutatása Függvény teljes neve: int DeleteByName(char *alias, Node **start) A láncolt listából lehet a függvény segítségével törölni egy adott elemet a hálózat nevének kezdőbetűje alapján. A függvény visszatérési értéke 0 vagy 1 attól függően hogy megtalálta-e a törldenő elemet. 7. oldal

2.14 A DeleteByValue nevű függvény bemutatása Függvény teljes neve: void Traverse(Node *x) A láncolt listából lehet a függvény segítségével törölni egy adott elemet a hálózat sorszáma alapján. A függvény visszatérési értéke 0 vagy 1 attól függően hogy megtalálta-e a törldenő elemet. 2.15 A Traverse nevű függvény bemutatása Függvény teljes neve: void Traverse(Node *x) A láncolt lista elemeinek a bejárására szolgál. 2.16 A bbst nevű függvény bemutatása Függvény teljes neve: int bbst() A függvény a bstree.c nevű állományban található. A bináris keresőfa feltöltését oldja meg a függvény. 2.17 A printout nevű függvény bemutatása Függvény teljes neve: void printout(node * tree) A függvény a bstree.c nevű állományban található. A bináris keresőfa bejárását oldja meg a függvény. 2.18 A bstinsert nevű függvény bemutatása Függvény teljes neve: void bstinsert(node ** tree, node * item) A függvény a bstree.c nevű állományban található. A bináris keresőfába való bejillesztést oldja meg a függvény. 8. oldal