2007年7月31日 星期二

測試環境架設

多了學長的幫忙,整個測試的環境大致架設完成。
兩台Router加上兩台hostap,IPv6位址為6to4
有了環境後,接下來便可以將之前寫好的SIP UA拿來實際測試一下。
目前比較棘手的是如何讓MN自動連接上AP。

2007年7月28日 星期六

烏來雲仙樂園

今天是老媽的生日,當然要陪親愛的媽媽到處晃一下囉。
經過了沒什麼計劃的計劃後,決定去烏來走走。
記得之前不久才和國中同學到烏來烤肉,中途還下大雨,淋成落湯雞。

首先,來到了烏來老街,不過感覺有被騙到了,整條街超短的。
然後要到瀑布或是搭空中纜車,還有一段距離。路邊排成長長的計程車隊,一趟就要兩百元。
所以我們只好返回停留不到幾分鐘的停車場,自己開車到纜車區。
在我印象中,有來過雲仙樂園,但就是不記得有纜車這回事,真是奇怪。
之前才剛搭過貓纜,對纜車的期待自然就少了一點。
這個纜車和貓纜落差還真大,最多可以搭乘九十一人,距離也很短,目視就可以看到起點與終點。
繞了整個園區,我覺得其說是個遊樂園,不如說是風景區,好山好水,且還是一個不錯的避暑勝地。

2007年7月26日 星期四

Mobile UA

成功讓SIP UA支援Mobility,當UA發現IP改變時,會自動發出re-INVITE,完全不用人為的介入。
目前整個程式還只能算是雛型而已,還有蠻多小細節要修正,功能上大致上是都可以正常運作。
或許接下來也可以把介面弄漂亮一點。

2007年7月25日 星期三

取得網卡的IP

利用NetworkInterfacegetByName函式來選擇網路卡介面,接著便可以取得設定於此網卡上的所有IP。

try {
NetworkInterface iface = NetworkInterface.getByName("eth1");
Enumeration e = iface.getInetAddresses();
while(e.hasMoreElements()) {
InetAddress ip = (InetAddress)e.nextElement();
System.out.println(ip);
}
}
catch(Exception ex) {
ex.printStackTrace();
}

2007年7月24日 星期二

安裝ipw3945

A8Jc筆電內建的無線網卡為Intel Corporation PRO/Wireless 3945ABG
安裝完Debian後,並未幫你驅動無線網卡,以下是以Debian的安裝方式。

只要利用apt即可根據自己的核心版本來下載適當的驅動程式。
先查看kernel版本:
# uname -r
2.6.21-2-686

接著利用apt,來安裝已編譯好的模組:
# apt-get install ipw3945-modules-2.6.21-2-686 firmware-ipw3945 ipw3945d
# modprobe ipw3945

另一個方法則是自行編譯模組:
# apt-get install ipw3945-source
firmware-ipw3945 ipw3945d module-assistant
# m-a prepare
# m-a a-i ipw3945
# modprobe ipw3945

A8Jc換硬碟

A8Jc的硬碟只有60G,由於安裝了兩套作業系統,硬碟空間明顯無法滿足我的需求。
於是買了一顆120G的硬碟來替換,其實更換筆電的硬碟還蠻容易的。

首先將筆電後面的硬碟擋板給拆下(通常會有圓柱的形狀),打開後,即會看見硬碟所在。
硬碟後面會有個空隙,所以只是輕輕的將硬碟往後面推,即可輕鬆將硬碟與排線分離,如下圖。


接著,將此硬碟的散熱板拆下,將在新的硬碟上。
按著之前的步驟,反回去做,即可成功升級硬碟。

2007年7月21日 星期六

toBinaryString

以前寫程式時,常需要將十進位的數字轉成二進位,再進行計算。
Java在IntegerLong Class有提供一個static method叫做toBinaryString(),我們可以很方便的使用它。

int num = 18;
System.out.println(Integer.toBinaryString(num));

結果會印出
10010

re-INVITE測試

re-INVITE的測試終於成功了。
將SDP的c欄位填入新的位址,UA會將RTP封包往新的位址送。
目前只改了c欄位,而且是將位址寫死在程式裡面。
未來是要將Movement Detection程式加入,由UA判斷取得新的IP,然後自動修改contactc欄位,送出re-INVITE給對方。

2007年7月18日 星期三

Proactive DAD

閱讀了一篇Paper:Proactive DAD A Fast Address-Acquisition Strategy for Mobile IPv6 Networks。
內容主要是針對DAD時間過長,提出Proactive DAD的方法。
其中也介紹了別人提出的方法:

  • Optimistic DAD - 可以使用tentative address,也就是在未確定唯一性前就先使用,若偵測到有人用時,則必須釋放掉此位址。
  • Advanced DAD - Access router有一個Address pool,存放著確保唯一的位址,Mobile Node可以向access router要求位址。
  • Proactive DAD - 從RIP (Regional Information Point) server取得新網路的prefix,再還未換到新的AP前,先產生新址址送到新的access router,然後執行DAD的動作。

然而,這篇最後的實驗感覺有些問題,交待的不是很清楚。不過這個方法倒是給我一個不錯的方向。

2007年7月17日 星期二

IPv6 UA

大致將User Agent的基本功能寫好了。
目前可以在IPv6下的環境下執行,以及播放音樂。
剩下的工作是要測試re-INVITE以及加入JMF的問題。
目前播放的音樂只能是wav檔,被侷限住了。

Max-min fair share

Max-min fair share必須滿足下列兩個條件:

  • 沒有人會取得大於自己所需求的資源
  • 在還沒取得自己所需求的資源量時,此時皆平等分享資源

正式的定義如下:
假如有source 1, . . . , n,他們所要求的資源分別是x1, x2, . . ., xn,其中x1 <= x2 . . . <= xn。假設資源為C,則首先將C/n分配給每個人,此時C/n > x1時,則我們將C/n - x1再平均分配給其它人,以此類推即可。

2007年7月16日 星期一

Get lost

過去所憧憬的生活,現在看來落差還真大。
而我以往所堅持的,也漸漸消失。
不是環境影響了我,而是我讓自己墮落了。

2007年7月15日 星期日

讀取Enumeration

當回傳值為Enumeration的型態時,該如何存取其值呢?

以下以NetworkInterface類別的getNetworkInterfaces函式說明。
此method可以取得系統上所有的網路介面以及所設定的IP位址。
它的回傳型態為static Enumeration

try {
Enumeration e = NetworkInterface.getNetworkInterfaces();
while(e.hasMoreElements()) {
System.out.println(e.nextElement());
}
}
catch(Exception ex) {
ex.printStackTrace();
}

2007年7月13日 星期五

UA無法接聽

UA的基本雛型大致完成,目前可以成功的在IPv4環境下撥打、對話以及結束連線。
然而遇到的問題是無法接聽對方打來的電話。
再來就是語音傳送的問題,RAT (Robust Audio Tool)JMF (Java Media Framework)看得有些混亂,此部份的程式碼還需一段時間研究。
希望是能先將接聽的部份解決,然後再把系統轉到IPv6的環境下。

2007年7月12日 星期四

UA設計與實作

大概追蹤完學長寫的程式碼後,開始嘗試自己動手寫一遍。
希望儘量可以修改成符合自己所需要的UA。

  • 支援IPv6
  • 可接受re-INVITE修改session
目前才剛開始動筆,完成應該是不成問題,需要一點時間消化一下程式碼。

2007年7月11日 星期三

MjSip + JMF

終於找到適合的UA了,測試了學長寫的UA,能成功的在IPv6下執行
MjSip是一個SIP的函式庫,可以用來建立SIP應用程式以及服務。

MjSip的架構如下:



Transport Layer:負責傳輸SIP的訊息。
Transaction Layer:處理上層訊息的重送、配對相對應的Request/Response和Timeout。
Dialog Layer:將同一個session內的不同transactions連結在一起。
Call Layer:提供簡單使用的介面來處理SIP calls。

至於JMF全名為Java Media Framework,目的是用來支援媒體資料串流的存取。

目前MjSip和JMF都是剛開始接觸而已,並不太熟悉。
現在的工作是追蹤學長寫的程式碼,再視情況加以修改。

2007年7月8日 星期日

貓纜初體驗

許久沒坐捷運了,變化真是大。
售票不再是IC卡而是代幣,雖然之前有在新聞上看過。
真怕自己不會坐,索性在旁看了一下別人怎麼進出,才接著走過去。
先在辛亥站下車,到了阿佑的學校繞了一圈,不禁讓我又想起了永春高中。
同樣是位於山區,特色就是不斷地爬階梯。

吃完了中餐後,繼續了我們的旅程,往動物園方向前進。
本想說會有很多人,但卻沒想像中的多。
總共有四站,動物園->動物園內站->指南宮->貓空,到貓空不多不少,就是五十元。


坐上纜車,果然如電視上所說,只有一個字「熱」。
沒什麼感覺就到了終點站,不過風景倒是不錯,若是晚上當然就更美了。

貓空還是我第一次去,一下纜車,當然要拍張照片紀念一下。
但除了茶館外,還真不知該去哪,於是突發奇想,決定從貓空走到指南宮。
只是沒想到走著走著,還真是遠,不知走了幾公里的路才到達目的地。
雖然腳很痠,但還不賴,人生總是要做些奇怪的事。


參訪完指南宮,肚子餓了,自然就想到深坑的臭豆腐。
但我們並不想要搭纜車回動物園再轉車,而是在指南宮搭了公車再換車到達了深坑。

深坑老街,說實在,真的很短,不過目的也只是要吃臭豆腐,所以長短倒是不介意。
吃了廟口這家店的麻辣臭豆腐,味道只能說讚。
要離開前,買了很多人排隊的金大鼎香豆腐,但吃起來感覺平平。


夜深了,也結束了這趟旅程。

2007年7月5日 星期四

摘要試筆

老師和學長都叫我先寫個摘要出來,把想做的東西整理一下。
於是花了一些時間,用簡單的幾個字把想做的描述一遍,不過,我想這應該不能算是摘要吧。
本來想說論文可以用英文寫,沒想到摘要短短幾個英文字,就讓我想破頭。
雖然如此,還是希望最後能夠用英文寫,不過目前想這些都太早了。
希望下次和老師討論題目時,不要讓我換題目了,不然真的會欲哭無淚啊!

2007年7月4日 星期三

設定IPv6

設定IPv6位址
# ip addr add 2001:100:100:100::2/64 dev eth0

移除IPv6位址
# ip addr del 2001:100:100:100::2/64 dev eth0

設定預設閘道
# ip route add default via 2001:100:100:100::1 dev eth0

以上方法只是暫時用指令設定位址,若要永久設定可以把指令寫在rc.local裡,或是寫入網路的設定檔。下面以Debian設定來介紹說明:
設定檔位於/etc/network/interfaces,內容如下:

iface eth0 inet6 static
address 2001:100:100:100::2
netmask 64
gateway 2001:100:100:100::1

2007年7月3日 星期二

jEdit

由於未來大半的時間應該會用來改程式碼,所以就找了一下適合寫程式的編輯器。
於是我就找到了jEdit這個編輯器,整體的介面與感覺都不錯。
但原始的編輯器功能較陽春,必須下載一些外掛的功能。
jEdit設計的很體貼,在程式裡就可以搜尋到所有新的外掛,並且直接下載安裝。
Plugins->Plugin Manager->Install
裡面列出所有的外掛程式,且也有詳細的說明。
只要勾選起來,選擇Install,即會自動下載安裝。
而我安裝了兩個外掛程式。

  • Project Viewer:可以將多個檔案當作一個專案來處理。
  • Buffer Tabs:開多個程式檔,會開新的分頁。

如何掛載fat32

方法一: 使用mount指令
debian:/home/howard# mount -o utf8 -o uid=howard /dev/hda2 /mnt/data/

不過此法的缺點在於每次開機要重新下一次指令

方法二:寫入/etc/fstab
/dev/hda2 /mnt/data vfat utf8,uid=howard 0 0

2007年7月1日 星期日

Cross Layer Handoff for SIP

閱讀了一篇Paper: Cross Layer Handoff for SIP
這篇有整理了以前提出的方法:

  • Fast handoff scheme
  • HMSIP
  • PAR-SIP
有整理了這幾個方法,並且也點出了它們的缺點。
蠻值得參考的一篇。

這篇的目的看似是要改進PAR-SIP的方法。
整個過程必須修改Beacon的內容,將Gateway的MAC填入Beacon裡。
不過若需要動到Beacon,感覺不就成為它的缺點。
而且這篇Beacon frame有一個小地方畫錯了,應該是每個位址都是6個bytes。