1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
5 Copyright © 2013 Intel Corporation. All rights reserved.
8 #include "sd-dhcp-lease.h"
10 #include "dhcp-client-id-internal.h"
11 #include "dhcp-option.h"
15 struct sd_dhcp_route
{
16 struct in_addr dst_addr
;
17 struct in_addr gw_addr
;
18 unsigned char dst_prefixlen
;
21 struct sd_dhcp_raw_option
{
22 LIST_FIELDS(struct sd_dhcp_raw_option
, options
);
29 struct sd_dhcp_lease
{
36 triple_timestamp timestamp
;
37 usec_t ipv6_only_preferred_usec
;
41 be32_t server_address
;
44 bool have_subnet_mask
;
50 struct in_addr
*router
;
55 DHCPServerData servers
[_SD_DHCP_LEASE_SERVER_TYPE_MAX
];
60 struct sd_dhcp_route
*static_routes
;
61 size_t n_static_routes
;
62 struct sd_dhcp_route
*classless_routes
;
63 size_t n_classless_routes
;
65 uint16_t mtu
; /* 0 if unset */
68 char **search_domains
;
73 sd_dhcp_client_id client_id
;
75 void *vendor_specific
;
76 size_t vendor_specific_len
;
80 uint8_t sixrd_ipv4masklen
;
81 uint8_t sixrd_prefixlen
;
82 struct in6_addr sixrd_prefix
;
83 struct in_addr
*sixrd_br_addresses
;
84 size_t sixrd_n_br_addresses
;
86 LIST_HEAD(struct sd_dhcp_raw_option
, private_options
);
89 int dhcp_lease_new(sd_dhcp_lease
**ret
);
91 int dhcp_lease_parse_options(uint8_t code
, uint8_t len
, const void *option
, void *userdata
);
92 int dhcp_lease_parse_search_domains(const uint8_t *option
, size_t len
, char ***domains
);
93 int dhcp_lease_insert_private_option(sd_dhcp_lease
*lease
, uint8_t tag
, const void *data
, uint8_t len
);
95 void dhcp_lease_set_timestamp(sd_dhcp_lease
*lease
, const triple_timestamp
*timestamp
);
96 int dhcp_lease_set_default_subnet_mask(sd_dhcp_lease
*lease
);
97 int dhcp_lease_set_client_id(sd_dhcp_lease
*lease
, const sd_dhcp_client_id
*client_id
);
99 #define dhcp_lease_unref_and_replace(a, b) \
100 unref_and_replace_full(a, b, sd_dhcp_lease_ref, sd_dhcp_lease_unref)