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/>.
* * */
# include <stdint.h>
2013-12-10 01:43:26 +04:00
# include <linux/if_packet.h>
# include "socket-util.h"
2013-12-10 01:43:11 +04:00
# include "dhcp-protocol.h"
2013-12-10 01:43:26 +04:00
int dhcp_network_bind_raw_socket ( int index , union sockaddr_union * link ) ;
2014-02-14 20:23:58 +04:00
int dhcp_network_bind_udp_socket ( int index , 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
2013-12-10 01:43:11 +04:00
int dhcp_option_append ( uint8_t * * buf , size_t * buflen , uint8_t code ,
size_t optlen , const void * optval ) ;
typedef int ( * dhcp_option_cb_t ) ( uint8_t code , uint8_t len ,
const uint8_t * option , void * user_data ) ;
2014-02-11 16:11:18 +04:00
2013-12-10 01:43:11 +04:00
int dhcp_option_parse ( DHCPMessage * message , size_t len ,
dhcp_option_cb_t cb , void * user_data ) ;
2014-02-11 16:11:18 +04:00
int dhcp_message_init ( DHCPMessage * message , uint8_t op , uint32_t xid , uint8_t type ,
2014-02-24 01:07:07 +04:00
uint8_t * * opt , size_t * optlen ) ;
2014-02-11 16:11:18 +04:00
2014-02-23 17:15:05 +04:00
void dhcp_packet_append_ip_headers ( DHCPPacket * packet , 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
# define log_dhcp_client(client, fmt, ...) log_meta(LOG_DEBUG, __FILE__, __LINE__, __func__, "DHCP CLIENT: " fmt, ##__VA_ARGS__)