| .. | .. |
|---|
| 6 | 6 | to the kernel's printk buffer. |
|---|
| 7 | 7 | |
|---|
| 8 | 8 | Injecting messages: |
|---|
| 9 | + |
|---|
| 9 | 10 | Every write() to the opened device node places a log entry in |
|---|
| 10 | 11 | the kernel's printk buffer. |
|---|
| 11 | 12 | |
|---|
| 12 | 13 | The logged line can be prefixed with a <N> syslog prefix, which |
|---|
| 13 | 14 | carries the syslog priority and facility. The single decimal |
|---|
| 14 | 15 | prefix number is composed of the 3 lowest bits being the syslog |
|---|
| 15 | | - priority and the higher bits the syslog facility number. |
|---|
| 16 | + priority and the next 8 bits the syslog facility number. |
|---|
| 16 | 17 | |
|---|
| 17 | 18 | If no prefix is given, the priority number is the default kernel |
|---|
| 18 | 19 | log priority and the facility number is set to LOG_USER (1). It |
|---|
| .. | .. |
|---|
| 21 | 22 | the messages can always be reliably determined. |
|---|
| 22 | 23 | |
|---|
| 23 | 24 | Accessing the buffer: |
|---|
| 25 | + |
|---|
| 24 | 26 | Every read() from the opened device node receives one record |
|---|
| 25 | 27 | of the kernel's printk buffer. |
|---|
| 26 | 28 | |
|---|
| .. | .. |
|---|
| 48 | 50 | if needed, without limiting the interface to a single reader. |
|---|
| 49 | 51 | |
|---|
| 50 | 52 | The device supports seek with the following parameters: |
|---|
| 53 | + |
|---|
| 51 | 54 | SEEK_SET, 0 |
|---|
| 52 | 55 | seek to the first entry in the buffer |
|---|
| 53 | 56 | SEEK_END, 0 |
|---|
| .. | .. |
|---|
| 55 | 58 | SEEK_DATA, 0 |
|---|
| 56 | 59 | seek after the last record available at the time |
|---|
| 57 | 60 | the last SYSLOG_ACTION_CLEAR was issued. |
|---|
| 61 | + |
|---|
| 62 | + Other seek operations or offsets are not supported because of |
|---|
| 63 | + the special behavior this device has. The device allows to read |
|---|
| 64 | + or write only whole variable length messages (records) that are |
|---|
| 65 | + stored in a ring buffer. |
|---|
| 66 | + |
|---|
| 67 | + Because of the non-standard behavior also the error values are |
|---|
| 68 | + non-standard. -ESPIPE is returned for non-zero offset. -EINVAL |
|---|
| 69 | + is returned for other operations, e.g. SEEK_CUR. This behavior |
|---|
| 70 | + and values are historical and could not be modified without the |
|---|
| 71 | + risk of breaking userspace. |
|---|
| 58 | 72 | |
|---|
| 59 | 73 | The output format consists of a prefix carrying the syslog |
|---|
| 60 | 74 | prefix including priority and facility, the 64 bit message |
|---|
| .. | .. |
|---|
| 76 | 90 | readable context of the message, for reliable processing in |
|---|
| 77 | 91 | userspace. |
|---|
| 78 | 92 | |
|---|
| 79 | | - Example: |
|---|
| 80 | | - 7,160,424069,-;pci_root PNP0A03:00: host bridge window [io 0x0000-0x0cf7] (ignored) |
|---|
| 81 | | - SUBSYSTEM=acpi |
|---|
| 82 | | - DEVICE=+acpi:PNP0A03:00 |
|---|
| 83 | | - 6,339,5140900,-;NET: Registered protocol family 10 |
|---|
| 84 | | - 30,340,5690716,-;udevd[80]: starting version 181 |
|---|
| 93 | + Example:: |
|---|
| 94 | + |
|---|
| 95 | + 7,160,424069,-;pci_root PNP0A03:00: host bridge window [io 0x0000-0x0cf7] (ignored) |
|---|
| 96 | + SUBSYSTEM=acpi |
|---|
| 97 | + DEVICE=+acpi:PNP0A03:00 |
|---|
| 98 | + 6,339,5140900,-;NET: Registered protocol family 10 |
|---|
| 99 | + 30,340,5690716,-;udevd[80]: starting version 181 |
|---|
| 85 | 100 | |
|---|
| 86 | 101 | The DEVICE= key uniquely identifies devices the following way: |
|---|
| 87 | | - b12:8 - block dev_t |
|---|
| 88 | | - c127:3 - char dev_t |
|---|
| 89 | | - n8 - netdev ifindex |
|---|
| 90 | | - +sound:card0 - subsystem:devname |
|---|
| 102 | + |
|---|
| 103 | + ============ ================= |
|---|
| 104 | + b12:8 block dev_t |
|---|
| 105 | + c127:3 char dev_t |
|---|
| 106 | + n8 netdev ifindex |
|---|
| 107 | + +sound:card0 subsystem:devname |
|---|
| 108 | + ============ ================= |
|---|
| 91 | 109 | |
|---|
| 92 | 110 | The flags field carries '-' by default. A 'c' indicates a |
|---|
| 93 | | - fragment of a line. All following fragments are flagged with |
|---|
| 94 | | - '+'. Note, that these hints about continuation lines are not |
|---|
| 95 | | - necessarily correct, and the stream could be interleaved with |
|---|
| 96 | | - unrelated messages, but merging the lines in the output |
|---|
| 97 | | - usually produces better human readable results. A similar |
|---|
| 98 | | - logic is used internally when messages are printed to the |
|---|
| 99 | | - console, /proc/kmsg or the syslog() syscall. |
|---|
| 111 | + fragment of a line. Note, that these hints about continuation |
|---|
| 112 | + lines are not necessarily correct, and the stream could be |
|---|
| 113 | + interleaved with unrelated messages, but merging the lines in |
|---|
| 114 | + the output usually produces better human readable results. A |
|---|
| 115 | + similar logic is used internally when messages are printed to |
|---|
| 116 | + the console, /proc/kmsg or the syslog() syscall. |
|---|
| 100 | 117 | |
|---|
| 101 | 118 | By default, kernel tries to avoid fragments by concatenating |
|---|
| 102 | 119 | when it can and fragments are rare; however, when extended |
|---|