摘要
本文主要介紹了嵌入式Linux系統下使用pppd 2.4.4來進行PPP撥号需要使用的腳本是如何配置的,配置項的含義,同時也說明了如何來配置參數,實作ppp撥号上網。
一.問題提出
嵌入式Linux作業系統下,如果要進行PPP連接配接,就需要配置撥号要使用的連接配接腳本。這些腳本參數就決定了PPPD的行為,會對PPP連接配接産生很大的影響。是以需要對這些腳本的參數以及具體含義有所了解。
二.解決思路
和PPP連接配接關系密切的有兩個腳本是chat和options兩個腳本。其中,chat腳本是用來進行AT呼叫和控制的腳本,而options腳本就影響PPP連接配接的。
1. CHAT腳本
一個簡單的chat腳本有下面的結構:
"" AT
OK ATDT dialnumber
CONNECT ""
一個chat腳本都是由字元串對來組成的。前面的字元串都是期望擷取的串,緊跟的是發送的字元串。這個腳本每一項的具體含義是這樣的:
1) MODEM期望空字元串。這句話的意思直接了解就是MODEM不管收到什麼字元串,先發出字元串AT;
2) 期望收到“OK”字元串,然後發送字元串“ATDT dialnumber”
3) 如果收到“CONNECT”,就不再發送,認為資料鍊路已建立連接配接。
這樣的chat腳本是最簡單的,如果需要進行逾時控制,就可以加入如下字段:
TIMEOUT 10
如果要增加對特殊情況的處理,就加入下面字段:
ABORT BUSY
ABORT NO ANSWER
ABORT RINGING
這三行語句的意思是:如果收到字元串“BUSY”、“NO ANSWER”、“RINGING”就退出執行。
是以在考慮到各種特殊情況下,配置一個PPP連接配接的CHAT腳本就可以像下面這樣:
TIMEOUT 30
ABORT BUSY
ABORT NO ANSWER
ABORT RINGING
"" AT
OK ATDT dialnumber
CONNECT ""
2.OPTIONS腳本
OPTIONS腳本的内容,為PPP連接配接指定了連接配接使用的裝置、使用的控制字元傳輸速率、指定了硬體加速、溢出控制等。
例如下面的options腳本:
ttyS0 ---- 指定連接配接使用的裝置,例如:ttyS0、ttyS1等
57600 ---- 設定連接配接使用的控制字元傳輸速率,可以設定為57600、115200等
debug ---- 如果需要加入調試資訊,就加入參數debug
logfile /var/ ppplog ---- 将連接配接過程中的資訊輸入到某個檔案中
mtu 1500
-detach
noipdefault ---- 不使用預設IP就可以加入參數noipdefault
defaultroute
usepeerdns ---- 使用伺服器端協商的DNS就可以設定參數usepeerdns
lcp-echo-failure 4 ---- 當連續4次沒有收到發出的LCP回聲請求時,就認為伺服器端已不再響應,就退出執行。這裡的失敗次數可以靈活來決定。
-ccp ---- 不使用壓縮控制協定
-vj ---- 關掉式IP頭壓縮
-chap ---- 不使用chap鑒權
-mschap-v2 ---- 不使用mschap鑒權
user
hide-password
connect "/usr/bin/chat -v -t6 -f /var/ chat" ---- 制定了要使用的chat腳本的位置。加上參數-v 告訴 chat指令将其所有的輸出/入拷貝到系統記錄裡(通常是 /var/log/messages)。-t 6 指定了執行chat該指令的時間為6s。chat腳本的位置可以位于/etc/目錄下,也可以位于/var下,這個可以更加需要靈活設定。 persist --- 永久連結(自動重撥) crtscts --- 告訴ppp使用modem的硬體流量控制 modem --- 使ppp使用DCD信号來判斷連接配接是否正常,有無掉線現象 deflate --- 使pppd使用defalte壓縮方式 idle --- 設定了一個時間限制,當在300秒的時間内沒有資料傳送,就斷開連接配接 lock --- 則建立一個鎖定檔案,其他程式在發現存在這個檔案後,就能得知相應的序列槽已經被使用。 demond --- 參數告訴pppd停留在背景,監視網絡資料,一旦有要求就立即進行連網,逾時後就斷開連接配接,但pppd仍然停留在背景等待下次資料傳送
其他的參數具體含義可以參照參考PPPD2.4.4 中options.c中注釋:
int debug = 0;
int kdebugflag = 0;
int default_device = 1;
char devnam[MAXPATHLEN];
bool nodetach = 0;
bool updetach = 0;
int maxconnect = 0;
char user[MAXNAMELEN];
char passwd[MAXSECRETLEN];
bool persist = 0;
char our_name[MAXNAMELEN];
bool demand = 0;
char *ipparam = NULL;
int idle_time_limit = 0;
int holdoff = 30;
bool holdoff_specified;
int log_to_fd = 1;
bool log_default = 1;
int maxfail = 10;
char linkname[MAXPATHLEN];
bool tune_kernel;
int connect_delay = 1000;
int req_unit = -1;
bool multilink = 0;
char *bundle_name = NULL;
bool dump_options;
bool dryrun;
char *domain;
int child_wait = 5;
3. 鑒權腳本
一般情況下,PPP連接配接是需要進行身份認證的。簽權方式有兩種,一種是PAP鑒權,另一種是CHAP鑒權。鑒權需要的使用者名和密碼是存放在PAP-secrets和chap-secrets腳本中,以如下方式存放:
Username * password
需要進行鑒權時,通過在options腳本中指定鑒權方式為PAP或CHAP,PPP子產品就會從PAP-secrets和chap-secrets腳本中讀出使用者名和密碼,附加到PPP的鑒權包中,發送到伺服器端進行身份認證。
4. PPP撥号過程與腳本之間的關系
腳本設定成功以後,怎麼和pppd2.4.4一起工作呢?這個需要從pppd程式的主函數入手。
這個過程是這樣的:
Pppd程式啟動以後,就會按照pathname.h中所指定的文家位置去尋找options腳本檔案。這個可以按照需要指定檔案的位置,確定pppd能夠準确找到該檔案。
Pppd找到options檔案後,按順序讀入參數行。在這裡,就可以擷取系統要使用的是哪個裝置來進行聯網、裝置的速率是多少。
Pppd 将配置的參數解析為程式當中的全局變量辨別符,進行pppd連接配接控制。
三.實踐情況
下面是FT282 上的PPP連接配接使用的OPTIONS、 CHAT和PAP-SECRETS腳本。
OPTIONS:
connect "/usr/bin/chat -v -t6 -f /var/ppp/td-scdma_chat"
ttyUSB0
115200
debug
logfile /var/log/ppplog
mtu 1500
-detach
noauth
noipdefault
defaultroute
usepeerdns
crtscts
lock
lcp-echo-failure 4
-ccp
-vj
-chap
-mschap-v2
user
hide-password
CHAT:
"" AT
OK ATDT*98*1#
CONNECT ""
PAP-SECRETS:
wap *wap
經過在FT282上進行測試,發現能夠順利進行PPP連接配接。