Files
Scripts_MiSTer/mac_address_change.sh
Akuma-Git 6b4e705b26 Update mac_address_change.sh (#91)
Regarding: https://misterfpga.org/viewtopic.php?t=3661

1. The reason hexdump fails is because of not using the hexdump "-v" parameter
 -v 
Cause hexdump to display all input data. Without the -v option, any number of groups of output lines, which would be identical to the immediately preceding group of output lines (except for the input offsets), are replaced with a line comprised of a single asterisk.

and therefor the c-style $(( )) arithmetic would fail if a group is replaced with a single asterisk

2. & 0xFEFFFFFFFFFF | 0x020000000000 should be replaced by & 0xFCFFFFFFFFFF as you want to zero the last two bits, namely Universal vs local (U/L bit) and the Unicast vs multicast (I/G bit), otherwise you will not generate a valid MAC address.

3. write MAC address  in uppercase with the ^^
2022-06-26 03:06:41 +08:00

51 lines
1.9 KiB
Bash

#!/bin/bash
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# Copyright 2019 Alessandro "Locutus73" Miele
# You can download the latest version of this script from:
# https://github.com/MiSTer-devel/Scripts_MiSTer
# Version 1.0 - 2019-05-13 - First commit
# ========= OPTIONS ==================
MAC_ADDRESS=""
# ========= CODE STARTS HERE =========
# get the name of the script, or of the parent script if called through a 'curl ... | bash -'
ORIGINAL_SCRIPT_PATH="${0}"
[[ "${ORIGINAL_SCRIPT_PATH}" == "bash" ]] && \
ORIGINAL_SCRIPT_PATH="$(ps -o comm,pid | awk -v PPID=${PPID} '$2 == PPID {print $1}')"
# ini file can contain user defined variables (as bash commands)
# Load and execute the content of the ini file, if there is one
INI_PATH="${ORIGINAL_SCRIPT_PATH%.*}.ini"
if [[ -f "${INI_PATH}" ]] ; then
TMP=$(mktemp)
# preventively eliminate DOS-specific format and exit command
dos2unix < "${INI_PATH}" 2> /dev/null | grep -v "^exit" > ${TMP}
source ${TMP}
rm -f ${TMP}
fi
# generate new MAC address
MAC_ADDRESS="$(printf "%012x" $(( 0x$(hexdump -n6 -ve '/1 "%02X"' /dev/urandom) & 0xFCFFFFFFFFFF )) | sed 's/../:&/2g;s/^://')"
echo "ethaddr=${MAC_ADDRESS^^}" > /media/fat/linux/u-boot.txt
echo -e "The new MAC address is:\n${MAC_ADDRESS^^}\nit will become effective\non next reboot.\n"
exit 0