[PATCH 08/20] driver: nl80211: handle creation of P2P device interface
Peer, Ilan
ilan.peer
Sun May 19 11:15:08 PDT 2013
> -----Original Message-----
> From: hostap-bounces at lists.shmoo.com [mailto:hostap-
> bounces at lists.shmoo.com] On Behalf Of Arend van Spriel
> Sent: Thursday, May 16, 2013 16:28
> To: Jouni Malinen
> Cc: hostap at lists.shmoo.com
> Subject: [PATCH 08/20] driver: nl80211: handle creation of P2P device interface
>
> Add specific handler for creating the P2P device to store the wdev_id as this
> type of interface does not have an interface index.
>
> Signed-hostap: Arend van Spriel <arend at broadcom.com>
> ---
> src/drivers/driver_nl80211.c | 57
> ++++++++++++++++++++++++++++++++++++------
> 1 file changed, 50 insertions(+), 7 deletions(-)
>
> diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c index
> f185f71..92b8882 100644
> --- a/src/drivers/driver_nl80211.c
> +++ b/src/drivers/driver_nl80211.c
> @@ -4592,10 +4592,15 @@ static int wpa_driver_nl80211_set_key(const char
> *ifname, struct i802_bss *bss,
> const u8 *key, size_t key_len) {
> struct wpa_driver_nl80211_data *drv = bss->drv;
> - int ifindex = if_nametoindex(ifname);
> + int ifindex;
> struct nl_msg *msg;
> int ret;
>
> + /* ignore for P2P Device */
> + if (drv->nlmode == NL80211_IFTYPE_P2P_DEVICE)
> + return 0;
> +
> + ifindex = if_nametoindex(ifname);
> wpa_printf(MSG_DEBUG, "%s: ifindex=%d alg=%d addr=%p key_idx=%d
> "
> "set_tx=%d seq_len=%lu key_len=%lu",
> __func__, ifindex, alg, addr, key_idx, set_tx, @@ -8584,6
> +8589,24 @@ static int nl80211_p2p_interface_addr(struct
> wpa_driver_nl80211_data *drv,
>
> #endif /* CONFIG_P2P */
>
> +static int nl80211_create_p2p_dev_handler(struct nl_msg *msg, void
> +*arg) {
Can't we simply have this for all the interfaces types? Is there something wrong we having to keep wdev in all cases?
> + struct genlmsghdr *gnlh = nlmsg_data(nlmsg_hdr(msg));
> + struct nlattr *tb[NL80211_ATTR_MAX + 1];
> + struct i802_bss *p2p_dev = arg;
> +
> + nla_parse(tb, NL80211_ATTR_MAX, genlmsg_attrdata(gnlh, 0),
> + genlmsg_attrlen(gnlh, 0), NULL);
> + if (tb[NL80211_ATTR_WDEV])
> + p2p_dev->wdev_id =
> + nla_get_u64(tb[NL80211_ATTR_WDEV]);
> +
> + if (tb[NL80211_ATTR_MAC])
> + os_memcpy(p2p_dev->addr,
> + nla_data(tb[NL80211_ATTR_MAC]), ETH_ALEN);
> +
> + return NL_SKIP;
> +}
>
> static int wpa_driver_nl80211_if_add(void *priv, enum wpa_driver_if_type
> type,
> const char *ifname, const u8 *addr, @@ -
> 8591,7 +8614,9 @@ static int wpa_driver_nl80211_if_add(void *priv, enum
> wpa_driver_if_type type,
> char *force_ifname, u8 *if_addr,
> const char *bridge)
> {
> + enum nl80211_iftype nlmode;
> struct i802_bss *bss = priv;
> + struct i802_bss *p2pdev;
> struct wpa_driver_nl80211_data *drv = bss->drv;
> int ifidx;
> #ifdef HOSTAPD
> @@ -8606,14 +8631,32 @@ static int wpa_driver_nl80211_if_add(void *priv,
> enum wpa_driver_if_type type,
>
> if (addr)
> os_memcpy(if_addr, addr, ETH_ALEN);
> - ifidx = nl80211_create_iface(drv, ifname,
> - wpa_driver_nl80211_if_type(type), addr,
> - 0, NULL, NULL);
> - if (ifidx < 0) {
> + nlmode = wpa_driver_nl80211_if_type(type);
> + if (nlmode == NL80211_IFTYPE_P2P_DEVICE) {
> + p2pdev = os_zalloc(sizeof(*p2pdev));
> + if (!p2pdev)
> + return -1;
> + *p2pdev = *bss;
> + os_strncpy(p2pdev->ifname, ifname, IFNAMSIZ);
> + ifidx = nl80211_create_iface(drv, ifname, nlmode, addr,
> + 0,
> nl80211_create_p2p_dev_handler,
> + p2pdev);
> + if (p2pdev->wdev_id == -1 || ifidx != 0 ||
> + is_zero_ether_addr((const u8 *)&p2pdev->addr)) {
> + wpa_printf(MSG_ERROR, "nl80211: Failed to create a
> p2p device"
> + " interface %s", ifname);
> + os_free(p2pdev);
> + return -1;
> + }
> + } else {
> + ifidx = nl80211_create_iface(drv, ifname, nlmode, addr,
> + 0, NULL, NULL);
> + if (ifidx < 0) {
> #ifdef HOSTAPD
> - os_free(new_bss);
> + os_free(new_bss);
> #endif /* HOSTAPD */
> - return -1;
> + return -1;
> + }
> }
>
> if (!addr &&
> --
> 1.7.10.4
>
>
> _______________________________________________
> HostAP mailing list
> HostAP at lists.shmoo.com
> http://lists.shmoo.com/mailman/listinfo/hostap
More information about the Hostap
mailing list