Openwrt的ifup和ifdown分析

/sbin/ifup脚本源码:

#!/bin/sh                                                                             

ifup_all=                                                                             
setup_wifi= 

if_call() {                   
        local interface="$1"                                                          
        for mode in $modes; do                                                        
                ubus call network.interface $mode "{ \"interface\" : \"$interface\" }"
        done                   
}                                      

case "$0" in                           
        *ifdown) modes=down;;  
        *ifup)                 
                modes="down up"
                setup_wifi=1           
        ;;                             
        *) echo "Invalid command: $0";;
esac                         

while :; do                        
        case "$1" in               
                -a)               
                        ifup_all=1
                        shift
                ;;                 
                -w)                
                        setup_wifi=
                        shift                       
                ;;                                  
                *)                                               
                        break                                    
                ;;                                               
        esac                                              
done                                                

[ "$modes" = "down up" ] && ubus call network reload             
if [ -n "$ifup_all" ]; then                                      
        for interface in `ubus -S list 'network.interface.*'`; do
                if_call "${interface##network.interface.}"
        done                                 
        [ -n "$setup_wifi" ] && /sbin/wifi up
        exit                                                
else                                                                 
        ubus -S list "network.interface.$1" > /dev/null || {         
                echo "Interface $1 not found"                        
                exit           
        }                      
        if_call "$1"                       
fi                                                                   

if [ -n "$setup_wifi" ] && grep -sq config /etc/config/wireless; then
        . /lib/functions.sh                  

        find_related_radios() {                                       
                local wdev wnet                                       
                config_get wdev "$1" device                           
                config_get wnet "$1" network

                if [ -n "$wdev" ]; then                          
                        for wnet in $wnet; do                         
                                if [ "$wnet" = "$network" ]; then     
                                        append radio_devs "$wdev" "$N"
                                fi                   
                        done                         
                fi                                   
        }                                             

        local radio_devs                              
        local network="$1" 
        config_load wireless                                          
        config_foreach find_related_radios wifi-iface

        local dev                                    
        for dev in $(echo "$radio_devs" | sort -u); do
                /sbin/wifi up "$dev"                  
        done                                          
fi                                     

ifup和ifdown的脚本一模一样,shell代码中做了一下case选择。
如果执行ifup wan , 则关闭wan口,分析一下如何实现
ifup wan之后,进入case选择ifup
设定两个标志位
modes=”down up”
setup_wifi=1
进入while循环

while :; do
        case "$1" in
                -a)
                        ifup_all=1
                        shift
                ;;
                -w)
                        setup_wifi=
                        shift
                ;;
                *)
                        break
                ;;
        esac
done

这里解析了ifup -a 和 ifup -w命令

ifup_all 调用了ubus -S list ‘network.interface.*’
然后wifi up

setup_wifi
执行 wifi up

后面的为修改/etc/config/wireless的配置

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值