
# mobility.py
#!/usr/bin/env python
'Setting the position of nodes and providing mobility'
import sys
from mininet.log import setLogLevel, info
from mn_wifi.cli import CLI
from mn_wifi.net import Mininet_wifi
def topology(args):
"Create a network."
net = Mininet_wifi()
info("*** Creating nodes\n")
h1 = net.addHost('h1', mac='00:00:00:00:00:01', ip='10.0.0.1/8')
sta1 = net.addStation('sta1', mac='00:00:00:00:00:02', ip='10.0.0.2/8')
sta2 = net.addStation('sta2', mac='00:00:00:00:00:03', ip='10.0.0.3/8')
ap1 = net.addAccessPoint('ap1', ssid='new-ssid', mode='g', channel='1', position='45,40,0')
c1 = net.addController('c1')
info("*** Configuring propagation model\n")
net.setPropagationModel(model="logDistance", exp=4.5)
info("*** Configuring nodes\n")
net.configureNodes()
info("*** Associating and Creating links\n")
net.addLink(ap1, h1)
if '-p' not in args:
net.plotGraph(max_x=120, max_y=120)
if '-c' in args:
sta1.coord = ['40.0,30.0,0.0', '31.0,10.0,0.0', '31.0,30.0,0.0']
sta2.coord = ['40.0,40.0,0.0','55.0,31.0,0.0','55.0,81.0,0.0']
net.startMobility(time=0, mob_rep=1, reverse=False)
p1, p2, p3, p4 = {}, {}, {}, {}
if '-c' not in args:
p1 = {'position': '40.0,30.0,0.0'} # sta1 시작점
p2 = {'position': '40.0,40.0,0.0'} # sta2 시작점
p3 = {'position': '31.0,10.0,0.0'} # sta1 종점
p4 = {'position': '55.0,31.0,0.0'} # sta2 종점
net.mobility(sta1,'start', time=1, **p1) # sta1 시작점
net.mobility(sta2,'start', time=2, **p2) # sta2 시작점
net.mobility(sta1,'stop', time=12, **p3) # sta1 종점
net.mobility(sta2,'stop', time=22, **p4) # sta2 종점
net.stopMobility(time=23)
# net.mobility(sta1, 'start', time=1, position='20,30,0')
# net.mobility(sta1, 'stop', time=80, position='80,30,0')
info("*** Starting network\n")
net.build()
c1.start()
ap1.start([c1])
info("*** Running CLI\n")
CLI(net)
info("*** Stopping network\n")
net.stop()
if __name__== '__main__':
setLogLevel('info')
topology(sys.argv)



이동 시작전 토폴로지 이동 완료후 토폴로지


sta2 노드 이동
sta2 종점을 (55.31)에서 (100, 40)으로 변경해서 이동 종료시 ap1의 전송 반경 밖으로 벗어나도록 함
sta2는 종점에서 ap1의 변경안에 속하지 못하고 있음. 따라서 sat1은 sta2에 접속할 수 없음

sta3 노드 추가
net.addStation() 명령어 사용으로 sta3 노드 추가
sta3 초기 시작점 p3=(31, 10) 과 종점 p6=(60,70)
이동 확인: sta2가 ap1의 전송 반경 내에 있으면, ping 가능하지만, 전송 반경 밖에 있으면, ping 불가능함

이동 완료 후 ping 테스트
sta1 ping -c3 sta3 로 연결 확인
sta1 ping -c3 sta2 로 연결 단절 확인
명령어의 출력을 통해 네트워크가 어떻게 설정되어 있는지, 어떤 것을 확인할 수 있습니다
스테이션은 액세스 포인트와 연결됩니다.
Creating network
Adding controller
*** Adding hosts and stations:
sta1 sta2 sta3
*** Adding switches and access point(s):
ap1 ap2 ap3
*** Adding links and associating station(s):
(ap2, ap1) (ap3, ap2) (sta1, ap1) (sta2, ap2) (sta3, ap3)
sudo mn --wifi --topo linear,3 로 네트워크 형성

net 명령어 사용
scan 명령어 사용
link 명령어 사용으로 ssid_ap1에 연결됨 확인
disconnect 명령어로 ssid_ap1 에 연결된 sta1-wlan0을 단절함
sta1-wlan0을 connect 명령어를 사용해서 ssid_ap2에 연결 -> link 명령어로 sta1-wlan0이 ssid_ap2 에 연결 확인
wmediumd_interference.py 파일에서 거리가 멀어지면 rssi 값이 더 낮아지는
현상 파악

이동 전 distance 확인
sta1 이동


이동 후 distance 확인

bitrate 수정
최대 bitrate를 9로 수정해서 9가 최대 bitrate가 됨

최대 bitrate를 6으로 한정함

handover bgscan.py
생성 토폴로지
코드 내용
#!/usr/bin/env python
""" Handover example supported by bgscan (Background scanning) and wmediumd.
ieee 802.11r can be enabled adding the parameters below:
ieee80211r='yes'
mobility_domain='a1b2'
e.g. ap1 = net.addAccessPoint('ap1', ..., ieee80211r='yes',
mobility_domain='a1b2', ...)
Consider https://w1.fi/cgit/hostap/plain/wpa_supplicant/wpa_supplicant.conf
for more information about bgscan"""
import sys
from mininet.node import Controller
from mininet.log import setLogLevel, info
from mn_wifi.cli import CLI
from mn_wifi.net import Mininet_wifi
from mn_wifi.link import wmediumd
from mn_wifi.wmediumdConnector import interference
def topology(args):
"Create a network."
net = Mininet_wifi(controller=Controller, link=wmediumd, wmediumd_mode=interference)
info("*** Creating nodes\n")
net.addStation('sta1', position='15,20,0', bgscan_threshold=-60, s_inverval=5, l_interval=10, bgscan_module="simple")
ap1 = net.addAccessPoint('ap1', mac='00:00:00:00:00:01', ssid="handover", mode="g", channel="1", passwd='123456789a', encrypt='wpa2', position='10,30,0', datapath='user')
ap2 = net.addAccessPoint('ap2', mac='00:00:00:00:00:02', ssid="handover", mode="g", channel="6", passwd='123456789a', encrypt='wpa2', position='60,30,0', datapath='user')
ap3 = net.addAccessPoint('ap3', mac='00:00:00:00:00:03', ssid="handover", mode="g", channel="1", passwd='123456789a', encrypt='wpa2', position='120,100,0', datapath='user')
c1 = net.addController('c1')
info("*** Configuring Propagation Model\n")
net.setPropagationModel(model="logDistance", exp=3.5)
info("*** Configuring nodes\n")
net.configureNodes()
info("*** Creating links\n")
net.addLink(ap1, ap2)
net.addLink(ap2, ap3)
if '-p' not in args:
net.plotGraph(min_x=-100, min_y=-100, max_x=200, max_y=200)
info("*** Starting network\n")
net.build()
c1.start()
ap1.start([c1])
ap2.start([c1])
ap3.start([c1])
info("*** Running CLI\n")
CLI(net)
info("*** Stopping network\n")
net.stop()
if __name__=='__main__':
setLogLevel('info')
topology(sys.argv)
xterm sta1 사용

sta1 iwconfig 명령어 사용으로 사용 무선 랜 확인
sta1이 sta1-wlan0 무선랜을 사용하여 연결할 수 있는 모든 ap들을 scanning
sta1 iw dev sta1-wlan0 scan 사용 전 wpa_cli 명령어 프로세스 중지
sta1 iw dev sta1-wlan0 scan 명령어 사용으로 사용 가능한 ap 리스트 확보


sta1 이동시 접속 가능한 ap 확보
사용 명령어 : py sta1.setPosition
py sta1.moveNodeT o(‘150,120,0’) : moveNodeT o 명령어는 없음
py sta1.setPosition(‘150,120,0’)
sta1 이동시 접속 가능한 ap 스캔

처리량 (네트워크 출력 또는 Throughput)
대상 코드 파일 : position.py
위치 확인
거리 확인
토폴로지 확인
iperf sta1 sta2 명령어: bandwidth 측정 -> bandwidth는 Throughput 을 결정함
노드 이동

거리 변동 확인

거리 변동 후 토폴로지 확인
iperf sta1 sta2 명령어

mobilityModel.py

graph 에서 stop으로 노드 이동을 정지시키고 start로 노드 이동을 진행함
sta1의 속도를 10 → 30으로 증가해서 mobility (이동성) 확인
#!/usr/bin/env python
'Setting the position of Nodes and providing mobility using mobility models'
import sys
from mininet.log import setLogLevel, info
from mn_wifi.cli import CLI
from mn_wifi.net import Mininet_wifi
def topology(args):
"Create a network."
net = Mininet_wifi()
info("*** Creating nodes\n")
net.addStation('sta1', mac='00:00:00:00:00:02', ip='10.0.0.2/8', min_x=10, max_x=30, min_y=50, max_y=70, min_v=5, max_v=10)
net.addStation('sta2', mac='00:00:00:00:00:03', ip='10.0.0.3/8', min_x=60, max_x=70, min_y=10, max_y=20, min
_v=1, max_v=5)
if '-m' in args:
ap1 = net.addAccessPoint('ap1', wlans=2, ssid='ssid1,ssid2', mode='g', channel='1', failMode="standalone", position='50,50,0')
else:
ap1 = net.addAccessPoint('ap1', ssid='new-ssid', mode='g', channel='1', failMode="standalone", position='50,50,0')
info("*** Configuring nodes\n")
net.configureNodes()
if '-p' not in args:
net.plotGraph()
net.setMobilityModel(time=0, model='RandomDirection', max_x=100, max_y=100, seed=20)
info("*** Starting network\n")
net.build()
ap1.start([])
info("*** Running CLI\n")
CLI(net)
info("*** Stopping network\n")
net.stop()
if __name__== '__main__':
setLogLevel('info')
topology(sys.argv)
ap2의 이동 위치와 sta1의 최종 목적지 위치 변경

토폴로지
ap2의 위치와 sta1의 최종 목적지가 다르게 만들어 보기


ap2의 위치와 sta1의 최종 목적지가 같음

1. Log Distance 채널 모델에서 RSSI 감쇠가 Friis 채널 모델보다 더 큰 이유는 무엇인가요?
fiis는 자유공간을 모방하여 노이즈가 적은 이상적인 네트워크 환경이며, Log distance는 실제 네트워크 환경을 모방하였기 때문입니다.
2. STA가 AP로 핸드오버를 수행하는 데 영향을 미치는 주요 요인은 무엇인가요?
STA와 AP 간의 거리 및 RSSI 값
3. Mininet-WiFi에서 handover.py를 실행하여 STA가 AP 간 핸드오버를 수행하는 과정에서 CLI 명령어로 AP와의 연결 상태를 확인하는 방법을 작성하시오.
sta1 iw dev sta1-wlan0 link
5. RSSI 값이 핸드오버 및 네트워크 성능에 미치는 영향을 설명하시오.
RSSI가 특정 임계값 이하로 떨어지면 STA는 다른 AP로 핸드오버를 수행함.
6. STA(sta1)를 AP1에서 AP2로 이동하면서 핸드오버를 시뮬레이션하는 Python 명령어를 작성하시오.
net.mobility(sta1, 'start', time=1, position='20,30,0')
net.mobility(sta1, 'stop', time=20, position='80,30,0')
7. Friis 채널 모델을 적용하고 STA와 AP 간의 RSSI 값을 확인하는 명령어를 작성하시오.
net.setPropagationModel(model="friis")
py sta1.wintfs[0].rssi
8. STA(sta1)가 AP1의 전송 반경을 벗어나 AP2로 핸드오버를 수행하는 중간 상태는 무엇인가요?
STA가 AP1과 AP2에 모두 연결됨.
9. Mininet-WiFi에서 핸드오버를 실험할 때, AP 배치와 STA 이동 경로가 네트워크 성능에 미치는 영향을 설명하시오.
AP의 전송 반경이 겹치지 않으면 핸드오버 지연 및 연결 손실 발생 가능. 겹침 구역에서 핸드오버가 원활히 수행됨.
직선 이동 경로는 최적의 AP 선택 가능성을 높임.
10. Mininet-WiFi에서 AP1과 AP2 간 링크를 설정한 뒤, 연결 속도와 지연 시간을 각각 25Mbps, 50ms로 설정하는 명령어를 작성하시오.
net.addLink(ap1, ap2, bw=25, delay='50ms')
bw(bandwidth): 대역폭