- if ((address >> 31) == 0x0)
- /* class A, leading bits: 0 */
- lease->subnet_mask = htobe32(0xff000000);
- else if ((address >> 30) == 0x2)
- /* class B, leading bits 10 */
- lease->subnet_mask = htobe32(0xffff0000);
- else if ((address >> 29) == 0x6)
- /* class C, leading bits 110 */
- lease->subnet_mask = htobe32(0xffffff00);
- else
- /* class D or E, no default mask. give up */
- return -ERANGE;
+ lease->subnet_mask = mask.s_addr;
+
+ return 0;
+}
+
+int sd_dhcp_lease_get_client_id(sd_dhcp_lease *lease, const uint8_t **client_id,
+ size_t *client_id_len) {
+ assert_return(lease, -EINVAL);
+ assert_return(client_id, -EINVAL);
+ assert_return(client_id_len, -EINVAL);
+
+ *client_id = lease->client_id;
+ *client_id_len = lease->client_id_len;
+ return 0;
+}
+
+int dhcp_lease_set_client_id(sd_dhcp_lease *lease, const uint8_t *client_id,
+ size_t client_id_len) {
+ assert_return(lease, -EINVAL);
+ assert_return((!client_id && !client_id_len) ||
+ (client_id && client_id_len), -EINVAL);
+
+ free (lease->client_id);
+ lease->client_id = NULL;
+ lease->client_id_len = 0;
+
+ if (client_id) {
+ lease->client_id = memdup (client_id, client_id_len);
+ lease->client_id_len = client_id_len;
+ }