Base Code merged to SPIN 2.4
[platform/upstream/connman.git] / gdhcp / common.h
old mode 100644 (file)
new mode 100755 (executable)
index 13f49d8..7da1313
 
 #include <glib.h>
 
+#include "unaligned.h"
 #include "gdhcp.h"
 
-#define dhcp_get_unaligned(ptr)                        \
-({                                             \
-       struct __attribute__((packed)) {        \
-               typeof(*(ptr)) __v;             \
-       } *__p = (void *) (ptr);                \
-       __p->__v;                               \
-})
-
-#define dhcp_put_unaligned(val, ptr)           \
-do {                                           \
-       struct __attribute__((packed)) {        \
-               typeof(*(ptr)) __v;             \
-       } *__p = (void *) (ptr);                \
-       __p->__v = (val);                       \
-} while (0)
-
 #define CLIENT_PORT 68
 #define SERVER_PORT 67
 
@@ -185,6 +170,15 @@ static const uint8_t dhcp_option_lengths[] = {
        [OPTION_U32]    = 4,
 };
 
+/* already defined within netinet/in.h if using GNU compiler */
+#ifndef __USE_GNU
+struct in6_pktinfo {
+       struct in6_addr ipi6_addr;  /* src/dst IPv6 address */
+       unsigned int ipi6_ifindex;  /* send/recv interface index */
+};
+#endif
+
+char *malloc_option_value_string(uint8_t *option, GDHCPOptionType type);
 uint8_t *dhcp_get_option(struct dhcp_packet *packet, int code);
 uint8_t *dhcpv6_get_option(struct dhcpv6_packet *packet, uint16_t pkt_len,
                        int code, uint16_t *option_len, int *option_count);
@@ -194,7 +188,11 @@ int dhcp_end_option(uint8_t *optionptr);
 void dhcp_add_binary_option(struct dhcp_packet *packet, uint8_t *addopt);
 void dhcpv6_add_binary_option(struct dhcpv6_packet *packet, uint16_t max_len,
                                uint16_t *pkt_len, uint8_t *addopt);
-void dhcp_add_simple_option(struct dhcp_packet *packet,
+void dhcp_add_option_uint8(struct dhcp_packet *packet,
+                               uint8_t code, uint8_t data);
+void dhcp_add_option_uint16(struct dhcp_packet *packet,
+                               uint8_t code, uint16_t data);
+void dhcp_add_option_uint32(struct dhcp_packet *packet,
                                uint8_t code, uint32_t data);
 GDHCPOptionType dhcp_get_code_type(uint8_t code);
 GDHCPOptionType dhcpv6_get_code_type(uint16_t code);
@@ -207,7 +205,8 @@ void dhcpv6_init_header(struct dhcpv6_packet *packet, uint8_t type);
 int dhcp_send_raw_packet(struct dhcp_packet *dhcp_pkt,
                        uint32_t source_ip, int source_port,
                        uint32_t dest_ip, int dest_port,
-                       const uint8_t *dest_arp, int ifindex);
+                       const uint8_t *dest_arp, int ifindex,
+                       bool bcast);
 int dhcpv6_send_packet(int index, struct dhcpv6_packet *dhcp_pkt, int len);
 int dhcp_send_kernel_packet(struct dhcp_packet *dhcp_pkt,
                        uint32_t source_ip, int source_port,
@@ -219,4 +218,4 @@ int dhcpv6_recv_l3_packet(struct dhcpv6_packet **packet, unsigned char *buf,
 int dhcp_l3_socket_send(int index, int port, int family);
 
 char *get_interface_name(int index);
-gboolean interface_is_up(int index);
+bool interface_is_up(int index);