1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
5 Copyright © 2013 Intel Corporation. All rights reserved.
8 #include "sd-dhcp-client.h"
10 #include "alloc-util.h"
11 #include "dhcp-client-id-internal.h"
12 #include "dhcp-option.h"
14 #include "time-util.h"
16 struct sd_dhcp_route
{
17 struct in_addr dst_addr
;
18 struct in_addr gw_addr
;
19 unsigned char dst_prefixlen
;
22 struct sd_dhcp_raw_option
{
23 LIST_FIELDS(struct sd_dhcp_raw_option
, options
);
30 struct sd_dhcp_lease
{
37 triple_timestamp timestamp
;
38 usec_t ipv6_only_preferred_usec
;
42 be32_t server_address
;
45 bool have_subnet_mask
;
51 struct in_addr
*router
;
56 DHCPServerData servers
[_SD_DHCP_LEASE_SERVER_TYPE_MAX
];
58 struct sd_dhcp_route
*static_routes
;
59 size_t n_static_routes
;
60 struct sd_dhcp_route
*classless_routes
;
61 size_t n_classless_routes
;
63 uint16_t mtu
; /* 0 if unset */
66 char **search_domains
;
71 sd_dhcp_client_id client_id
;
73 void *vendor_specific
;
74 size_t vendor_specific_len
;
78 uint8_t sixrd_ipv4masklen
;
79 uint8_t sixrd_prefixlen
;
80 struct in6_addr sixrd_prefix
;
81 struct in_addr
*sixrd_br_addresses
;
82 size_t sixrd_n_br_addresses
;
84 LIST_HEAD(struct sd_dhcp_raw_option
, private_options
);
87 int dhcp_lease_new(sd_dhcp_lease
**ret
);
89 int dhcp_lease_parse_options(uint8_t code
, uint8_t len
, const void *option
, void *userdata
);
90 int dhcp_lease_parse_search_domains(const uint8_t *option
, size_t len
, char ***domains
);
91 int dhcp_lease_insert_private_option(sd_dhcp_lease
*lease
, uint8_t tag
, const void *data
, uint8_t len
);
93 void dhcp_lease_set_timestamp(sd_dhcp_lease
*lease
, const triple_timestamp
*timestamp
);
94 int dhcp_lease_set_default_subnet_mask(sd_dhcp_lease
*lease
);
95 int dhcp_lease_set_client_id(sd_dhcp_lease
*lease
, const sd_dhcp_client_id
*client_id
);
97 #define dhcp_lease_unref_and_replace(a, b) \
98 unref_and_replace_full(a, b, sd_dhcp_lease_ref, sd_dhcp_lease_unref)