summaryrefslogtreecommitdiff
path: root/samples
diff options
context:
space:
mode:
authorMichael Scott <michael.scott@linaro.org>2017-01-24 23:33:33 -0800
committerJukka Rissanen <jukka.rissanen@linux.intel.com>2017-02-03 15:59:17 +0200
commit1a21a36b7e692fa7dc5ac63ad699d0706a268a15 (patch)
tree23f26401e603d7585c44b0c3ff8d87e15bf018f8 /samples
parentfab087e9ba64aa210311829812e22bdb25ca8cfb (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.conf1
-rw-r--r--samples/net/irc_bot/prj_qemu_x86.conf1
-rw-r--r--samples/net/irc_bot/src/irc-bot.c38
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