31001 seems like the correct number to me for a board-level UD.
Let me try to clear up your confusion:
1) Interface Name: String describing which board to use. Of the format "GPIBx", where x is 0-99. This string is passed to an ibfind call to create a session to a board.
2) Device Name: String descibing a device session. This is typically of the form "DEVx". However, these can be renamed to anything that doesn't start with "GPIB". This string is passed to an ibfind call to create a session to a device. Typically NI recommends using ibdev instead of ibfind for device level sessions (another topic).
3) Board Name: I typically think of this as the same as #1.
4) Unit Descriptor: This is the return valu
e from an ibfind or ibdev call. If you called ibfind with a board name this will be a board-level descriptor. If you called ibfind with a device name or called ibdev this will be a device-level descriptor.
5) Board Index (not on your list). This is the index of a GPIB board. This is the x (from "GPIBx") in case #1 above.
Board-level calls (ibsic, ibsre, ...) require a board-level descriptor.
Device-level calls (ibconfig (IbcREADDR), ibclr, ...) require device-level descriptors
488.2-Style calls (SendIFC, SendList, ...) require a board index.
If you pass an incorrect "handle" to any particular call you will get EHDL.
The IbcREADDR ibconfig option is good only for a device-level descriptor. Since you are using it with your board-level handle, you are getting this error. You may have been passing this handle to SendIFC (I didn't look at the original posting) and that would also return EHDL since that needs an index.