Anasayfa »
Omnet'te Ağ Paketleri ve Ağ Mesajlarına Genel Bir Bakış
Yazar:
Ali Arslan
Mesajlar, Omnet'te merkezidir ve bir modelde, mesajlara ait objeler olayları, paketleri, komutları, görevleri, alıcıları veya diğer türden varlıkları temsil ederler.
Omnet'te mesajlara ait objeler, cMessage adlı sınıftan ve bu sınıfa ait olan cPacket alt sınıfı tarafından elde edilmektedir.
Ağlarda, cPacket sınıfı ağ paketleri için kullanılır. Frameler, datagramlar, taşıma paketleri vb. gibi. cMessage sınıfı ise geri kalan her şey için kullanılır. Kullanıcılar cMessage ve cPacket sınıflarına yeni türler veya yeni veriler eklemeleri konusunda özgürdürler.
cMessage şunları içerir :
Mesajı Adı (message name) alanı, programcı tarafından kolaylıkla kullanılabilen, const char * tipinde bir stringtir. Grafiksel çalışma arayüzünde mesaj adı birçok yerde görüntülenir. Bu nedenle açıklayıcı bir ad seçmek genellikle daha faydalı olacaktır. Mesaj adları cObject sınıfından miras alınmaktadırlar.
Mesaj Türü (message kind) integer bir türdür. Bazı negatif değerler simülasyon kütüphanesinde rezerve edilmiş olsa da sıfır ve pozitif değerler bir model içerisinde herhangi bir amaçla kolaylıkla kullanılabilirler. Mesaj türü, genellikle mesajın rolü, türü, kategorisi veya kimliği gibsinden iletilen bir değeri taşımak için kullanılır.
Zamanlama Önceliği (scheduling priority) adlı alan, varış zamanı aynı olan mesjaların teslimat sırasını belirlemek için, genellikle simülasyon çekirdeği tarafından kullanılır. Pratikte çok nadir olarak kullanılır.
Send time, arrival time, source module, source gate, destination module, destination gate gibi alanlar mesajların son gönderimi veya programlanması hakkında bilgileri içerirler ve bu alanlar modelden değiştirilmemelidirler. Bu alanlar, mesajlar gelecekteki olaylar için programlanmış iken (future events set kısaca FES), öncelikli olarak simülasyon çekirdeği tarafından kullanılırlar. Çünkü mesaj bir modüle iletildiği zaman bu bilgiler halen mesaj objesinde yer almaya devam ederler.
Time stamp, bir zaman damgasıdır. Önemli bir alandır. Simülasyon çekirdeği tarafından incelenmez veya değiştirilmez. Kullanıcı bunu istediği bir amaç için kullanmakta özgüdür. Bu zaman bilgisi, varış bilgisi (arrival time) ile karıştırılmamalıdır.
parameter list, control info and context pointer alanları, bazı simülasyon görevlerini programlamayı kolaylaştıran alanlardır.
Yukarıda açıklanan ve cMessage sınıfı içerisinde yer alan bu ifadelerin bir kısmı simülasyonun çekirdeği için kullanılırken, bazıları da programcıya kolaylıklar sağlaması için sunulmuşlardır.
cPacket sınıfının, ile cMessage sınıfının bir alt sınıfı olduğunu söylemiştik. Bu sınıf ise, cMessage içerisinde sunulan ağ paketlerini temsil eden alanları genişletleten faydalı bir sınıftır.
cPacket sınıfı ise şunları içerir :
Packet length (mesaj uzunluğu) alanı, paket uzunluklarını bit cinsinde temsil eder. Bir bağlantıya atanan bir veri hızı boyunca bir paket yolculuk ederken, simülasyon çekirdeği packet length alanını kullanarak iletim süresini hesaplar ve ayrıca sıfırdan farklı bir bit hata oranıyla, paket iletim kanallarında hata modellemesi için kullanılır.
Encapsulated packet (kapsüllenmiş paket) alanı, protokol katmanlarının modellenmesine, kapsülleme (encapsulation) ve kapsülleme (encapsulation) kavramını destekleyerek, yardımcı olur.
Bit error flag (bit hatası bayrağı) alanı, paketin sıfır olmayan paket hata oranına (packet error rate kısa PER) sahip bir kanal üzerinden veya bit hata oranına (bit error rate kısa BER) sahip bir kanal üzerinden gönderildikten sonra, hata modellemesi sonucunu taşır. Paketi aldıktan sonra bu bayrağı incelemek ve üzerinde hareket etmek alıcının sorumluluğundadır.
is-reception-start flag olarak geçen bu ifadenin Türkçe'ye çevirilmesi pek mantık değil ama bunun için özetle, "alım başlangıcı mı değil mi" değerini tutan bir bayrak diyebiliriz. Bu bayrak mesaj paketinin, paket veri hızı olan kanaldan geçtikten sonra, alımın başlangıcını mı yoksa bitişini mi temsil ettiğini söyler. Bu bayrak ise, deliver-on-reception-start flag bayrağı tarafından kontrol edilir. Bunu bayrağın açıklamasına özetle, "alış başlangıcı üzerinden teslim et" anlamı taşıyan bir bayraktır.
Bayrak ifadesi bilgisayar alanında, "işaret, sinyal, bir şeyin durumunu belirten değişken" anlamlarına gelir.
Konuya yaptığım ufak tefek eklemeler haricinde ilgili yazı Omnet dökümantasyonundan çevrilmiştir. Aklınıza takılan noktaları aşağıdaki yorum formu aracılığıyla iletebilirsiniz. İyi çalışmalar.
OMNeT++ Class Not Found Hatası ve Çözüm Yöntemi
Yazar:
Ali Arslan
Uzun süre TOSSIM kullandıktan sonra OMNeT++ ağ simlülatörünü kullanmaya başladım. Elbette ki her yeni başlangıcın bazı alışma süreçleri olacaktır.
İlk kodlamamı yaparken, şöyle bir sorunla karşılaştım :
Sorunda da anlayacağınız üzere ağ simülasyonu "blogkafem" isimli sınıfı bulamıyor. Bu problemin çözümü için ilk başta internette Eclipse ile ilgili bazı bağlantı ayarlarınızda problemler olduğunu anlatan bazı web siteleriyle karşı karşıya gelebilirsiniz. Sorunun Eclipse'ten (omnet'in varsayılan yazılım geliştirme editörü) kaynaklanıp kaynaklanmadığını anlamak için ise, hazır örneklerden bir tanesini çalıştırıp simüle etmenizi öneririm. Şayet herhangi bir sıkıntı yaşamazsanız ve sıkıntı yalnızca sizin yazdığınız koda meydana geliyorsa ufak bir ayrıntıyı gözden kaçırdığınızı söyleyebilirim.
Çözüm gayet basit aslında. Bunu anlamak için, biraz daha fazla dikkatli olmak hatayı iyi anlamak yeterli olacaktır.
.NED uzantılı (Network Description File) olan dosyanızı açın.
Örnek olsun diye benim kodumun şöyle olduğunu varsayıyorum.
Burada, simple olarak tanımlı "blogkafem" sınıfı ile,
.CC uzantılı program dosyasının adı ve class ismi aynı olmalı.
Bakınız, blogkafem.cc uzantılı program dosyasının içeriği :
Bu isimlerin farklı olması durumunda, OMNeT simülatörü .NED uzantılı dosyanızdaki sınıf ile .CC uzantılı dosyanızda yer alan sınıfları birbirlerinden bağımsız sınıflar olarak değerlendirdiği için, bu durum size hata olarak dönmektedir.
Konuyla ilgili yorumlarınızı alttaki yorum formu aracılığıyla bana iletebilirsiniz. Kolay gelsin.
İlk kodlamamı yaparken, şöyle bir sorunla karşılaştım :
Error in module (omnetpp::cModule) ag (id=1) during network setup: Class "blogkafem" not found -- perhaps its code was not linked in, or the class wasn't registered with Register_Class(), or in the case of modules and channels, with Define_Module()/Define_Channel().
Sorunda da anlayacağınız üzere ağ simülasyonu "blogkafem" isimli sınıfı bulamıyor. Bu problemin çözümü için ilk başta internette Eclipse ile ilgili bazı bağlantı ayarlarınızda problemler olduğunu anlatan bazı web siteleriyle karşı karşıya gelebilirsiniz. Sorunun Eclipse'ten (omnet'in varsayılan yazılım geliştirme editörü) kaynaklanıp kaynaklanmadığını anlamak için ise, hazır örneklerden bir tanesini çalıştırıp simüle etmenizi öneririm. Şayet herhangi bir sıkıntı yaşamazsanız ve sıkıntı yalnızca sizin yazdığınız koda meydana geliyorsa ufak bir ayrıntıyı gözden kaçırdığınızı söyleyebilirim.
Çözüm gayet basit aslında. Bunu anlamak için, biraz daha fazla dikkatli olmak hatayı iyi anlamak yeterli olacaktır.
.NED uzantılı (Network Description File) olan dosyanızı açın.
Örnek olsun diye benim kodumun şöyle olduğunu varsayıyorum.
simple blogkafem
{
gates:
input in;
output out;
}
Burada, simple olarak tanımlı "blogkafem" sınıfı ile,
.CC uzantılı program dosyasının adı ve class ismi aynı olmalı.
Bakınız, blogkafem.cc uzantılı program dosyasının içeriği :
class blogkafem : public cSimpleModule{
protected:
virtual void initialize();
virtual void handleMessage(cMessage *msg);
};
Bu isimlerin farklı olması durumunda, OMNeT simülatörü .NED uzantılı dosyanızdaki sınıf ile .CC uzantılı dosyanızda yer alan sınıfları birbirlerinden bağımsız sınıflar olarak değerlendirdiği için, bu durum size hata olarak dönmektedir.
Konuyla ilgili yorumlarınızı alttaki yorum formu aracılığıyla bana iletebilirsiniz. Kolay gelsin.
OMNeT'in Ubuntu'ya Kurulumuyla İlgili Sorunları ve Çözümler
Yazar:
Ali Arslan
OMNeT++ simülasyon programın Ubuntu'ya kurulumu ile ilgili YouTube üzerinde birçok video olduğu için kurulum aşamalarını anlatmak yerine direkt olarak karşılaşabilecek muhtemel sorunları ve çözüm yöntemlerini paylaşmak istedim.
cdynamicexpression.cc Sorunu Hata Çıktısı :
Sonrasında ise ./configure komutunu çalıştırıp, ardından make komutu ile kurulumu tamamlamayı tekrar deneyin.
Bu işlem sonrasında herhangi bir sıkıntı yaşamazsınız şanslısınız. Omnet'i kullanmaya başlayabilirsiniz fakat; bir hata almanız da muhtemeldir. Şayet hata aldıysanız, yazıyı okumaya devam edin.
osg-earth Sorunu Hata Çıktısı :
osg-earth hatasının çözümü için ise aşağıdaki paketleri terminal üzerinden sırasıyla kurmanızı öneririm :
Son olarak make cleanall komutunu çalıştırın. Sonrasında ise yine ./configure komutunu çalıştırıp, ardından make komutu ile kurulumu tamamlamayı tekrar deneyin.
Tüm işlemlerin başarılı olması durumunda terminalde şöyle bir çıktı alacaksınız : Now you can type "omnetpp" to start the IDE
Terminale "omnetpp" yazdığınız takdirde program sorunsuz bir şekilde açılacaktır. Bakınız :
Ek Bilgiler :
Şayet OMNeT'te yeniyseniz ve GUI araçları olan TKENV veya QTENV ile ilgili hata alırsanız, başlangıçta bunları şu şekilde devre dışı bırakabilirsiniz :
Komut satırına;
yazdıktan hemen sonra, gelecek olan metin editöründen
Java ile ilgili hata alırsanız,
Bunun için terminale şunu yazmanız yeterli olacaktır :
cdynamicexpression.cc Sorunu Hata Çıktısı :
Creating executable: out/clang-release//osg-earthBu hatanın (cdynamicexpression.cc hatasının) çözümü için clang'ı kurmanız yeterli olacaktır. Bunun için ise terminale şu komutu yazmanız gerekmektedir :
/usr/bin/ld: cannot find -losgEarthFeatures
/usr/bin/ld: cannot find -losgEarthSymbology
/usr/bin/ld: cannot find -losgEarthAnnotation
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Makefile:108: recipe for target 'out/clang-release//osg-earth' failed
make[2]: *** [out/clang-release//osg-earth] Error 1
Makefile:133: recipe for target 'osg-earth' failed
make[1]: *** [osg-earth] Error 2
sudo apt-get install clang
Sonrasında ise ./configure komutunu çalıştırıp, ardından make komutu ile kurulumu tamamlamayı tekrar deneyin.
Bu işlem sonrasında herhangi bir sıkıntı yaşamazsınız şanslısınız. Omnet'i kullanmaya başlayabilirsiniz fakat; bir hata almanız da muhtemeldir. Şayet hata aldıysanız, yazıyı okumaya devam edin.
osg-earth Sorunu Hata Çıktısı :
Creating executable: out/clang-release//osg-earth
/usr/bin/ld: cannot find -losgEarthFeatures
/usr/bin/ld: cannot find -losgEarthSymbology
/usr/bin/ld: cannot find -losgEarthAnnotation
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Makefile:108: recipe for target 'out/clang-release//osg-earth' failed
make[2]: *** [out/clang-release//osg-earth] Error 1
Makefile:133: recipe for target 'osg-earth' failed
make[1]: *** [osg-earth] Error 2
osg-earth hatasının çözümü için ise aşağıdaki paketleri terminal üzerinden sırasıyla kurmanızı öneririm :
sudo apt-get install qt4-qmake libqt4-dev libqt4-opengl-dev
sudo apt-get install openscenegraph libopenscenegraph-dev openscenegraph-plugin-osgearth
sudo apt-get install osgearth osgearth-data libosgearth-dev
Son olarak make cleanall komutunu çalıştırın. Sonrasında ise yine ./configure komutunu çalıştırıp, ardından make komutu ile kurulumu tamamlamayı tekrar deneyin.
Tüm işlemlerin başarılı olması durumunda terminalde şöyle bir çıktı alacaksınız : Now you can type "omnetpp" to start the IDE
Terminale "omnetpp" yazdığınız takdirde program sorunsuz bir şekilde açılacaktır. Bakınız :
Ek Bilgiler :
Şayet OMNeT'te yeniyseniz ve GUI araçları olan TKENV veya QTENV ile ilgili hata alırsanız, başlangıçta bunları şu şekilde devre dışı bırakabilirsiniz :
Komut satırına;
gedit configure.user
yazdıktan hemen sonra, gelecek olan metin editöründen
WITH_TKENV=yesifadelerini şu şekilde değiştirip, dosyayı kaydetmeniz gerekmektedir.
WITH_QTENV=yes
WITH_TKENV=noNe de olsa daha sonradan eğer ki ihtiyaç duyarsanız, tekrardan aktif edebilirsiniz.
WITH_QTENV=no
Java ile ilgili hata alırsanız,
sudo apt-get install openjdk-8-jdkkomutunu terminale yazarak Java'yı kurmanız gerekmektedir. Bilgisayarınızda Java'nın yüklü olup olmadığını, versiyon bilgisi sorgulayarak öğrenebilirsiniz.
Bunun için terminale şunu yazmanız yeterli olacaktır :
java --versionKonuyla ilgili benim bahsedeceklerim bunlardı. Sizin de eklemek istedikleriniz varsa veya farklı bir hata ile karşılaşmanız durumunda aşağıdaki yorum formuna yazarak, bana iletebilirsiniz. Kolay gelsin.


