#include #include #include #include #include #include #include #include #include #include #include #define R(f) \ do { \ qse_printf (QSE_T("== %s ==\n"), QSE_T(#f)); \ if (f() == -1) goto oops; \ } while (0) static int test10() { struct sockaddr_in sin; int s; qse_uint8_t buf[10000]; qse_dhcp4_pktbuf_t pb; qse_ip4ad_t ip4ad[3]; if ((s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1) return -1; memset (&sin, 0, sizeof(sin)); sin.sin_family = AF_INET; sin.sin_addr.s_addr = inet_addr("192.168.1.2"); sin.sin_port = htons(67); qse_dhcp4_initialize_pktbuf (&pb, buf, QSE_SIZEOF(buf)); pb.hdr->op = QSE_DHCP4_OP_BOOTREQUEST; pb.hdr->htype = QSE_DHCP4_HTYPE_ETHERNET; pb.hdr->hlen = 6; qse_dhcp4_add_option (&pb, QSE_DHCP4_OPT_HOST_NAME, "my.server", 9); qse_dhcp4_add_option (&pb, QSE_DHCP4_OPT_PADDING, QSE_NULL, 0); qse_dhcp4_add_option (&pb, QSE_DHCP4_OPT_PADDING, QSE_NULL, 0); qse_dhcp4_add_option (&pb, QSE_DHCP4_OPT_PADDING, QSE_NULL, 0); qse_strtoip4ad (QSE_T("192.168.1.1"), &ip4ad[0]); qse_strtoip4ad (QSE_T("192.168.1.2"), &ip4ad[1]); qse_strtoip4ad (QSE_T("192.168.1.3"), &ip4ad[2]); qse_dhcp4_add_option (&pb, QSE_DHCP4_OPT_NAME_SERVER, ip4ad, QSE_SIZEOF(ip4ad)); qse_dhcp4_add_option (&pb, QSE_DHCP4_OPT_END, QSE_NULL, 0); sendto (s, pb.hdr, pb.len, 0, &sin, sizeof(sin)); close (s); return 0; } int main () { qse_open_stdsios (); R (test10); oops: qse_close_stdsios (); return 0; }