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"
2014-04-06 21:23:33 +04:00
int dhcp_network_bind_raw_socket ( int index , union sockaddr_union * link , uint32_t xid ) ;
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 ,
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-05-21 17:55:02 +04:00
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-04-07 22:00:53 +04:00
# define log_dhcp_client(client, fmt, ...) log_meta(LOG_DEBUG, __FILE__, __LINE__, __func__, "DHCP CLIENT (0x%x): " fmt, client->xid, ##__VA_ARGS__)