diff options
author | Michael Scott <michael.scott@linaro.org> | 2017-01-24 23:33:33 -0800 |
---|---|---|
committer | Jukka Rissanen <jukka.rissanen@linux.intel.com> | 2017-02-03 15:59:17 +0200 |
commit | 1a21a36b7e692fa7dc5ac63ad699d0706a268a15 (patch) | |
tree | 23f26401e603d7585c44b0c3ff8d87e15bf018f8 /samples | |
parent | fab087e9ba64aa210311829812e22bdb25ca8cfb (diff) |
samples: net: irc_bot: add DHCPv4 support
When CONFIG_NET_DHCPV4 is selected, ignore the CONFIG_NET_SAMPLES_MY_IPV4_ADDR
setting and instead used DHCPv4.
NOTE: This commit also adds a placeholder for DHCPv6 behavior which is not
yet functional.
Change-Id: Id31fcb99be46e966babf18f94b5dec151920dedc
Signed-off-by: Michael Scott <michael.scott@linaro.org>
Diffstat (limited to 'samples')
-rw-r--r-- | samples/net/irc_bot/prj_frdm_k64f.conf | 1 | ||||
-rw-r--r-- | samples/net/irc_bot/prj_qemu_x86.conf | 1 | ||||
-rw-r--r-- | samples/net/irc_bot/src/irc-bot.c | 38 |
3 files changed, 35 insertions, 5 deletions
diff --git a/samples/net/irc_bot/prj_frdm_k64f.conf b/samples/net/irc_bot/prj_frdm_k64f.conf index ec617c513..8db960d9b 100644 --- a/samples/net/irc_bot/prj_frdm_k64f.conf +++ b/samples/net/irc_bot/prj_frdm_k64f.conf @@ -4,6 +4,7 @@ CONFIG_NET_LOG=y CONFIG_NET_LOG_ENABLED=y CONFIG_SYS_LOG_NET_LEVEL=2 CONFIG_NET_IPV4=y +CONFIG_NET_DHCPV4=y CONFIG_NET_IF_UNICAST_IPV4_ADDR_COUNT=3 CONFIG_NET_IPV6=y CONFIG_NET_IF_UNICAST_IPV6_ADDR_COUNT=3 diff --git a/samples/net/irc_bot/prj_qemu_x86.conf b/samples/net/irc_bot/prj_qemu_x86.conf index 0f87bcfd2..bd1e9cb76 100644 --- a/samples/net/irc_bot/prj_qemu_x86.conf +++ b/samples/net/irc_bot/prj_qemu_x86.conf @@ -3,6 +3,7 @@ CONFIG_INIT_STACKS=y CONFIG_NET_LOG_ENABLED=y CONFIG_SYS_LOG_NET_LEVEL=2 CONFIG_NET_IPV4=y +CONFIG_NET_DHCPV4=y CONFIG_NET_IF_UNICAST_IPV4_ADDR_COUNT=3 CONFIG_NET_IPV6=y CONFIG_NET_IF_UNICAST_IPV6_ADDR_COUNT=3 diff --git a/samples/net/irc_bot/src/irc-bot.c b/samples/net/irc_bot/src/irc-bot.c index 55657f66f..d3c668eb9 100644 --- a/samples/net/irc_bot/src/irc-bot.c +++ b/samples/net/irc_bot/src/irc-bot.c @@ -549,11 +549,19 @@ zirc_connect(struct zirc *irc, const char *host, int port, void *data) return -EIO; } +#if defined(CONFIG_NET_IPV6) && defined(CONFIG_NET_DHCPV6) + /* TODO: IPV6 DHCP */ +#elif defined(CONFIG_NET_IPV4) && defined(CONFIG_NET_DHCPV4) + net_ipaddr_copy(&net_sin(&src_addr)->sin_addr, + &iface->dhcpv4.requested_ip); + ret = in_addr_set(ZIRC_AF_INET, NULL, 0, &src_addr); +#else ret = in_addr_set(ZIRC_AF_INET, ZIRC_LOCAL_IP_ADDR, 0, &src_addr); if (ret < 0) { goto connect_exit; } +#endif #if defined(CONFIG_DNS_RESOLVER) in_addr_set(ZIRC_AF_INET, NULL, port, &dst_addr); @@ -849,11 +857,6 @@ static void initialize_network(void) { struct net_if *iface; - struct sockaddr addr; - - /* TODO: use DHCP here, watch NET_EVENT_IF_UP, zirc_connect() when - * available, etc - */ NET_INFO("Initializing network"); @@ -862,6 +865,30 @@ initialize_network(void) panic("No default network interface"); } +#if defined(CONFIG_NET_IPV6) && defined(CONFIG_NET_DHCPV6) + /* TODO: IPV6 DHCP */ +#elif defined(CONFIG_NET_IPV4) && defined(CONFIG_NET_DHCPV4) + net_dhcpv4_start(iface); + + /* delay so DHCPv4 can assign IP */ + /* TODO: add a timeout/retry */ + NET_INFO("Waiting for DHCP ..."); + do { + k_sleep(K_SECONDS(1)); + } while (net_is_ipv4_addr_unspecified(&iface->dhcpv4.requested_ip)); + + NET_INFO("Done!"); + + /* TODO: add a timeout */ + NET_INFO("Waiting for IP assginment ..."); + do { + k_sleep(K_SECONDS(1)); + } while (!net_is_my_ipv4_addr(&iface->dhcpv4.requested_ip)); + + NET_INFO("Done!"); +#else + struct sockaddr addr; + if (in_addr_set(ZIRC_AF_INET, ZIRC_LOCAL_IP_ADDR, 0, &addr) < 0) { NET_ERR("Invalid IP address: %s", @@ -877,6 +904,7 @@ initialize_network(void) &net_sin(&addr)->sin_addr, NET_ADDR_MANUAL, 0); #endif +#endif /* CONFIG_NET_IPV6 && CONFIG_NET_DHCPV6 */ } static void |