1/* vi: set sw=4 ts=4: */ 2/* common.h 3 * 4 * Russ Dill <Russ.Dill@asu.edu> September 2001 5 * Rewritten by Vladimir Oleynik <dzo@simtreas.ru> (C) 2003 6 * 7 * Licensed under GPLv2 or later, see file LICENSE in this tarball for details. 8 */ 9 10#ifndef _COMMON_H 11#define _COMMON_H 12 13#include "libbb.h" 14 15#define DEFAULT_SCRIPT "/usr/share/udhcpc/default.script" 16 17extern const uint8_t MAC_BCAST_ADDR[6]; /* six all-ones */ 18 19/*** packet.h ***/ 20 21#include <netinet/udp.h> 22#include <netinet/ip.h> 23 24struct dhcpMessage { 25 uint8_t op; 26 uint8_t htype; 27 uint8_t hlen; 28 uint8_t hops; 29 uint32_t xid; 30 uint16_t secs; 31 uint16_t flags; 32 uint32_t ciaddr; 33 uint32_t yiaddr; 34 uint32_t siaddr; 35 uint32_t giaddr; 36 uint8_t chaddr[16]; 37 uint8_t sname[64]; 38 uint8_t file[128]; 39 uint32_t cookie; 40 uint8_t options[308]; /* 312 - cookie */ 41}; 42 43struct udp_dhcp_packet { 44 struct iphdr ip; 45 struct udphdr udp; 46 struct dhcpMessage data; 47}; 48 49void udhcp_init_header(struct dhcpMessage *packet, char type); 50int udhcp_get_packet(struct dhcpMessage *packet, int fd); 51uint16_t udhcp_checksum(void *addr, int count); 52int udhcp_raw_packet(struct dhcpMessage *payload, 53 uint32_t source_ip, int source_port, 54 uint32_t dest_ip, int dest_port, 55 const uint8_t *dest_arp, int ifindex); 56int udhcp_kernel_packet(struct dhcpMessage *payload, 57 uint32_t source_ip, int source_port, 58 uint32_t dest_ip, int dest_port); 59 60 61/**/ 62 63void udhcp_run_script(struct dhcpMessage *packet, const char *name); 64 65// Still need to clean these up... 66 67/* from options.h */ 68#define get_option udhcp_get_option 69#define end_option udhcp_end_option 70#define add_option_string udhcp_add_option_string 71#define add_simple_option udhcp_add_simple_option 72#define option_lengths udhcp_option_lengths 73/* from socket.h */ 74#define listen_socket udhcp_listen_socket 75#define read_interface udhcp_read_interface 76/* from dhcpc.h */ 77#define client_config udhcp_client_config 78/* from dhcpd.h */ 79#define server_config udhcp_server_config 80 81void udhcp_sp_setup(void); 82int udhcp_sp_fd_set(fd_set *rfds, int extra_fd); 83int udhcp_sp_read(fd_set *rfds); 84int raw_socket(int ifindex); 85int read_interface(const char *interface, int *ifindex, uint32_t *addr, uint8_t *arp); 86int listen_socket(/*uint32_t ip,*/ int port, const char *inf); 87/* Returns 1 if no reply received */ 88int arpping(uint32_t test_ip, uint32_t from_ip, uint8_t *from_mac, const char *interface); 89 90#if ENABLE_FEATURE_UDHCP_DEBUG 91# define DEBUG(str, args...) bb_info_msg(str, ## args) 92#else 93# define DEBUG(str, args...) do {;} while (0) 94#endif 95 96#endif 97