#!/bin/bash # List of remote servers start_node=0 stop_node=24 NODE_LIST=$(seq $start_node 1 $stop_node) REMOTE_USER="root" SEARCH_MAC="$1" # Check if search MAC address is provided if [ -z "$SEARCH_MAC" ]; then echo "Usage: $0 " exit 1 fi # SSH command to execute on remote server # SSH_COMMAND="sudo iw dev | grep Interface | awk '{print \$2}' | xargs -I {} sudo iw dev {} info | grep addr | awk '{print \"Interface: \" \$1, \"MAC Address: \" \$2}'" SSH_COMMAND="sudo iw dev | grep Interface | awk '{print \$2}' | xargs -I {} sudo iw dev {} info | grep addr | awk '{print \$2}'" # SSH_COMMAND="ip -o link show | awk '{print \$2, \$13}'" # SSH_COMMAND="ip addr show | awk '/^[0-9]+:/ {print \$2}' | sed 's/://' | xargs -I {} ip addr show {} | awk '/link\/ether/ {print \"Interface: {}\", \"MAC Address: \" \$2}'" # SSH_COMMAND="sudo iw dev | grep Interface | awk '{print \$2}' | xargs -I {} sudo iw dev {} info | grep addr | awk '{print \$2}'" # SSH_COMMAND="ip addr show | grep -E '^[0-9]+:' | awk '{print \$2}' | sed 's/://' | xargs -I {} ip addr show {} | awk '/link\/ether/ {print \"Interface: \" \$2, \"MAC Address: \" \$2}'" # Function to check if MAC address is in the list # Arguments: MAC address, associated node, known MACs array check_mac_in_list() { local MAC=$1 local NODE=$2 declare -n KNOWN_MACS_REF=$3 for KEY in "${!KNOWN_MACS_REF[@]}"; do # echo "$KEY: ${KNOWN_MACS_REF[$KEY]}" if [[ "$KEY" == "$NODE" && "${KNOWN_MACS_REF[$KEY]}" == "$MAC" ]]; then return 0 fi done return 1 } # Iterate over each node for phy1 interfaces for NODE in $NODE_LIST; do if [[ $NODE -lt 10 ]];then current=apu0$NODE else current=apu$NODE fi echo "Connecting to $current for phy1 interface..." # Connect to remote server and execute SSH command PHY_MAC_INFO=$(ssh -o StrictHostKeyChecking=no "$REMOTE_USER@$current" "$SSH_COMMAND") IFS=$'\n' read -rd '' -a mac_array <<<"$PHY_MAC_INFO" echo "${mac_array[0]}" # echo "PHYMAC: ${PHY_MAC_INFO[0]}" # echo "SEARCHMAC: $SEARCH_MAC" # Check if the search MAC address exists in retrieved PHY_MAC_INFO if echo "${mac_array[0]}" | grep -q "$SEARCH_MAC"; then if check_mac_in_list "$SEARCH_MAC" "$current" "phy0MAC"; then echo "MAC address $SEARCH_MAC found on $current (phy1)" echo "Physical Interface Info:" echo "$PHY_MAC_INFO" exit 0 else echo "MAC address $SEARCH_MAC found on $current for phy1, but it's not in the known list" echo "Physical Interface Info:" echo "$PHY_MAC_INFO" exit 1 fi fi done # Iterate over each node for phy0 interfaces for NODE in $NODE_LIST; do if [[ $NODE -lt 10 ]];then current=apu0$NODE else current=apu$NODE fi echo "Connecting to $current for phy0 interface..." # Connect to remote server and execute SSH command PHY_MAC_INFO=$(ssh -o StrictHostKeyChecking=no "$REMOTE_USER@$current" "$SSH_COMMAND") IFS=$'\n' read -rd '' -a mac_array <<<"$PHY_MAC_INFO" echo "${mac_array[1]}" # echo "PHYMAC: ${PHY_MAC_INFO[1]}" # Check if the search MAC address exists in retrieved PHY_MAC_INFO if echo "${mac_array[1]}" | grep -q "$SEARCH_MAC"; then if check_mac_in_list "$SEARCH_MAC" "$current" phy1MAC; then echo "MAC address $SEARCH_MAC found on $current (phy0)" echo "Physical Interface Info:" echo "$PHY_MAC_INFO" exit 0 else echo "MAC address $SEARCH_MAC found on $current for phy0, but it's not in the known list" echo "Physical Interface Info:" echo "$PHY_MAC_INFO" exit 1 fi fi done # If the script reaches here, the MAC address was not found on any node echo "MAC address $SEARCH_MAC not found on any node" exit 1