Skip to content

Commit 8c96443

Browse files
committed
[#84] Retrieve permanent MAC address on NICs.
1 parent ab722a5 commit 8c96443

File tree

4 files changed

+48
-25
lines changed

4 files changed

+48
-25
lines changed

Diff for: build.gradle

+2-1
Original file line numberDiff line numberDiff line change
@@ -127,13 +127,14 @@ ospackage {
127127
os=LINUX
128128
arch=NOARCH
129129
version='1.1.3'
130-
release='3'
130+
release='4'
131131

132132
into '/opt/paccor'
133133
user 'root'
134134
fileMode=0755
135135

136136
requires('dmidecode', '3.2', GREATER | EQUAL)
137+
requires('ethtool')
137138
requires('jq')
138139
requires('lshw')
139140
requires('vim-common')

Diff for: scripts/allcomponents.sh

+8-7
Original file line numberDiff line numberDiff line change
@@ -570,11 +570,12 @@ parseNicData () {
570570

571571
for ((i = 0 ; i < numHandles ; i++ )); do
572572
manufacturer=$(lshwGetVendorIDFromBusItem "$i")
573-
model=$(lshwGetProductIDFromBusItem "$i")
574-
serialConstant=$(lshwGetSerialFromBusItem "$i")
573+
model=$(lshwGetProductIDFromBusItem "$i")
574+
serialConstant=$(lshwGetLogicalNameFromBusItem "$i")
575+
serialConstant=$(ethtoolPermAddr "$serialConstant")
575576
serialConstant=$(standardizeMACAddr "${serialConstant}")
576577
serial=""
577-
revision=$(lshwGetVersionFromBusItem "$i")
578+
revision=$(lshwGetVersionFromBusItem "$i")
578579

579580
if [[ -z "${manufacturer// }" ]] && [[ -z "${model// }" ]] && (! [[ -z "${serialConstant// }" ]] || ! [[ -z "${revision// }" ]]); then
580581
manufacturer=$(lshwGetVendorNameFromBusItem "$i")
@@ -644,9 +645,9 @@ parseHddData () {
644645

645646
for ((i = 0 ; i < numHandles ; i++ )); do
646647
manufacturer=$(lshwGetVendorIDFromBusItem "$i")
647-
model=$(lshwGetProductIDFromBusItem "$i")
648-
serial=$(lshwGetSerialFromBusItem "$i")
649-
revision=$(lshwGetVersionFromBusItem "$i")
648+
model=$(lshwGetProductIDFromBusItem "$i")
649+
serial=$(lshwGetSerialFromBusItem "$i")
650+
revision=$(lshwGetVersionFromBusItem "$i")
650651

651652
if [[ -z "${manufacturer// }" ]] && [[ -z "${model// }" ]] && (! [[ -z "${serial// }" ]] || ! [[ -z "${revision// }" ]]); then
652653
model=$(lshwGetProductNameFromBusItem "$i")
@@ -705,7 +706,7 @@ parseGfxData () {
705706

706707
if [[ -z "${manufacturer// }" ]] && [[ -z "${model// }" ]] && (! [[ -z "${serial// }" ]] || ! [[ -z "${revision// }" ]]); then
707708
manufacturer=$(lshwGetVendorNameFromBusItem "$i")
708-
model=$(lshwGetProductNameFromBusItem "$i")
709+
model=$(lshwGetProductNameFromBusItem "$i")
709710
fi
710711

711712
if [[ -z "${manufacturer// }" ]]; then

Diff for: scripts/hw.sh

+17-2
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ lshwNumBusItems () {
5656
lshwGetVendorIDFromBusItem () {
5757
itemnumber="${1}"
5858
result=""
59-
str=$(echo "${busitems[$itemnumber]}" | grep -e "^vendor:.*[^\[]\[.\+$" | sed 's/^vendor:.*[^\[]\[\([0-9A-Fa-f]\{4\}\)\]$/\1/')
59+
str=$(echo "${busitems[$itemnumber]}" | grep -e "^vendor:.*[^\[]\[.\+$" | sed 's/^vendor:.*[^\[]\[\([0-9A-Fa-f]\+\)\]$/\1/')
6060
if [ -n "$str" ]; then
6161
result=$str
6262
fi
@@ -65,7 +65,7 @@ lshwGetVendorIDFromBusItem () {
6565
lshwGetProductIDFromBusItem () {
6666
itemnumber="${1}"
6767
result=""
68-
str=$(echo "${busitems[$itemnumber]}" | grep -e "^product:.*[^\[]\[.\+$" | sed 's/^product:.*[^\[]\[[0-9A-Fa-f]\{4\}:\([0-9A-Fa-f]\{4\}\)\]$/\1/')
68+
str=$(echo "${busitems[$itemnumber]}" | grep -e "^product:.*[^\[]\[.\+$" | sed 's/^product:.*[^\[]\[[0-9A-Fa-f]\+:\([0-9A-Fa-f]\+\)\]$/\1/')
6969
if [ -n "$str" ]; then
7070
result=$str
7171
fi
@@ -89,6 +89,15 @@ lshwGetSerialFromBusItem () {
8989
fi
9090
printf "$result"
9191
}
92+
lshwGetLogicalNameFromBusItem () {
93+
itemnumber="${1}"
94+
result=""
95+
str=$(echo "${busitems[$itemnumber]}" | grep -e "^logical name:.*$" | sed 's/^logical name: \(.\+\)$/\1/')
96+
if [ -n "$str" ]; then
97+
result=$str
98+
fi
99+
printf "$result"
100+
}
92101
lshwGetVendorNameFromBusItem () {
93102
itemnumber="${1}"
94103
result=""
@@ -131,6 +140,12 @@ lshwBusItemWirelessCap () {
131140
fi
132141
printf "$result"
133142
}
143+
ethtoolPermAddr () {
144+
iface="${1}"
145+
result=""
146+
str=$(ethtool -P "$iface" 2> /dev/null | grep -e "^Perm.*$" | sed 's/^Permanent address: \([0-9a-f:]\+\)$/\1/')
147+
printf "$result"
148+
}
134149
#lshwParse "disk"
135150
#lshwNetwork
136151
#echo ${items[0]}

Diff for: scripts/smbios.sh

+21-15
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,23 @@ dmidecodeHandles () {
99
}
1010
dmidecodeData () {
1111
handle="${1}"
12-
str=$(dmidecode -H "$handle" -u | awk '/Header and Data:/{f=1;next} /Strings/{f=0} f' | tr "\n\r\t" ' ' | tr -s ' ' | sed -e 's/^[[:space:]]*//' | sed -e 's/[[:space:]]*$//')
13-
old="$IFS"
14-
IFS=' '
15-
tableData=($str)
16-
IFS="$old"
12+
if [[ $handle =~ ^0x[0-9A-Fa-f]+$ ]]; then
13+
str=$(dmidecode -H "$handle" -u | awk '/Header and Data:/{f=1;next} /Strings/{f=0} f' | tr "\n\r\t" ' ' | tr -s ' ' | sed -e 's/^[[:space:]]*//' | sed -e 's/[[:space:]]*$//')
14+
old="$IFS"
15+
IFS=' '
16+
tableData=($str)
17+
IFS="$old"
18+
fi
1719
}
1820
dmidecodeStrings () {
1921
handle="${1}"
20-
str=$(dmidecode -H "$handle" -u | awk '/Strings/{f=1;next} /^\w+$/{f=0} f' | sed 's/^[^"]*$//g' | sed 's/^\w+//g' | sed '/^[[:space:]]*$/d')
21-
old="$IFS"
22-
IFS=$'\n'
23-
tableStrings=($str)
24-
IFS="$old"
22+
if [[ $handle =~ ^0x[0-9A-Fa-f]+$ ]]; then
23+
str=$(dmidecode -H "$handle" -u | awk '/Strings/{f=1;next} /^\w+$/{f=0} f' | sed 's/^[^"]*$//g' | sed 's/^\w+//g' | sed '/^[[:space:]]*$/d')
24+
old="$IFS"
25+
IFS=$'\n'
26+
tableStrings=($str)
27+
IFS="$old"
28+
fi
2529
}
2630
dmidecodeParseHandle () {
2731
handle="${1}"
@@ -44,11 +48,13 @@ dmidecodeGetByte () {
4448
dmidecodeGetString () {
4549
strref="${1}"
4650
str=""
47-
strrefDec=$(printf "%d" "0x""$strref")
48-
lenDec=$(printf "%d" "0x"${#tableStrings[@]})
49-
if [ $strrefDec -le $lenDec ] && [ $strrefDec -gt 0 ]; then
50-
str="${tableStrings[$strrefDec-1]}"
51-
str=$(printf "$str" | sed 's/^[ \t]*"\?//;s/"\?[ \t]*$//')
51+
if [[ $strref =~ ^[0-9A-Fa-f]+$ ]]; then
52+
strrefDec=$(printf "%d" "0x""$strref")
53+
lenDec=$(printf "%d" "0x"${#tableStrings[@]})
54+
if [ $strrefDec -le $lenDec ] && [ $strrefDec -gt 0 ]; then
55+
str="${tableStrings[$strrefDec-1]}"
56+
str=$(printf "$str" | sed 's/^[ \t]*"\?//;s/"\?[ \t]*$//')
57+
fi
5258
fi
5359
printf "$str"
5460
}

0 commit comments

Comments
 (0)