Example #1
0
static int join_mesh(struct nl80211_state *state, struct nl_cb *cb,
		     struct nl_msg *msg, int argc, char **argv)
{
	if (argc < 1)
		return 1;

	NLA_PUT(msg, NL80211_ATTR_MESH_ID, strlen(argv[0]), argv[0]);
	argc--;
	argv++;

	if (!argc)
		return 0;
	return set_interface_meshparam(state, cb, msg, argc, argv);
 nla_put_failure:
	return -ENOBUFS;
}
Example #2
0
static int join_mesh(struct nl80211_state *state, struct nl_cb *cb,
                     struct nl_msg *msg, int argc, char **argv,
                     enum id_input id)
{
    struct nlattr *container;
    float rate;
    int bintval, dtim_period;
    char *end;

    if (argc < 1)
        return 1;

    NLA_PUT(msg, NL80211_ATTR_MESH_ID, strlen(argv[0]), argv[0]);
    argc--;
    argv++;

    if (argc > 1 && strcmp(argv[0], "mcast-rate") == 0) {
        argv++;
        argc--;

        rate = strtod(argv[0], &end);
        if (*end != '\0')
            return 1;

        NLA_PUT_U32(msg, NL80211_ATTR_MCAST_RATE, (int)(rate * 10));
        argv++;
        argc--;
    }

    if (argc > 1 && strcmp(argv[0], "beacon-interval") == 0) {
        argc--;
        argv++;

        bintval = strtoul(argv[0], &end, 10);
        if (*end != '\0')
            return 1;

        NLA_PUT_U32(msg, NL80211_ATTR_BEACON_INTERVAL, bintval);
        argv++;
        argc--;
    }

    if (argc > 1 && strcmp(argv[0], "dtim-period") == 0) {
        argc--;
        argv++;

        dtim_period = strtoul(argv[0], &end, 10);
        if (*end != '\0')
            return 1;

        NLA_PUT_U32(msg, NL80211_ATTR_DTIM_PERIOD, dtim_period);
        argv++;
        argc--;
    }

    container = nla_nest_start(msg, NL80211_ATTR_MESH_SETUP);
    if (!container)
        return -ENOBUFS;

    if (argc > 1 && strcmp(argv[0], "vendor_sync") == 0) {
        argv++;
        argc--;
        if (strcmp(argv[0], "on") == 0)
            NLA_PUT_U8(msg,
                       NL80211_MESH_SETUP_ENABLE_VENDOR_SYNC, 1);
        else
            NLA_PUT_U8(msg,
                       NL80211_MESH_SETUP_ENABLE_VENDOR_SYNC, 0);
        argv++;
        argc--;
    }
    /* parse and put other NL80211_ATTR_MESH_SETUP elements here */

    nla_nest_end(msg, container);

    if (!argc)
        return 0;
    return set_interface_meshparam(state, cb, msg, argc, argv, id);
nla_put_failure:
    return -ENOBUFS;
}