我正在爲我的嵌入式Debian Linux系統編寫一個程序。它有一個單元調制解調器,它被調用爲ppp0,並且還有eth0,可以插入也可以不插入。我想讓系統工作的是它使用ppp0作爲默認路由,除非它可以建立到在eth0的外部世界,在這種情況下eth0應該成爲默認路由。 eth0電纜可能隨時拔掉。爲此,我編寫了一個C++程序,它使用curl嘗試通過eth0建立與公共Web服務器的連接。如果成功,它會嘗試去製作默認路由eth0。我借用了Linux pppd項目中的一些代碼來操縱路由信息。系統在ppp0激活時啓動。然後運行我的程序,它檢測到它可以通過eth0建立連接(當電纜插入時),然後它將默認路由更改爲eth0。之後,網絡以某種方式停止工作,我不能再ping和公共服務器。不知何故,我改變路線已經殺死了網絡。在我跑我的程序中,「路線」的輸出爲:Linux:我編程改變我的默認路由到eth0,但現在我不能ping,有什麼建議嗎?
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 80.sub-66-174-2 * 255.255.255.255 UH 0 0 0 ppp0 192.168.98.0 * 255.255.255.0 U 0 0 0 eth0 loopback * 255.0.0.0 U 0 0 0 lo default * 0.0.0.0 U 0 0 0 ppp0
我跑我的程序後,「路線」的輸出爲:
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 66.174.217.80 * 255.255.255.255 UH 0 0 0 ppp0 192.168.98.0 * 255.255.255.0 U 0 0 0 eth0 loopback * 255.0.0.0 U 0 0 0 lo default * 0.0.0.0 U 0 0 0 eth0
所以我看不到任何明顯有什麼問題的跡象。代碼發佈在http://pastebin.com/AwKdvSf1
感謝您的任何幫助或見解如何解決此問題。
網關和默認路由有什麼區別?在前後兩種情況下,route命令都顯示一個默認條目,那麼爲什麼在第二種情況下它不會用作默認路由? –
網關抱歉,我的意思是「默認網關」。在「默認」raw中,您應該在「網關」列下看到默認網關的IP地址。但它應該與ppp相同,但它與ppp一起工作的原因很可能是因爲通過ppp鏈路的網關IP是本地ppp設備本身。看看這裏: http://www.tldp.org/HOWTO/PPP-HOWTO/manual.html – UnX