#!/usr/bin/env bash # ============================================================================ # BLACKROAD OS, INC. - PROPRIETARY AND CONFIDENTIAL # Copyright (c) 2025-2026 BlackRoad OS, Inc. All Rights Reserved. # ============================================================================ # br-mesh - BlackRoad mesh network management # Usage: br-mesh set -eo pipefail source "$HOME/.blackroad/config/nodes.sh" 2>/dev/null || { PINK='\033[38;5;205m'; AMBER='\033[38;5;214m'; GREEN='\033[38;5;82m' RED='\033[38;5;196m'; BLUE='\033[38;5;69m'; VIOLET='\033[38;5;135m'; RESET='\033[0m' } DIM='\033[2m' # Service ports declare -A PORTS=( [fastapi]=8000 [webhooks]=9000 [node]=3000 [ollama]=11434 [nginx]=80 [ssh]=22 ) case "$1" in status|"") printf '%b━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━%b\n' "$PINK" "$RESET" printf '%b BlackRoad Mesh Network%b\n' "$PINK" "$RESET" printf '%b━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━%b\n\n' "$PINK" "$RESET" printf '%bLocal Network:%b\n' "$BLUE" "$RESET" for host in "${PI_NODES[@]}"; do local ip="${NODE_IP[$host]:-}" [[ -z "$ip" ]] && continue if ping -c 1 -W 1 "$ip" &>/dev/null; then printf ' %b●%b %s: %s\n' "$GREEN" "$RESET" "$host" "$ip" else printf ' %b○%b %s: %s %b(offline)%b\n' "$RED" "$RESET" "$host" "$ip" "$DIM" "$RESET" fi done echo "" printf '%bCloud:%b\n' "$VIOLET" "$RESET" for host in "${CLOUD_NODES[@]}"; do local ip="${NODE_IP[$host]:-}" [[ -z "$ip" ]] && continue if ping -c 1 -W 2 "$ip" &>/dev/null; then printf ' %b●%b %s: %s\n' "$GREEN" "$RESET" "$host" "$ip" else printf ' %b○%b %s: %s\n' "$RED" "$RESET" "$host" "$ip" fi done echo "" printf '%bTailscale Mesh:%b\n' "$AMBER" "$RESET" tailscale status 2>/dev/null | head -10 || echo " Run: tailscale status" ;; ports) host="${2:-cecilia}" local ip="${NODE_IP[$host]:-$host}" printf '%b━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━%b\n' "$PINK" "$RESET" printf '%bOpen Ports on %b%s%b\n' "$PINK" "$AMBER" "$host" "$RESET" printf '%b━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━%b\n' "$PINK" "$RESET" for svc in fastapi webhooks node ollama nginx ssh; do port="${PORTS[$svc]}" if nc -z -w 2 "$ip" "$port" 2>/dev/null; then printf ' %b●%b %s: port %d open\n' "$GREEN" "$RESET" "$svc" "$port" else printf ' %b○%b %s: port %d closed\n' "$DIM" "$RESET" "$svc" "$port" fi done ;; connect) host="${2:-cecilia}" local target target=$(br_ssh_target "$host" 2>/dev/null) || target="$host" printf '%bConnecting to %s...%b\n' "$AMBER" "$host" "$RESET" ssh $BR_SSH_OPTS "$target" ;; scan) printf '%bScanning local network...%b\n' "$PINK" "$RESET" for i in $(seq 1 254); do ip="192.168.4.$i" if ping -c 1 -W 1 "$ip" &>/dev/null; then # Check if it's a known node local known="" for node in "${ALL_NODES[@]}"; do [[ "${NODE_IP[$node]:-}" == "$ip" ]] && known="$node" done if [[ -n "$known" ]]; then printf '%b●%b %s: %s\n' "$GREEN" "$RESET" "$ip" "$known" else printf '%b●%b %s: %b(unknown)%b\n' "$AMBER" "$RESET" "$ip" "$DIM" "$RESET" fi fi done ;; dns) printf '%b━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━%b\n' "$PINK" "$RESET" printf '%bBlackRoad DNS Records%b\n' "$PINK" "$RESET" printf '%b━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━%b\n' "$PINK" "$RESET" for host in "${ALL_NODES[@]}"; do local ip="${NODE_IP[$host]:-}" [[ -z "$ip" ]] && continue printf '%b%s%b\n' "$AMBER" "$host" "$RESET" printf ' Local: %s\n' "$ip" printf ' .blackroad.io: %s.blackroad.io\n' "$host" done ;; *) printf '%bbr-mesh%b - BlackRoad mesh network manager\n\n' "$PINK" "$RESET" echo "Commands:" echo " status - Show mesh status (default)" echo " ports - Check open ports on host" echo " connect - SSH to host" echo " scan - Scan for new devices" echo " dns - Show DNS records" ;; esac