2011年7月27日 星期三

printf 顏色設置

以下是VT100終端中printf顏色設置,終端類型可以在SecureCRT中設置。
echo也能加顏色,只是必須要用echo -e ""(後面同printf)

printf輸出顏色和ANSI控制碼(高亮,下劃線,閃爍,光標位置,清屏等)
給printf的輸出加上些特效比如顏色,可以讓打印信息更鮮明,在debug的時候特別有用。
顏色:
#define NONE "\033[m"
#define RED "\033[0;32;31m"
#define LIGHT_RED "\033[1;31m"
#define GREEN "\033[0;32;32m"
#define LIGHT_GREEN "\033[1;32m"
#define BLUE "\033[0;32;34m"
#define LIGHT_BLUE "\033[1;34m"
#define DARY_GRAY "\033[1;30m"
#define CYAN "\033[0;36m"
#define LIGHT_CYAN "\033[1;36m"
#define PURPLE "\033[0;35m"
#define LIGHT_PURPLE "\033[1;35m"
#define BROWN "\033[0;33m"
#define YELLOW "\033[1;33m"
#define LIGHT_GRAY "\033[0;37m"
#define WHITE "\033[1;37m"
比如:
printf("\033[31m ####----->> \033[32m" "hello\n" "\033[m")
int main()
{
printf( CYAN "current function is %s " GREEN " file line is %d\n" NONE,
__FUNCTION__, __LINE__ );
fprintf(stderr, RED "current function is %s " BLUE " file line is %d\n" NONE,
__FUNCTION__, __LINE__ );
return 0;
}
顏色分為背景色和字體色,30~39用來設置字體色,40~49設置背景:
背景色字體色
40: 黑30: 黑
41: 紅31: 紅
42: 綠32: 綠
43: 黃33: 黃
44: 藍34: 藍
45: 紫35: 紫
46: 深綠36: 深綠
47: 白色37: 白色
記得在打印完之後,把顏色恢復成NONE,不然再後面的打印都會跟著變色。
另外,還可以加一些ANSI控制碼。加顏色只是以下控制碼中的一種:
\033[0m 關閉所有屬性
\033[1m 設置高亮度
\033[4m 下劃線
\033[5m 閃爍
\033[7m 反顯
\033[8m 消隱
\033[30m -- \033[37m 設置前景色
\033[40m -- \033[47m 設置背景色
\033[nA 光標上移n行
\033[nB 光標下移n行
\033[nC 光標右移n行
\033[nD 光標左移n行
\033[y;xH設置光標位置
\033[2J 清屏
\033[K 清除從光標到行尾的內容
\033[s 保存光標位置
\033[u 恢復光標位置
\033[?25l 隱藏光標
\033[?25h 顯示光標

2011年7月25日 星期一

STUN (Simple Traversal of UDP Through Network Address Translators - RFC 3489 )

STUN (Simple Traversal of UDP Through Network Address Translators - RFC 3489 ), 是最著名和最常被使用的VoIP穿越NAT防火牆的解決辦法。STUN 利用位於 Internet 上的伺服器幫助防火牆內的UA獲知他們被NAT 轉換過的外部位址, 並協助他人的VoIP呼叫穿透防火牆送達牆內的UA。
很多應用層的 VoIP程式必須仰賴 UA 主動提供自身的IP 位址及port number, 讓VoIP兩端的UA 彼此知道對方的IP 位址及port number, 才能互送封包, 建立雙向的通話。但是如果UA 是在NAT 後面, 在沒有外部的協助下,一個UA 無法看到 它自己被NAT 轉換過的外部位址,就無法提供此項資訊,讓 VoIP順利運作。



圖 9.10 UA 與STUN 溝通獲知外部位址
STUN 伺服器可作為中介者協助UA 看到自己被轉換過的外部位址,如圖9.10所示。 UA 送一個message 給STUN 伺服器,而STUN 伺服器可從封包中挖出來該 UA 的外部位址,並將此資訊回傳給UA。 此外,STUN 伺服器也可透過一系列的測試封包獲知NAT 的型態,並提供 相對應的穿越方法,圖9.11及9.12顯示STUN 伺服器探測NAT型態之架構與流程。 可惜的是,STUN無法穿透Symmetric NAT, 而偏偏這種NAT已經成為NAT市場上的主流。 以下是公眾STUN 伺服器的位址。
  • stun.fwdnet.net
  • stun.fwd.org (no DNS SRV record)
  • stun01.sipphone.com (no DNS SRV record)
  • stun.softjoys.com (no DNS SRV record)
  • stun.voipbuster.com (no DNS SRV record)
  • stun.voxgratia.org (no DNS SRV record)
  • stun.xten.com
  • stun1.noc.ams-ix.net (DNS SRV record on domain ams-ix.net not noc.ams-ix.net)
  STUN 伺服器探測NAT型態之架構

STUN 伺服器探測NAT型態之流程

2011年7月22日 星期五

指定 Linux 網路卡連線速度

指定 Linux 網路卡連線速度,除了在載入 module 時以參數指定外,亦可使用以下指令 

  • ifconfig
  • mii-tool
  • ethtool

Example: ifconfig eth0 media 100baseTX


若出現 port: SIOCSIFMAP: Operation not supported ,可以改用 mii-tool,ethtool指令


mii-tool -F 100baseTx-FD eth0

ethtool -s eth0 speed 100 duplex full autoneg on

2011年7月18日 星期一

QoS Queue Scheduling

為您介紹QoS的Queue排程,通常採用Queue排程解決網路擁塞時的情況。

下面介紹SP(Strict-Priority,嚴格優先級Queue)、WFQ(Weighted Fair Queue,加權公平Queue)和WRR(Weighted Round Robin,加權輪詢Queue)。

(1) SP Queue


SP Queue排程算法,是針對關鍵service型應用設計的。關鍵service有一個重要的特點,即在擁塞發生時要求優先獲得服務以減小response的延遲。以端口有8 個輸出Queue為例,優先Queue將端口的8 個輸出Queue分成8 類,依次為7、6、5、4、3、2、1、0 Queue,它們的優先級依次降低。

在Queue排程時,SP 嚴格按照優先級從高到低的次序優先發送較高優先級Queue中的分組,當較高優先級Queue為空時,再發送較低優先級Queue中的分組。這樣,將關鍵service的分組放入較高優先級的Queue,將非關鍵service(如E-Mail)的分組放入較低優先級的Queue,可以保證關鍵service的分組被優先傳送,非關鍵service的分組在處理關鍵service數據的空閒間隙被傳送。SP 的缺點是:擁塞發生時,如果較高優先級Queue中長時間有分組存在,那麼低優先級Queue中的封包就會由於得不到服務而“餓死”。

(2) WFQ Queue

在介紹加權公平Queue前,先要理解公平QueueFQ(Fair Queuing)。FQ 是為了公平地分享網路資源,盡可能使所有流的遲延和延遲抖動達到最優而推出的。它照顧了各方面的利益,主要表現在:

不同的Queue獲得公平的排程機會,從總體上均衡各個流的延遲;短封包和長封包獲得公平的排程:如果不同Queue間同時存在多個長封包和短封包等待發送,應當顧及短封包的利益,讓短封包優先獲得排程,從而在總體上減少各個流的報​​文間的延遲抖動。

與FQ 相比,WFQ 在計算封包排程次序時增加了優先權方面的考慮。從統計上,WFQ 使高優先權的封包獲得優先排程的機會多於低優先權的封包。WFQ 能夠按流的“會話”信息(包括協議類型、源和目的TCP 或UDP 端口號、源和目的IP 地址及ToS 域中的優先級等)自動進行流分類,並且盡可能多地提供Queue,以將每個流均勻地放入不同Queue中,從而在總體上均衡各個流的延遲。在出隊的時候,WFQ 按

流的優先級來分配每個流應佔有出口的帶寬。優先級的數值越小,所得的帶寬越少。優先級的數值越大,所得的帶寬越多。最後,輪詢各個Queue,按照帶寬比例從Queue中取出相應數量的封包進行發送。用戶可以用WFQ 的Queue排程算法為0~7 Queue中的每個Queue指定帶寬,然後根據每條流的CoS 值和Queue的映射關係決定哪條流進哪個Queue,也決定了哪條流分得多大的帶寬。

(3) WRR Queue

WRR Queue排程算法在Queue之間進行輪流排程,保證每個Queue都得到一定的服務時間。以端口有8 個輸出Queue為例,WRR 可為每個Queue配置一個加權值(依次為w7、w6、w5、w4、w3、w2、w1、w0),加權值表示獲取資源的比重。如 一個100M的端口,配置它的WRR Queue排程算法的加權值為5、5、3、3、1、1、1、1(依次對應w7、w6、w5、w4、w3、w2、w1、w0 ),這樣可以保證最低優先級Queue至少獲得5Mbit/s 帶寬,避免了採用SP 排程時低優先級Queue中的封包可能長時間得不到服務的缺點。WRR Queue還有一個優點是,雖然多個Queue的排程是輪詢進行的,但對每個Queue不是固定地分配服務時間片——如果某個Queue為空,那麼馬上換到下一個Queue排程,這樣帶寬資源可以得到充分的利用。

2011年7月1日 星期五

一元線性回歸分析預測法模型分析

 一元線性回歸分析預測法, 是根據自變數x和因變數Y的相關關係,建立x與Y的線性回歸方程進行預測的方法。由於市場現象一般是受多種因素的影響,而並不是僅僅受一個因素的影響。所 以應用一元線性回歸分析預測法,必須對影響市場現象的多種因素做全面分析。只有當諸多的影響因素中,確實存在一個對因變數影響作用明顯高於其他因素的變 數,才能將它作為自變數,應用一元相關回歸分析市場預測法進行預測。
一元線性回歸分析法的預測模型為:
\hat{Y}_t=a+bx_t    (1)
式中,xt代表t期自變數的值;
\hat{Y}_t代表t期因變數的值;
a、b代表一元線性回歸方程的參數。
a、b參數由下列公式求得(用\sum代表\sum^{n}_{i-1}):
\begin{cases}a=\frac{\sum Y_i}{n}-b\frac{\sum X_i}{n}\\b=\frac{n\sum X_{i}Y_{i}-\sum X_i\sum Y_i}{n\sum X^2_i-(\sum X_i)^2} \end{cases}
為簡便計算,我們作以下定義:
\begin{cases}S_{xx}=\sum(X_i-\bar{X})^2=\sum X^2_i-\frac{(\sum X_i)^2}{n}\\S_{yy}=\sum(Y_i-\bar{Y})^2=\sum Y^2_i-\frac{(\sum Y_i)^2}{n}\\S_{xy}=\sum(X_i-\bar{X})(Y_i-\bar{Y})=\sum X_i Y_i-\frac{\sum X_i\sum Y_i}{n}\end{cases}    (2)
式中:\bar{X}=\frac{\sum X_i}{n},\bar{Y}=\frac{\sum Y_i}{n}
這樣定義a、b後,參數由下列公式求得:
\begin{cases}a=\bar{Y}-b\bar{X}\\b=\frac{X_{xy}}{S_{xx}}\end{cases}    (3)
將a、b代入一元線性回歸方程Yt = a + bxt,就可以建立預測模型,那麼,只要給定xt值,即可求出預測值\hat{Y}_t
回歸分析預測法中,需要對X、Y之間相關程度作出判斷,這就要計算相關係數Y,其公式如下:
r=\frac{\sum(x_i-\bar{X})(Y_i-\hat{y})}{\sqrt{\sum(x_i-\bar{x})^2\sum(y_i-\bar{y})^2}}=\frac{S_{xy}}{\sqrt S_{xx}\bullet{S_{yy}}}
相關係數r的特征有:
①相關係數取值範圍為:-1≤r≤1 。
②r與b符合相同。當r>0,稱正線性相關,Xi上升,Yi呈線性增加。當r<0,稱負線性相關,Xi上升,Yi呈線性減少。
③|r|=0,X與Y無線性相關關係;|r|=1,完全確定的線性相關關係;0<|r|<1,X與Y存在一定的線性相關關係;|r|>0.7,為高度線性相關;0.3<|r|≤0.7,為中度線性相關;|r|≤0.3,為低度線性相關。
r=\frac{S_{xy}}{\sqrt{S_{xx}\bullet S_{yy}}}    (4)

tftp在put上傳的時候顯示File not found的解決辦法

修改文件/etc/xinetd.d/tftp。主要是設置TFTP服務器的根目錄,開啟服務。修改後的文件如下:
 
service tftp
{     socket_type            =dgram
protocol                  =udp
wait                        =yes
user                        =root
server                     =/usr/sbin/in.tftpd
server_args             =-s /home/lqm/tftpboot -c
disable                    =no
per_source             =11
cps                         =100 2
flags                       =IPv4
}

說明:修改項server_args= -s     < path >    -c,其中處可以改為你的tftp-server的根目錄,參數-s指定chroot,-c指定了可以建立檔案

Dying gasp

Provides dying gasp function. If the router is about to lose power, this function detects the situation and sends a signal to warn the digital subscriber line access multiplexers (DSLAM) about the impending line drop. 

Dying gasp 信號是指:在系統輸入電壓無法滿足系統正常工作的時候。系統會自動發一個信號給頭端。告訴頭端,CPE端可能要無法正常工作。頭端作出相應反應。釋放原來安排給CPE的那條通道。 系統Dying gasp實現原理:芯片廠商在設計芯片的時候會設計一個Dying gasp 性能模塊在芯片內。此模塊通過監測外部輸入電壓來實現Dying gasp功能。因為為使得此功能能正常使用的前提是芯片必須還能正常工作,並且要向頭端發送一定時間長度的信號,所以在論壇定義的Dying gasp信號有效時間內,供芯片正常工作的各種電源的電壓不能小於此芯片規格書所描述的最小工作電壓。也就是說,監測點開始啟動的電壓與芯片各工作電壓之差不能小於法定Dying gasp信號時間長度。

How to use simple speedtest in RaspberryPi CLI

  pi@ChunchaiRPI2:/tmp $  wget -O speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py --2023-06-26 10:4...