#endif
static void
-bootp_handler(udp_socket_t *skt, char *buf, int len,
+bootp_handler(udp_socket_t *skt, void *buf, int len,
ip_route_t *src_route, word src_port)
{
bootp_header_t *b;
unsigned char *p, expected = 0;
#endif
- b = (bootp_header_t *)buf;
+ b = buf;
if (bp_info) {
memset(bp_info,0,sizeof *bp_info);
if (len > sizeof *bp_info)
#define AddOption(p,d) do {memcpy(p,d,sizeof d); p += sizeof d;} while (0)
-static int get_xid()
+static int get_xid(void)
{
#if CYGINT_ISO_RAND
return rand();
#endif
int txSize;
bool abort = false;
- int xid;
#ifdef CYGSEM_REDBOOT_NETWORKING_DHCP
dhcpState = DHCP_NONE;
__udp_send((char *)&b, txSize, &r, IPPORT_BOOTPS, IPPORT_BOOTPC);
// If we're retrying, inform the user
- if (retry == (MAX_RETRIES-1))
+ if (retry == (MAX_RETRIES - 1))
diag_printf("... waiting for BOOTP information\n");
do {
memcpy(&__bootp_dns_addr, p, 4);
__bootp_dns_set = 1;
break;
-#endif
+#ifdef CYGPKG_REDBOOT_NETWORKING_DNS_DHCP_DOMAIN
+ case TAG_DOMAIN_NAME:
+ if(optlen < sizeof(__bootp_dns_domain)) {
+ memcpy(__bootp_dns_domain, p, optlen);
+ __bootp_dns_domain[optlen] = '\0';
+ __bootp_dns_domain_set = 1;
+ } else {
+ diag_printf("DNS domain name too long\n");
+ }
+ break;
+#endif //CYGPKG_REDBOOT_NETWORKING_DNS_DHCP_DOMAIN
+#endif //CYGPKG_REDBOOT_NETWORKING_DNS
default:
break;
}
return 0;
}
#endif
- if (_rb_break(1)) {
- // The user typed ^C on the console
- abort = true;
- break;
- }
- start--; /* account for time spent in _rb_break() */
+ if (retry < MAX_RETRIES) {
+ if (_rb_break(1)) {
+ // The user typed ^C on the console
+ abort = true;
+ break;
+ }
+ start--; /* account for time spent in _rb_break() */
+ }
} while ((int)(MS_TICKS_DELAY() - start) < RETRY_TIME);
} while (!abort && (retry-- > 0));