30 Ekim 2008 Perşembe

Debian Gcc sorunu..

sudo apt-get install gcc
sudo apt-get install build-essential komutu ile halloluyor..

28 Ekim 2008 Salı

----

A physicist, an engineer, and a computer scientist were discussing the nature of God. “Surely a Physicist,” said the physicist, “because early in the Creation, God made Light; and you know, Maxwell's equations, the dual nature of electromagnetic waves, the relativistic consequences....” “An Engineer!,” said the engineer, “because before making Light, God split the Chaos into Land and Water; it takes a hell of an engineer to handle that big amount of mud, and orderly separation of solids from liquids....” The computer scientist shouted: “And the Chaos, where do you think it was coming from, hmm?”
—Anonymous

19 Ekim 2008 Pazar

Dreamweaver ve flash butonlar..

Dreamweaverdaki hazır flash button ları kullanmak istediniz diyelim. Sayfaya bir güzel yerleştirdiniz, linkleri verdiniz. Ama şöyle bir sorununuz var;
Kendi sayfalarınıza verdiğiniz linkler çalışırken, başka sitelere verdiğiniz linkler çalışmıyor.
Merak etmeyin aslında o linkler de çalışıyor ama sizin makinanızda sınırlamalardan dolayı çalışmayacaktır. Eğer hazırlamış olduğunuz sayfayı bir sunucuya upload ederseniz başka sitelere bağlantı verdiğiniz flash butonların da çalıştığını görürsünüz.
Eğer illa benim makinamda da çalışsın diyorsanız, kendi makinenize IIS kurun..

6 Ekim 2008 Pazartesi

QueueDizdar..

First I have to say that I am just a rookie on NS..
Just trying to understand how NS ticks..
And it is reeaally hard for me to get that..
But I am now quite happy that I successfully completed my first queue design..
Well, I know it is not doing anything new..

But this design gives me the opportunity to identify and understand every line of that code..
Hope it helps..
If something is missing or wrong about that .cc and .h files, please make me know..

Ferhat Umut Dizdar

QueueDizdar.cc




#include "queueDizdar.h"

static class QueueDizdarClass : public TclClass {
public:
QueueDizdarClass() : TclClass("Queue/QueueDizdar") {}
TclObject* create(int, const char*const*) {
return (new QueueDizdar);
}
} class_queue_dizdar;

void QueueDizdar::enque(Packet* p) {
if(dusurmeTipi == 0) { //önden düşürme = front drop
if((kuyruk->length()) >= qlim_){//is queue full
//add the received packet to the end of the queue
kuyruk->enque(p);
//will be the first packet in the list
Packet* listedeIlkPaket;
//find the first packet
listedeIlkPaket = kuyruk->head();
//deque the first packet in the queue
//so the head will automaticaly jumps to
//next one on the queue
kuyruk->deque();
//drop that first packet that was just released
drop(listedeIlkPaket);
}else{//if not full add received packet
kuyruk->enque(p);
}

}else{
if(dusurmeTipi == 1) { //sondan düşürme = end drop
if(kuyruk->length() >= qlim_){//is queue full??
drop(p);
}else{
kuyruk->enque(p);
}

}else{ //rastgele düşürme = random drop
if(kuyruk->length() >= qlim_){//is queue full??
kuyruk->enque(p);
Packet* dusurulecekPaket;//this is the one which will be dropped
//find the packet by random number
//this is done by the lookup function
//func. returns the n th. packet
dusurulecekPaket = kuyruk->lookup(Random::integer(kuyruk->length()));
kuyruk->remove(dusurulecekPaket);//remove the selected packet
//from the queue
drop(dusurulecekPaket);
}else{
kuyruk->enque(p);
}
}
}
}

Packet* QueueDizdar::deque() {
kuyruk->deque();
}


QueueDizdar.h



/*
önden, sondan yada rastgele paket düşürmeli
kuyruk boyu ayarlanabilir
kuyruk deneyi 1

front, end or random drop style
queue length can be set
(queue experiment no:1)

Ferhat Umut DİZDAR fumutdizdar@gmail.com
ferhat.umut@gmail.com
*/
#include "queue.h"
#include <math.h>
#include <sys/types.h>
#include "random.h"


class QueueDizdar : public Queue {
public :
QueueDizdar () {
//real queue derived from PacketQueue
kuyruk = new PacketQueue;
dusurmeTipi = 1;
//dusurmeTipi Tcl connection
//so dusurmeTipi can be reached through TCL
bind("dusurmeTipi", &dusurmeTipi);
}
~QueueDizdar() {}
protected :
void enque(Packet* p);
Packet* deque();
PacketQueue* kuyruk;
int dusurmeTipi;
//0=önden düşürmeli=frontdrop
//1=sondan düşürmeli=enddrop
//2=rastgele=randomdrop
};



5 Ekim 2008 Pazar

NS ve ( error: two or more data types in declaration of ) hatası..

Bu hatanın nedeni noktalı virgül. Evet, bu kadar basit. Bana tam olarak 2 saate mal oldu. Yeni bir kuyruk tipini denemek için hazırladığım bir adet .cc ve bir adet .h uzantılı kodu derlemeye çalışırken karşılaştım. Hatayı .cc sayfasında göstemesine rağmen aslında hata header dosyasındaki class tanımlamasından sonra ";" ü unutmuş olmamdan kaynaklanıyormuş..

Agent ve send..

Bir agent için, send komutu verildiğinde, agent, bunu;
send(Packet* p, Handler* h) { target_->recv(p, h); } şeklinde yorumlar.

Agent connector sınıfından türemiştir ve connector de target;
inline NsObject* target() { return target_; } şeklinde tanımlanmıştır.
Yani bir NsObject nesnesinin yerini gösteren bir pointerdır aslında target.

Böylece aslında send komutu bir diğer nesnenin recv fonksiyonuna paketin ulaşmasını sağlar.

Gönderim - Alım zamanı gibi birimler double olarak tanımlanır. Bu değişkenlere o anın zaman etiketi yazılmak istenirse;
hdrCevap->gonderimZamani = Scheduler::instance().clock(); denmelidir.

4 Ekim 2008 Cumartesi

Class Queue ve Class PacketQueue

Aslında Queue sınıfının yaptığı pek bir şey yok. Zaten paket Queue ya ulaşınca recv fonksiyonu çağrılıyor ve önce enque ve sonrada deque çağrılıyor. Bu iki fonksiyon Queue sınıfında virtual tanımlı ve boş.
Queue diğer kuyruk sınıflarına temel olması için tasarlanmış. Ama genel olarak enque ve deque fonksiyonlarını sağlayan PacketQueue kullanılıyor.
PacketQueue sınıfında tanımlı enque fonksiyonu gelen paketi, eğer listede başka paket yoksa en başa kaydediyor. Listede paket varsa, bir önceki paketin "sıradaki paket" yani next alanını yeni gelen paketi gösterecek şekilde ayarlayıp yeni paketi de listeye ekliyor, liste boyutunu arttırıyor ve kuyruk sonu işaretçisini son gelen paketi gösterecek hale getiriyor.
Deque fonksiyonu ise, FIFO mantığı ile, head ile işaret edilen yani listedeki ilk paketi listeden kaldırmak için tasarlanmış. Bu fonksiyon head işaretçisini, listede yer alan sıradaki pakete yönlendiriyor ve kuyruk boyunu bir azaltıyor..

1 Ekim 2008 Çarşamba

ECN ve Çakışma..

ECN ve Çakışma Engelleme..
IP headerında ECN için iki bit ayrılmıştır. Acrıca TCP, TCP headerında yer alan iki adet bayrağı(ECN-Echo ve CWR - Congestion Window Reduced) da kullanır. ECN nin amacı paket düşürmeden, çakışmayı engelleyebilmektir.

TCP de ECN nin kullanımı seçimliktir. Eğer kullanılacak ise iki tarafında bu hususta anlaşmış olmaları gerekir.

Eğer anlaşma gerçekleşirse, gönderici gönderdiği bütün paketleri ECN-capable codepoint ile işaretler. Yaklaşan bir çakışmayı fark eden router paketleri düşürmek yerine Congestion Experienced Codepoint ile işaretler.

Alıcı bu işaretli segmenti alınca, göndericiye, ECN-echo bayrağı set edilmiş bir ACK yollar. Gönderici, congestion window boyutunu düşürür ve bunu Congestion Window Reduced codepoint ile işaretlenmiş bir paket göndererek bildirir..

Tcl dosyalarına komut yollama..

    sprintf(out, "%s recv %d %3.1f", name(),
hdrip->src_.addr_ >> Address::instance().NodeShift_[1],
(Scheduler::instance().clock()-hdr->send_time) * 1000);
Tcl& tcl = Tcl::instance();
tcl.eval(out);

Yukarıdaki kodun bir agent' ın C kodlarında yazıldığını varsayarsak bu durum da bu satıra gelindiğinde, nsin çalışmasına neden olan Tcl dosyası içerisinde yani simülasyonun yapıldığı tcl dosyası içerisinde, recv isimli bir prosedür aranacaktır.
Yani bu yolla C içerisinden Tcl içerisindeki bir fonksiyon çağrılabilir. Eğer Tcl içerisine yazılmış olan fonksiyondan bir değer geridöndürmemiz gerekse idi bunu da tcl.result(void) fonksiyonunu bir değişkene atayarak yapabilirdik.

Bu arada Packet* pkt = allocpkt(); komut verildiğinde yeni bir paket oluşturulur. Ancak bu komutu içinden çağırdığımız agent, muhtemelen başka agentlardan türemiştir ve her agent kendi sınıfına ait olan header kısmını doldurup yollar. Örneğin TCP agent kendi başlığını doldurmadan önce zaten başlığın common header ve IP header kısımları doldurulmuştur.