linux-bluetooth.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Marcel Holtmann <marcel@holtmann.org>
To: Brian Gix <brian.gix@intel.com>
Cc: linux-bluetooth@vger.kernel.org,
	Johan Hedberg <johan.hedberg@gmail.com>,
	inga.stotland@intel.com
Subject: Re: [PATCH BlueZ v4 09/30] mesh: Acceptor side provisioning implimentation
Date: Wed, 19 Dec 2018 00:09:19 +0100	[thread overview]
Message-ID: <1A6BD1B4-7CCB-466E-9390-B36C690CB70C@holtmann.org> (raw)
In-Reply-To: <20181218223139.8041-10-brian.gix@intel.com>

Hi Brian,

> ---
> mesh/prov-acceptor.c | 711 +++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 711 insertions(+)
> create mode 100644 mesh/prov-acceptor.c
> 
> diff --git a/mesh/prov-acceptor.c b/mesh/prov-acceptor.c
> new file mode 100644
> index 000000000..ac42e1e2c
> --- /dev/null
> +++ b/mesh/prov-acceptor.c
> @@ -0,0 +1,711 @@
> +/*
> + *
> + *  BlueZ - Bluetooth protocol stack for Linux
> + *
> + *  Copyright (C) 2018  Intel Corporation. All rights reserved.
> + *
> + *
> + *  This library is free software; you can redistribute it and/or
> + *  modify it under the terms of the GNU Lesser General Public
> + *  License as published by the Free Software Foundation; either
> + *  version 2.1 of the License, or (at your option) any later version.
> + *
> + *  This library is distributed in the hope that it will be useful,
> + *  but WITHOUT ANY WARRANTY; without even the implied warranty of
> + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> + *  Lesser General Public License for more details.
> + *
> + */
> +
> +#ifdef HAVE_CONFIG_H
> +#include <config.h>
> +#endif
> +
> +#include <sys/select.h>
> +#include <sys/time.h>
> +#include <sys/types.h>
> +#include <unistd.h>
> +#include <fcntl.h>
> +#include <termios.h>
> +
> +#include <ctype.h>
> +#include <stdlib.h>
> +#include <stdio.h>
> +#include <getopt.h>
> +#include <time.h>
> +#include <ell/ell.h>
> +
> +#include "mesh/mesh-defs.h"
> +#include "src/shared/ecc.h"
> +
> +#include "mesh/util.h"
> +#include "mesh/net_keys.h"
> +#include "mesh/crypto.h"
> +#include "mesh/net.h"
> +#include "mesh/error.h"
> +#include "mesh/prov.h"
> +#include "mesh/provision.h"
> +#include "mesh/pb-adv.h"
> +#include "mesh/mesh.h"
> +#include "mesh/agent.h"
> +
> +/* Quick size sanity check */
> +static const uint16_t expected_pdu_size[] = {
> +	2,	/* PROV_INVITE */
> +	12,	/* PROV_CAPS */
> +	6,	/* PROV_START */
> +	65,	/* PROV_PUB_KEY */
> +	1,	/* PROV_INP_CMPLT */
> +	17,	/* PROV_CONFIRM */
> +	17,	/* PROV_RANDOM */
> +	34,	/* PROV_DATA */
> +	1,	/* PROV_COMPLETE */
> +	2,	/* PROV_FAILED */
> +};
> +
> +#define BEACON_TYPE_UNPROVISIONED		0x00
> +
> +static const uint8_t pkt_filter = MESH_AD_TYPE_PROVISION;
> +static const uint8_t bec_filter[] = {MESH_AD_TYPE_BEACON,
> +						BEACON_TYPE_UNPROVISIONED};
> +
> +enum acp_state {
> +	ACP_PROV_IDLE = 0,
> +	ACP_PROV_CAPS_SENT,
> +	ACP_PROV_CAPS_ACKED,
> +	ACP_PROV_KEY_SENT,
> +	ACP_PROV_KEY_ACKED,
> +	ACP_PROV_INP_CMPLT_SENT,
> +	ACP_PROV_INP_CMPLT_ACKED,
> +	ACP_PROV_CONF_SENT,
> +	ACP_PROV_CONF_ACKED,
> +	ACP_PROV_RAND_SENT,
> +	ACP_PROV_RAND_ACKED,
> +	ACP_PROV_CMPLT_SENT,
> +	ACP_PROV_FAIL_SENT,
> +};
> +
> +#define MAT_REMOTE_PUBLIC	0x01
> +#define MAT_LOCAL_PRIVATE	0x02
> +#define MAT_RAND_AUTH		0x04
> +#define MAT_SECRET	(MAT_REMOTE_PUBLIC | MAT_LOCAL_PRIVATE)
> +
> +struct mesh_prov_acceptor {
> +	mesh_prov_acceptor_complete_func_t cmplt;
> +	prov_trans_tx_t trans_tx;
> +	void *agent;
> +	void *caller_data;
> +	void *trans_data;
> +	struct l_timeout *timeout;
> +	uint32_t to_secs;
> +	enum acp_state	state;
> +	uint8_t transport;
> +	uint8_t material;
> +	uint8_t expected;
> +	int8_t previous;
> +	struct conf_input conf_inputs;
> +	uint8_t calc_key[16];
> +	uint8_t salt[16];
> +	uint8_t confirm[16];
> +	uint8_t s_key[16];
> +	uint8_t s_nonce[13];
> +	uint8_t private_key[32];
> +	uint8_t secret[32];
> +	uint8_t rand_auth_workspace[48];
> +};
> +
> +static struct mesh_prov_acceptor *prov = NULL;
> +
> +static void acceptor_free(void)
> +{
> +
> +	if (prov)
> +		l_timeout_remove(prov->timeout);
> +
> +	mesh_send_cancel(bec_filter, sizeof(bec_filter));
> +	mesh_send_cancel(&pkt_filter, sizeof(pkt_filter));
> +
> +	if (prov->trans_tx) {
> +		if (prov->transport == PB_ADV)
> +			pb_adv_unreg(prov->trans_data);
> +#if defined(GATT_ENABLED)
> +		/* TODO: Cleanup GATT bearer if exists */
> +		else if (prov->transport == PB_GATT)
> +			pb_gatt_unreg(prov->trans_data);
> +#endif

this is a simple no. Please stop hacking the code like yes. And yes, adding ifdef is hacking it. Either you abstract different bearer cleanly or they will be all always available. I am not doing two test runs to check your idea of build options.

Regards

Marcel


  reply	other threads:[~2018-12-18 23:09 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-12-18 22:31 [PATCH BlueZ v4 00/30] Major rewrite for Multi-Node and DBus Brian Gix
2018-12-18 22:31 ` [PATCH BlueZ v4 01/30] mesh: Staging for Mesh DBus API rewrite Brian Gix
2018-12-18 22:31 ` [PATCH BlueZ v4 02/30] mesh: Delete obsolete files Brian Gix
2018-12-18 22:31 ` [PATCH BlueZ v4 03/30] mesh: Utilities for DBus support Brian Gix
2018-12-18 23:04   ` Marcel Holtmann
2018-12-18 22:31 ` [PATCH BlueZ v4 04/30] mesh: Internal errors Brian Gix
2018-12-18 23:05   ` Marcel Holtmann
2018-12-18 22:31 ` [PATCH BlueZ v4 05/30] mesh: Re-write storage for Multiple Nodes Brian Gix
2018-12-18 22:31 ` [PATCH BlueZ v4 06/30] mesh: Rewrite Node handling for multiple nodes Brian Gix
2018-12-18 22:31 ` [PATCH BlueZ v4 07/30] mesh: Rewite Network layer " Brian Gix
2018-12-18 22:31 ` [PATCH BlueZ v4 08/30] mesh: Direction agnostic PB-Adv implimentation Brian Gix
2018-12-18 22:31 ` [PATCH BlueZ v4 09/30] mesh: Acceptor side provisioning implimentation Brian Gix
2018-12-18 23:09   ` Marcel Holtmann [this message]
2018-12-18 22:31 ` [PATCH BlueZ v4 10/30] mesh: Initiator " Brian Gix
2018-12-18 22:31 ` [PATCH BlueZ v4 11/30] mesh: Rewrite Controler interface for full init Brian Gix
2018-12-18 22:31 ` [PATCH BlueZ v4 12/30] mesh: Unchanged variables set to const Brian Gix
2018-12-18 22:31 ` [PATCH BlueZ v4 13/30] mesh: centralize generic utilities Brian Gix
2018-12-18 22:31 ` [PATCH BlueZ v4 14/30] mesh: re-arrange provisioning for DBus API Brian Gix
2018-12-18 22:31 ` [PATCH BlueZ v4 15/30] mesh: Re-architect " Brian Gix
2018-12-18 22:31 ` [PATCH BlueZ v4 16/30] mesh: Make config model handle multiple nodes Brian Gix
2018-12-18 22:31 ` [PATCH BlueZ v4 17/30] mesh: Multi node Config Server model Brian Gix
2018-12-18 22:31 ` [PATCH BlueZ v4 18/30] mesh: restructure I/O for multiple nodes Brian Gix
2018-12-18 22:31 ` [PATCH BlueZ v4 19/30] mesh: Restrusture DB to support " Brian Gix
2018-12-18 22:31 ` [PATCH BlueZ v4 20/30] mesh: restructure model services for " Brian Gix
2018-12-18 22:31 ` [PATCH BlueZ v4 21/30] mesh: DBUS interface for Provisioning Agent Brian Gix
2018-12-18 22:31 ` [PATCH BlueZ v4 22/30] mesh: restructure App Key storage Brian Gix
2018-12-18 22:31 ` [PATCH BlueZ v4 23/30] mesh: Clean-up Comment style Brian Gix
2018-12-18 22:31 ` [PATCH BlueZ v4 24/30] mesh: Update for DBus API and multi-node support Brian Gix
2018-12-18 22:31 ` [PATCH BlueZ v4 25/30] mesh: Add default location for Mesh Node storage Brian Gix
2018-12-18 23:15   ` Marcel Holtmann
2018-12-18 22:31 ` [PATCH BlueZ v4 26/30] mesh: Add structural changes for mesh Brian Gix
2018-12-18 22:31 ` [PATCH BlueZ v4 27/30] mesh: Sample Provisioning Agent Brian Gix
2018-12-18 22:31 ` [PATCH BlueZ v4 28/30] mesh: Sample On/Off Client and Server Brian Gix
2018-12-18 22:31 ` [PATCH BlueZ v4 29/30] mesh: Sample Mesh Joiner (provision acceptor) Brian Gix
2018-12-18 22:31 ` [PATCH BlueZ v4 30/30] mesh: Enable building Mesh Daemon Brian Gix
2018-12-18 23:00 ` [PATCH BlueZ v4 00/30] Major rewrite for Multi-Node and DBus Marcel Holtmann
2018-12-18 23:05   ` Gix, Brian

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1A6BD1B4-7CCB-466E-9390-B36C690CB70C@holtmann.org \
    --to=marcel@holtmann.org \
    --cc=brian.gix@intel.com \
    --cc=inga.stotland@intel.com \
    --cc=johan.hedberg@gmail.com \
    --cc=linux-bluetooth@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).