On 03/13/2013 03:25 AM, Wolf-Bastian Pöttner wrote:
> This allows setting up a network without a PAN
> coordinator. Necessary if you want to be compatible
> with the contiki implementation.
>
> Signed-off-by: Stefan Schmidt <[email protected]>
> ---
> src/iz-mac.c | 91
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 91 insertions(+)
>
> diff --git a/src/iz-mac.c b/src/iz-mac.c
> index 7c1e616..be980d6 100644
> --- a/src/iz-mac.c
> +++ b/src/iz-mac.c
> @@ -253,6 +253,88 @@ static struct iz_cmd_event list_response_event[] = {
> {},
> };
>
> +/******************/
> +/* SET handling */
> +/******************/
> +
> +static iz_res_t set_parse(struct iz_cmd *cmd)
> +{
> + cmd->flags = NLM_F_REQUEST;
> + return IZ_CONT_OK;
> +}
> +
> +static iz_res_t set_request(struct iz_cmd *cmd, struct nl_msg *msg)
> +{
> + char *dummy;
> + uint16_t pan_id, short_addr;
> + uint8_t chan;
> +
> + if (!cmd->argv[1])
> + return IZ_STOP_ERR;
> + NLA_PUT_STRING(msg, IEEE802154_ATTR_DEV_NAME, cmd->argv[1]);
> +
> + if (!cmd->argv[2])
> + return IZ_STOP_ERR;
> + pan_id = strtol(cmd->argv[2], &dummy, 16);
> + if (*dummy) {
> + printf("Bad PAN ID!\n");
> + return IZ_STOP_ERR;
> + }
> + NLA_PUT_U16(msg, IEEE802154_ATTR_COORD_PAN_ID, pan_id);
> +
> + if (!cmd->argv[3])
> + return IZ_STOP_ERR;
> + short_addr = strtol(cmd->argv[3], &dummy, 16);
> + if (*dummy) {
> + printf("Bad short address!\n");
> + return IZ_STOP_ERR;
> + }
> + NLA_PUT_U16(msg, IEEE802154_ATTR_COORD_SHORT_ADDR, short_addr);
> +
> + if (!cmd->argv[4])
> + return IZ_STOP_ERR;
> + chan = strtol(cmd->argv[4], &dummy, 10);
> + if (*dummy) {
> + printf("Bad channel number!\n");
> + return IZ_STOP_ERR;
> + }
> + NLA_PUT_U8(msg, IEEE802154_ATTR_CHANNEL, chan);
> +
> + /* set all unneeded attributes to 0*/
> + NLA_PUT_U8(msg, IEEE802154_ATTR_PAN_COORD, 0);
> + NLA_PUT_U8(msg, IEEE802154_ATTR_BCN_ORD, 0);
> + NLA_PUT_U8(msg, IEEE802154_ATTR_SF_ORD, 0);
> + NLA_PUT_U8(msg, IEEE802154_ATTR_BAT_EXT, 0);
> + NLA_PUT_U8(msg, IEEE802154_ATTR_COORD_REALIGN, 0);
> +
> + return IZ_CONT_OK;
> +
> +nla_put_failure:
> + return IZ_STOP_ERR;
> +}
> +
> +static iz_res_t set_response(struct iz_cmd *cmd, struct genlmsghdr *ghdr,
> struct nlattr **attrs)
> +{
> + if (!attrs[IEEE802154_ATTR_SHORT_ADDR] ||
> + !attrs[IEEE802154_ATTR_STATUS] )
> + return IZ_STOP_ERR;
> +
> + printf("Set PAN ID %04hx, short address %04hx, status %i\n",
> + nla_get_u16(attrs[IEEE802154_ATTR_COORD_PAN_ID]),
> + nla_get_u16(attrs[IEEE802154_ATTR_SHORT_ADDR]),
> + nla_get_u8(attrs[IEEE802154_ATTR_CHANNEL]));
> +
> + return IZ_STOP_OK;
> +}
> +
> +static struct iz_cmd_event set_response_event[] = {
> + {
> + .call = set_response,
> + .nl = IEEE802154_START_CONF,
> + },
> + {},
> +};
> +
> /************************/
> /* ASSOCIATE handling */
> /************************/
> @@ -473,6 +555,15 @@ const struct iz_module iz_mac = {
> .response = list_response_event,
> .finish = list_finish,
> },
> + {
> + .name = "set",
> + .usage = "<iface> <pan> <addr> <channel>",
> + .doc = "Set address, channel and pan for an
> interface.",
> + .nl_cmd = IEEE802154_START_REQ,
> + .parse = set_parse,
> + .request = set_request,
> + .response = set_response_event,
> + },
> {}}
> };
>
Where did this patch come from? Signed-off-by Stefan Schmidt ? If he
wrote it, then it needs to have
From: Name <email>
as the first line of the long description so that git-am will credit him
as the author. git format-patch will generate that for you if he's the
author and you export that commit from git.
Other than that, this patch looks like a good idea.
Alan.
------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_mar
_______________________________________________
Linux-zigbee-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-zigbee-devel