Annotation of coherent/f/usr/include/sys/errno.h, revision 1.1.1.1

1.1       root        1: #ifndef        __SYS_ERRNO_H__
                      2: #define        __SYS_ERRNO_H__
                      3: 
                      4: /*
                      5:  * Error numbers for DDI/DKI drivers, as described in errnos (D5DK) in the
                      6:  * System V, Release 4 Multiprocessor "Device Driver Interface/Driver-Kernel
                      7:  * Interface Reference Manual". The additional commentary for the error
                      8:  * numbers also comes from this source, along with commentary from the SVR4
                      9:  * "Programmer's Reference Manual". RFS errors have not been included.
                     10:  *
                     11:  * Actual numeric values of error constants are derived from the System V ABI
                     12:  * "Intel 386 Processor Supplement".
                     13:  *
                     14:  * If these definitions are to be imported by <errno.h>, they *must* be macros
                     15:  * rather than enumerations or other kinds of constant, as required by the ISO
                     16:  * C standard (ISO/IEC 9989-1990).
                     17:  *
                     18:  * User-level programs should not use this file directly.
                     19:  */
                     20: 
                     21: #define        EPERM           1
                     22:        /*
                     23:         * PRM: Not super-user. Typically this error indicates an attempt to
                     24:         * modify a file in some way forbidden except to its owner or the
                     25:         * super-user. It is also returned for attempts by ordinary users to
                     26:         * do things only permitted to the super-user.
                     27:         *
                     28:         * DDI/DKI: Permission denied. Drivers can return this error when an
                     29:         * operation is attempted that requires more privelege than the
                     30:         * current process has.
                     31:         */
                     32: #define        ENOENT          2
                     33:        /*
                     34:         * PRM: No such file or directory. A file name is specified and the
                     35:         * file should exist but doesn't, or one of the directories in a path
                     36:         * name does not exist.
                     37:         */
                     38: #define        ESRCH           3
                     39:        /*
                     40:         * PRM: No such process. No process can be found corresponding to that
                     41:         * specified by PID in the kill () or ptrace () routine.
                     42:         */
                     43: #define        EINTR           4
                     44:        /*
                     45:         * PRM: Interrupted system call. An asynchronous signal (such as
                     46:         * interrupt or quit), which the user has elected to catch, occurred
                     47:         * during a system service routine. If execution is resumed after
                     48:         * processing the signal, it will appear as if the interrupted routine
                     49:         * call returned this error condition.
                     50:         *
                     51:         * DDI/DKI: Interrupted operation. Drivers can return this error
                     52:         * whenever an interruptible operation is interrupted by receipt of an
                     53:         * asynchronous signal.
                     54:         */
                     55: #define        EIO             5
                     56:        /*
                     57:         * PRM: I/O error. Some physical I/O error has occurred. This error
                     58:         * may in some cases occur on a call following the one to which it
                     59:         * actually applies.
                     60:         *
                     61:         * DDI/DKI: An I/O error has occurred. Drivers can return this error
                     62:         * when an input or output request has failed.
                     63:         */
                     64: #define        ENXIO           6
                     65:        /*
                     66:         * PRM: No such device or address. I/O on a special file refers to a
                     67:         * subdevice which does not exists, or exists beyond the limit of the
                     68:         * device. It may also occur when, for example, a tape drive is not
                     69:         * on-line or no disk pack is loaded on a drive.
                     70:         *
                     71:         * DDI/DKI: No such device or address. Drivers can return this error
                     72:         * when trying to open an invalid minor device, or when trying to
                     73:         * perform I/O past the end of a device.
                     74:         */
                     75: #define        E2BIG           7
                     76:        /*
                     77:         * PRM: Argument list too long. An argument list longer than ARG_MAX
                     78:         * bytes is presented to a member of the exec... () family of
                     79:         * routines. The argument list limit is the sum of the size of the
                     80:         * argument list plus the size of the environment's exported shell
                     81:         * variables.
                     82:         */
                     83: #define        ENOEXEC         8
                     84:        /*
                     85:         * PRM: Exec format error. A request is made to execute a file which,
                     86:         * although it has the appropriate permissions, does not start with a
                     87:         * valid format.
                     88:         */
                     89: #define        EBADF           9
                     90:        /*
                     91:         * PRM: Bad file number. Either a file descriptor refers to no open
                     92:         * file, or a read () [respectively, write ()] request is made to a
                     93:         * file that is open only for writing [respectively, reading].
                     94:         */
                     95: #define        ECHILD          10
                     96:        /*
                     97:         * PRM: No child processes. A wait () routine was executed by a
                     98:         * process that has no existing or unwaited-for child processes.
                     99:         */
                    100: #define        EAGAIN          11
                    101:        /*
                    102:         * PRM: No more processes. For example, a fork () routine failed
                    103:         * because the system's process table is full or the user is not
                    104:         * allowed to create any more processes, or a system call failed
                    105:         * because of insufficient memory or swap space.
                    106:         *
                    107:         * DDI/DKI: Temporary resource allocation failure; try again later.
                    108:         * Drivers can return this error when resource allocation fails, for
                    109:         * example kmem_alloc () or allocb ().
                    110:         */
                    111: #define        ENOMEM          12
                    112:        /*
                    113:         * PRM: Not enough space. During execution of an exec (), brk (), or
                    114:         * sbrk () routine, a program asks for more space than the system is
                    115:         * able to supply. This is not a temporary condition; the maximum size
                    116:         * is a system parameter. The error may also occur if the arrangement
                    117:         * of text, data, and stack segments requires too many segmentation
                    118:         * registers, or if there is not enough swap space during the fork ()
                    119:         * routine.
                    120:         *
                    121:         * DDI/DKI: Not enough memory. Drivers can return this error when
                    122:         * resource allocation fails and it is either inconvenient or
                    123:         * impossible for a retry to occur.
                    124:         */
                    125: #define        EACCES          13
                    126:        /*
                    127:         * PRM, DDI/DKI: Permission denied. An attempt was made to access a
                    128:         * file in a way forbidden by its file access permissions.
                    129:         */
                    130: #define        EFAULT          14
                    131:        /*
                    132:         * PRM: Bad address. The system encountered a hardware fault in
                    133:         * attempting to use an argument of a routine. For example, "errno"
                    134:         * potentially may be set to EFAULT any time a routine that takes a
                    135:         * pointer argument is passed an invalid address, if the system can
                    136:         * detect the condition. Because systems will differ in their ability
                    137:         * to reliably detect a bad address, on some implementations passing a
                    138:         * bad address to a routine will result in undefined behavior.
                    139:         *
                    140:         * DDI/DKI: Bad address. Drivers should return this error whenever a
                    141:         * call to copyin () or copyout () fails.
                    142:         */
                    143: #define        ENOTBLK         15
                    144:        /*
                    145:         * PRM: Block device required. A non-block file was mentioned where a
                    146:         * block device was required (e.g., in a call to the mount ()
                    147:         * routine).
                    148:         */
                    149: #define        EBUSY           16
                    150:        /*
                    151:         * PRM: Device busy. An attempt was made to mount a device that was
                    152:         * already mounted or an attempt was made to unmount a device on which
                    153:         * there is an active file (open file, current directory, mounted-on
                    154:         * file, active text segment). It will also occur if an attempt it
                    155:         * made to enable accounting when it is already enabled. The device or
                    156:         * resource is currently unavailable.
                    157:         *
                    158:         * DDI/DKI: Device is busy. This can be used for devices that require
                    159:         * exclusive access.
                    160:         */
                    161: #define EEXIST         17
                    162:        /*
                    163:         * PRM: File exists. An existing file was mentioned in an
                    164:         * inappropriate context (e.g., call to the link () routine).
                    165:         */
                    166: #define        EXDEV           18
                    167:        /*
                    168:         * PRM: Cross-device link. A link to a file on another device was
                    169:         * attempted.
                    170:         */
                    171: #define        ENODEV          19
                    172:        /*
                    173:         * PRM: No such device. An attempt was made to apply an inappropriate
                    174:         * operation to a device (e.g., read a write-only device).
                    175:         *
                    176:         * DDI/DKI: No such device. Drivers can return this error when an
                    177:         * attempt is made to apply an inappropriate function to a device; for
                    178:         * example, trying to write a write-protected medium.
                    179:         */
                    180: #define ENOTDIR                20
                    181:        /*
                    182:         * PRM: Not a directory. A non-directory was specified where a
                    183:         * directory is required (e.g., in a path prefix or as an argument to
                    184:         * the chdir () routine).
                    185:         */
                    186: #define        EISDIR          21
                    187:        /*
                    188:         * PRM: Is a directory. An attempt was made to write on a directory.
                    189:         */
                    190: #define        EINVAL          22
                    191:        /*
                    192:         * PRM: Invalid argument. An invalid argument was specified (e.g.,
                    193:         * unmounting a non-mounted device, mentioning an undefined signal in
                    194:         * a call to the signal () or kill () routines).
                    195:         *
                    196:         * DDI/DKI: Invalid argument. Drivers can return this error for
                    197:         * operations that have invalid parameters specified.
                    198:         */
                    199: #define        ENFILE          23
                    200:        /*
                    201:         * PRM: File table overflow. The system file table is full (i.e.,
                    202:         * SYS_OPEN files are open, and temporarily no more files can be
                    203:         * opened).
                    204:         */
                    205: #define        EMFILE          24
                    206:        /*
                    207:         * PRM: Too many open files. No process can have more than OPEN_MAX
                    208:         * file descriptors open at a time.
                    209:         */
                    210: #define        ENOTTY          25
                    211:        /*
                    212:         * PRM: Not a typewriter. A call was made to the ioctl () routine
                    213:         * specifying a file that is not a special character device.
                    214:         */
                    215: #define        ETXTBSY         26
                    216:        /*
                    217:         * PRM: Text file busy. An attempt was made to execute a pure-
                    218:         * procedure program that is currently open for writing, or an attempt
                    219:         * to open for writing (or to remove) a pure-procedure program that is
                    220:         * being executed.
                    221:         */
                    222: #define        EFBIG           27
                    223:        /*
                    224:         * PRM: File too large. The size of a file exceeded the maximum file
                    225:         * size, FCHR_MAX [see getrlimit ()].
                    226:         */
                    227: #define        ENOSPC          28
                    228:        /*
                    229:         * PRM: No space left on device. When writing an ordinary file or
                    230:         * creating a directory entry, there is no free space left on the
                    231:         * device.
                    232:         *
                    233:         * DDI/DKI: The device is out of free space.
                    234:         */
                    235: #define        ESPIPE          29
                    236:        /*
                    237:         * PRM: Illegal seek. A call to the lseek () routine was issued to a
                    238:         * pipe.
                    239:         */
                    240: #define        EROFS           30
                    241:        /*
                    242:         * PRM: Read-only file system. An attempt to modify a file or
                    243:         * directory was made on a device mounted read-only.
                    244:         */
                    245: #define        EMLINK          31
                    246:        /*
                    247:         * PRM: Too many links. An attempt to make more than the maximum
                    248:         * number of links, LINK_MAX, to a file.
                    249:         */
                    250: #define        EPIPE           32
                    251:        /*
                    252:         * PRM: Broken pipe. A write on a pipe for which there is no process
                    253:         * to read the data. This condition normally generates a signal; the
                    254:         * error is returned if the signal is ignored.
                    255:         */
                    256: #define        EDOM            33
                    257:        /*
                    258:         * PRM: Math argument out of domain of function. The argument of a
                    259:         * function in the math package is out of the domain of the function.
                    260:         */
                    261: #define        ERANGE          34
                    262:        /*
                    263:         * PRM: Math result not representable. The value of a function in the
                    264:         * math package is not representable within machine precision.
                    265:         */
                    266: #define        ENOMSG          35
                    267:        /*
                    268:         * PRM: No message of desired type. An attempt was made to retrieve a
                    269:         * message of a type that does not exist on the specified message
                    270:         * queue [see msgop ()].
                    271:         */
                    272: #define        EIDRM           36
                    273:        /*
                    274:         * PRM: Identifier removed. This error is returned to processes that
                    275:         * resume execution due to the removal of an identifier from the file
                    276:         * system's name space [see msgctl (), semctl (), and shmctl ()].
                    277:         */
                    278: #define        EDEADLK         45
                    279:        /*
                    280:         * PRM: Deadlock condition. A deadlock situation was detected and
                    281:         * avoided. This error pertains to file and record locking.
                    282:         */
                    283: #define        ENOLCK          46
                    284:        /*
                    285:         * PRM: No record locks available. There are no more locks available.
                    286:         * The system lock table is full [see fcntl ()].
                    287:         */
                    288: #define        ENOSTR          60
                    289:        /*
                    290:         * PRM: Device not a stream. A putmsg () or getmsg () system call was
                    291:         * attempted on a file descriptor that is not a STREAMS device.
                    292:         */
                    293: #define        ENODATA         61
                    294:        /*
                    295:         * PRM: No data available.
                    296:         *
                    297:         * Returned from an I_GETBAND ioctl ().
                    298:         */
                    299: #define        ETIME           62
                    300:        /*
                    301:         * PRM: Timer expired. The timer set for a STREAMS ioctl () call has
                    302:         * expired. The cause of this error is device-specific and could
                    303:         * indicate either a hardware or software failure, or perhaps a
                    304:         * timeout value that is too short for the specific operation. The
                    305:         * status of the ioctl () operation is indeterminate.
                    306:         */
                    307: #define        ENOSR           63
                    308:        /*
                    309:         * PRM: Out of STREAMS resources. During a STREAMS open either no
                    310:         * STREAMS queues or no STREAMS head data structures were available.
                    311:         * This is a temporary condition; one may recover from it if other
                    312:         * processes release resources.
                    313:         */
                    314: #define        ENOPKG          65
                    315:        /*
                    316:         * PRM: Package not installed. This error occurs when users attempt to
                    317:         * use a system call from a package which has not been installed.
                    318:         */
                    319: #define        EPROTO          71
                    320:        /*
                    321:         * PRM: Protocol error. Some protocol error has occurred. This error
                    322:         * is device-specific, but is generally not related to a hardware
                    323:         * failure.
                    324:         *
                    325:         * DDI/DKI: Protocol error. Drivers can return this error when they
                    326:         * incur a protocol error, such as not being able to generate the
                    327:         * proper protocol message because of resource exhaustion, and not
                    328:         * being able to recover gracefully.
                    329:         */
                    330: #define EBADMSG                77
                    331:        /*
                    332:         * PRM: Not a data message. During a read (), getmsg (), or ioctl ()
                    333:         * I_RECVFD system call to a STREAMS device, something has come to the
                    334:         * head of the queue that cannot be processed. That something depends
                    335:         * on the system call:
                    336:         *      read (): control information or a passed file descriptor.
                    337:         *      getmsg (): passed file descriptor.
                    338:         *      ioctl (): control or data information.
                    339:         */
                    340: #define        ENAMETOOLONG    78
                    341:        /*
                    342:         * PRM: File name too long. The length of a path argument exceeds
                    343:         * PATH_MAX, or the length of a path component exceeds NAME_MAX while
                    344:         * _POSIX_NO_TRUNC is in effect; see limits(4).
                    345:         */
                    346: #define        EOVERFLOW       79
                    347:        /*
                    348:         * PRM: Value too large for defined data type.
                    349:         *
                    350:         * This can happen due to differences in data formats between system
                    351:         * revisions; for instance, some system data such as user IDs and
                    352:         * device IDs may be too large to deliver to an application built for
                    353:         * an earlier system revision.
                    354:         */
                    355: #define        ENOTUNIQ        80
                    356:        /*
                    357:         * PRM: Name not unique on network.
                    358:         */
                    359: #define        EBADFD          81
                    360:        /*
                    361:         * PRM: File descriptor in bad state. Either a file descriptor refers
                    362:         * to no open file or a read request was made to a file that is open
                    363:         * only for writing.
                    364:         */
                    365: #define        EREMCHG         82
                    366:        /*
                    367:         * PRM: Remote address changed.
                    368:         */
                    369: #define        ELIBACC         83
                    370:        /*
                    371:         * PRM: Cannot access a needed shared library. Trying to exec () an
                    372:         * "a.out" that requires a static shared library and the static shared
                    373:         * library doesn't exist or the user doesn't have permissions to use
                    374:         * it.
                    375:         */
                    376: #define        ELIBBAD         84
                    377:        /*
                    378:         * PRM: Accessing a corrupted shared library. Trying to exec () an
                    379:         * "a.out" that requires a static shared library and exec () could not
                    380:         * load the static shared library. The static shared library is
                    381:         * probably corrupted.
                    382:         */
                    383: #define        ELIBSCN         85
                    384:        /*
                    385:         * PRM: ".lib" section in "a.out" corrupted. Trying to exec () an
                    386:         * "a.out" that requires a static shared library and there was
                    387:         * erroneous data in the ".lib" section of the "a.out". The ".lib"
                    388:         * section tells exec () what static shared libraries are needed. The
                    389:         * "a.out" is probably corrupted.
                    390:         */
                    391: #define        ELIBMAX         86
                    392:        /*
                    393:         * PRM: Attempting to link in more shared libraries than system limit.
                    394:         * Trying to exec () an "a.out" that requires more static shared
                    395:         * libraries than is allowed on the current configuration of the
                    396:         * system.
                    397:         */
                    398: #define        ELIBEXEC        87
                    399:        /*
                    400:         * PRM: Cannot exec () a shared library directly.
                    401:         */
                    402: #define        EILSEQ          88
                    403:        /*
                    404:         * PRM: Illegal byte sequence. Handle multiple characters as a single
                    405:         * character.
                    406:         */
                    407: #define        ENOSYS          89
                    408:        /*
                    409:         * PRM: Operation not applicable.
                    410:         */
                    411: #define        ELOOP           90
                    412:        /*
                    413:         * PRM: Number of symbolic links encountered during path name
                    414:         * traversal exceeds MAXSYMLINKS.
                    415:         */
                    416: #define        EUSERS          94
                    417:        /*
                    418:         * PRM: Too many users.
                    419:         */
                    420: #define        ENOTSOCK        95
                    421:        /*
                    422:         * PRM: Socket operation on non-socket.
                    423:         */
                    424: #define        EDESTADDRREQ    96
                    425:        /*
                    426:         * PRM, DDI/DKI: Destination address required. A required destination
                    427:         * address was omitted from an operation on a transport endpoint.
                    428:         */
                    429: #define        EMSGSIZE        97
                    430:        /*
                    431:         * PRM, DDI/DKI: Message too long. A message sent on a transport
                    432:         * provider was larger than the internal message buffer or some other
                    433:         * network limit.
                    434:         */
                    435: #define        EPROTOTYPE      98
                    436:        /*
                    437:         * PRM: Protocol wrong type for socket. A protocol was specified that
                    438:         * does not support the semantics of the socket type requested.
                    439:         */
                    440: #define        ENOPROTOOPT     99
                    441:        /*
                    442:         * PRM: Protocol not available. A bad option or level was specified
                    443:         * when getting or setting options for a protocol.
                    444:         *
                    445:         * DDI/DKI: The protocol option requested is not available at the
                    446:         * level indicated.
                    447:         */
                    448: #define        EPROTONOSUPPORT 120
                    449:        /*
                    450:         * PRM: Protocol not supported. The protocol has not been configured
                    451:         * into the system or no implementation for it exists.
                    452:         */
                    453: #define        ESOCKTNOSUPPORT 121
                    454:        /*
                    455:         * PRM: Socket type not supported. The support for the socket type has
                    456:         * not been configured into the system or no implementation for it
                    457:         * exists.
                    458:         */
                    459: #define        EOPNOTSUPP      122
                    460:        /*
                    461:         * PRM: Operation not supported on transport endpoint. For example,
                    462:         * trying to accept a connection on a datagram transport endpoint.
                    463:         */
                    464: #define        EPFNOSUPPORT    123
                    465:        /*
                    466:         * PRM: Protocol family not supported. The protocol family has not
                    467:         * been configured into the system or no implementation for it exists.
                    468:         * Used for the Internet protocols.
                    469:         */
                    470: #define        EAFNOSUPPORT    124
                    471:        /*
                    472:         * PRM: Address family not supported by protocol family. An address
                    473:         * incompatible with the requested protocol was used.
                    474:         *
                    475:         * DDI/DKI: The address family specified is not installed or supported
                    476:         * on the host.
                    477:         */
                    478: #define        EADDRINUSE      125
                    479:        /*
                    480:         * PRM, DDI/DKI: Address already in use. User attempted to use an
                    481:         * address already in use, and the protocol does not allow this.
                    482:         */
                    483: #define        EADDRNOTAVAIL   126
                    484:        /*
                    485:         * PRM, DDI/DKI: Cannot assign requested address. Results from an
                    486:         * attempt to create a transport endpoint with an address not on the
                    487:         * current machine.
                    488:         */
                    489: #define        ENETDOWN        127
                    490:        /*
                    491:         * PRM, DDI/DKI: Network is down. Operation encountered a dead
                    492:         * network.
                    493:         */
                    494: #define        ENETUNREACH     128
                    495:        /*
                    496:         * PRM, DDI/DKI: Network is unreachable. Operation was attempted to an
                    497:         * unreachable network.
                    498:         */
                    499: #define        ENETRESET       129
                    500:        /*
                    501:         * PRM, DDI/DKI: Network dropped connection because of reset. The host
                    502:         * or network you were connected to crashed and rebooted.
                    503:         */
                    504: #define        ECONNABORTED    130
                    505:        /*
                    506:         * PRM, DDI/DKI: Software-caused connection abort. A received
                    507:         * connection request was aborted was aborted when the peer closed its
                    508:         * endpoint.
                    509:         */
                    510: #define        ECONNRESET      131
                    511:        /*
                    512:         * PRM, DDI/DKI: Connection reset by peer. A connection was forcibly
                    513:         * closed by a peer. This normally results from a loss of the
                    514:         * connection on the remote host due to a timeout or a reboot.
                    515:         */
                    516: #define        ENOBUFS         132
                    517:        /*
                    518:         * PRM, DDI/DKI: No buffer space available. An operation on a
                    519:         * transport endpoint or pipe was not performed because the system
                    520:         * lacked sufficient buffer space or because a queue was full.
                    521:         */
                    522: #define        EISCONN         133
                    523:        /*
                    524:         * PRM, DDI/DKI: Transport endpoint is already connected. A connect
                    525:         * request was made on an already connected transport endpoint; or, a
                    526:         * sendto () or sendmsg () request on a connected transport endpoint
                    527:         * specified a destination when already connected.
                    528:         */
                    529: #define        ENOTCONN        134
                    530:        /*
                    531:         * PRM, DDI/DKI: Transport endpoint is not connected. A request to
                    532:         * send or receive data was disallowed because the transport endpoint
                    533:         * is not connected, or (when sending a datagram) no address was
                    534:         * supplied.
                    535:         */
                    536: #define        ESHUTDOWN       143
                    537:        /*
                    538:         * PRM, DDI/DKI: Cannot send after transport endpoint shutdown. A
                    539:         * request to send data was disallowed because the transport endpoint
                    540:         * has already been shut down.
                    541:         */
                    542: #define        ETIMEDOUT       145
                    543:        /*
                    544:         * PRM, DDI/DKI: Connection timed out. A connect or sent request
                    545:         * failed because the connected party did not properly respond after
                    546:         * a period of time (the timeout period is dependent on the transport
                    547:         * protocol).
                    548:         */
                    549: #define        ECONNREFUSED    146
                    550:        /*
                    551:         * PRM, DDI/DKI: Connection refused. No connection could be made
                    552:         * because the target machine actively refused it. This usually
                    553:         * results from trying to connect to a service that is inactive on the
                    554:         * remote host.
                    555:         */
                    556: #define        EHOSTDOWN       147
                    557:        /*
                    558:         * PRM, DDI/DKI: Host is down. A transport provider operation failed
                    559:         * because the destination host was down.
                    560:         */
                    561: #define        EHOSTUNREACH    148
                    562:        /*
                    563:         * PRM, DDI/DKI: No route to host. A transport provider operation was
                    564:         * attempted to an unreachable host.
                    565:         */
                    566: #define        EALREADY        149
                    567:        /*
                    568:         * PRM, DDI/DKI: Operation already in progress. An operation was
                    569:         * attempted on a non-blocking object that already had an operation in
                    570:         * progress.
                    571:         */
                    572: #define        EINPROGRESS     150
                    573:        /*
                    574:         * PRM, DDI/DKI: Operation now in progress. An operation that takes a
                    575:         * long time to complete (such as a connect) was attempted on a non-
                    576:         * blocking object.
                    577:         */
                    578: #define        ESTALE          151
                    579:        /*
                    580:         * PRM: Stale NFS file handle.
                    581:         */
                    582: 
                    583: 
                    584: #endif /* ! defined (__SYS_ERRNO_H__) */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.