Como contar o número de interfaces em uma ponte

2

Eu quero trazer uma ponte para baixo somente quando a última porta for removida e, portanto, eu tenho essa verificação um tanto piegas para fazer isso

brctl show parece estranho de analisar para obter as informações e não se sente muito melhor do que o que eu tenho abaixo. Existe um método mais limpo?

 brctl_count_if()
 {
        local BRIDGE=$1

        if [ ! -d /sys/devices/virtual/net/$BRIDGE ]; then
            echo 0
            return
        fi

        /bin/ls -1 /sys/devices/virtual/net/$BRIDGE/brif 2>/dev/null | wc -l
 }
    
por Neil McGill 25.11.2014 / 15:18

1 resposta

2

Você pode fazer isso:

has_ports() {
  ls -A "/sys/devices/virtual/net/$1/brif/" 2> /dev/null | grep -q .
}

has_ports br0 || brctl delbr br0

Ou:

if ! has_ports br0; then
  brctl delbr br0
fi

(observe que você precisa do -A , pois os nomes da interface podem começar com . ).

Para contar o número de portas:

com zsh :

ports=(/sys/devices/virtual/net/$bridge/brif/*(DN:t))
printf '%s\n' "$#ports ports in $bridge"

(:t) para ter apenas os nomes dos arquivos em vez de caminhos completos.

com bash :

shopt -s nullglob dotglob
ports=("/sys/devices/virtual/net/$brige/brif/"*)
printf '%s\n' "${#ports[@]} ports in $bridge"

(observe que as portas contêm os caminhos completos, pois bash não tem equivalente para zsh ' :t ).

Ambos retornariam 0 para uma ponte que não existe.

    
por 25.11.2014 / 15:32

Tags