Allocate smallest unit number from pool from ifc_alloc_unit_next() and exact unit number (if available) from ifc_alloc_unit_specific().
While here, fix potential endless loop (*unit < 0 -> alloc_unr() succeeds but ifunit() fails -> (*unit)++ and then alloc_unr_specific() fails ->(*unit) is overridden with return result (-1) and then used instead of previous unit number).