2013-12-10 01:43:11 +04:00
/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
# pragma once
/***
This file is part of systemd .
Copyright ( C ) 2013 Intel Corporation . All rights reserved .
2014-02-11 16:11:18 +04:00
Copyright ( C ) 2014 Tom Gundersen
2013-12-10 01:43:11 +04:00
systemd is free software ; you can redistribute it and / or modify it
under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation ; either version 2.1 of the License , or
( at your option ) any later version .
systemd is distributed in the hope that it will be useful , but
WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the GNU
Lesser General Public License for more details .
You should have received a copy of the GNU Lesser General Public License
along with systemd ; If not , see < http : //www.gnu.org/licenses/>.
* * */
2013-12-10 01:43:26 +04:00
# include <linux/if_packet.h>
2014-06-19 17:14:14 +04:00
# include <net/ethernet.h>
2015-10-24 23:58:24 +03:00
# include <net/if_arp.h>
# include <stdint.h>
2013-12-10 01:43:11 +04:00
2014-05-22 17:18:28 +04:00
# include "sd-dhcp-client.h"
2015-10-24 23:58:24 +03:00
2013-12-10 01:43:11 +04:00
# include "dhcp-protocol.h"
2015-10-24 23:58:24 +03:00
# include "socket-util.h"
2013-12-10 01:43:11 +04:00
2014-10-08 23:15:45 +04:00
int dhcp_network_bind_raw_socket ( int index , union sockaddr_union * link ,
uint32_t xid , const uint8_t * mac_addr ,
size_t mac_addr_len , uint16_t arp_type ) ;
2014-05-06 23:57:09 +04:00
int dhcp_network_bind_udp_socket ( be32_t address , uint16_t port ) ;
2013-12-10 01:43:26 +04:00
int dhcp_network_send_raw_socket ( int s , const union sockaddr_union * link ,
const void * packet , size_t len ) ;
2014-02-14 20:23:58 +04:00
int dhcp_network_send_udp_socket ( int s , be32_t address , uint16_t port ,
2013-12-20 19:16:17 +04:00
const void * packet , size_t len ) ;
2013-12-10 01:43:18 +04:00
2014-05-21 17:55:02 +04:00
int dhcp_option_append ( DHCPMessage * message , size_t size , size_t * offset , uint8_t overload ,
2014-05-20 13:04:50 +04:00
uint8_t code , size_t optlen , const void * optval ) ;
2013-12-10 01:43:11 +04:00
typedef int ( * dhcp_option_cb_t ) ( uint8_t code , uint8_t len ,
2015-08-27 00:05:34 +03:00
const void * option , void * userdata ) ;
2014-02-11 16:11:18 +04:00
2015-11-25 19:29:30 +03:00
int dhcp_option_parse ( DHCPMessage * message , size_t len , dhcp_option_cb_t cb , void * userdata , char * * error_message ) ;
2014-02-11 16:11:18 +04:00
2014-10-08 23:15:45 +04:00
int dhcp_message_init ( DHCPMessage * message , uint8_t op , uint32_t xid ,
uint8_t type , uint16_t arp_type , size_t optlen ,
size_t * optoffset ) ;
2014-02-11 16:11:18 +04:00
2014-06-16 17:24:28 +04:00
uint16_t dhcp_packet_checksum ( uint8_t * buf , size_t len ) ;
2014-02-25 15:33:24 +04:00
2014-03-10 01:51:07 +04:00
void dhcp_packet_append_ip_headers ( DHCPPacket * packet , be32_t source_addr ,
uint16_t source , be32_t destination_addr ,
uint16_t destination , uint16_t len ) ;
2014-02-11 16:11:18 +04:00
2014-02-24 04:09:21 +04:00
int dhcp_packet_verify_headers ( DHCPPacket * packet , size_t len , bool checksum ) ;
2014-02-22 22:53:45 +04:00
2014-05-22 17:18:28 +04:00
DEFINE_TRIVIAL_CLEANUP_FUNC ( sd_dhcp_client * , sd_dhcp_client_unref ) ;
# define _cleanup_dhcp_client_unref_ _cleanup_(sd_dhcp_client_unrefp)
/* If we are invoking callbacks of a dhcp-client, ensure unreffing the
* client from the callback doesn ' t destroy the object we are working
* on */
# define DHCP_CLIENT_DONT_DESTROY(client) \
_cleanup_dhcp_client_unref_ _unused_ sd_dhcp_client * _dont_destroy_ # # client = sd_dhcp_client_ref ( client )
2014-11-27 22:20:23 +03:00
# define log_dhcp_client(client, fmt, ...) log_internal(LOG_DEBUG, 0, __FILE__, __LINE__, __func__, "DHCP CLIENT (0x%x): " fmt, client->xid, ##__VA_ARGS__)