16 Commits

Author SHA1 Message Date
cbrejla
a0841cb303 support v4 dhcp inform messages
Signed-off-by: cbrejla <christoph.brejla@gmail.com>
2026-02-17 19:22:48 +01:00
Nikita Vakula
da62c7b1bd
Add DHCP RELEASE message support (#266)
Implement DHCP RELEASE message handling in the range plugin

Signed-off-by: Nikita Vakula <programmistov.programmist@gmail.com>
2026-01-10 20:59:01 +01:00
Wielewout
f7e98e4e35 feat(plugins/range): add support for a single IP address
This is mainly done for usage in a test context, where it would be nice to ensure that only a single IP address can be used.

Signed-off-by: Wielewout <vandewiel.wout@gmail.com>
2025-08-06 09:02:28 +02:00
Andrea Barberio
4458e77f16 plugins/range: added hostname field to database
Signed-off-by: Andrea Barberio <insomniac@slackware.it>
2024-01-19 15:14:36 +01:00
Andrea Barberio
c43db00314 [plugins/range] use sqlite3 instead of text file
The range plugin appends every new entry to a text file, without
deduplication, and collisions are possible.
Implementing deduplication on a text file is either inefficient or
tricky. Detecting collisions is inefficient, no matter if it's done in-memory
and then rewriting the entire text file every time, or by parsing the text
file every time.

Sqlite3 offers consistency, uniqueness without performance hit, and can
enforce more complex constraints.

However using sqlite3 requires using CGo, which has a bunch of issues:
* it complicates cross-compiling
* builds are slower
* deployments are more complicated (no more single binary, not easily at least)

I have been running CoreDHCP with the sqlite3-based range plugin in my
home network without issues so far, and no more duplication nor
collisions.

Signed-off-by: Andrea Barberio <insomniac@slackware.it>
2023-10-14 10:19:02 +02:00
Adphi
a2552c5c1b range: re-allocate leased ips on start up (fixes #153)
Signed-off-by: Adphi <philippe.adrien.nousse@gmail.com>
2022-06-02 17:23:01 +02:00
Anatole Denis
2a7eb16899 plugins/range: Also persist leases when extending them
Signed-off-by: Anatole Denis <anatole@unverle.fr>
2021-02-03 14:04:44 +00:00
Anatole Denis
1ccd30ecc5 plugins/range: Revamp to make use of allocator
Mixed improvements to overhaul the plugin
 * Use the allocator interface to allocate IPs
 * Focus on correctness by wrapping a lock for now; we'll improve that
   with some more fine-grained concurrency later
 * move things related to file storage of leases to a separate source
   file and add some minimal sanity-check tests
 * Don't open and close the file descriptor on every single packet

Signed-off-by: Anatole Denis <anatole@unverle.fr>
2021-02-03 14:04:44 +00:00
Anatole Denis
9d3fd8dbad plugins/range: Remove setup6 function for range
Signed-off-by: Anatole Denis <anatole@unverle.fr>
2021-02-03 14:04:44 +00:00
Brad Beam
156c774032 fix: Create leases file if it does not exist
If the leases.txt file was not present on the system, coredhcp would
fail to start --
```
level=info msg="DHCPv4: loading plugin `range`" prefix=plugins
level=warning msg="Failed to close file leases.txt: invalid argument" prefix="plugins/range"
level=fatal msg="cannot open lease file leases.txt: open leases.txt: no such file or directory" prefix=main
```

This changes the call to include the O_CREATE flag to create the
leases file if it does not already exist.

Signed-off-by: Brad Beam <brad.beam@b-rad.info>
2020-08-09 09:52:46 +02:00
Andrea Barberio
8bd5261895 Register plugins explicitly
Fixes #45
Do not use `init()` magic to register plugins, do it explicitly. This is
done by requiring plugins to declare a populated `Plugin` symbol of type
`plugins.Plugin`.

Signed-off-by: Andrea Barberio <insomniac@slackware.it>
2020-02-07 15:58:02 +00:00
Andrea Barberio
4861d2ce08 Added license headers
Signed-off-by: Andrea Barberio <insomniac@slackware.it>
2019-09-18 13:59:16 +01:00
Andrea Barberio
03c7b74c9c [plugins/range] Various fixes
* removed unused variables
* removed some code duplication
* various errors/logging fixes

Signed-off-by: Andrea Barberio <insomniac@slackware.it>
2019-08-26 13:52:05 +02:00
Andrea Barberio
b9d7c74d44 Logger: add prefix to log lines
This is useful to automatically provide context about what component of
the framework is emitting a log line.

Example output:
```
$ go build && sudo ./coredhcp
[2019-08-25T21:39:26+01:00]  INFO plugins: Registering plugin "dns"
[2019-08-25T21:39:26+01:00]  INFO plugins: Registering plugin "file"
[2019-08-25T21:39:26+01:00]  INFO plugins: Registering plugin "netmask"
[2019-08-25T21:39:26+01:00]  INFO plugins: Registering plugin "range"
[2019-08-25T21:39:26+01:00]  INFO plugins: Registering plugin "router"
[2019-08-25T21:39:26+01:00]  INFO plugins: Registering plugin "server_id"
[2019-08-25T21:39:26+01:00]  INFO config: Loading configuration
[2019-08-25T21:39:26+01:00]  INFO config: DHCPv4: found plugin `server_id` with 1 args: [10.10.10.1]
[2019-08-25T21:39:26+01:00]  INFO config: DHCPv4: found plugin `dns` with 2 args: [8.8.8.8 8.8.4.4]
[2019-08-25T21:39:26+01:00]  INFO config: DHCPv4: found plugin `router` with 1 args: [10.10.10.1]
[2019-08-25T21:39:26+01:00]  INFO config: DHCPv4: found plugin `netmask` with 1 args: [255.255.255.0]
[2019-08-25T21:39:26+01:00]  INFO config: DHCPv4: found plugin `range` with 4 args: [leases.txt 10.10.10.100 10.10.10.200 60s]
[2019-08-25T21:39:26+01:00]  INFO coredhcp: Loading plugins...
[2019-08-25T21:39:26+01:00]  INFO coredhcp: DHCPv4: loading plugin `server_id`
[2019-08-25T21:39:26+01:00]  INFO plugins/server_id: plugins/server_id: loading `server_id` plugin for DHCPv4
[2019-08-25T21:39:26+01:00]  INFO coredhcp: DHCPv4: loading plugin `dns`
[2019-08-25T21:39:26+01:00]  INFO plugins/dns: loaded plugin for DHCPv4.
[2019-08-25T21:39:26+01:00]  INFO plugins/dns: loaded 2 DNS servers.
[2019-08-25T21:39:26+01:00]  INFO coredhcp: DHCPv4: loading plugin `router`
[2019-08-25T21:39:26+01:00]  INFO plugins/router: plugins/router: loaded plugin for DHCPv4.
[2019-08-25T21:39:26+01:00]  INFO plugins/router: plugins/router: loaded 1 router IP addresses.
[2019-08-25T21:39:26+01:00]  INFO coredhcp: DHCPv4: loading plugin `netmask`
[2019-08-25T21:39:26+01:00]  INFO plugins/netmask: plugins/netmask: loaded plugin for DHCPv4.
[2019-08-25T21:39:26+01:00]  INFO plugins/netmask: plugins/netmask: loaded client netmask
[2019-08-25T21:39:26+01:00]  INFO coredhcp: DHCPv4: loading plugin `range`
[2019-08-25T21:39:26+01:00]  INFO plugins/range: plugins/range: reading leases from leases.txt
[2019-08-25T21:39:26+01:00]  INFO plugins/range: plugins/range: loaded 1 leases from leases.txt
[2019-08-25T21:39:26+01:00]  INFO coredhcp: Starting DHCPv4 listener on 0.0.0.0:67
[2019-08-25T21:39:26+01:00]  INFO coredhcp: Waiting
```

Signed-off-by: Andrea Barberio <insomniac@slackware.it>
2019-08-26 09:49:10 +02:00
Andrea Barberio
476397c8ab Fixed logging string in file and range plugins
Signed-off-by: Andrea Barberio <insomniac@slackware.it>
2019-08-25 20:55:06 +02:00
borna-blazevic
1e3cb1982d IPv4 server plugin (#40)
* Basic DHCPv4 server, needs more work

Signed-off-by: borna_blazevic <borna.blazevic@sartura.hr>
2019-08-23 09:53:34 +01:00