<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                本節將介紹CL的構造函數以及Netd的測試工具ndc。 **1.CL構造函數** 在前文的2.2.3節中已經介紹了CL構造函數的前半部分,下面接著介紹CL構造函數的后半 部分,代碼如下所示。 **CommandListener::CommandListener構造函數** ~~~ CommandListener::CommandListener() : FrameworkListener("netd", true) { ......// 創建命令和命令控制對象 // 初始化iptables中的各個Table及相應Chain和Rules // createChildChains第一個參數用于指明針對IPv4還是IPv6 createChildChains(V4V6, "filter", "INPUT", FILTER_INPUT); createChildChains(V4V6, "filter", "FORWARD", FILTER_FORWARD); createChildChains(V4V6, "filter", "OUTPUT", FILTER_OUTPUT); createChildChains(V4V6, "raw", "PREROUTING", RAW_PREROUTING); createChildChains(V4V6, "mangle", "POSTROUTING", MANGLE_POSTROUTING); createChildChains(V4, "nat", "PREROUTING", NAT_PREROUTING); createChildChains(V4, "nat", "POSTROUTING", NAT_POSTROUTING); // 4.2以后,Netd允許OEM廠商可自定義一些規則 // 這些規則在/system/bin/oem-iptables-init.sh文件中保存 setupOemIptablesHook(); // 初始化iptables中的一些chain,以及初始化路由表 sFirewallCtrl->setupIptablesHooks(); sNatCtrl->setupIptablesHooks(); sBandwidthCtrl->setupIptablesHooks(); sIdletimerCtrl->setupIptablesHooks(); // 初始時,Netd將禁止帶寬控制功能 sBandwidthCtrl->enableBandwidthControl(false); ~~~ 由上述代碼可知,CL構造函數的后半部分工作主要是利用iptables等工具創建較多的Chain和Rule,以及對某些命令控制對象進行初始化。 本節將重點關注iptables執行后的效果。圖2-13所示為CL構造后,iptable中filter表內所創建的Chain和Rule。 圖2-13中列出的是filter表中部分Chain的截圖,其中,target是目標名,prot是protocol之意,opt是選項,source和destination分別表示數據包的源和目標地址。 - bw_INPUT、bw_OUTPUT和bw_FORWARD Chain用于帶寬(Bandwidth)控制。 - fw_INPUT、fw_OUTPUT和fw_FORWARD用于防火墻(Firewall)控制。 - natctrl_FORWARD用于網絡地址轉換(NAT)控制。 - oem_fwd、oem_out用于OEM廠商自定義的控制。 :-: ![](https://box.kancloud.cn/235441efce178ae1fd37379644e22a57_534x557.jpg) 圖2-13 CL創建后filter表的內容 **2.ndc測試工具** ndc是Android為Netd提供的一個測試工具。其主要功能有: - 監視Netd中發生的事情。 - 支持通過命令行發送命令給Netd去執行。 相信讀者很輕松就能想到ndc的實現原理,其實它就是連接上位于netd進程中的"netd"監聽socket,然后從Netd接收信息或發送命令給Netd。 圖2-14為使用ndc monitor選項監控Galaxy Note 2打開Wi-Fi功能時得到的輸出。 :-: ![](https://box.kancloud.cn/d02427829934de3c093e6e60b91f43f4_604x538.jpg) 圖2-14 ndc monitor執行結果 利用ndc來監視Netd的工作狀況是一個簡單高效的方法。另外,還可利用ndc來測試CommandListener中所支持的各種命令。這對于網絡相關模塊的HAL層開發者來說無疑是一個很大的幫助。為了方便讀者理解,本節下文也將利用ndc來展示命令執行的結果。 在正式介紹CL中的命令對象之前,先介紹這些命令對象處理的通用流程。 如圖2-4所示,命令對象的真正控制函數是runCommand,而絕大部分命令的runCommand函數都有類似如下的代碼結構(此處以InterfaceCmd為例)。 **CommandListener.cpp::InterfaceCmd:runCommand** ~~~ int CommandListener::InterfaceCmd::runCommand(SocketClient *cli, int argc, char **argv) { if (argc < 2) {// 先做參數檢查 cli->sendMsg(ResponseCode::CommandSyntaxError, "Missing argument", false); return 0; } // 然后分別處理自己支持的各種命令選項 if (!strcmp(argv[1], "list")) { ......// 處理"list"選項 } else if (!strcmp(argv[1], "readrxcounter")) { ......// 處理"readrxcounter"選項 } ......// 處理其他選項 } ~~~ 由上述InteraceCmd的處理函數可知,runCommand的處理流程如下。 1)首先參數檢查,一般是檢查參數個數是否正確。 2)然后根據不同的選項進行對應的處理。 * * * * * **提示** 接下來分析CL中各個命令,由于其中涉及較多的知識,因此單獨增加“背景知識介紹”小節以幫助讀者更好地理解它們。 * * * * *
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看