int we_version;
struct nl_handle *nl_handle;
struct nl_cache *nl_cache;
+ struct nl_cb *nl_cb;
struct genl_family *nl80211;
int dtim_period, beacon_int;
unsigned int beacon_set:1;
if (nl_send_auto_complete(drv->nl_handle, msg) < 0 ||
(err = nl_wait_for_ack(drv->nl_handle)) < 0) {
if (err != -ENOENT) {
- err = 0;
+ ret = 0;
goto out;
}
}
if (nl_send_auto_complete(drv->nl_handle, msg) < 0 ||
(err = nl_wait_for_ack(drv->nl_handle)) < 0) {
if (err != -ENOENT) {
- err = 0;
+ ret = 0;
goto out;
}
}
NLA_PUT_U8(msg, NL80211_ATTR_KEY_IDX, idx);
NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, if_nametoindex(iface));
- cb = nl_cb_alloc(NL_CB_CUSTOM);
+ cb = nl_cb_clone(drv->nl_cb);
if (!cb)
goto out;
goto out;
genlmsg_put(msg, 0, 0, genl_family_get_id(drv->nl80211), 0,
- 0, NL80211_CMD_NEW_STATION, 0);
+ 0, NL80211_CMD_DEL_STATION, 0);
/*
* XXX: FIX! this needs to flush all VLANs too
NLA_PUT(msg, NL80211_ATTR_MAC, ETH_ALEN, addr);
NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, if_nametoindex(drv->iface));
- cb = nl_cb_alloc(NL_CB_CUSTOM);
+ cb = nl_cb_clone(drv->nl_cb);
if (!cb)
goto out;
struct nl_msg *msg;
int err = -1;
struct nl_cb *cb = NULL;
- int finished;
+ int finished = 0;
struct phy_info_arg result = {
.num_modes = num_modes,
.modes = NULL,
NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, if_nametoindex(drv->iface));
- cb = nl_cb_alloc(NL_CB_CUSTOM);
+ cb = nl_cb_clone(drv->nl_cb);
if (!cb)
goto out;
/*
* initialise generic netlink and nl80211
*/
- drv->nl_handle = nl_handle_alloc();
+ drv->nl_cb = nl_cb_alloc(NL_CB_DEFAULT);
+ if (!drv->nl_cb) {
+ printf("Failed to allocate netlink callbacks.\n");
+ return -1;
+ }
+
+ drv->nl_handle = nl_handle_alloc_cb(drv->nl_cb);
if (!drv->nl_handle) {
printf("Failed to allocate netlink handle.\n");
return -1;
genl_family_put(drv->nl80211);
nl_cache_free(drv->nl_cache);
nl_handle_destroy(drv->nl_handle);
+ nl_cb_put(drv->nl_cb);
if (drv->if_indices != drv->default_if_indices)
free(drv->if_indices);