blob: d10e25e1c1b970c07df747f4741a0bd92be4b66f [file] [log] [blame]
/*
* Copyright (c) 2016 Intel Corporation
* Copyright (c) 2023 Nordic Semiconductor ASA
*
* SPDX-License-Identifier: Apache-2.0
*/
/* Dynamic shell command completion for network interface.
* This is be used by multiple commands.
*/
#define MAX_IFACE_HELP_STR_LEN sizeof("longbearername (0xabcd0123)")
#define MAX_IFACE_STR_LEN sizeof("xxx")
static char iface_help_buffer[MAX_IFACE_COUNT][MAX_IFACE_HELP_STR_LEN];
static char iface_index_buffer[MAX_IFACE_COUNT][MAX_IFACE_STR_LEN];
static void iface_index_get(size_t idx, struct shell_static_entry *entry);
SHELL_DYNAMIC_CMD_CREATE(iface_index, iface_index_get);
static char *set_iface_index_buffer(size_t idx)
{
struct net_if *iface = net_if_get_by_index(idx);
/* Network interfaces start at 1 */
if (idx == 0) {
return "";
}
if (!iface) {
return NULL;
}
snprintk(iface_index_buffer[idx - 1], MAX_IFACE_STR_LEN, "%d", (uint8_t)idx);
return iface_index_buffer[idx - 1];
}
static char *set_iface_index_help(size_t idx)
{
struct net_if *iface = net_if_get_by_index(idx);
/* Network interfaces start at 1 */
if (idx == 0) {
return "";
}
if (!iface) {
return NULL;
}
#if defined(CONFIG_NET_INTERFACE_NAME)
char name[CONFIG_NET_INTERFACE_NAME_LEN + 1];
net_if_get_name(iface, name, CONFIG_NET_INTERFACE_NAME_LEN);
name[CONFIG_NET_INTERFACE_NAME_LEN] = '\0';
snprintk(iface_help_buffer[idx - 1], MAX_IFACE_HELP_STR_LEN,
"%s [%s] (%p)", name, iface2str(iface, NULL), iface);
#else
snprintk(iface_help_buffer[idx - 1], MAX_IFACE_HELP_STR_LEN,
"[%s] (%p)", iface2str(iface, NULL), iface);
#endif
return iface_help_buffer[idx - 1];
}
static void iface_index_get(size_t idx, struct shell_static_entry *entry)
{
entry->handler = NULL;
entry->help = set_iface_index_help(idx);
entry->subcmd = &iface_index;
entry->syntax = set_iface_index_buffer(idx);
}