-
- while :; do
- type=$(getbyte) || return 1
- subtype=$(getbyte) || return 1
- len=$(getword) || return 1
- hextype=$(printf "%02x%02x" "$type" "$subtype")
- if [[ $first == 1 ]]; then
- first=0
- elif [[ $hextype != "7fff" ]]; then
- printf "/"
- fi
- case $hextype in
- 0101)
- # PCI
- tt=$(getword)
- printf "PCI(0x%x,0x%x)" $(($tt / 256)) $(($tt & 255))
- ;;
- 0201)
- # ACPI
- printf "Acpi(0x%x,0x%x)" $(($(getword) + $(getword) * 65536)) $(($(getword) + $(getword) * 65536))
- ;;
- 0303)
- # FIBRE
- getword &>/dev/null
- getword &>/dev/null
- printf "Fibre(0x%x%x%x%x%x%x%x%x,0x%x)" \
- $(getbyte) $(getbyte) $(getbyte) $(getbyte) \
- $(getbyte) $(getbyte) $(getbyte) $(getbyte) \
- $(( $(getword) + $(getword) * 65536 + 4294967296 * ( $(getword) + $(getword) * 65536 ) ))
- ;;
- 030b)
- # MAC
- printf "MAC(%02x%02x%02x%02x%02x%02x," $(getbyte) $(getbyte) $(getbyte) $(getbyte) $(getbyte) $(getbyte)
- read -r -N 26 tt || return 1
- printf "0x%x)" $(getbyte)
- ;;
- 0314)
- # VLAN
- printf "VLAN(%d)" $(getword)
- ;;
- 7fff)
- # END
- printf "\n"
- return 0
- ;;
- *)
- printf "Unknown(Type:%d SubType:%d len=%d)" "$type" "$subtype" "$len"
- read -r -N $(($len-4)) tt || return 1
- ;;
- esac
- done
+ {
+ getword >/dev/null
+ getword >/dev/null
+ while :; do
+ type=$(getbyte) || return 1
+ subtype=$(getbyte) || return 1
+ len=$(getword) || return 1
+ hextype=$(printf "%02x%02x" "$type" "$subtype")
+ if [[ $first == 1 ]]; then
+ first=0
+ elif [[ $hextype != "7fff" ]]; then
+ printf "/"
+ fi
+ case $hextype in
+ 0101)
+ # PCI
+ tt=$(getword)
+ printf "PCI(0x%x,0x%x)" $(($tt / 256)) $(($tt & 255))
+ ;;
+ 0201)
+ # ACPI
+ printf "Acpi(0x%x,0x%x)" $(($(getword) + $(getword) * 65536)) $(($(getword) + $(getword) * 65536))
+ ;;
+ 0303)
+ # FIBRE
+ getword &>/dev/null
+ getword &>/dev/null
+ printf "Fibre(0x%x%x%x%x%x%x%x%x,0x%x)" \
+ $(getbyte) $(getbyte) $(getbyte) $(getbyte) \
+ $(getbyte) $(getbyte) $(getbyte) $(getbyte) \
+ $(( $(getword) + $(getword) * 65536 + 4294967296 * ( $(getword) + $(getword) * 65536 ) ))
+ ;;
+ 030b)
+ # MAC
+ printf "MAC(%02x%02x%02x%02x%02x%02x," $(getbyte) $(getbyte) $(getbyte) $(getbyte) $(getbyte) $(getbyte)
+ for((i=0; i<26; i++)); do tt=$(getbyte) || return 1; done
+ #read -r -d '' -n 26 tt || return 1
+ printf "0x%x)" $(getbyte)
+ ;;
+ 0314)
+ # VLAN
+ printf "VLAN(%d)" $(getword)
+ ;;
+ 7fff)
+ # END
+ printf "\n"
+ return 0
+ ;;
+ *)
+ #printf "Unknown(Type:0x%02x SubType:0x%02x len=%d)\n" "$type" "$subtype" "$len" >&2
+ for((i=0; i<len-4; i++)); do tt=$(getbyte); done
+ ;;
+ esac
+ done
+ } < "$data"