[EXT] Re: [PATCH v7 2/2] Add the similar USD APIs to dbus control interface that other apps can use the functions

Chin-Ran Lo chin-ran.lo at nxp.com
Thu Sep 5 06:06:54 PDT 2024


Hi Jouni,
Thank you for the suggestions. I have modified as you suggested and posted the new patches. 
Could you help to review?
Thank you.

Chin-Ran

> -----Original Message-----
> From: Jouni Malinen <j at w1.fi>
> Sent: Thursday, August 29, 2024 4:34 PM
> To: Chin-Ran Lo <chin-ran.lo at nxp.com>
> Cc: hostap at lists.infradead.org; Pete Hsieh <tsung-hsien.hsieh at nxp.com>
> Subject: [EXT] Re: [PATCH v7 2/2] Add the similar USD APIs to dbus control
> interface that other apps can use the functions
> 
> Caution: This is an external email. Please take care when clicking links or
> opening attachments. When in doubt, report the message using the 'Report
> this email' button
> 
> 
> On Fri, Aug 23, 2024 at 09:41:19AM +0000, Chin-Ran Lo wrote:
> > diff --git a/doc/dbus.doxygen b/doc/dbus.doxygen
> 
> > +     <h3>NANPublish ( (sybbbqbbbqqqqvv) : nan_args ) --> nothing</h3>
> > +     <p>Set the parameters of nan-publish for the interface.</p>
> 
> This looks very different style from existing methods. Could you please clarify
> the reasoning behind this vs. the "a{sv} : args" style used in many existing
> methods? For example, see how the Scan() method is used with a large
> number of optional named arguments in a dictionary.

Chin-Ran> It's changed in the latest patch


> 
> That "--> nothing" part looks incorrect. Isn't this returning "publish_id : i"?
> 
> > +     <h3>NANCancelPublish ( i : nan_args ) --> nothing</h3>
> 
> Calling that nan_args feels unnecessarily confusing when this is publish_id
> from NANPublish.

Chin-Ran> It's because nan_de_cancel_publish() needs publish_id. I think dbus should just pass down what the required parameters the engine requested.


> 
> What about the new signals? It would be good to document them in
> dbus.doxygen.

Chin-Ran> They are added

> 
> > diff --git a/src/common/nan_de.h b/src/common/nan_de.h @@ -96,7 +96,7
> > @@ struct nan_publish_params {
> >       unsigned int freq;
> >
> >       /* Multi-channel frequencies (publishChannelList) */
> > -     const int *freq_list;
> > +     int *freq_list;
> 
> Why?

Chin-Ran> It's unexpected. I have rolled it back.


> 
> > diff --git a/wpa_supplicant/dbus/dbus_new.c
> > b/wpa_supplicant/dbus/dbus_new.c @@ -3605,6 +3605,52 @@ static const
> > struct wpa_dbus_method_desc wpas_dbus_interface_methods[] = {
> 
> > +#ifdef CONFIG_NAN_USD
> > +     { "NANPublish", WPAS_DBUS_NEW_IFACE_INTERFACE,
> > +       (WPADBusMethodHandler) wpas_dbus_handler_nan_publish,
> > +       {
> > +               { "nan_args", "(sybbbqbbbqqqqvv)", ARG_IN },
> > +               { "publish_id", "i", ARG_OUT },
> > +               END_ARGS
> > +       }
> > +     },
> > +     { "NANCancelPublish", WPAS_DBUS_NEW_IFACE_INTERFACE,
> > +       (WPADBusMethodHandler)
> wpas_dbus_handler_nan_cancel_publish,
> > +       {
> > +               { "nan_args", "i", ARG_IN },
> > +               END_ARGS
> > +       }
> > +     },
> 
> The comments above on dbus.doxygen applies here as well..

Chin-Ran> It's changed in the latest patch

> 
> > @@ -3983,6 +4029,38 @@ static const struct wpa_dbus_signal_desc
> > wpas_dbus_interface_signals[] = {
> > +#ifdef CONFIG_NAN_USD
> > +     { "NANDiscoveryresult", WPAS_DBUS_NEW_IFACE_INTERFACE,
> 
> And these are the undocumented signals..
> 
> I would use upper case 'r' in Result here, i.e., NANDiscoveryResult.
> 

Chin-Ran> It's added / changed in the latest patch

> > +     { "NanPublishterminated", WPAS_DBUS_NEW_IFACE_INTERFACE,
> 
> Why would this use inconsistent spelling of NAN? I would uses
> "NANPublishTerminated"
> 

Chin-Ran> It's changed in the latest patch


> > +     { "NanSubscribeterminated", WPAS_DBUS_NEW_IFACE_INTERFACE,
> 
> and "NANSubscribeTerminated".
> 

Chin-Ran> It's changed in the latest patch

> And this list of signals seems to be missing "NANReplied".
> 

Chin-Ran> It's added in the latest patch

> > +void wpas_dbus_signal_nan_discovery_result(struct wpa_supplicant
> > +*wpa_s,
> 
> > +     msg = dbus_message_new_signal(wpa_s->dbus_new_path,
> > +
> WPAS_DBUS_NEW_IFACE_INTERFACE,
> > +                                   "NanDiscoveryresult");
> 
> That name is not consistent with the list of signals, i.e., this should be
> "NANDiscoveryResult".

Chin-Ran> It's changed in the latest patch

> 
> > +void wpas_dbus_signal_nan_replied(struct wpa_supplicant *wpa_s,
> 
> > +     wpa_printf(MSG_INFO, "DBUS NanReplied");
> 
> I would not add that print at INFO level here.

Chin-Ran> It's removed in the latest patch

> 
> > +     msg = dbus_message_new_signal(wpa_s->dbus_new_path,
> > +
> WPAS_DBUS_NEW_IFACE_INTERFACE,
> > +                                   "NanReplied");
> 
> The name should be "NANReplied" to be consistent with other methods and
> signals.

Chin-Ran> It's changed in the latest patch

> 
> > +     memcpy(reply_info.peer_addr, peer_addr, ETH_ALEN);
> 
> Please use os_memcpy() instead of memcpy().
> 
Chin-Ran> It's fixed in the latest patch


> > +void wpas_dbus_signal_nan_receive(struct wpa_supplicant *wpa_s,
> 
> > +     msg = dbus_message_new_signal(wpa_s->dbus_new_path,
> > +
> WPAS_DBUS_NEW_IFACE_INTERFACE,
> > +                                   "NanReceive");
> 
> "NANReceive"
> 

Chin-Ran> It's changed in the latest patch

> > +void wpas_dbus_signal_nan_publish_terminated(struct wpa_supplicant
> *wpa_s,
> > +                                          int publish_id, int
> reason)
> 
> > +     msg = dbus_message_new_signal(wpa_s->dbus_new_path,
> > +
> WPAS_DBUS_NEW_IFACE_INTERFACE,
> > +                                   "NanPublishterminated");
> 
> "NANPublishTerminated"
> 
> > +     if (!dbus_message_append_args(msg, DBUS_TYPE_INT32, &dpub_id,
> > +                                  DBUS_TYPE_INVALID) ||
> > +             !dbus_message_append_args(msg, DBUS_TYPE_INT32,
> &dreason,
> > +                                  DBUS_TYPE_INVALID))
> > +             wpa_printf(MSG_ERROR, "dbus: Failed to construct
> signal");
> > +     else {
> > +             dbus_connection_send(iface->con, msg, NULL);
> > +             wpa_msg(wpa_s, MSG_INFO,
> NAN_SUBSCRIBE_TERMINATED
> > +                     "wpas_dbus_signal_nan_subscribe_terminated()
> dbus_connection_send (int)");
> > +     }
> 
> Why would the D-Bus interface implementation send out that control interface
> NAN_SUBSCRIBE_TERMINATED event with wpa_msg()? Please remove it.
> wpa_printf() could be used for debug prints, but I don't see need for this entry
> on success.

Chin-Ran> It's removed in the latest patch

> 
> > +void wpas_dbus_signal_nan_subscribe_terminated(struct wpa_supplicant
> > +*wpa_s,
> 
> > +     msg = dbus_message_new_signal(wpa_s->dbus_new_path,
> > +
> WPAS_DBUS_NEW_IFACE_INTERFACE,
> > +                                   "NanSubscribeterminated");
> 
> "NANSubscribeTerminated"
> 

Chin-Ran> It's changed in the latest patch


> > +     if (!dbus_message_append_args(msg, DBUS_TYPE_INT32, &dsub_id,
> > +                                  DBUS_TYPE_INVALID) ||
> > +             !dbus_message_append_args(msg, DBUS_TYPE_INT32,
> &dreason,
> > +                                  DBUS_TYPE_INVALID))
> > +             wpa_printf(MSG_ERROR, "dbus: Failed to construct
> signal");
> > +     else {
> > +             dbus_connection_send(iface->con, msg, NULL);
> > +             wpa_msg(wpa_s, MSG_INFO,
> NAN_SUBSCRIBE_TERMINATED
> > +                     "wpas_dbus_signal_nan_subscribe_terminated()
> dbus_connection_send (int)");
> > +     }
> 
> Same here about wpa_msg().

Chin-Ran> It's removed in the latest patch


> 
> > diff --git a/wpa_supplicant/dbus/dbus_new.h
> > b/wpa_supplicant/dbus/dbus_new.h
> > +++ b/wpa_supplicant/dbus/dbus_new.h
> > @@ -21,6 +21,7 @@ struct wpa_bss;
> >  struct wps_event_m2d;
> >  struct wps_event_fail;
> >  struct wps_credential;
> > +struct wpa_dbus_discov_info;
> 
> Why?

Chin-Ran> It's unexpected and removed in the latest patch

> 
> > diff --git a/wpa_supplicant/dbus/dbus_new_handlers.c
> > b/wpa_supplicant/dbus/dbus_new_handlers.c
> 
> > +#define MAX_NAN_SRV_NAME_LEN         256
> > +#define NAN_FREQ_LIST_ALL            0xff
> 
> That second name and use of hex looks strange here since
> NAN_FREQ_LIST_ALL is used as the maximum number of frequencies. Why not
> "MAX_NAN_FREQS 255" to be consistent with the other limit?
> 

Chin-Ran> It's changed in the latest patch


> Is there particular need for these explicit limits?
> 
> > +int unit_len(int dbus_type)
> 
> That should be a static function since it is not used outside this file.
> 
> > +{
> > +     switch (dbus_type) {
> > +             case DBUS_TYPE_BYTE:
> > +             case DBUS_TYPE_BOOLEAN:
> > +                     return 1;
> > +             case DBUS_TYPE_INT16:
> > +             case DBUS_TYPE_UINT16:
> > +                     return 2;
> > +             case DBUS_TYPE_INT32:
> > +             case DBUS_TYPE_UINT32:
> > +                     return 4;
> > +             case DBUS_TYPE_INT64:
> > +             case DBUS_TYPE_UINT64:
> > +             case DBUS_TYPE_DOUBLE:
> > +                     return 8;
> > +     }
> > +     return 0;
> > +}
> 
> I don't really like this at all.. Isn't there any shared function from the library to
> get this information? Then again, I don't think this should be needed at all
> since the overall design with fixed sequence of arguments looks really
> inconvenient.
> 

Chin-Ran> It's removed in the latest patch, since the parameters are different


> > +static bool get_gvariant_items(DBusMessageIter *piter, int type,
> > +void* datpt, u32 dat_buf_len)
> 
> Why would this be needed? Wouldn't it be much more flexible and future proof
> to use an array with a dictionary of named arguments like more or less all
> other methods taking in multiple optional values use?
> 
> > +DBusMessage * wpas_dbus_handler_nan_publish(DBusMessage *message,
> > +                                         struct wpa_supplicant
> > +*wpa_s)
> 
> > +     // Extract the elements
> > +     if (get_gvariant_items(&subiter, DBUS_TYPE_STRING,
> (void*)&psrv_name, sizeof(&psrv_name)) == false) {
> > +             wpa_printf(MSG_ERROR, "Error while fetching srv_name");
> > +             goto fail;
> > +     }
> 
> Isn't this style of get_gvariant_items() calls forcing all the arguments to be
> present and in the exact this order? That seems to make this way too strict and
> inconvenient to use. Dictionary of named arguments seems to be much
> cleaner approach.

Chin-Ran> It's changed in the latest patch


> 
> > +     strncpy(service_name, psrv_name, MAX_NAN_SRV_NAME_LEN-1);
> 
> That could result in a truncated string. wpa_dbus_dict_*() helpers would
> provide all the needed code to take care of this type of details and would also
> get rid of the explicit MAX_NAN_SRV_NAME_LEN length limit.
> 

Chin-Ran> It's changed in the latest patch

> --
> Jouni Malinen                                            PGP id
> EFC895FA



More information about the Hostap mailing list