Skip to content

Instantly share code, notes, and snippets.

@qsorix
Created June 22, 2010 09:55
Show Gist options
  • Save qsorix/448261 to your computer and use it in GitHub Desktop.
Save qsorix/448261 to your computer and use it in GitHub Desktop.
TODO: reprezentacja krawędzi w model i network musi umożliwiać jednoznaczne
mapowanie portów. Jak nazwać krawędzie? Czy wprowadzić porty już w
konfiguracji model?
TODO: a jak w model przedstawić port, w sytuacji, kiedy trzeba na nim założyć
jakąś konfigurację (np. packet-loss).
#v+
model Foo
{
host Alice
host Bob
link [ Alice, Bob ]
}
#v-
#v+
model Bar {
host S[4]
host R[4]
host Router
port Router.p0 {
delay = 10ms
loss = 0.05
}
port Router.p1 {
delay = 10ms
loss = 0.05
}
link_all [ Router.p0, R ]
link_all [ Router.p1, S ]
}
#v-
Builders dla konfiguracji model tworzą byty typu:
- ModelHost
- ModelPort (zawsze przypisany do Host)
- ModelLink
Za ich pośrednictwem prezentują zbiór dostępnych węzłów oraz graf połączeń
między nimi. Zarówno ModelHost jak i ModelLink mogą zawierać dodatkowe
atrybuty.
#v+
network Krowoderska
{
host A {
ip = 192.168.0.1
hostname = defteros
ports = [ eth0, wlan1 ]
}
host B {
ip = 192.168.0.2
hostname = marvin
ports = [ eth0 ]
}
hostrange Swarm {
# FIXME: tu nie ma portów
ip_range = [ 192.168.1.1, 192.168.1.32 ]
}
}
#v-
Builders dla konfiguracji network tworzą byty typu:
- NetworkHost
NetworkHost opisują zastaną konfigurację sieci. Opisywanie krawędzi nie ma
tutaj znaczenia ponieważ:
- wystepują one w rzeczywistości,
- nie można ich programowo zmieniać.
Co ważne, NetworkHost zawiera nazwy dostępnych portów -- interfejsów
sieciowych, dzięki którym można nawiązać komunikację.
#v+
mapping M1 model Foo network Krowoderska
{
map [ Alice, A ]
map [ Bob, B ]
}
#v-
#v+
mapping M2 model Bar network Krowoderska
{
map [ S, Swarm ]
map [ R, Swarm ]
map [ Router, A ] {
p0 = "eth0"
p1 = "wlan1"
}
}
Algorytmy mapping mają na wejściu model oraz network. Na ich podstawie mają
przypisać ModelHost do NetworkHost oraz wybrać taki zestaw portów każdego
NetworkHost, aby realizować graf połączeń zadany przez ModelLink.
NOTE: skoro w model nie ma nic o portach, to po co je mapować? Wystarczy przed
testem sprawdzić, że każda para hostów z linkiem może się komunikować.
#v+
schedule iperf model Foo {
duration {
time = "10s"
}
flow Tcp<A, B> {
start = "iperf -tcp @{A.ip} @{B.ip}"
}
at Alice {
time = "5s"
every = "10s"
cmd = "ping @{Bob.ip}"
}
at Alice start_flow Tcp<Bob, Alice>
...
...
...
}
#v-
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment