Re: [PATCH V3 3/9] mesh: meshctl: Add set heartbeat publish

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Steve,

On Fri, 2017-12-15 at 06:46 +0000, sbrown@xxxxxxxxxxxx wrote:
> From: Steve Brown <sbrown@xxxxxxxxxxxx>
> 
> Sets heartbeat for node 0100
> 
> [config: Target = 0100]# hb-set 0100 0 0 0 0
> 
> Set heartbeat for node 0100 status: Success
> Destination:    0100
> Count:          00
> Period:         00
> TTL:            ff
> Features:       0000
> Net_Idx:        0000
> ---
>  mesh/config-client.c | 75
> ++++++++++++++++++++++++++++++++++++++++++++++++++++
>  mesh/net.c           | 20 +++++++++++++-
>  2 files changed, 94 insertions(+), 1 deletion(-)
> 
> diff --git a/mesh/config-client.c b/mesh/config-client.c
> index aa7414cc3..270a8ca36 100644
> --- a/mesh/config-client.c
> +++ b/mesh/config-client.c
> @@ -258,6 +258,24 @@ static bool client_msg_recvd(uint16_t src,
> uint8_t *data,
>  			bt_shell_printf("Subscr Addr:\t%4.4x\n",
>  					get_le16(data + i));
>  		break;
> +
> +	/* Per Mesh Profile 4.3.2.63 */
> +	case OP_CONFIG_HEARTBEAT_PUB_STATUS:
> +		bt_shell_printf("\nSet heartbeat for node %4.4x
> status: %s\n",
> +				src,
> +				data[0] == MESH_STATUS_SUCCESS ?
> "Success" :
> +						mesh_status_str(data
> [0]));
> +
> +		if (data[0] != MESH_STATUS_SUCCESS)
> +			return true;
> +
> +		bt_shell_printf("Destination:\t%4.4x\n",
> get_le16(data + 1));
> +		bt_shell_printf("Count:\t\t%2.2x\n", data[3]);
> +		bt_shell_printf("Period:\t\t%2.2x\n", data[4]);
> +		bt_shell_printf("TTL:\t\t%2.2x\n", data[5]);
> +		bt_shell_printf("Features:\t%4.4x\n", get_le16(data
> + 6));
> +		bt_shell_printf("Net_Idx:\t%4.4x\n", get_le16(data +
> 8));
> +		break;
>  	}
>  
>  	return true;
> @@ -712,6 +730,46 @@ static void cmd_sub_get(int argc, char *argv[])
>  		bt_shell_printf("Failed to send \"GET SUB GET\"\n");
>  }
>  
> +static void cmd_set_hb(int argc, char *argv[])
> +{
> +	uint16_t n;
> +	uint8_t msg[32];
> +	int parm_cnt;
> +
> +	if (IS_UNASSIGNED(target)) {
> +		bt_shell_printf("Destination not set\n");
> +		return;
> +	}
> +
> +	n = mesh_opcode_set(OP_CONFIG_HEARTBEAT_PUB_SET, msg);
> +
> +	parm_cnt = read_input_parameters(argc, argv);
> +	if (parm_cnt != 5) {
> +		bt_shell_printf("Bad arguments: %s\n", argv[1]);
> +		return;
> +	}
> +
> +	/* Per Mesh Profile 4.3.2.62 */
> +	/* Publish address */
> +	put_le16(parms[0], msg + n);
> +	n += 2;
> +	/* Count Log */
> +	msg[n++] = parms[1];
> +	/* Period Log */
> +	msg[n++] = parms[2];
> +	/* Heartbeat TTL */
> +	msg[n++] = DEFAULT_TTL;
> +	/* Features */
> +	put_le16(parms[3], msg + n);
> +	n += 2;
> +	/* NetKey Index */
> +	put_le16(parms[4], msg + n);
> +	n += 2;
> +
> +	if (!config_send(msg, n))
> +		bt_shell_printf("Failed to send \"SET HEARTBEAT
> PUBLICATION\"\n");
> +}
> +
>  static void cmd_get_ttl(int argc, char *argv[])
>  {
>  	cmd_default(OP_CONFIG_DEFAULT_TTL_GET);
> @@ -741,6 +799,23 @@ static const struct bt_shell_menu cfg_menu = {
>  	{"pub-set", "<ele_addr> <pub_addr> <app_idx> "
>  			"<period (step|res)> <re-xmt (count|per)>
> <model>",
>  				cmd_set_pub,	"Set
> publication"},
> +	{"proxy-set",		"<proxy>",		cmd_s
> et_proxy,
> +						"Set proxy state"},
> +	{"proxy-get",		NULL,			cm
> d_get_proxy,
> +						"Get proxy state"},
> +	{"ident-set",		"<net_idx> <state>",	cmd
> _set_ident,
> +						"Set node identity
> state"},
> +	{"ident-get",		"<net_idx>",		cmd
> _get_ident,
> +						"Get node identity
> state"},
> +	{"relay-set",		"<relay> <rexmt count> <rexmt
> steps>",
> +							cmd_set_rela
> y,
> +						"Set relay"},
> +	{"relay-get",		NULL,			cm
> d_get_relay,
> +						"Get relay"},
> +	{"pub-get", "<ele_addr> <model>",		cmd_get_pub
> ,
> +						"Get publication"},
> +	{"hb-pub-set", "<pub_addr> <count> <period> <features>
> <net_idx>",
> +				cmd_set_hb,     "Set heartbeati
> publish"},
>  	{"sub-add", "<ele_addr> <sub_addr> <model id>",
>  				cmd_sub_add,    "Subscription add"},
>  	{"sub-get", "<ele_addr> <model id>",
> diff --git a/mesh/net.c b/mesh/net.c
> index 421dc6955..20dfcb8a8 100644
> --- a/mesh/net.c
> +++ b/mesh/net.c
> @@ -1399,6 +1399,24 @@ static bool ctl_rxed(uint16_t net_idx,
> uint32_t iv_index,
>  		uint8_t *trans, uint16_t len)
>  {
>  	/* TODO: Handle control messages */
> +
> +	/* Per Mesh Profile 3.6.5.10 */
> +	if (trans[0] == NET_OP_HEARTBEAT) {
> +		uint16_t feat = get_be16(trans + 2);
> +
> +		bt_shell_printf("HEARTBEAT src: %4.4x dst: %4.4x \
> +				TTL: %2.2x feat: %s%s%s%s\n",
> +				src, dst, trans[1],
> +				(feat & MESH_FEATURE_RELAY) ? "relay
> " : "",
> +				(feat & MESH_FEATURE_PROXY) ? "proxy
> " : "",
> +				(feat & MESH_FEATURE_FRIEND) ?
> "friend " : "",
> +				(feat & MESH_FEATURE_LPN) ? "lpn" :
> "");
> +		return true;
> +	}
> +
> +	bt_shell_printf("unrecognized control message src:%4.4x
> dst:%4.4x len:%d\n",
> +			src, dst, len);
> +	print_byte_array("msg: ", trans, len);
>  	return false;
>  }
>  
> @@ -2098,7 +2116,7 @@ bool net_access_layer_send(uint8_t ttl,
> uint16_t src, uint32_t dst,
>  	if (!result)
>  		return false;
>  
> -	segN = SEG_MAX(len + sizeof(uint32_t));
> +	segN = SEG_MAX(len + sizeof(mic32));
>  
>  	/* Only one ACK required SAR message per destination at a
> time */
>  	if (segN && IS_UNICAST(dst)) {

After applying this patch, the code fails to compile because of
undeclared functions for get/set proxy, get/set relay, get/set ident
and get pub.
I believe the expectation is that the code should cleanly compile after
applying each patch. Plus, you would want to keep the new added
fuctionalities bundled together, i.e., introduce new command menu items
along with the command handling (e.g., "proxy-set" & "proxy-get" belong
in
"[PATCH Vxxx 6/9] mesh: meshctl: Add set/get proxy"

Regards,

Inga

Attachment: smime.p7s
Description: S/MIME cryptographic signature


[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux