]>
Commit | Line | Data |
---|---|---|
53e1b683 | 1 | /* SPDX-License-Identifier: LGPL-2.1+ */ |
0ef6f454 LP |
2 | #pragma once |
3 | ||
b44cd882 TG |
4 | /*** |
5 | This file is part of systemd. | |
6 | ||
7 | Copyright (C) 2013 Intel Corporation. All rights reserved. | |
8 | Copyright (C) 2014 Tom Gundersen | |
b44cd882 TG |
9 | ***/ |
10 | ||
b44cd882 | 11 | #include "sd-dhcp-server.h" |
71d35b6b | 12 | #include "sd-event.h" |
b44cd882 | 13 | |
71d35b6b | 14 | #include "dhcp-internal.h" |
87322b3a | 15 | #include "hashmap.h" |
b44cd882 | 16 | #include "log.h" |
71d35b6b | 17 | #include "util.h" |
be077570 | 18 | |
87322b3a TG |
19 | typedef struct DHCPClientId { |
20 | size_t length; | |
9a0f246f | 21 | void *data; |
87322b3a TG |
22 | } DHCPClientId; |
23 | ||
24 | typedef struct DHCPLease { | |
25 | DHCPClientId client_id; | |
26 | ||
27 | be32_t address; | |
52750344 TG |
28 | be32_t gateway; |
29 | uint8_t chaddr[16]; | |
87322b3a TG |
30 | usec_t expiration; |
31 | } DHCPLease; | |
32 | ||
b44cd882 | 33 | struct sd_dhcp_server { |
3733eec3 | 34 | unsigned n_ref; |
b44cd882 TG |
35 | |
36 | sd_event *event; | |
37 | int event_priority; | |
ff734080 TG |
38 | sd_event_source *receive_message; |
39 | int fd; | |
8de4a226 | 40 | int fd_raw; |
3a864fe4 | 41 | |
b3ec603c | 42 | int ifindex; |
20af7091 | 43 | be32_t address; |
59b8f6b6 | 44 | be32_t netmask; |
99634696 TG |
45 | be32_t subnet; |
46 | uint32_t pool_offset; | |
47 | uint32_t pool_size; | |
b44cd882 | 48 | |
8eb9058d LP |
49 | char *timezone; |
50 | ||
1a04db0f LP |
51 | struct in_addr *ntp, *dns; |
52 | unsigned n_ntp, n_dns; | |
53 | ||
77ff6022 CG |
54 | bool emit_router; |
55 | ||
87322b3a TG |
56 | Hashmap *leases_by_client_id; |
57 | DHCPLease **bound_leases; | |
99634696 | 58 | DHCPLease invalid_lease; |
586ac6f7 LP |
59 | |
60 | uint32_t max_lease_time, default_lease_time; | |
87322b3a | 61 | }; |
816e2e7a TG |
62 | |
63 | typedef struct DHCPRequest { | |
64 | /* received message */ | |
65 | DHCPMessage *message; | |
66 | ||
67 | /* options */ | |
68 | DHCPClientId client_id; | |
69 | size_t max_optlen; | |
70 | be32_t server_id; | |
2dead812 | 71 | be32_t requested_ip; |
586ac6f7 | 72 | uint32_t lifetime; |
816e2e7a TG |
73 | } DHCPRequest; |
74 | ||
79008bdd | 75 | #define log_dhcp_server(client, fmt, ...) log_internal(LOG_DEBUG, 0, __FILE__, __LINE__, __func__, "DHCP SERVER: " fmt, ##__VA_ARGS__) |
6e741541 | 76 | #define log_dhcp_server_errno(client, error, fmt, ...) log_internal(LOG_DEBUG, error, __FILE__, __LINE__, __func__, "DHCP SERVER: " fmt, ##__VA_ARGS__) |
be077570 TG |
77 | |
78 | int dhcp_server_handle_message(sd_dhcp_server *server, DHCPMessage *message, | |
79 | size_t length); | |
969b009d TG |
80 | int dhcp_server_send_packet(sd_dhcp_server *server, |
81 | DHCPRequest *req, DHCPPacket *packet, | |
82 | int type, size_t optoffset); | |
87322b3a | 83 | |
b826ab58 | 84 | void client_id_hash_func(const void *p, struct siphash *state); |
87322b3a | 85 | int client_id_compare_func(const void *_a, const void *_b); |