mirror of
https://github.com/MiSTer-devel/Scripts_MiSTer.git
synced 2026-04-19 03:05:34 +00:00
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 ^^
51 lines
1.9 KiB
Bash
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
|