X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=networking%2Fudhcp%2Fcommon.h;h=d44bca4e6e2bc14087f525e623cb5e59b4ba843e;hb=fcc6347976ded376c9effe3b9fb216b00b2140cb;hp=006d580d32ef220a4fa688c2ee2ecf9bfecb624d;hpb=b6adbf1be29841501cc49917249e85f273e1df7c;p=oweals%2Fbusybox.git diff --git a/networking/udhcp/common.h b/networking/udhcp/common.h index 006d580d3..d44bca4e6 100644 --- a/networking/udhcp/common.h +++ b/networking/udhcp/common.h @@ -12,7 +12,7 @@ #include "libbb.h" -#define DEFAULT_SCRIPT "/usr/share/udhcpc/default.script" +#define DEFAULT_SCRIPT CONFIG_DHCPC_DEFAULT_SCRIPT extern const uint8_t MAC_BCAST_ADDR[6]; /* six all-ones */ @@ -21,6 +21,8 @@ extern const uint8_t MAC_BCAST_ADDR[6]; /* six all-ones */ #include #include +#define DHCP_OPTIONS_BUFSIZE 308 + struct dhcpMessage { uint8_t op; uint8_t htype; @@ -37,31 +39,37 @@ struct dhcpMessage { uint8_t sname[64]; uint8_t file[128]; uint32_t cookie; - uint8_t options[308]; /* 312 - cookie */ -}; + uint8_t options[DHCP_OPTIONS_BUFSIZE + CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS]; +} ATTRIBUTE_PACKED; struct udp_dhcp_packet { struct iphdr ip; struct udphdr udp; struct dhcpMessage data; +} ATTRIBUTE_PACKED; + +/* Let's see whether compiler understood us right */ +struct BUG_bad_sizeof_struct_udp_dhcp_packet { + char BUG_bad_sizeof_struct_udp_dhcp_packet + [(sizeof(struct udp_dhcp_packet) != 576 + CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS) ? -1 : 1]; }; -void udhcp_init_header(struct dhcpMessage *packet, char type); -int udhcp_get_packet(struct dhcpMessage *packet, int fd); uint16_t udhcp_checksum(void *addr, int count); -int udhcp_raw_packet(struct dhcpMessage *payload, + +void udhcp_init_header(struct dhcpMessage *packet, char type); + +int udhcp_recv_packet(struct dhcpMessage *packet, int fd); +int udhcp_send_raw_packet(struct dhcpMessage *payload, uint32_t source_ip, int source_port, uint32_t dest_ip, int dest_port, const uint8_t *dest_arp, int ifindex); -int udhcp_kernel_packet(struct dhcpMessage *payload, +int udhcp_send_kernel_packet(struct dhcpMessage *payload, uint32_t source_ip, int source_port, uint32_t dest_ip, int dest_port); /**/ -void udhcp_make_pidfile(const char *pidfile); - void udhcp_run_script(struct dhcpMessage *packet, const char *name); // Still need to clean these up... @@ -71,26 +79,21 @@ void udhcp_run_script(struct dhcpMessage *packet, const char *name); #define end_option udhcp_end_option #define add_option_string udhcp_add_option_string #define add_simple_option udhcp_add_simple_option -#define option_lengths udhcp_option_lengths /* from socket.h */ #define listen_socket udhcp_listen_socket #define read_interface udhcp_read_interface -/* from dhcpc.h */ -#define client_config udhcp_client_config -/* from dhcpd.h */ -#define server_config udhcp_server_config -long uptime(void); void udhcp_sp_setup(void); int udhcp_sp_fd_set(fd_set *rfds, int extra_fd); -int udhcp_sp_read(fd_set *rfds); +int udhcp_sp_read(const fd_set *rfds); int raw_socket(int ifindex); int read_interface(const char *interface, int *ifindex, uint32_t *addr, uint8_t *arp); -int listen_socket(uint32_t ip, int port, const char *inf); -int arpping(uint32_t yiaddr, uint32_t ip, uint8_t *arp, char *interface); +int listen_socket(/*uint32_t ip,*/ int port, const char *inf); +/* Returns 1 if no reply received */ +int arpping(uint32_t test_ip, uint32_t from_ip, uint8_t *from_mac, const char *interface); #if ENABLE_FEATURE_UDHCP_DEBUG -# define DEBUG(str, args...) bb_info_msg(str, ## args) +# define DEBUG(str, args...) bb_info_msg("### " str, ## args) #else # define DEBUG(str, args...) do {;} while (0) #endif