You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by ad...@apache.org on 2017/04/19 18:18:03 UTC
[07/30] incubator-mynewt-core git commit: net/ip;
add stub of a CLI for managing interfaces.
net/ip; add stub of a CLI for managing interfaces.
Project: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/commit/a95f14fb
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/a95f14fb
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/a95f14fb
Branch: refs/heads/master
Commit: a95f14fba512766d70fde088b437cbeff5b2a45c
Parents: c700fc7
Author: Marko Kiiskila <ma...@runtime.io>
Authored: Fri Apr 14 12:55:02 2017 -0700
Committer: Marko Kiiskila <ma...@runtime.io>
Committed: Fri Apr 14 13:21:30 2017 -0700
----------------------------------------------------------------------
net/ip/src/ip_init.c | 5 ++
net/ip/src/ip_priv.h | 3 +
net/ip/src/lwip_cli.c | 140 +++++++++++++++++++++++++++++++++++++++++++++
net/ip/syscfg.yml | 26 +++++++++
4 files changed, 174 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/a95f14fb/net/ip/src/ip_init.c
----------------------------------------------------------------------
diff --git a/net/ip/src/ip_init.c b/net/ip/src/ip_init.c
index 7916d64..c73df02 100644
--- a/net/ip/src/ip_init.c
+++ b/net/ip/src/ip_init.c
@@ -16,6 +16,8 @@
* specific language governing permissions and limitations
* under the License.
*/
+#include "syscfg/syscfg.h"
+
#include <lwip/tcpip.h>
#include "ip_priv.h"
@@ -25,6 +27,9 @@ int ip_init(void)
if (lwip_socket_init()) {
return -1;
}
+#if MYNEWT_VAL(LWIP_CLI)
+ lwip_cli_init();
+#endif
tcpip_init(NULL, NULL);
return 0;
}
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/a95f14fb/net/ip/src/ip_priv.h
----------------------------------------------------------------------
diff --git a/net/ip/src/ip_priv.h b/net/ip/src/ip_priv.h
index dd50c9f..5189801 100644
--- a/net/ip/src/ip_priv.h
+++ b/net/ip/src/ip_priv.h
@@ -30,6 +30,9 @@ int lwip_itf_getnext(struct mn_itf *mi);
int lwip_itf_addr_getnext(struct mn_itf *mi, struct mn_itf_addr *mia);
int lwip_socket_init(void);
+void lwip_cli_init(void);
+
+int lwip_err_to_mn_err(int rc);
#ifdef __cplusplus
}
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/a95f14fb/net/ip/src/lwip_cli.c
----------------------------------------------------------------------
diff --git a/net/ip/src/lwip_cli.c b/net/ip/src/lwip_cli.c
new file mode 100644
index 0000000..adfa2ef
--- /dev/null
+++ b/net/ip/src/lwip_cli.c
@@ -0,0 +1,140 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+#include <syscfg/syscfg.h>
+
+#if MYNEWT_VAL(LWIP_CLI)
+#include <string.h>
+
+#include <mn_socket/mn_socket.h>
+#include <console/console.h>
+#include <shell/shell.h>
+
+#include <lwip/tcpip.h>
+#include <lwip/dhcp.h>
+
+#include "ip_priv.h"
+
+static void
+lwip_nif_print(struct mn_itf *itf)
+{
+ int rc;
+ int flags = 0;
+ struct mn_itf_addr itf_addr;
+ char addr_str[48];
+
+ console_printf("%d: %s %x(", itf->mif_idx, itf->mif_name, itf->mif_flags);
+ if (itf->mif_flags & MN_ITF_F_UP) {
+ flags = 1;
+ console_printf("up");
+ }
+ if (itf->mif_flags & MN_ITF_F_MULTICAST) {
+ if (flags) {
+ console_printf("|");
+ }
+ flags = 1;
+ console_printf("mcast");
+ }
+ if (itf->mif_flags & MN_ITF_F_LINK) {
+ if (flags) {
+ console_printf("|");
+ }
+ flags = 1;
+ console_printf("link");
+ }
+ console_printf(")\n");
+
+ memset(&itf_addr, 0, sizeof(itf_addr));
+ while (1) {
+ rc = mn_itf_addr_getnext(itf, &itf_addr);
+ if (rc) {
+ break;
+ }
+ mn_inet_ntop(itf_addr.mifa_family, &itf_addr.mifa_addr,
+ addr_str, sizeof(addr_str));
+ console_printf(" %s/%d\n", addr_str, itf_addr.mifa_plen);
+ }
+}
+
+int
+lwip_nif_up(const char *name)
+{
+ struct netif *nif;
+ err_t err;
+
+ nif = netif_find(name);
+ if (!nif) {
+ return MN_EINVAL;
+ }
+ if (nif->flags & NETIF_FLAG_LINK_UP) {
+ netif_set_up(nif);
+ netif_set_default(nif);
+#if LWIP_IPV6
+ nif->ip6_autoconfig_enabled = 1;
+ netif_create_ip6_linklocal_address(nif, 1);
+#endif
+ err = dhcp_start(nif);
+ return lwip_err_to_mn_err(err);
+ }
+ return 0;
+}
+
+static int
+lwip_cli(int argc, char **argv)
+{
+ int rc;
+ struct mn_itf itf;
+
+ if (argc == 1 || !strcmp(argv[1], "listif")) {
+ memset(&itf, 0, sizeof(itf));
+ while (1) {
+ rc = mn_itf_getnext(&itf);
+ if (rc) {
+ break;
+ }
+ lwip_nif_print(&itf);
+ }
+ } else if (mn_itf_get(argv[1], &itf) == 0) {
+ if (argc == 2) {
+ lwip_nif_print(&itf);
+ return 0;
+ }
+ if (!strcmp(argv[2], "up")) {
+ rc = lwip_nif_up(argv[1]);
+ console_printf("lwip_nif_up() = %d\n", rc);
+ } else if (!strcmp(argv[2], "down")) {
+ } else {
+ console_printf("unknown cmd\n");
+ }
+ } else {
+ console_printf("unknown cmd\n");
+ }
+ return 0;
+}
+
+struct shell_cmd lwip_cli_cmd = {
+ .sc_cmd = "ip",
+ .sc_cmd_func = lwip_cli
+};
+
+void
+lwip_cli_init(void)
+{
+ shell_cmd_register(&lwip_cli_cmd);
+}
+#endif
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/a95f14fb/net/ip/syscfg.yml
----------------------------------------------------------------------
diff --git a/net/ip/syscfg.yml b/net/ip/syscfg.yml
new file mode 100644
index 0000000..7ad651e
--- /dev/null
+++ b/net/ip/syscfg.yml
@@ -0,0 +1,26 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+# Package: net/ip
+
+syscfg.defs:
+ LWIP_CLI:
+ description: 'CLI for interacting with LwIP'
+ value: 1
+ restrictions:
+ - SHELL_TASK