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 <ste...@datenfreihafen.org> > --- > 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 Linux-zigbee-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-zigbee-devel