Summary on all the patchset below.

Prajosh, Felix. Thanks for your work on IEEE 802.15.4 for Linux. Please
don't find my mails as discouraging or otherwise demoting your work.
There are some coding standards. There are some ideas behind code. There
is more than just blindly following standard text letter by letter.

First, your mixup of terms PIB and MIB leads to confusion. Then I see
lots defines which are not useful (because nobody implements respective
pieces of code (GTS comes to my mind). Then I see lots of code which is
not hooked one into another. Just a sample: you add a reset_req MLME
callback. Good. It has SetDefaultPIB attribute. I cannot understand if
it is really used, or it is just a c&p from standard text as I see no
corresponding callback implementation. Then I see mlme_reset_def
function. Which (as far as as I can understand) is not used also. I
cannot find code which calls that function. Please make your submissions
complete from the implementation POV. If you have a callback, please
provide an implementation. If you have a function, it should be called
somewhere. If you add a constant, it should be usefull, so that there is
code which uses that constant values. And not only to return predefined
value to the userspace.

On 24/02/12 13:02, Prajosh Premdas wrote:
> mlme reset functionality has been added for netlink socket interface
> attributes mentioned are as per the IEEE 802.15.4 - 2006 specification
> 
> Tested on SAM9G20-EK board
> 
> Signed-off-by: Prajosh Premdas <premdas.praj...@gmail.com>
> ---
>  include/linux/nl802154.h        |    2 +
>  include/net/ieee802154_netdev.h |    2 +
>  include/net/nl802154.h          |    9 ++++++
>  net/ieee802154/nl-mac.c         |   57 +++++++++++++++++++++++++++++++++++++-
>  net/ieee802154/nl_policy.c      |    2 +
>  5 files changed, 70 insertions(+), 2 deletions(-)
> 
> diff --git a/include/linux/nl802154.h b/include/linux/nl802154.h
> index fbd0fdf..69fe03a 100644
> --- a/include/linux/nl802154.h
> +++ b/include/linux/nl802154.h
> @@ -70,6 +70,8 @@ enum {
>       IEEE802154_ATTR_PHY_NAME,
>       IEEE802154_ATTR_DEV_TYPE,
>  
> +     IEEE802154_ATTR_SET_DEFAULT_PIB,
> +
>       __IEEE802154_ATTR_MAX,
>  };
>  
> diff --git a/include/net/ieee802154_netdev.h b/include/net/ieee802154_netdev.h
> index b27730e..25cb045 100644
> --- a/include/net/ieee802154_netdev.h
> +++ b/include/net/ieee802154_netdev.h
> @@ -92,6 +92,8 @@ struct wpan_phy;
>   * So 2 sets of mlme operations are needed
>   */
>  struct ieee802154_mlme_ops {
> +     int (*reset_req)(struct net_device *dev,
> +                      u8 SetDefaultPIB);
>       int (*assoc_req)(struct net_device *dev,
>                       struct ieee802154_addr *addr,
>                       u8 channel, u8 page, u8 cap);
> diff --git a/include/net/nl802154.h b/include/net/nl802154.h
> index 99d2ba1..23c2302 100644
> --- a/include/net/nl802154.h
> +++ b/include/net/nl802154.h
> @@ -123,4 +123,13 @@ int ieee802154_nl_beacon_indic(struct net_device *dev, 
> u16 panid,
>   */
>  int ieee802154_nl_start_confirm(struct net_device *dev, u8 status);
>  
> +/**
> + * ieee802154_reset_confirm - Notify userland of completion of reset.
> + * @dev: The device which was instructed to scan.
> + * @status: The status of the scan operation.
> + *
> + * Note: This is in section 7.1.9.2 of the IEEE 802.15.4 document.
> + */
> +int ieee802154_reset_confirm(struct net_device *dev, u8 status);
> +
>  #endif
> diff --git a/net/ieee802154/nl-mac.c b/net/ieee802154/nl-mac.c
> index adaf462..2ace28b 100644
> --- a/net/ieee802154/nl-mac.c
> +++ b/net/ieee802154/nl-mac.c
> @@ -1,8 +1,6 @@
>  /*
>   * Netlink inteface for IEEE 802.15.4 stack
>   *
> - * Copyright 2007, 2008 Siemens AG
> - *
>   * This program is free software; you can redistribute it and/or modify
>   * it under the terms of the GNU General Public License version 2
>   * as published by the Free Software Foundation.
> @@ -20,6 +18,8 @@
>   * Sergey Lapin <sla...@ossfans.org>
>   * Dmitry Eremin-Solenikov <dbarysh...@gmail.com>
>   * Maxim Osipov <maxim.osi...@siemens.com>
> + * Felix Varghese <felix.vargh...@atmel.com>
> + * Prajosh Premdas <prajosh.prem...@atmel.com>
>   */
>  
>  #include <linux/gfp.h>
> @@ -519,6 +519,58 @@ static int ieee802154_scan_req(struct sk_buff *skb, 
> struct genl_info *info)
>       return ret;
>  }
>  
> +static int ieee802154_reset_req(struct sk_buff *skb, struct genl_info *info)
> +{
> +     struct net_device *dev;
> +     u8 SetDefaultPIB;
> +     int ret = -EINVAL;
> +
> +     if (!info->attrs[IEEE802154_ATTR_SET_DEFAULT_PIB])
> +             return -EINVAL;
> +
> +     dev = ieee802154_nl_get_dev(info);
> +     if (!dev)
> +             return -ENODEV;
> +
> +     if (nla_get_u8(info->attrs[IEEE802154_ATTR_SET_DEFAULT_PIB]))
> +             SetDefaultPIB = 1;
> +     else
> +             SetDefaultPIB = 0;
> +
> +     ret = ieee802154_mlme_ops(dev)->reset_req(dev, SetDefaultPIB);
> +
> +     if (ret == 0)
> +             ieee802154_reset_confirm(dev, IEEE802154_SUCCESS);
> +     else
> +             ieee802154_reset_confirm(dev, IEEE802154_INVALID_PARAMETER);
> +
> +     dev_put(dev);
> +     return ret;
> +}
> +
> +int ieee802154_reset_confirm(struct net_device *dev, u8 status)
> +{
> +     struct sk_buff *msg;
> +
> +     msg = ieee802154_nl_create(0, IEEE802154_RESET_CONF);
> +     if (!msg)
> +             return -ENOBUFS;
> +
> +     NLA_PUT_STRING(msg, IEEE802154_ATTR_DEV_NAME, dev->name);
> +     NLA_PUT_U32(msg, IEEE802154_ATTR_DEV_INDEX, dev->ifindex);
> +     NLA_PUT(msg, IEEE802154_ATTR_HW_ADDR, IEEE802154_ADDR_LEN,
> +                     dev->dev_addr);
> +
> +     NLA_PUT_U8(msg, IEEE802154_ATTR_STATUS, status);
> +
> +     return ieee802154_nl_mcast(msg, ieee802154_coord_mcgrp.id);
> +
> +nla_put_failure:
> +     nlmsg_free(msg);
> +     return -ENOBUFS;
> +}
> +EXPORT_SYMBOL(ieee802154_reset_confirm);
> +
>  static int ieee802154_list_iface(struct sk_buff *skb,
>       struct genl_info *info)
>  {
> @@ -581,6 +633,7 @@ cont:
>  }
>  
>  static struct genl_ops ieee802154_coordinator_ops[] = {
> +     IEEE802154_OP(IEEE802154_RESET_REQ, ieee802154_reset_req),
>       IEEE802154_OP(IEEE802154_ASSOCIATE_REQ, ieee802154_associate_req),
>       IEEE802154_OP(IEEE802154_ASSOCIATE_RESP, ieee802154_associate_resp),
>       IEEE802154_OP(IEEE802154_DISASSOCIATE_REQ, ieee802154_disassociate_req),
> diff --git a/net/ieee802154/nl_policy.c b/net/ieee802154/nl_policy.c
> index 6adda4d..9da1d72 100644
> --- a/net/ieee802154/nl_policy.c
> +++ b/net/ieee802154/nl_policy.c
> @@ -52,5 +52,7 @@ const struct nla_policy 
> ieee802154_policy[IEEE802154_ATTR_MAX + 1] = {
>       [IEEE802154_ATTR_DURATION] = { .type = NLA_U8, },
>       [IEEE802154_ATTR_ED_LIST] = { .len = 27 },
>       [IEEE802154_ATTR_CHANNEL_PAGE_LIST] = { .len = 32 * 4, },
> +
> +     [IEEE802154_ATTR_SET_DEFAULT_PIB] = { .type = NLA_U8, },
>  };
>  


------------------------------------------------------------------------------
Virtualization & Cloud Management Using Capacity Planning
Cloud computing makes use of virtualization - but cloud computing 
also focuses on allowing computing to be delivered as a service.
http://www.accelacomm.com/jaw/sfnl/114/51521223/
_______________________________________________
Linux-zigbee-devel mailing list
Linux-zigbee-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-zigbee-devel

Reply via email to