]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
Include connected time in AP mode STA-* commands
authorRaja Mani <rmani@qca.qualcomm.com>
Wed, 26 Sep 2012 10:52:19 +0000 (13:52 +0300)
committerJouni Malinen <j@w1.fi>
Wed, 26 Sep 2012 10:52:19 +0000 (13:52 +0300)
This allows hostapd_cli and wpa_cli all_sta command to be used to
display connected time (in seconds) of each station in AP mode.

Signed-hostap: Raja Mani <rmani@qca.qualcomm.com>

src/ap/ctrl_iface_ap.c
src/ap/hostapd.c
src/ap/ieee802_1x.c
src/ap/sta_info.h

index ab9c83eb859d10169d73e132459ab99bb8bad996..c55d3fe32a616965da5220b9e96e35a29b674c23 100644 (file)
 #include "ap_drv_ops.h"
 
 
+static int hostapd_get_sta_conn_time(struct sta_info *sta,
+                                    char *buf, size_t buflen)
+{
+       struct os_time now, age;
+       int len = 0, ret;
+
+       if (!sta->connected_time.sec)
+               return 0;
+
+       os_get_time(&now);
+       os_time_sub(&now, &sta->connected_time, &age);
+
+       ret = os_snprintf(buf + len, buflen - len, "connected_time=%u\n",
+                         (unsigned int) age.sec);
+       if (ret < 0 || (size_t) ret >= buflen - len)
+               return len;
+       len += ret;
+
+       return len;
+}
+
+
 static int hostapd_ctrl_iface_sta_mib(struct hostapd_data *hapd,
                                      struct sta_info *sta,
                                      char *buf, size_t buflen)
@@ -58,6 +80,10 @@ static int hostapd_ctrl_iface_sta_mib(struct hostapd_data *hapd,
        if (res >= 0)
                len += res;
 
+       res = hostapd_get_sta_conn_time(sta, buf + len, buflen - len);
+       if (res >= 0)
+               len += res;
+
        return len;
 }
 
index 34292587e944fa772c79b18321f27f73fcc86474..61fd776a85c7b8d67a2e532795600653bd7b4172 100644 (file)
@@ -1373,8 +1373,10 @@ void hostapd_new_assoc_sta(struct hostapd_data *hapd, struct sta_info *sta,
        /* Start accounting here, if IEEE 802.1X and WPA are not used.
         * IEEE 802.1X/WPA code will start accounting after the station has
         * been authorized. */
-       if (!hapd->conf->ieee802_1x && !hapd->conf->wpa)
+       if (!hapd->conf->ieee802_1x && !hapd->conf->wpa) {
+               os_get_time(&sta->connected_time);
                accounting_sta_start(hapd, sta);
+       }
 
        /* Start IEEE 802.1X authentication process for new stations */
        ieee802_1x_new_station(hapd, sta);
index 745ce9317ae49d8708f274524dded7d33d238b55..e87431ef1dcba5255bcd1ea254067a80cfaac639 100644 (file)
@@ -99,8 +99,10 @@ void ieee802_1x_set_sta_authorized(struct hostapd_data *hapd,
                       "driver (errno=%d).\n", MAC2STR(sta->addr), errno);
        }
 
-       if (authorized)
+       if (authorized) {
+               os_get_time(&sta->connected_time);
                accounting_sta_start(hapd, sta);
+       }
 }
 
 
index b3c57b4354b2166740a60cb6756a9f7bd580cca3..91d6b34ce5a3874c3329b138b51a1b6f2700f380 100644 (file)
@@ -121,6 +121,8 @@ struct sta_info {
 
        struct wpabuf *wps_ie; /* WPS IE from (Re)Association Request */
        struct wpabuf *p2p_ie; /* P2P IE from (Re)Association Request */
+
+       struct os_time connected_time;
 };