Skip to content

Network namespace ​

Network namespace 的组件名称为 network_namespace, 相关内核

ini
# General setup
# -> Configure standard kernel features (expert users)
# -> Multiple users, groups and capabilities support
CONFIG_MULTIUSER=y

# General setup
# -> Namespaces support
CONFIG_NAMESPACES=y

# General setup
# -> Namespaces support
# -> Network namespace
CONFIG_NET_NS=y

检查工具为

bash
#!/bin/bash

source ./kernel_config_utils.sh

network_namespace_check() {
    is_error=false
    if ! kernel_config_check CONFIG_MULTIUSER; then
        is_error=true
    fi
    if ! kernel_config_check CONFIG_NAMESPACES; then
        is_error=true
    fi
    if ! kernel_config_check CONFIG_NET_NS; then
        is_error=true
    fi
    if [ "$is_error" == "true" ]; then
        return 1
    fi

    local ifname="dodo"
    local peer_ifname="lala"

    if ! netif_veth_new $ifname $peer_ifname; then
        return 1
    fi
    while :
    do
        local peer_netns="lala"

        if ! ${IP_CMD} netns add $peer_netns; then
            echo "add netns failed: netns '$peer_netns'"
            is_error=true
            break
        fi

        while :
        do
            local ip="192.168.66.1"
            local peer_ip="192.168.66.2"
            local netmask_len="24"

            if ! ${IP_CMD} link set $ifname up; then
                echo "set netif up failed: ifname '$ifname'"
                is_error=true
                break
            fi
            if ! ${IP_CMD} address add $ip/$netmask_len dev $ifname; then
                echo "add netif address failed: ifname '$ifname'"
                is_error=true
                break
            fi
            if ! ${IP_CMD} link set $peer_ifname netns $peer_netns; then
                echo "set netif netns failed: peer_ifname '$peer_ifname'"
                is_error=true
                break
            fi
            if ! ${IP_CMD} netns exec $peer_netns ${IP_CMD} link set $peer_ifname up; then
                echo "set netif up failed: peer_ifname '$peer_ifname'"
                is_error=true
                break
            fi
            if ! ${IP_CMD} netns exec $peer_netns ${IP_CMD} address add $peer_ip/$netmask_len dev $peer_ifname; then
                echo "add netif address failed: peer_ifname '$peer_ifname'"
                is_error=true
                break
            fi
            if ! ${PING_CMD} -I $ifname -c 1 -W 1 $peer_ip > /dev/null; then
                echo "ping peer timeout: ifname '$ifname', peer_ifname '$peer_ifname'"
                is_error=true
                break
            fi

            break
        done

        ${IP_CMD} netns del $peer_netns
        break
    done
    netif_veth_delete $ifname $peer_ifname
    if [ "$is_error" == "true" ]; then
        return 1
    fi

    return 0
}